[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: g1eny0ung # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "content": "name: Bug report\ndescription: Create a report to help us improve\ntitle: '[Bug]: '\nlabels:\n  - bug\nassignees:\n  - g1eny0ung\nbody:\n  - type: input\n    id: version\n    attributes:\n      label: Version\n      description: What version of Dream are you using?\n      placeholder: v3.x.x or master\n    validations:\n      required: true\n  - type: dropdown\n    id: browsers\n    attributes:\n      label: What browsers are you seeing the problem on?\n      multiple: true\n      options:\n        - Chrome\n        - Firefox\n        - Safari\n        - Microsoft Edge\n  - type: textarea\n    id: bug\n    attributes:\n      label: Describe the bug\n      description: A clear and concise description of what the bug is.\n    validations:\n      required: true\n  - type: textarea\n    id: reproduce\n    attributes:\n      label: To Reproduce\n      description: Steps to reproduce the behavior.\n      placeholder: |\n        You can also include screenshots or any other relevant information here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yaml",
    "content": "name: Feature request\ndescription: Suggest an idea for this project\ntitle: '[Feature]: '\nlabels:\n  - feature\nassignees:\n  - g1eny0ung\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        > [!TIP]\n        > Thanks for suggesting a feature! Please fill out the sections below to help us understand your request better.\n        >\n        > If you have a question or need help, please open a discussion instead.\n  - type: textarea\n    id: feature\n    attributes:\n      label: Feature request\n      description: Please describe the feature you'd like to see added to the project.\n      placeholder: I'd like to see [...]\n    validations:\n      required: true\n  - type: textarea\n    id: solution\n    attributes:\n      label: Proposed solution\n      description: Please describe a possible solution to the feature request.\n      placeholder: I think we could [...]\n  - type: textarea\n    id: context\n    attributes:\n      label: Additional context\n      description: Add any other context or screenshots about the feature request here.\n      placeholder: I have an idea [...]\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "# Sample workflow for building and deploying a Next.js site to GitHub Pages\n#\n# To get started with Next.js see: https://nextjs.org/docs/getting-started\n#\nname: Deploy docs to Pages\n\non:\n  # Runs on pushes targeting the default branch\n  push:\n    branches: ['master']\n    paths:\n      - 'docs/**'\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: 'pages'\n  cancel-in-progress: false\n\njobs:\n  # Build job\n  build:\n    runs-on: ubuntu-latest\n    defaults:\n      run:\n        working-directory: docs\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - uses: pnpm/action-setup@v4\n        with:\n          version: 8\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n          cache: 'pnpm'\n          cache-dependency-path: 'docs/pnpm-lock.yaml'\n\n      - name: Restore cache\n        uses: actions/cache@v4\n        with:\n          path: |\n            docs/.next/cache\n          key: ${{ runner.os }}-nextjs-${{ hashFiles('docs/pnpm-lock.yaml') }}\n          restore-keys: |\n            ${{ runner.os }}-nextjs-\n\n      - run: pnpm install\n      - name: Build\n        run: pnpm run build\n\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v3\n        with:\n          path: './docs/out'\n\n  # Deployment job\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v4\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\nnode_modules\npackage-lock.json\nyarn.lock\n\ndocs/.next\ndocs/out\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": false,\n  \"singleQuote\": true,\n  \"printWidth\": 120\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Yue Yang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# 🌱 hugo-theme-dream\n\n![GitHub Release](https://img.shields.io/github/v/release/g1eny0ung/hugo-theme-dream)\n![GitHub License](https://img.shields.io/github/license/g1eny0ung/hugo-theme-dream)\n\n> [!IMPORTANT]\n> The latest version of Dream is v3.x.\n>\n> If you are using v2.x, please check the [v2 branch](https://github.com/g1eny0ung/hugo-theme-dream/tree/v2) and its [docs](https://hugo-theme-dream-docs-v2.netlify.app/).\n\n- [Intro](#intro)\n- [Documentation](#documentation)\n- [Examples](#examples)\n- [Publish your site](#publish-your-site)\n\n## Intro\n\nDream is a [Hugo](https://gohugo.io/) theme. I build it for [my blog](https://g1en.site).\n\nThe main features are **Masonry Layout Posts** and **Flippable About Page**.\n\nDream also supports **light and dark mode** out of the box.\n\n![Screenshot](https://github.com/g1eny0ung/hugo-theme-dream/blob/master/images/screenshot.png?raw=true)\n\nFor people who prefer a simple and clean interface,\nDream has a [**Zen mode**](https://hugo-theme-dream.g1en.site/zen-mode).\nIt is more concentrated on reading and writing.\n\n<img src=\"https://github.com/g1eny0ung/hugo-theme-dream/blob/master/docs/public/images/zen-mode.png?raw=true\" alt=\"Zen Mode\" height=\"500\" />\n\n## Documentation\n\n<https://hugo-theme-dream.g1en.site>\n\n## Examples\n\n- [My blog](https://g1en.site) and its [source code](https://github.com/g1eny0ung/blog)\n- [A demo of Zen mode](https://g1en-site-zen-mode-preview.netlify.app/)\n\n## Publish your site\n\nSee [Hosting & Deployment](https://gohugo.io/hosting-and-deployment/).\n\n## License\n\n🌱 Hugo Theme Dream is licensed under the MIT License.\n\nAuthor: [g1eny0ung](https://github.com/g1eny0ung).\n"
  },
  {
    "path": "archetypes/about.md",
    "content": "---\ntitle: {{ replace .TranslationBaseName \"-\" \" \" | title }}\ndate: {{ .Date }}\ndraft: true\n---\n"
  },
  {
    "path": "archetypes/posts/index.md",
    "content": "---\ntitle: {{ replace .File.ContentBaseName \"-\" \" \" | title }}\ndate: {{ .Date }}\nlastmod: {{ .Date }}\nauthor: Author Name\n# avatar: /img/author.jpg\n# authorlink: https://author.site\ncover: /img/cover.jpg\n# images:\n#   - /img/cover.jpg\ncategories:\n  - category1\ntags:\n  - tag1\n  - tag2\n# nolastmod: true\ndraft: true\n---\n\nCut out summary from your post content here.\n\n<!--more-->\n\nThe remaining content of your post.\n"
  },
  {
    "path": "archetypes/posts.md",
    "content": "---\ntitle: {{ replace .File.ContentBaseName \"-\" \" \" | title }}\ndate: {{ .Date }}\nlastmod: {{ .Date }}\nauthor: Author Name\n# avatar: /img/author.jpg\n# authorlink: https://author.site\ncover: /img/cover.jpg\n# covercaption: a description of the cover image\n# images:\n#   - /img/cover.jpg\ncategories:\n  - category1\ntags:\n  - tag1\n  - tag2\n# nolastmod: true\n# math: true\ndraft: true\n---\n\nCut out summary from your post content here.\n\n<!--more-->\n\nThe remaining content of your post.\n"
  },
  {
    "path": "assets/css/output.css",
    "content": "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n  :root, :host {\n    --font-sans: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\",\n      \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n    --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n      \"Courier New\", monospace;\n    --color-red-500: oklch(63.7% 0.237 25.331);\n    --color-red-600: oklch(57.7% 0.245 27.325);\n    --color-yellow-500: oklch(79.5% 0.184 86.047);\n    --color-yellow-600: oklch(68.1% 0.162 75.834);\n    --color-green-500: oklch(72.3% 0.219 149.579);\n    --color-green-600: oklch(62.7% 0.194 149.214);\n    --color-blue-500: oklch(62.3% 0.214 259.815);\n    --color-blue-600: oklch(54.6% 0.245 262.881);\n    --color-purple-500: oklch(62.7% 0.265 303.9);\n    --color-purple-600: oklch(55.8% 0.288 302.321);\n    --color-black: #000;\n    --spacing: 0.25rem;\n    --text-xs: 0.75rem;\n    --text-xs--line-height: calc(1 / 0.75);\n    --text-sm: 0.875rem;\n    --text-sm--line-height: calc(1.25 / 0.875);\n    --text-lg: 1.125rem;\n    --text-lg--line-height: calc(1.75 / 1.125);\n    --text-xl: 1.25rem;\n    --text-xl--line-height: calc(1.75 / 1.25);\n    --text-2xl: 1.5rem;\n    --text-2xl--line-height: calc(2 / 1.5);\n    --text-3xl: 1.875rem;\n    --text-3xl--line-height: calc(2.25 / 1.875);\n    --font-weight-normal: 400;\n    --font-weight-medium: 500;\n    --font-weight-semibold: 600;\n    --radius-lg: 0.5rem;\n    --default-font-family: var(--font-sans);\n    --default-mono-font-family: var(--font-mono);\n  }\n}\n@layer base {\n  *, ::after, ::before, ::backdrop, ::file-selector-button {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n    border: 0 solid;\n  }\n  html, :host {\n    line-height: 1.5;\n    -webkit-text-size-adjust: 100%;\n    tab-size: 4;\n    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\");\n    font-feature-settings: var(--default-font-feature-settings, normal);\n    font-variation-settings: var(--default-font-variation-settings, normal);\n    -webkit-tap-highlight-color: transparent;\n  }\n  hr {\n    height: 0;\n    color: inherit;\n    border-top-width: 1px;\n  }\n  abbr:where([title]) {\n    -webkit-text-decoration: underline dotted;\n    text-decoration: underline dotted;\n  }\n  h1, h2, h3, h4, h5, h6 {\n    font-size: inherit;\n    font-weight: inherit;\n  }\n  a {\n    color: inherit;\n    -webkit-text-decoration: inherit;\n    text-decoration: inherit;\n  }\n  b, strong {\n    font-weight: bolder;\n  }\n  code, kbd, samp, pre {\n    font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n    font-feature-settings: var(--default-mono-font-feature-settings, normal);\n    font-variation-settings: var(--default-mono-font-variation-settings, normal);\n    font-size: 1em;\n  }\n  small {\n    font-size: 80%;\n  }\n  sub, sup {\n    font-size: 75%;\n    line-height: 0;\n    position: relative;\n    vertical-align: baseline;\n  }\n  sub {\n    bottom: -0.25em;\n  }\n  sup {\n    top: -0.5em;\n  }\n  table {\n    text-indent: 0;\n    border-color: inherit;\n    border-collapse: collapse;\n  }\n  :-moz-focusring {\n    outline: auto;\n  }\n  progress {\n    vertical-align: baseline;\n  }\n  summary {\n    display: list-item;\n  }\n  ol, ul, menu {\n    list-style: none;\n  }\n  img, svg, video, canvas, audio, iframe, embed, object {\n    display: block;\n    vertical-align: middle;\n  }\n  img, video {\n    max-width: 100%;\n    height: auto;\n  }\n  button, input, select, optgroup, textarea, ::file-selector-button {\n    font: inherit;\n    font-feature-settings: inherit;\n    font-variation-settings: inherit;\n    letter-spacing: inherit;\n    color: inherit;\n    border-radius: 0;\n    background-color: transparent;\n    opacity: 1;\n  }\n  :where(select:is([multiple], [size])) optgroup {\n    font-weight: bolder;\n  }\n  :where(select:is([multiple], [size])) optgroup option {\n    padding-inline-start: 20px;\n  }\n  ::file-selector-button {\n    margin-inline-end: 4px;\n  }\n  ::placeholder {\n    opacity: 1;\n  }\n  @supports (not (-webkit-appearance: -apple-pay-button))  or (contain-intrinsic-size: 1px) {\n    ::placeholder {\n      color: currentcolor;\n      @supports (color: color-mix(in lab, red, red)) {\n        color: color-mix(in oklab, currentcolor 50%, transparent);\n      }\n    }\n  }\n  textarea {\n    resize: vertical;\n  }\n  ::-webkit-search-decoration {\n    -webkit-appearance: none;\n  }\n  ::-webkit-date-and-time-value {\n    min-height: 1lh;\n    text-align: inherit;\n  }\n  ::-webkit-datetime-edit {\n    display: inline-flex;\n  }\n  ::-webkit-datetime-edit-fields-wrapper {\n    padding: 0;\n  }\n  ::-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 {\n    padding-block: 0;\n  }\n  ::-webkit-calendar-picker-indicator {\n    line-height: 1;\n  }\n  :-moz-ui-invalid {\n    box-shadow: none;\n  }\n  button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n    appearance: button;\n  }\n  ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n    height: auto;\n  }\n  [hidden]:where(:not([hidden=\"until-found\"])) {\n    display: none !important;\n  }\n}\n@layer utilities {\n  .menu {\n    @layer daisyui.l1.l2.l3 {\n      display: flex;\n      width: fit-content;\n      flex-direction: column;\n      flex-wrap: wrap;\n      padding: calc(0.25rem * 2);\n      --menu-active-fg: var(--color-neutral-content);\n      --menu-active-bg: var(--color-neutral);\n      font-size: 0.875rem;\n      :where(li ul) {\n        position: relative;\n        margin-inline-start: calc(0.25rem * 4);\n        padding-inline-start: calc(0.25rem * 2);\n        white-space: nowrap;\n        &:before {\n          position: absolute;\n          inset-inline-start: calc(0.25rem * 0);\n          top: calc(0.25rem * 3);\n          bottom: calc(0.25rem * 3);\n          background-color: var(--color-base-content);\n          opacity: 10%;\n          width: var(--border);\n          content: \"\";\n        }\n      }\n      :where(li > .menu-dropdown:not(.menu-dropdown-show)) {\n        display: none;\n      }\n      :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {\n        display: grid;\n        grid-auto-flow: column;\n        align-content: flex-start;\n        align-items: center;\n        gap: calc(0.25rem * 2);\n        border-radius: var(--radius-field);\n        padding-inline: calc(0.25rem * 3);\n        padding-block: calc(0.25rem * 1.5);\n        text-align: start;\n        transition-property: color, background-color, box-shadow;\n        transition-duration: 0.2s;\n        transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n        grid-auto-columns: minmax(auto, max-content) auto max-content;\n        text-wrap: balance;\n        user-select: none;\n      }\n      :where(li > details > summary) {\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n        &::-webkit-details-marker {\n          display: none;\n        }\n      }\n      :where(li > details > summary), :where(li > .menu-dropdown-toggle) {\n        &:after {\n          justify-self: flex-end;\n          display: block;\n          height: 0.375rem;\n          width: 0.375rem;\n          rotate: -135deg;\n          translate: 0 -1px;\n          transition-property: rotate, translate;\n          transition-duration: 0.2s;\n          content: \"\";\n          transform-origin: 50% 50%;\n          box-shadow: 2px 2px inset;\n          pointer-events: none;\n        }\n      }\n      details {\n        overflow: hidden;\n        interpolate-size: allow-keywords;\n      }\n      details::details-content {\n        block-size: 0;\n        @media (prefers-reduced-motion: no-preference) {\n          transition-behavior: allow-discrete;\n          transition-property: block-size, content-visibility;\n          transition-duration: 0.2s;\n          transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n        }\n      }\n      details[open]::details-content {\n        block-size: auto;\n      }\n      :where(li > details[open] > summary):after, :where(li > .menu-dropdown-toggle.menu-dropdown-show):after {\n        rotate: 45deg;\n        translate: 0 1px;\n      }\n      :where( li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title), li:not(.menu-title, .disabled) > details > summary:not(.menu-title) ):not(.menu-active, :active, .btn) {\n        &.menu-focus, &:focus-visible {\n          cursor: pointer;\n          background-color: var(--color-base-content);\n          @supports (color: color-mix(in lab, red, red)) {\n            background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n          }\n          color: var(--color-base-content);\n          --tw-outline-style: none;\n          outline-style: none;\n          @media (forced-colors: active) {\n            outline: 2px solid transparent;\n            outline-offset: 2px;\n          }\n        }\n      }\n      :where( li:not(.menu-title, .disabled) > *:not(ul, 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 ) {\n        cursor: pointer;\n        background-color: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n        }\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n        box-shadow: 0 1px oklch(0% 0 0 / 0.01) inset, 0 -1px oklch(100% 0 0 / 0.01) inset;\n      }\n      :where(li:empty) {\n        background-color: var(--color-base-content);\n        opacity: 10%;\n        margin: 0.5rem 1rem;\n        height: 1px;\n      }\n      :where(li) {\n        position: relative;\n        display: flex;\n        flex-shrink: 0;\n        flex-direction: column;\n        flex-wrap: wrap;\n        align-items: stretch;\n        .badge {\n          justify-self: flex-end;\n        }\n        & > *:not(ul, .menu-title, details, .btn):active, & > *:not(ul, .menu-title, details, .btn).menu-active, & > details > summary:active {\n          --tw-outline-style: none;\n          outline-style: none;\n          @media (forced-colors: active) {\n            outline: 2px solid transparent;\n            outline-offset: 2px;\n          }\n          color: var(--menu-active-fg);\n          background-color: var(--menu-active-bg);\n          background-size: auto, calc(var(--noise) * 100%);\n          background-image: none, var(--fx-noise);\n          &:not(&:active) {\n            box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg);\n          }\n        }\n        &.menu-disabled {\n          pointer-events: none;\n          color: var(--color-base-content);\n          @supports (color: color-mix(in lab, red, red)) {\n            color: color-mix(in oklab, var(--color-base-content) 20%, transparent);\n          }\n        }\n      }\n      .dropdown:focus-within {\n        .menu-dropdown-toggle:after {\n          rotate: 45deg;\n          translate: 0 1px;\n        }\n      }\n      .dropdown-content {\n        margin-top: calc(0.25rem * 2);\n        padding: calc(0.25rem * 2);\n        &:before {\n          display: none;\n        }\n      }\n    }\n  }\n  .dropdown {\n    @layer daisyui.l1.l2.l3 {\n      position: relative;\n      display: inline-block;\n      position-area: var(--anchor-v, bottom) var(--anchor-h, span-right);\n      & > *:not(:has(~ [class*=\"dropdown-content\"])):focus {\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n      }\n      .dropdown-content {\n        position: absolute;\n      }\n      &.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 {\n        display: none;\n        transform-origin: top;\n        opacity: 0%;\n        scale: 95%;\n      }\n      &[popover], .dropdown-content {\n        z-index: 999;\n        @media (prefers-reduced-motion: no-preference) {\n          animation: dropdown 0.2s;\n          transition-property: opacity, scale, display;\n          transition-behavior: allow-discrete;\n          transition-duration: 0.2s;\n          transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n        }\n      }\n      @starting-style {\n        &[popover], .dropdown-content {\n          scale: 95%;\n          opacity: 0;\n        }\n      }\n      &:not(.dropdown-close) {\n        &.dropdown-open, &:not(.dropdown-hover):focus, &:focus-within {\n          > [tabindex]:first-child {\n            pointer-events: none;\n          }\n          .dropdown-content {\n            opacity: 100%;\n            scale: 100%;\n          }\n        }\n        &.dropdown-hover:hover {\n          .dropdown-content {\n            opacity: 100%;\n            scale: 100%;\n          }\n        }\n      }\n      &:is(details) {\n        summary {\n          &::-webkit-details-marker {\n            display: none;\n          }\n        }\n      }\n      &:where([popover]) {\n        background: #0000;\n      }\n      &[popover] {\n        position: fixed;\n        color: inherit;\n        @supports not (position-area: bottom) {\n          margin: auto;\n          &.dropdown-close, &.dropdown-open:not(:popover-open) {\n            display: none;\n            transform-origin: top;\n            opacity: 0%;\n            scale: 95%;\n          }\n          &::backdrop {\n            background-color: color-mix(in oklab, #000 30%, #0000);\n          }\n        }\n        &.dropdown-close, &:not(.dropdown-open, :popover-open) {\n          display: none;\n          transform-origin: top;\n          opacity: 0%;\n          scale: 95%;\n        }\n      }\n    }\n  }\n  .btn {\n    :where(&) {\n      @layer daisyui.l1.l2.l3 {\n        width: unset;\n      }\n    }\n    @layer daisyui.l1.l2.l3 {\n      display: inline-flex;\n      flex-shrink: 0;\n      cursor: pointer;\n      flex-wrap: nowrap;\n      align-items: center;\n      justify-content: center;\n      gap: calc(0.25rem * 1.5);\n      text-align: center;\n      vertical-align: middle;\n      outline-offset: 2px;\n      webkit-user-select: none;\n      user-select: none;\n      padding-inline: var(--btn-p);\n      color: var(--btn-fg);\n      --tw-prose-links: var(--btn-fg);\n      height: var(--size);\n      font-size: var(--fontsize, 0.875rem);\n      font-weight: 600;\n      outline-color: var(--btn-color, var(--color-base-content));\n      transition-property: color, background-color, border-color, box-shadow;\n      transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n      transition-duration: 0.2s;\n      border-start-start-radius: var(--join-ss, var(--radius-field));\n      border-start-end-radius: var(--join-se, var(--radius-field));\n      border-end-start-radius: var(--join-es, var(--radius-field));\n      border-end-end-radius: var(--join-ee, var(--radius-field));\n      background-color: var(--btn-bg);\n      background-size: auto, calc(var(--noise) * 100%);\n      background-image: none, var(--btn-noise);\n      border-width: var(--border);\n      border-style: solid;\n      border-color: var(--btn-border);\n      text-shadow: 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 0.15));\n      touch-action: manipulation;\n      box-shadow: 0 0.5px 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow);\n      --size: calc(var(--size-field, 0.25rem) * 10);\n      --btn-bg: var(--btn-color, var(--color-base-200));\n      --btn-fg: var(--color-base-content);\n      --btn-p: 1rem;\n      --btn-border: var(--btn-bg);\n      @supports (color: color-mix(in lab, red, red)) {\n        --btn-border: color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%));\n      }\n      --btn-shadow: 0 3px 2px -2px var(--btn-bg),\n      0 4px 3px -2px var(--btn-bg);\n      @supports (color: color-mix(in lab, red, red)) {\n        --btn-shadow: 0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000),\n      0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000);\n      }\n      --btn-noise: var(--fx-noise);\n      @media (hover: hover) {\n        &:hover {\n          --btn-bg: var(--btn-color, var(--color-base-200));\n          @supports (color: color-mix(in lab, red, red)) {\n            --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%);\n          }\n        }\n      }\n      &:focus-visible, &:has(:focus-visible) {\n        outline-width: 2px;\n        outline-style: solid;\n        isolation: isolate;\n      }\n      &:active:not(.btn-active) {\n        translate: 0 0.5px;\n        --btn-bg: var(--btn-color, var(--color-base-200));\n        @supports (color: color-mix(in lab, red, red)) {\n          --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 5%);\n        }\n        --btn-border: var(--btn-color, var(--color-base-200));\n        @supports (color: color-mix(in lab, red, red)) {\n          --btn-border: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%);\n        }\n        --btn-shadow: 0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0);\n      }\n      &:is(input[type=\"checkbox\"], input[type=\"radio\"]) {\n        appearance: none;\n        &[aria-label]::after {\n          --tw-content: attr(aria-label);\n          content: var(--tw-content);\n        }\n      }\n      &:where(input:checked:not(.filter .btn)) {\n        --btn-color: var(--color-primary);\n        --btn-fg: var(--color-primary-content);\n        isolation: isolate;\n      }\n    }\n    &:disabled {\n      @layer daisyui.l1.l2 {\n        &:not(.btn-link, .btn-ghost) {\n          background-color: var(--color-base-content);\n          @supports (color: color-mix(in lab, red, red)) {\n            background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n          }\n          box-shadow: none;\n        }\n        pointer-events: none;\n        --btn-border: #0000;\n        --btn-noise: none;\n        --btn-fg: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          --btn-fg: color-mix(in oklch, var(--color-base-content) 20%, #0000);\n        }\n      }\n    }\n    &[disabled] {\n      @layer daisyui.l1.l2 {\n        &:not(.btn-link, .btn-ghost) {\n          background-color: var(--color-base-content);\n          @supports (color: color-mix(in lab, red, red)) {\n            background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n          }\n          box-shadow: none;\n        }\n        pointer-events: none;\n        --btn-border: #0000;\n        --btn-noise: none;\n        --btn-fg: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          --btn-fg: color-mix(in oklch, var(--color-base-content) 20%, #0000);\n        }\n      }\n    }\n  }\n  .input {\n    @layer daisyui.l1.l2.l3 {\n      cursor: text;\n      border: var(--border) solid #0000;\n      position: relative;\n      display: inline-flex;\n      flex-shrink: 1;\n      appearance: none;\n      align-items: center;\n      gap: calc(0.25rem * 2);\n      background-color: var(--color-base-100);\n      padding-inline: calc(0.25rem * 3);\n      vertical-align: middle;\n      white-space: nowrap;\n      width: clamp(3rem, 20rem, 100%);\n      height: var(--size);\n      font-size: max(var(--font-size, 0.875rem), 0.875rem);\n      touch-action: manipulation;\n      border-start-start-radius: var(--join-ss, var(--radius-field));\n      border-start-end-radius: var(--join-se, var(--radius-field));\n      border-end-start-radius: var(--join-es, var(--radius-field));\n      border-end-end-radius: var(--join-ee, var(--radius-field));\n      border-color: var(--input-color);\n      box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset;\n      @supports (color: color-mix(in lab, red, red)) {\n        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;\n      }\n      --size: calc(var(--size-field, 0.25rem) * 10);\n      --input-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --input-color: color-mix(in oklab, var(--color-base-content) 20%, #0000);\n      }\n      &:where(input) {\n        display: inline-flex;\n      }\n      :where(input) {\n        display: inline-flex;\n        height: 100%;\n        width: 100%;\n        appearance: none;\n        background-color: transparent;\n        border: none;\n        &:focus, &:focus-within {\n          --tw-outline-style: none;\n          outline-style: none;\n          @media (forced-colors: active) {\n            outline: 2px solid transparent;\n            outline-offset: 2px;\n          }\n        }\n      }\n      :where(input[type=\"url\"]), :where(input[type=\"email\"]) {\n        direction: ltr;\n      }\n      :where(input[type=\"date\"]) {\n        display: inline-flex;\n      }\n      &:focus, &:focus-within {\n        --input-color: var(--color-base-content);\n        box-shadow: 0 1px var(--input-color);\n        @supports (color: color-mix(in lab, red, red)) {\n          box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000);\n        }\n        outline: 2px solid var(--input-color);\n        outline-offset: 2px;\n        isolation: isolate;\n      }\n      @media (pointer: coarse) {\n        @supports (-webkit-touch-callout: none) {\n          &:focus, &:focus-within {\n            --font-size: 1rem;\n          }\n        }\n      }\n      &:has(> input[disabled]), &:is(:disabled, [disabled]), fieldset:disabled & {\n        cursor: not-allowed;\n        border-color: var(--color-base-200);\n        background-color: var(--color-base-200);\n        color: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          color: color-mix(in oklab, var(--color-base-content) 40%, transparent);\n        }\n        &::placeholder {\n          color: var(--color-base-content);\n          @supports (color: color-mix(in lab, red, red)) {\n            color: color-mix(in oklab, var(--color-base-content) 20%, transparent);\n          }\n        }\n        box-shadow: none;\n      }\n      &:has(> input[disabled]) > input[disabled] {\n        cursor: not-allowed;\n      }\n      &::-webkit-date-and-time-value {\n        text-align: inherit;\n      }\n      &[type=\"number\"] {\n        &::-webkit-inner-spin-button {\n          margin-block: calc(0.25rem * -3);\n          margin-inline-end: calc(0.25rem * -3);\n        }\n      }\n      &::-webkit-calendar-picker-indicator {\n        position: absolute;\n        inset-inline-end: 0.75em;\n      }\n      &:has(> input[type=\"date\"]) {\n        :where(input[type=\"date\"]) {\n          display: inline-flex;\n          webkit-appearance: none;\n          appearance: none;\n        }\n        input[type=\"date\"]::-webkit-calendar-picker-indicator {\n          position: absolute;\n          inset-inline-end: 0.75em;\n          width: 1em;\n          height: 1em;\n          cursor: pointer;\n        }\n      }\n    }\n  }\n  .range {\n    @layer daisyui.l1.l2.l3 {\n      appearance: none;\n      webkit-appearance: none;\n      --range-thumb: var(--color-base-100);\n      --range-thumb-size: calc(var(--size-selector, 0.25rem) * 6);\n      --range-progress: currentColor;\n      --range-fill: 1;\n      --range-p: 0.25rem;\n      --range-bg: currentColor;\n      @supports (color: color-mix(in lab, red, red)) {\n        --range-bg: color-mix(in oklab, currentColor 10%, #0000);\n      }\n      cursor: pointer;\n      overflow: hidden;\n      background-color: transparent;\n      vertical-align: middle;\n      width: clamp(3rem, 20rem, 100%);\n      --radius-selector-max: calc(\n      var(--radius-selector) + var(--radius-selector) + var(--radius-selector)\n    );\n      border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));\n      border: none;\n      height: var(--range-thumb-size);\n      [dir=\"rtl\"] & {\n        --range-dir: -1;\n      }\n      &:focus {\n        outline: none;\n      }\n      &:focus-visible {\n        outline: 2px solid;\n        outline-offset: 2px;\n      }\n      &::-webkit-slider-runnable-track {\n        width: 100%;\n        background-color: var(--range-bg);\n        border-radius: var(--radius-selector);\n        height: calc(var(--range-thumb-size) * 0.5);\n      }\n      @media (forced-colors: active) {\n        &::-webkit-slider-runnable-track {\n          border: 1px solid;\n        }\n      }\n      @media (forced-colors: active) {\n        &::-moz-range-track {\n          border: 1px solid;\n        }\n      }\n      &::-webkit-slider-thumb {\n        position: relative;\n        box-sizing: border-box;\n        border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));\n        background-color: var(--range-thumb);\n        height: var(--range-thumb-size);\n        width: var(--range-thumb-size);\n        border: var(--range-p) solid;\n        appearance: none;\n        webkit-appearance: none;\n        top: 50%;\n        color: var(--range-progress);\n        transform: translateY(-50%);\n        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, calc((var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));\n        @supports (color: color-mix(in lab, red, red)) {\n          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, calc((var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));\n        }\n      }\n      &::-moz-range-track {\n        width: 100%;\n        background-color: var(--range-bg);\n        border-radius: var(--radius-selector);\n        height: calc(var(--range-thumb-size) * 0.5);\n      }\n      &::-moz-range-thumb {\n        position: relative;\n        box-sizing: border-box;\n        border-radius: calc(var(--radius-selector) + min(var(--range-p), var(--radius-selector-max)));\n        background-color: currentColor;\n        height: var(--range-thumb-size);\n        width: var(--range-thumb-size);\n        border: var(--range-p) solid;\n        top: 50%;\n        color: var(--range-progress);\n        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, calc((var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));\n        @supports (color: color-mix(in lab, red, red)) {\n          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, calc((var(--range-dir, 1) * -100cqw) - (var(--range-dir, 1) * var(--range-thumb-size) / 2)) 0 0 calc(100cqw * var(--range-fill));\n        }\n      }\n      &:disabled {\n        cursor: not-allowed;\n        opacity: 30%;\n      }\n    }\n  }\n  .timeline {\n    @layer daisyui.l1.l2.l3 {\n      position: relative;\n      display: flex;\n      > li {\n        position: relative;\n        display: grid;\n        flex-shrink: 0;\n        align-items: center;\n        grid-template-rows: var(--timeline-row-start, minmax(0, 1fr)) auto var( --timeline-row-end, minmax(0, 1fr) );\n        grid-template-columns: var(--timeline-col-start, minmax(0, 1fr)) auto var( --timeline-col-end, minmax(0, 1fr) );\n        > hr {\n          border: none;\n          width: 100%;\n          &:first-child {\n            grid-column-start: 1;\n            grid-row-start: 2;\n          }\n          &:last-child {\n            grid-column-start: 3;\n            grid-column-end: none;\n            grid-row-start: 2;\n            grid-row-end: auto;\n          }\n          @media print {\n            border: 0.1px solid var(--color-base-300);\n          }\n        }\n      }\n      :where(hr) {\n        height: calc(0.25rem * 1);\n        background-color: var(--color-base-300);\n      }\n      &:has(.timeline-middle hr) {\n        &:first-child {\n          border-start-start-radius: 0;\n          border-end-start-radius: 0;\n          border-start-end-radius: var(--radius-selector);\n          border-end-end-radius: var(--radius-selector);\n        }\n        &:last-child {\n          border-start-start-radius: var(--radius-selector);\n          border-end-start-radius: var(--radius-selector);\n          border-start-end-radius: 0;\n          border-end-end-radius: 0;\n        }\n      }\n      &:not(:has(.timeline-middle)) {\n        :first-child hr:last-child {\n          border-start-start-radius: var(--radius-selector);\n          border-end-start-radius: var(--radius-selector);\n          border-start-end-radius: 0;\n          border-end-end-radius: 0;\n        }\n        :last-child hr:first-child {\n          border-start-start-radius: 0;\n          border-end-start-radius: 0;\n          border-start-end-radius: var(--radius-selector);\n          border-end-end-radius: var(--radius-selector);\n        }\n      }\n    }\n  }\n  .menu-horizontal {\n    @layer daisyui.l1.l2 {\n      display: inline-flex;\n      flex-direction: row;\n      & > li:not(.menu-title) > details {\n        & > ul {\n          position: absolute;\n          margin-inline-start: calc(0.25rem * 0);\n          margin-top: calc(0.25rem * 4);\n          transform-origin: top;\n          border-radius: var(--radius-box);\n          background-color: var(--color-base-100);\n          padding-block: calc(0.25rem * 2);\n          padding-inline-end: calc(0.25rem * 2);\n          opacity: 0%;\n          scale: 95%;\n          box-shadow: 0 1px 3px 0 oklch(0% 0 0/0.1), 0 1px 2px -1px oklch(0% 0 0/0.1);\n          @media (prefers-reduced-motion: no-preference) {\n            @starting-style {\n              scale: 95%;\n              opacity: 0;\n            }\n            animation: menu 0.2s;\n            transition-property: opacity, scale, display;\n            transition-behavior: allow-discrete;\n            transition-duration: 0.2s;\n            transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n          }\n        }\n        &[open] > ul {\n          opacity: 100%;\n          scale: 100%;\n        }\n      }\n      & > li > details > ul {\n        &:before {\n          --tw-content: none;\n          content: var(--tw-content);\n        }\n      }\n    }\n  }\n  .avatar {\n    @layer daisyui.l1.l2.l3 {\n      position: relative;\n      display: inline-flex;\n      vertical-align: middle;\n      & > div {\n        display: block;\n        aspect-ratio: 1 / 1;\n        overflow: hidden;\n      }\n      img {\n        height: 100%;\n        width: 100%;\n        object-fit: cover;\n      }\n    }\n  }\n  .card {\n    @layer daisyui.l1.l2.l3 {\n      position: relative;\n      display: flex;\n      flex-direction: column;\n      border-radius: var(--radius-box);\n      outline-width: 2px;\n      transition: outline 0.2s ease-in-out;\n      outline: 0 solid #0000;\n      outline-offset: 2px;\n      &:focus {\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n      }\n      &:focus-visible {\n        outline-color: currentColor;\n      }\n      :where(figure:first-child) {\n        overflow: hidden;\n        border-start-start-radius: inherit;\n        border-start-end-radius: inherit;\n        border-end-start-radius: unset;\n        border-end-end-radius: unset;\n      }\n      :where(figure:last-child) {\n        overflow: hidden;\n        border-start-start-radius: unset;\n        border-start-end-radius: unset;\n        border-end-start-radius: inherit;\n        border-end-end-radius: inherit;\n      }\n      figure {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n      }\n      &:has(> input:is(input[type=\"checkbox\"], input[type=\"radio\"])) {\n        cursor: pointer;\n        user-select: none;\n      }\n      &:has(> :checked) {\n        outline: 2px solid currentColor;\n      }\n    }\n  }\n  .sticky {\n    position: sticky;\n  }\n  .dropdown-end {\n    @layer daisyui.l1.l2 {\n      --anchor-h: span-left;\n      :where(.dropdown-content) {\n        inset-inline-end: calc(0.25rem * 0);\n        translate: 0 0;\n        [dir=\"rtl\"] & {\n          translate: 0 0;\n        }\n      }\n      &.dropdown-left {\n        --anchor-h: left;\n        --anchor-v: span-top;\n        .dropdown-content {\n          top: auto;\n          bottom: calc(0.25rem * 0);\n        }\n      }\n      &.dropdown-right {\n        --anchor-h: right;\n        --anchor-v: span-top;\n        .dropdown-content {\n          top: auto;\n          bottom: calc(0.25rem * 0);\n        }\n      }\n    }\n  }\n  .top-0 {\n    top: calc(var(--spacing) * 0);\n  }\n  .join {\n    display: inline-flex;\n    align-items: stretch;\n    --join-ss: 0;\n    --join-se: 0;\n    --join-es: 0;\n    --join-ee: 0;\n    :where(.join-item) {\n      border-start-start-radius: var(--join-ss, 0);\n      border-start-end-radius: var(--join-se, 0);\n      border-end-start-radius: var(--join-es, 0);\n      border-end-end-radius: var(--join-ee, 0);\n      * {\n        --join-ss: var(--radius-field);\n        --join-se: var(--radius-field);\n        --join-es: var(--radius-field);\n        --join-ee: var(--radius-field);\n      }\n    }\n    > .join-item:where(:first-child) {\n      --join-ss: var(--radius-field);\n      --join-se: 0;\n      --join-es: var(--radius-field);\n      --join-ee: 0;\n    }\n    :first-child:not(:last-child) {\n      :where(.join-item) {\n        --join-ss: var(--radius-field);\n        --join-se: 0;\n        --join-es: var(--radius-field);\n        --join-ee: 0;\n      }\n    }\n    > .join-item:where(:last-child) {\n      --join-ss: 0;\n      --join-se: var(--radius-field);\n      --join-es: 0;\n      --join-ee: var(--radius-field);\n    }\n    :last-child:not(:first-child) {\n      :where(.join-item) {\n        --join-ss: 0;\n        --join-se: var(--radius-field);\n        --join-es: 0;\n        --join-ee: var(--radius-field);\n      }\n    }\n    > .join-item:where(:only-child) {\n      --join-ss: var(--radius-field);\n      --join-se: var(--radius-field);\n      --join-es: var(--radius-field);\n      --join-ee: var(--radius-field);\n    }\n    :only-child {\n      :where(.join-item) {\n        --join-ss: var(--radius-field);\n        --join-se: var(--radius-field);\n        --join-es: var(--radius-field);\n        --join-ee: var(--radius-field);\n      }\n    }\n    > :where(:focus, :has(:focus)) {\n      z-index: 1;\n    }\n    @media (hover: hover) {\n      > :where(.btn:hover, :has(.btn:hover)) {\n        isolation: isolate;\n      }\n    }\n  }\n  .z-1 {\n    z-index: 1;\n  }\n  .z-30 {\n    z-index: 30;\n  }\n  .timeline-end {\n    @layer daisyui.l1.l2.l3 {\n      grid-column-start: 1;\n      grid-column-end: 4;\n      grid-row-start: 3;\n      grid-row-end: 4;\n      margin: calc(0.25rem * 1);\n      align-self: flex-start;\n      justify-self: center;\n    }\n  }\n  .timeline-start {\n    @layer daisyui.l1.l2.l3 {\n      grid-column-start: 1;\n      grid-column-end: 4;\n      grid-row-start: 1;\n      grid-row-end: 2;\n      margin: calc(0.25rem * 1);\n      align-self: flex-end;\n      justify-self: center;\n    }\n  }\n  .timeline-vertical {\n    @layer daisyui.l1.l2 {\n      flex-direction: column;\n      > li {\n        justify-items: center;\n        --timeline-row-start: minmax(0, 1fr);\n        --timeline-row-end: minmax(0, 1fr);\n        > hr {\n          height: 100%;\n          width: calc(0.25rem * 1);\n          &:first-child {\n            grid-column-start: 2;\n            grid-row-start: 1;\n          }\n          &:last-child {\n            grid-column-start: 2;\n            grid-column-end: auto;\n            grid-row-start: 3;\n            grid-row-end: none;\n          }\n        }\n      }\n      .timeline-start {\n        grid-column-start: 1;\n        grid-column-end: 2;\n        grid-row-start: 1;\n        grid-row-end: 4;\n        align-self: center;\n        justify-self: flex-end;\n      }\n      .timeline-end {\n        grid-column-start: 3;\n        grid-column-end: 4;\n        grid-row-start: 1;\n        grid-row-end: 4;\n        align-self: center;\n        justify-self: flex-start;\n      }\n      &:has(.timeline-middle) {\n        > li {\n          > hr {\n            &:first-child {\n              border-top-left-radius: 0;\n              border-top-right-radius: 0;\n              border-bottom-right-radius: var(--radius-selector);\n              border-bottom-left-radius: var(--radius-selector);\n            }\n            &:last-child {\n              border-top-left-radius: var(--radius-selector);\n              border-top-right-radius: var(--radius-selector);\n              border-bottom-right-radius: 0;\n              border-bottom-left-radius: 0;\n            }\n          }\n        }\n      }\n      &:not(:has(.timeline-middle)) {\n        :first-child {\n          > hr:last-child {\n            border-top-left-radius: var(--radius-selector);\n            border-top-right-radius: var(--radius-selector);\n            border-bottom-right-radius: 0;\n            border-bottom-left-radius: 0;\n          }\n        }\n        :last-child {\n          > hr:first-child {\n            border-top-left-radius: 0;\n            border-top-right-radius: 0;\n            border-bottom-right-radius: var(--radius-selector);\n            border-bottom-left-radius: var(--radius-selector);\n          }\n        }\n      }\n      &.timeline-snap-icon {\n        > li {\n          --timeline-col-start: minmax(0, 1fr);\n          --timeline-row-start: 0.5rem;\n        }\n      }\n    }\n  }\n  .timeline-middle {\n    @layer daisyui.l1.l2.l3 {\n      grid-column-start: 2;\n      grid-row-start: 2;\n    }\n  }\n  .container {\n    width: 100%;\n    @media (width >= 40rem) {\n      max-width: 40rem;\n    }\n    @media (width >= 48rem) {\n      max-width: 48rem;\n    }\n    @media (width >= 64rem) {\n      max-width: 64rem;\n    }\n    @media (width >= 80rem) {\n      max-width: 80rem;\n    }\n    @media (width >= 96rem) {\n      max-width: 96rem;\n    }\n  }\n  .divider {\n    @layer daisyui.l1.l2.l3 {\n      display: flex;\n      height: calc(0.25rem * 4);\n      flex-direction: row;\n      align-items: center;\n      align-self: stretch;\n      white-space: nowrap;\n      margin: var(--divider-m, 1rem 0);\n      --divider-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --divider-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n      }\n      &:before, &:after {\n        content: \"\";\n        height: calc(0.25rem * 0.5);\n        width: 100%;\n        flex-grow: 1;\n        background-color: var(--divider-color);\n      }\n      @media print {\n        &:before, &:after {\n          border: 0.5px solid;\n        }\n      }\n      &:not(:empty) {\n        gap: calc(0.25rem * 4);\n      }\n    }\n  }\n  .container {\n    margin-inline: auto;\n  }\n  .mx-8 {\n    margin-inline: calc(var(--spacing) * 8);\n  }\n  .mx-auto {\n    margin-inline: auto;\n  }\n  .my-0 {\n    margin-block: calc(var(--spacing) * 0);\n  }\n  .my-0\\! {\n    margin-block: calc(var(--spacing) * 0) !important;\n  }\n  .my-2 {\n    margin-block: calc(var(--spacing) * 2);\n  }\n  .my-5 {\n    margin-block: calc(var(--spacing) * 5);\n  }\n  .my-8 {\n    margin-block: calc(var(--spacing) * 8);\n  }\n  .join-item {\n    &:where(*:not(:first-child, :disabled, [disabled], .btn-disabled)) {\n      margin-inline-start: calc(var(--border, 1px) * -1);\n      margin-block-start: 0;\n    }\n    &:where(*:is(:disabled, [disabled], .btn-disabled)) {\n      border-width: var(--border, 1px) 0 var(--border, 1px) var(--border, 1px);\n    }\n  }\n  .prose {\n    color: var(--tw-prose-body);\n    max-width: 65ch;\n    :where(p):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 1.25em;\n      margin-bottom: 1.25em;\n      word-break: break-word;\n    }\n    :where([class~=\"lead\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-lead);\n      font-size: 1.25em;\n      line-height: 1.6;\n      margin-top: 1.2em;\n      margin-bottom: 1.2em;\n    }\n    :where(a):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-links);\n      text-decoration: underline;\n      font-weight: 500;\n    }\n    :where(strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-bold);\n      font-weight: 600;\n    }\n    :where(a strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(blockquote strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(thead th strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(ol):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: decimal;\n      margin-top: 1.25em;\n      margin-bottom: 1.25em;\n      padding-inline-start: 1.625em;\n    }\n    :where(ol[type=\"A\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: upper-alpha;\n    }\n    :where(ol[type=\"a\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: lower-alpha;\n    }\n    :where(ol[type=\"A\" s]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: upper-alpha;\n    }\n    :where(ol[type=\"a\" s]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: lower-alpha;\n    }\n    :where(ol[type=\"I\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: upper-roman;\n    }\n    :where(ol[type=\"i\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: lower-roman;\n    }\n    :where(ol[type=\"I\" s]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: upper-roman;\n    }\n    :where(ol[type=\"i\" s]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: lower-roman;\n    }\n    :where(ol[type=\"1\"]):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: decimal;\n    }\n    :where(ul):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      list-style-type: disc;\n      margin-top: 1.25em;\n      margin-bottom: 1.25em;\n      padding-inline-start: 1.625em;\n    }\n    :where(ol > li):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::marker {\n      font-weight: 400;\n      color: var(--tw-prose-counters);\n    }\n    :where(ul > li):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::marker {\n      color: var(--tw-prose-bullets);\n    }\n    :where(dt):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 600;\n      margin-top: 1.25em;\n    }\n    :where(hr):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      border-color: var(--tw-prose-hr);\n      border-top-width: 1px;\n      margin-top: 3em;\n      margin-bottom: 3em;\n    }\n    :where(blockquote):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: normal;\n      font-style: normal;\n      color: var(--tw-prose-body);\n      border-inline-start-width: 0.25rem;\n      border-inline-start-color: var(--tw-prose-quote-borders);\n      quotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n      margin-top: 1.6em;\n      margin-bottom: 1.6em;\n      padding-inline-start: 1em;\n    }\n    :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::before {\n      content: open-quote;\n    }\n    :where(blockquote p:last-of-type):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::after {\n      content: close-quote;\n    }\n    :where(h1):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 800;\n      font-size: 2.25em;\n      margin-top: 0;\n      margin-bottom: 0.8888889em;\n      line-height: 1.1111111;\n    }\n    :where(h1 strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: 900;\n      color: inherit;\n    }\n    :where(h2):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 700;\n      font-size: 1.5em;\n      margin-top: 2em;\n      margin-bottom: 1em;\n      line-height: 1.3333333;\n    }\n    :where(h2 strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: 800;\n      color: inherit;\n    }\n    :where(h3):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 600;\n      font-size: 1.25em;\n      margin-top: 1.6em;\n      margin-bottom: 0.6em;\n      line-height: 1.6;\n    }\n    :where(h3 strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: 700;\n      color: inherit;\n    }\n    :where(h4):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 600;\n      margin-top: 1.5em;\n      margin-bottom: 0.5em;\n      line-height: 1.5;\n    }\n    :where(h4 strong):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: 700;\n      color: inherit;\n    }\n    :where(img):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 2em;\n      margin-bottom: 2em;\n    }\n    :where(picture):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      display: block;\n      margin-top: 2em;\n      margin-bottom: 2em;\n    }\n    :where(video):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 2em;\n      margin-bottom: 2em;\n    }\n    :where(kbd):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      font-weight: 500;\n      font-family: inherit;\n      color: var(--tw-prose-kbd);\n      box-shadow: 0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);\n      font-size: 0.875em;\n      border-radius: 0.3125rem;\n      padding-top: 0.1875em;\n      padding-inline-end: 0.375em;\n      padding-bottom: 0.1875em;\n      padding-inline-start: 0.375em;\n    }\n    :where(a code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(h1 code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(h2 code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n      font-size: 0.875em;\n    }\n    :where(h3 code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n      font-size: 0.9em;\n    }\n    :where(h4 code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(blockquote code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(thead th code):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: inherit;\n    }\n    :where(table):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      width: 100%;\n      table-layout: auto;\n      margin-top: 2em;\n      margin-bottom: 2em;\n      font-size: 0.875em;\n      line-height: 1.7142857;\n    }\n    :where(thead):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      border-bottom-width: 1px;\n      border-bottom-color: var(--tw-prose-th-borders);\n    }\n    :where(thead th):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-headings);\n      font-weight: 600;\n      vertical-align: bottom;\n      padding-inline-end: 0.5714286em;\n      padding-bottom: 0.5714286em;\n      padding-inline-start: 0.5714286em;\n    }\n    :where(tbody tr):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      border-bottom-width: 1px;\n      border-bottom-color: var(--tw-prose-td-borders);\n    }\n    :where(tbody tr:last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      border-bottom-width: 0;\n    }\n    :where(tbody td):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      vertical-align: baseline;\n    }\n    :where(tfoot):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      border-top-width: 1px;\n      border-top-color: var(--tw-prose-th-borders);\n    }\n    :where(tfoot td):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      vertical-align: top;\n    }\n    :where(th, td):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      text-align: start;\n    }\n    :where(figure > *):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n      margin-bottom: 0;\n    }\n    :where(figcaption):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      color: var(--tw-prose-captions);\n      font-size: 0.875em;\n      line-height: 1.4285714;\n      margin-top: 0.8571429em;\n    }\n    --tw-prose-body: oklch(37.3% 0.034 259.733);\n    --tw-prose-headings: oklch(21% 0.034 264.665);\n    --tw-prose-lead: oklch(44.6% 0.03 256.802);\n    --tw-prose-links: oklch(21% 0.034 264.665);\n    --tw-prose-bold: oklch(21% 0.034 264.665);\n    --tw-prose-counters: oklch(55.1% 0.027 264.364);\n    --tw-prose-bullets: oklch(87.2% 0.01 258.338);\n    --tw-prose-hr: oklch(92.8% 0.006 264.531);\n    --tw-prose-quotes: oklch(21% 0.034 264.665);\n    --tw-prose-quote-borders: oklch(92.8% 0.006 264.531);\n    --tw-prose-captions: oklch(55.1% 0.027 264.364);\n    --tw-prose-kbd: oklch(21% 0.034 264.665);\n    --tw-prose-kbd-shadows: color-mix(in oklab, oklch(21% 0.034 264.665) 10%, transparent);\n    --tw-prose-code: oklch(21% 0.034 264.665);\n    --tw-prose-pre-code: oklch(92.8% 0.006 264.531);\n    --tw-prose-pre-bg: oklch(27.8% 0.033 256.848);\n    --tw-prose-th-borders: oklch(87.2% 0.01 258.338);\n    --tw-prose-td-borders: oklch(92.8% 0.006 264.531);\n    --tw-prose-invert-body: oklch(87.2% 0.01 258.338);\n    --tw-prose-invert-headings: #fff;\n    --tw-prose-invert-lead: oklch(70.7% 0.022 261.325);\n    --tw-prose-invert-links: #fff;\n    --tw-prose-invert-bold: #fff;\n    --tw-prose-invert-counters: oklch(70.7% 0.022 261.325);\n    --tw-prose-invert-bullets: oklch(44.6% 0.03 256.802);\n    --tw-prose-invert-hr: oklch(37.3% 0.034 259.733);\n    --tw-prose-invert-quotes: oklch(96.7% 0.003 264.542);\n    --tw-prose-invert-quote-borders: oklch(37.3% 0.034 259.733);\n    --tw-prose-invert-captions: oklch(70.7% 0.022 261.325);\n    --tw-prose-invert-kbd: #fff;\n    --tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);\n    --tw-prose-invert-code: #fff;\n    --tw-prose-invert-pre-code: oklch(87.2% 0.01 258.338);\n    --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);\n    --tw-prose-invert-th-borders: oklch(44.6% 0.03 256.802);\n    --tw-prose-invert-td-borders: oklch(37.3% 0.034 259.733);\n    font-size: 1rem;\n    line-height: 1.75;\n    :where(picture > img):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n      margin-bottom: 0;\n    }\n    :where(li):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0.5em;\n      margin-bottom: 0.5em;\n    }\n    :where(ol > li):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-start: 0.375em;\n    }\n    :where(ul > li):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-start: 0.375em;\n    }\n    :where(.prose > ul > li p):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0.75em;\n      margin-bottom: 0.75em;\n    }\n    :where(.prose > ul > li > p:first-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 1.25em;\n    }\n    :where(.prose > ul > li > p:last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-bottom: 1.25em;\n    }\n    :where(.prose > ol > li > p:first-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 1.25em;\n    }\n    :where(.prose > ol > li > p:last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-bottom: 1.25em;\n    }\n    :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0.75em;\n      margin-bottom: 0.75em;\n    }\n    :where(dl):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 1.25em;\n      margin-bottom: 1.25em;\n    }\n    :where(dd):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0.5em;\n      padding-inline-start: 1.625em;\n    }\n    :where(hr + *):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n    }\n    :where(h2 + *):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n    }\n    :where(h3 + *):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n    }\n    :where(h4 + *):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n    }\n    :where(thead th:first-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-start: 0;\n    }\n    :where(thead th:last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-end: 0;\n    }\n    :where(tbody td, tfoot td):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-top: 0.5714286em;\n      padding-inline-end: 0.5714286em;\n      padding-bottom: 0.5714286em;\n      padding-inline-start: 0.5714286em;\n    }\n    :where(tbody td:first-child, tfoot td:first-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-start: 0;\n    }\n    :where(tbody td:last-child, tfoot td:last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      padding-inline-end: 0;\n    }\n    :where(figure):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 2em;\n      margin-bottom: 2em;\n    }\n    :where(.prose > :first-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-top: 0;\n    }\n    :where(.prose > :last-child):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *)) {\n      margin-bottom: 0;\n    }\n  }\n  .mt-2 {\n    margin-top: calc(var(--spacing) * 2);\n  }\n  .mt-4 {\n    margin-top: calc(var(--spacing) * 4);\n  }\n  .mt-6 {\n    margin-top: calc(var(--spacing) * 6);\n  }\n  .mt-8 {\n    margin-top: calc(var(--spacing) * 8);\n  }\n  .mr-1 {\n    margin-right: calc(var(--spacing) * 1);\n  }\n  .mb-4 {\n    margin-bottom: calc(var(--spacing) * 4);\n  }\n  .status {\n    @layer daisyui.l1.l2.l3 {\n      display: inline-block;\n      aspect-ratio: 1 / 1;\n      width: calc(0.25rem * 2);\n      height: calc(0.25rem * 2);\n      border-radius: var(--radius-selector);\n      background-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        background-color: color-mix(in oklab, var(--color-base-content) 20%, transparent);\n      }\n      background-position: center;\n      background-repeat: no-repeat;\n      vertical-align: middle;\n      color: color-mix(in srgb, #000 30%, transparent);\n      @supports (color: color-mix(in lab, red, red)) {\n        color: color-mix(in oklab, var(--color-black) 30%, transparent);\n      }\n      background-image: radial-gradient( circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * 0.5)), #0000 );\n      box-shadow: 0 2px 3px -1px currentColor;\n      @supports (color: color-mix(in lab, red, red)) {\n        box-shadow: 0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000);\n      }\n    }\n  }\n  .badge {\n    @layer daisyui.l1.l2.l3 {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: calc(0.25rem * 2);\n      border-radius: var(--radius-selector);\n      vertical-align: middle;\n      color: var(--badge-fg);\n      border: var(--border) solid var(--badge-color, var(--color-base-200));\n      font-size: 0.875rem;\n      width: fit-content;\n      background-size: auto, calc(var(--noise) * 100%);\n      background-image: none, var(--fx-noise);\n      background-color: var(--badge-bg);\n      --badge-bg: var(--badge-color, var(--color-base-100));\n      --badge-fg: var(--color-base-content);\n      --size: calc(var(--size-selector, 0.25rem) * 6);\n      height: var(--size);\n      padding-inline: calc(var(--size) / 2 - var(--border));\n    }\n  }\n  .card-body {\n    @layer daisyui.l1.l2.l3 {\n      display: flex;\n      flex: auto;\n      flex-direction: column;\n      gap: calc(0.25rem * 2);\n      padding: var(--card-p, 1.5rem);\n      font-size: var(--card-fs, 0.875rem);\n      :where(p) {\n        flex-grow: 1;\n      }\n    }\n  }\n  .alert {\n    border-width: var(--border);\n    border-color: var(--alert-border-color, var(--color-base-200));\n    @layer daisyui.l1.l2.l3 {\n      border-style: solid;\n      --alert-border-color: var(--color-base-200);\n      display: grid;\n      align-items: center;\n      gap: calc(0.25rem * 4);\n      border-radius: var(--radius-box);\n      padding-inline: calc(0.25rem * 4);\n      padding-block: calc(0.25rem * 3);\n      color: var(--color-base-content);\n      background-color: var(--alert-color, var(--color-base-200));\n      justify-content: start;\n      justify-items: start;\n      grid-auto-flow: column;\n      grid-template-columns: auto;\n      text-align: start;\n      font-size: 0.875rem;\n      line-height: 1.25rem;\n      background-size: auto, calc(var(--noise) * 100%);\n      background-image: none, var(--fx-noise);\n      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));\n      @supports (color: color-mix(in lab, red, red)) {\n        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));\n      }\n      &:has(:nth-child(2)) {\n        grid-template-columns: auto minmax(auto, 1fr);\n      }\n    }\n  }\n  .card-actions {\n    @layer daisyui.l1.l2.l3 {\n      display: flex;\n      flex-wrap: wrap;\n      align-items: flex-start;\n      gap: calc(0.25rem * 2);\n    }\n  }\n  .card-title {\n    @layer daisyui.l1.l2.l3 {\n      display: flex;\n      align-items: center;\n      gap: calc(0.25rem * 2);\n      font-size: var(--cardtitle-fs, 1.125rem);\n      font-weight: 600;\n    }\n  }\n  .prose {\n    :root & {\n      --tw-prose-body: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-body: color-mix(in oklab, var(--color-base-content) 80%, #0000);\n      }\n      --tw-prose-headings: var(--color-base-content);\n      --tw-prose-lead: var(--color-base-content);\n      --tw-prose-links: var(--color-base-content);\n      --tw-prose-bold: var(--color-base-content);\n      --tw-prose-counters: var(--color-base-content);\n      --tw-prose-bullets: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-bullets: color-mix(in oklab, var(--color-base-content) 50%, #0000);\n      }\n      --tw-prose-hr: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-hr: color-mix(in oklab, var(--color-base-content) 20%, #0000);\n      }\n      --tw-prose-quotes: var(--color-base-content);\n      --tw-prose-quote-borders: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-quote-borders: color-mix(in oklab, var(--color-base-content) 20%, #0000);\n      }\n      --tw-prose-captions: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-captions: color-mix(in oklab, var(--color-base-content) 50%, #0000);\n      }\n      --tw-prose-code: var(--color-base-content);\n      --tw-prose-pre-code: var(--color-neutral-content);\n      --tw-prose-pre-bg: var(--color-neutral);\n      --tw-prose-th-borders: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-th-borders: color-mix(in oklab, var(--color-base-content) 50%, #0000);\n      }\n      --tw-prose-td-borders: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-td-borders: color-mix(in oklab, var(--color-base-content) 20%, #0000);\n      }\n      --tw-prose-kbd: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        --tw-prose-kbd: color-mix(in oklab, var(--color-base-content) 80%, #0000);\n      }\n      :where(code):not(pre > code) {\n        background-color: var(--color-base-200);\n        border-radius: var(--radius-selector);\n        border: var(--border) solid var(--color-base-300);\n        padding-inline: 0.5em;\n        padding-block: 0.2em;\n        font-weight: inherit;\n        &:before, &:after {\n          display: none;\n        }\n      }\n    }\n  }\n  .block {\n    display: block;\n  }\n  .flex {\n    display: flex;\n  }\n  .grid {\n    display: grid;\n  }\n  .hidden {\n    display: none;\n  }\n  .inline {\n    display: inline;\n  }\n  .inline-flex {\n    display: inline-flex;\n  }\n  .divider-vertical {\n    @layer daisyui.l1.l2 {\n      --divider-m: 1rem 0;\n      &.divider {\n        height: calc(0.25rem * 4);\n        width: auto;\n        flex-direction: row;\n        &:before {\n          height: calc(0.25rem * 0.5);\n          width: 100%;\n        }\n        &:after {\n          height: calc(0.25rem * 0.5);\n          width: 100%;\n        }\n      }\n    }\n  }\n  .btn-square {\n    @layer daisyui.l1.l2 {\n      padding-inline: calc(0.25rem * 0);\n      width: var(--size);\n      height: var(--size);\n    }\n  }\n  .h-6 {\n    height: calc(var(--spacing) * 6);\n  }\n  .h-8 {\n    height: calc(var(--spacing) * 8);\n  }\n  .h-12 {\n    height: calc(var(--spacing) * 12);\n  }\n  .h-\\[60vh\\] {\n    height: 60vh;\n  }\n  .w-2\\/3 {\n    width: calc(2/3 * 100%);\n  }\n  .w-8 {\n    width: calc(var(--spacing) * 8);\n  }\n  .w-12 {\n    width: calc(var(--spacing) * 12);\n  }\n  .w-24 {\n    width: calc(var(--spacing) * 24);\n  }\n  .w-36 {\n    width: calc(var(--spacing) * 36);\n  }\n  .w-full {\n    width: 100%;\n  }\n  .max-w-48 {\n    max-width: calc(var(--spacing) * 48);\n  }\n  .max-w-\\[65ch\\] {\n    max-width: 65ch;\n  }\n  .max-w-none {\n    max-width: none;\n  }\n  .flex-1 {\n    flex: 1;\n  }\n  .grow {\n    flex-grow: 1;\n  }\n  .link {\n    @layer daisyui.l1.l2.l3 {\n      cursor: pointer;\n      text-decoration-line: underline;\n      &:focus {\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n      }\n      &:focus-visible {\n        outline: 2px solid currentColor;\n        outline-offset: 2px;\n      }\n    }\n  }\n  .cursor-pointer {\n    cursor: pointer;\n  }\n  .grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .flex-col {\n    flex-direction: column;\n  }\n  .flex-wrap {\n    flex-wrap: wrap;\n  }\n  .items-center {\n    align-items: center;\n  }\n  .items-end {\n    align-items: flex-end;\n  }\n  .items-start {\n    align-items: flex-start;\n  }\n  .justify-between {\n    justify-content: space-between;\n  }\n  .justify-center {\n    justify-content: center;\n  }\n  .gap-2 {\n    gap: calc(var(--spacing) * 2);\n  }\n  .gap-4 {\n    gap: calc(var(--spacing) * 4);\n  }\n  .space-y-4 {\n    :where(& > :not(:last-child)) {\n      --tw-space-y-reverse: 0;\n      margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n      margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n    }\n  }\n  .space-y-8 {\n    :where(& > :not(:last-child)) {\n      --tw-space-y-reverse: 0;\n      margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n      margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n    }\n  }\n  .justify-self-start\\! {\n    justify-self: flex-start !important;\n  }\n  .truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .timeline-box {\n    @layer daisyui.l1.l2.l3 {\n      border: var(--border) solid;\n      border-radius: var(--radius-box);\n      border-color: var(--color-base-300);\n      background-color: var(--color-base-100);\n      padding-inline: calc(0.25rem * 4);\n      padding-block: calc(0.25rem * 2);\n      font-size: 0.75rem;\n      box-shadow: 0 1px 2px 0 oklch(0% 0 0/0.05);\n    }\n  }\n  .rounded-box {\n    border-radius: var(--radius-box);\n  }\n  .rounded-box {\n    border-radius: var(--radius-box);\n  }\n  .rounded-full {\n    border-radius: calc(infinity * 1px);\n  }\n  .rounded-lg {\n    border-radius: var(--radius-lg);\n  }\n  .border {\n    border-style: var(--tw-border-style);\n    border-width: 1px;\n  }\n  .border-base-content\\/30 {\n    border-color: var(--color-base-content);\n    @supports (color: color-mix(in lab, red, red)) {\n      border-color: color-mix(in oklab, var(--color-base-content) 30%, transparent);\n    }\n  }\n  .bg-base-100 {\n    background-color: var(--color-base-100);\n  }\n  .bg-primary {\n    background-color: var(--color-primary);\n  }\n  .p-1 {\n    padding: calc(var(--spacing) * 1);\n  }\n  .p-2 {\n    padding: calc(var(--spacing) * 2);\n  }\n  .p-4 {\n    padding: calc(var(--spacing) * 4);\n  }\n  .px-0 {\n    padding-inline: calc(var(--spacing) * 0);\n  }\n  .px-2 {\n    padding-inline: calc(var(--spacing) * 2);\n  }\n  .px-4 {\n    padding-inline: calc(var(--spacing) * 4);\n  }\n  .py-4 {\n    padding-block: calc(var(--spacing) * 4);\n  }\n  .py-12 {\n    padding-block: calc(var(--spacing) * 12);\n  }\n  .pt-8 {\n    padding-top: calc(var(--spacing) * 8);\n  }\n  .pb-4 {\n    padding-bottom: calc(var(--spacing) * 4);\n  }\n  .text-center {\n    text-align: center;\n  }\n  .text-2xl {\n    font-size: var(--text-2xl);\n    line-height: var(--tw-leading, var(--text-2xl--line-height));\n  }\n  .text-3xl {\n    font-size: var(--text-3xl);\n    line-height: var(--tw-leading, var(--text-3xl--line-height));\n  }\n  .text-lg {\n    font-size: var(--text-lg);\n    line-height: var(--tw-leading, var(--text-lg--line-height));\n  }\n  .text-sm {\n    font-size: var(--text-sm);\n    line-height: var(--tw-leading, var(--text-sm--line-height));\n  }\n  .text-xl {\n    font-size: var(--text-xl);\n    line-height: var(--tw-leading, var(--text-xl--line-height));\n  }\n  .text-xs {\n    font-size: var(--text-xs);\n    line-height: var(--tw-leading, var(--text-xs--line-height));\n  }\n  .font-medium {\n    --tw-font-weight: var(--font-weight-medium);\n    font-weight: var(--font-weight-medium);\n  }\n  .font-normal {\n    --tw-font-weight: var(--font-weight-normal);\n    font-weight: var(--font-weight-normal);\n  }\n  .font-semibold {\n    --tw-font-weight: var(--font-weight-semibold);\n    font-weight: var(--font-weight-semibold);\n  }\n  .text-base-content\\/60 {\n    color: var(--color-base-content);\n    @supports (color: color-mix(in lab, red, red)) {\n      color: color-mix(in oklab, var(--color-base-content) 60%, transparent);\n    }\n  }\n  .text-primary-content {\n    color: var(--color-primary-content);\n  }\n  .italic {\n    font-style: italic;\n  }\n  .no-underline {\n    text-decoration-line: none;\n  }\n  .prose {\n    & :where(.btn-link):not(:where([class~=\"not-prose\"], [class~=\"not-prose\"] *)) {\n      text-decoration-line: none;\n    }\n  }\n  .underline {\n    text-decoration-line: underline;\n  }\n  .opacity-0 {\n    opacity: 0%;\n  }\n  .shadow-lg {\n    --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));\n    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  }\n  .shadow-md {\n    --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));\n    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  }\n  .shadow-xl {\n    --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));\n    box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n  }\n  .btn-ghost {\n    @layer daisyui.l1 {\n      &:not(.btn-active, :hover, :active:focus, :focus-visible, input:checked:not(.filter .btn)) {\n        --btn-shadow: \"\";\n        --btn-bg: #0000;\n        --btn-border: #0000;\n        --btn-noise: none;\n        &:not(:disabled, [disabled], .btn-disabled) {\n          outline-color: currentcolor;\n          --btn-fg: var(--btn-color, currentColor);\n        }\n      }\n      @media (hover: none) {\n        &:not(.btn-active, :active, :focus-visible, input:checked:not(.filter .btn)):hover {\n          outline-color: currentcolor;\n          --btn-shadow: \"\";\n          --btn-bg: #0000;\n          --btn-fg: var(--btn-color, currentColor);\n          --btn-border: #0000;\n          --btn-noise: none;\n        }\n      }\n    }\n  }\n  .prose-quoteless {\n    :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::before {\n      content: none;\n    }\n    :where(blockquote p:first-of-type):not(:where([class~=\"not-prose\"],[class~=\"not-prose\"] *))::after {\n      content: none;\n    }\n  }\n  .btn-outline {\n    @layer daisyui.l1 {\n      &:not( .btn-active, :hover, :active:focus, :focus-visible, input:checked:not(.filter .btn), :disabled, [disabled], .btn-disabled ) {\n        --btn-shadow: \"\";\n        --btn-bg: #0000;\n        --btn-fg: var(--btn-color);\n        --btn-border: var(--btn-color);\n        --btn-noise: none;\n      }\n      @media (hover: none) {\n        &:not(.btn-active, :active, :focus-visible, input:checked:not(.filter .btn)):hover {\n          --btn-shadow: \"\";\n          --btn-bg: #0000;\n          --btn-fg: var(--btn-color);\n          --btn-border: var(--btn-color);\n          --btn-noise: none;\n        }\n      }\n    }\n  }\n  .btn-sm {\n    @layer daisyui.l1.l2 {\n      --fontsize: 0.75rem;\n      --btn-p: 0.75rem;\n      --size: calc(var(--size-field, 0.25rem) * 8);\n    }\n  }\n  .badge-primary {\n    @layer daisyui.l1.l2 {\n      --badge-color: var(--color-primary);\n      --badge-fg: var(--color-primary-content);\n    }\n  }\n  .select-none {\n    -webkit-user-select: none;\n    user-select: none;\n  }\n  .\\[--timeline-col-start\\:64px\\] {\n    --timeline-col-start: 64px;\n  }\n  .group-hover\\:text-primary-content {\n    &:is(:where(.group):hover *) {\n      @media (hover: hover) {\n        color: var(--color-primary-content);\n      }\n    }\n  }\n  .hover\\:avatar-online {\n    &:hover {\n      @media (hover: hover) {\n        @layer daisyui.l1.l2 {\n          &:before {\n            content: \"\";\n            position: absolute;\n            z-index: 1;\n            display: block;\n            border-radius: calc(infinity * 1px);\n            background-color: var(--color-success);\n            outline: 2px solid var(--color-base-100);\n            width: 15%;\n            height: 15%;\n            top: 7%;\n            right: 7%;\n          }\n        }\n      }\n    }\n  }\n  .hover\\:bg-base-content\\/10 {\n    &:hover {\n      @media (hover: hover) {\n        background-color: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n        }\n      }\n    }\n  }\n  .hover\\:bg-primary {\n    &:hover {\n      @media (hover: hover) {\n        background-color: var(--color-primary);\n      }\n    }\n  }\n  .hover\\:underline {\n    &:hover {\n      @media (hover: hover) {\n        text-decoration-line: underline;\n      }\n    }\n  }\n  .hover\\:badge-primary {\n    &:hover {\n      @media (hover: hover) {\n        @layer daisyui.l1.l2 {\n          --badge-color: var(--color-primary);\n          --badge-fg: var(--color-primary-content);\n        }\n      }\n    }\n  }\n  .sm\\:flex {\n    @media (width >= 40rem) {\n      display: flex;\n    }\n  }\n  .sm\\:hidden {\n    @media (width >= 40rem) {\n      display: none;\n    }\n  }\n  .sm\\:items-center {\n    @media (width >= 40rem) {\n      align-items: center;\n    }\n  }\n  .sm\\:gap-2 {\n    @media (width >= 40rem) {\n      gap: calc(var(--spacing) * 2);\n    }\n  }\n  .md\\:divider-horizontal {\n    @media (width >= 48rem) {\n      @layer daisyui.l1.l2 {\n        --divider-m: 0 1rem;\n        &.divider {\n          height: auto;\n          width: calc(0.25rem * 4);\n          flex-direction: column;\n          &:before {\n            height: 100%;\n            width: calc(0.25rem * 0.5);\n          }\n          &:after {\n            height: 100%;\n            width: calc(0.25rem * 0.5);\n          }\n        }\n      }\n    }\n  }\n  .md\\:w-1\\/2 {\n    @media (width >= 48rem) {\n      width: calc(1/2 * 100%);\n    }\n  }\n  .md\\:basis-\\[200px\\] {\n    @media (width >= 48rem) {\n      flex-basis: 200px;\n    }\n  }\n  .md\\:flex-row {\n    @media (width >= 48rem) {\n      flex-direction: row;\n    }\n  }\n  .md\\:gap-4 {\n    @media (width >= 48rem) {\n      gap: calc(var(--spacing) * 4);\n    }\n  }\n  .md\\:px-0 {\n    @media (width >= 48rem) {\n      padding-inline: calc(var(--spacing) * 0);\n    }\n  }\n  .lg\\:col-span-2 {\n    @media (width >= 64rem) {\n      grid-column: span 2 / span 2;\n    }\n  }\n  .lg\\:mt-8 {\n    @media (width >= 64rem) {\n      margin-top: calc(var(--spacing) * 8);\n    }\n  }\n  .lg\\:mt-12 {\n    @media (width >= 64rem) {\n      margin-top: calc(var(--spacing) * 12);\n    }\n  }\n  .lg\\:block {\n    @media (width >= 64rem) {\n      display: block;\n    }\n  }\n  .lg\\:flex {\n    @media (width >= 64rem) {\n      display: flex;\n    }\n  }\n  .lg\\:grid {\n    @media (width >= 64rem) {\n      display: grid;\n    }\n  }\n  .lg\\:w-1\\/3 {\n    @media (width >= 64rem) {\n      width: calc(1/3 * 100%);\n    }\n  }\n  .lg\\:basis-\\[300px\\] {\n    @media (width >= 64rem) {\n      flex-basis: 300px;\n    }\n  }\n  .lg\\:grid-cols-4 {\n    @media (width >= 64rem) {\n      grid-template-columns: repeat(4, minmax(0, 1fr));\n    }\n  }\n  .lg\\:flex-col {\n    @media (width >= 64rem) {\n      flex-direction: column;\n    }\n  }\n  .lg\\:items-end {\n    @media (width >= 64rem) {\n      align-items: flex-end;\n    }\n  }\n  .xl\\:w-1\\/4 {\n    @media (width >= 80rem) {\n      width: calc(1/4 * 100%);\n    }\n  }\n  .dark\\:border {\n    &:where(.dark, .dark *) {\n      border-style: var(--tw-border-style);\n      border-width: 1px;\n    }\n  }\n  .dark\\:border-b {\n    &:where(.dark, .dark *) {\n      border-bottom-style: var(--tw-border-style);\n      border-bottom-width: 1px;\n    }\n  }\n  .dark\\:border-base-content\\/30 {\n    &:where(.dark, .dark *) {\n      border-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        border-color: color-mix(in oklab, var(--color-base-content) 30%, transparent);\n      }\n    }\n  }\n  .dark\\:border-base-content\\/60 {\n    &:where(.dark, .dark *) {\n      border-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        border-color: color-mix(in oklab, var(--color-base-content) 60%, transparent);\n      }\n    }\n  }\n  .dark\\:bg-base-content {\n    &:where(.dark, .dark *) {\n      background-color: var(--color-base-content);\n    }\n  }\n  .dark\\:prose-invert {\n    &:where(.dark, .dark *) {\n      --tw-prose-body: var(--tw-prose-invert-body);\n      --tw-prose-headings: var(--tw-prose-invert-headings);\n      --tw-prose-lead: var(--tw-prose-invert-lead);\n      --tw-prose-links: var(--tw-prose-invert-links);\n      --tw-prose-bold: var(--tw-prose-invert-bold);\n      --tw-prose-counters: var(--tw-prose-invert-counters);\n      --tw-prose-bullets: var(--tw-prose-invert-bullets);\n      --tw-prose-hr: var(--tw-prose-invert-hr);\n      --tw-prose-quotes: var(--tw-prose-invert-quotes);\n      --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);\n      --tw-prose-captions: var(--tw-prose-invert-captions);\n      --tw-prose-kbd: var(--tw-prose-invert-kbd);\n      --tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);\n      --tw-prose-code: var(--tw-prose-invert-code);\n      --tw-prose-pre-code: var(--tw-prose-invert-pre-code);\n      --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);\n      --tw-prose-th-borders: var(--tw-prose-invert-th-borders);\n      --tw-prose-td-borders: var(--tw-prose-invert-td-borders);\n    }\n  }\n  .\\[\\&_ion-icon\\]\\:text-lg {\n    & ion-icon {\n      font-size: var(--text-lg);\n      line-height: var(--tw-leading, var(--text-lg--line-height));\n    }\n  }\n}\nhtml {\n  scroll-behavior: smooth;\n}\n#disqus_thread iframe[src*='ads-iframe'] {\n  display: none;\n}\n#dream-global-bg {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background-position: center;\n  background-size: cover;\n  z-index: -1;\n}\n.flip-container {\n  width: 100vw;\n  height: calc(100vh - 80px - 2rem);\n  max-width: 100%;\n  perspective: 1000px;\n  &.flip-it {\n    .flipper {\n      transform: rotateY(180deg);\n    }\n    .front {\n      overflow: hidden;\n    }\n    .back {\n      transform: translateX(0) rotateY(180deg);\n    }\n  }\n  .flipper {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    transform-style: preserve-3d;\n    transition: transform 0.75s;\n  }\n  .front, .back {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    backface-visibility: hidden;\n    transition: transform 0.75s;\n  }\n  .front {\n    transform: rotateY(0deg);\n  }\n  .back {\n    transform: translateX(-25%) rotateY(180deg);\n  }\n}\n#TableOfContents {\n  position: sticky;\n  top: calc(var(--spacing) * 24);\n  max-height: calc(100vh - 7rem);\n  overflow-y: auto;\n}\n@supports (-moz-appearance: none) {\n  #TableOfContents {\n    position: initial;\n  }\n}\n#TableOfContents ul {\n  @layer daisyui.l1.l2.l3 {\n    display: flex;\n    width: fit-content;\n    flex-direction: column;\n    flex-wrap: wrap;\n    padding: calc(0.25rem * 2);\n    --menu-active-fg: var(--color-neutral-content);\n    --menu-active-bg: var(--color-neutral);\n    font-size: 0.875rem;\n    :where(li ul) {\n      position: relative;\n      margin-inline-start: calc(0.25rem * 4);\n      padding-inline-start: calc(0.25rem * 2);\n      white-space: nowrap;\n      &:before {\n        position: absolute;\n        inset-inline-start: calc(0.25rem * 0);\n        top: calc(0.25rem * 3);\n        bottom: calc(0.25rem * 3);\n        background-color: var(--color-base-content);\n        opacity: 10%;\n        width: var(--border);\n        content: \"\";\n      }\n    }\n    :where(li > .menu-dropdown:not(.menu-dropdown-show)) {\n      display: none;\n    }\n    :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {\n      display: grid;\n      grid-auto-flow: column;\n      align-content: flex-start;\n      align-items: center;\n      gap: calc(0.25rem * 2);\n      border-radius: var(--radius-field);\n      padding-inline: calc(0.25rem * 3);\n      padding-block: calc(0.25rem * 1.5);\n      text-align: start;\n      transition-property: color, background-color, box-shadow;\n      transition-duration: 0.2s;\n      transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n      grid-auto-columns: minmax(auto, max-content) auto max-content;\n      text-wrap: balance;\n      user-select: none;\n    }\n    :where(li > details > summary) {\n      --tw-outline-style: none;\n      outline-style: none;\n      @media (forced-colors: active) {\n        outline: 2px solid transparent;\n        outline-offset: 2px;\n      }\n      &::-webkit-details-marker {\n        display: none;\n      }\n    }\n    :where(li > details > summary), :where(li > .menu-dropdown-toggle) {\n      &:after {\n        justify-self: flex-end;\n        display: block;\n        height: 0.375rem;\n        width: 0.375rem;\n        rotate: -135deg;\n        translate: 0 -1px;\n        transition-property: rotate, translate;\n        transition-duration: 0.2s;\n        content: \"\";\n        transform-origin: 50% 50%;\n        box-shadow: 2px 2px inset;\n        pointer-events: none;\n      }\n    }\n    details {\n      overflow: hidden;\n      interpolate-size: allow-keywords;\n    }\n    details::details-content {\n      block-size: 0;\n      @media (prefers-reduced-motion: no-preference) {\n        transition-behavior: allow-discrete;\n        transition-property: block-size, content-visibility;\n        transition-duration: 0.2s;\n        transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n      }\n    }\n    details[open]::details-content {\n      block-size: auto;\n    }\n    :where(li > details[open] > summary):after, :where(li > .menu-dropdown-toggle.menu-dropdown-show):after {\n      rotate: 45deg;\n      translate: 0 1px;\n    }\n    :where( li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title), li:not(.menu-title, .disabled) > details > summary:not(.menu-title) ):not(.menu-active, :active, .btn) {\n      &.menu-focus, &:focus-visible {\n        cursor: pointer;\n        background-color: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n        }\n        color: var(--color-base-content);\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n      }\n    }\n    :where( li:not(.menu-title, .disabled) > *:not(ul, 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 ) {\n      cursor: pointer;\n      background-color: var(--color-base-content);\n      @supports (color: color-mix(in lab, red, red)) {\n        background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent);\n      }\n      --tw-outline-style: none;\n      outline-style: none;\n      @media (forced-colors: active) {\n        outline: 2px solid transparent;\n        outline-offset: 2px;\n      }\n      box-shadow: 0 1px oklch(0% 0 0 / 0.01) inset, 0 -1px oklch(100% 0 0 / 0.01) inset;\n    }\n    :where(li:empty) {\n      background-color: var(--color-base-content);\n      opacity: 10%;\n      margin: 0.5rem 1rem;\n      height: 1px;\n    }\n    :where(li) {\n      position: relative;\n      display: flex;\n      flex-shrink: 0;\n      flex-direction: column;\n      flex-wrap: wrap;\n      align-items: stretch;\n      .badge {\n        justify-self: flex-end;\n      }\n      & > *:not(ul, .menu-title, details, .btn):active, & > *:not(ul, .menu-title, details, .btn).menu-active, & > details > summary:active {\n        --tw-outline-style: none;\n        outline-style: none;\n        @media (forced-colors: active) {\n          outline: 2px solid transparent;\n          outline-offset: 2px;\n        }\n        color: var(--menu-active-fg);\n        background-color: var(--menu-active-bg);\n        background-size: auto, calc(var(--noise) * 100%);\n        background-image: none, var(--fx-noise);\n        &:not(&:active) {\n          box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg);\n        }\n      }\n      &.menu-disabled {\n        pointer-events: none;\n        color: var(--color-base-content);\n        @supports (color: color-mix(in lab, red, red)) {\n          color: color-mix(in oklab, var(--color-base-content) 20%, transparent);\n        }\n      }\n    }\n    .dropdown:focus-within {\n      .menu-dropdown-toggle:after {\n        rotate: 45deg;\n        translate: 0 1px;\n      }\n    }\n    .dropdown-content {\n      margin-top: calc(0.25rem * 2);\n      padding: calc(0.25rem * 2);\n      &:before {\n        display: none;\n      }\n    }\n  }\n  @layer daisyui.l1.l2 {\n    :where(li:not(.menu-title) > *:not(ul, details, .menu-title)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) {\n      border-radius: var(--radius-field);\n      padding-inline: calc(0.25rem * 2.5);\n      padding-block: calc(0.25rem * 1);\n      font-size: 0.75rem;\n    }\n    .menu-title {\n      padding-inline: calc(0.25rem * 3);\n      padding-block: calc(0.25rem * 2);\n    }\n  }\n}\n.dream-alert {\n  > .heading {\n    display: flex;\n    align-items: center;\n    gap: calc(var(--spacing) * 1);\n    font-size: var(--text-sm);\n    line-height: var(--tw-leading, var(--text-sm--line-height));\n    --tw-font-weight: var(--font-weight-medium);\n    font-weight: var(--font-weight-medium);\n  }\n  ion-icon {\n    font-size: 1rem;\n  }\n  &.note {\n    border-inline-start-color: var(--color-blue-600);\n    &:where(.dark, .dark *) {\n      border-inline-start-color: var(--color-blue-500);\n    }\n    .heading {\n      color: var(--color-blue-600);\n      &:where(.dark, .dark *) {\n        color: var(--color-blue-500);\n      }\n    }\n  }\n  &.tip {\n    border-inline-start-color: var(--color-green-600);\n    &:where(.dark, .dark *) {\n      border-inline-start-color: var(--color-green-500);\n    }\n    .heading {\n      color: var(--color-green-600);\n      &:where(.dark, .dark *) {\n        color: var(--color-green-500);\n      }\n    }\n  }\n  &.important {\n    border-inline-start-color: var(--color-purple-600);\n    &:where(.dark, .dark *) {\n      border-inline-start-color: var(--color-purple-500);\n    }\n    .heading {\n      color: var(--color-purple-600);\n      &:where(.dark, .dark *) {\n        color: var(--color-purple-500);\n      }\n    }\n  }\n  &.warning {\n    border-inline-start-color: var(--color-yellow-600);\n    &:where(.dark, .dark *) {\n      border-inline-start-color: var(--color-yellow-500);\n    }\n    .heading {\n      color: var(--color-yellow-600);\n      &:where(.dark, .dark *) {\n        color: var(--color-yellow-500);\n      }\n    }\n  }\n  &.caution {\n    border-inline-start-color: var(--color-red-600);\n    &:where(.dark, .dark *) {\n      border-inline-start-color: var(--color-red-500);\n    }\n    .heading {\n      color: var(--color-red-600);\n      &:where(.dark, .dark *) {\n        color: var(--color-red-500);\n      }\n    }\n  }\n}\n@layer base {\n  :where(:root),:root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald] {\n    color-scheme: light;\n    --color-base-100: oklch(100% 0 0);\n    --color-base-200: oklch(93% 0 0);\n    --color-base-300: oklch(86% 0 0);\n    --color-base-content: oklch(35.519% 0.032 262.988);\n    --color-primary: oklch(76.662% 0.135 153.45);\n    --color-primary-content: oklch(33.387% 0.04 162.24);\n    --color-secondary: oklch(61.302% 0.202 261.294);\n    --color-secondary-content: oklch(100% 0 0);\n    --color-accent: oklch(72.772% 0.149 33.2);\n    --color-accent-content: oklch(0% 0 0);\n    --color-neutral: oklch(35.519% 0.032 262.988);\n    --color-neutral-content: oklch(98.462% 0.001 247.838);\n    --color-info: oklch(72.06% 0.191 231.6);\n    --color-info-content: oklch(0% 0 0);\n    --color-success: oklch(64.8% 0.15 160);\n    --color-success-content: oklch(0% 0 0);\n    --color-warning: oklch(84.71% 0.199 83.87);\n    --color-warning-content: oklch(0% 0 0);\n    --color-error: oklch(71.76% 0.221 22.18);\n    --color-error-content: oklch(0% 0 0);\n    --radius-selector: 1rem;\n    --radius-field: 0.5rem;\n    --radius-box: 1rem;\n    --size-selector: 0.25rem;\n    --size-field: 0.25rem;\n    --border: 1px;\n    --depth: 0;\n    --noise: 0;\n  }\n}\n@layer base {\n  @media (prefers-color-scheme: dark) {\n    :root:not([data-theme]) {\n      color-scheme: dark;\n      --color-base-100: oklch(20.84% 0.008 17.911);\n      --color-base-200: oklch(18.522% 0.007 17.911);\n      --color-base-300: oklch(16.203% 0.007 17.911);\n      --color-base-content: oklch(83.768% 0.001 17.911);\n      --color-primary: oklch(68.628% 0.185 148.958);\n      --color-primary-content: oklch(0% 0 0);\n      --color-secondary: oklch(69.776% 0.135 168.327);\n      --color-secondary-content: oklch(13.955% 0.027 168.327);\n      --color-accent: oklch(70.628% 0.119 185.713);\n      --color-accent-content: oklch(14.125% 0.023 185.713);\n      --color-neutral: oklch(30.698% 0.039 171.364);\n      --color-neutral-content: oklch(86.139% 0.007 171.364);\n      --color-info: oklch(72.06% 0.191 231.6);\n      --color-info-content: oklch(0% 0 0);\n      --color-success: oklch(64.8% 0.15 160);\n      --color-success-content: oklch(0% 0 0);\n      --color-warning: oklch(84.71% 0.199 83.87);\n      --color-warning-content: oklch(0% 0 0);\n      --color-error: oklch(71.76% 0.221 22.18);\n      --color-error-content: oklch(0% 0 0);\n      --radius-selector: 1rem;\n      --radius-field: 2rem;\n      --radius-box: 1rem;\n      --size-selector: 0.25rem;\n      --size-field: 0.25rem;\n      --border: 1px;\n      --depth: 0;\n      --noise: 0;\n    }\n  }\n}\n@layer base {\n  :root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald] {\n    color-scheme: light;\n    --color-base-100: oklch(100% 0 0);\n    --color-base-200: oklch(93% 0 0);\n    --color-base-300: oklch(86% 0 0);\n    --color-base-content: oklch(35.519% 0.032 262.988);\n    --color-primary: oklch(76.662% 0.135 153.45);\n    --color-primary-content: oklch(33.387% 0.04 162.24);\n    --color-secondary: oklch(61.302% 0.202 261.294);\n    --color-secondary-content: oklch(100% 0 0);\n    --color-accent: oklch(72.772% 0.149 33.2);\n    --color-accent-content: oklch(0% 0 0);\n    --color-neutral: oklch(35.519% 0.032 262.988);\n    --color-neutral-content: oklch(98.462% 0.001 247.838);\n    --color-info: oklch(72.06% 0.191 231.6);\n    --color-info-content: oklch(0% 0 0);\n    --color-success: oklch(64.8% 0.15 160);\n    --color-success-content: oklch(0% 0 0);\n    --color-warning: oklch(84.71% 0.199 83.87);\n    --color-warning-content: oklch(0% 0 0);\n    --color-error: oklch(71.76% 0.221 22.18);\n    --color-error-content: oklch(0% 0 0);\n    --radius-selector: 1rem;\n    --radius-field: 0.5rem;\n    --radius-box: 1rem;\n    --size-selector: 0.25rem;\n    --size-field: 0.25rem;\n    --border: 1px;\n    --depth: 0;\n    --noise: 0;\n  }\n}\n@layer base {\n  :root:has(input.theme-controller[value=forest]:checked),[data-theme=forest] {\n    color-scheme: dark;\n    --color-base-100: oklch(20.84% 0.008 17.911);\n    --color-base-200: oklch(18.522% 0.007 17.911);\n    --color-base-300: oklch(16.203% 0.007 17.911);\n    --color-base-content: oklch(83.768% 0.001 17.911);\n    --color-primary: oklch(68.628% 0.185 148.958);\n    --color-primary-content: oklch(0% 0 0);\n    --color-secondary: oklch(69.776% 0.135 168.327);\n    --color-secondary-content: oklch(13.955% 0.027 168.327);\n    --color-accent: oklch(70.628% 0.119 185.713);\n    --color-accent-content: oklch(14.125% 0.023 185.713);\n    --color-neutral: oklch(30.698% 0.039 171.364);\n    --color-neutral-content: oklch(86.139% 0.007 171.364);\n    --color-info: oklch(72.06% 0.191 231.6);\n    --color-info-content: oklch(0% 0 0);\n    --color-success: oklch(64.8% 0.15 160);\n    --color-success-content: oklch(0% 0 0);\n    --color-warning: oklch(84.71% 0.199 83.87);\n    --color-warning-content: oklch(0% 0 0);\n    --color-error: oklch(71.76% 0.221 22.18);\n    --color-error-content: oklch(0% 0 0);\n    --radius-selector: 1rem;\n    --radius-field: 2rem;\n    --radius-box: 1rem;\n    --size-selector: 0.25rem;\n    --size-field: 0.25rem;\n    --border: 1px;\n    --depth: 0;\n    --noise: 0;\n  }\n}\n@layer base {\n  :root {\n    --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\");\n  }\n}\n@layer base {\n  :root {\n    scrollbar-color: currentColor #0000;\n    @supports (color: color-mix(in lab, red, red)) {\n      scrollbar-color: color-mix(in oklch, currentColor 35%, #0000) #0000;\n    }\n  }\n}\n@layer base {\n  @property --radialprogress {\n    syntax: \"<percentage>\";\n    inherits: true;\n    initial-value: 0%;\n  }\n}\n@layer base {\n  :root:not(span) {\n    overflow: var(--page-overflow);\n  }\n}\n@layer base {\n  :root {\n    background: var(--page-scroll-bg, var(--root-bg));\n    --page-scroll-bg-on: linear-gradient(var(--root-bg, #0000), var(--root-bg, #0000))\n    var(--root-bg, #0000);\n    @supports (color: color-mix(in lab, red, red)) {\n      --page-scroll-bg-on: linear-gradient(var(--root-bg, #0000), var(--root-bg, #0000))\n    color-mix(in srgb, var(--root-bg, #0000), oklch(0% 0 0) calc(var(--page-has-backdrop, 0) * 40%));\n    }\n    --page-scroll-transition-on: background-color 0.3s ease-out;\n    transition: var(--page-scroll-transition);\n    scrollbar-gutter: var(--page-scroll-gutter, unset);\n    scrollbar-gutter: if(style(--page-has-scroll: 1): var(--page-scroll-gutter, unset) ; else: unset);\n  }\n  @keyframes set-page-has-scroll {\n    0%, to {\n      --page-has-scroll: 1;\n    }\n  }\n}\n@layer base {\n  :root, [data-theme] {\n    background: var(--page-scroll-bg, var(--root-bg));\n    color: var(--color-base-content);\n  }\n  :where(:root, [data-theme]) {\n    --root-bg: var(--color-base-100);\n  }\n}\n@keyframes rating {\n  0%, 40% {\n    scale: 1.1;\n    filter: brightness(1.05) contrast(1.05);\n  }\n}\n@keyframes dropdown {\n  0% {\n    opacity: 0;\n  }\n}\n@keyframes radio {\n  0% {\n    padding: 5px;\n  }\n  50% {\n    padding: 3px;\n  }\n}\n@keyframes toast {\n  0% {\n    scale: 0.9;\n    opacity: 0;\n  }\n  100% {\n    scale: 1;\n    opacity: 1;\n  }\n}\n@keyframes rotator {\n  89.9999%, 100% {\n    --first-item-position: 0 0%;\n  }\n  90%, 99.9999% {\n    --first-item-position: 0 calc(var(--items) * 100%);\n  }\n  100% {\n    translate: 0 -100%;\n  }\n}\n@keyframes skeleton {\n  0% {\n    background-position: 150%;\n  }\n  100% {\n    background-position: -50%;\n  }\n}\n@keyframes menu {\n  0% {\n    opacity: 0;\n  }\n}\n@keyframes progress {\n  50% {\n    background-position-x: -115%;\n  }\n}\n@property --tw-space-y-reverse {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0;\n}\n@property --tw-border-style {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: solid;\n}\n@property --tw-font-weight {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-shadow {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-shadow-alpha {\n  syntax: \"<percentage>\";\n  inherits: false;\n  initial-value: 100%;\n}\n@property --tw-inset-shadow {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n  syntax: \"<percentage>\";\n  inherits: false;\n  initial-value: 100%;\n}\n@property --tw-ring-color {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-ring-shadow {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-inset-ring-shadow {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n  syntax: \"*\";\n  inherits: false;\n}\n@property --tw-ring-offset-width {\n  syntax: \"<length>\";\n  inherits: false;\n  initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n  syntax: \"*\";\n  inherits: false;\n  initial-value: 0 0 #0000;\n}\n@layer properties {\n  @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n    *, ::before, ::after, ::backdrop {\n      --tw-space-y-reverse: 0;\n      --tw-border-style: solid;\n      --tw-font-weight: initial;\n      --tw-shadow: 0 0 #0000;\n      --tw-shadow-color: initial;\n      --tw-shadow-alpha: 100%;\n      --tw-inset-shadow: 0 0 #0000;\n      --tw-inset-shadow-color: initial;\n      --tw-inset-shadow-alpha: 100%;\n      --tw-ring-color: initial;\n      --tw-ring-shadow: 0 0 #0000;\n      --tw-inset-ring-color: initial;\n      --tw-inset-ring-shadow: 0 0 #0000;\n      --tw-ring-inset: initial;\n      --tw-ring-offset-width: 0px;\n      --tw-ring-offset-color: #fff;\n      --tw-ring-offset-shadow: 0 0 #0000;\n    }\n  }\n}\n"
  },
  {
    "path": "assets/js/grid.js",
    "content": "\"use strict\";\n\nfunction initGrid() {\n  document.querySelectorAll('.dream-grid').forEach(function (grid) {\n    var msnry = new Masonry(grid, {\n      itemSelector: '.dream-column'\n    });\n    if (grid.classList.contains('dream-grid-about')) {\n      window.aboutMasonry = msnry;\n    }\n    imagesLoaded(grid, function () {\n      grid.style.opacity = 1;\n      msnry.layout();\n    });\n  });\n}\ninitGrid();"
  },
  {
    "path": "assets/js/main.js",
    "content": "\"use strict\";\n\ndocument.addEventListener('alpine:init', function () {\n  Alpine.store('darkMode', {\n    init: function init() {\n      var _this = this;\n      var isDark = window.localStorage.getItem('hugo-theme-dream-is-dark');\n      if (isDark) {\n        this.on = isDark;\n      } else {\n        this.mql.addEventListener('change', function (event) {\n          _this.on = event.matches ? 'y' : 'n';\n        });\n        this.on = 'auto';\n      }\n      setTimeout(function () {\n        _this.setThemeForUtterances();\n      }, 6000);\n    },\n    mql: window.matchMedia('(prefers-color-scheme: dark)'),\n    on: 'n',\n    isDark: function isDark() {\n      return this.on === 'auto' ? this.mql.matches : this.on === 'y';\n    },\n    theme: function theme() {\n      return this.isDark() ? window.darkTheme : window.lightTheme;\n    },\n    iconMap: {\n      n: 'sunny',\n      y: 'moon',\n      auto: 'desktop'\n    },\n    icon: function icon() {\n      return this.iconMap[this.on];\n    },\n    toggle: function toggle(status) {\n      this.on = status;\n      if (status === 'auto') {\n        window.localStorage.removeItem('hugo-theme-dream-is-dark');\n      } else {\n        window.localStorage.setItem('hugo-theme-dream-is-dark', status);\n      }\n      this.setThemeForUtterances();\n      this.changeSyntaxHighlightingTheme();\n    },\n    changeSyntaxHighlightingTheme: function changeSyntaxHighlightingTheme() {\n      if (document.querySelector('#dream-single-post-main')) {\n        var customSyntaxHighlightingUrl = this.isDark() ? window.customSyntaxHighlighting.dark : window.customSyntaxHighlighting.light;\n        document.querySelector('link[data-custom-syntax-highlighting]').setAttribute('href', customSyntaxHighlightingUrl);\n      }\n    },\n    setThemeForUtterances: function setThemeForUtterances() {\n      var utterances = document.querySelector('iframe.utterances-frame');\n      if (utterances) {\n        utterances.contentWindow.postMessage({\n          type: 'set-theme',\n          theme: this.isDark() ? 'github-dark' : 'github-light'\n        }, 'https://utteranc.es');\n      }\n    }\n  });\n});"
  },
  {
    "path": "assets/js/toc.js",
    "content": "\"use strict\";\n\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction tocHighlighter() {\n  return {\n    headings: [],\n    links: [],\n    debouncedScroll: null,\n    init: function init() {\n      var toc = document.querySelector('#TableOfContents');\n      if (!toc || window.getComputedStyle(toc.parentElement).display === 'none') {\n        return;\n      }\n      this.links = _toConsumableArray(toc.querySelectorAll('a'));\n      this.headings = this.links.map(function (link) {\n        var _link$getAttribute;\n        return document.getElementById((_link$getAttribute = link.getAttribute('href')) === null || _link$getAttribute === void 0 ? void 0 : _link$getAttribute.replace('#', ''));\n      }).filter(Boolean);\n      this.debouncedScroll = this.debounce(this.onScroll.bind(this), 300);\n      this.debouncedScroll();\n    },\n    onScroll: function onScroll() {\n      var closest = null;\n      var minOffset = Infinity;\n      this.headings.forEach(function (el, index) {\n        var rect = el.getBoundingClientRect();\n        var offset = Math.abs(rect.top);\n        if (rect.top < window.innerHeight && offset < minOffset) {\n          minOffset = offset;\n          closest = index;\n        }\n      });\n      if (closest !== null && this.links[closest]) {\n        this.setActive(this.links[closest]);\n      }\n    },\n    setActive: function setActive(activeLink) {\n      this.links.forEach(function (link) {\n        return link.classList.remove('menu-active');\n      });\n      activeLink.classList.add('menu-active');\n    },\n    debounce: function debounce(fn, delay) {\n      var timeout;\n      return function () {\n        var _this = this;\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        clearTimeout(timeout);\n        timeout = setTimeout(function () {\n          return fn.apply(_this, args);\n        }, delay);\n      };\n    }\n  };\n}"
  },
  {
    "path": "config.toml",
    "content": "[module]\n[module.hugoVersion]\nmin = \"0.97.0\"\nextended = true\n"
  },
  {
    "path": "decapCMS/config.yml",
    "content": "backend:\n  name: git-gateway\n  branch: master\npublish_mode: editorial_workflow\nmedia_folder: static/img\npublic_folder: /img\ncollections:\n  - name: 'post'\n    label: 'Post'\n    folder: 'content/posts'\n    create: true\n    slug: '{{year}}-{{month}}-{{day}}-{{slug}}'\n    fields:\n      - label: 'Draft'\n        name: 'draft'\n        widget: 'boolean'\n        default: false\n      - label: 'Title'\n        name: 'title'\n        widget: 'string'\n      - label: 'Publish Date'\n        name: 'date'\n        widget: 'datetime'\n      - label: 'Last Modified Date'\n        name: 'lastmod'\n        widget: 'datetime'\n        required: false\n      - label: 'Author'\n        name: 'author'\n        widget: 'string'\n        required: false\n      - label: 'Author Link'\n        name: 'authorlink'\n        widget: 'string'\n        required: false\n      - label: 'Cover'\n        name: 'cover'\n        widget: 'image'\n        required: false\n      - label: 'Categories'\n        name: 'categories'\n        widget: 'list'\n        summary: '{{fields.category}}'\n        field:\n          label: 'Category'\n          name: 'category'\n          widget: 'string'\n      - label: 'Tags'\n        name: 'tags'\n        widget: 'list'\n        summary: '{{fields.tag}}'\n        field:\n          label: 'Tag'\n          name: 'tag'\n          widget: 'string'\n      - label: 'Disable Last Modified Date'\n        name: 'nolastmod'\n        widget: 'boolean'\n        default: false\n\n      - label: 'Body'\n        name: 'body'\n        widget: 'markdown'\n  - name: 'about'\n    label: 'About'\n    folder: 'content/about'\n    create: true\n    slug: '{{year}}-{{month}}-{{day}}-{{slug}}'\n    fields:\n      - label: 'Draft'\n        name: 'draft'\n        widget: 'boolean'\n        default: false\n      - label: 'Title'\n        name: 'title'\n        widget: 'string'\n      - label: 'Publish Date'\n        name: 'date'\n        widget: 'datetime'\n\n      - label: 'Body'\n        name: 'body'\n        widget: 'markdown'\n"
  },
  {
    "path": "decapCMS/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Content Manager</title>\n    <!-- Include the script that enables Netlify Identity on this page. -->\n    <script src=\"https://identity.netlify.com/v1/netlify-identity-widget.js\"></script>\n  </head>\n  <body>\n    <!-- Include the script that builds the page and powers Decap CMS -->\n    <script src=\"https://cdn.jsdelivr.net/npm/decap-cms@3.6.2/dist/decap-cms.js\" integrity=\"sha256-WxCg7VZgMojBMxL13SErQg75vziDFV937n92ia4vijY=\" crossorigin=\"anonymous\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "docs/app/AdSense.jsx",
    "content": "'use client'\n\nimport { useEffect } from 'react'\nimport Script from 'next/script'\n\nexport default function AdSense() {\n  useEffect(() => {\n    ;(window.adsbygoogle = window.adsbygoogle || []).push({})\n  }, [])\n\n  return (\n    <div style={{ width: '100%' }}>\n      <Script\n        async\n        src=\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2097283051393565\"\n        crossOrigin=\"anonymous\"\n        strategy=\"lazyOnload\"\n      />\n      <ins\n        className=\"adsbygoogle\"\n        style={{ display: 'flex', justifyContent: 'left' }}\n        data-ad-client=\"ca-pub-2097283051393565\"\n        data-ad-slot=\"4533331907\"\n        data-ad-format=\"rectangle\"\n        data-full-width-responsive=\"true\"\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "docs/app/[[...mdxPath]]/page.jsx",
    "content": "import { generateStaticParamsFor, importPage } from 'nextra/pages'\nimport { useMDXComponents as getMDXComponents } from '../../mdx-components'\n\nexport const generateStaticParams = generateStaticParamsFor('mdxPath')\n\nexport async function generateMetadata(props) {\n  const params = await props.params\n  const { metadata } = await importPage(params.mdxPath)\n  return metadata\n}\n\nconst Wrapper = getMDXComponents().wrapper\n\nexport default async function Page(props) {\n  const params = await props.params\n  const { default: MDXContent, toc, metadata, sourceCode } = await importPage(params.mdxPath)\n  return (\n    <Wrapper toc={toc} metadata={metadata} sourceCode={sourceCode}>\n      <MDXContent {...props} params={params} />\n    </Wrapper>\n  )\n}\n"
  },
  {
    "path": "docs/app/layout.jsx",
    "content": "import { Layout, Navbar, Footer } from 'nextra-theme-docs'\nimport { Banner, Head } from 'nextra/components'\nimport { getPageMap } from 'nextra/page-map'\nimport Adsense from './AdSense'\n// Required for theme styles, previously was imported under the hood\nimport 'nextra-theme-docs/style.css'\n\nconst siteTitle = '🌱 Hugo Theme Dream'\n\n/** @type {import('next').Metadata} */\nexport const metadata = {\n  metadataBase: new URL('https://hugo-theme-dream.g1en.site'),\n  title: {\n    default: 'Hugo Theme Dream',\n    template: `%s | Hugo Theme Dream`,\n  },\n}\n\nconst banner = (\n  <Banner storageKey=\"zen-mode\">\n    <a href=\"https://hugo-theme-dream.g1en.site/zen-mode\">{siteTitle} 3.5 introduces Zen mode. Read more →</a>\n  </Banner>\n)\nconst navbar = (\n  <Navbar\n    logo={<span style={{ fontSize: '1.125rem', fontWeight: 600 }}>{siteTitle}</span>}\n    projectLink=\"https://github.com/g1eny0ung/hugo-theme-dream\"\n  />\n)\nconst footer = (\n  <Footer>\n    <p>\n      <a style={{ textDecoration: 'underline' }} href=\"https://github.com/g1eny0ung/hugo-theme-dream\" target=\"_blank\">\n        {siteTitle}\n      </a>{' '}\n      is released under the{' '}\n      <a style={{ textDecoration: 'underline' }} href=\"https://choosealicense.com/licenses/mit/\" target=\"_blank\">\n        MIT License\n      </a>\n      .\n    </p>\n  </Footer>\n)\n\nexport default async function RootLayout({ children }) {\n  return (\n    <html\n      // Not required, but good for SEO\n      lang=\"en\"\n      // Required to be set\n      dir=\"ltr\"\n      // Suggested by `next-themes` package https://github.com/pacocoursey/next-themes#with-app\n      suppressHydrationWarning\n    >\n      <Head\n        color={{\n          hue: 146,\n          saturation: 50,\n          lightness: 36,\n        }}\n      >\n        <link\n          rel=\"icon\"\n          href=\"data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%2210 0 100 100%22><text y=%22.90em%22 font-size=%2290%22>🌱</text></svg>\"\n        />\n      </Head>\n      <body>\n        <Layout\n          banner={banner}\n          navbar={navbar}\n          pageMap={await getPageMap()}\n          docsRepositoryBase=\"https://github.com/g1eny0ung/hugo-theme-dream/tree/master/docs\"\n          editLink=\"Edit this page on GitHub\"\n          sidebar={{ defaultMenuCollapseLevel: 1 }}\n          toc={{\n            extraContent: <Adsense />,\n          }}\n          footer={footer}\n          // ...Your additional theme config options\n        >\n          {children}\n        </Layout>\n      </body>\n    </html>\n  )\n}\n"
  },
  {
    "path": "docs/content/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n## [3.14.0] - 2026-02-08\n\n### Added\n\n- Support image title as <https://gohugo.io/render-hooks/images/> describes\n\n### Changed\n\n- Optimize browser compatibility of toc and achieve smooth scrolling\n\n## [3.13.0] - 2025-09-08\n\n### Added\n\n- Mathematics enhancements [#387](https://github.com/g1eny0ung/hugo-theme-dream/pull/387)\n  - Support `$` delimiter for inline math\n  - Support `math: true` page param for whole page math rendering\n- Add `covercaption` page param to display a caption for the cover image in the single post page (you need to set `showSummaryCoverInPost` to `true` first)\n\n### Fixed\n\n- Fix the integrity issue of jsdelivr alpinejs\n\n## [3.12.0] - 2025-04-09\n\n### Added\n\n- Highlight toc items when scrolling [#383](https://github.com/g1eny0ung/hugo-theme-dream/pull/383)\n\n### Changed\n\n- Upgrade to tailwindcss v4 and daisyUI v5 [#374](https://github.com/g1eny0ung/hugo-theme-dream/pull/374)\n\n### Fixed\n\n- Escape mermaidjs code before safe [#376](https://github.com/g1eny0ung/hugo-theme-dream/pull/376)\n- Use one default $navItems [#381](https://github.com/g1eny0ung/hugo-theme-dream/pull/381)\n\n## [3.11.0] - 2025-03-04\n\n### Added\n\n- Add Google AdSense support [#363](https://github.com/g1eny0ung/hugo-theme-dream/pull/363)\n\n### Changed\n\n- Remove author display if both post author and site author are not set [#354](https://github.com/g1eny0ung/hugo-theme-dream/pull/354)\n- Prioritize page descriptions over page summaries [#356](https://github.com/g1eny0ung/hugo-theme-dream/pull/356)\n- Allow favicon to be specified in text format\n- Support Twikoo comment system [#359](https://github.com/g1eny0ung/hugo-theme-dream/pull/359)\n- Allow specifying `about` in [`reorderNavItems`](./params-configurations.mdx#reordernavitems) [#371](https://github.com/g1eny0ung/hugo-theme-dream/pull/371)\n\n### Fixed\n\n- Fix the background and z-index problem of the zoomable image\n- Optimize layout shifts when the homepage loads [#364](https://github.com/g1eny0ung/hugo-theme-dream/pull/364)\n- Disable Disqus ads\n\n## [3.10.0] - 2025-01-07\n\n### Added\n\n- Add `imageZoomableInPost` param to control the zoomable of images in the single post page [#345](https://github.com/g1eny0ung/hugo-theme-dream/pull/345)\n- Support mathematical equations and expressions by using [MathJax](https://www.mathjax.org/) [#350](https://github.com/g1eny0ung/hugo-theme-dream/pull/350)\n\n### Changed\n\n- Make TOC scrollable when it is too long [#340](https://github.com/g1eny0ung/hugo-theme-dream/pull/340)\n- Bump Mermaid version to 11.4.1\n- Now external links will open in a new tab by default\n\n### Fixed\n\n- Fix Disqus styling issues\n- Add background color to the dark mode switch button\n\n## [3.9.0] - 2024-11-17\n\n### Added\n\n- Now you can group posts with any layout in archives page, see [custom group layout](https://hugo-theme-dream.g1en.site/archives-page#custom-group-layout) for more details\n\n### Changed\n\n- Append global page footer on about page [#329](https://github.com/g1eny0ung/hugo-theme-dream/pull/329)\n\n### Fixed\n\n- Supplement translations in fr/pt [#327](https://github.com/g1eny0ung/hugo-theme-dream/pull/327)\n- Dropdown menu links are not clickable on Safari [#334](https://github.com/g1eny0ung/hugo-theme-dream/pull/334)\n\n## [3.8.2] - 2024-09-25\n\n### Added\n\n- Now you can share your post to WhatsApp [#317](https://github.com/g1eny0ung/hugo-theme-dream/pull/317)\n- Add `reorderShares` param [#320](https://github.com/g1eny0ung/hugo-theme-dream/pull/320)\n- Add a slot for Google AdSense on the post page, view [this issue](https://github.com/g1eny0ung/hugo-theme-dream/issues/315#issuecomment-2370701549) for more details\n\n### Changed\n\n- Rename `updateAt` to `updatedAt` in i18n files\n\n### Fixed\n\n- Tweak English translations for `minuteRead` and `updateAt` [#323](https://github.com/g1eny0ung/hugo-theme-dream/pull/323)\n\n## [3.8.1] - 2024-09-08\n\n### Fixed\n\n- Fix the cache issue of `commentSystems.html`\n- Add missing \"about\" translation to the Italian language file\n\n## [3.8.0] - 2024-09-07\n\n### Added\n\n- Valine comments can now be customized using a partial file [#311](https://github.com/g1eny0ung/hugo-theme-dream/pull/311)\n- Support [Waline](https://waline.js.org/en/) comments [#310](https://github.com/g1eny0ung/hugo-theme-dream/pull/310)\n\n### Changed\n\n- Upgrade Hugo minimum version to 0.97.0\n\n### Deprecated\n\n- Deprecate `VALINE_LANGUAGE` param [#309](https://github.com/g1eny0ung/hugo-theme-dream/pull/309)\n\n## [3.7.0] - 2024-08-29\n\n### Added\n\n- Add [Mermaid](https://mermaid.js.org/intro/) diagrams support [#307](https://github.com/g1eny0ung/hugo-theme-dream/pull/307)\n- Add [GitHub Alerts Markdown extension](https://github.blog/changelog/2023-12-14-new-markdown-extension-alerts-provide-distinctive-styling-for-significant-content/) compatible alerts [#308](https://github.com/g1eny0ung/hugo-theme-dream/pull/308)\n\n### Fixed\n\n- Fix image size of summary cards in Zen mode\n\n## [3.6.1] - 2024-08-25\n\n### Fixed\n\n- Render SVG images in summary\n- Incorrect use of the `_internal/schema.html` template [#306](https://github.com/g1eny0ung/hugo-theme-dream/pull/306)\n- Remove shortcut link type in favicon\n\n## [3.6.0] - 2024-08-24\n\n### Added\n\n- Add `noDefaultSummaryCover` param [#301](https://github.com/g1eny0ung/hugo-theme-dream/pull/301)\n\n### Changed\n\n- Enhance Japanese translation [#303](https://github.com/g1eny0ung/hugo-theme-dream/pull/303)\n- Enhance Chinese translation\n- Supplement meta tags for SEO [#305](https://github.com/g1eny0ung/hugo-theme-dream/pull/305)\n\n### Deprecated\n\n- Deprecate `hasTwitterEmbed` param [#302](https://github.com/g1eny0ung/hugo-theme-dream/pull/302)\n\n## [3.5.0] - 2024-08-19\n\n🍃 Hugo Theme Dream 3.5 introduces Zen mode. View [Zen Mode](./zen-mode.mdx) for more details.\n\n### Added\n\n- Zen mode: a simple layout that allows you to concentrate on reading and writing [#299](https://github.com/g1eny0ung/hugo-theme-dream/pull/299)\n\n### Changed\n\n- Now taxonomy pages follow the same layout as the home page\n\n### Deprecated\n\n- If you still use `disqusShortname`, please replace it with `services.disqus.shortname`\n\n### Fixed\n\n- Fix height of `.flip-container` class\n- Fix tabindex issue in nav menu\n\n## [3.4.1] - 2024-08-14\n\n### Added\n\n- Allow text-based custom nav items\n\n### Changed\n\n- Refactor the implementation of localized time [#298](https://github.com/g1eny0ung/hugo-theme-dream/pull/298)\n\n## [3.4.0] - 2024-08-10\n\n### Added\n\n- Add `reorderNavItems` and `collapseNavItems` params to reorder and collapse navigation items\n- Add `[params.navItems]` to append custom items to the navbar\n\n### Changed\n\n- Minimalize the theme css\n\n### Fixed\n\n- Add missing descriptive attributes in some elements\n\n## [3.3.0] - 2024-08-01\n\n### Added\n\n- Support arbitrary taxonomies [#292](https://github.com/g1eny0ung/hugo-theme-dream/pull/292)\n\n### Fixed\n\n- Fix the overflow problem of pre's content\n- Fix an overflow problem when users enable always show scroll bars in the system settings\n- Resources accessibility when deploying site to a subdomain [#295](https://github.com/g1eny0ung/hugo-theme-dream/pull/295)\n\n## [3.2.0] - 2024-07-25\n\n### Added\n\n- Add `showPrevNextPost` param to control the display of previous and next post links in the single post page\n- Add `showTableOfContents` param to control the display of the table of contents in the single post page\n\n## [3.1.1] - 2024-07-23\n\n### Changed\n\n- Adjust shadow style of navbar\n- Now if a paginator has only one page, the previous and next buttons will be hidden\n\n### Fixed\n\n- Correct the usage of semantic elements in `baseof.html` and `single.html`\n\n## [3.1.0] - 2024-07-18\n\n### Added\n\n- Support image optimization for summary images. See [Image Optimization](https://hugo-theme-dream.g1en.site/summary-images#image-optimization) for more details\n\n### Changed\n\n- Upgrade `imagesloaded` to `5.0.0`\n\n### Fixed\n\n- Fix the problem of misaligned images during initial loading\n\n## [3.0.1] - 2024-07-12\n\n### Fixed\n\n- Add WAI-ARIA roles to some non-semantic elements\n- Fix mobile layout in term.html\n- Add mobile display for nav right section\n\n## [3.0.0] - 2024-07-09\n\n🎉 Hugo Theme Dream 3.0 is released.\n\nSee the [migration guide](https://hugo-theme-dream.g1en.site/migrate-to-v3) for more details.\n"
  },
  {
    "path": "docs/content/_meta.js",
    "content": "export default {\n  'docs-v2': {\n    title: 'Docs (v2)',\n    type: 'page',\n    href: 'https://hugo-theme-dream-docs-v2.netlify.app',\n  },\n  index: 'Quick Start',\n  'base-configurations': 'Base Configurations',\n  'params-configurations': 'Params Configurations',\n  'zen-mode': 'Zen Mode',\n  i18n: 'Internationalization',\n  'website-analytics': 'Website Analytics',\n  'social-comments': 'Social Comments',\n  'adsense': 'Google AdSense',\n  'post-page': 'Post Page',\n  'about-page': 'About Page',\n  'archives-page': 'Archives Page',\n  'custom-nav-items': 'Custom Nav Items',\n  search: 'Search',\n  'summary-images': 'Summary Images',\n  'syntax-highlighting': 'Syntax Highlighting',\n  'social-links': 'Social Links',\n  'light-and-dark-mode': 'Light and Dark Mode',\n  custom: 'Custom Theme',\n  'decap-cms': 'Decap CMS',\n  CHANGELOG: 'Changelog',\n  'migrate-to-v3': 'Migrate to v3',\n}\n"
  },
  {
    "path": "docs/content/about-page.md",
    "content": "# About Page\n\nIn [Quick Start](/), we added **About Me** as below:\n\n```bash\nhugo new about/me.md\n```\n\n```md\n---\ntitle: About Me\n---\n\nHi, my name is Yue Yang.\n\nThis is my blog.\n```\n\nThen create an `index.md` in the about folder and put below contents into it:\n\n```md\n---\nheadless: true\n---\n```\n\nYou will be curious why it's needed to create an `index.md`. Because Dream doesn't want the about folder to be output as `RegularPages`.\n\nRelated docs: <https://gohugo.io/content-management/page-bundles/#headless-bundles>\n\n## Access the About page\n\nThere are two ways to access the About page:\n\n- Click the **About** link in the top right navigation bar\n- Click the avatar in the top left navigation bar\n\n## More descriptions\n\nYou can add multiple `.md` files, all of them will be rendered one by one in the masonry layout.\n\n```bash\nhugo new about/desc1.md\n\nhugo new about/desc2.md\n```\n"
  },
  {
    "path": "docs/content/adsense.mdx",
    "content": "# Google Adsense\n\n> [!WARNING]\n>\n> Currently, this feature is still experimental. It's only take effect on the [Post Page](post-page.mdx).\n>\n> It may change in the future.\n\n## How to use\n\nEven though Adsense provides auto ads, it's also necessary to add slots to control the position of the ads.\n\nYou can create these partial files in the `layouts/partials` folder to enable Google Adsense on your site.\n\n- **`adsense.html`**\n- **`adsense-post-bottom.html`**\n\nThe `adsense.html` is used to add the ads to the left sidebar on the post page. Please use\nthe [display ad unit](https://support.google.com/adsense/answer/9274025) for this slot.\n\nThe `adsense-post-bottom.html` is used to add the ads to the bottom of the post page. Please use\nthe [In-article ad](https://support.google.com/adsense/answer/9185052) for this slot.\n\nAfter creating ad units, put the code in the partial file to make it work.\n\n## Tips\n\n### Use rectangle format\n\nAfter testing, I found that the ad unit with rectangle format is the best choice for the left sidebar (`adsense.html`).\nOtherwise, Adsense usually uses [a nearly `600px` height ad unit](https://support.google.com/google-ads/answer/7031480)\nbecause there is enough space for it.\n\nSo I recommend referring to this [document](https://support.google.com/adsense/answer/9183460) to specify the\n`data-ad-format` to `rectangle`.\n"
  },
  {
    "path": "docs/content/archives-page.md",
    "content": "# Archives Page\n\nArchives page is a list of all posts by timeline. It will be rendered as `/posts`.\n\n## Custom Header\n\nYou can custom your archives page's header by placing a `_index.md` in `content/posts`.\n\nFor example, paste below in `_index.md`:\n\n```markdown\n---\ntitle: Archives\n---\n\nAll posts by timeline.\n```\n\nThese will be rendered as:\n\n```html\n<h1 class=\"text-3xl\">Archives</h1>\n<p class=\"text-sm\">All posts by timeline.</p>\n```\n\nOne is the title, and the other is the description.\n\n## Custom Group Layout\n\nThe timeline is grouped by year by default. You can use a custom layout to group by month or any other way.\nThis can be done by adding a `groupLayout` field in the front matter of the `_index.md` file.\n\nFor example, in `content/posts/_index.md`:\n\n```markdown\n---\ngroupLayout: Jan 2006\n---\n```\n\nFor how to define the layout, please refer to [layout string](https://gohugo.io/methods/pages/groupbydate/#layout-string).\n"
  },
  {
    "path": "docs/content/base-configurations.mdx",
    "content": "# Base Configurations\n\n> [!NOTE]\n>\n> This doc only introduces some settings that are commonly used in most Hugo sites.\n>\n> Please view the [full configuration](https://gohugo.io/getting-started/configuration/#all-configuration-settings) for more details.\n\n## Basic Settings\n\n### baseURL = \"https://g1en.site\"\n\nThe absolute URL (protocol, host, path, and trailing slash) of your published site.\n\n### defaultContentLanguage = \"zh\"\n\nContent without language indicator will default to this language. Default is `en`.\n\n### languageCode = \"zh-Hans\"\n\nLanguageCode is used to set the `lang` attribute in the `<html>` tag. It will also be:\n\n- Used in RSS\n- Used in the `og:locale` meta tag\n\n### title = \"g1eny0ung's Blog\"\n\nThe site title.\n\n## Extra Settings\n\n### enableRobotsTXT = true\n\nOptional. View https://en.wikipedia.org/wiki/Robots.txt to learn more about the `robots.txt` file.\n\n### hasCJKLanguage = true\n\nAs my blog was written in Chinese, I need to set this to correct the `{{ .ReadingTime }}` of the post.\n"
  },
  {
    "path": "docs/content/custom-nav-items.mdx",
    "content": "# Append Custom Items to the Navbar\n\nThis doc will guide you on how to append custom items to the navbar.\n\nYou can add arbitrary items to the navbar by setting\nthe `[params.navItems]` in your `hugo.toml`, below is an example:\n\n> [!TIP]\n>\n> For a good visual experience, it is recommended not to add too many customisation items, i.e. just highlight the\n> navigation items you want the user to see.\n\n```toml\n[params]\n[params.navItems]\nseries = { href = \"/series\", icon = \"planet\", title = \"Series\" }\ngithub = { href = \"https://github.com/g1eny0ung\", target = \"_blank\", icon = \"logo-github\", title = \"GitHub\" }\n```\n\nIn this example, we define two keys `series` and `github` under `params.navItems`,\nDream will find them and append them to the navbar by default.\n\nYou can also reorder custom items with the default items by setting the `reorderNavItems` parameter in your `hugo.toml`:\n\n```toml\nreorderNavItems = [\"github\", \"about\", \"search\", \"rss\", \"posts\", \"categories\", \"tags\", \"series\"]\n```\n\nThe same goes for `collapseNavItems`, you can also collapse custom items to a dropdown menu:\n\n```toml\ncollapseNavItems = [\"series\"]\n```\n\nThe next section will describe the properties in the sub-tables we used in the example before.\n\n## Properties\n\nEach sub-table (object) can have the following properties.\n\n### Required\n\n- `href`: The URL of the item.\n- `title`: The title of the item.\n\n### Optional\n\n- `target`: The [target attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) of the item.\n- `icon`: The name of the icon. You can find available icons [here](https://ionic.io/ionicons).\n"
  },
  {
    "path": "docs/content/custom.mdx",
    "content": "# Custom Theme\n\nThis doc describes how to add `CSS` and `JS` to customize the theme.\n\nBefore customization, you need to add the related fields to your configuration, below is an example:\n\n```toml\n[params]\n[params.advanced]\ncustomCSS = [\"css/custom.css\"] # Files in the list will be loaded in order.\ncustomJS = [\"js/custom.js\"]\n```\n\n> [!NOTE]\n>\n> The file paths specified in `customCSS` and `customJS` are related to the `static` folder, so you need to put your custom files in the `static` folder.\n\n## CSS\n\n> [!NOTE]\n>\n> In v3, Dream uses [tailwindcss](https://tailwindcss.com/) and [daisyUI](https://daisyui.com/) to build the theme.\n> The old way to customize the CSS is still available (by adding `customCSS`), but now it's harder to style components with\n> pure css, because the tailwindcss class is more trivial than the Semantic UI used in the past.\n>\n> I'll think about how to customize styles based on tailwindcss more easily in the future.\n>\n> So if you are not familiar with frontend development, recommend you to ignore this part. Mostly, you don't need to customize the CSS.\n\n## JS\n\n> [!NOTE]\n>\n> In v3, Dream uses [Alpine.js](https://alpinejs.dev/) to build the theme.\n>\n> Like the CSS, the old way to customize the JS is still available (by adding `customJS`),\n> but there are no specific hooks for now that allow you to execute JS functions to modify specific places.\n>\n> Now you can use Alpine.js to do anything you want. I prepare to add some hooks in the future to make it easier to customize the theme with Alpine.js.\n>\n> So if you are not familiar with frontend development, I recommend you to ignore this part. Mostly, you don't need to customize the JS.\n"
  },
  {
    "path": "docs/content/decap-cms.md",
    "content": "# Decap CMS\n\nDream provides a predefined configuration for [Decap CMS](https://decapcms.org/).\nIt locates in the `decapCMS` folder.\n\nTo use it, create an `admin` folder in your `static` directory, then copy the contents of the `decapCMS` folder to the `admin` folder.\n"
  },
  {
    "path": "docs/content/i18n.md",
    "content": "# i18n\n\ni18n means [internationalization](https://en.wikipedia.org/wiki/Internationalization_and_localization).\n\nDream supports multiple languages. You can view the list of supported languages in [hugo-theme-dream/i18n/](https://github.com/g1eny0ung/hugo-theme-dream/tree/master/i18n).\n\nIf you don't see your language in the list, welcome to contribute by adding a new language file.\n"
  },
  {
    "path": "docs/content/index.mdx",
    "content": "# Quick Start\n\n> [!NOTE]\n>\n> I assume you have already read [Hugo Getting Started](https://gohugo.io/getting-started/),\n> this can help you to get an overview of Hugo and understand this guide better.\n\n## Introduction\n\nDream is a [Hugo](https://gohugo.io/) theme. I build it for [my blog](https://g1en.site).\n\nThe main features are **Masonry Layout Posts** and **Flippable About Page**.\n\nDream also supports **light and dark mode** out of the box.\n\n![Screenshot](https://github.com/g1eny0ung/hugo-theme-dream/blob/master/images/screenshot.png?raw=true)\n\nFor people who prefer a simple and clean interface,\nDream has a [**Zen mode**](https://hugo-theme-dream.g1en.site/zen-mode).\nIt is more concentrated on reading and writing.\n\n![Zen Mode](https://github.com/g1eny0ung/hugo-theme-dream/blob/master/docs/public/images/zen-mode.png?raw=true)\n\n## Installation\n\nGo into your site folder:\n\n```sh\nmkdir -p themes && cd themes\ngit clone https://github.com/g1eny0ung/hugo-theme-dream.git dream\n```\n\n## Create configuration file\n\nCreate `hugo.toml` if it doesn't already exist in your site folder, and then enable Dream by adding:\n\n```toml\ntheme = \"dream\"\n```\n\n> [!NOTE]\n>\n> If you are cloning the theme with another name, replace `dream` with the name you cloned.\n>\n> For example, if you cloned the theme with the name `my-dream`, you should write `theme = \"my-dream\"`.\n\n> [!TIP]\n>\n> You can download and use this [default configuration file](https://github.com/g1eny0ung/hugo-theme-dream/blob/master/hugo.example.toml). It contains all params used in Dream.\n\n## Default or Zen Mode\n\nDream has two out-of-the-box modes: **Default** and **Zen**.\n\nDefault mode will display your posts in a masonry layout.\n\nZen mode will display your posts in a single column layout.\nIt is more suitable for people who prefer a simple and clean interface.\nAnd it is more concentrated on reading and writing.\n\nHere is a demo of the Zen mode: https://g1en-site-zen-mode-preview.netlify.app/.\n\nYou can enable Zen mode by adding `zenMode = true` to the configuration file.\n\n```toml\n[params]\nzenMode = true\n```\n\nView [Zen Mode](./zen-mode.md) for more details.\n\n## Set language for your site\n\nOpen `hugo.toml` and write:\n\n```toml\ndefaultContentLanguage = \"en\"\n```\n\nView [i18n](./i18n.md) for supported languages and more details.\n\n## Website Analytics\n\nDream supports [Google Analytics](https://www.google.com/analytics/) for website analytics.\n\nIn `hugo.toml`, set:\n\n```toml\n[services]\n[services.googleAnalytics]\nID = \"...\"\n```\n\n> [!WARNING]\n>\n> You may have used `googleAnalytics = \"...\"` before. This is deprecated in Hugo `0.120.0`.\n>\n> Please upgrade to the new configuration. See https://gohugo.io/methods/site/googleanalytics/ for more details.\n\n## Social Comments\n\nDream can use [Disqus](https://disqus.com/) for social comments.\n\nIn `hugo.toml`, set:\n\n```toml\n[services]\n[services.disqus]\nshortname = \"...\"\n```\n\n> [!WARNING]\n>\n> You may have used `disqusShortname = \"...\"` before. This is deprecated in Hugo `0.120.0`.\n>\n> Please upgrade to the new configuration. See https://gohugo.io/methods/site/disqusshortname/ for more details.\n\n> [!WARNING]\n>\n> Currently, Disqus does not support [oklch colors](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch) which is used in Dream.\n> We need to make an extra hack to make it work. See [Compatible with oklch colors](./social-comments.md#compatible-with-oklch-colors) for more details.\n\nFor more social comment systems, view [Social Comments](./social-comments.md).\n\n## Introduce Yourself\n\nDream provides a flippable about page to introduce yourself.\nType the command below in your terminal to create the first section about you:\n\n```bash\nhugo new about/me.md\n```\n\nWrite something **about you**:\n\n```md\n---\ntitle: About Me\n---\n\nHi, my name is Yue Yang.\n\nThis is my blog.\n```\n\nThen create an `index.md` in the `content/about` folder and put below contents into it:\n\n```md\n---\nheadless: true\n---\n```\n\nYou will then see **About** in the top right navigation bar. Click it to display your about page.\n\n## Write your first article\n\nAll of your posts must be in the `content/posts` folder.\n\nYou can generate it with:\n\n```bash\nhugo new posts/article-title.md\n```\n\nThe default content of `article-title.md` is:\n\n```md\n---\ntitle: {{ replace .TranslationBaseName \"-\" \" \" | title }}\ndate: {{ .Date }}\nlastmod: {{ .Date }}\nauthor: Author Name\n# avatar: /img/author.jpg\n# authorlink: https://author.site\ncover: /img/cover.jpg\n# images:\n#   - /img/cover.jpg\ncategories:\n  - category1\ntags:\n  - tag1\n  - tag2\n# nolastmod: true\ndraft: true\n---\n\nCut out summary from your post content here.\n\n<!--more-->\n\nThe remaining content of your post.\n```\n\nThis is the default template of a post.\n\nFor a quick start, you can leave the default content as it is. Only remove `draft: true` to publish your post.\n\nTo preview your post, you can start the Hugo server:\n\n```bash\nhugo server -D\n```\n\nThe `-D` parameter indicates that drafts are included in the preview.\n\n## What's next?\n\nThe left sidebar contains more detailed configurations and features.\n\nWish you a happy journey with 🌱 Dream!\n"
  },
  {
    "path": "docs/content/light-and-dark-mode.mdx",
    "content": "# Light and Dark Mode\n\nFrom Dream v3, it uses daisyUI to provide some out-of-box [themes](https://daisyui.com/docs/themes/) to use in light and dark mode.\n\nThere are two steps to customize the light and dark mode:\n\n1. Specify themes for light and dark mode in the `hugo.toml`:\n\n   ```toml\n   lightTheme = \"emerald\"\n   darkTheme = \"forest\"\n   ```\n\n1. And then, open `src/input.css` in the root directory of Dream, specify the themes you want to use:\n\n   ```css\n   @plugin \"daisyui\" {\n     themes: emerald --default, forest --prefersdark;\n   }\n   ```\n\n   > [!IMPORTANT]\n   >\n   > You must install dependencies (`pnpm i`) before compiling the CSS.\n\n   Then run `npm run css` or `pnpm css` to compile the CSS.\n"
  },
  {
    "path": "docs/content/migrate-to-v3.mdx",
    "content": "import { Tabs } from 'nextra/components'\n\n# Migrate to v3\n\nThis guide will help you migrate your existing v2 project to v3. It will cover the most common changes you will need to make to your project to get it working with v3.\n\n## Introduction\n\n<Tabs items={['English', '中文']}>\n  <Tabs.Tab>\n    Around the end of 2017, I was planning to start my own blog. I came across Hugo, which is very fast, and it subverted my idea of using Node.js Hexo to build a blog. At the same time, I didn't want to use existing themes, I wanted to write my own theme from scratch, because I thought it was a unique experience. I named it Dream, which represents my little dream. I was still an intern at that time, just starting to work, I learned it in my spare time, and finally developed the first version of the theme. In my current opinion, the design is not that good-looking, but I can still understand my mood at that time, I was excited and full of accomplishment at that time.\n\n    Later, as my technology improved, I gradually overturned my previous design. I think this process is also inevitable. As a person grows, his level and quality will gradually improve, so he will naturally have the idea of wanting to modify his early works. So, I started my v2.0 action, I used masonry layout to reconstruct Dream, because I particularly liked this irregular arrangement structure at that time, I think it is very good to display my articles in this form. From this stage on, my theme was gradually discovered by more and more people, and many people also started to use my theme, and they also raised many questions, and I would also fix it synchronously. In this way, Dream has continuously added more parameters, and on the basis of masonry layout, there are more customizable display forms.\n\n    But later, due to my loss of motivation to write a blog (there are many reasons, the COVID-19, work, life troubles, etc.), the maintenance of Dream has gradually become deserted. I have tried many times to modify some places before, but in the end it all came to nothing (for example, I once wanted to use Bulma to replace the outdated and no longer maintained Semantic UI). Just like I lost my motivation to write a blog, it is also very difficult for me to complete other things, I became very anxious, it was the kind of anxiety of growth, which makes you no longer able to concentrate and wholeheartedly do one thing. Time is all fragmented.\n\n    Around the beginning of this year (2024), when I saw my blog again (I rarely looked at it myself before), I thought I should make some changes. I want to pick up my blog again, and not just it, I want to pick up every unfinished thing I have done. I have already passed a lot of my youth, and I don't want to waste it anymore. But it is easy to think, but it is still very difficult to do. I started to rebuild Dream, I used three new things: tailwindcss, daisyUI and Alpine.js, to replace the old technology stack. These are all new things I have come into contact with in the past few years. I combine them with Hugo, so that Hugo can both maintain its speed and have stronger rendering capabilities. At the same time, I also adopted a new design. Before, I added a lot of parameters, but I didn't think carefully about whether they were \"meaningful\" modifications. As a theme, my current idea is to be ready to use without making too many modifications. This may be the original intention of a theme. To make a durable and durable design, not a fancy design, is more in line with my current ideas. This reconstruction is also a summary of my 7 years of aesthetics, design and technology.\n\n    Time came to the beginning of July, and I finally completed the reconstruction, which is a new milestone version. I have not only completed the modification of the theme, but also completed the writing of the documentation. I want to make it very good in every aspect. This is also my commitment to myself. I want to complete every task completely. This is just the beginning of all subsequent things. I hope you will like Dream's latest design. If you encounter any problems during use, please feel free to raise them in the [issues](https://github.com/g1eny0ung/hugo-theme-dream/issues), and I will check them in time.\n\n    The following content will help you migrate from v2 to v3. You can compare it one by one to make modifications. Similarly, if you encounter any migration issues, please feel free to raise them at any time.\n\n  </Tabs.Tab>\n  <Tabs.Tab>\n    大约在 2017 年底，那时候的我想要建立一个自己的博客，我偶然发现了 Hugo，它速度很快，打破了我想要使用 Node.js Hexo 去建立博客的想法。同时，我不打算使用已有的主题，我想要自己从头书写一个属于我自己的主题，因为我觉得这是一个独一无二的体验。我把它起名为 Dream，代表着我的一个小梦想。那时候我还在实习，是我刚刚接触工作的时候，我在业余时间自己学习，终于开发出了第一版的主题。在我现在看来它设计的没有那么好看，但是我依然能理解我当时的心情，那时候的我是激动的且富有成就感的。\n\n    后来，随着我的技术的进步，我逐步推翻了我之前的设计。这个过程我想也是必然的，随着一个人的成长，他的水平素养得到了逐渐的提升，那么自然会对早期的作品产生想要修改的想法。于是，我开启了我的 v2.0 行动，我使用了 masonry layout 去重构了 Dream，因为我那时候特别喜欢这种不规则的排列结构，我觉得以这样的形式去展示我的文章是很好看的。从这个阶段开始，我的主题逐渐被更多的人发现，也有很多人开始使用我的主题，他们也提出了很多问题，我也会同步进行修复。就这样，Dream 不断加入了更多的参数，在 masonry layout 的基础上有了更多的自定义展示形式。\n\n    但后来，由于我丧失了写博客的动力（原因有很多，新冠疫情，工作，人生烦恼等等），Dream 的维护也逐渐地荒废掉了。我曾经多次努力去修改一些地方，但是最后都不了了之（比如我曾经想使用 Bulma 去替换过时且不再维护的 Semantic UI）。就像我丧失了写博客的动力一样，做其他的事情我也很难完整地完成它们，我变得很焦虑，是那种成长的焦虑😐，让你不再能够专心地，心无旁骛地去做一件事情。时间全部被碎片化掉了。\n\n    大约是今年（2024）开始吧，当我又一次看到我的博客的时候（之前我自己都已经很少去看了），我想我应该做出一些改变了。我想重新拾起我的博客，也不仅仅是它，我想拾起每一个我半途而废的事情，我的年轻时光已经过去很多了，现在我再也不想去浪费掉它们了。但是想很容易，做起来还是很困难的，我开始重新构建 Dream，我使用了三个新东西：tailwindcss，daisyUI 和 Alpine.js，去替换了那些老旧的技术栈，这些都是我最近几年接触到的新事物，我将它们与 Hugo 结合在了一起，让 Hugo 既保持快速，也拥有了更强的渲染能力。同时我也采用了新的设计，之前我添加了大量的参数，但是我都没有好好思考它们是否是一个“有意义”的修改，作为一个主题，我现在的想法是，开箱即用，而不做出过多的修改，这可能才是一个主题的初衷吧。做耐看耐用的设计，而不是花里胡哨的设计，更能符合我现在的想法，这次的重构也是我 7 年来在审美，设计和技术上的一个总结。\n\n    时间来到了现在，7月初，我终于完成了重构，这是一个新的里程碑版本。我不仅完成了主题的修改，也完成了文档的书写。我想要在每个方面都让它变得很精良，这也是我对我自己的承诺，我要完整地去完成每一件事情，这仅仅是后面所有事情的开始。希望你能喜欢 Dream 的最新设计，如果你遇到了使用上的问题，欢迎你前往 [issues](https://github.com/g1eny0ung/hugo-theme-dream/issues) 提出，我会及时地进行查看的。\n\n    以下的内容会帮助你从 v2 迁移到 v3，你可以一一对照去进行修改。同样，如果你遇到了迁移方面的问题，也欢迎你随时提出。\n\n  </Tabs.Tab>\n</Tabs>\n\n## Params Changes\n\nSome params have been changed in v3. You can compare the following sections to make modifications.\n\n### copyright\n\nThe old `copyright = \"\"` has been removed, it used to be used to display copyright on the About page. Now you can add\na copyright file directly into the `content/about` folder, and it will be displayed on the About page:\n\n```bash\nhugo new about/copyright.md\n```\n\n### Colors and Dark Mode\n\nThere're many color params in v2, but in v3, all params below have been removed:\n\n```toml\n# background = \"\"\n# linkColor = \"seagreen\"\n\n# dark mode\n# defaultDark = true\n# backgroundDark = \"black\"\n# darkLinkColor = \"darkseagreen\"\n# darkNav = true\n# dark404 = true\n```\n\nCurrently, Dream uses daisyUI to provide some out-of-box [themes](https://daisyui.com/docs/themes/)\nto use in light and dark mode.\n\nPlease view [Light and Dark Mode](light-and-dark-mode.md) for more details.\n\n### Tags and Categories\n\nIf you have the following params specified, you can safely remove them:\n\n```toml\n# maxTags = 5\n# categoriesLimitInHeader = 6 # deprecated\n# headerBottomText = \"\" # deprecated\n```\n\n### Social Links\n\nOld specific social links have been removed:\n\n```toml\n# twitter = \"\"\n# facebook = \"\"\n# instagram = \"\"\n# mastodon = \"\"\n# linkedin = \"\"\n# github = \"\"\n# stackoverflow = \"\"\n# codepen = \"\"\n```\n\nRefer to [Social Links](social-links.md) for the updated configuration.\n\n### highlightjs\n\nhighlight.js has been deprecated in favor of Hugo built-in syntax highlighting,\nyou can safely remove the following params:\n\n```toml\n# highlightjs = true\n# highlightjsCDN = \"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release/build/highlight.min.js\"\n# highlightjsExtraLanguages = [\"ocaml\"]\n# highlightjsTheme = \"gruvbox-light\"\n# highlightjsThemeDark = \"gruvbox-dark\"\n```\n\nIf you want to custom the syntax highlighting,\nplease refer to [Syntax Highlighting](syntax-highlighting.md).\n\n> [!NOTE]\n>\n> Customizing the syntax highlighting is recommended if you have code blocks in your posts.\n\n### Search\n\nThe old search has been removed, you can safely remove the following params:\n\n```toml\n# search\n# enableSearch = true\n```\n\nThe new way to add search functionality is described in [Search](search.md).\n\n### Other options\n\nBelow are some other options that have been removed, you can safely remove them:\n\n```toml\n# reversePostAndAside = true\n# shareInAside = true\n# fixedNav = true\n# collapsibleTags = true\n# collapseBySummary = true\n# disableFlip = true\n# hideBackSocialLinks = true\n```\n\n## Almost Done\n\nI hope this guide has helped you migrate your project to v3 successfully.\n\nI may ignore some deprecated params, if you encounter any problems,\nplease feel free to raise them in the [issues](https://github.com/g1eny0ung/hugo-theme-dream/issues),\nthank you very much!\n\nWish you a happy journey with Dream v3! 🎉\n"
  },
  {
    "path": "docs/content/params-configurations.mdx",
    "content": "# Params Configurations\n\nThis doc introduces all the parameters that can be configured in the `[params]`.\n\n## Example\n\n```toml\n[params]\n# zenMode = true\n\nlightTheme = \"emerald\"\ndarkTheme = \"forest\"\n\n# backgroundImage = \"img/global-background.jpg\"\n# backgroundImageDark = \"\"\n\nimages = [\"img/global-background.jpg\"]\n\nauthor = \"g1eny0ung\"\ndescription = \"g1eny0ung 的生活记录～\"\navatar = \"img/personal/avatar.jpg\"\nheaderTitle = \"g1eny0ung's Blog\"\nmotto = \"与其感慨路难行，不如马上出发。\"\n\n# footerBottomText = \"\"\n\nrss = true\n\nutterancesRepo = \"g1eny0ung/g1eny0ung.github.io\"\n\n# valine = true\n# LEANCLOUD_APP_ID = \"\"\n# LEANCLOUD_APP_KEY = \"\"\n\n# waline = true\n# walineServer = \"\"\n\nemail = \"g1enyy0ung@gmail.com\"\n\nsiteStartYear = 2016\n\nfavicon = \"favicon.ico\"\n\n# Syntax highlighting\ncustomSyntaxHighlighting = true\n\n# options\nstickyNav = true\n# reorderNavItems = [\"about\", \"search\", \"rss\", \"posts\", \"categories\", \"tags\"]\n# collapseNavItems = [\"posts\", \"categories\", \"tags\"]\n# noDefaultSummaryCover = true\nshowTableOfContents = true\nshowSummaryCoverInPost = true\nimageZoomableInPost = true\nshowPrevNextPost = true\n# reorderShares = [\"x\", \"facebook\", \"whatsapp\"]\n\n[params.advanced]\n# customCSS = [\"css/custom.css\"]\n# customJS = []\n\n[params.experimental]\njsDate = true\njsDateFormat = \"yyyy年MM月dd日\"\n```\n\n## Basic\n\n### zenMode\n\nZen mode is a simple layout that allows you to concentrate on reading and writing.\nIt uses a simple and clean interface rather than the default masonry layout.\n\n👉 View [Zen Mode](zen-mode.md) for more details.\n\n### Light and Dark Mode\n\n> Required.\n\nYou can first add these two parameters to the `[params]`, they are default themes for light and dark mode.\n\n```toml\nlightTheme = \"emerald\"\ndarkTheme = \"forest\"\n```\n\nFor using other themes, view [Light and Dark Mode](light-and-dark-mode.md) for more details.\n\n### backgroundImage\n\nDefine a global background image.\n\n### backgroundImageDark\n\nDefine a global background image in dark mode.\n\n### images\n\nView https://gohugo.io/templates/internal/#open-graph for more details.\n\nUse the first one of site images as the fallback image for Open Graph.\n\n### author\n\nThe author field will be used as:\n\n- `<meta name=\"author\" content=\"g1eny0ung\" />`\n- In the summary of post cards\n\n### description\n\nThe description field will be used as `<meta name=\"description\" content=\"g1eny0ung 的生活记录～\" />`\n\n### avatar\n\nYour personal avatar.\n\n### headerTitle\n\nThe global title of the website.\n\n### motto\n\nA motto that will be displayed below the `headerTitle`. This field is optional.\n\n### footerBottomText\n\nUsed to display text at the bottom of the site footer, below the `siteStartYear` field. This field supports HTML.\n\n> [!NOTE]\n>\n> If this field is not specified, the default text will be displayed as:\n>\n> `🌱 Powered by Hugo with theme Dream.`\n\n### rss\n\nEnable RSS.\n\n### utterancesRepo\n\nUtterances is a lightweight comments widget built on GitHub Issues.\nBy setting `utterancesRepo`, each post will have a comment section powered by GitHub Issues.\n\nView https://utteranc.es for more details.\n\n### valine\n\nValine is a fast, simple & efficient LeanCloud based no backend comment system.\nYou can view https://valine.js.org/en/index.html for more details.\n\nTo make it work, you still need to set these two parameters:\n\n```toml\n[params]\nLEANCLOUD_APP_ID = \"\"\nLEANCLOUD_APP_KEY = \"\"\n```\n\nTo customize Valine, you can create a partial file named `valine.html` in the `layouts/partials` folder.\nHere is an [example](https://github.com/g1eny0ung/blog/blob/master/layouts/partials/valine.html).\n\n> [!IMPORTANT]\n>\n> You still need to set the `valine` parameter to `true` to enable Valine when using a custom partial file.\n>\n> Other related parameters will be ignored.\n\n### waline\n\nWaline is a simple comment system with backend support fork from Valine.\nYou can view https://waline.js.org/en/ for more details.\n\nTo enable Waline, you need to set the `waline` parameter to `true` and\nset the `walineServer` parameter to your Waline server address:\n\n```toml\nwaline = true\nwalineServer = \"https://your-waline-server.com\"\n```\n\nIf you want to customize Waline,\nyou can create a partial file named `waline.html` in the `layouts/partials` folder.\nHere is an [example](https://github.com/g1eny0ung/blog/blob/master/layouts/partials/waline.html).\n\n> [!IMPORTANT]\n>\n> You still need to set the `waline` parameter to `true` to enable Waline when using a custom partial file.\n>\n> Other related parameters will be ignored.\n\n### twikoo\n\nTwikoo is a **simple**, **safe**, **free** comment system.\nYou can view https://twikoo.js.org/en/ for more details.\n\nTo enable Twikoo, you need to set the `params.twikoo.enabled` parameter to `true` and set the following 3 parameters according to the [official manual](https://twikoo.js.org/en/quick-start.html):\n\n```toml\n[params.twikoo]\nenabled = true\nenvID = \"\"\nregion = \"\"\nlang = \"\"\n```\n\nIf you want to customize Twikoo,\nyou can create a partial file named `twikoo.html` in the `layouts/partials` folder.\nHere is an [example](https://github.com/g1eny0ung/blog/blob/master/layouts/partials/twikoo.html).\n\n> [!IMPORTANT]\n>\n> You still need to set the `params.twikoo.enabled` parameter to `true` to enable Twikoo when using a custom partial file.\n>\n> Other related parameters will be ignored.\n\n### siteStartYear\n\nSet the start year of your site, it will be displayed as **siteStartYear - currentYear (eg: 2016 - 2020)** in the\nsite footer.\n\n### favicon\n\nCustom the [favicon](https://en.wikipedia.org/wiki/Favicon) of your site, place it in the `static` folder.\n\n> [!NOTE]\n>\n> You can also specify the favicon in text format (starting with `<link`), for example:\n>\n> ```html\n> <link rel=\"icon\" href=\"data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%2210 0 100 100%22><text y=%22.90em%22 font-size=%2290%22>🌱</text></svg>\"></link>\n> ```\n\n### customSyntaxHighlighting\n\nView [Syntax highlighting](syntax-highlighting.mdx) for more details.\n\n### stickyNav\n\nMake navbar sticky when scrolling.\n\n### reorderNavItems\n\nReorder the navigation items.\n\nThis parameter is **an array of strings**, the default value is:\n\n```toml\nreorderNavItems = [\"about\", \"search\", \"rss\", \"posts\", \"categories\", \"tags\"]\n```\n\n> [!NOTE]\n>\n> The names of these default items are fixed, and they are the navigation items provided by the Dream theme by default.\n\n> [!NOTE]\n>\n> This parameter also allows you to remove the default navigation items.\n> For example, if you don't want to show the `rss` item, you can set the value as:\n>\n> `reorderNavItems = [\"about\", \"search\", \"posts\", \"categories\", \"tags\"]`\n\nFor reordering custom navigation items, see [Custom Navbar Items](custom-nav-items.mdx).\n\n### collapseNavItems\n\n> [!WARNING]\n>\n> In mobile, this parameter will not take effect because all navigation items will be collapsed into a dropdown menu.\n\nCollapse specific navigation items to a dropdown menu.\n\nFor example, if you want to collapse the `posts`, `categories`, and `tags` items, you can set the value as:\n\n```toml\ncollapseNavItems = [\"posts\", \"categories\", \"tags\"]\n```\n\nFor collapsing custom navigation items, see [Custom Navbar Items](custom-nav-items.md).\n\n### noDefaultSummaryCover\n\nIf you are not specify the `cover` field in the front matter of your posts,\na default cover image will be displayed in the summary cards.\n\nIf you don't want this behavior, you can set this param to `true`.\n\n### showTableOfContents\n\nShow the table of contents on the single post page.\n\n### showSummaryCoverInPost\n\nShow the summary cover image at the top of the single post page.\n\n### imageZoomableInPost\n\nMake images zoomable in the single post page. This feature uses [medium-zoom](https://github.com/francoischalifour/medium-zoom) under the hood.\n\n> [!NOTE]\n>\n> For advanced usage, you may want to customize the medium-zoom options. Dream allows you to\n> create a partial file named `medium-zoom.html` in the `layouts/partials` folder to replace the\n> default behavior. For example, you can put the following code in the `medium-zoom.html` file:\n>\n> ```html\n> <script type=\"module\">\n>   import mediumZoom from 'https://cdn.jsdelivr.net/npm/medium-zoom@1.1.0/+esm'\n>   mediumZoom('#dream-single-post-content img', {\n>     // Put your custom options here.\n>   }) // #dream-single-post-content is the id of the post content.\n>\n>   // You can also further control the logic of zooming images.\n>   // Like zooming lazy-loaded images.\n> </script>\n> ```\n\n### showPrevNextPost\n\nShow previous and next post links in the single post page.\n\n### reorderShares\n\nSame as [reorderNavItems](#reorderNavItems), reorder the share buttons in the single post page.\n\nThis parameter is **an array of strings**, the default value is:\n\n```toml\nreorderShares = [\"x\", \"facebook\", \"whatsapp\"]\n```\n\n> [!NOTE]\n>\n> This parameter also allows you to remove the default share items.\n> For example, if you don't want to show the `whatsapp` item, you can set the value as:\n>\n> `reorderShares = [\"x\", \"facebook\"]`\n\n## Advanced\n\n> [!WARNING]\n>\n> Generally, the following advanced parameters are not necessary to be set. Their main purpose is to further customize\n> the entire theme.\n\n### customCSS\n\nAdd your custom CSS files **after** the theme CSS files.\n\nFor example, create a folder named `css` under `static`, then add `custom.css` into it.\n\nView [Custom Theme](custom.md#css) for more details.\n\n### customJS\n\nLike `customCSS`, add your custom JS files **after** the theme JS files.\n\nView [Custom Theme](custom.md#js) for more details.\n\n## Experimental\n\n> [!WARNING]\n>\n> The experimental parameters are often not perfect. They have advantages as well as certain disadvantages.\n\n### jsDate\n\nUse [Luxon](https://moment.github.io/luxon/index.html) to replace the Hugo built-in [.Format](https://gohugo.io/methods/time/format/) function. This allows you to define the time format more flexibly.\n\nYou may not want to use this param if you want the final date is generated at compile time. After setting this param, all dates will output as an [RFC3339](https://en.wikipedia.org/wiki/ISO_8601) format and all rest format operations will be executed after the page is loaded.\n\nFor how to define the format, see below.\n\n### jsDateFormat\n\nRefer to this page (https://moment.github.io/luxon/docs/manual/formatting.html) to define your date format.\n\nFor example, `yyyy-MM-dd` represents a date format like `2021-04-17`.\n"
  },
  {
    "path": "docs/content/post-page.mdx",
    "content": "# Post Page\n\nIn [Quick Start](/), we created an example article as below:\n\n{/* prettier-ignore */}\n```md\n---\ntitle: {{ replace .TranslationBaseName \"-\" \" \" | title }}\ndate: {{ .Date }}\nlastmod: {{ .Date }}\nauthor: Author Name\n# avatar: /img/author.jpg\n# authorlink: https://author.site\ncover: /img/cover.jpg\n# covercaption: a description of the cover image\n# images:\n#   - /img/cover.jpg\ncategories:\n  - category1\ntags:\n  - tag1\n  - tag2\n# nolastmod: true\n# math: true\ndraft: true\n---\n\nCut out summary from your post content here.\n\n<!--more-->\n\nThe remaining content of your post.\n```\n\nThere are some parameters in the front matter you can use to customize your post page (and also its summary).\n\nView the below section to learn more about the parameters.\n\n## Parameters\n\n| Parameter      | Description                                                                                                                   | Required | Auto-generated |\n| -------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------- | -------------- |\n| `title`        | Title of the post                                                                                                             | Yes      | Yes            |\n| `date`         | Date of the post                                                                                                              | Yes      | Yes            |\n| `lastmod`      | Last modified date of the post                                                                                                | No       | Yes            |\n| `author`       | Author of the post, if it's not set, the global `author` will be used. If both are not set, the author will not be displayed. | No       | No             |\n| `avatar`       | Author's avatar                                                                                                               | No       | No             |\n| `authorlink`   | Custom link for the current author                                                                                            | No       | No             |\n| `cover`        | Cover image of the post                                                                                                       | No       | No             |\n| `covercaption` | Caption for the cover image                                                                                                   | No       | No             |\n| `images`       | Used in `og:image` meta tag                                                                                                   | No       | No             |\n| `categories`   | Categories of the post                                                                                                        | No       | No             |\n| `tags`         | Tags of the post                                                                                                              | No       | No             |\n| `nolastmod`    | Disable the last modified date                                                                                                | No       | No             |\n\n## Features\n\n> See https://g1en.site/posts/dream-post-features/ for a live demo.\n\n### Alerts\n\nDream supports [GitHub Alerts Markdown extension](https://github.blog/changelog/2023-12-14-new-markdown-extension-alerts-provide-distinctive-styling-for-significant-content/) compatible alerts. You can use it in your post like below:\n\n```md\n> [!NOTE]\n> Useful information that users should know, even when skimming content.\n\n> [!TIP]\n> Helpful advice for doing things better or more easily.\n\n> [!IMPORTANT]\n> Key information users need to know to achieve their goal.\n\n> [!WARNING]\n> Urgent info that needs immediate user attention to avoid problems.\n\n> [!CAUTION]\n> Advises about risks or negative outcomes of certain actions.\n```\n\nIf you want to change the default title of the alerts, you can add a\n[markdown attribute](https://gohugo.io/content-management/markdown-attributes/)\nnamed `text` like below:\n\n{/* prettier-ignore */}\n```md\n> [!NOTE]\n> The default alert title is changed to \"Hello\".\n{text=\"Hello\"}\n```\n\n> [!IMPORTANT]\n>\n> To enable markdown attributes, you still need to set below configuration in your `hugo.toml`:\n>\n> ```toml\n> [markup]\n> [markup.goldmark.parser.attribute]\n> block = true\n> ```\n\n### Mermaid Diagrams\n\nDream supports [Mermaid](https://mermaid.js.org/) diagrams. You can use it like below:\n\n````mdx filename=\"Markdown\"\n```mermaid\ngraph TD;\n    A-->B;\n    A-->C;\n    B-->D;\n    C-->D;\n```\n````\n\nRendered as:\n\n```mermaid\ngraph TD;\n    A-->B;\n    A-->C;\n    B-->D;\n    C-->D;\n```\n\n### Mathematics\n\nDream supports mathematical equations and expressions by using [MathJax](https://www.mathjax.org/).\nThe implementation of this feature referred to https://gohugo.io/content-management/mathematics/.\n\nTo use this feature, you need to enable and configure the Goldmark passthrough extension in your site configuration:\n\n```toml\n[markup]\n  [markup.goldmark]\n    [markup.goldmark.extensions]\n      [markup.goldmark.extensions.passthrough]\n        enable = true\n        [markup.goldmark.extensions.passthrough.delimiters]\n          block = [['\\[', '\\]'], ['$$', '$$']]\n          inline = [['\\(', '\\)'], ['$', '$']]\n```\n\nAnd then you can use it like below:\n\n````mdx filename=\"Markdown\"\n```math\nThis is an inline \\(a^*=x-b^*\\) equation.\n\nThis is also an inline $a^*=x-b^*$ equation.\n```\n\n```math\nThese are block equations:\n\n\\[\n\\begin{aligned}\nKL(\\hat{y} || y) &= \\sum_{c=1}^{M}\\hat{y}_c \\log{\\frac{\\hat{y}_c}{y_c}} \\\\\nJS(\\hat{y} || y) &= \\frac{1}{2}(KL(y||\\frac{y+\\hat{y}}{2}) + KL(\\hat{y}||\\frac{y+\\hat{y}}{2}))\n\\end{aligned}\n\\]\n\nThese are also block equations:\n\n$$a^*=x-b^*$$\n\n$$\na^*=x-b^*\n$$\n```\n````\n\nIf you don't want to use the `math` codeblock everywhere, you can also set **`math: true`** in the front matter of your post like below:\n\n```md\n---\nmath: true # YAML syntax\n---\n```\n\nThis allows you to use mathematics with other markdown syntaxes in the whole post, like:\n\n```md\n- This is an inline \\(a^_=x-b^_\\) equation.\n- This is also an inline $a^*=x-b^*$ equation.\n```\n"
  },
  {
    "path": "docs/content/search.md",
    "content": "# Search\n\nDream has a built-in search feature that allows you to search for content on your site.\nYou can enable it by adding a `_index.md` file to the `content/search` directory.\nThis file can be empty, but it must exist. Dream will automatically generate the search page (/search) for you.\n"
  },
  {
    "path": "docs/content/social-comments.mdx",
    "content": "# Social Comments\n\nCurrently, Dream supports these comment systems:\n\n- [Disqus](https://disqus.com/)\n- [utterances](https://utteranc.es/)\n- [Valine](https://valine.js.org/en/)\n- [Waline](https://waline.js.org/en/)\n- [Twikoo](https://twikoo.js.org/en/)\n\n## Disqus\n\nIn `hugo.toml`, set:\n\n```toml\n[services]\n[services.disqus]\nshortname = \"...\"\n```\n\n> [!WARNING]\n>\n> You may have used `disqusShortname = \"...\"` before. This is deprecated in Hugo `0.120.0`.\n>\n> Please upgrade to the new configuration. See https://gohugo.io/methods/site/disqusshortname/ for more details.\n\nDisqus comments will be displayed on the [Post Page](post-page.mdx) and [About Page](about-page.md)\n\n### Compatible with oklch colors\n\nDisqus will detect the color scheme of the website and change the color of the comments accordingly.\nHowever, Disqus does not support [oklch colors](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/oklch) which is used in Dream.\n\nTo make Disqus work with Dream, we need to make an extra hack.\n\nFirst, create a custom css file in `static/css/custom.css`:\n\n```css\n[data-theme=\"emerald\"] #disqus_thread {\n  color-scheme: none;\n  background-color: #fff;\n}\n\n[data-theme=\"emerald\"] #disqus_thread a {\n  color: #333c4d;\n}\n\n[data-theme=\"forest\"] #disqus_thread {\n  color-scheme: none;\n  background-color: #171213;\n}\n\n[data-theme=\"forest\"] #disqus_thread a {\n  color: #cbc9ca;\n}\n```\n\nThe `background-color` and `color` can be obtained by inspecting the website in the browser. Follow below steps:\n\n1. Open the devtools in the browser (press `F12`).\n2. Click the `html` tag in the `Elements` tab.\n3. Then search for `background` in the `Styles` tab.\n4. Open the color picker and transform the oklch format to hex format.\n5. Copy them to the custom css file.\n\nAfter finishing above steps, remember to include this custom css file in `customCSS` in `hugo.toml`:\n\n```toml\n[params]\n[params.advanced]\ncustomCSS = [\"css/custom.css\"]\n```\n\nYou may want to change the default themes `emerald` and `forest` to other themes.\nRefer to [light-and-dark-mode](./light-and-dark-mode.md) and update `background-color` and `color` accordingly.\n\n## utterances\n\nSee: [utterancesRepo](params-configurations.mdx#utterancesrepo)\n\nThe utterances only takes effect on the [Post Page](post-page.mdx).\n\n## Valine\n\nSee: [valine](params-configurations.mdx#valine)\n\nValine only takes effect on the [Post Page](post-page.mdx).\n\n## Waline\n\nSee: [waline](params-configurations.mdx#waline)\n\nWaline only takes effect on the [Post Page](post-page.mdx).\n\n## Twikoo\n\nSee: [twikoo](params-configurations.mdx#twikoo)\n\nTwikoo only takes effect on the [Post Page](post-page.mdx).\n"
  },
  {
    "path": "docs/content/social-links.mdx",
    "content": "# Social Links\n\nYou can render social links on the About page (`layouts/partials/back.html`) using a custom data file.\n\nThis file must be named `data/socials.toml` (put it in the `data` folder) and\nmust contain a array named `socials`. For example:\n\n```toml\n# Go to https://ionic.io/ionicons to find available icons.\nsocials = [\n  { href = \"https://github.com/g1eny0ung\", target=\"_blank\", icon = \"logo-github\", title = \"GitHub\" },\n  { href = \"https://x.com/g1eny0ung\", target=\"_blank\", icon = \"logo-x\", title = \"X\" },\n  # { href = \"https://facebook.com/g1eny0ung\", target=\"_blank\", icon = \"logo-facebook\", title = \"Facebook\" },\n  # { href = \"https://instagram.com/g1eny0ung\", target=\"_blank\", icon = \"logo-instagram\", title = \"Instagram\" },\n  { href = \"https://www.linkedin.com/in/g1eny0ung\", target=\"_blank\", icon = \"logo-linkedin\", title = \"Linkedin\" },\n  { href = \"https://stackoverflow.com/users/5676489/g1eny0ung\", target=\"_blank\", icon = \"logo-stackoverflow\", title = \"stack overflow\" },\n  # { href = \"https://codepen.io/g1eny0ung\", target=\"_blank\", icon = \"logo-codepen\", title = \"Codepen\" },\n]\n```\n\n## Properties\n\nEach table (object) in the array can have the following properties.\n\n### Required\n\n- `href`: The URL of the social link.\n- `icon`: The name of the icon. You can find available icons [here](https://ionic.io/ionicons).\n\n### Optional\n\n- `target`: The [target attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) of the link.\n- `title`: The title of the social link.\n"
  },
  {
    "path": "docs/content/summary-images.mdx",
    "content": "# Summary Images\n\nEach post can have a cover image associated with it. This image is used in the summary view of the post.\nYou can also display it on the single post page by setting the [`showSummaryCoverInPost`](./params-configurations.mdx#showsummarycoverinpost)\nparameter to `true`.\n\n```md\n---\ncover: /img/build-a-chrome-extension-with-figwheel-main.png\n---\n```\n\n> [!TIP]\n>\n> For a better visualization, it's recommended to set a cover image for each post (although it's not mandatory). I\n> personally go to [Unsplash](https://unsplash.com/) or [Pexels](https://www.pexels.com/) to select covers (choose the small size).\n>\n> If you don't specify a cover image, Dream will use one of the predefined images as a placeholder in the summary card.\n> To disable this behavior, set [`noDefaultSummaryCover`](./params-configurations.mdx#nodefaultsummarycover) to `true`.\n\n## Image Optimization\n\n> [!IMPORTANT]\n>\n> Hugo >= 0.97.0 is required.\n\nDream will transform summary images to webp format automatically if you are using\n[page bundles](https://gohugo.io/content-management/page-bundles/) to organize your posts.\nThis will make the first load of your site faster.\n\nThe way it works is that Dream will look for the presence of the specified cover image\nin the [page resources](https://gohugo.io/content-management/page-resources/).\nIf it exists, the image is processed.\n\nFor example, you can organize your posts like this:\n\n```txt\ncontent\n├── posts\n│   ├── post-1\n│   │   ├── index.md\n│   │   └── cover.jpg\n```\n\nThen in the front matter of `index.md`:\n\n```md\n---\ncover: cover.jpg\nimages:\n  - cover.jpg\n---\n```\n"
  },
  {
    "path": "docs/content/syntax-highlighting.mdx",
    "content": "# Syntax Highlighting\n\nIf you don't like the default syntax highlighting provided by Hugo,\nSetting `customSyntaxHighlighting = true` will enable the custom syntax highlighting provided by Chroma.\n\n> [!IMPORTANT]\n>\n> You still need to set below configuration in your `hugo.toml`:\n>\n> ```toml\n> [markup]\n> [markup.highlight]\n> noClasses = false\n> ```\n>\n> This makes sure that the generated HTML uses classes for syntax highlighting, not inline styles.\n\nThen you need to specify what themes you want to use and generate them. They need to follow below established rules:\n\n- You must generate separate themes for light and dark modes\n- They must be named `syntax-light.css` and `syntax-dark.css`\n- They must be in the `assets/css` directory\n\nFor example, you can generate them using the following command:\n\n```bash\n# In your project directory.\nhugo gen chromastyles --style=github > assets/css/syntax-light.css\nhugo gen chromastyles --style=github-dark > assets/css/syntax-dark.css\n```\n\nPlease refer to the [official documentation](https://gohugo.io/content-management/syntax-highlighting/) for more information.\n"
  },
  {
    "path": "docs/content/website-analytics.mdx",
    "content": "# Website Analytics\n\nNow, Dream only support [Google Analytics](https://www.google.com/analytics/).\n\nIn `hugo.toml`, set:\n\n```toml\n[services]\n[services.googleAnalytics]\nID = '...'\n\n```\n\n> [!WARNING]\n>\n> You may have used `googleAnalytics = \"...\"` before. This is deprecated in Hugo `0.120.0`.\n>\n> Please upgrade to the new configuration. See https://gohugo.io/methods/site/googleanalytics/ for more details.\n"
  },
  {
    "path": "docs/content/zen-mode.mdx",
    "content": "# Zen Mode\n\nWhat is Zen mode?\n\nZen mode is a simple layout that allows you to concentrate on reading and writing.\nIt is a minimalist design that removes all distractions from the page.\nThis mode is more suitable for people who prefer a simple and clean interface\nrather than the default masonry layout.\n\nHere is a demo of the Zen mode: https://g1en-site-zen-mode-preview.netlify.app/.\n\nAnd below is a screenshot of the Zen mode:\n\n<div style={{ width: '75%', marginTop: '1.5rem' }}>![Zen Mode](/images/zen-mode.png)</div>\n\n## Enable Zen Mode\n\nTo enable Zen mode, just add `zenMode = true` to the configuration file.\n\n```toml\n[params]\nzenMode = true\n```\n"
  },
  {
    "path": "docs/mdx-components.jsx",
    "content": "import { useMDXComponents as getThemeComponents } from 'nextra-theme-docs' // nextra-theme-blog or your custom theme\n\n// Get the default MDX components\nconst themeComponents = getThemeComponents()\n\n// Merge components\nexport function useMDXComponents(components) {\n  return {\n    ...themeComponents,\n    ...components,\n  }\n}\n"
  },
  {
    "path": "docs/next.config.mjs",
    "content": "import nextra from 'nextra'\nimport path from 'path'\n\nconst withNextra = nextra({})\n\nexport default withNextra({\n  turbopack: {\n    root: path.resolve('./'),\n  },\n  output: 'export',\n  images: {\n    unoptimized: true,\n  },\n})\n"
  },
  {
    "path": "docs/package.json",
    "content": "{\n  \"name\": \"docs\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"next dev --turbopack\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"next\": \"^16.1.6\",\n    \"nextra\": \"^4.6.1\",\n    \"nextra-theme-docs\": \"^4.6.1\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\"\n  },\n  \"devDependencies\": {\n    \"@theguild/remark-mermaid\": \"^0.3.0\"\n  }\n}\n"
  },
  {
    "path": "docs/public/.nojekyll",
    "content": ""
  },
  {
    "path": "hugo.example.toml",
    "content": "baseurl = \"https://example.com\"\ndefaultContentLanguage = \"en\"\nlanguageCode = \"en\"\ntitle = \"Hugo Theme Dream\"\ntheme = \"dream\"\n\n# [services]\n# [services.disqus]\n# shortname = \"\"\n# [services.googleAnalytics]\n# ID = \"\"\n\n[params]\n# zenMode = true\n\nlightTheme = \"emerald\"\ndarkTheme = \"forest\"\n\n# backgroundImage = \"img/global-background.jpg\"\n# backgroundImageDark = \"\"\n\nauthor = \"Dream\"\n# description = \"\"\n# avatar = \"img/avatar.png\"\nheaderTitle = \"Hugo Theme Dream\"\n# motto = \"\"\n\n# footerBottomText = \"\"\n\n# rss = true\n\n# utterancesRepo = \"\"\n\n# valine = true\n# LEANCLOUD_APP_ID = \"\"\n# LEANCLOUD_APP_KEY = \"\"\n\n# waline = true\n# walineServer = \"\"\n\n# email = \"\"\n\nsiteStartYear = 2016\n\n# favicon = \"favicon.ico\"\n\n# Syntax highlighting\n# customSyntaxHighlighting = true\n\n# options\n# stickyNav = true\n# reorderNavItems = [\"about\", \"search\", \"rss\", \"posts\", \"categories\", \"tags\"]\n# collapseNavItems = [\"posts\", \"categories\", \"tags\"]\n# noDefaultSummaryCover = true\n# showTableOfContents = true\n# showSummaryCoverInPost = true\n# imageZoomableInPost = true\n# showPrevNextPost = true\n# reorderShares = [\"x\", \"facebook\", \"whatsapp\"]\n\n# [params.navItems]\n\n# [params.twikoo]\n# enabled = true\n# envID = \"\"\n# region = \"\"\n# lang = \"\"\n\n# [params.advanced]\n# customCSS = [\"css/custom.css\"]\n# customJS = []\n\n# [params.experimental]\n# jsDate = true\n# jsDateFormat = \"yyyy年MM月dd日\"\n"
  },
  {
    "path": "i18n/ar.toml",
    "content": "[home]\nother = \"الصفحة الرئيسية\"\n\n[backToHome]\nother = \"العودة إلى الصفحة الرئيسية\"\n\n[flip]\nother = \"!اقلب\"\n\n[archives]\nother = \"أرشيف\"\n\n[allTags]\nother = \"كل العلامات\"\n\n[tag]\none = \"1 علامة\"\nother = \"{{ .Count }} علامتان\"\n\n[allCategories]\nother = \"جميع الفئات\"\n\n[category]\none = \"1 فئة\"\nother = \"{{ .Count }} فئات\"\n\n[article]\none = \"1 مقال\"\nother = \"{{ .Count }} مقالات\"\n\n[socialLinks]\nother = \"روابط وسائل التواصل الاجتماعي\"\n\n[minuteRead]\none = \" قراءة دقيقة\"\nother = \" ست دقائق للقر\"\n\n[updatedAt]\nother = \"تم التحديث في\"\n\n[prevPage]\nother = \"الصفحة السابقة\"\n\n[nextPage]\nother = \"الصفحة التالية\"\n\n[search]\nother = \"يبحث\"\n"
  },
  {
    "path": "i18n/bn.toml",
    "content": "[home]\nother = \"হোম\"\n\n[backToHome]\nother = \"হোমে ফেরত\"\n\n[flip]\nother = \"ফ্লিপ!\"\n\n[archives]\nother = \"আর্কাইভ\"\n\n[allTags]\nother = \"সকল ট্যাগ\"\n\n[tag]\none = \"একটি ট্যাগ\"\nother = \"{{ .Count }}টি ট্যাগ\"\n\n[allCategories]\nother = \"সকল ক্যাটাগরি\"\n\n[category]\none = \"একটি ক্যাটাগরি\"\nother = \"{{ .Count }}টি ক্যাটাগরি\"\n\n[article]\none = \"একটি আর্টিকেল\"\nother = \"{{ .Count }}টি আর্টিকেল\"\n\n[socialLinks]\nother = \"সোশাল লিঙ্কস\"\n\n[minuteRead]\none = \" মিনিট\"\nother = \" মিনিট\"\n\n[updatedAt]\nother = \"সর্বশেষ আপডেট\"\n\n[prevPage]\nother = \"আগের পেইজ\"\n\n[nextPage]\nother = \"পরের পেইজ\"\n\n[search]\nother = \"সার্চ\"\n"
  },
  {
    "path": "i18n/ca.toml",
    "content": "[home]\nother = \"Pàgina inicial\"\n\n[backToHome]\nother = \"Tornar a la pàgina d'inici\"\n\n[flip]\nother = \"Capgirar!\"\n\n[archives]\nother = \"Arxiu\"\n\n[allTags]\nother = \"Totes les etiquetes\"\n\n[tag]\none = \"1 etiqueta\"\nother = \"{{ .Count }} etiquetes\"\n\n[allCategories]\nother = \"Totes les categories\"\n\n[category]\none = \"1 categoria\"\nother = \"{{ .Count }} categories\"\n\n[article]\none = \"1 article\"\nother = \"{{ .Count }} articles\"\n\n[socialLinks]\nother = \"Enllaços de xarxes socials\"\n\n[minuteRead]\none = \" minut de lectura\"\nother = \" minuts de lectura\"\n\n[updatedAt]\nother = \"Actualització a\"\n\n[prevPage]\nother = \"Pàgina anterior\"\n\n[nextPage]\nother = \"Pàgina següent\"\n\n[search]\nother = \"Buscar\"\n"
  },
  {
    "path": "i18n/de.toml",
    "content": "[home]\nother = \"Start\"\n\n[backToHome]\nother = \"Zurück zum Start\"\n\n[flip]\nother = \"Flip it!\"\n\n[archives]\nother = \"Archiv\"\n\n[allTags]\nother = \"Alle Tags\"\n\n[tag]\none = \"1 tag\"\nother = \"{{ .Count }} Tags\"\n\n[allCategories]\nother = \"Alle Kategorien\"\n\n[category]\none = \"1 Kategorie\"\nother = \"{{ .Count }} Kategorien\"\n\n[article]\none = \"1 Artikel\"\nother = \"{{ .Count }} Artikel\"\n\n[socialLinks]\nother = \"Social Links\"\n\n[minuteRead]\nother = \" Minuten Lesezeit\"\n\n[updatedAt]\nother = \"Aktualisiert \"\n\n[prevPage]\nother = \"Vorherige Seite\"\n\n[nextPage]\nother = \"Nächste Seite\"\n"
  },
  {
    "path": "i18n/en.toml",
    "content": "# Alerts\nnote = \"Note\"\ntip = \"Tip\"\nimportant = \"Important\"\nwarning = \"Warning\"\ncaution = \"Caution\"\n\nhome = \"Home\"\nbackToHome = \"Back to home\"\nflip = \"Flip it!\"\nabout = \"About\"\nsearch = \"Search\"\nprevPage = \"Previous page\"\nnextPage = \"Next page\"\n\narchives = \"Archives\"\nallCategories = \"All Categories\"\nallTags = \"All Tags\"\n\nminuteRead = \" minute read\"\nupdatedAt = \"Updated at\"\nsocialLinks = \"Social Links\"\n\n[article]\none = \"1 article\"\nother = \"{{ .Count }} articles\"\n\n[category]\none = \"1 category\"\nother = \"{{ .Count }} categories\"\n\n[tag]\none = \"1 tag\"\nother = \"{{ .Count }} tags\"\n"
  },
  {
    "path": "i18n/es.toml",
    "content": "# Alertas\nnote = \"Nota\"\ntip = \"Consejo\"\nimportant = \"Importante\"\nwarning = \"Advertencia\"\ncaution = \"Cuidado\"\n\nhome = \"Inicio\"\nbackToHome = \"Volver a inicio\"\nflip = \"Voltear!\"\nabout = \"Acerca\"\nsearch = \"Buscar\"\nprevPage = \"Página anterior\"\nnextPage = \"Página siguiente\"\n\narchives = \"Archivos\"\nallCategories = \"Todas las categorías\"\nallTags = \"Todas las etiquetas\"\n\nupdatedAt = \"Actualizado en\"\nsocialLinks = \"Enlaces sociales\"\n\n[minuteRead]\none = \" minuto de lectura\"\nother = \" minutos de lectura\"\n\n[article]\none = \"1 artículo\"\nother = \"{{ .Count }} artículos\"\n\n[category]\none = \"1 categoría\"\nother = \"{{ .Count }} categorías\"\n\n[tag]\none = \"1 etiqueta\"\nother = \"{{ .Count }} etiquetas\"\n"
  },
  {
    "path": "i18n/fr.toml",
    "content": "note = \"Note\"\ntip = \"Astuce\"\nimportant = \"Important\"\nwarning = \"Attention\"\ncaution = \"Prudence\"\n\nhome = \"Accueil\"\nbackToHome = \"Revenir à l'accueil\"\nflip = \"Retourne ça !\"\nabout = \"À propos\"\nsearch = \"Rechercher\"\nprevPage = \"Page précédente\"\nnextPage = \"Page suivante\"\n\narchives = \"Archives\"\nallCategories = \"Toutes les catégories\"\nallTags = \"Tous les étiquettes\"\n\nupdatedAt = \"Mise à jour le\"\nsocialLinks = \"Liens sociaux\"\n\n[minuteRead]\none = \" minute de lecture\"\nother = \" minutes de lecture\"\n\n[article]\none = \"1 article\"\nother = \"{{ .Count }} articles\"\n\n[category]\none = \"1 catégorie\"\nother = \"{{ .Count }} catégories\"\n\n[tag]\none = \"1 étiquette\"\nother = \"{{ .Count }} étiquettes\"\n"
  },
  {
    "path": "i18n/he.toml",
    "content": "[home]\nother = \"דף הבית\"\n\n[backToHome]\nother = \"חזור לדף הבית\"\n\n[flip]\nother = \"!להפוך\"\n\n[archives]\nother = \"ארכיון\"\n\n[allTags]\nother = \"כל התגים\"\n\n[tag]\none = \"1 תג\"\nother = \"תגים {{ .Count }}\"\n\n[allCategories]\nother = \"כל הקטגוריות\"\n\n[category]\none = \"1 קטגוריה\"\nother = \"קטגוריות {{ .Count }}\"\n\n[article]\none = \"מאמר  1\"\nother = \"מאמרים {{ .Count }}\"\n\n[socialLinks]\nother = \"קישורים למדיה חברתית\"\n\n[minuteRead]\none = \" דקה לקרוא\"\nother = \" דקות לקריאה\"\n\n[updatedAt]\nother = \"עודכן בשעה\"\n\n[prevPage]\nother = \"עמוד קודם\"\n\n[nextPage]\nother = \"עמוד הבא\"\n\n[search]\nother = \"לחפש\"\n"
  },
  {
    "path": "i18n/it.toml",
    "content": "[home]\nother = \"Home\"\n\n[backToHome]\nother = \"Torna alla home\"\n\n[flip]\nother = \"Flip it!\"\n\n[about]\nother = \"Chi siamo\"\n\n[archives]\nother = \"Archivi\"\n\n[allTags]\nother = \"Tutti i tag\"\n\n[tag]\none = \"Un tag\"\nother = \"{{ .Count }} tag\"\n\n[allCategories]\nother = \"Tutte le categorie\"\n\n[category]\none = \"Una categoria\"\nother = \"{{ .Count }} categorie\"\n\n[article]\none = \"Un articolo\"\nother = \"{{ .Count }} articoli\"\n\n[socialLinks]\nother = \"Social\"\n\n[minuteRead]\none = \" minuto\"\nother = \" minuti\"\n\n[updatedAt]\nother = \"Aggiornato al\"\n\n[prevPage]\nother = \"Pagina precedente\"\n\n[nextPage]\nother = \"Pagina successiva\"\n\n[search]\nother = \"Cerca\"\n"
  },
  {
    "path": "i18n/ja.toml",
    "content": "[home]\nother = \"Home\"\n\n[backToHome]\nother = \"Back to home\"\n\n[flip]\nother = \"Flip it!\"\n\n[about]\nother = \"About\"\n\n[archives]\nother = \"アーカイブ\"\n\n[allTags]\nother = \"タグ一覧\"\n\n[tag]\none = \"1タグ\"\nother = \"{{ .Count }}タグ\"\n\n[allCategories]\nother = \"カテゴリー一覧\"\n\n[category]\none = \"1カテゴリー\"\nother = \"{{ .Count }}カテゴリー\"\n\n[article]\none = \"1記事\"\nother = \"{{ .Count }}記事\"\n\n[socialLinks]\nother = \"SNS\"\n\n[minuteRead]\nother = \"分で読めます\"\n\n[updatedAt]\nother = \"更新日時\"\n\n[prevPage]\nother = \"前へ\"\n\n[nextPage]\nother = \"次へ\"\n\n[search]\nother = \"検索\"\n"
  },
  {
    "path": "i18n/lv.toml",
    "content": "[home]\nother = \"Mājas lapa\"\n\n[backToHome]\nother = \"Atpakaļ uz sākumlapu\"\n\n[flip]\nother = \"Uzsist!\"\n\n[archives]\nother = \"Arhīvs\"\n\n[allTags]\nother = \"Visi tagi\"\n\n[tag]\none = \"1 tagu\"\nother = \"{{ .Count }} tagi\"\n\n[allCategories]\nother = \"Visas kategorijas\"\n\n[category]\none = \"1 kategorija\"\nother = \"{{ .Count }} kategorijas\"\n\n[article]\none = \"1 raksts\"\nother = \"{{ .Count }} raksti\"\n\n[socialLinks]\nother = \"Saites sociālajos tīklos\"\n\n[minuteRead]\none = \" minūte lasīta\"\nother = \" minūtes lasīts\"\n\n[updatedAt]\nother = \"Atjaunināts plkst\"\n\n[prevPage]\nother = \"Iepriekšējā lapa\"\n\n[nextPage]\nother = \"Nākamā lapaspuse\"\n\n[search]\nother = \"Meklēt\"\n"
  },
  {
    "path": "i18n/pt.toml",
    "content": "note = \"Nota\"\ntip = \"Dica\"\nimportant = \"Importante\"\nwarning = \"Aviso\"\ncaution = \"Cuidado\"\n\nhome = \"Página inicial\"\nbackToHome = \"Voltar para a página inicial\"\nflip = \"Girar!\"\nabout = \"Sobre\"\nsearch = \"Pesquisar\"\nprevPage = \"Página anterior\"\nnextPage = \"Próxima página\"\n\narchives = \"Arquivos\"\nallCategories = \"Todas as categorias\"\nallTags = \"Todas as tags\"\n\nupdatedAt = \"Atualizado\"\nsocialLinks = \"Links de redes sociais\"\n\n[minuteRead]\none = \" minuto de leitura\"\nother = \" minutos de leitura\"\n\n[article]\none = \"1 artigo\"\nother = \"{{ .Count }} artigos\"\n\n[category]\none = \"1 categoria\"\nother = \"{{ .Count }} categorias\"\n\n[tag]\none = \"1 tag\"\nother = \"{{ .Count }} tags\"\n"
  },
  {
    "path": "i18n/ro.toml",
    "content": "[home]\nother = \"Pagina principala\"\n\n[backToHome]\nother = \"Înapoi la pagina de start\"\n\n[flip]\nother = \"Întoarceți!\"\n\n[archives]\nother = \"Arhive\"\n\n[allTags]\nother = \"Toate etichetele\"\n\n[tag]\none = \"1 etichetă\"\nother = \"{{ .Count }} etichete\"\n\n[allCategories]\nother = \"Toate categoriile\"\n\n[category]\none = \"1 categorie\"\nother = \"{{ .Count }} categorii\"\n\n[article]\none = \"1 articol\"\nother = \"{{ .Count }} articole\"\n\n[socialLinks]\nother = \"Link-uri de social media\"\n\n[minuteRead]\none = \" minut de citit\"\nother = \" minute de citire\"\n\n[updatedAt]\nother = \"Actualizat la\"\n\n[prevPage]\nother = \"Pagina precedentă\"\n\n[nextPage]\nother = \"Pagina următoare\"\n\n[search]\nother = \"Căutare\"\n"
  },
  {
    "path": "i18n/ru.toml",
    "content": "[home]\nother = \"Главная\"\n\n[backToHome]\nother = \"На главную\"\n\n[flip]\nother = \"Повернуть!\"\n\n[archives]\nother = \"Архивы\"\n\n[allTags]\nother = \"Все теги\"\n\n[tag]\none = \"1 тег\"\nfew = \"{{ .Count }} тега\"\nmany = \"{{ .Count }} тегов\"\nother = \"{{ .Count }} тегов\"\n\n[allCategories]\nother = \"Все категории\"\n\n[category]\none = \"1 категория\"\nfew = \"{{ .Count }} категории\"\nmany = \"{{ .Count }} категорий\"\nother = \"{{ .Count }} категорий\"\n\n[article]\none = \"1 статья\"\nfew = \"{{ .Count }} статьи\"\nmany = \"{{ .Count }} статей\"\nother = \"{{ .Count }} статей\"\n\n[socialLinks]\nother = \"Социальные сети\"\n\n[minuteRead]\none = \" минута чтения\"\nfew = \" минуты чтения\"\nmany = \" минут чтения\"\nother = \" минут чтения\"\n\n[updatedAt]\nother = \"Обновлено\"\n\n[prevPage]\nother = \"Предыдущая\"\n\n[nextPage]\nother = \"Следующая\"\n\n[search]\nother = \"Поиск\"\n"
  },
  {
    "path": "i18n/sl.toml",
    "content": "[home]\nother = \"Domača stran\"\n\n[backToHome]\nother = \"Vrnite se na domačo stran\"\n\n[flip]\nother = \"Obrniti!\"\n\n[archives]\nother = \"Arhiv\"\n\n[allTags]\nother = \"Vse oznake\"\n\n[tag]\none = \"1 oznaka\"\nother = \"{{ .Count }} oznaki\"\n\n[allCategories]\nother = \"Vse kategorije\"\n\n[category]\none = \"1 kategorija\"\nother = \"{{ .Count }} kategoriji\"\n\n[article]\none = \"1 članek\"\nother = \"{{ .Count }} članka\"\n\n[socialLinks]\nother = \"Povezave do družabnih medijev\"\n\n[minuteRead]\none = \" minuta za branje\"\nother = \" minuti za branje\"\n\n[updatedAt]\nother = \"Posodobljeno ob\"\n\n[prevPage]\nother = \"Prejšnja stran\"\n\n[nextPage]\nother = \"Naslednja stran\"\n\n[search]\nother = \"Iskanje\"\n"
  },
  {
    "path": "i18n/tr.toml",
    "content": "[home]\nother = \"Ana Sayfa\"\n\n[backToHome]\nother = \"Ana sayfaya geri dön\"\n\n[flip]\nother = \"Çevir!\"\n\n[archives]\nother = \"Arşivler\"\n\n[allTags]\nother = \"Tüm etiketler\"\n\n[tag]\none = \"1 etiket\"\nother = \"{{ .Count }} etiket\"\n\n[allCategories]\nother = \"Tüm kategoriler\"\n\n[category]\none = \"1 kategori\"\nother = \"{{ .Count }} kategori\"\n\n[article]\none = \"1 makale\"\nother = \"{{ .Count }} makale\"\n\n[socialLinks]\nother = \"Sosyal Bağlantılar\"\n\n[minuteRead]\none = \" dakika okuma süresi\"\nother = \" dakika okuma süresi\"\n\n[updatedAt]\nother = \"Güncellenme tarihi\"\n\n[prevPage]\nother = \"Önceki sayfa\"\n\n[nextPage]\nother = \"Sonraki sayfa\"\n\n[search]\nother = \"Arama\"\n"
  },
  {
    "path": "i18n/vi.toml",
    "content": "# Alerts\nnote = \"Ghi chú\"\ntip = \"Mẹo vặt\"\nimportant = \"Quan trọng\"\nwarning = \"Cảnh báo\"\ncaution = \"Thận trọng\"\n\nhome = \"Trang chủ\"\nbackToHome = \"Quay lại trang chủ\"\nflip = \"Lật nó!\"\nabout = \"Giới thiệu\"\nsearch = \"Tìm kiếm\"\nprevPage = \"Trang trước\"\nnextPage = \"Trang tiếp theo\"\n\narchives = \"Lưu trữ\"\nallCategories = \"Tất cả danh mục\"\nallTags = \"Tất cả thẻ\"\n\nminuteRead = \" phút đọc\"\nupdatedAt = \"Cập nhật lúc\"\nsocialLinks = \"Liên kết xã hội\"\n\n[article]\none = \"1 bài viết\"\nother = \"{{ .Count }} bài viết\"\n\n[category]\none = \"1 danh mục\"\nother = \"{{ .Count }} danh mục\"\n\n[tag]\none = \"1 thẻ\"\nother = \"{{ .Count }} thẻ\"\n"
  },
  {
    "path": "i18n/zh.toml",
    "content": "note = \"注意\"\ntip = \"提示\"\nimportant = \"重要\"\nwarning = \"警告\"\ncaution = \"小心\"\n\nhome = \"首页\"\nbackToHome = \"返回首页\"\nflip = \"翻转一下！\"\nabout = \"关于\"\nsearch = \"搜索\"\nprevPage = \"上一页\"\nnextPage = \"下一页\"\n\narchives = \"归档\"\nallCategories = \"所有分类\"\nallTags = \"所有标签\"\n\nminuteRead = \"分钟阅读\"\nupdatedAt = \"更新于\"\nsocialLinks = \"社交链接\"\n\n[article]\none = \"1篇文章\"\nother = \"{{ .Count }}篇文章\"\n\n[category]\none = \"1分类\"\nother = \"{{ .Count }}分类\"\n\n[tag]\none = \"1标签\"\nother = \"{{ .Count }}标签\"\n"
  },
  {
    "path": "layouts/404.html",
    "content": "{{ define \"title\" }}404 Not Found{{ end }}\n\n{{ define \"main\" }}\n<div class=\"h-[60vh] mx-auto px-4 flex flex-col justify-center items-center prose dark:prose-invert\">\n  <h1>Oops...You are lost in dream.</h1>\n  <p>Don't worry though, click the button below to wake up.</p>\n  <button class=\"btn my-5\" @click=\"window.location.href = '{{ site.BaseURL }}'\">{{ T \"backToHome\" }}</button>\n</div>\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/_markup/render-blockquote.html",
    "content": "{{ $icons := dict\n  \"note\" \"information-circle-outline\"\n  \"tip\" \"bulb-outline\"\n  \"important\" \"sparkles-outline\"\n  \"warning\" \"warning-outline\"\n  \"caution\" \"alert-circle-outline\"\n}}\n\n{{ if eq .Type \"alert\" }}\n  <blockquote class=\"dream-alert {{ .AlertType }}\">\n    <p class=\"heading\">\n      <ion-icon name=\"{{ (index $icons .AlertType) }}\"></ion-icon>\n      {{- or .Attributes.text (T .AlertType) (title .AlertType) -}}\n    </p>\n    {{ .Text | safeHTML }}\n  </blockquote>\n{{ else }}\n  <blockquote>\n    {{ .Text | safeHTML }}\n  </blockquote>\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/_markup/render-codeblock-math.html",
    "content": "<p class=\"mathjax\">\n  {{- .Inner | safeHTML -}}\n</p>\n{{ .Page.Store.Set \"hasMathjax\" true }}\n"
  },
  {
    "path": "layouts/_default/_markup/render-codeblock-mermaid.html",
    "content": "<pre class=\"mermaid\">\n  {{ .Inner | htmlEscape | safeHTML }}\n</pre>\n{{ .Page.Store.Set \"hasMermaid\" true }}\n"
  },
  {
    "path": "layouts/_default/_markup/render-image.html",
    "content": "{{- if .IsBlock -}}\n  <figure>\n    <img src=\"{{ .Destination | safeURL }}\"\n      {{- with .PlainText }} alt=\"{{ . }}\"{{ end -}}\n    >\n    {{- with .Title }}<figcaption class=\"text-sm italic text-center mt-2\">{{ . }}</figcaption>{{ end -}}\n  </figure>\n{{- else -}}\n  <img src=\"{{ .Destination | safeURL }}\"\n    {{- with .PlainText }} alt=\"{{ . }}\"{{ end -}}\n    {{- with .Title }} title=\"{{ . }}\"{{ end -}}\n  >\n{{- end -}}\n"
  },
  {
    "path": "layouts/_default/_markup/render-link.html",
    "content": "{{- $u := urls.Parse .Destination -}}\n<a href=\"{{ .Destination | safeURL }}\"\n  {{- with .Title }} title=\"{{ . }}\"{{ end -}}\n  {{- if $u.IsAbs }} target=\"_blank\"{{ end -}}\n>\n  {{- with .Text }}{{ . }}{{ end -}}\n</a>\n"
  },
  {
    "path": "layouts/_default/baseof.html",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ site.LanguageCode }}\"\n  x-data\n  :class=\"$store.darkMode.isDark() ? 'dark' : 'light'\"\n  :data-theme=\"$store.darkMode.theme()\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>{{ block \"title\" . -}} {{ T \"home\" }} {{- end }} | {{ site.Title }}</title>\n\n    {{ partial \"head.html\" . }}\n\n    {{ block \"css\" . }} {{ end }}\n\n    {{ range site.Params.Advanced.customCSS }}\n    <link rel=\"stylesheet\" href=\"{{ . | relURL }}\" />\n    {{ end }}\n\n    <script>\n      window.lightTheme = '{{ site.Params.lightTheme }}'\n      window.darkTheme = '{{ site.Params.darkTheme }}'\n\n      ;(function() {\n        const isDark = ('hugo-theme-dream-is-dark' in localStorage)\n          ? window.localStorage.getItem('hugo-theme-dream-is-dark') === 'y'\n          : window.matchMedia('(prefers-color-scheme: dark)').matches\n        const theme = isDark ? window.darkTheme : window.lightTheme\n\n        document.documentElement.setAttribute('data-theme', theme)\n      })()\n    </script>\n    <script defer src=\"https://cdn.jsdelivr.net/npm/alpinejs@3.15.1/dist/cdn.min.js\" integrity=\"sha256-Rmqrc5SKeSLTSnQ9shSKWmJco1ks8c1hLI8UG2Np03M=\" crossorigin=\"anonymous\"></script>\n  </head>\n\n  <body x-data=\"{\n    flip: false,\n  }\">\n    {{ with or site.Params.backgroundImage site.Params.backgroundImageDark }}\n      <div id=\"dream-global-bg\"></div>\n    {{ end }}\n\n    {{ partial \"nav.html\" . }}\n\n    <div class=\"flip-container\" :class=\"{ 'flip-it': flip }\">\n      <div class=\"flipper\">\n        <div class=\"front\">\n          <div class=\"container\">\n            {{ block \"main\" . }} {{ end }}\n\n            {{ partial \"footer.html\" . }}\n          </div>\n        </div>\n        {{ if .IsHome }}\n        <div class=\"back\">\n        {{ else }}\n        <div class=\"back\" data-nosnippet>\n        {{ end }}\n          <div class=\"container\">\n            {{ if site.Params.zenMode }}\n            {{ partial \"zen-back.html\" . }}\n            {{ else }}\n            {{ partial \"back.html\" . }}\n            {{ end }}\n\n            {{ partial \"footer.html\" . }}\n          </div>\n        </div>\n      </div>\n    </div>\n\n    {{ partial \"scripts.html\" . }}\n    {{ block \"js\" . }} {{ end }}\n\n    {{ if .Store.Get \"hasMermaid\" }}\n      <script type=\"module\">\n        import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11.4.1/dist/mermaid.esm.min.mjs';\n        mermaid.initialize({ startOnLoad: true });\n      </script>\n    {{ end }}\n\n    {{ if .Store.Get \"hasMathjax\" }}\n      {{ partialCached \"mathjax.html\" . }}\n    {{ end }}\n\n    {{ range site.Params.Advanced.customJS }}\n    <script src=\"{{ . | relURL }}\"></script>\n    {{ end }}\n\n    {{ if site.Config.Services.GoogleAnalytics.ID }}\n    {{ template \"_internal/google_analytics.html\" . }}\n    {{ end }}\n\n    <script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/ionicons@7.4.0/dist/ionicons/ionicons.esm.js\" integrity=\"sha256-/IFmi82bIhdYWctu0UddSlJqpnzWm7Vh2C4CM32wF/k=\" crossorigin=\"anonymous\"></script>\n    <script nomodule src=\"https://cdn.jsdelivr.net/npm/ionicons@7.4.0/dist/ionicons/ionicons.js\" integrity=\"sha256-mr7eJMX3VC3F7G32mk4oWp1C6a2tlMYxUdptfT7uKI8=\" crossorigin=\"anonymous\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "layouts/_default/single.html",
    "content": "{{ define \"title\" }}{{ .Title }}{{ end }}\n\n{{ define \"css\" }}\n\n{{ if site.Params.customSyntaxHighlighting }}\n<link rel=\"stylesheet\" data-custom-syntax-highlighting />\n<style>\n  .chroma {\n    padding: 1em;\n    background-color: var(--dream-pre-bg, #f5f5f5);\n    border-radius: .5em;\n    overflow: auto;\n  }\n\n  html.dark .chroma {\n    background-color: var(--dream-pre-bg-dark, #262626);\n  }\n</style>\n{{ else }}\n<style>\n  pre {\n    padding: 1em;\n    overflow: auto;\n  }\n</style>\n{{ end }}\n\n{{ partialCached \"commentSystemHeads.html\" . }}\n\n{{ end }}\n\n{{ define \"main\" }}\n<div class=\"lg:grid lg:grid-cols-4 gap-4 mt-4 px-4\">\n  <div class=\"hidden lg:block\">\n    {{ if fileExists \"layouts/partials/adsense.html\" }}\n      <div class=\"dream-adsense w-2/3\">\n        {{ partialCached \"adsense.html\" . }}\n      </div>\n    {{ end }}\n  </div>\n\n  <div class=\"lg:col-span-2\">\n    <article class=\"mx-auto prose prose-quoteless dark:prose-invert\" id=\"dream-single-post-main\" itemscope itemtype=\"http://schema.org/Article\">\n      {{ template \"_internal/schema.html\" . }}\n\n      <header>\n        <h1 itemprop=\"headline\">{{ .Title }}</h1>\n        <p class=\"text-sm\">\n          {{ if site.Params.Experimental.jsDate }}\n            <span data-format=\"luxon\">{{ .Date.Format \"2006-01-02T15:04:05Z07:00\" }}</span>\n          {{ else }}\n            {{ .Date | time.Format \"Monday, Jan 2, 2006\" }}\n          {{ end }}\n\n          | <span>{{ .ReadingTime }}{{ T \"minuteRead\" .ReadingTime }}</span>\n\n          {{ if ne .Params.nolastmod true }}\n          | <span>{{ T \"updatedAt\" }}\n            {{ if site.Params.Experimental.jsDate }}\n              <span data-format=\"luxon\">{{ .Lastmod.Format \"2006-01-02T15:04:05Z07:00\" }}</span>\n            {{ else }}\n              {{ .Lastmod | time.Format \"Monday, Jan 2, 2006\" }}\n            {{ end }}</span>\n          {{ end }}\n        </p>\n\n        {{ $hasAuthor := or .Params.author site.Params.author }}\n        <div class=\"flex justify-between\">\n          {{ if $hasAuthor }}\n            {{ partial \"author.html\" (dict \"Params\" .Params \"template\" \"single\") }}\n          {{ end }}\n\n          {{ partial \"share.html\" . }}\n        </div>\n      </header>\n\n      <section id=\"dream-single-post-content\" itemprop=\"articleBody\">\n        {{ if and .Params.Cover site.Params.showSummaryCoverInPost }}\n          <figure>\n            <img class=\"z-30\" src=\"{{ .Params.Cover }}\" alt=\"{{ .Title }}\" />\n            {{ with .Params.covercaption }}\n              <figcaption class=\"text-sm italic text-center mt-2\">{{ . }}</figcaption>\n            {{ end }}\n          </figure>\n        {{ end }}\n\n        {{ .Content | emojify }}\n\n        {{ if fileExists \"layouts/partials/adsense-post-bottom.html\" }}\n          <div class=\"dream-adsense-post-bottom\">\n            {{ partialCached \"adsense-post-bottom.html\" . }}\n          </div>\n        {{ end }}\n      </section>\n\n      {{ if site.Params.showPrevNextPost }}\n      <div class=\"divider\"></div>\n      <div class=\"flex flex-col md:flex-row justify-between gap-4 py-4\">\n        {{ with .NextInSection }}\n        <a role=\"button\" class=\"btn btn-outline h-12\" href=\"{{ .RelPermalink }}\" title=\"{{ .Title }}\">\n          <ion-icon name=\"chevron-back\"></ion-icon>\n          <div class=\"inline-flex flex-col items-start\">\n            <span class=\"text-base-content/60 text-xs font-normal\">{{ T \"prevPage\" }}</span>\n            <span class=\"max-w-48 truncate\">{{ .LinkTitle }}</span>\n          </div>\n        </a>\n        {{ else }}\n        <div></div>\n        {{ end }}\n\n        {{ with .PrevInSection }}\n        <a role=\"button\" class=\"btn btn-outline h-12\" href=\"{{ .RelPermalink }}\" title=\"{{ .Title }}\">\n          <div class=\"inline-flex flex-col items-end\">\n            <span class=\"text-base-content/60 text-xs font-normal\">{{ T \"nextPage\" }}</span>\n            <span class=\"max-w-48 truncate\">{{ .LinkTitle }}</span>\n          </div>\n          <ion-icon name=\"chevron-forward\"></ion-icon>\n        </a>\n        {{ else }}\n        <div></div>\n        {{ end }}\n      </div>\n      {{ end }}\n\n      {{ if or site.Config.Services.Disqus.Shortname site.Params.utterancesRepo site.Params.valine site.Params.waline site.Params.twikoo.enabled }}\n      <div class=\"divider\"></div>\n\n      <section class=\"space-y-4\">\n        {{ partialCached \"commentSystems.html\" . .RelPermalink }}\n      </section>\n      {{ end }}\n    </article>\n  </div>\n\n  <div\n    x-data=\"tocHighlighter()\"\n    @scroll.window=\"debouncedScroll\"\n    class=\"hidden lg:flex lg:flex-col lg:items-end\"\n  >\n    {{ if site.Params.showTableOfContents }}\n      {{ .TableOfContents }}\n    {{ end }}\n  </div>\n</div>\n{{ end }}\n\n{{ define \"js\" }}\n\n{{ if site.Params.Experimental.jsDate }}\n  {{ partial \"luxon.html\" . }}\n{{ end }}\n\n{{ if site.Params.customSyntaxHighlighting }}\n  {{- $syntaxLightCSS := resources.Get \"css/syntax-light.css\" | minify -}}\n  {{- $syntaxDarkCSS := resources.Get \"css/syntax-dark.css\" | minify -}}\n\n  <script>\n    window.customSyntaxHighlighting = {\n      light: {{ $syntaxLightCSS.RelPermalink }},\n      dark: {{ $syntaxDarkCSS.RelPermalink }}\n    }\n\n    document.addEventListener('alpine:initialized', () => {\n      var isDark = Alpine.store('darkMode').isDark()\n      var customSyntaxHighlightingUrl = isDark ? window.customSyntaxHighlighting.dark : window.customSyntaxHighlighting.light\n\n      document\n        .querySelector('link[data-custom-syntax-highlighting]')\n        .setAttribute('href', customSyntaxHighlightingUrl)\n    })\n  </script>\n{{ end }}\n\n{{ $tocJs := resources.Get \"js/toc.js\" }}\n{{ if hugo.IsProduction }}\n  {{ $tocJs = $tocJs | minify }}\n{{ end }}\n<script src=\"{{ $tocJs.RelPermalink }}\"></script>\n\n{{ if site.Params.imageZoomableInPost }}\n  {{ if fileExists \"layouts/partials/medium-zoom.html\" }}\n    {{ partialCached \"medium-zoom.html\" . }}\n  {{ else }}\n    <script type=\"module\">\n      import mediumZoom from 'https://cdn.jsdelivr.net/npm/medium-zoom@1.1.0/+esm';\n      mediumZoom('#dream-single-post-content img', {\n        background: 'oklch(var(--b1))',\n        margin: 24,\n      })\n    </script>\n  {{ end }}\n{{ end }}\n\n{{ if .Params.math }}\n  {{ .Page.Store.Set \"hasMathjax\" true }}\n{{ end }}\n\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/summary.html",
    "content": "<a class=\"card bg-base-100 hover:bg-base-content/10 shadow-xl cursor-pointer dark:border dark:border-base-content/30\" href=\"{{ .RelPermalink }}\">\n  {{ if .Params.cover }}\n  <figure>\n    {{ with .Resources.Get .Params.cover }}\n    {{ if eq .MediaType.SubType \"svg\" }}\n      <img src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n    {{ else }}\n      {{ $webp := .Resize (printf \"%dx%d webp\" .Width .Height) }}\n      <picture>\n        <source srcset=\"{{ $webp.RelPermalink }}\" type=\"image/webp\" />\n        <img src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n      </picture>\n    {{ end }}\n    {{ else }}\n    <img src=\"{{ .Params.cover }}\" alt=\"{{ .Title }}\" />\n    {{ end }}\n  </figure>\n  {{ else if not site.Params.noDefaultSummaryCover }}\n  <figure>\n    {{ with resources.Get (printf \"images/default%d.jpg\" (index (seq 4 | shuffle) 0)) }}\n    {{ $webp := .Resize (printf \"%dx%d webp\" .Width .Height) }}\n    <picture>\n      <source srcset=\"{{ $webp.RelPermalink }}\" type=\"image/webp\" />\n      <img src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n    </picture>\n    {{ end }}\n  </figure>\n  {{ end }}\n\n  <div class=\"card-body\">\n    <h2 class=\"card-title\">{{ .Title }}</h2>\n\n    <p class=\"date text-base-content/60\">\n    {{ if site.Params.Experimental.jsDate }}\n      <span data-format=\"luxon\">{{ .Date.Format \"2006-01-02T15:04:05Z07:00\" }}</span>\n    {{ else }}\n      {{ .Date | time.Format \"Monday, Jan 2, 2006\" }}\n    {{ end }}\n    </p>\n\n    {{ or .Description (.Summary | emojify | safeHTML) }}\n\n    {{ $hasAuthor := or .Params.author site.Params.author }}\n    <div class=\"card-actions justify-between items-center mt-4\">\n      {{ if $hasAuthor }}\n        {{ partial \"author.html\" (dict \"Params\" .Params \"template\" \"summary\") }}\n      {{ end }}\n\n      <div class=\"flex items-center\">\n        <ion-icon name=\"time\" class=\"mr-1\"></ion-icon>\n        <span>{{ .ReadingTime }}{{ T \"minuteRead\" .ReadingTime }}</span>\n      </div>\n    </div>\n  </div>\n</a>\n"
  },
  {
    "path": "layouts/_default/term.html",
    "content": "{{ define \"title\" }}\n{{- .Title -}}\n{{ end }}\n\n{{ define \"main\"}}\n\n{{ if site.Params.zenMode }}\n<div class=\"max-w-[65ch] mt-4 mx-auto\">\n{{ else }}\n<div class=\"flex flex-col md:flex-row mt-4\">\n{{ end }}\n  <div class=\"md:basis-[200px] lg:basis-[300px] p-4 prose dark:prose-invert\">\n    <h1 class=\"text-2xl\">\n      {{- .Title -}}\n    </h1>\n    <p class=\"text-sm\">\n      {{- T \"article\" (len .Pages) -}}\n    </p>\n    <div class=\"flex flex-wrap gap-4 mt-6\">\n      {{ $title := .Title }}\n\n      {{ range (index site.Taxonomies .Data.Plural).Alphabetical }}\n      {{ if eq .Page.Title $title }}\n      <span class=\"badge h-6 badge-primary\">\n        {{ .Page.Title }}\n      </span>\n      {{ else }}\n      <a href=\"{{ .Page.RelPermalink }}\" class=\"badge h-6 no-underline hover:badge-primary\">\n        {{ .Page.Title }}\n      </a>\n      {{ end }}\n      {{ end }}\n    </div>\n  </div>\n  {{ if site.Params.zenMode }}\n  <div class=\"divider divider-vertical\"></div>\n  {{ else }}\n  <div class=\"divider divider-vertical md:divider-horizontal px-4 md:px-0\"></div>\n  {{ end }}\n  <div class=\"flex-1\">\n    {{ $paginator := .Paginate .Pages }}\n\n    {{ if site.Params.zenMode }}\n      <div class=\"dream-zen-posts px-4 space-y-8\">\n        {{ range $paginator.Pages }}\n          {{ .Render \"zen-summary\" }}\n        {{ end }}\n      </div>\n    {{ else }}\n      <div class=\"dream-grid\">\n        {{ range $paginator.Pages }}\n          <div class=\"w-full md:w-1/2 lg:w-1/3 p-4 dream-column\">\n            {{ .Render \"summary\" }}\n          </div>\n        {{ end }}\n      </div>\n    {{ end }}\n\n    {{ if gt $paginator.TotalPages 1 }}\n    <div class=\"flex justify-center pt-8\">\n      {{ partial \"paginator.html\" (dict \"paginator\" $paginator) }}\n    </div>\n    {{ end }}\n  </div>\n</div>\n\n{{ end }}\n\n{{ define \"js\" }}\n\n{{ if site.Params.Experimental.jsDate }}\n{{ partial \"luxon.html\" . }}\n{{ end }}\n\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/terms.html",
    "content": "{{ define \"title\" }}\n{{ $title := (strings.FirstUpper .Data.Plural) }}\n{{ $translation := T (print \"all\" $title) }}\n{{ default $title $translation -}}\n{{ end }}\n\n{{ define \"main\"}}\n\n{{ if site.Params.zenMode }}\n<div class=\"max-w-[65ch] mt-4 mx-auto\">\n{{ else }}\n<div class=\"flex flex-col md:flex-row mt-4\">\n{{ end }}\n  <div class=\"md:basis-[200px] lg:basis-[300px] p-4 prose dark:prose-invert\">\n    <h1 class=\"text-2xl\">\n      {{- $title := T (print \"all\" (strings.FirstUpper .Data.Plural)) }}\n      {{- default (strings.FirstUpper .Data.Plural) $title -}}\n    </h1>\n    <p class=\"text-sm\">\n      {{- if eq (len .Data.Terms) 1 }}\n      {{- default (print \"1 \" .Data.Singular) (T .Data.Singular 1) }}\n      {{- else }}\n      {{- default (print (len .Data.Terms) \" \" .Data.Plural) (T .Data.Singular (len .Data.Terms)) }}\n      {{- end -}}\n    </p>\n    <div class=\"flex flex-wrap gap-4 mt-6\">\n      {{ range .Data.Terms.Alphabetical }}\n      <a href=\"{{ .Page.RelPermalink }}\" class=\"badge h-6 no-underline hover:badge-primary\">\n        {{ .Page.LinkTitle }}\n      </a>\n      {{ end }}\n    </div>\n  </div>\n  {{ if site.Params.zenMode }}\n  <div class=\"divider divider-vertical\"></div>\n  {{ else }}\n  <div class=\"divider divider-vertical md:divider-horizontal px-4 md:px-0\"></div>\n  {{ end }}\n  <div class=\"flex-1\">\n    {{ $paginator := .Paginate (where site.RegularPages (print \".Params.\" .Data.Plural) \"ne\" nil) }}\n\n    {{ if site.Params.zenMode }}\n      <div class=\"dream-zen-posts px-4 space-y-8\">\n        {{ range $paginator.Pages }}\n          {{ .Render \"zen-summary\" }}\n        {{ end }}\n      </div>\n    {{ else }}\n    <div class=\"dream-grid\">\n      {{ range $paginator.Pages }}\n        <div class=\"w-full md:w-1/2 lg:w-1/3 p-4 dream-column\">\n          {{ .Render \"summary\" }}\n        </div>\n      {{ end }}\n    </div>\n    {{ end }}\n\n    {{ if gt $paginator.TotalPages 1 }}\n    <div class=\"flex justify-center pt-8\">\n      {{ partial \"paginator.html\" (dict \"paginator\" $paginator) }}\n    </div>\n    {{ end }}\n  </div>\n</div>\n\n{{ end }}\n\n{{ define \"js\" }}\n\n{{ if site.Params.Experimental.jsDate }}\n{{ partial \"luxon.html\" . }}\n{{ end }}\n\n{{ end }}\n"
  },
  {
    "path": "layouts/_default/zen-summary.html",
    "content": "<a class=\"flex justify-between items-center gap-4\" href=\"{{ .RelPermalink }}\">\n  <div>\n    <h2 class=\"text-lg font-medium underline\">{{ .Title }}</h2>\n    <span class=\"date text-base-content/60 text-sm\">\n    {{ if site.Params.Experimental.jsDate }}\n      <span data-format=\"luxon\">{{ .Date.Format \"2006-01-02T15:04:05Z07:00\" }}</span>\n    {{ else }}\n      {{ .Date | time.Format \"Monday, Jan 2, 2006\" }}\n    {{ end }}\n    </span>\n  </div>\n\n  {{ if .Params.cover }}\n  <figure>\n    {{ with .Resources.Get .Params.cover }}\n    {{ if eq .MediaType.SubType \"svg\" }}\n      <img class=\"w-24 max-w-none rounded-lg\" src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n    {{ else }}\n      {{ $webp := .Resize (printf \"%dx%d webp\" .Width .Height) }}\n      <picture>\n        <source srcset=\"{{ $webp.RelPermalink }}\" type=\"image/webp\" />\n        <img class=\"w-24 max-w-none rounded-lg\" src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n      </picture>\n    {{ end }}\n    {{ else }}\n    <img class=\"w-24 max-w-none rounded-lg\" src=\"{{ .Params.cover }}\" alt=\"{{ .Title }}\" />\n    {{ end }}\n  </figure>\n  {{ else if not site.Params.noDefaultSummaryCover }}\n  <figure>\n    {{ with resources.Get (printf \"images/default%d.jpg\" (index (seq 4 | shuffle) 0)) }}\n    {{ $webp := .Resize (printf \"%dx%d webp\" .Width .Height) }}\n    <picture>\n      <source srcset=\"{{ $webp.RelPermalink }}\" type=\"image/webp\" />\n      <img src=\"{{ .RelPermalink }}\" alt=\"{{ .Title }}\" />\n    </picture>\n    {{ end }}\n  </figure>\n  {{ end }}\n</a>\n"
  },
  {
    "path": "layouts/index.html",
    "content": "{{ define \"main\"}}\n\n{{ $paginator := .Paginate (where site.RegularPages \"Type\" \"posts\") }}\n\n{{ if site.Params.zenMode }}\n<div class=\"dream-zen-posts max-w-[65ch] mt-8 mx-auto px-4 space-y-8\">\n{{ range $paginator.Pages }}\n  {{ .Render \"zen-summary\" }}\n{{ end }}\n</div>\n{{ else }}\n<div class=\"dream-grid opacity-0\">\n  {{ range $paginator.Pages }}\n    <div class=\"w-full md:w-1/2 lg:w-1/3 xl:w-1/4 p-4 dream-column\">\n      {{ .Render \"summary\" }}\n    </div>\n  {{ end }}\n</div>\n{{ end }}\n\n{{ if gt $paginator.TotalPages 1 }}\n<div class=\"flex justify-center mt-8\">\n  {{ partial \"paginator.html\" (dict \"paginator\" $paginator) }}\n</div>\n{{ end }}\n\n{{ end }}\n\n{{ define \"js\" }}\n\n{{ if site.Params.Experimental.jsDate }}\n{{ partial \"luxon.html\" . }}\n{{ end }}\n\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/author.html",
    "content": "<div class=\"flex items-center\">\n  {{ if .Params.avatar }}\n  <div class=\"avatar mr-1\">\n    <div class=\"w-8 rounded-full\">\n      <img class=\"my-0!\" src=\"{{ .Params.avatar }}\" alt=\"{{ .Params.author }}\" />\n    </div>\n  </div>\n  {{ else }}\n  <span>@</span>\n  {{ end }}\n\n  <span itemprop=\"author\" itemscope itemtype=\"https://schema.org/Person\">\n  {{ if .Params.author }}\n    {{ if and .Params.authorlink (eq .template \"single\") }}\n      <a itemprop=\"url\" href=\"{{ .Params.authorlink }}\" target=\"_blank\">\n        <span itemprop=\"name\">{{ .Params.author }}</span>\n      </a>\n    {{ else }}\n      <span itemprop=\"name\">{{ .Params.author }}</span>\n    {{ end }}\n  {{ else }}\n    <span itemprop=\"name\">{{ site.Params.author }}</span>\n  {{ end }}\n  </span>\n</div>\n"
  },
  {
    "path": "layouts/partials/back.html",
    "content": "<div class=\"dream-grid dream-grid-about\">\n  {{ with site.GetPage \"/about\" }}\n  {{ $aboutPages := .Resources.ByType \"page\" }}\n  {{ range (sort $aboutPages \"Date\" \"asc\") }}\n  <div class=\"w-full md:w-1/2 lg:w-1/3 xl:w-1/4 p-4 dream-column\">\n    <article\n      class=\"card bg-base-100 hover:bg-base-content/10 shadow-xl dark:border dark:border-base-content/30\"\n    >\n      <div class=\"card-body\">\n        <div class=\"card-title\">{{ .Title }}</div>\n\n        <div class=\"prose dark:prose-invert\">\n          {{ .Content | emojify }}\n        </div>\n      </div>\n    </article>\n  </div>\n  {{ end }}\n  {{ end }}\n\n  {{ if (fileExists \"data/socials.toml\") }}\n  <div class=\"w-full md:w-1/2 lg:w-1/3 xl:w-1/4 p-4 dream-column\">\n    <article\n      class=\"card bg-base-100 hover:bg-base-content/10 shadow-xl dark:border dark:border-base-content/30\"\n    >\n      <div class=\"card-body\">\n        <div class=\"card-title\">{{ T \"socialLinks\" }}</div>\n\n        {{ partialCached \"socials.html\" . }}\n      </div>\n    </article>\n  </div>\n  {{ end }}\n\n  {{ if and site.Config.Services.Disqus.Shortname .IsHome }}\n  <div class=\"w-full md:w-1/2 p-4 dream-column\">\n    <article\n      class=\"card bg-base-100 shadow-xl dark:border dark:border-base-content/30\"\n    >\n      <div class=\"card-body\">\n        {{ partial \"disqus.html\" (dict \"Context\" . \"Identifier\" \"/\") }}\n      </div>\n    </article>\n  </div>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/partials/commentSystemHeads.html",
    "content": "{{ if site.Params.valine }}\n  <script src=\"https://cdn.jsdelivr.net/npm/valine@1.5.3/dist/Valine.min.js\" integrity=\"sha256-Lb/Sq1zF0ecN4bqy/bue64K+slKjVFtOh5PlcBS5VxY=\" crossorigin=\"anonymous\"></script>\n{{ end }}\n\n{{ if site.Params.waline }}\n  <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@waline/client@3.5.6/dist/waline.css\" integrity=\"sha256-qpAQ3GIja9xsaYW3Pa0+znYfCkBqUY3KAmc2l9MNZ3w=\" crossorigin=\"anonymous\" />\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/commentSystems.html",
    "content": "{{ if site.Config.Services.Disqus.Shortname }}\n<article>\n  {{ partial \"disqus.html\" (dict \"Context\" . \"Identifier\" .RelPermalink) }}\n</article>\n{{ end }}\n\n{{ if site.Params.utterancesRepo }}\n<template x-if=\"['localhost', '127.0.0.1'].indexOf(window.location.hostname) == -1\">\n  <article>\n    <script\n      src=\"https://utteranc.es/client.js\"\n      repo=\"{{ site.Params.utterancesRepo }}\"\n      issue-term=\"og:title\"\n      theme=\"github-light\"\n      crossorigin=\"anonymous\"\n      async>\n    </script>\n  </article>\n</template>\n{{ end }}\n\n{{ if site.Params.valine }}\n<article>\n{{ if fileExists \"layouts/partials/valine.html\" }}\n  {{ partialCached \"valine.html\" . }}\n{{ else }}\n  <div id=\"vcomments\"></div>\n  <script>\n    new Valine({\n      el: '#vcomments',\n      appId: '{{ site.Params.LEANCLOUD_APP_ID }}',\n      appKey: '{{ site.Params.LEANCLOUD_APP_KEY }}'\n    })\n  </script>\n{{ end }}\n</article>\n{{ end }}\n\n{{ if site.Params.waline }}\n<article>\n{{ if fileExists \"layouts/partials/waline.html\" }}\n  {{ partialCached \"waline.html\" . }}\n{{ else }}\n  <div id=\"waline\"></div>\n  <script type=\"module\">\n    import { init } from 'https://cdn.jsdelivr.net/npm/@waline/client@3/dist/waline.js';\n\n    init({\n      el: '#waline',\n      dark: 'html.dark',\n      serverURL: {{ site.Params.walineServer }},\n    });\n  </script>\n{{ end }}\n</article>\n{{ end }}\n\n{{ if site.Params.twikoo.enabled }}\n<article>\n{{ if fileExists \"layouts/partials/twikoo.html\" }}\n  {{ partialCached \"twikoo.html\" . }}\n{{ else }}\n  <div id=\"tcomment\"></div>\n  <script src=\"https://cdn.jsdelivr.net/npm/twikoo@1.6.41/dist/twikoo.min.js\"></script>\n  <script>\n    twikoo.init({\n      envId: {{ site.Params.twikoo.envID }},\n      el: '#tcomment',\n      {{ with site.Params.twikoo.region }}\n        region: {{ . }},\n      {{ end }}\n      path: {{ .RelPermalink }},\n      {{ with site.Params.twikoo.lang }}\n        lang: {{ . }},\n      {{ end }}\n    })\n  </script>\n{{ end }}\n</article>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/disqus.html",
    "content": "{{- $pc := site.Config.Privacy.Disqus -}}\n{{- if not $pc.Disable -}}\n{{ if site.Config.Services.Disqus.Shortname }}<div id=\"disqus_thread\"></div>\n<script>\n    window.disqus_config = function () {\n        this.page.identifier = '{{ default .Identifier .Context.Params.disqus_identifier }}';\n        this.page.title = '{{ default .Context.Title .Context.Params.disqus_title }}';\n        this.page.url = '{{ default .Context.Permalink .Context.Params.disqus_url }}';\n\n        {{ if eq .Identifier \"/\" }}\n        this.callbacks.onReady.push(function () {\n            window.aboutMasonry.layout();\n        });\n        {{ end }}\n    };\n    function initDisqus() {\n        if ([\"localhost\", \"127.0.0.1\"].indexOf(window.location.hostname) != -1) {\n            document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';\n            return;\n        }\n        var d = document, s = d.createElement('script'); s.async = true;\n        s.src = '//' + {{ site.Config.Services.Disqus.Shortname }} + '.disqus.com/embed.js';\n        s.setAttribute('data-timestamp', +new Date());\n        (d.head || d.body).appendChild(s);\n    };\n    setTimeout(() => {\n        initDisqus();\n    }, 3000);\n</script>\n<noscript>Please enable JavaScript to view the <a href=\"https://disqus.com/?ref_noscript\">comments powered by Disqus.</a></noscript>{{end}}\n{{- end -}}\n"
  },
  {
    "path": "layouts/partials/footer.html",
    "content": "{{ if site.Params.zenMode }}\n<footer class=\"flex justify-between items-center gap-2 max-w-[65ch] mx-auto px-4 md:px-0 py-12\">\n{{ else }}\n<footer class=\"flex justify-between items-center gap-2 px-4 py-12\">\n{{ end }}\n  {{ partial \"footerLeft.html\" . }}\n  {{ partial \"footerRight.html\" . }}\n</footer>\n"
  },
  {
    "path": "layouts/partials/footerLeft.html",
    "content": "<div>\n  {{ if site.Params.siteStartYear }}\n  <p>\n    © {{ if eq now.Year site.Params.siteStartYear }}{{ now.Year }}{{ else }}{{ site.Params.siteStartYear }} - {{\n    now.Year }}{{ end }} {{ site.Title }}\n  </p>\n  {{ else }}\n  <p>© {{ now.Year }} {{ site.Title }}</p>\n  {{ end }}\n\n  {{ if site.Params.footerBottomText }}\n  <p>{{ site.Params.footerBottomText | safeHTML }}</p>\n  {{ else }}\n  <p class=\"text-sm\">\n    🌱\n    <span class=\"text-base-content/60\">\n      Powered by <a class=\"hover:underline\" href=\"https://gohugo.io/\" target=\"_blank\">Hugo</a> with theme\n      <a class=\"hover:underline\" href=\"https://github.com/g1eny0ung/hugo-theme-dream\" target=\"_blank\">Dream</a>.</span\n    >\n  </p>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/partials/footerRight.html",
    "content": "<div\n  x-data=\"{ icons: [\n    { name: 'sunny', status: 'n' },\n    { name: 'moon', status: 'y' },\n    { name: 'desktop', status: 'auto' }\n  ] }\"\n  class=\"flex items-center gap-2 h-8 px-2 bg-base-100 border border-base-content/30 rounded-full\"\n>\n  <template x-for=\"icon in icons\">\n    <div\n      role=\"button\"\n      tabindex=\"0\"\n      :aria-label=\"'Select ' + icon.name + ' mode'\"\n      class=\"group inline-flex justify-center items-center p-1 rounded-full cursor-pointer hover:bg-primary\"\n      :class=\"$store.darkMode.icon() === icon.name && 'bg-primary'\"\n      @click=\"$store.darkMode.toggle(icon.status)\"\n    >\n      <ion-icon\n        :name=\"`${icon.name}-outline`\"\n        class=\"group-hover:text-primary-content\"\n        :class=\"$store.darkMode.icon() === icon.name && 'text-primary-content'\"\n      >\n      </ion-icon>\n    </div>\n  </template>\n</div>\n"
  },
  {
    "path": "layouts/partials/head.html",
    "content": "{{ with site.Params.favicon }}\n  {{ if hasPrefix . \"<link\" }}\n    {{ . | safeHTML }}\n  {{ else }}\n    <link href=\"{{ . | relURL }}\" rel=\"icon\" type=\"image/x-icon\" />\n  {{ end }}\n{{ end }}\n\n<link rel=\"canonical\" href=\"{{ .Permalink }}\" />\n\n{{ if eq .Type \"posts\" }}\n<!-- Page Author & Description -->\n<meta name=\"author\" content=\"{{ if isset .Params \"author\" }}{{ .Params.author }}{{ else }}{{ site.Params.author }}{{ end }}\" />\n<meta name=\"description\" content=\"{{ (or .Description .Summary) | plainify }}\" />\n\n<!-- Keywords -->\n{{- $keywords := slice }}\n{{- with .Keywords }}\n  {{- $keywords = . }}\n{{- else }}\n  {{- range .GetTerms \"tags\" }}\n    {{- $keywords = $keywords | append .Title }}\n  {{- else }}\n    {{- range $taxonomy, $_ := site.Taxonomies }}\n      {{- range $.GetTerms $taxonomy }}\n        {{- $keywords = $keywords | append .Title }}\n      {{- end }}\n    {{- end }}\n  {{- end }}\n{{- end }}\n<meta name=\"keywords\" content=\"{{ delimit $keywords `,` }}\">\n{{ else }}\n<!-- Site Author & Description -->\n<meta name=\"author\" content=\"{{ site.Params.author }}\" />\n<meta name=\"description\" content=\"{{ site.Params.description | plainify }}\" />\n{{ end }}\n\n<!-- Site Generator -->\n{{ hugo.Generator }}\n\n<!-- Open Graph -->\n{{ template \"_internal/opengraph.html\" . }}\n\n<!-- Twitter Cards -->\n{{ template \"_internal/twitter_cards.html\" . }}\n\n{{ $outputCss := resources.Get \"css/output.css\" }}\n{{ if hugo.IsProduction }}\n  {{ $outputCss = $outputCss | minify }}\n{{ end }}\n<link rel=\"stylesheet\" href=\"{{ $outputCss.RelPermalink }}\" />\n\n{{ if or site.Params.backgroundImage site.Params.backgroundImageDark }}\n<style>\n{{ if site.Params.backgroundImage }}\n#dream-global-bg {\n  background-image: url({{ site.Params.backgroundImage | relURL }});\n}\n{{ end }}\n\n{{ if site.Params.backgroundImageDark }}\nhtml.dark #dream-global-bg {\n  background-image: url({{ site.Params.backgroundImageDark | relURL }});\n}\n{{ end }}\n</style>\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/luxon.html",
    "content": "<script\n  src=\"https://cdn.jsdelivr.net/npm/luxon@1.26.0\"\n  integrity=\"sha256-4sbTzmCCW9LGrIh5OsN8V5Pfdad1F1MwhLAOyXKnsE0=\"\n  crossorigin=\"anonymous\"\n></script>\n<script>\n  format()\n\n  function format() {\n    document.querySelectorAll('span[data-format=\"luxon\"]').forEach(el => {\n      const date = el.textContent\n\n      el.textContent = luxon.DateTime.fromISO(date, { locale: {{ site.Language.Lang }} }).toFormat({{ site.Params.Experimental.jsDateFormat | default \"yyyy-MM-dd\" }})\n    })\n  }\n</script>\n"
  },
  {
    "path": "layouts/partials/mathjax.html",
    "content": "<script async src=\"https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.min.js\"></script>\n<script>\n  MathJax = {\n    tex: {\n      displayMath: [\n        ['\\\\[', '\\\\]'],\n        ['$$', '$$'],\n      ], // block\n      inlineMath: [\n        ['\\\\(', '\\\\)'],\n        ['$', '$'],\n      ], // inline\n    },\n  }\n</script>\n"
  },
  {
    "path": "layouts/partials/nav.html",
    "content": "{{ if site.Params.stickyNav }}\n<nav x-data=\"{ isSticky: false }\"\n  x-init=\"window.addEventListener('scroll', () => { isSticky = window.scrollY > 30 })\"\n  class=\"sticky top-0 z-30 mt-4 lg:mt-8 py-4\"\n  :class=\"{ 'bg-base-100 shadow-lg dark:border-b dark:border-base-content/30': isSticky }\">\n{{ else }}\n<nav class=\"mt-4 lg:mt-8 py-4\">\n{{ end }}\n  {{ if site.Params.zenMode }}\n  <div class=\"container flex justify-between max-w-[65ch] mx-auto px-4 md:px-0\">\n  {{ else }}\n  <div class=\"container flex justify-between px-4\">\n  {{ end }}\n    <section class=\"flex items-center gap-2\">\n      <div class=\"avatar cursor-pointer hover:avatar-online\" @click=\"flip = !flip\" title=\"{{ T \"flip\" }}\">\n        <div class=\"w-12 h-12 rounded-full select-none\">\n          <img src=\"{{ site.Params.avatar | relURL }}\" alt=\"{{ site.Params.headerTitle }}\" />\n        </div>\n      </div>\n\n      {{ if or site.Params.headerTitle site.Params.motto }}\n      <div>\n        {{ if site.Params.headerTitle }}\n        <a href=\"{{ site.BaseURL }}\" class=\"text-lg font-semibold cursor-pointer\">\n          {{ site.Params.headerTitle }}\n        </a>\n        {{ end }}\n        {{ if site.Params.motto }}\n        <div class=\"text-base-content/60 text-sm\">{{ site.Params.motto }}</div>\n        {{ end }}\n      </div>\n      {{ end }}\n    </section>\n\n    {{ $navItems := slice \"about\" \"search\" \"rss\" \"posts\" \"categories\" \"tags\" }}\n    {{ if site.Params.reorderNavItems }}\n      {{ $navItems = site.Params.reorderNavItems }}\n    {{ end }}\n\n    <div class=\"dropdown dropdown-end sm:hidden\">\n      <div tabindex=\"0\" role=\"button\" class=\"btn btn-ghost btn-square\" aria-label=\"Select an option\">\n        <ion-icon name=\"menu\" class=\"text-2xl\"></ion-icon>\n      </div>\n      <ul tabindex=\"0\" class=\"dropdown-content menu w-36 bg-base-100 rounded-box z-1 shadow-md\">\n        {{ partial \"navMobileMenu.html\" (dict \"navItems\" $navItems) }}\n      </ul>\n    </div>\n    <section class=\"hidden sm:flex sm:items-center sm:gap-2 md:gap-4\">\n      {{ if not site.Params.collapseNavItems }}\n\n      {{ range $navItems }}\n      {{ partial \"renderNavItem.html\" . }}\n      {{ end }}\n\n      {{ with site.Params.navItems }}\n      {{ partial \"navCustomItems.html\" (dict \"navItems\" $navItems \"mobile\" false) }}\n      {{ end }}\n\n      {{ else }}\n\n      {{ $collapseNavItems := site.Params.collapseNavItems }}\n      {{ $items := complement $collapseNavItems $navItems }}\n      {{ range $items }}\n      {{ partial \"renderNavItem.html\" . }}\n      {{ end }}\n\n      <div class=\"dropdown dropdown-end dropdown-hover\">\n        <div tabindex=\"0\" role=\"button\" class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" aria-label=\"Select an option\">\n          <ion-icon class=\"group-hover:text-primary-content text-xl\" name=\"menu\"></ion-icon>\n        </div>\n        <ul tabindex=\"0\" class=\"dropdown-content menu w-36 bg-base-100 rounded-box z-1 shadow-xl\">\n          {{ range $collapseNavItems }}\n          {{ partial \"renderMobileNavItem.html\" . }}\n          {{ end }}\n\n          {{ with site.Params.navItems }}\n          {{ partial \"navCustomItems.html\" (dict \"navItems\" $navItems \"mobile\" true) }}\n          {{ end }}\n        </ul>\n      </div>\n      {{ end }}\n    </section>\n  </div>\n</nav>\n"
  },
  {
    "path": "layouts/partials/navCustomItems.html",
    "content": "{{ $customItems := site.Params.navItems }}\n{{ $keys := slice }}\n\n{{ range $k, $v := $customItems }}\n{{ $keys = $keys | append $k }}\n{{ end }}\n\n{{ $restNavItems := complement .navItems $keys }}\n{{ $mobile := .mobile }}\n{{ range $restNavItems }}\n  {{ if $mobile }}\n    {{ partial \"renderMobileNavItem.html\" . }}\n  {{ else }}\n    {{ partial \"renderNavItem.html\" . }}\n  {{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/navMobileMenu.html",
    "content": "{{ $navItems := .navItems }}\n\n{{ range $navItems }}\n{{ partial \"renderMobileNavItem.html\" . }}\n{{ end }}\n\n{{ with site.Params.navItems }}\n{{ partial \"navCustomItems.html\" (dict \"navItems\" $navItems \"mobile\" true) }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/paginator.html",
    "content": "<div class=\"join grid grid-cols-2\">\n  {{ if .paginator.HasPrev }}\n  <a href=\"{{ .paginator.Prev.URL }}\" title={{ T \"prevPage\" }} class=\"join-item btn btn-outline btn-sm\">\n    {{ T \"prevPage\" }}\n  </a>\n  {{ else }}\n  <button class=\"join-item btn btn-outline btn-sm\" disabled>\n    {{ T \"prevPage\" }}\n  </button>\n  {{ end }}\n  {{ if .paginator.HasNext }}\n  <a href=\"{{ .paginator.Next.URL }}\" title=\"{{ T \"nextPage\" }}\" class=\"join-item btn btn-outline btn-sm\">\n    {{ T \"nextPage\" }}\n  </a>\n  {{ else }}\n  <button class=\"join-item btn btn-outline btn-sm\" disabled>\n    {{ T \"nextPage\" }}\n  </button>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/partials/renderMobileNavItem.html",
    "content": "{{ if (eq . \"about\") }}\n\n{{ with site.GetPage \"/about\" }}\n{{ $aboutPages := .Resources.ByType \"page\" }}\n{{ if gt (len $aboutPages) 0 }}\n<li>\n  <div role=\"link\" tabindex=\"0\" class=\"inline-flex items-center p-2 cursor-pointer\" @click=\"flip = !flip\" title=\"{{ T \"about\" }}\">\n    <ion-icon name=\"information-circle\"></ion-icon>\n    {{- T \"about\" -}}\n  </div>\n</li>\n{{ end }}\n{{ end }}\n\n{{ else if and (eq . \"search\") (gt (len (where site.Pages \"Type\" \"search\")) 0) }}\n<li>\n  <a class=\"group inline-flex items-center p-2 cursor-pointer\" href=\"{{ \"search\" | relLangURL }}\" title=\"{{ T \"search\" }}\">\n    <ion-icon name=\"search\"></ion-icon>\n    {{ T \"search\" }}\n  </a>\n</li>\n{{ else if and (eq . \"rss\") site.Params.rss }}\n<li>\n  <a class=\"inline-flex items-center p-2 cursor-pointer\" href=\"{{ \"index.xml\" | relLangURL }}\" title=\"RSS\">\n    <ion-icon name=\"logo-rss\"></ion-icon>\n    RSS\n  </a>\n</li>\n{{ else if and (eq . \"posts\") (gt (len (where site.RegularPages \"Type\" \"posts\")) 0) }}\n<li>\n  <a class=\"inline-flex items-center p-2 cursor-pointer\" href=\"{{ \"posts\" | relLangURL }}\" title=\"{{ T \"archives\" }}\">\n    <ion-icon name=\"archive\"></ion-icon>\n    {{ T \"archives\" }}\n  </a>\n</li>\n{{ else if and (eq . \"categories\") site.Taxonomies.categories }}\n<li>\n  <a class=\"inline-flex items-center p-2 cursor-pointer\" href=\"{{ \"categories\" | relLangURL }}\" title=\"{{ T \"allCategories\" }}\">\n    <ion-icon name=\"grid\"></ion-icon>\n    {{ T \"allCategories\" }}\n  </a>\n</li>\n{{ else if and (eq . \"tags\") site.Taxonomies.tags }}\n<li>\n  <a class=\"inline-flex items-center p-2 cursor-pointer\" href=\"{{ \"tags\" | relLangURL }}\" title=\"{{ T \"allTags\" }}\">\n    <ion-icon name=\"pricetags\"></ion-icon>\n    {{ T \"allTags\" }}\n  </a>\n</li>\n{{ else }}\n{{ $navItems := site.Params.navItems }}\n{{ $item := index $navItems . }}\n{{ with $item }}\n<li>\n  <a class=\"inline-flex items-center p-2 cursor-pointer\" href=\"{{ .href }}\" target=\"{{ .target }}\" title=\"{{ .title }}\">\n    {{ if .icon }}\n    <ion-icon name=\"{{ .icon }}\"></ion-icon>\n    {{ end }}\n    {{ .title }}\n  </a>\n</li>\n{{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/renderNavItem.html",
    "content": "{{ if and (eq . \"about\") }}\n\n{{ with site.GetPage \"/about\" }}\n{{ $aboutPages := .Resources.ByType \"page\" }}\n{{ if gt (len $aboutPages) 0 }}\n<div role=\"link\" tabindex=\"0\" class=\"text-sm font-semibold cursor-pointer hover:underline\" @click=\"flip = !flip\" title=\"{{ T \"about\" }}\">\n  {{- T \"about\" -}}\n</div>\n{{ end }}\n{{ end }}\n\n{{ else if and (eq . \"search\") (gt (len (where site.Pages \"Type\" \"search\")) 0) }}\n<a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ \"search\" | relLangURL }}\" title=\"{{ T \"search\" }}\">\n  <ion-icon class=\"group-hover:text-primary-content\" name=\"search\"></ion-icon>\n</a>\n{{ else if and (eq . \"rss\") site.Params.rss }}\n<a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ \"index.xml\" | relLangURL }}\" title=\"RSS\">\n  <ion-icon class=\"group-hover:text-primary-content\" name=\"logo-rss\"></ion-icon>\n</a>\n{{ else if and (eq . \"posts\") (gt (len (where site.RegularPages \"Type\" \"posts\")) 0) }}\n<a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ \"posts\" | relLangURL }}\" title=\"{{ T \"archives\" }}\">\n  <ion-icon class=\"group-hover:text-primary-content\" name=\"archive\"></ion-icon>\n</a>\n{{ else if and (eq . \"categories\") site.Taxonomies.categories }}\n<a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ \"categories\" | relLangURL }}\" title=\"{{ T \"allCategories\" }}\">\n  <ion-icon class=\"group-hover:text-primary-content\" name=\"grid\"></ion-icon>\n</a>\n{{ else if and (eq . \"tags\") site.Taxonomies.tags }}\n<a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ \"tags\" | relLangURL }}\" title=\"{{ T \"allTags\" }}\">\n  <ion-icon class=\"group-hover:text-primary-content\" name=\"pricetags\"></ion-icon>\n</a>\n{{ else }}\n{{ $navItems := site.Params.navItems }}\n{{ $item := index $navItems . }}\n{{ with $item }}\n  {{ if .icon }}\n  <a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\" href=\"{{ .href }}\" target=\"{{ .target }}\" title=\"{{ .title }}\">\n    <ion-icon class=\"group-hover:text-primary-content\" name=\"{{ .icon }}\"></ion-icon>\n  </a>\n  {{ else if .title }}\n  <a class=\"text-sm font-semibold cursor-pointer hover:underline\" href=\"{{ .href }}\" target=\"{{ .target }}\" title=\"{{ .title }}\">\n    {{ .title }}\n  </a>\n  {{ end }}\n{{ end }}\n{{ end }}\n"
  },
  {
    "path": "layouts/partials/scripts.html",
    "content": "{{ if not site.Params.zenMode }}\n  <script src=\"https://cdn.jsdelivr.net/npm/imagesloaded@5.0.0/imagesloaded.pkgd.min.js\" integrity=\"sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=\" crossorigin=\"anonymous\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/masonry-layout@4.2.2/dist/masonry.pkgd.min.js\" integrity=\"sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=\" crossorigin=\"anonymous\"></script>\n\n  {{ $gridJs := resources.Get \"js/grid.js\" }}\n  {{ if hugo.IsProduction }}\n    {{ $gridJs = $gridJs | minify }}\n  {{ end }}\n  <script src=\"{{ $gridJs.RelPermalink }}\"></script>\n{{ end }}\n\n{{ $mainJs := resources.Get \"js/main.js\" }}\n{{ if hugo.IsProduction }}\n  {{ $mainJs = $mainJs | minify }}\n{{ end }}\n<script src=\"{{ $mainJs.RelPermalink }}\"></script>\n"
  },
  {
    "path": "layouts/partials/share.html",
    "content": "<div class=\"flex items-center gap-2\">\n  <!-- slot: post-share-left.html -->\n  {{ if fileExists \"layouts/partials/post-share-left.html\" }}\n    {{ partial \"post-share-left.html\" . }}\n  {{ end }}\n\n  {{ $shares := slice \"x\" \"facebook\" \"whatsapp\" }}\n  {{ $shareTitles := dict\n    \"x\" \"X\"\n    \"facebook\" \"Facebook\"\n    \"whatsapp\" \"WhatsApp\"\n  }}\n  {{ $shareLinks := dict\n    \"x\" (print \"https://x.com/intent/post?text=\" .Title \"&url=\" .Permalink)\n    \"facebook\" (print \"https://facebook.com/sharer/sharer.php?u=\" .Permalink)\n    \"whatsapp\" (print \"https://wa.me/?text=\" .Title \" \" .Permalink)\n  }}\n  {{ if site.Params.reorderShares }}\n    {{ $shares = site.Params.reorderShares }}\n  {{ end }}\n  {{ range $shares }}\n    <a class=\"group inline-flex items-center p-2 rounded-full cursor-pointer hover:bg-primary\"\n      href=\"{{ index $shareLinks . }}\" target=\"_blank\" rel=\"noopener noreferrer\"\n      title=\"Share on {{ index $shareTitles . }}\">\n      <ion-icon class=\"group-hover:text-primary-content\" name=\"logo-{{ . }}\"></ion-icon>\n    </a>\n  {{ end }}\n\n  <!-- slot: post-share-right.html -->\n  {{ if fileExists \"layouts/partials/post-share-right.html\" }}\n    {{ partial \"post-share-right.html\" . }}\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/partials/socials.html",
    "content": "<ul class=\"menu menu-horizontal flex-wrap w-full px-0 [&_ion-icon]:text-lg\">\n  {{ if site.Params.email }}\n  <li>\n    <a href=\"mailto:{{ site.Params.email }}\" title=\"Email\">\n      <ion-icon name=\"mail\"></ion-icon>\n    </a>\n  </li>\n  {{ end }}\n\n  {{ range hugo.Data.socials.socials }}\n  <li>\n    <a href=\"{{ .href }}\" target=\"{{ .target }}\" title=\"{{ .title }}\">\n      <ion-icon name=\"{{ .icon }}\"></ion-icon>\n    </a>\n  </li>\n  {{ end }}\n</ul>\n"
  },
  {
    "path": "layouts/partials/zen-back.html",
    "content": "<div class=\"max-w-[65ch] mt-8 mx-auto px-4\">\n  {{ with site.GetPage \"/about\" }}\n  {{ $aboutPages := .Resources.ByType \"page\" }}\n  {{ range (sort $aboutPages \"Date\" \"asc\") }}\n  <div>\n    <div class=\"mb-4 text-lg font-medium\">{{ .Title }}</div>\n\n    <div class=\"prose dark:prose-invert\">\n      {{ .Content | emojify }}\n    </div>\n  </div>\n  <div class=\"divider divider-vertical\"></div>\n  {{ end }}\n  {{ end }}\n\n  {{ if (fileExists \"data/socials.toml\") }}\n  {{ if and site.Config.Services.Disqus.Shortname .IsHome }}\n  <div>\n  {{ else }}\n  <div class=\"pb-4\">\n  {{ end }}\n    <div class=\"mb-4 text-lg font-medium\">{{ T \"socialLinks\" }}</div>\n\n    {{ partialCached \"socials.html\" . }}\n  </div>\n  {{ end }}\n\n  {{ if and site.Config.Services.Disqus.Shortname .IsHome }}\n  <div class=\"divider divider-vertical\"></div>\n  <div class=\"pb-4\">\n    {{ partial \"disqus.html\" (dict \"Context\" . \"Identifier\" \"/\") }}\n  </div>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "layouts/section/posts.html",
    "content": "{{ define \"title\" }}\n{{- .Title -}}\n{{ end }}\n\n{{ define \"main\"}}\n\n<div class=\"mt-8 lg:mt-12 px-4\">\n  <div class=\"mx-auto prose dark:prose-invert\">\n    <h1 class=\"text-3xl\">\n      {{ default (T \"archives\") .Title }}\n    </h1>\n    {{ if .Content }}\n    <p class=\"text-sm\">{{ .Content }}</p>\n    {{ end }}\n  </div>\n\n  <div class=\"max-w-[65ch] mx-auto mt-8 lg:mt-12\">\n    <ul class=\"timeline timeline-vertical\">\n      {{ $groupLayout := default \"2006\" .Params.groupLayout }}\n      {{ range .Pages.GroupByDate $groupLayout }}\n      <li class=\"[--timeline-col-start:64px]\">\n        <hr class=\"dark:bg-base-content\" />\n        <div class=\"timeline-start justify-self-start!\">\n          <div class=\"text-lg font-semibold\">{{ .Key }}</div>\n        </div>\n        <div class=\"timeline-middle flex items-center mx-8 my-2\">\n          <ion-icon name=\"time\"></ion-icon>\n        </div>\n        <div class=\"timeline-end timeline-box dark:border-base-content/60 prose dark:prose-invert my-8 text-sm\">\n          <ul>\n            {{ range .Pages }}\n            <li>\n              <a href=\"{{ .RelPermalink }}\">{{ .Title }}</a>\n            </li>\n            {{ end }}\n          </ul>\n        </div>\n        <hr class=\"dark:bg-base-content\" />\n      </li>\n      {{ end }}\n    </ul>\n  </div>\n</div>\n{{ end }}\n"
  },
  {
    "path": "layouts/section/search.html",
    "content": "{{ define \"title\" }}\n{{- T \"search\" -}}\n{{ end }}\n\n{{ define \"main\" }}\n\n{{ if site.Params.zenMode }}\n<div class=\"max-w-[65ch] mt-8 lg:mt-12 mx-auto px-4\"\n{{ else }}\n<div class=\"mt-8 lg:mt-12 px-4\"\n{{ end }}\nx-data=\"{\n  search: '',\n  get posts() { return this.search !== '' ? window.fuse.search(this.search) : [] },\n}\">\n  <label for=\"search\" class=\"input w-full\">\n    <input id=\"search\" name=\"search\" type=\"text\" class=\"grow\" placeholder=\"{{ T \"search\" }}\" x-model.debounce=\"search\" />\n    <ion-icon name=\"search\"></ion-icon>\n  </label>\n\n  <div class=\"mt-8 space-y-4\">\n  <template x-for=\"post in posts\">\n    <a class=\"card bg-base-100 hover:bg-base-content/10 cursor-pointer border border-base-content/30\" :href=\"post.item.url\">\n      <div class=\"card-body\">\n        <h2 class=\"card-title\" x-text=\"post.item.title\"></h2>\n\n        <div x-html=\"post.item.description\"></div>\n\n        <div class=\"card-actions justify-between items-center mt-4\">\n          <div class=\"flex items-center\">\n            <template x-if=\"post.item.avatar\">\n              <div class=\"avatar mr-1\">\n                <div class=\"w-8 rounded-full\">\n                  <img class=\"my-0\" :src=\"post.item.avatar\" :alt=\"post.item.author\" />\n                </div>\n              </div>\n            </template>\n            <template x-if=\"!post.item.avatar\">\n              <span>@</span>\n            </template>\n\n            <template x-if=\"post.item.author\">\n              <span x-text=\"post.item.author\"></span>\n            </template>\n            <template x-if=\"!post.item.author\">\n              <span>{{ site.Params.author }}</span>\n            </template>\n            </span>\n          </div>\n\n          <div class=\"inline-flex items-center\">\n            <ion-icon name=\"time\" class=\"mr-1\"></ion-icon>\n            <span><span x-text=\"post.item.readingTime\"></span>{{ T \"minuteRead\" .ReadingTime }}</span>\n          </div>\n        </div>\n      </div>\n    </a>\n  </template>\n  </div>\n</div>\n\n{{ end }}\n\n{{ define \"js\" }}\n\n{{ $data := slice }}\n{{ range (where site.RegularPages \"Type\" \"posts\") }}\n{{ $data = $data | append (dict \"title\" .Title \"url\" .RelPermalink \"author\" .Params.author \"avatar\" .Params.avatar \"categories\" .Params.categories \"tags\" .Params.tags \"description\" (or .Description (.Summary | emojify | safeHTML)) \"readingTime\" .ReadingTime) }}\n{{ end }}\n\n<script src=\"https://cdn.jsdelivr.net/npm/fuse.js@7.0.0/dist/fuse.min.js\" integrity=\"sha256-42IbU8t3tOwwbexB7ZVRHm3YDRf65aBPPjRtIUufj5I=\" crossorigin=\"anonymous\"></script>\n<script>\n  var fuseData = {{ $data }};\n  var fuseOptions = {\n    keys: [\n      \"title\",\n    ]\n  };\n\n  var fuse = new Fuse(fuseData, fuseOptions);\n</script>\n\n{{ end }}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"hugo-theme-dream\",\n  \"version\": \"3.0.0\",\n  \"description\": \"A Hugo theme named Dream.\",\n  \"repository\": \"https://github.com/g1eny0ung/hugo-theme-dream.git\",\n  \"author\": \"Yue Yang <g1enyy0ung@gmail.com> (https://g1en.site)\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"scripts\": {\n    \"css\": \"tailwindcss -i ./src/input.css -o ./assets/css/output.css\",\n    \"js\": \"babel src --out-dir assets --presets=@babel/preset-env --no-comments\",\n    \"build\": \"npm run css && npm run js\",\n    \"watch\": \"conc \\\"npm:css -- -w\\\" \\\"npm:js -- -w\\\"\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.28.3\",\n    \"@babel/core\": \"^7.28.4\",\n    \"@babel/preset-env\": \"^7.28.3\",\n    \"@tailwindcss/cli\": \"^4.1.18\",\n    \"@tailwindcss/typography\": \"^0.5.19\",\n    \"concurrently\": \"^9.2.1\",\n    \"daisyui\": \"^5.5.14\",\n    \"tailwindcss\": \"^4.1.18\"\n  }\n}\n"
  },
  {
    "path": "src/input.css",
    "content": "@import 'tailwindcss' source(none);\n\n@source \"input.css\";\n@source \"../layouts\";\n\n@plugin '@tailwindcss/typography';\n@plugin \"daisyui\" {\n  themes: emerald --default, forest --prefersdark;\n}\n\n@custom-variant dark (&:where(.dark, .dark *));\n\n@config '../tailwind.config.js';\n\nhtml {\n  scroll-behavior: smooth;\n}\n\n#disqus_thread iframe[src*='ads-iframe'] {\n  display: none;\n}\n\n#dream-global-bg {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background-position: center;\n  background-size: cover;\n  z-index: -1;\n}\n\n.flip-container {\n  width: 100vw;\n  /* The height of navbar is 112px (80px + 2rem). */\n  height: calc(100vh - 80px - 2rem);\n  max-width: 100%;\n  perspective: 1000px;\n\n  &.flip-it {\n    .flipper {\n      transform: rotateY(180deg);\n    }\n\n    .front {\n      overflow: hidden;\n    }\n\n    .back {\n      transform: translateX(0) rotateY(180deg);\n    }\n  }\n\n  .flipper {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    transform-style: preserve-3d;\n    transition: transform 0.75s;\n  }\n\n  .front,\n  .back {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    backface-visibility: hidden;\n    transition: transform 0.75s;\n  }\n\n  .front {\n    transform: rotateY(0deg);\n  }\n\n  .back {\n    /* Hack: set translateX to -25% to make the back page not overlap the TOC. */\n    transform: translateX(-25%) rotateY(180deg);\n  }\n}\n\n#TableOfContents {\n  @apply sticky top-24;\n\n  /* top-24 + 1rem */\n  max-height: calc(100vh - 7rem);\n  overflow-y: auto;\n}\n\n@supports (-moz-appearance: none) {\n  #TableOfContents {\n    position: initial;\n  }\n}\n\n#TableOfContents ul {\n  @apply menu menu-sm;\n}\n\n.dream-alert {\n  > .heading {\n    @apply flex items-center gap-1 text-sm font-medium;\n  }\n\n  ion-icon {\n    font-size: 1rem;\n  }\n\n  &.note {\n    @apply border-s-blue-600 dark:border-s-blue-500;\n\n    .heading {\n      @apply text-blue-600 dark:text-blue-500;\n    }\n  }\n\n  &.tip {\n    @apply border-s-green-600 dark:border-s-green-500;\n\n    .heading {\n      @apply text-green-600 dark:text-green-500;\n    }\n  }\n\n  &.important {\n    @apply border-s-purple-600 dark:border-s-purple-500;\n\n    .heading {\n      @apply text-purple-600 dark:text-purple-500;\n    }\n  }\n\n  &.warning {\n    @apply border-s-yellow-600 dark:border-s-yellow-500;\n\n    .heading {\n      @apply text-yellow-600 dark:text-yellow-500;\n    }\n  }\n\n  &.caution {\n    @apply border-s-red-600 dark:border-s-red-500;\n\n    .heading {\n      @apply text-red-600 dark:text-red-500;\n    }\n  }\n}\n"
  },
  {
    "path": "src/js/grid.js",
    "content": "function initGrid() {\n  document.querySelectorAll('.dream-grid').forEach((grid) => {\n    const msnry = new Masonry(grid, {\n      itemSelector: '.dream-column',\n    })\n\n    if (grid.classList.contains('dream-grid-about')) {\n      // Export Masonry instance to global scope for about page,\n      // currently used for resizing the grid after Disqus comments are loaded.\n      window.aboutMasonry = msnry\n    }\n\n    imagesLoaded(grid, () => {\n      grid.style.opacity = 1\n      msnry.layout()\n    })\n  })\n}\n\ninitGrid()\n"
  },
  {
    "path": "src/js/main.js",
    "content": "document.addEventListener('alpine:init', () => {\n  Alpine.store('darkMode', {\n    init() {\n      const isDark = window.localStorage.getItem('hugo-theme-dream-is-dark')\n\n      if (isDark) {\n        this.on = isDark\n      } else {\n        this.mql.addEventListener('change', (event) => {\n          this.on = event.matches ? 'y' : 'n'\n        })\n\n        this.on = 'auto'\n      }\n\n      setTimeout(() => {\n        this.setThemeForUtterances()\n      }, 6000) // Set a bigger timeout to make sure the utterances iframe is loaded.\n    },\n\n    mql: window.matchMedia('(prefers-color-scheme: dark)'),\n    on: 'n',\n\n    isDark() {\n      return this.on === 'auto' ? this.mql.matches : this.on === 'y'\n    },\n    theme() {\n      return this.isDark() ? window.darkTheme : window.lightTheme\n    },\n\n    iconMap: {\n      n: 'sunny',\n      y: 'moon',\n      auto: 'desktop',\n    },\n    icon() {\n      return this.iconMap[this.on]\n    },\n\n    toggle(status) {\n      this.on = status\n\n      if (status === 'auto') {\n        window.localStorage.removeItem('hugo-theme-dream-is-dark')\n      } else {\n        window.localStorage.setItem('hugo-theme-dream-is-dark', status)\n      }\n\n      this.setThemeForUtterances()\n      this.changeSyntaxHighlightingTheme()\n    },\n\n    changeSyntaxHighlightingTheme() {\n      if (document.querySelector('#dream-single-post-main')) {\n        const customSyntaxHighlightingUrl = this.isDark()\n          ? window.customSyntaxHighlighting.dark\n          : window.customSyntaxHighlighting.light\n\n        document\n          .querySelector('link[data-custom-syntax-highlighting]')\n          .setAttribute('href', customSyntaxHighlightingUrl)\n      }\n    },\n\n    setThemeForUtterances() {\n      const utterances = document.querySelector('iframe.utterances-frame')\n\n      if (utterances) {\n        utterances.contentWindow.postMessage(\n          {\n            type: 'set-theme',\n            theme: this.isDark() ? 'github-dark' : 'github-light',\n          },\n          'https://utteranc.es'\n        )\n      }\n    },\n  })\n})\n"
  },
  {
    "path": "src/js/toc.js",
    "content": "function tocHighlighter() {\n  return {\n    headings: [],\n    links: [],\n    debouncedScroll: null,\n\n    init() {\n      const toc = document.querySelector('#TableOfContents')\n      if (!toc || window.getComputedStyle(toc.parentElement).display === 'none') {\n        return\n      }\n\n      this.links = [...toc.querySelectorAll('a')]\n      this.headings = this.links\n        .map((link) => document.getElementById(link.getAttribute('href')?.replace('#', '')))\n        .filter(Boolean)\n\n      this.debouncedScroll = this.debounce(this.onScroll.bind(this), 300)\n\n      this.debouncedScroll()\n    },\n\n    onScroll() {\n      let closest = null\n      let minOffset = Infinity\n\n      this.headings.forEach((el, index) => {\n        const rect = el.getBoundingClientRect()\n        const offset = Math.abs(rect.top)\n\n        if (rect.top < window.innerHeight && offset < minOffset) {\n          minOffset = offset\n          closest = index\n        }\n      })\n\n      if (closest !== null && this.links[closest]) {\n        this.setActive(this.links[closest])\n      }\n    },\n\n    setActive(activeLink) {\n      this.links.forEach((link) => link.classList.remove('menu-active'))\n      activeLink.classList.add('menu-active')\n    },\n\n    debounce(fn, delay) {\n      let timeout\n      return function (...args) {\n        clearTimeout(timeout)\n        timeout = setTimeout(() => fn.apply(this, args), delay)\n      }\n    },\n  }\n}\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  theme: {\n    container: {\n      center: true,\n    },\n    extend: {\n      typography: {\n        DEFAULT: {\n          css: {\n            blockquote: {\n              color: 'var(--tw-prose-body)',\n              fontWeight: 'normal',\n              fontStyle: 'normal',\n            },\n            p: {\n              wordBreak: 'break-word',\n            },\n            pre: null,\n            'pre code': null,\n            'pre code::before': null,\n            'pre code::after': null,\n            code: null,\n            'code::before': null,\n            'code::after': null,\n          },\n        },\n        quoteless: {\n          css: {\n            'blockquote p:first-of-type::before': { content: 'none' },\n            'blockquote p:first-of-type::after': { content: 'none' },\n          },\n        },\n      },\n    },\n  }\n}\n"
  },
  {
    "path": "theme.toml",
    "content": "name = \"Dream\"\nlicense = \"MIT\"\nlicenselink = \"https://github.com/g1eny0ung/hugo-theme-dream/blob/master/LICENSE\"\ndescription = \"🌱 A Hugo theme named Dream\"\n\nhomepage = \"https://hugo-theme-dream.g1en.site\"\n\ndemoSite = \"https://g1en.site\"\n\ntags = [\"blog\", \"responsive\", \"light\", \"dark\", \"personal\", \"creative\"]\nfeatures = [\n  \"Creative\",\n  \"Masonry Layout\",\n  \"Flippable About Page\",\n  \"Zen Mode\",\n  \"Google Analytics\",\n  \"Disqus\",\n  \"Utterances\",\n  \"Search\",\n  \"Syntax Highlighting\",\n  \"Decap CMS\",\n  \"Customizable\",\n]\n\n[author]\nname = \"Yue Yang\"\nhomepage = \"https://github.com/g1eny0ung\"\n"
  }
]