From 894bd561ffa4a6fe13986206d55aaa076ace40cd Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Mon, 12 Jan 2026 13:33:53 -0500 Subject: [PATCH] feat: Begins user profile, adds database model, need to add views / forms. --- Public/css/main.css | 2 +- Public/css/output.css | 1217 ++++++- Sources/DatabaseClient/Interface.swift | 12 +- Sources/DatabaseClient/UserProfile.swift | 175 + Sources/DatabaseClient/Users.swift | 2 + Sources/ManualDCore/Theme.swift | 30 + Sources/ManualDCore/User.swift | 1 + Sources/ManualDCore/UserProfile.swift | 70 + Sources/Styleguide/SVG.swift | 5 + Sources/ViewController/Live.swift | 113 +- Sources/ViewController/Views/MainPage.swift | 8 +- Sources/ViewController/Views/Navbar.swift | 30 +- .../Views/Project/ProjectView.swift | 7 - .../Views/Rooms/RoomsView.swift | 3 +- input.css | 8 - output.css | 3167 ----------------- 16 files changed, 1439 insertions(+), 3411 deletions(-) create mode 100644 Sources/DatabaseClient/UserProfile.swift create mode 100644 Sources/ManualDCore/Theme.swift create mode 100644 Sources/ManualDCore/UserProfile.swift delete mode 100644 input.css delete mode 100644 output.css diff --git a/Public/css/main.css b/Public/css/main.css index e0ce378..a86c959 100644 --- a/Public/css/main.css +++ b/Public/css/main.css @@ -1,5 +1,5 @@ @import "tailwindcss"; @plugin "daisyui" { - themes: light --default, dark --prefersdark, dracula; + themes: all; } diff --git a/Public/css/output.css b/Public/css/output.css index 82f9d63..5f9f61f 100644 --- a/Public/css/output.css +++ b/Public/css/output.css @@ -10,14 +10,11 @@ --color-red-500: oklch(63.7% 0.237 25.331); --color-red-600: oklch(57.7% 0.245 27.325); --color-green-400: oklch(79.2% 0.209 151.711); - --color-blue-400: oklch(70.7% 0.165 254.624); --color-indigo-600: oklch(51.1% 0.262 276.966); --color-slate-300: oklch(86.9% 0.022 252.894); --color-slate-900: oklch(20.8% 0.042 265.755); --color-gray-200: oklch(92.8% 0.006 264.531); - --color-gray-300: oklch(87.2% 0.01 258.338); --color-gray-400: oklch(70.7% 0.022 261.325); - --color-gray-900: oklch(21% 0.034 264.665); --color-black: #000; --color-white: #fff; --spacing: 0.25rem; @@ -2209,9 +2206,6 @@ .collapse { visibility: collapse; } - .invisible { - visibility: hidden; - } .visible { visibility: visible; } @@ -4677,6 +4671,9 @@ } } } + .z-1 { + z-index: 1; + } .tab-content { @layer daisyui.l1.l2.l3 { order: var(--tabcontent-order); @@ -5366,15 +5363,9 @@ } } } - .my-1 { - margin-block: calc(var(--spacing) * 1); - } .my-1\.5 { margin-block: calc(var(--spacing) * 1.5); } - .my-2 { - margin-block: calc(var(--spacing) * 2); - } .my-auto { margin-block: auto; } @@ -5581,18 +5572,6 @@ border-width: var(--border, 1px) 0 var(--border, 1px) var(--border, 1px); } } - .ms-4 { - margin-inline-start: calc(var(--spacing) * 4); - } - .ms-6 { - margin-inline-start: calc(var(--spacing) * 6); - } - .ms-8 { - margin-inline-start: calc(var(--spacing) * 8); - } - .me-4 { - margin-inline-end: calc(var(--spacing) * 4); - } .modal-action { @layer daisyui.l1.l2.l3 { margin-top: calc(0.25rem * 6); @@ -6439,15 +6418,9 @@ } } } - .h-40 { - height: calc(var(--spacing) * 40); - } .h-\[1em\] { height: 1em; } - .h-auto { - height: auto; - } .h-fit { height: fit-content; } @@ -6588,18 +6561,6 @@ width: calc(var(--size-selector, 0.25rem) * 4); } } - .w-24 { - width: calc(var(--spacing) * 24); - } - .w-40 { - width: calc(var(--spacing) * 40); - } - .w-64 { - width: calc(var(--spacing) * 64); - } - .w-auto { - width: auto; - } .w-fit { width: fit-content; } @@ -6835,9 +6796,6 @@ .justify-end { justify-content: flex-end; } - .justify-start { - justify-content: flex-start; - } .gap-1 { gap: calc(var(--spacing) * 1); } @@ -6861,13 +6819,6 @@ margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); } } - .space-x-0 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 0) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-x-reverse))); - } - } .space-x-2 { :where(& > :not(:last-child)) { --tw-space-x-reverse: 0; @@ -6992,9 +6943,6 @@ .rounded-md { border-radius: var(--radius-md); } - .rounded-none { - border-radius: 0; - } .rounded-selector { border-radius: var(--radius-selector); } @@ -7290,12 +7238,6 @@ border-color: currentColor; } } - .border-base-100 { - border-color: var(--color-base-100); - } - .border-base-200 { - border-color: var(--color-base-200); - } .border-gray-200 { border-color: var(--color-gray-200); } @@ -7465,12 +7407,6 @@ .bg-base-300 { background-color: var(--color-base-300); } - .bg-neutral { - background-color: var(--color-neutral); - } - .bg-primary { - background-color: var(--color-primary); - } .bg-red-500 { background-color: var(--color-red-500); } @@ -7689,12 +7625,6 @@ .mask-repeat { mask-repeat: repeat; } - .object-contain { - object-fit: contain; - } - .object-scale-down { - object-fit: scale-down; - } .checkbox-lg { @layer daisyui.l1.l2 { padding: 0.3125rem; @@ -7888,18 +7818,12 @@ } } } - .px-2 { - padding-inline: calc(var(--spacing) * 2); - } .px-3 { padding-inline: calc(var(--spacing) * 3); } .px-4 { padding-inline: calc(var(--spacing) * 4); } - .py-1 { - padding-block: calc(var(--spacing) * 1); - } .py-1\.5 { padding-block: calc(var(--spacing) * 1.5); } @@ -7912,9 +7836,6 @@ .ps-2 { padding-inline-start: calc(var(--spacing) * 2); } - .ps-8 { - padding-inline-start: calc(var(--spacing) * 8); - } .file-input-xl { @layer daisyui.l1.l2 { padding-inline-end: calc(0.25rem * 6); @@ -7929,9 +7850,6 @@ .pe-2 { padding-inline-end: calc(var(--spacing) * 2); } - .pe-4 { - padding-inline-end: calc(var(--spacing) * 4); - } .pt-6 { padding-top: calc(var(--spacing) * 6); } @@ -8565,9 +8483,6 @@ .text-error { color: var(--color-error); } - .text-gray-200 { - color: var(--color-gray-200); - } .text-gray-400 { color: var(--color-gray-400); } @@ -9529,11 +9444,6 @@ color: var(--color-white); } } - .md\:grid-cols-1 { - @media (width >= 48rem) { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - } .md\:grid-cols-2 { @media (width >= 48rem) { grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -9592,66 +9502,16 @@ } } } - .lg\:visible { - @media (width >= 64rem) { - visibility: visible; - } - } - .lg\:block { - @media (width >= 64rem) { - display: block; - } - } - .lg\:inline-block { - @media (width >= 64rem) { - display: inline-block; - } - } - .lg\:table-cell { - @media (width >= 64rem) { - display: table-cell; - } - } - .lg\:grid-cols-2 { - @media (width >= 64rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } .lg\:grid-cols-3 { @media (width >= 64rem) { grid-template-columns: repeat(3, minmax(0, 1fr)); } } - .xl\:visible { - @media (width >= 80rem) { - visibility: visible; - } - } - .xl\:table-cell { - @media (width >= 80rem) { - display: table-cell; - } - } - .xl\:grid-cols-2 { - @media (width >= 80rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .xl\:grid-cols-3 { - @media (width >= 80rem) { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } .\32 xl\:table-cell { @media (width >= 96rem) { display: table-cell; } } - .dark\:text-white { - @media (prefers-color-scheme: dark) { - color: var(--color-white); - } - } .is-drawer-close\:tooltip { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { @layer daisyui.l1.l2.l3 { @@ -9761,11 +9621,6 @@ grid-template-columns: repeat(1, minmax(0, 1fr)); } } - .is-drawer-close\:items-center { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - align-items: center; - } - } .is-drawer-close\:justify-center { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { justify-content: center; @@ -9810,16 +9665,6 @@ max-width: 300px; } } - .is-drawer-open\:min-w-\[340px\] { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - min-width: 340px; - } - } - .is-drawer-open\:justify-between { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - justify-content: space-between; - } - } .is-drawer-open\:justify-start { &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { justify-content: flex-start; @@ -9969,6 +9814,600 @@ --noise: 0; } } +@layer base { + :root:has(input.theme-controller[value=cupcake]:checked),[data-theme=cupcake] { + color-scheme: light; + --color-base-100: oklch(97.788% 0.004 56.375); + --color-base-200: oklch(93.982% 0.007 61.449); + --color-base-300: oklch(91.586% 0.006 53.44); + --color-base-content: oklch(23.574% 0.066 313.189); + --color-primary: oklch(85% 0.138 181.071); + --color-primary-content: oklch(43% 0.078 188.216); + --color-secondary: oklch(89% 0.061 343.231); + --color-secondary-content: oklch(45% 0.187 3.815); + --color-accent: oklch(90% 0.076 70.697); + --color-accent-content: oklch(47% 0.157 37.304); + --color-neutral: oklch(27% 0.006 286.033); + --color-neutral-content: oklch(92% 0.004 286.32); + --color-info: oklch(68% 0.169 237.323); + --color-info-content: oklch(29% 0.066 243.157); + --color-success: oklch(69% 0.17 162.48); + --color-success-content: oklch(26% 0.051 172.552); + --color-warning: oklch(79% 0.184 86.047); + --color-warning-content: oklch(28% 0.066 53.813); + --color-error: oklch(64% 0.246 16.439); + --color-error-content: oklch(27% 0.105 12.094); + --radius-selector: 1rem; + --radius-field: 2rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 2px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=bumblebee]:checked),[data-theme=bumblebee] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(97% 0 0); + --color-base-300: oklch(92% 0 0); + --color-base-content: oklch(20% 0 0); + --color-primary: oklch(85% 0.199 91.936); + --color-primary-content: oklch(42% 0.095 57.708); + --color-secondary: oklch(75% 0.183 55.934); + --color-secondary-content: oklch(40% 0.123 38.172); + --color-accent: oklch(0% 0 0); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(37% 0.01 67.558); + --color-neutral-content: oklch(92% 0.003 48.717); + --color-info: oklch(74% 0.16 232.661); + --color-info-content: oklch(39% 0.09 240.876); + --color-success: oklch(76% 0.177 163.223); + --color-success-content: oklch(37% 0.077 168.94); + --color-warning: oklch(82% 0.189 84.429); + --color-warning-content: oklch(41% 0.112 45.904); + --color-error: oklch(70% 0.191 22.216); + --color-error-content: oklch(39% 0.141 25.723); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(93% 0 0); + --color-base-300: oklch(86% 0 0); + --color-base-content: oklch(35.519% 0.032 262.988); + --color-primary: oklch(76.662% 0.135 153.45); + --color-primary-content: oklch(33.387% 0.04 162.24); + --color-secondary: oklch(61.302% 0.202 261.294); + --color-secondary-content: oklch(100% 0 0); + --color-accent: oklch(72.772% 0.149 33.2); + --color-accent-content: oklch(0% 0 0); + --color-neutral: oklch(35.519% 0.032 262.988); + --color-neutral-content: oklch(98.462% 0.001 247.838); + --color-info: oklch(72.06% 0.191 231.6); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(64.8% 0.15 160); + --color-success-content: oklch(0% 0 0); + --color-warning: oklch(84.71% 0.199 83.87); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(71.76% 0.221 22.18); + --color-error-content: oklch(0% 0 0); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=corporate]:checked),[data-theme=corporate] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(93% 0 0); + --color-base-300: oklch(86% 0 0); + --color-base-content: oklch(22.389% 0.031 278.072); + --color-primary: oklch(58% 0.158 241.966); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(55% 0.046 257.417); + --color-secondary-content: oklch(100% 0 0); + --color-accent: oklch(60% 0.118 184.704); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(0% 0 0); + --color-neutral-content: oklch(100% 0 0); + --color-info: oklch(60% 0.126 221.723); + --color-info-content: oklch(100% 0 0); + --color-success: oklch(62% 0.194 149.214); + --color-success-content: oklch(100% 0 0); + --color-warning: oklch(85% 0.199 91.936); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(70% 0.191 22.216); + --color-error-content: oklch(0% 0 0); + --radius-selector: 0.25rem; + --radius-field: 0.25rem; + --radius-box: 0.25rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=synthwave]:checked),[data-theme=synthwave] { + color-scheme: dark; + --color-base-100: oklch(15% 0.09 281.288); + --color-base-200: oklch(20% 0.09 281.288); + --color-base-300: oklch(25% 0.09 281.288); + --color-base-content: oklch(78% 0.115 274.713); + --color-primary: oklch(71% 0.202 349.761); + --color-primary-content: oklch(28% 0.109 3.907); + --color-secondary: oklch(82% 0.111 230.318); + --color-secondary-content: oklch(29% 0.066 243.157); + --color-accent: oklch(75% 0.183 55.934); + --color-accent-content: oklch(26% 0.079 36.259); + --color-neutral: oklch(45% 0.24 277.023); + --color-neutral-content: oklch(87% 0.065 274.039); + --color-info: oklch(74% 0.16 232.661); + --color-info-content: oklch(29% 0.066 243.157); + --color-success: oklch(77% 0.152 181.912); + --color-success-content: oklch(27% 0.046 192.524); + --color-warning: oklch(90% 0.182 98.111); + --color-warning-content: oklch(42% 0.095 57.708); + --color-error: oklch(73.7% 0.121 32.639); + --color-error-content: oklch(23.501% 0.096 290.329); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=retro]:checked),[data-theme=retro] { + color-scheme: light; + --color-base-100: oklch(91.637% 0.034 90.515); + --color-base-200: oklch(88.272% 0.049 91.774); + --color-base-300: oklch(84.133% 0.065 90.856); + --color-base-content: oklch(41% 0.112 45.904); + --color-primary: oklch(80% 0.114 19.571); + --color-primary-content: oklch(39% 0.141 25.723); + --color-secondary: oklch(92% 0.084 155.995); + --color-secondary-content: oklch(44% 0.119 151.328); + --color-accent: oklch(68% 0.162 75.834); + --color-accent-content: oklch(41% 0.112 45.904); + --color-neutral: oklch(44% 0.011 73.639); + --color-neutral-content: oklch(86% 0.005 56.366); + --color-info: oklch(58% 0.158 241.966); + --color-info-content: oklch(96% 0.059 95.617); + --color-success: oklch(51% 0.096 186.391); + --color-success-content: oklch(96% 0.059 95.617); + --color-warning: oklch(64% 0.222 41.116); + --color-warning-content: oklch(96% 0.059 95.617); + --color-error: oklch(70% 0.191 22.216); + --color-error-content: oklch(40% 0.123 38.172); + --radius-selector: 0.25rem; + --radius-field: 0.25rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=cyberpunk]:checked),[data-theme=cyberpunk] { + color-scheme: light; + --color-base-100: oklch(94.51% 0.179 104.32); + --color-base-200: oklch(91.51% 0.179 104.32); + --color-base-300: oklch(85.51% 0.179 104.32); + --color-base-content: oklch(0% 0 0); + --color-primary: oklch(74.22% 0.209 6.35); + --color-primary-content: oklch(14.844% 0.041 6.35); + --color-secondary: oklch(83.33% 0.184 204.72); + --color-secondary-content: oklch(16.666% 0.036 204.72); + --color-accent: oklch(71.86% 0.217 310.43); + --color-accent-content: oklch(14.372% 0.043 310.43); + --color-neutral: oklch(23.04% 0.065 269.31); + --color-neutral-content: oklch(94.51% 0.179 104.32); + --color-info: oklch(72.06% 0.191 231.6); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(64.8% 0.15 160); + --color-success-content: oklch(0% 0 0); + --color-warning: oklch(84.71% 0.199 83.87); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(71.76% 0.221 22.18); + --color-error-content: oklch(0% 0 0); + --radius-selector: 0rem; + --radius-field: 0rem; + --radius-box: 0rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=valentine]:checked),[data-theme=valentine] { + color-scheme: light; + --color-base-100: oklch(97% 0.014 343.198); + --color-base-200: oklch(94% 0.028 342.258); + --color-base-300: oklch(89% 0.061 343.231); + --color-base-content: oklch(52% 0.223 3.958); + --color-primary: oklch(65% 0.241 354.308); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(62% 0.265 303.9); + --color-secondary-content: oklch(97% 0.014 308.299); + --color-accent: oklch(82% 0.111 230.318); + --color-accent-content: oklch(39% 0.09 240.876); + --color-neutral: oklch(40% 0.153 2.432); + --color-neutral-content: oklch(89% 0.061 343.231); + --color-info: oklch(86% 0.127 207.078); + --color-info-content: oklch(44% 0.11 240.79); + --color-success: oklch(84% 0.143 164.978); + --color-success-content: oklch(43% 0.095 166.913); + --color-warning: oklch(75% 0.183 55.934); + --color-warning-content: oklch(26% 0.079 36.259); + --color-error: oklch(63% 0.237 25.331); + --color-error-content: oklch(97% 0.013 17.38); + --radius-selector: 1rem; + --radius-field: 2rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=halloween]:checked),[data-theme=halloween] { + color-scheme: dark; + --color-base-100: oklch(21% 0.006 56.043); + --color-base-200: oklch(14% 0.004 49.25); + --color-base-300: oklch(0% 0 0); + --color-base-content: oklch(84.955% 0 0); + --color-primary: oklch(77.48% 0.204 60.62); + --color-primary-content: oklch(19.693% 0.004 196.779); + --color-secondary: oklch(45.98% 0.248 305.03); + --color-secondary-content: oklch(89.196% 0.049 305.03); + --color-accent: oklch(64.8% 0.223 136.073); + --color-accent-content: oklch(0% 0 0); + --color-neutral: oklch(24.371% 0.046 65.681); + --color-neutral-content: oklch(84.874% 0.009 65.681); + --color-info: oklch(54.615% 0.215 262.88); + --color-info-content: oklch(90.923% 0.043 262.88); + --color-success: oklch(62.705% 0.169 149.213); + --color-success-content: oklch(12.541% 0.033 149.213); + --color-warning: oklch(66.584% 0.157 58.318); + --color-warning-content: oklch(13.316% 0.031 58.318); + --color-error: oklch(65.72% 0.199 27.33); + --color-error-content: oklch(13.144% 0.039 27.33); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=garden]:checked),[data-theme=garden] { + color-scheme: light; + --color-base-100: oklch(92.951% 0.002 17.197); + --color-base-200: oklch(86.445% 0.002 17.197); + --color-base-300: oklch(79.938% 0.001 17.197); + --color-base-content: oklch(16.961% 0.001 17.32); + --color-primary: oklch(62.45% 0.278 3.836); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(48.495% 0.11 355.095); + --color-secondary-content: oklch(89.699% 0.022 355.095); + --color-accent: oklch(56.273% 0.054 154.39); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(24.155% 0.049 89.07); + --color-neutral-content: oklch(92.951% 0.002 17.197); + --color-info: oklch(72.06% 0.191 231.6); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(64.8% 0.15 160); + --color-success-content: oklch(0% 0 0); + --color-warning: oklch(84.71% 0.199 83.87); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(71.76% 0.221 22.18); + --color-error-content: oklch(0% 0 0); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=forest]:checked),[data-theme=forest] { + color-scheme: dark; + --color-base-100: oklch(20.84% 0.008 17.911); + --color-base-200: oklch(18.522% 0.007 17.911); + --color-base-300: oklch(16.203% 0.007 17.911); + --color-base-content: oklch(83.768% 0.001 17.911); + --color-primary: oklch(68.628% 0.185 148.958); + --color-primary-content: oklch(0% 0 0); + --color-secondary: oklch(69.776% 0.135 168.327); + --color-secondary-content: oklch(13.955% 0.027 168.327); + --color-accent: oklch(70.628% 0.119 185.713); + --color-accent-content: oklch(14.125% 0.023 185.713); + --color-neutral: oklch(30.698% 0.039 171.364); + --color-neutral-content: oklch(86.139% 0.007 171.364); + --color-info: oklch(72.06% 0.191 231.6); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(64.8% 0.15 160); + --color-success-content: oklch(0% 0 0); + --color-warning: oklch(84.71% 0.199 83.87); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(71.76% 0.221 22.18); + --color-error-content: oklch(0% 0 0); + --radius-selector: 1rem; + --radius-field: 2rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=aqua]:checked),[data-theme=aqua] { + color-scheme: dark; + --color-base-100: oklch(37% 0.146 265.522); + --color-base-200: oklch(28% 0.091 267.935); + --color-base-300: oklch(22% 0.091 267.935); + --color-base-content: oklch(90% 0.058 230.902); + --color-primary: oklch(85.661% 0.144 198.645); + --color-primary-content: oklch(40.124% 0.068 197.603); + --color-secondary: oklch(60.682% 0.108 309.782); + --color-secondary-content: oklch(96% 0.016 293.756); + --color-accent: oklch(93.426% 0.102 94.555); + --color-accent-content: oklch(18.685% 0.02 94.555); + --color-neutral: oklch(27% 0.146 265.522); + --color-neutral-content: oklch(80% 0.146 265.522); + --color-info: oklch(54.615% 0.215 262.88); + --color-info-content: oklch(90.923% 0.043 262.88); + --color-success: oklch(62.705% 0.169 149.213); + --color-success-content: oklch(12.541% 0.033 149.213); + --color-warning: oklch(66.584% 0.157 58.318); + --color-warning-content: oklch(27% 0.077 45.635); + --color-error: oklch(73.95% 0.19 27.33); + --color-error-content: oklch(14.79% 0.038 27.33); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=lofi]:checked),[data-theme=lofi] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(97% 0 0); + --color-base-300: oklch(94% 0 0); + --color-base-content: oklch(0% 0 0); + --color-primary: oklch(15.906% 0 0); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(21.455% 0.001 17.278); + --color-secondary-content: oklch(100% 0 0); + --color-accent: oklch(26.861% 0 0); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(0% 0 0); + --color-neutral-content: oklch(100% 0 0); + --color-info: oklch(79.54% 0.103 205.9); + --color-info-content: oklch(15.908% 0.02 205.9); + --color-success: oklch(90.13% 0.153 164.14); + --color-success-content: oklch(18.026% 0.03 164.14); + --color-warning: oklch(88.37% 0.135 79.94); + --color-warning-content: oklch(17.674% 0.027 79.94); + --color-error: oklch(78.66% 0.15 28.47); + --color-error-content: oklch(15.732% 0.03 28.47); + --radius-selector: 2rem; + --radius-field: 0.25rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=pastel]:checked),[data-theme=pastel] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(98.462% 0.001 247.838); + --color-base-300: oklch(92.462% 0.001 247.838); + --color-base-content: oklch(20% 0 0); + --color-primary: oklch(90% 0.063 306.703); + --color-primary-content: oklch(49% 0.265 301.924); + --color-secondary: oklch(89% 0.058 10.001); + --color-secondary-content: oklch(51% 0.222 16.935); + --color-accent: oklch(90% 0.093 164.15); + --color-accent-content: oklch(50% 0.118 165.612); + --color-neutral: oklch(55% 0.046 257.417); + --color-neutral-content: oklch(92% 0.013 255.508); + --color-info: oklch(86% 0.127 207.078); + --color-info-content: oklch(52% 0.105 223.128); + --color-success: oklch(87% 0.15 154.449); + --color-success-content: oklch(52% 0.154 150.069); + --color-warning: oklch(83% 0.128 66.29); + --color-warning-content: oklch(55% 0.195 38.402); + --color-error: oklch(80% 0.114 19.571); + --color-error-content: oklch(50% 0.213 27.518); + --radius-selector: 1rem; + --radius-field: 2rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 2px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=fantasy]:checked),[data-theme=fantasy] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(93% 0 0); + --color-base-300: oklch(86% 0 0); + --color-base-content: oklch(27.807% 0.029 256.847); + --color-primary: oklch(37.45% 0.189 325.02); + --color-primary-content: oklch(87.49% 0.037 325.02); + --color-secondary: oklch(53.92% 0.162 241.36); + --color-secondary-content: oklch(90.784% 0.032 241.36); + --color-accent: oklch(75.98% 0.204 56.72); + --color-accent-content: oklch(15.196% 0.04 56.72); + --color-neutral: oklch(27.807% 0.029 256.847); + --color-neutral-content: oklch(85.561% 0.005 256.847); + --color-info: oklch(72.06% 0.191 231.6); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(64.8% 0.15 160); + --color-success-content: oklch(0% 0 0); + --color-warning: oklch(84.71% 0.199 83.87); + --color-warning-content: oklch(0% 0 0); + --color-error: oklch(71.76% 0.221 22.18); + --color-error-content: oklch(0% 0 0); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=wireframe]:checked),[data-theme=wireframe] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(97% 0 0); + --color-base-300: oklch(94% 0 0); + --color-base-content: oklch(20% 0 0); + --color-primary: oklch(87% 0 0); + --color-primary-content: oklch(26% 0 0); + --color-secondary: oklch(87% 0 0); + --color-secondary-content: oklch(26% 0 0); + --color-accent: oklch(87% 0 0); + --color-accent-content: oklch(26% 0 0); + --color-neutral: oklch(87% 0 0); + --color-neutral-content: oklch(26% 0 0); + --color-info: oklch(44% 0.11 240.79); + --color-info-content: oklch(90% 0.058 230.902); + --color-success: oklch(43% 0.095 166.913); + --color-success-content: oklch(90% 0.093 164.15); + --color-warning: oklch(47% 0.137 46.201); + --color-warning-content: oklch(92% 0.12 95.746); + --color-error: oklch(44% 0.177 26.899); + --color-error-content: oklch(88% 0.062 18.334); + --radius-selector: 0rem; + --radius-field: 0.25rem; + --radius-box: 0.25rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=black]:checked),[data-theme=black] { + color-scheme: dark; + --color-base-100: oklch(0% 0 0); + --color-base-200: oklch(19% 0 0); + --color-base-300: oklch(22% 0 0); + --color-base-content: oklch(87.609% 0 0); + --color-primary: oklch(35% 0 0); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(35% 0 0); + --color-secondary-content: oklch(100% 0 0); + --color-accent: oklch(35% 0 0); + --color-accent-content: oklch(100% 0 0); + --color-neutral: oklch(35% 0 0); + --color-neutral-content: oklch(100% 0 0); + --color-info: oklch(45.201% 0.313 264.052); + --color-info-content: oklch(89.04% 0.062 264.052); + --color-success: oklch(51.975% 0.176 142.495); + --color-success-content: oklch(90.395% 0.035 142.495); + --color-warning: oklch(96.798% 0.211 109.769); + --color-warning-content: oklch(19.359% 0.042 109.769); + --color-error: oklch(62.795% 0.257 29.233); + --color-error-content: oklch(12.559% 0.051 29.233); + --radius-selector: 0rem; + --radius-field: 0rem; + --radius-box: 0rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=luxury]:checked),[data-theme=luxury] { + color-scheme: dark; + --color-base-100: oklch(14.076% 0.004 285.822); + --color-base-200: oklch(20.219% 0.004 308.229); + --color-base-300: oklch(23.219% 0.004 308.229); + --color-base-content: oklch(75.687% 0.123 76.89); + --color-primary: oklch(100% 0 0); + --color-primary-content: oklch(20% 0 0); + --color-secondary: oklch(27.581% 0.064 261.069); + --color-secondary-content: oklch(85.516% 0.012 261.069); + --color-accent: oklch(36.674% 0.051 338.825); + --color-accent-content: oklch(87.334% 0.01 338.825); + --color-neutral: oklch(24.27% 0.057 59.825); + --color-neutral-content: oklch(93.203% 0.089 90.861); + --color-info: oklch(79.061% 0.121 237.133); + --color-info-content: oklch(15.812% 0.024 237.133); + --color-success: oklch(78.119% 0.192 132.154); + --color-success-content: oklch(15.623% 0.038 132.154); + --color-warning: oklch(86.127% 0.136 102.891); + --color-warning-content: oklch(17.225% 0.027 102.891); + --color-error: oklch(71.753% 0.176 22.568); + --color-error-content: oklch(14.35% 0.035 22.568); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} @layer base { :root:has(input.theme-controller[value=dracula]:checked),[data-theme=dracula] { color-scheme: dark; @@ -10002,6 +10441,468 @@ --noise: 0; } } +@layer base { + :root:has(input.theme-controller[value=cmyk]:checked),[data-theme=cmyk] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(95% 0 0); + --color-base-300: oklch(90% 0 0); + --color-base-content: oklch(20% 0 0); + --color-primary: oklch(71.772% 0.133 239.443); + --color-primary-content: oklch(14.354% 0.026 239.443); + --color-secondary: oklch(64.476% 0.202 359.339); + --color-secondary-content: oklch(12.895% 0.04 359.339); + --color-accent: oklch(94.228% 0.189 105.306); + --color-accent-content: oklch(18.845% 0.037 105.306); + --color-neutral: oklch(21.778% 0 0); + --color-neutral-content: oklch(84.355% 0 0); + --color-info: oklch(68.475% 0.094 217.284); + --color-info-content: oklch(13.695% 0.018 217.284); + --color-success: oklch(46.949% 0.162 321.406); + --color-success-content: oklch(89.389% 0.032 321.406); + --color-warning: oklch(71.236% 0.159 52.023); + --color-warning-content: oklch(14.247% 0.031 52.023); + --color-error: oklch(62.013% 0.208 28.717); + --color-error-content: oklch(12.402% 0.041 28.717); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=autumn]:checked),[data-theme=autumn] { + color-scheme: light; + --color-base-100: oklch(95.814% 0 0); + --color-base-200: oklch(89.107% 0 0); + --color-base-300: oklch(82.4% 0 0); + --color-base-content: oklch(19.162% 0 0); + --color-primary: oklch(40.723% 0.161 17.53); + --color-primary-content: oklch(88.144% 0.032 17.53); + --color-secondary: oklch(61.676% 0.169 23.865); + --color-secondary-content: oklch(12.335% 0.033 23.865); + --color-accent: oklch(73.425% 0.094 60.729); + --color-accent-content: oklch(14.685% 0.018 60.729); + --color-neutral: oklch(54.367% 0.037 51.902); + --color-neutral-content: oklch(90.873% 0.007 51.902); + --color-info: oklch(69.224% 0.097 207.284); + --color-info-content: oklch(13.844% 0.019 207.284); + --color-success: oklch(60.995% 0.08 174.616); + --color-success-content: oklch(12.199% 0.016 174.616); + --color-warning: oklch(70.081% 0.164 56.844); + --color-warning-content: oklch(14.016% 0.032 56.844); + --color-error: oklch(53.07% 0.241 24.16); + --color-error-content: oklch(90.614% 0.048 24.16); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=business]:checked),[data-theme=business] { + color-scheme: dark; + --color-base-100: oklch(24.353% 0 0); + --color-base-200: oklch(22.648% 0 0); + --color-base-300: oklch(20.944% 0 0); + --color-base-content: oklch(84.87% 0 0); + --color-primary: oklch(41.703% 0.099 251.473); + --color-primary-content: oklch(88.34% 0.019 251.473); + --color-secondary: oklch(64.092% 0.027 229.389); + --color-secondary-content: oklch(12.818% 0.005 229.389); + --color-accent: oklch(67.271% 0.167 35.791); + --color-accent-content: oklch(13.454% 0.033 35.791); + --color-neutral: oklch(27.441% 0.013 253.041); + --color-neutral-content: oklch(85.488% 0.002 253.041); + --color-info: oklch(62.616% 0.143 240.033); + --color-info-content: oklch(12.523% 0.028 240.033); + --color-success: oklch(70.226% 0.094 156.596); + --color-success-content: oklch(14.045% 0.018 156.596); + --color-warning: oklch(77.482% 0.115 81.519); + --color-warning-content: oklch(15.496% 0.023 81.519); + --color-error: oklch(51.61% 0.146 29.674); + --color-error-content: oklch(90.322% 0.029 29.674); + --radius-selector: 0rem; + --radius-field: 0.25rem; + --radius-box: 0.25rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=acid]:checked),[data-theme=acid] { + color-scheme: light; + --color-base-100: oklch(98% 0 0); + --color-base-200: oklch(95% 0 0); + --color-base-300: oklch(91% 0 0); + --color-base-content: oklch(0% 0 0); + --color-primary: oklch(71.9% 0.357 330.759); + --color-primary-content: oklch(14.38% 0.071 330.759); + --color-secondary: oklch(73.37% 0.224 48.25); + --color-secondary-content: oklch(14.674% 0.044 48.25); + --color-accent: oklch(92.78% 0.264 122.962); + --color-accent-content: oklch(18.556% 0.052 122.962); + --color-neutral: oklch(21.31% 0.128 278.68); + --color-neutral-content: oklch(84.262% 0.025 278.68); + --color-info: oklch(60.72% 0.227 252.05); + --color-info-content: oklch(12.144% 0.045 252.05); + --color-success: oklch(85.72% 0.266 158.53); + --color-success-content: oklch(17.144% 0.053 158.53); + --color-warning: oklch(91.01% 0.212 100.5); + --color-warning-content: oklch(18.202% 0.042 100.5); + --color-error: oklch(64.84% 0.293 29.349); + --color-error-content: oklch(12.968% 0.058 29.349); + --radius-selector: 1rem; + --radius-field: 1rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=lemonade]:checked),[data-theme=lemonade] { + color-scheme: light; + --color-base-100: oklch(98.71% 0.02 123.72); + --color-base-200: oklch(91.8% 0.018 123.72); + --color-base-300: oklch(84.89% 0.017 123.72); + --color-base-content: oklch(19.742% 0.004 123.72); + --color-primary: oklch(58.92% 0.199 134.6); + --color-primary-content: oklch(11.784% 0.039 134.6); + --color-secondary: oklch(77.75% 0.196 111.09); + --color-secondary-content: oklch(15.55% 0.039 111.09); + --color-accent: oklch(85.39% 0.201 100.73); + --color-accent-content: oklch(17.078% 0.04 100.73); + --color-neutral: oklch(30.98% 0.075 108.6); + --color-neutral-content: oklch(86.196% 0.015 108.6); + --color-info: oklch(86.19% 0.047 224.14); + --color-info-content: oklch(17.238% 0.009 224.14); + --color-success: oklch(86.19% 0.047 157.85); + --color-success-content: oklch(17.238% 0.009 157.85); + --color-warning: oklch(86.19% 0.047 102.15); + --color-warning-content: oklch(17.238% 0.009 102.15); + --color-error: oklch(86.19% 0.047 25.85); + --color-error-content: oklch(17.238% 0.009 25.85); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=night]:checked),[data-theme=night] { + color-scheme: dark; + --color-base-100: oklch(20.768% 0.039 265.754); + --color-base-200: oklch(19.314% 0.037 265.754); + --color-base-300: oklch(17.86% 0.034 265.754); + --color-base-content: oklch(84.153% 0.007 265.754); + --color-primary: oklch(75.351% 0.138 232.661); + --color-primary-content: oklch(15.07% 0.027 232.661); + --color-secondary: oklch(68.011% 0.158 276.934); + --color-secondary-content: oklch(13.602% 0.031 276.934); + --color-accent: oklch(72.36% 0.176 350.048); + --color-accent-content: oklch(14.472% 0.035 350.048); + --color-neutral: oklch(27.949% 0.036 260.03); + --color-neutral-content: oklch(85.589% 0.007 260.03); + --color-info: oklch(68.455% 0.148 237.251); + --color-info-content: oklch(0% 0 0); + --color-success: oklch(78.452% 0.132 181.911); + --color-success-content: oklch(15.69% 0.026 181.911); + --color-warning: oklch(83.242% 0.139 82.95); + --color-warning-content: oklch(16.648% 0.027 82.95); + --color-error: oklch(71.785% 0.17 13.118); + --color-error-content: oklch(14.357% 0.034 13.118); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=coffee]:checked),[data-theme=coffee] { + color-scheme: dark; + --color-base-100: oklch(24% 0.023 329.708); + --color-base-200: oklch(21% 0.021 329.708); + --color-base-300: oklch(16% 0.019 329.708); + --color-base-content: oklch(72.354% 0.092 79.129); + --color-primary: oklch(71.996% 0.123 62.756); + --color-primary-content: oklch(14.399% 0.024 62.756); + --color-secondary: oklch(34.465% 0.029 199.194); + --color-secondary-content: oklch(86.893% 0.005 199.194); + --color-accent: oklch(42.621% 0.074 224.389); + --color-accent-content: oklch(88.524% 0.014 224.389); + --color-neutral: oklch(16.51% 0.015 326.261); + --color-neutral-content: oklch(83.302% 0.003 326.261); + --color-info: oklch(79.49% 0.063 184.558); + --color-info-content: oklch(15.898% 0.012 184.558); + --color-success: oklch(74.722% 0.072 131.116); + --color-success-content: oklch(14.944% 0.014 131.116); + --color-warning: oklch(88.15% 0.14 87.722); + --color-warning-content: oklch(17.63% 0.028 87.722); + --color-error: oklch(77.318% 0.128 31.871); + --color-error-content: oklch(15.463% 0.025 31.871); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=winter]:checked),[data-theme=winter] { + color-scheme: light; + --color-base-100: oklch(100% 0 0); + --color-base-200: oklch(97.466% 0.011 259.822); + --color-base-300: oklch(93.268% 0.016 262.751); + --color-base-content: oklch(41.886% 0.053 255.824); + --color-primary: oklch(56.86% 0.255 257.57); + --color-primary-content: oklch(91.372% 0.051 257.57); + --color-secondary: oklch(42.551% 0.161 282.339); + --color-secondary-content: oklch(88.51% 0.032 282.339); + --color-accent: oklch(59.939% 0.191 335.171); + --color-accent-content: oklch(11.988% 0.038 335.171); + --color-neutral: oklch(19.616% 0.063 257.651); + --color-neutral-content: oklch(83.923% 0.012 257.651); + --color-info: oklch(88.127% 0.085 214.515); + --color-info-content: oklch(17.625% 0.017 214.515); + --color-success: oklch(80.494% 0.077 197.823); + --color-success-content: oklch(16.098% 0.015 197.823); + --color-warning: oklch(89.172% 0.045 71.47); + --color-warning-content: oklch(17.834% 0.009 71.47); + --color-error: oklch(73.092% 0.11 20.076); + --color-error-content: oklch(14.618% 0.022 20.076); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=dim]:checked),[data-theme=dim] { + color-scheme: dark; + --color-base-100: oklch(30.857% 0.023 264.149); + --color-base-200: oklch(28.036% 0.019 264.182); + --color-base-300: oklch(26.346% 0.018 262.177); + --color-base-content: oklch(82.901% 0.031 222.959); + --color-primary: oklch(86.133% 0.141 139.549); + --color-primary-content: oklch(17.226% 0.028 139.549); + --color-secondary: oklch(73.375% 0.165 35.353); + --color-secondary-content: oklch(14.675% 0.033 35.353); + --color-accent: oklch(74.229% 0.133 311.379); + --color-accent-content: oklch(14.845% 0.026 311.379); + --color-neutral: oklch(24.731% 0.02 264.094); + --color-neutral-content: oklch(82.901% 0.031 222.959); + --color-info: oklch(86.078% 0.142 206.182); + --color-info-content: oklch(17.215% 0.028 206.182); + --color-success: oklch(86.171% 0.142 166.534); + --color-success-content: oklch(17.234% 0.028 166.534); + --color-warning: oklch(86.163% 0.142 94.818); + --color-warning-content: oklch(17.232% 0.028 94.818); + --color-error: oklch(82.418% 0.099 33.756); + --color-error-content: oklch(16.483% 0.019 33.756); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=nord]:checked),[data-theme=nord] { + color-scheme: light; + --color-base-100: oklch(95.127% 0.007 260.731); + --color-base-200: oklch(93.299% 0.01 261.788); + --color-base-300: oklch(89.925% 0.016 262.749); + --color-base-content: oklch(32.437% 0.022 264.182); + --color-primary: oklch(59.435% 0.077 254.027); + --color-primary-content: oklch(11.887% 0.015 254.027); + --color-secondary: oklch(69.651% 0.059 248.687); + --color-secondary-content: oklch(13.93% 0.011 248.687); + --color-accent: oklch(77.464% 0.062 217.469); + --color-accent-content: oklch(15.492% 0.012 217.469); + --color-neutral: oklch(45.229% 0.035 264.131); + --color-neutral-content: oklch(89.925% 0.016 262.749); + --color-info: oklch(69.207% 0.062 332.664); + --color-info-content: oklch(13.841% 0.012 332.664); + --color-success: oklch(76.827% 0.074 131.063); + --color-success-content: oklch(15.365% 0.014 131.063); + --color-warning: oklch(85.486% 0.089 84.093); + --color-warning-content: oklch(17.097% 0.017 84.093); + --color-error: oklch(60.61% 0.12 15.341); + --color-error-content: oklch(12.122% 0.024 15.341); + --radius-selector: 1rem; + --radius-field: 0.25rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=sunset]:checked),[data-theme=sunset] { + color-scheme: dark; + --color-base-100: oklch(22% 0.019 237.69); + --color-base-200: oklch(20% 0.019 237.69); + --color-base-300: oklch(18% 0.019 237.69); + --color-base-content: oklch(77.383% 0.043 245.096); + --color-primary: oklch(74.703% 0.158 39.947); + --color-primary-content: oklch(14.94% 0.031 39.947); + --color-secondary: oklch(72.537% 0.177 2.72); + --color-secondary-content: oklch(14.507% 0.035 2.72); + --color-accent: oklch(71.294% 0.166 299.844); + --color-accent-content: oklch(14.258% 0.033 299.844); + --color-neutral: oklch(26% 0.019 237.69); + --color-neutral-content: oklch(70% 0.019 237.69); + --color-info: oklch(85.559% 0.085 206.015); + --color-info-content: oklch(17.111% 0.017 206.015); + --color-success: oklch(85.56% 0.085 144.778); + --color-success-content: oklch(17.112% 0.017 144.778); + --color-warning: oklch(85.569% 0.084 74.427); + --color-warning-content: oklch(17.113% 0.016 74.427); + --color-error: oklch(85.511% 0.078 16.886); + --color-error-content: oklch(17.102% 0.015 16.886); + --radius-selector: 1rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 0; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=caramellatte]:checked),[data-theme=caramellatte] { + color-scheme: light; + --color-base-100: oklch(98% 0.016 73.684); + --color-base-200: oklch(95% 0.038 75.164); + --color-base-300: oklch(90% 0.076 70.697); + --color-base-content: oklch(40% 0.123 38.172); + --color-primary: oklch(0% 0 0); + --color-primary-content: oklch(100% 0 0); + --color-secondary: oklch(22.45% 0.075 37.85); + --color-secondary-content: oklch(90% 0.076 70.697); + --color-accent: oklch(46.44% 0.111 37.85); + --color-accent-content: oklch(90% 0.076 70.697); + --color-neutral: oklch(55% 0.195 38.402); + --color-neutral-content: oklch(98% 0.016 73.684); + --color-info: oklch(42% 0.199 265.638); + --color-info-content: oklch(90% 0.076 70.697); + --color-success: oklch(43% 0.095 166.913); + --color-success-content: oklch(90% 0.076 70.697); + --color-warning: oklch(82% 0.189 84.429); + --color-warning-content: oklch(41% 0.112 45.904); + --color-error: oklch(70% 0.191 22.216); + --color-error-content: oklch(39% 0.141 25.723); + --radius-selector: 2rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 2px; + --depth: 1; + --noise: 1; + } +} +@layer base { + :root:has(input.theme-controller[value=abyss]:checked),[data-theme=abyss] { + color-scheme: dark; + --color-base-100: oklch(20% 0.08 209); + --color-base-200: oklch(15% 0.08 209); + --color-base-300: oklch(10% 0.08 209); + --color-base-content: oklch(90% 0.076 70.697); + --color-primary: oklch(92% 0.2653 125); + --color-primary-content: oklch(50% 0.2653 125); + --color-secondary: oklch(83.27% 0.0764 298.3); + --color-secondary-content: oklch(43.27% 0.0764 298.3); + --color-accent: oklch(43% 0 0); + --color-accent-content: oklch(98% 0 0); + --color-neutral: oklch(30% 0.08 209); + --color-neutral-content: oklch(90% 0.076 70.697); + --color-info: oklch(74% 0.16 232.661); + --color-info-content: oklch(29% 0.066 243.157); + --color-success: oklch(79% 0.209 151.711); + --color-success-content: oklch(26% 0.065 152.934); + --color-warning: oklch(84.8% 0.1962 84.62); + --color-warning-content: oklch(44.8% 0.1962 84.62); + --color-error: oklch(65% 0.1985 24.22); + --color-error-content: oklch(27% 0.1985 24.22); + --radius-selector: 2rem; + --radius-field: 0.25rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1px; + --depth: 1; + --noise: 0; + } +} +@layer base { + :root:has(input.theme-controller[value=silk]:checked),[data-theme=silk] { + color-scheme: light; + --color-base-100: oklch(97% 0.0035 67.78); + --color-base-200: oklch(95% 0.0081 61.42); + --color-base-300: oklch(90% 0.0081 61.42); + --color-base-content: oklch(40% 0.0081 61.42); + --color-primary: oklch(23.27% 0.0249 284.3); + --color-primary-content: oklch(94.22% 0.2505 117.44); + --color-secondary: oklch(23.27% 0.0249 284.3); + --color-secondary-content: oklch(73.92% 0.2135 50.94); + --color-accent: oklch(23.27% 0.0249 284.3); + --color-accent-content: oklch(88.92% 0.2061 189.9); + --color-neutral: oklch(20% 0 0); + --color-neutral-content: oklch(80% 0.0081 61.42); + --color-info: oklch(80.39% 0.1148 241.68); + --color-info-content: oklch(30.39% 0.1148 241.68); + --color-success: oklch(83.92% 0.0901 136.87); + --color-success-content: oklch(23.92% 0.0901 136.87); + --color-warning: oklch(83.92% 0.1085 80); + --color-warning-content: oklch(43.92% 0.1085 80); + --color-error: oklch(75.1% 0.1814 22.37); + --color-error-content: oklch(35.1% 0.1814 22.37); + --radius-selector: 2rem; + --radius-field: 0.5rem; + --radius-box: 1rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 2px; + --depth: 1; + --noise: 0; + } +} @layer base { :root { --fx-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E"); diff --git a/Sources/DatabaseClient/Interface.swift b/Sources/DatabaseClient/Interface.swift index 45f9bcd..75706a3 100644 --- a/Sources/DatabaseClient/Interface.swift +++ b/Sources/DatabaseClient/Interface.swift @@ -18,8 +18,8 @@ public struct DatabaseClient: Sendable { public var equipment: Equipment public var componentLoss: ComponentLoss public var effectiveLength: EffectiveLengthClient - // public var rectangularDuct: RectangularDuct public var users: Users + public var userProfile: UserProfile } extension DatabaseClient: TestDependencyKey { @@ -30,8 +30,8 @@ extension DatabaseClient: TestDependencyKey { equipment: .testValue, componentLoss: .testValue, effectiveLength: .testValue, - // rectangularDuct: .testValue, - users: .testValue + users: .testValue, + userProfile: .testValue ) public static func live(database: any Database) -> Self { @@ -42,8 +42,8 @@ extension DatabaseClient: TestDependencyKey { equipment: .live(database: database), componentLoss: .live(database: database), effectiveLength: .live(database: database), - // rectangularDuct: .live(database: database), - users: .live(database: database) + users: .live(database: database), + userProfile: .live(database: database) ) } } @@ -66,11 +66,11 @@ extension DatabaseClient.Migrations: DependencyKey { Project.Migrate(), User.Migrate(), User.Token.Migrate(), + User.Profile.Migrate(), ComponentPressureLoss.Migrate(), EquipmentInfo.Migrate(), Room.Migrate(), EffectiveLength.Migrate(), - // DuctSizing.RectangularDuct.Migrate(), ] } ) diff --git a/Sources/DatabaseClient/UserProfile.swift b/Sources/DatabaseClient/UserProfile.swift new file mode 100644 index 0000000..d0ad378 --- /dev/null +++ b/Sources/DatabaseClient/UserProfile.swift @@ -0,0 +1,175 @@ +import Dependencies +import DependenciesMacros +import Fluent +import ManualDCore +import Vapor + +extension DatabaseClient { + @DependencyClient + public struct UserProfile: Sendable { + public var create: @Sendable (User.Profile.Create) async throws -> User.Profile + public var delete: @Sendable (User.Profile.ID) async throws -> Void + public var get: @Sendable (User.Profile.ID) async throws -> User.Profile? + public var update: @Sendable (User.Profile.ID, User.Profile.Update) async throws -> User.Profile + } +} + +extension DatabaseClient.UserProfile: TestDependencyKey { + + public static let testValue = Self() + + public static func live(database: any Database) -> Self { + .init( + create: { profile in + try profile.validate() + let model = profile.toModel() + try await model.save(on: database) + return try model.toDTO() + }, + delete: { id in + guard let model = try await UserProfileModel.find(id, on: database) else { + throw NotFoundError() + } + try await model.delete(on: database) + }, + get: { id in + try await UserProfileModel.find(id, on: database) + .map { try $0.toDTO() } + }, + update: { id, updates in + guard let model = try await UserProfileModel.find(id, on: database) else { + throw NotFoundError() + } + try updates.validate() + model.applyUpdates(updates) + if model.hasChanges { + try await model.save(on: database) + } + return try model.toDTO() + } + ) + } +} + +extension User.Profile.Create { + + func validate() throws(ValidationError) { + guard !firstName.isEmpty else { + throw ValidationError("User first name should not be empty.") + } + guard !lastName.isEmpty else { + throw ValidationError("User last name should not be empty.") + } + } + + func toModel() -> UserProfileModel { + .init(userID: userID, firstName: firstName, lastName: lastName, theme: theme) + } +} + +extension User.Profile.Update { + + func validate() throws(ValidationError) { + if let firstName { + guard !firstName.isEmpty else { + throw ValidationError("User first name should not be empty.") + } + } + if let lastName { + guard !lastName.isEmpty else { + throw ValidationError("User last name should not be empty.") + } + } + } +} + +extension User.Profile { + + struct Migrate: AsyncMigration { + let name = "Create UserProfile" + + func prepare(on database: any Database) async throws { + try await database.schema(UserProfileModel.schema) + .id() + .field("firstName", .string, .required) + .field("lastName", .string, .required) + .field("theme", .string) + .field("userID", .uuid, .references(UserModel.schema, "id", onDelete: .cascade)) + .field("createdAt", .datetime) + .field("updatedAt", .datetime) + .unique(on: "userID") + .create() + } + + func revert(on database: any Database) async throws { + try await database.schema(UserProfileModel.schema).delete() + } + } +} + +final class UserProfileModel: Model, @unchecked Sendable { + + static let schema = "user_profile" + + @ID(key: .id) + var id: UUID? + + @Parent(key: "userID") + var user: UserModel + + @Field(key: "firstName") + var firstName: String + + @Field(key: "lastName") + var lastName: String + + @Field(key: "theme") + var theme: String? + + @Timestamp(key: "createdAt", on: .create, format: .iso8601) + var createdAt: Date? + + @Timestamp(key: "updatedAt", on: .update, format: .iso8601) + var updatedAt: Date? + + init() {} + + init( + id: UUID? = nil, + userID: User.ID, + firstName: String, + lastName: String, + theme: Theme? = nil + ) { + self.id = id + $user.id = userID + self.firstName = firstName + self.lastName = lastName + self.theme = theme?.rawValue + } + + func toDTO() throws -> User.Profile { + try .init( + id: requireID(), + userID: $user.id, + firstName: firstName, + lastName: lastName, + theme: self.theme.flatMap(Theme.init), + createdAt: createdAt!, + updatedAt: updatedAt! + ) + } + + func applyUpdates(_ updates: User.Profile.Update) { + if let firstName = updates.firstName, firstName != self.firstName { + self.firstName = firstName + } + if let lastName = updates.lastName, lastName != self.lastName { + self.lastName = lastName + } + if let theme = updates.theme, theme.rawValue != self.theme { + self.theme = theme.rawValue + } + } + +} diff --git a/Sources/DatabaseClient/Users.swift b/Sources/DatabaseClient/Users.swift index 4b95f4b..47623e3 100644 --- a/Sources/DatabaseClient/Users.swift +++ b/Sources/DatabaseClient/Users.swift @@ -104,6 +104,8 @@ extension User.Token { .id() .field("value", .string, .required) .field("user_id", .uuid, .required, .references(UserModel.schema, "id")) + .field("createdAt", .datetime) + .field("updatedAt", .datetime) .unique(on: "value") .create() } diff --git a/Sources/ManualDCore/Theme.swift b/Sources/ManualDCore/Theme.swift new file mode 100644 index 0000000..98e94b0 --- /dev/null +++ b/Sources/ManualDCore/Theme.swift @@ -0,0 +1,30 @@ +import Foundation + +public enum Theme: String, CaseIterable, Codable, Equatable, Sendable { + case aqua + case cupcake + case cyberpunk + case dark + case dracula + case light + case night + case nord + case retro + case synthwave + + public static let darkThemes = [ + Self.aqua, + Self.dark, + Self.dracula, + Self.night, + Self.synthwave, + ] + + public static let lightThems = [ + Self.cupcake, + Self.cyberpunk, + Self.light, + Self.nord, + Self.retro, + ] +} diff --git a/Sources/ManualDCore/User.swift b/Sources/ManualDCore/User.swift index 20ca8fa..56b4c6b 100644 --- a/Sources/ManualDCore/User.swift +++ b/Sources/ManualDCore/User.swift @@ -1,6 +1,7 @@ import Dependencies import Foundation +// FIX: Remove username. public struct User: Codable, Equatable, Identifiable, Sendable { public let id: UUID diff --git a/Sources/ManualDCore/UserProfile.swift b/Sources/ManualDCore/UserProfile.swift new file mode 100644 index 0000000..f4b7cd1 --- /dev/null +++ b/Sources/ManualDCore/UserProfile.swift @@ -0,0 +1,70 @@ +import Foundation + +extension User { + public struct Profile: Codable, Equatable, Identifiable, Sendable { + + public let id: UUID + public let userID: User.ID + public let firstName: String + public let lastName: String + public let theme: Theme? + public let createdAt: Date + public let updatedAt: Date + + public init( + id: UUID, + userID: User.ID, + firstName: String, + lastName: String, + theme: Theme? = nil, + createdAt: Date, + updatedAt: Date + ) { + self.id = id + self.userID = userID + self.firstName = firstName + self.lastName = lastName + self.theme = theme + self.createdAt = createdAt + self.updatedAt = updatedAt + } + } +} + +extension User.Profile { + + public struct Create: Codable, Equatable, Sendable { + public let userID: User.ID + public let firstName: String + public let lastName: String + public let theme: Theme? + + public init( + userID: User.ID, + firstName: String, + lastName: String, + theme: Theme? = nil + ) { + self.userID = userID + self.firstName = firstName + self.lastName = lastName + self.theme = theme + } + } + + public struct Update: Codable, Equatable, Sendable { + public let firstName: String? + public let lastName: String? + public let theme: Theme? + + public init( + firstName: String? = nil, + lastName: String? = nil, + theme: Theme? = nil + ) { + self.firstName = firstName + self.lastName = lastName + self.theme = theme + } + } +} diff --git a/Sources/Styleguide/SVG.swift b/Sources/Styleguide/SVG.swift index 045c238..97844cd 100644 --- a/Sources/Styleguide/SVG.swift +++ b/Sources/Styleguide/SVG.swift @@ -20,6 +20,7 @@ extension SVG { case chevronRight case chevronsLeft case circlePlus + case circleUser case close case doorClosed case email @@ -56,6 +57,10 @@ extension SVG { return """ """ + case .circleUser: + return """ + + """ case .close: return """ diff --git a/Sources/ViewController/Live.swift b/Sources/ViewController/Live.swift index f7cf34a..4699c24 100644 --- a/Sources/ViewController/Live.swift +++ b/Sources/ViewController/Live.swift @@ -54,37 +54,27 @@ extension ViewController.Request { } case .project(let route): return await route.renderView(on: self) - default: - // FIX: FIX - return _render(isHtmxRequest: false) { - div { "Fix me!" } - } } } func view( @HTMLBuilder inner: () -> C ) -> AnySendableHTML where C: Sendable { - _render(isHtmxRequest: isHtmxRequest, showSidebar: showSidebar) { - inner() - } + MainPage(theme: theme) { inner() } } func view( @HTMLBuilder inner: () async -> C ) async -> AnySendableHTML where C: Sendable { - await _render(isHtmxRequest: isHtmxRequest, showSidebar: showSidebar) { - await inner() + let inner = await inner() + + return MainPage(theme: theme) { + inner } } - var showSidebar: Bool { - switch route { - case .login, .signup, .project(.page): - return false - default: - return true - } + var theme: Theme? { + .dracula } } @@ -261,7 +251,6 @@ extension SiteRoute.View.ProjectRoute.RoomRoute { return await roomsView(on: request, projectID: projectID) case .submit(let form): - // FIX: Just return a room row. return await roomsView(on: request, projectID: projectID) { _ = try await database.rooms.create(form) } @@ -587,41 +576,53 @@ extension SiteRoute.View.ProjectRoute.DuctSizingRoute { } } -private func _render( - isHtmxRequest: Bool, - active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, - showSidebar: Bool = true, - @HTMLBuilder inner: () async throws -> C -) async throws -> AnySendableHTML where C: Sendable { - let inner = try await inner() - if isHtmxRequest { - return inner - } - return MainPage { inner } -} - -private func _render( - isHtmxRequest: Bool, - active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, - showSidebar: Bool = true, - @HTMLBuilder inner: () async -> C -) async -> AnySendableHTML where C: Sendable { - let inner = await inner() - if isHtmxRequest { - return inner - } - return MainPage { inner } -} - -private func _render( - isHtmxRequest: Bool, - active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, - showSidebar: Bool = true, - @HTMLBuilder inner: () -> C -) -> AnySendableHTML where C: Sendable { - let inner = inner() - if isHtmxRequest { - return inner - } - return MainPage { inner } -} +// private func _render( +// isHtmxRequest: Bool, +// active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, +// showSidebar: Bool = true, +// theme: Theme? = nil, +// @HTMLBuilder inner: () async throws -> C +// ) async throws -> AnySendableHTML where C: Sendable { +// let inner = try await inner() +// if isHtmxRequest { +// return div(.class("h-screen w-full")) { +// inner +// } +// .attributes(.data("theme", value: theme!.rawValue), when: theme != nil) +// } +// return MainPage(theme: theme) { inner } +// } +// +// private func _render( +// isHtmxRequest: Bool, +// active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, +// showSidebar: Bool = true, +// theme: Theme? = nil, +// @HTMLBuilder inner: () async -> C +// ) async -> AnySendableHTML where C: Sendable { +// let inner = await inner() +// if isHtmxRequest { +// return div(.class("h-screen w-full")) { +// inner +// } +// .attributes(.data("theme", value: theme!.rawValue), when: theme != nil) +// } +// return MainPage(theme: theme) { inner } +// } +// +// private func _render( +// isHtmxRequest: Bool, +// active activeTab: SiteRoute.View.ProjectRoute.DetailRoute.Tab = .rooms, +// showSidebar: Bool = true, +// theme: Theme? = nil, +// @HTMLBuilder inner: () -> C +// ) -> AnySendableHTML where C: Sendable { +// let inner = inner() +// if isHtmxRequest { +// return div(.class("h-screen w-full")) { +// inner +// } +// .attributes(.data("theme", value: theme!.rawValue), when: theme != nil) +// } +// return MainPage(theme: theme) { inner } +// } diff --git a/Sources/ViewController/Views/MainPage.swift b/Sources/ViewController/Views/MainPage.swift index fe90a94..149cf89 100644 --- a/Sources/ViewController/Views/MainPage.swift +++ b/Sources/ViewController/Views/MainPage.swift @@ -9,10 +9,13 @@ public struct MainPage: SendableHTMLDocument where Inner: Sendable public var lang: String { "en" } let inner: Inner + let theme: Theme? init( + theme: Theme? = nil, _ inner: () -> Inner ) { + self.theme = theme self.inner = inner() } @@ -54,10 +57,7 @@ public struct MainPage: SendableHTMLDocument where Inner: Sendable div(.class("h-screen w-full")) { inner } - script(.src("https://unpkg.com/lucide@latest")) {} - script { - "lucide.createIcons();" - } + .attributes(.data("theme", value: theme!.rawValue), when: theme != nil) } } diff --git a/Sources/ViewController/Views/Navbar.swift b/Sources/ViewController/Views/Navbar.swift index b0538aa..8ae61f4 100644 --- a/Sources/ViewController/Views/Navbar.swift +++ b/Sources/ViewController/Views/Navbar.swift @@ -42,10 +42,34 @@ struct Navbar: HTML, Sendable { } } div(.class("flex-none")) { - button(.class("w-fit px-4 py-2")) { - "User Menu" + details(.class("dropdown dropdown-left dropdown-bottom")) { + summary(.class("btn w-fit px-4 py-2")) { + SVG(.circleUser) + } + .navButton() + + ul( + .class( + """ + menu dropdown-content bg-base-100 + rounded-box z-1 w-fit p-2 shadow-sm + """ + ) + ) { + li(.class("w-full")) { + // TODO: Save theme to user profile ?? + div(.class("flex justify-between p-4 space-x-6")) { + Label("Theme") + input(.type(.checkbox), .class("toggle theme-controller"), .value("light")) + } + } + } + + // button(.class("w-fit px-4 py-2")) { + // SVG(.circleUser) + // } + // .navButton() } - .navButton() } } } diff --git a/Sources/ViewController/Views/Project/ProjectView.swift b/Sources/ViewController/Views/Project/ProjectView.swift index f9d4082..571f69d 100644 --- a/Sources/ViewController/Views/Project/ProjectView.swift +++ b/Sources/ViewController/Views/Project/ProjectView.swift @@ -82,13 +82,6 @@ extension ProjectView { ul(.class("w-full")) { - // FIX: Move to user profile / settings page. - li(.class("w-full is-drawer-close:hidden")) { - div(.class("flex justify-between p-4")) { - Label("Theme") - input(.type(.checkbox), .class("toggle theme-controller"), .value("light")) - } - } li(.class("flex w-full")) { row( diff --git a/Sources/ViewController/Views/Rooms/RoomsView.swift b/Sources/ViewController/Views/Rooms/RoomsView.swift index cf6d8a8..248e06e 100644 --- a/Sources/ViewController/Views/Rooms/RoomsView.swift +++ b/Sources/ViewController/Views/Rooms/RoomsView.swift @@ -121,6 +121,7 @@ struct RoomsView: HTML, Sendable { } public struct RoomRow: HTML, Sendable { + let room: Room let shr: Double @@ -137,7 +138,7 @@ struct RoomsView: HTML, Sendable { } public var body: some HTML { - tr(.id("roomRow_\(room.name)")) { + tr(.id("roomRow_\(room.id.idString)")) { td { room.name } td { div(.class("flex justify-center")) { diff --git a/input.css b/input.css deleted file mode 100644 index f577019..0000000 --- a/input.css +++ /dev/null @@ -1,8 +0,0 @@ -@import "tailwindcss"; - -@source not "./tailwindcss"; -@source not "./daisyui{,*}.mjs"; - -@plugin "./daisyui.mjs"; -@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *)); - diff --git a/output.css b/output.css deleted file mode 100644 index 1100a16..0000000 --- a/output.css +++ /dev/null @@ -1,3167 +0,0 @@ -/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */ -@layer properties; -@layer theme, base, components, utilities; -@layer theme { - :root, :host { - --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', - 'Noto Color Emoji'; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', - monospace; - --color-red-500: oklch(63.7% 0.237 25.331); - --color-red-600: oklch(57.7% 0.245 27.325); - --color-green-400: oklch(79.2% 0.209 151.711); - --color-indigo-600: oklch(51.1% 0.262 276.966); - --color-slate-300: oklch(86.9% 0.022 252.894); - --color-slate-900: oklch(20.8% 0.042 265.755); - --color-gray-200: oklch(92.8% 0.006 264.531); - --color-gray-400: oklch(70.7% 0.022 261.325); - --color-black: #000; - --color-white: #fff; - --spacing: 0.25rem; - --text-sm: 0.875rem; - --text-sm--line-height: calc(1.25 / 0.875); - --text-lg: 1.125rem; - --text-lg--line-height: calc(1.75 / 1.125); - --text-xl: 1.25rem; - --text-xl--line-height: calc(1.75 / 1.25); - --text-2xl: 1.5rem; - --text-2xl--line-height: calc(2 / 1.5); - --text-3xl: 1.875rem; - --text-3xl--line-height: calc(2.25 / 1.875); - --text-4xl: 2.25rem; - --text-4xl--line-height: calc(2.5 / 2.25); - --font-weight-bold: 700; - --radius-md: 0.375rem; - --radius-lg: 0.5rem; - --ease-out: cubic-bezier(0, 0, 0.2, 1); - --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - --default-font-family: var(--font-sans); - --default-mono-font-family: var(--font-mono); - } -} -@layer base { - *, ::after, ::before, ::backdrop, ::file-selector-button { - box-sizing: border-box; - margin: 0; - padding: 0; - border: 0 solid; - } - html, :host { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - tab-size: 4; - font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'); - font-feature-settings: var(--default-font-feature-settings, normal); - font-variation-settings: var(--default-font-variation-settings, normal); - -webkit-tap-highlight-color: transparent; - } - hr { - height: 0; - color: inherit; - border-top-width: 1px; - } - abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - h1, h2, h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; - } - a { - color: inherit; - -webkit-text-decoration: inherit; - text-decoration: inherit; - } - b, strong { - font-weight: bolder; - } - code, kbd, samp, pre { - font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace); - font-feature-settings: var(--default-mono-font-feature-settings, normal); - font-variation-settings: var(--default-mono-font-variation-settings, normal); - font-size: 1em; - } - small { - font-size: 80%; - } - sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sub { - bottom: -0.25em; - } - sup { - top: -0.5em; - } - table { - text-indent: 0; - border-color: inherit; - border-collapse: collapse; - } - :-moz-focusring { - outline: auto; - } - progress { - vertical-align: baseline; - } - summary { - display: list-item; - } - ol, ul, menu { - list-style: none; - } - img, svg, video, canvas, audio, iframe, embed, object { - display: block; - vertical-align: middle; - } - img, video { - max-width: 100%; - height: auto; - } - button, input, select, optgroup, textarea, ::file-selector-button { - font: inherit; - font-feature-settings: inherit; - font-variation-settings: inherit; - letter-spacing: inherit; - color: inherit; - border-radius: 0; - background-color: transparent; - opacity: 1; - } - :where(select:is([multiple], [size])) optgroup { - font-weight: bolder; - } - :where(select:is([multiple], [size])) optgroup option { - padding-inline-start: 20px; - } - ::file-selector-button { - margin-inline-end: 4px; - } - ::placeholder { - opacity: 1; - } - @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { - ::placeholder { - color: currentcolor; - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, currentcolor 50%, transparent); - } - } - } - textarea { - resize: vertical; - } - ::-webkit-search-decoration { - -webkit-appearance: none; - } - ::-webkit-date-and-time-value { - min-height: 1lh; - text-align: inherit; - } - ::-webkit-datetime-edit { - display: inline-flex; - } - ::-webkit-datetime-edit-fields-wrapper { - padding: 0; - } - ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { - padding-block: 0; - } - ::-webkit-calendar-picker-indicator { - line-height: 1; - } - :-moz-ui-invalid { - box-shadow: none; - } - button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { - appearance: button; - } - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; - } - [hidden]:where(:not([hidden='until-found'])) { - display: none !important; - } -} -@layer utilities { - .modal { - @layer daisyui.l1.l2.l3 { - pointer-events: none; - visibility: hidden; - position: fixed; - inset: calc(0.25rem * 0); - margin: calc(0.25rem * 0); - display: grid; - height: 100%; - max-height: none; - width: 100%; - max-width: none; - align-items: center; - justify-items: center; - background-color: transparent; - padding: calc(0.25rem * 0); - color: inherit; - transition: visibility 0.3s allow-discrete, background-color 0.3s ease-out, opacity 0.1s ease-out; - overflow: clip; - overscroll-behavior: contain; - z-index: 999; - scrollbar-gutter: auto; - &::backdrop { - display: none; - } - } - @layer daisyui.l1.l2 { - &.modal-open, &[open], &:target, .modal-toggle:checked + & { - pointer-events: auto; - visibility: visible; - opacity: 100%; - transition: visibility 0s allow-discrete, background-color 0.3s ease-out, opacity 0.1s ease-out; - background-color: oklch(0% 0 0/ 0.4); - .modal-box { - translate: 0 0; - scale: 1; - opacity: 1; - } - :root:has(&) { - --page-has-backdrop: 1; - --page-overflow: hidden; - --page-scroll-bg: var(--page-scroll-bg-on); - --page-scroll-gutter: stable; - --page-scroll-transition: var(--page-scroll-transition-on); - animation: set-page-has-scroll forwards; - animation-timeline: scroll(); - } - } - @starting-style { - &.modal-open, &[open], &:target, .modal-toggle:checked + & { - opacity: 0%; - } - } - } - } - .drawer-side { - :where(&) { - @layer daisyui.l1.l2.l3 { - overflow-x: hidden; - overflow-y: hidden; - } - } - @layer daisyui.l1.l2.l3 { - pointer-events: none; - visibility: hidden; - position: fixed; - inset-inline-start: calc(0.25rem * 0); - top: calc(0.25rem * 0); - z-index: 10; - grid-column-start: 1; - grid-row-start: 1; - display: grid; - width: 100%; - grid-template-columns: repeat(1, minmax(0, 1fr)); - grid-template-rows: repeat(1, minmax(0, 1fr)); - align-items: flex-start; - justify-items: start; - overscroll-behavior: contain; - background-color: transparent; - opacity: 0%; - transition: opacity 0.2s ease-out 0.1s allow-discrete, visibility 0.3s ease-out 0.1s allow-discrete; - height: 100vh; - height: 100dvh; - > .drawer-overlay { - position: sticky; - top: calc(0.25rem * 0); - cursor: pointer; - place-self: stretch; - background-color: oklch(0% 0 0 / 40%); - } - > * { - grid-column-start: 1; - grid-row-start: 1; - } - > :not(.drawer-overlay) { - will-change: transform; - transition: translate 0.3s ease-out, width 0.2s ease-out; - translate: -100%; - [dir="rtl"] & { - translate: 100%; - } - } - } - } - .drawer-toggle { - @layer daisyui.l1.l2.l3 { - position: fixed; - height: calc(0.25rem * 0); - width: calc(0.25rem * 0); - appearance: none; - opacity: 0%; - :where(&:checked ~ .drawer-side) { - scrollbar-color: currentColor oklch(0 0 0 / calc(var(--page-has-backdrop, 0) * 0.4)); - @supports (color: color-mix(in lab, red, red)) { - scrollbar-color: color-mix(in oklch, currentColor 35%, #0000) oklch(0 0 0 / calc(var(--page-has-backdrop, 0) * 0.4)); - } - } - :where(:root:has(&:checked)) { - --page-has-backdrop: 1; - --page-overflow: hidden; - --page-scroll-bg: var(--page-scroll-bg-on); - --page-scroll-gutter: stable; - --page-scroll-transition: var(--page-scroll-transition-on); - animation: set-page-has-scroll forwards; - animation-timeline: scroll(); - } - } - @layer daisyui.l1.l2 { - :where(&:checked ~ .drawer-side) { - pointer-events: auto; - visibility: visible; - overflow-y: auto; - opacity: 100%; - > :not(.drawer-overlay) { - translate: 0%; - } - } - &:focus-visible ~ .drawer-content label.drawer-button { - outline: 2px solid; - outline-offset: 2px; - } - } - } - .tooltip { - @layer daisyui.l1.l2.l3 { - position: relative; - display: inline-block; - --tt-bg: var(--color-neutral); - --tt-off: calc(100% + 0.5rem); - --tt-tail: calc(100% + 1px + 0.25rem); - & > .tooltip-content, &[data-tip]:before { - position: absolute; - max-width: 20rem; - border-radius: var(--radius-field); - padding-inline: calc(0.25rem * 2); - padding-block: calc(0.25rem * 1); - text-align: center; - white-space: normal; - color: var(--color-neutral-content); - opacity: 0%; - font-size: 0.875rem; - line-height: 1.25; - background-color: var(--tt-bg); - width: max-content; - pointer-events: none; - z-index: 2; - --tw-content: attr(data-tip); - content: var(--tw-content); - } - &:after { - opacity: 0%; - background-color: var(--tt-bg); - content: ""; - pointer-events: none; - width: 0.625rem; - height: 0.25rem; - display: block; - position: absolute; - mask-repeat: no-repeat; - mask-position: -1px 0; - --mask-tooltip: url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A"); - mask-image: var(--mask-tooltip); - } - @media (prefers-reduced-motion: no-preference) { - & > .tooltip-content, &[data-tip]:before, &:after { - transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms; - } - } - &:is([data-tip]:not([data-tip=""]), :has(.tooltip-content:not(:empty))) { - &.tooltip-open, &:hover, &:has(:focus-visible) { - & > .tooltip-content, &[data-tip]:before, &:after { - opacity: 100%; - --tt-pos: 0rem; - @media (prefers-reduced-motion: no-preference) { - transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s; - } - } - } - } - } - @layer daisyui.l1.l2 { - > .tooltip-content, &[data-tip]:before { - transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)); - inset: auto auto var(--tt-off) 50%; - } - &:after { - transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)); - inset: auto auto var(--tt-tail) 50%; - } - } - } - .tab { - @layer daisyui.l1.l2.l3 { - position: relative; - display: inline-flex; - cursor: pointer; - appearance: none; - flex-wrap: wrap; - align-items: center; - justify-content: center; - text-align: center; - webkit-user-select: none; - user-select: none; - &:hover { - @media (hover: hover) { - color: var(--color-base-content); - } - } - --tab-p: 0.75rem; - --tab-bg: var(--color-base-100); - --tab-border-color: var(--color-base-300); - --tab-radius-ss: 0; - --tab-radius-se: 0; - --tab-radius-es: 0; - --tab-radius-ee: 0; - --tab-order: 0; - --tab-radius-min: calc(0.75rem - var(--border)); - --tab-radius-limit: min(var(--radius-field), var(--tab-radius-min)); - --tab-radius-grad: #0000 calc(69% - var(--border)), - var(--tab-border-color) calc(69% - var(--border) + 0.25px), - var(--tab-border-color) 69%, - var(--tab-bg) calc(69% + 0.25px); - border-color: #0000; - order: var(--tab-order); - height: var(--tab-height); - font-size: 0.875rem; - padding-inline: var(--tab-p); - &:is(input[type="radio"]) { - min-width: fit-content; - &:after { - --tw-content: attr(aria-label); - content: var(--tw-content); - } - } - &:is(label) { - position: relative; - input { - position: absolute; - inset: calc(0.25rem * 0); - cursor: pointer; - appearance: none; - opacity: 0%; - } - } - &:checked, &:is(label:has(:checked)), &:is(.tab-active, [aria-selected="true"], [aria-current="true"], [aria-current="page"]) { - & + .tab-content { - display: block; - } - } - &:not( :checked, label:has(:checked), :hover, .tab-active, [aria-selected="true"], [aria-current="true"], [aria-current="page"] ) { - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 50%, transparent); - } - } - &:not(input):empty { - flex-grow: 1; - cursor: default; - } - &:focus { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:focus-visible, &:is(label:has(:checked:focus-visible)) { - outline: 2px solid currentColor; - outline-offset: -5px; - } - &[disabled] { - pointer-events: none; - opacity: 40%; - } - } - } - .menu { - @layer daisyui.l1.l2.l3 { - display: flex; - width: fit-content; - flex-direction: column; - flex-wrap: wrap; - padding: calc(0.25rem * 2); - --menu-active-fg: var(--color-neutral-content); - --menu-active-bg: var(--color-neutral); - font-size: 0.875rem; - :where(li ul) { - position: relative; - margin-inline-start: calc(0.25rem * 4); - padding-inline-start: calc(0.25rem * 2); - white-space: nowrap; - &:before { - position: absolute; - inset-inline-start: calc(0.25rem * 0); - top: calc(0.25rem * 3); - bottom: calc(0.25rem * 3); - background-color: var(--color-base-content); - opacity: 10%; - width: var(--border); - content: ""; - } - } - :where(li > .menu-dropdown:not(.menu-dropdown-show)) { - display: none; - } - :where(li:not(.menu-title) > *:not(ul, details, .menu-title, .btn)), :where(li:not(.menu-title) > details > summary:not(.menu-title)) { - display: grid; - grid-auto-flow: column; - align-content: flex-start; - align-items: center; - gap: calc(0.25rem * 2); - border-radius: var(--radius-field); - padding-inline: calc(0.25rem * 3); - padding-block: calc(0.25rem * 1.5); - text-align: start; - transition-property: color, background-color, box-shadow; - transition-duration: 0.2s; - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); - grid-auto-columns: minmax(auto, max-content) auto max-content; - text-wrap: balance; - user-select: none; - } - :where(li > details > summary) { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - &::-webkit-details-marker { - display: none; - } - } - :where(li > details > summary), :where(li > .menu-dropdown-toggle) { - &:after { - justify-self: flex-end; - display: block; - height: 0.375rem; - width: 0.375rem; - rotate: -135deg; - translate: 0 -1px; - transition-property: rotate, translate; - transition-duration: 0.2s; - content: ""; - transform-origin: 50% 50%; - box-shadow: 2px 2px inset; - pointer-events: none; - } - } - details { - overflow: hidden; - interpolate-size: allow-keywords; - } - details::details-content { - block-size: 0; - @media (prefers-reduced-motion: no-preference) { - transition-behavior: allow-discrete; - transition-property: block-size, content-visibility; - transition-duration: 0.2s; - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); - } - } - details[open]::details-content { - block-size: auto; - } - :where(li > details[open] > summary):after, :where(li > .menu-dropdown-toggle.menu-dropdown-show):after { - rotate: 45deg; - translate: 0 1px; - } - :where( li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title), li:not(.menu-title, .disabled) > details > summary:not(.menu-title) ):not(.menu-active, :active, .btn) { - &.menu-focus, &:focus-visible { - cursor: pointer; - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent); - } - color: var(--color-base-content); - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - } - :where( li:not(.menu-title, .disabled) > *:not(ul, details, .menu-title):not(.menu-active, :active, .btn):hover, li:not(.menu-title, .disabled) > details > summary:not(.menu-title):not(.menu-active, :active, .btn):hover ) { - cursor: pointer; - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent); - } - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - box-shadow: 0 1px oklch(0% 0 0 / 0.01) inset, 0 -1px oklch(100% 0 0 / 0.01) inset; - } - :where(li:empty) { - background-color: var(--color-base-content); - opacity: 10%; - margin: 0.5rem 1rem; - height: 1px; - } - :where(li) { - position: relative; - display: flex; - flex-shrink: 0; - flex-direction: column; - flex-wrap: wrap; - align-items: stretch; - .badge { - justify-self: flex-end; - } - & > *:not(ul, .menu-title, details, .btn):active, & > *:not(ul, .menu-title, details, .btn).menu-active, & > details > summary:active { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - color: var(--menu-active-fg); - background-color: var(--menu-active-bg); - background-size: auto, calc(var(--noise) * 100%); - background-image: none, var(--fx-noise); - &:not(&:active) { - box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--menu-active-bg); - } - } - &.menu-disabled { - pointer-events: none; - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 20%, transparent); - } - } - } - .dropdown:focus-within { - .menu-dropdown-toggle:after { - rotate: 45deg; - translate: 0 1px; - } - } - .dropdown-content { - margin-top: calc(0.25rem * 2); - padding: calc(0.25rem * 2); - &:before { - display: none; - } - } - } - } - .btn { - :where(&) { - @layer daisyui.l1.l2.l3 { - width: unset; - } - } - @layer daisyui.l1.l2.l3 { - display: inline-flex; - flex-shrink: 0; - cursor: pointer; - flex-wrap: nowrap; - align-items: center; - justify-content: center; - gap: calc(0.25rem * 1.5); - text-align: center; - vertical-align: middle; - outline-offset: 2px; - webkit-user-select: none; - user-select: none; - padding-inline: var(--btn-p); - color: var(--btn-fg); - --tw-prose-links: var(--btn-fg); - height: var(--size); - font-size: var(--fontsize, 0.875rem); - font-weight: 600; - outline-color: var(--btn-color, var(--color-base-content)); - transition-property: color, background-color, border-color, box-shadow; - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); - transition-duration: 0.2s; - border-start-start-radius: var(--join-ss, var(--radius-field)); - border-start-end-radius: var(--join-se, var(--radius-field)); - border-end-start-radius: var(--join-es, var(--radius-field)); - border-end-end-radius: var(--join-ee, var(--radius-field)); - background-color: var(--btn-bg); - background-size: auto, calc(var(--noise) * 100%); - background-image: none, var(--btn-noise); - border-width: var(--border); - border-style: solid; - border-color: var(--btn-border); - text-shadow: 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 0.15)); - touch-action: manipulation; - box-shadow: 0 0.5px 0 0.5px oklch(100% 0 0 / calc(var(--depth) * 6%)) inset, var(--btn-shadow); - --size: calc(var(--size-field, 0.25rem) * 10); - --btn-bg: var(--btn-color, var(--color-base-200)); - --btn-fg: var(--color-base-content); - --btn-p: 1rem; - --btn-border: var(--btn-bg); - @supports (color: color-mix(in lab, red, red)) { - --btn-border: color-mix(in oklab, var(--btn-bg), #000 calc(var(--depth) * 5%)); - } - --btn-shadow: 0 3px 2px -2px var(--btn-bg), - 0 4px 3px -2px var(--btn-bg); - @supports (color: color-mix(in lab, red, red)) { - --btn-shadow: 0 3px 2px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000), - 0 4px 3px -2px color-mix(in oklab, var(--btn-bg) calc(var(--depth) * 30%), #0000); - } - --btn-noise: var(--fx-noise); - @media (hover: hover) { - &:hover { - --btn-bg: var(--btn-color, var(--color-base-200)); - @supports (color: color-mix(in lab, red, red)) { - --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%); - } - } - } - &:focus-visible, &:has(:focus-visible) { - outline-width: 2px; - outline-style: solid; - isolation: isolate; - } - &:active:not(.btn-active) { - translate: 0 0.5px; - --btn-bg: var(--btn-color, var(--color-base-200)); - @supports (color: color-mix(in lab, red, red)) { - --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 5%); - } - --btn-border: var(--btn-color, var(--color-base-200)); - @supports (color: color-mix(in lab, red, red)) { - --btn-border: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%); - } - --btn-shadow: 0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0); - } - &:is(input[type="checkbox"], input[type="radio"]) { - appearance: none; - &[aria-label]::after { - --tw-content: attr(aria-label); - content: var(--tw-content); - } - } - &:where(input:checked:not(.filter .btn)) { - --btn-color: var(--color-primary); - --btn-fg: var(--color-primary-content); - isolation: isolate; - } - } - &:disabled { - @layer daisyui.l1.l2 { - &:not(.btn-link, .btn-ghost) { - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent); - } - box-shadow: none; - } - pointer-events: none; - --btn-border: #0000; - --btn-noise: none; - --btn-fg: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - --btn-fg: color-mix(in oklch, var(--color-base-content) 20%, #0000); - } - } - } - &[disabled] { - @layer daisyui.l1.l2 { - &:not(.btn-link, .btn-ghost) { - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent); - } - box-shadow: none; - } - pointer-events: none; - --btn-border: #0000; - --btn-noise: none; - --btn-fg: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - --btn-fg: color-mix(in oklch, var(--color-base-content) 20%, #0000); - } - } - } - } - .loading { - @layer daisyui.l1.l2.l3 { - pointer-events: none; - display: inline-block; - aspect-ratio: 1 / 1; - background-color: currentcolor; - vertical-align: middle; - width: calc(var(--size-selector, 0.25rem) * 6); - mask-size: 100%; - mask-repeat: no-repeat; - mask-position: center; - mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E"); - } - } - .validator-hint { - @layer daisyui.l1.l2.l3 { - visibility: hidden; - margin-top: calc(0.25rem * 2); - font-size: 0.75rem; - } - } - .validator { - @layer daisyui.l1.l2.l3 { - &:user-valid, &:has(:user-valid) { - &, &:focus, &:checked, &[aria-checked="true"], &:focus-within { - --input-color: var(--color-success); - } - } - &:user-invalid, &:has(:user-invalid), &[aria-invalid]:not([aria-invalid="false"]), &:has([aria-invalid]:not([aria-invalid="false"])) { - &, &:focus, &:checked, &[aria-checked="true"], &:focus-within { - --input-color: var(--color-error); - } - & ~ .validator-hint { - visibility: visible; - color: var(--color-error); - } - } - } - &:user-invalid, &:has(:user-invalid), &[aria-invalid]:not([aria-invalid="false"]), &:has([aria-invalid]:not([aria-invalid="false"])) { - & ~ .validator-hint { - display: revert-layer; - } - } - } - .toggle { - @layer daisyui.l1.l2.l3 { - border: var(--border) solid currentColor; - color: var(--input-color); - position: relative; - display: inline-grid; - flex-shrink: 0; - cursor: pointer; - appearance: none; - place-content: center; - vertical-align: middle; - webkit-user-select: none; - user-select: none; - grid-template-columns: 0fr 1fr 1fr; - --radius-selector-max: calc( - var(--radius-selector) + var(--radius-selector) + var(--radius-selector) - ); - border-radius: calc( var(--radius-selector) + min(var(--toggle-p), var(--radius-selector-max)) + min(var(--border), var(--radius-selector-max)) ); - padding: var(--toggle-p); - box-shadow: 0 1px currentColor inset; - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000) inset; - } - transition: color 0.3s, grid-template-columns 0.2s; - --input-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - --input-color: color-mix(in oklab, var(--color-base-content) 50%, #0000); - } - --toggle-p: calc(var(--size) * 0.125); - --size: calc(var(--size-selector, 0.25rem) * 6); - width: calc((var(--size) * 2) - (var(--border) + var(--toggle-p)) * 2); - height: var(--size); - > * { - z-index: 1; - grid-column: span 1 / span 1; - grid-column-start: 2; - grid-row-start: 1; - height: 100%; - cursor: pointer; - appearance: none; - background-color: transparent; - padding: calc(0.25rem * 0.5); - transition: opacity 0.2s, rotate 0.4s; - border: none; - &:focus { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:nth-child(2) { - color: var(--color-base-100); - rotate: 0deg; - } - &:nth-child(3) { - color: var(--color-base-100); - opacity: 0%; - rotate: -15deg; - } - } - &:has(:checked) { - > :nth-child(2) { - opacity: 0%; - rotate: 15deg; - } - > :nth-child(3) { - opacity: 100%; - rotate: 0deg; - } - } - &:before { - position: relative; - inset-inline-start: calc(0.25rem * 0); - grid-column-start: 2; - grid-row-start: 1; - aspect-ratio: 1 / 1; - height: 100%; - border-radius: var(--radius-selector); - background-color: currentcolor; - translate: 0; - --tw-content: ""; - content: var(--tw-content); - transition: background-color 0.1s, translate 0.2s, inset-inline-start 0.2s; - 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; - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 -1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px color-mix(in oklab, currentColor calc(var(--depth) * 10%), #0000); - } - background-size: auto, calc(var(--noise) * 100%); - background-image: none, var(--fx-noise); - } - @media (forced-colors: active) { - &:before { - outline-style: var(--tw-outline-style); - outline-width: 1px; - outline-offset: calc(1px * -1); - } - } - @media print { - &:before { - outline: 0.25rem solid; - outline-offset: -1rem; - } - } - &:focus-visible, &:has(:focus-visible) { - outline: 2px solid currentColor; - outline-offset: 2px; - } - &:checked, &[aria-checked="true"], &:has(> input:checked) { - grid-template-columns: 1fr 1fr 0fr; - background-color: var(--color-base-100); - --input-color: var(--color-base-content); - &:before { - background-color: currentcolor; - } - @starting-style { - &:before { - opacity: 0; - } - } - } - &:indeterminate { - grid-template-columns: 0.5fr 1fr 0.5fr; - } - &:disabled { - cursor: not-allowed; - opacity: 30%; - &:before { - background-color: transparent; - border: var(--border) solid currentColor; - } - } - } - } - .input { - @layer daisyui.l1.l2.l3 { - cursor: text; - border: var(--border) solid #0000; - position: relative; - display: inline-flex; - flex-shrink: 1; - appearance: none; - align-items: center; - gap: calc(0.25rem * 2); - background-color: var(--color-base-100); - padding-inline: calc(0.25rem * 3); - vertical-align: middle; - white-space: nowrap; - width: clamp(3rem, 20rem, 100%); - height: var(--size); - font-size: max(var(--font-size, 0.875rem), 0.875rem); - touch-action: manipulation; - border-start-start-radius: var(--join-ss, var(--radius-field)); - border-start-end-radius: var(--join-se, var(--radius-field)); - border-end-start-radius: var(--join-es, var(--radius-field)); - border-end-end-radius: var(--join-ee, var(--radius-field)); - border-color: var(--input-color); - box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset; - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset; - } - --size: calc(var(--size-field, 0.25rem) * 10); - --input-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - --input-color: color-mix(in oklab, var(--color-base-content) 20%, #0000); - } - &:where(input) { - display: inline-flex; - } - :where(input) { - display: inline-flex; - height: 100%; - width: 100%; - appearance: none; - background-color: transparent; - border: none; - &:focus, &:focus-within { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - } - :where(input[type="url"]), :where(input[type="email"]) { - direction: ltr; - } - :where(input[type="date"]) { - display: inline-flex; - } - &:focus, &:focus-within { - --input-color: var(--color-base-content); - box-shadow: 0 1px var(--input-color); - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000); - } - outline: 2px solid var(--input-color); - outline-offset: 2px; - isolation: isolate; - } - @media (pointer: coarse) { - @supports (-webkit-touch-callout: none) { - &:focus, &:focus-within { - --font-size: 1rem; - } - } - } - &:has(> input[disabled]), &:is(:disabled, [disabled]), fieldset:disabled & { - cursor: not-allowed; - border-color: var(--color-base-200); - background-color: var(--color-base-200); - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 40%, transparent); - } - &::placeholder { - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 20%, transparent); - } - } - box-shadow: none; - } - &:has(> input[disabled]) > input[disabled] { - cursor: not-allowed; - } - &::-webkit-date-and-time-value { - text-align: inherit; - } - &[type="number"] { - &::-webkit-inner-spin-button { - margin-block: calc(0.25rem * -3); - margin-inline-end: calc(0.25rem * -3); - } - } - &::-webkit-calendar-picker-indicator { - position: absolute; - inset-inline-end: 0.75em; - } - &:has(> input[type="date"]) { - :where(input[type="date"]) { - display: inline-flex; - webkit-appearance: none; - appearance: none; - } - input[type="date"]::-webkit-calendar-picker-indicator { - position: absolute; - inset-inline-end: 0.75em; - width: 1em; - height: 1em; - cursor: pointer; - } - } - } - } - .table { - @layer daisyui.l1.l2.l3 { - font-size: 0.875rem; - position: relative; - width: 100%; - border-collapse: separate; - --tw-border-spacing-x: calc(0.25rem * 0); - --tw-border-spacing-y: calc(0.25rem * 0); - border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y); - border-radius: var(--radius-box); - text-align: left; - &:where(:dir(rtl), [dir="rtl"], [dir="rtl"] *) { - text-align: right; - } - tr.row-hover { - &, &:nth-child(even) { - &:hover { - @media (hover: hover) { - background-color: var(--color-base-200); - } - } - } - } - :where(th, td) { - padding-inline: calc(0.25rem * 4); - padding-block: calc(0.25rem * 3); - vertical-align: middle; - } - :where(thead, tfoot) { - white-space: nowrap; - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 60%, transparent); - } - font-size: 0.875rem; - font-weight: 600; - } - :where(tfoot tr:first-child :is(td, th)) { - border-top: var(--border) solid var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - border-top: var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000); - } - } - :where(.table-pin-rows thead tr) { - position: sticky; - top: calc(0.25rem * 0); - z-index: 1; - background-color: var(--color-base-100); - } - :where(.table-pin-rows tfoot tr) { - position: sticky; - bottom: calc(0.25rem * 0); - z-index: 1; - background-color: var(--color-base-100); - } - :where(.table-pin-cols tr th) { - position: sticky; - right: calc(0.25rem * 0); - left: calc(0.25rem * 0); - background-color: var(--color-base-100); - } - :where(thead tr :is(td, th), tbody tr:not(:last-child) :is(td, th)) { - border-bottom: var(--border) solid var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - border-bottom: var(--border) solid color-mix(in oklch, var(--color-base-content) 5%, #0000); - } - } - } - } - .steps { - @layer daisyui.l1.l2.l3 { - display: inline-grid; - grid-auto-flow: column; - overflow: hidden; - overflow-x: auto; - counter-reset: step; - grid-auto-columns: 1fr; - .step { - display: grid; - grid-template-columns: repeat(1, minmax(0, 1fr)); - grid-template-columns: auto; - grid-template-rows: repeat(2, minmax(0, 1fr)); - grid-template-rows: 40px 1fr; - place-items: center; - text-align: center; - min-width: 4rem; - --step-bg: var(--color-base-300); - --step-fg: var(--color-base-content); - &:before { - top: calc(0.25rem * 0); - grid-column-start: 1; - grid-row-start: 1; - height: calc(0.25rem * 2); - width: 100%; - border: 1px solid; - color: var(--step-bg); - background-color: var(--step-bg); - content: ""; - margin-inline-start: -100%; - } - > .step-icon, &:not(:has(.step-icon)):after { - --tw-content: counter(step); - content: var(--tw-content); - counter-increment: step; - z-index: 1; - color: var(--step-fg); - background-color: var(--step-bg); - border: 1px solid var(--step-bg); - position: relative; - grid-column-start: 1; - grid-row-start: 1; - display: grid; - height: calc(0.25rem * 8); - width: calc(0.25rem * 8); - place-items: center; - place-self: center; - border-radius: calc(infinity * 1px); - } - &:first-child:before { - --tw-content: none; - content: var(--tw-content); - } - &[data-content]:after { - --tw-content: attr(data-content); - content: var(--tw-content); - } - } - } - @layer daisyui.l1.l2 { - .step-neutral { - + .step-neutral:before, &:after, > .step-icon { - --step-bg: var(--color-neutral); - --step-fg: var(--color-neutral-content); - } - } - .step-primary { - + .step-primary:before, &:after, > .step-icon { - --step-bg: var(--color-primary); - --step-fg: var(--color-primary-content); - } - } - .step-secondary { - + .step-secondary:before, &:after, > .step-icon { - --step-bg: var(--color-secondary); - --step-fg: var(--color-secondary-content); - } - } - .step-accent { - + .step-accent:before, &:after, > .step-icon { - --step-bg: var(--color-accent); - --step-fg: var(--color-accent-content); - } - } - .step-info { - + .step-info:before, &:after, > .step-icon { - --step-bg: var(--color-info); - --step-fg: var(--color-info-content); - } - } - .step-success { - + .step-success:before, &:after, > .step-icon { - --step-bg: var(--color-success); - --step-fg: var(--color-success-content); - } - } - .step-warning { - + .step-warning:before, &:after, > .step-icon { - --step-bg: var(--color-warning); - --step-fg: var(--color-warning-content); - } - } - .step-error { - + .step-error:before, &:after, > .step-icon { - --step-bg: var(--color-error); - --step-fg: var(--color-error-content); - } - } - } - } - .select { - @layer daisyui.l1.l2.l3 { - border: var(--border) solid #0000; - position: relative; - display: inline-flex; - flex-shrink: 1; - appearance: none; - align-items: center; - gap: calc(0.25rem * 1.5); - background-color: var(--color-base-100); - padding-inline-start: calc(0.25rem * 3); - padding-inline-end: calc(0.25rem * 7); - vertical-align: middle; - width: clamp(3rem, 20rem, 100%); - height: var(--size); - font-size: 0.875rem; - touch-action: manipulation; - border-start-start-radius: var(--join-ss, var(--radius-field)); - border-start-end-radius: var(--join-se, var(--radius-field)); - border-end-start-radius: var(--join-es, var(--radius-field)); - border-end-end-radius: var(--join-ee, var(--radius-field)); - background-image: linear-gradient(45deg, #0000 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, #0000 50%); - background-position: calc(100% - 20px) calc(1px + 50%), calc(100% - 16.1px) calc(1px + 50%); - background-size: 4px 4px, 4px 4px; - background-repeat: no-repeat; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - box-shadow: 0 1px var(--input-color) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset; - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000) inset, 0 -1px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset; - } - border-color: var(--input-color); - --input-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - --input-color: color-mix(in oklab, var(--color-base-content) 20%, #0000); - } - --size: calc(var(--size-field, 0.25rem) * 10); - [dir="rtl"] & { - background-position: calc(0% + 12px) calc(1px + 50%), calc(0% + 16px) calc(1px + 50%); - &::picker(select), select::picker(select) { - translate: 0.5rem 0; - } - } - &[multiple] { - height: auto; - overflow: auto; - padding-block: calc(0.25rem * 3); - padding-inline-end: calc(0.25rem * 3); - background-image: none; - } - select { - margin-inline-start: calc(0.25rem * -3); - margin-inline-end: calc(0.25rem * -7); - width: calc(100% + 2.75rem); - appearance: none; - padding-inline-start: calc(0.25rem * 3); - padding-inline-end: calc(0.25rem * 7); - height: calc(100% - calc(var(--border) * 2)); - align-items: center; - background: inherit; - border-radius: inherit; - border-style: none; - &:focus, &:focus-within { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:not(:last-child) { - margin-inline-end: calc(0.25rem * -5.5); - background-image: none; - } - } - &:focus, &:focus-within { - --input-color: var(--color-base-content); - box-shadow: 0 1px var(--input-color); - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 1px color-mix(in oklab, var(--input-color) calc(var(--depth) * 10%), #0000); - } - outline: 2px solid var(--input-color); - outline-offset: 2px; - isolation: isolate; - } - &:has(> select[disabled]), &:is(:disabled, [disabled]), fieldset:disabled & { - cursor: not-allowed; - border-color: var(--color-base-200); - background-color: var(--color-base-200); - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 40%, transparent); - } - &::placeholder { - color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-base-content) 20%, transparent); - } - } - } - &:has(> select[disabled]) > select[disabled] { - cursor: not-allowed; - } - &, & select { - @supports (appearance: base-select) { - appearance: base-select; - } - @supports (appearance: base-select) { - &::picker(select) { - appearance: base-select; - } - } - &::picker(select) { - color: inherit; - max-height: min(24rem, 70dvh); - margin-inline: 0.5rem; - translate: -0.5rem 0; - border: var(--border) solid var(--color-base-200); - margin-block: calc(0.25rem * 2); - border-radius: var(--radius-box); - padding: calc(0.25rem * 2); - background-color: inherit; - box-shadow: 0 2px calc(var(--depth) * 3px) -2px oklch(0% 0 0/0.2); - box-shadow: 0 20px 25px -5px rgb(0 0 0 / calc(var(--depth) * 0.1)), 0 8px 10px -6px rgb(0 0 0 / calc(var(--depth) * 0.1)); - } - &::picker-icon { - display: none; - } - optgroup { - padding-top: 0.5em; - option { - &:nth-child(1) { - margin-top: 0.5em; - } - } - } - option { - border-radius: var(--radius-field); - padding-inline: calc(0.25rem * 3); - padding-block: calc(0.25rem * 1.5); - transition-property: color, background-color; - transition-duration: 0.2s; - transition-timing-function: cubic-bezier(0, 0, 0.2, 1); - white-space: normal; - &:not(:disabled) { - &:hover, &:focus-visible { - cursor: pointer; - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 10%, transparent); - } - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:active { - background-color: var(--color-neutral); - color: var(--color-neutral-content); - box-shadow: 0 2px calc(var(--depth) * 3px) -2px var(--color-neutral); - } - } - } - } - } - } - .checkbox { - @layer daisyui.l1.l2.l3 { - border: var(--border) solid var(--input-color, var(--color-base-content)); - @supports (color: color-mix(in lab, red, red)) { - border: var(--border) solid var(--input-color, color-mix(in oklab, var(--color-base-content) 20%, #0000)); - } - position: relative; - display: inline-block; - flex-shrink: 0; - cursor: pointer; - appearance: none; - border-radius: var(--radius-selector); - padding: calc(0.25rem * 1); - vertical-align: middle; - color: var(--color-base-content); - box-shadow: 0 1px oklch(0% 0 0 / calc(var(--depth) * 0.1)) inset, 0 0 #0000 inset, 0 0 #0000; - transition: background-color 0.2s, box-shadow 0.2s; - --size: calc(var(--size-selector, 0.25rem) * 6); - width: var(--size); - height: var(--size); - background-size: auto, calc(var(--noise) * 100%); - background-image: none, var(--fx-noise); - &:before { - --tw-content: ""; - content: var(--tw-content); - display: block; - width: 100%; - height: 100%; - rotate: 45deg; - background-color: currentcolor; - opacity: 0%; - transition: clip-path 0.3s, opacity 0.1s, rotate 0.3s, translate 0.3s; - transition-delay: 0.1s; - clip-path: polygon(20% 100%, 20% 80%, 50% 80%, 50% 80%, 70% 80%, 70% 100%); - box-shadow: 0px 3px 0 0px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset; - font-size: 1rem; - line-height: 0.75; - } - &:focus-visible { - outline: 2px solid var(--input-color, currentColor); - outline-offset: 2px; - } - &:checked, &[aria-checked="true"] { - background-color: var(--input-color, #0000); - box-shadow: 0 0 #0000 inset, 0 8px 0 -4px oklch(100% 0 0 / calc(var(--depth) * 0.1)) inset, 0 1px oklch(0% 0 0 / calc(var(--depth) * 0.1)); - &:before { - clip-path: polygon(20% 100%, 20% 80%, 50% 80%, 50% 0%, 70% 0%, 70% 100%); - opacity: 100%; - } - @media (forced-colors: active) { - &:before { - rotate: 0deg; - background-color: transparent; - --tw-content: "✔︎"; - clip-path: none; - } - } - @media print { - &:before { - rotate: 0deg; - background-color: transparent; - --tw-content: "✔︎"; - clip-path: none; - } - } - } - &:indeterminate { - background-color: var( --input-color, var(--color-base-content) ); - @supports (color: color-mix(in lab, red, red)) { - background-color: var( --input-color, color-mix(in oklab, var(--color-base-content) 20%, #0000) ); - } - &:before { - rotate: 0deg; - opacity: 100%; - translate: 0 -35%; - clip-path: polygon(20% 100%, 20% 80%, 50% 80%, 50% 80%, 80% 80%, 80% 100%); - } - } - } - &:disabled { - @layer daisyui.l1.l2 { - cursor: not-allowed; - opacity: 20%; - } - } - } - .navbar { - @layer daisyui.l1.l2.l3 { - display: flex; - width: 100%; - align-items: center; - padding: 0.5rem; - min-height: 4rem; - } - :where(&) { - @layer daisyui.l1.l2 { - position: relative; - } - } - } - .drawer { - @layer daisyui.l1.l2.l3 { - position: relative; - display: grid; - width: 100%; - grid-auto-columns: max-content auto; - } - } - .card { - @layer daisyui.l1.l2.l3 { - position: relative; - display: flex; - flex-direction: column; - border-radius: var(--radius-box); - outline-width: 2px; - transition: outline 0.2s ease-in-out; - outline: 0 solid #0000; - outline-offset: 2px; - &:focus { - --tw-outline-style: none; - outline-style: none; - @media (forced-colors: active) { - outline: 2px solid transparent; - outline-offset: 2px; - } - } - &:focus-visible { - outline-color: currentColor; - } - :where(figure:first-child) { - overflow: hidden; - border-start-start-radius: inherit; - border-start-end-radius: inherit; - border-end-start-radius: unset; - border-end-end-radius: unset; - } - :where(figure:last-child) { - overflow: hidden; - border-start-start-radius: unset; - border-start-end-radius: unset; - border-end-start-radius: inherit; - border-end-end-radius: inherit; - } - figure { - display: flex; - align-items: center; - justify-content: center; - } - &:has(> input:is(input[type="checkbox"], input[type="radio"])) { - cursor: pointer; - user-select: none; - } - &:has(> :checked) { - outline: 2px solid currentColor; - } - } - } - .absolute { - position: absolute; - } - .static { - position: static; - } - .tooltip-left { - @layer daisyui.l1.l2 { - > .tooltip-content, &[data-tip]:before { - transform: translateX(calc(var(--tt-pos, 0.25rem) - 0.25rem)) translateY(-50%); - inset: 50% var(--tt-off) auto auto; - } - &:after { - transform: translateX(var(--tt-pos, 0.25rem)) translateY(-50%) rotate(-90deg); - inset: 50% calc(var(--tt-tail) + 1px) auto auto; - } - } - } - .top-2 { - top: calc(var(--spacing) * 2); - } - .right-2 { - right: calc(var(--spacing) * 2); - } - .join { - display: inline-flex; - align-items: stretch; - --join-ss: 0; - --join-se: 0; - --join-es: 0; - --join-ee: 0; - :where(.join-item) { - border-start-start-radius: var(--join-ss, 0); - border-start-end-radius: var(--join-se, 0); - border-end-start-radius: var(--join-es, 0); - border-end-end-radius: var(--join-ee, 0); - * { - --join-ss: var(--radius-field); - --join-se: var(--radius-field); - --join-es: var(--radius-field); - --join-ee: var(--radius-field); - } - } - > .join-item:where(:first-child) { - --join-ss: var(--radius-field); - --join-se: 0; - --join-es: var(--radius-field); - --join-ee: 0; - } - :first-child:not(:last-child) { - :where(.join-item) { - --join-ss: var(--radius-field); - --join-se: 0; - --join-es: var(--radius-field); - --join-ee: 0; - } - } - > .join-item:where(:last-child) { - --join-ss: 0; - --join-se: var(--radius-field); - --join-es: 0; - --join-ee: var(--radius-field); - } - :last-child:not(:first-child) { - :where(.join-item) { - --join-ss: 0; - --join-se: var(--radius-field); - --join-es: 0; - --join-ee: var(--radius-field); - } - } - > .join-item:where(:only-child) { - --join-ss: var(--radius-field); - --join-se: var(--radius-field); - --join-es: var(--radius-field); - --join-ee: var(--radius-field); - } - :only-child { - :where(.join-item) { - --join-ss: var(--radius-field); - --join-se: var(--radius-field); - --join-es: var(--radius-field); - --join-ee: var(--radius-field); - } - } - > :where(:focus, :has(:focus)) { - z-index: 1; - } - @media (hover: hover) { - > :where(.btn:hover, :has(.btn:hover)) { - isolation: isolate; - } - } - } - .btn-active { - @layer daisyui.l1.l2 { - --btn-bg: var(--btn-color, var(--color-base-200)); - @supports (color: color-mix(in lab, red, red)) { - --btn-bg: color-mix(in oklab, var(--btn-color, var(--color-base-200)), #000 7%); - } - --btn-shadow: 0 0 0 0 oklch(0% 0 0/0), 0 0 0 0 oklch(0% 0 0/0); - isolation: isolate; - } - } - .modal-backdrop { - @layer daisyui.l1.l2.l3 { - grid-column-start: 1; - grid-row-start: 1; - display: grid; - align-self: stretch; - justify-self: stretch; - color: transparent; - z-index: -1; - button { - cursor: pointer; - } - } - } - .col-span-2 { - grid-column: span 2 / span 2; - } - .modal-box { - @layer daisyui.l1.l2.l3 { - grid-column-start: 1; - grid-row-start: 1; - max-height: 100vh; - width: calc(11/12 * 100%); - max-width: 32rem; - background-color: var(--color-base-100); - padding: calc(0.25rem * 6); - transition: translate 0.3s ease-out, scale 0.3s ease-out, opacity 0.2s ease-out 0.05s, box-shadow 0.3s ease-out; - border-top-left-radius: var(--modal-tl, var(--radius-box)); - border-top-right-radius: var(--modal-tr, var(--radius-box)); - border-bottom-left-radius: var(--modal-bl, var(--radius-box)); - border-bottom-right-radius: var(--modal-br, var(--radius-box)); - scale: 95%; - opacity: 0; - box-shadow: oklch(0% 0 0/ 0.25) 0px 25px 50px -12px; - overflow-y: auto; - overscroll-behavior: contain; - } - } - .drawer-content { - @layer daisyui.l1.l2.l3 { - grid-column-start: 2; - grid-row-start: 1; - min-width: calc(0.25rem * 0); - } - } - .container { - width: 100%; - @media (width >= 40rem) { - max-width: 40rem; - } - @media (width >= 48rem) { - max-width: 48rem; - } - @media (width >= 64rem) { - max-width: 64rem; - } - @media (width >= 80rem) { - max-width: 80rem; - } - @media (width >= 96rem) { - max-width: 96rem; - } - } - .m-4 { - margin: calc(var(--spacing) * 4); - } - .m-6 { - margin: calc(var(--spacing) * 6); - } - .filter { - @layer daisyui.l1.l2.l3 { - display: flex; - flex-wrap: wrap; - input[type="radio"] { - width: auto; - } - input { - overflow: hidden; - opacity: 100%; - scale: 1; - transition: margin 0.1s, opacity 0.3s, padding 0.3s, border-width 0.1s; - &:not(:last-child) { - margin-inline-end: calc(0.25rem * 1); - } - &.filter-reset { - aspect-ratio: 1 / 1; - &::after { - --tw-content: "×"; - content: var(--tw-content); - } - } - } - &:not(:has(input:checked:not(.filter-reset))) { - .filter-reset, input[type="reset"] { - scale: 0; - border-width: 0; - margin-inline: calc(0.25rem * 0); - width: calc(0.25rem * 0); - padding-inline: calc(0.25rem * 0); - opacity: 0%; - } - } - &:has(input:checked:not(.filter-reset)) { - input:not(:checked, .filter-reset, input[type="reset"]) { - scale: 0; - border-width: 0; - margin-inline: calc(0.25rem * 0); - width: calc(0.25rem * 0); - padding-inline: calc(0.25rem * 0); - opacity: 0%; - } - } - } - } - .mx-2 { - margin-inline: calc(var(--spacing) * 2); - } - .mx-auto { - margin-inline: auto; - } - .my-1\.5 { - margin-block: calc(var(--spacing) * 1.5); - } - .my-2 { - margin-block: calc(var(--spacing) * 2); - } - .label { - @layer daisyui.l1.l2.l3 { - display: inline-flex; - align-items: center; - gap: calc(0.25rem * 1.5); - white-space: nowrap; - color: currentcolor; - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, currentcolor 60%, transparent); - } - &:has(input) { - cursor: pointer; - } - &:is(.input > *, .select > *) { - display: flex; - height: calc(100% - 0.5rem); - align-items: center; - padding-inline: calc(0.25rem * 3); - white-space: nowrap; - font-size: inherit; - &:first-child { - margin-inline-start: calc(0.25rem * -3); - margin-inline-end: calc(0.25rem * 3); - border-inline-end: var(--border) solid currentColor; - @supports (color: color-mix(in lab, red, red)) { - border-inline-end: var(--border) solid color-mix(in oklab, currentColor 10%, #0000); - } - } - &:last-child { - margin-inline-start: calc(0.25rem * 3); - margin-inline-end: calc(0.25rem * -3); - border-inline-start: var(--border) solid currentColor; - @supports (color: color-mix(in lab, red, red)) { - border-inline-start: var(--border) solid color-mix(in oklab, currentColor 10%, #0000); - } - } - } - } - } - .join-item { - &:where(*:not(:first-child, :disabled, [disabled], .btn-disabled)) { - margin-inline-start: calc(var(--border, 1px) * -1); - margin-block-start: 0; - } - &:where(*:is(:disabled, [disabled], .btn-disabled)) { - border-width: var(--border, 1px) 0 var(--border, 1px) var(--border, 1px); - } - } - .ms-4 { - margin-inline-start: calc(var(--spacing) * 4); - } - .me-4 { - margin-inline-end: calc(var(--spacing) * 4); - } - .mt-4 { - margin-top: calc(var(--spacing) * 4); - } - .mt-6 { - margin-top: calc(var(--spacing) * 6); - } - .mt-auto { - margin-top: auto; - } - .mb-6 { - margin-bottom: calc(var(--spacing) * 6); - } - .status { - @layer daisyui.l1.l2.l3 { - display: inline-block; - aspect-ratio: 1 / 1; - width: calc(0.25rem * 2); - height: calc(0.25rem * 2); - border-radius: var(--radius-selector); - background-color: var(--color-base-content); - @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-base-content) 20%, transparent); - } - background-position: center; - background-repeat: no-repeat; - vertical-align: middle; - color: color-mix(in srgb, #000 30%, transparent); - @supports (color: color-mix(in lab, red, red)) { - color: color-mix(in oklab, var(--color-black) 30%, transparent); - } - background-image: radial-gradient( circle at 35% 30%, oklch(1 0 0 / calc(var(--depth) * 0.5)), #0000 ); - box-shadow: 0 2px 3px -1px currentColor; - @supports (color: color-mix(in lab, red, red)) { - box-shadow: 0 2px 3px -1px color-mix(in oklab, currentColor calc(var(--depth) * 100%), #0000); - } - } - } - .badge { - @layer daisyui.l1.l2.l3 { - display: inline-flex; - align-items: center; - justify-content: center; - gap: calc(0.25rem * 2); - border-radius: var(--radius-selector); - vertical-align: middle; - color: var(--badge-fg); - border: var(--border) solid var(--badge-color, var(--color-base-200)); - font-size: 0.875rem; - width: fit-content; - background-size: auto, calc(var(--noise) * 100%); - background-image: none, var(--fx-noise); - background-color: var(--badge-bg); - --badge-bg: var(--badge-color, var(--color-base-100)); - --badge-fg: var(--color-base-content); - --size: calc(var(--size-selector, 0.25rem) * 6); - height: var(--size); - padding-inline: calc(var(--size) / 2 - var(--border)); - } - } - .card-body { - @layer daisyui.l1.l2.l3 { - display: flex; - flex: auto; - flex-direction: column; - gap: calc(0.25rem * 2); - padding: var(--card-p, 1.5rem); - font-size: var(--card-fs, 0.875rem); - :where(p) { - flex-grow: 1; - } - } - } - .card-actions { - @layer daisyui.l1.l2.l3 { - display: flex; - flex-wrap: wrap; - align-items: flex-start; - gap: calc(0.25rem * 2); - } - } - .card-title { - @layer daisyui.l1.l2.l3 { - display: flex; - align-items: center; - gap: calc(0.25rem * 2); - font-size: var(--cardtitle-fs, 1.125rem); - font-weight: 600; - } - } - .contents { - display: contents; - } - .flex { - display: flex; - } - .grid { - display: grid; - } - .hidden { - display: none; - } - .inline-block { - display: inline-block; - } - .table { - display: table; - } - .btn-circle { - @layer daisyui.l1.l2 { - border-radius: calc(infinity * 1px); - padding-inline: calc(0.25rem * 0); - width: var(--size); - height: var(--size); - } - } - .btn-square { - @layer daisyui.l1.l2 { - padding-inline: calc(0.25rem * 0); - width: var(--size); - height: var(--size); - } - } - .size-4 { - width: calc(var(--spacing) * 4); - height: calc(var(--spacing) * 4); - } - .size-7 { - width: calc(var(--spacing) * 7); - height: calc(var(--spacing) * 7); - } - .h-\[1em\] { - height: 1em; - } - .h-full { - height: 100%; - } - .h-screen { - height: 100vh; - } - .min-h-full { - min-height: 100%; - } - .btn-block { - @layer daisyui.l1.l2 { - width: 100%; - } - } - .w-full { - width: 100%; - } - .grow { - flex-grow: 1; - } - .grid-cols-1 { - grid-template-columns: repeat(1, minmax(0, 1fr)); - } - .grid-cols-5 { - grid-template-columns: repeat(5, minmax(0, 1fr)); - } - .flex-col { - flex-direction: column; - } - .items-baseline { - align-items: baseline; - } - .items-center { - align-items: center; - } - .items-end { - align-items: flex-end; - } - .items-start { - align-items: flex-start; - } - .justify-between { - justify-content: space-between; - } - .justify-center { - justify-content: center; - } - .justify-end { - justify-content: flex-end; - } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .gap-4 { - gap: calc(var(--spacing) * 4); - } - .space-y-4 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-6 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-x-2 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse))); - } - } - .space-x-4 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); - } - } - .space-x-6 { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse))); - } - } - .overflow-x-auto { - overflow-x: auto; - } - .rounded-box { - border-radius: var(--radius-box); - } - .rounded-box { - border-radius: var(--radius-box); - } - .rounded-lg { - border-radius: var(--radius-lg); - } - .rounded-md { - border-radius: var(--radius-md); - } - .border { - border-style: var(--tw-border-style); - border-width: 1px; - } - .border-b { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - .badge-outline { - @layer daisyui.l1.l2 { - color: var(--badge-color); - --badge-bg: #0000; - background-image: none; - border-color: currentColor; - } - } - .border-gray-200 { - border-color: var(--color-gray-200); - } - .border-primary { - border-color: var(--color-primary); - } - .border-secondary { - border-color: var(--color-secondary); - } - .table-zebra { - @layer daisyui.l1.l2 { - tbody { - tr { - &:where(:nth-child(even)) { - background-color: var(--color-base-200); - :where(.table-pin-cols tr th) { - background-color: var(--color-base-200); - } - } - &.row-hover { - &, &:where(:nth-child(even)) { - &:hover { - @media (hover: hover) { - background-color: var(--color-base-300); - } - } - } - } - } - } - } - } - .bg-base-100 { - background-color: var(--color-base-100); - } - .bg-base-200 { - background-color: var(--color-base-200); - } - .bg-base-300 { - background-color: var(--color-base-300); - } - .bg-red-500 { - background-color: var(--color-red-500); - } - .bg-white { - background-color: var(--color-white); - } - .loading-spinner { - @layer daisyui.l1.l2 { - mask-image: url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E"); - } - } - .p-4 { - padding: calc(var(--spacing) * 4); - } - .px-3 { - padding-inline: calc(var(--spacing) * 3); - } - .px-4 { - padding-inline: calc(var(--spacing) * 4); - } - .py-1\.5 { - padding-block: calc(var(--spacing) * 1.5); - } - .py-2 { - padding-block: calc(var(--spacing) * 2); - } - .py-4 { - padding-block: calc(var(--spacing) * 4); - } - .ps-2 { - padding-inline-start: calc(var(--spacing) * 2); - } - .pe-2 { - padding-inline-end: calc(var(--spacing) * 2); - } - .pt-6 { - padding-top: calc(var(--spacing) * 6); - } - .pb-4 { - padding-bottom: calc(var(--spacing) * 4); - } - .pb-6 { - padding-bottom: calc(var(--spacing) * 6); - } - .text-2xl { - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - } - .text-3xl { - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - } - .text-4xl { - font-size: var(--text-4xl); - line-height: var(--tw-leading, var(--text-4xl--line-height)); - } - .text-lg { - font-size: var(--text-lg); - line-height: var(--tw-leading, var(--text-lg--line-height)); - } - .text-sm { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - .text-xl { - font-size: var(--text-xl); - line-height: var(--tw-leading, var(--text-xl--line-height)); - } - .badge-lg { - @layer daisyui.l1.l2 { - --size: calc(var(--size-selector, 0.25rem) * 7); - font-size: 1rem; - } - } - .badge-xl { - @layer daisyui.l1.l2 { - --size: calc(var(--size-selector, 0.25rem) * 8); - font-size: 1.125rem; - } - } - .font-bold { - --tw-font-weight: var(--font-weight-bold); - font-weight: var(--font-weight-bold); - } - .text-error { - color: var(--color-error); - } - .text-gray-400 { - color: var(--color-gray-400); - } - .text-green-400 { - color: var(--color-green-400); - } - .text-info { - color: var(--color-info); - } - .text-primary { - color: var(--color-primary); - } - .text-secondary { - color: var(--color-secondary); - } - .text-slate-900 { - color: var(--color-slate-900); - } - .text-success { - color: var(--color-success); - } - .text-white { - color: var(--color-white); - } - .lowercase { - text-transform: lowercase; - } - .uppercase { - text-transform: uppercase; - } - .italic { - font-style: italic; - } - .btn-link { - .prose :where(&):not(:where([class~="not-prose"], [class~="not-prose"] *)) { - text-decoration-line: none; - } - @layer daisyui.l1 { - text-decoration-line: underline; - outline-color: currentcolor; - --btn-border: #0000; - --btn-bg: #0000; - --btn-noise: none; - --btn-shadow: ""; - &:not(.btn-disabled, .btn:disabled, .btn[disabled]) { - --btn-fg: var(--btn-color, var(--color-primary)); - } - &:is(.btn-active, :hover, :active:focus, :focus-visible) { - --btn-border: #0000; - --btn-bg: #0000; - } - } - } - .opacity-50 { - opacity: 50%; - } - .shadow-lg { - --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .shadow-sm { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .outline-1 { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - .-outline-offset-1 { - outline-offset: calc(1px * -1); - } - .btn-ghost { - @layer daisyui.l1 { - &:not(.btn-active, :hover, :active:focus, :focus-visible, input:checked:not(.filter .btn)) { - --btn-shadow: ""; - --btn-bg: #0000; - --btn-border: #0000; - --btn-noise: none; - &:not(:disabled, [disabled], .btn-disabled) { - outline-color: currentcolor; - --btn-fg: var(--btn-color, currentColor); - } - } - @media (hover: none) { - &:not(.btn-active, :active, :focus-visible, input:checked:not(.filter .btn)):hover { - outline-color: currentcolor; - --btn-shadow: ""; - --btn-bg: #0000; - --btn-fg: var(--btn-color, currentColor); - --btn-border: #0000; - --btn-noise: none; - } - } - } - } - .outline-slate-300 { - outline-color: var(--color-slate-300); - } - .filter { - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .btn-soft { - @layer daisyui.l1 { - &:not( .btn-active, :hover, :active:focus, :focus-visible, input:checked:not(.filter .btn), :disabled, [disabled], .btn-disabled ) { - --btn-shadow: ""; - --btn-fg: var(--btn-color, var(--color-base-content)); - --btn-bg: var(--btn-color, var(--color-base-content)); - @supports (color: color-mix(in lab, red, red)) { - --btn-bg: color-mix( - in oklab, - var(--btn-color, var(--color-base-content)) 8%, - var(--color-base-100) - ); - } - --btn-border: var(--btn-color, var(--color-base-content)); - @supports (color: color-mix(in lab, red, red)) { - --btn-border: color-mix( - in oklab, - var(--btn-color, var(--color-base-content)) 10%, - var(--color-base-100) - ); - } - --btn-noise: none; - } - @media (hover: none) { - &:not(.btn-active, :active, :focus-visible, input:checked:not(.filter .btn)):hover { - --btn-shadow: ""; - --btn-fg: var(--btn-color, var(--color-base-content)); - --btn-bg: var(--btn-color, var(--color-base-content)); - @supports (color: color-mix(in lab, red, red)) { - --btn-bg: color-mix( - in oklab, - var(--btn-color, var(--color-base-content)) 8%, - var(--color-base-100) - ); - } - --btn-border: var(--btn-color, var(--color-base-content)); - @supports (color: color-mix(in lab, red, red)) { - --btn-border: color-mix( - in oklab, - var(--btn-color, var(--color-base-content)) 10%, - var(--color-base-100) - ); - } - --btn-noise: none; - } - } - } - } - .btn-sm { - @layer daisyui.l1.l2 { - --fontsize: 0.75rem; - --btn-p: 0.75rem; - --size: calc(var(--size-field, 0.25rem) * 8); - } - } - .badge-error { - @layer daisyui.l1.l2 { - --badge-color: var(--color-error); - --badge-fg: var(--color-error-content); - } - } - .badge-info { - @layer daisyui.l1.l2 { - --badge-color: var(--color-info); - --badge-fg: var(--color-info-content); - } - } - .badge-primary { - @layer daisyui.l1.l2 { - --badge-color: var(--color-primary); - --badge-fg: var(--color-primary-content); - } - } - .badge-secondary { - @layer daisyui.l1.l2 { - --badge-color: var(--color-secondary); - --badge-fg: var(--color-secondary-content); - } - } - .badge-success { - @layer daisyui.l1.l2 { - --badge-color: var(--color-success); - --badge-fg: var(--color-success-content); - } - } - .btn-error { - @layer daisyui.l1.l2.l3 { - --btn-color: var(--color-error); - --btn-fg: var(--color-error-content); - } - } - .btn-primary { - @layer daisyui.l1.l2.l3 { - --btn-color: var(--color-primary); - --btn-fg: var(--color-primary-content); - } - } - .btn-secondary { - @layer daisyui.l1.l2.l3 { - --btn-color: var(--color-secondary); - --btn-fg: var(--color-secondary-content); - } - } - .btn-success { - @layer daisyui.l1.l2.l3 { - --btn-color: var(--color-success); - --btn-fg: var(--color-success-content); - } - } - .invalid\:border-red-500 { - &:invalid { - border-color: var(--color-red-500); - } - } - .out-of-range\:border-red-500 { - &:out-of-range { - border-color: var(--color-red-500); - } - } - .hover\:bg-red-600 { - &:hover { - @media (hover: hover) { - background-color: var(--color-red-600); - } - } - } - .focus\:outline { - &:focus { - outline-style: var(--tw-outline-style); - outline-width: 1px; - } - } - .focus\:-outline-offset-2 { - &:focus { - outline-offset: calc(2px * -1); - } - } - .focus\:outline-indigo-600 { - &:focus { - outline-color: var(--color-indigo-600); - } - } - .md\:grid-cols-2 { - @media (width >= 48rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .lg\:drawer-open { - @media (width >= 64rem) { - @layer daisyui.l1.l2.l3 { - > .drawer-toggle:checked { - ~ .drawer-side { - scrollbar-color: revert-layer; - } - :root:has(&) { - --page-overflow: revert-layer; - --page-scroll-gutter: revert-layer; - --page-scroll-bg: revert-layer; - --page-scroll-transition: revert-layer; - --page-has-backdrop: revert-layer; - animation: revert-layer; - animation-timeline: revert-layer; - } - } - } - @layer daisyui.l1.l2 { - > .drawer-side { - overflow-y: auto; - } - > .drawer-toggle { - display: none; - ~ .drawer-side { - pointer-events: auto; - visibility: visible; - position: sticky; - display: block; - width: auto; - overscroll-behavior: auto; - opacity: 100%; - > .drawer-overlay { - cursor: default; - background-color: transparent; - } - } - &:checked ~ .drawer-side { - pointer-events: auto; - visibility: visible; - } - } - } - @layer daisyui.l1 { - > .drawer-toggle ~ .drawer-side > :not(.drawer-overlay) { - translate: 0%; - [dir="rtl"] & { - translate: 0%; - } - } - } - } - } - .lg\:grid-cols-2 { - @media (width >= 64rem) { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - } - .lg\:grid-cols-3 { - @media (width >= 64rem) { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - .xl\:table-cell { - @media (width >= 80rem) { - display: table-cell; - } - } - .\32 xl\:table-cell { - @media (width >= 96rem) { - display: table-cell; - } - } - .dark\:text-white { - @media (prefers-color-scheme: dark) { - color: var(--color-white); - } - } - .is-drawer-close\:tooltip { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - @layer daisyui.l1.l2.l3 { - position: relative; - display: inline-block; - --tt-bg: var(--color-neutral); - --tt-off: calc(100% + 0.5rem); - --tt-tail: calc(100% + 1px + 0.25rem); - & > .tooltip-content, &[data-tip]:before { - position: absolute; - max-width: 20rem; - border-radius: var(--radius-field); - padding-inline: calc(0.25rem * 2); - padding-block: calc(0.25rem * 1); - text-align: center; - white-space: normal; - color: var(--color-neutral-content); - opacity: 0%; - font-size: 0.875rem; - line-height: 1.25; - background-color: var(--tt-bg); - width: max-content; - pointer-events: none; - z-index: 2; - --tw-content: attr(data-tip); - content: var(--tw-content); - } - &:after { - opacity: 0%; - background-color: var(--tt-bg); - content: ""; - pointer-events: none; - width: 0.625rem; - height: 0.25rem; - display: block; - position: absolute; - mask-repeat: no-repeat; - mask-position: -1px 0; - --mask-tooltip: url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A"); - mask-image: var(--mask-tooltip); - } - @media (prefers-reduced-motion: no-preference) { - & > .tooltip-content, &[data-tip]:before, &:after { - transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 75ms; - } - } - &:is([data-tip]:not([data-tip=""]), :has(.tooltip-content:not(:empty))) { - &.tooltip-open, &:hover, &:has(:focus-visible) { - & > .tooltip-content, &[data-tip]:before, &:after { - opacity: 100%; - --tt-pos: 0rem; - @media (prefers-reduced-motion: no-preference) { - transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s, transform 0.2s cubic-bezier(0.4, 0, 0.2, 1) 0s; - } - } - } - } - } - @layer daisyui.l1.l2 { - > .tooltip-content, &[data-tip]:before { - transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)); - inset: auto auto var(--tt-off) 50%; - } - &:after { - transform: translateX(-50%) translateY(var(--tt-pos, 0.25rem)); - inset: auto auto var(--tt-tail) 50%; - } - } - } - } - .is-drawer-close\:tooltip-right { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - @layer daisyui.l1.l2 { - > .tooltip-content, &[data-tip]:before { - transform: translateX(calc(var(--tt-pos, -0.25rem) + 0.25rem)) translateY(-50%); - inset: 50% auto auto var(--tt-off); - } - &:after { - transform: translateX(var(--tt-pos, -0.25rem)) translateY(-50%) rotate(90deg); - inset: 50% auto auto calc(var(--tt-tail) + 1px); - } - } - } - } - .is-drawer-close\:hidden { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - display: none; - } - } - .is-drawer-close\:w-14 { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - width: calc(var(--spacing) * 14); - } - } - .is-drawer-close\:min-w-\[80px\] { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - min-width: 80px; - } - } - .is-drawer-close\:items-center { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - align-items: center; - } - } - .is-drawer-close\:overflow-visible { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - overflow: visible; - } - } - .is-drawer-close\:text-error { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - color: var(--color-error); - } - } - .is-drawer-close\:text-green-400 { - &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { - color: var(--color-green-400); - } - } - .is-drawer-open\:w-64 { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - width: calc(var(--spacing) * 64); - } - } - .is-drawer-open\:min-w-\[340px\] { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - min-width: 340px; - } - } - .is-drawer-open\:justify-between { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - justify-content: space-between; - } - } - .is-drawer-open\:space-x-4 { - &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { - :where(& > :not(:last-child)) { - --tw-space-x-reverse: 0; - margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); - margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); - } - } - } -} -@layer base { - :where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light] { - color-scheme: light; - --color-base-100: oklch(100% 0 0); - --color-base-200: oklch(98% 0 0); - --color-base-300: oklch(95% 0 0); - --color-base-content: oklch(21% 0.006 285.885); - --color-primary: oklch(45% 0.24 277.023); - --color-primary-content: oklch(93% 0.034 272.788); - --color-secondary: oklch(65% 0.241 354.308); - --color-secondary-content: oklch(94% 0.028 342.258); - --color-accent: oklch(77% 0.152 181.912); - --color-accent-content: oklch(38% 0.063 188.416); - --color-neutral: oklch(14% 0.005 285.823); - --color-neutral-content: oklch(92% 0.004 286.32); - --color-info: oklch(74% 0.16 232.661); - --color-info-content: oklch(29% 0.066 243.157); - --color-success: oklch(76% 0.177 163.223); - --color-success-content: oklch(37% 0.077 168.94); - --color-warning: oklch(82% 0.189 84.429); - --color-warning-content: oklch(41% 0.112 45.904); - --color-error: oklch(71% 0.194 13.428); - --color-error-content: oklch(27% 0.105 12.094); - --radius-selector: 0.5rem; - --radius-field: 0.25rem; - --radius-box: 0.5rem; - --size-selector: 0.25rem; - --size-field: 0.25rem; - --border: 1px; - --depth: 1; - --noise: 0; - } -} -@layer base { - @media (prefers-color-scheme: dark) { - :root:not([data-theme]) { - color-scheme: dark; - --color-base-100: oklch(25.33% 0.016 252.42); - --color-base-200: oklch(23.26% 0.014 253.1); - --color-base-300: oklch(21.15% 0.012 254.09); - --color-base-content: oklch(97.807% 0.029 256.847); - --color-primary: oklch(58% 0.233 277.117); - --color-primary-content: oklch(96% 0.018 272.314); - --color-secondary: oklch(65% 0.241 354.308); - --color-secondary-content: oklch(94% 0.028 342.258); - --color-accent: oklch(77% 0.152 181.912); - --color-accent-content: oklch(38% 0.063 188.416); - --color-neutral: oklch(14% 0.005 285.823); - --color-neutral-content: oklch(92% 0.004 286.32); - --color-info: oklch(74% 0.16 232.661); - --color-info-content: oklch(29% 0.066 243.157); - --color-success: oklch(76% 0.177 163.223); - --color-success-content: oklch(37% 0.077 168.94); - --color-warning: oklch(82% 0.189 84.429); - --color-warning-content: oklch(41% 0.112 45.904); - --color-error: oklch(71% 0.194 13.428); - --color-error-content: oklch(27% 0.105 12.094); - --radius-selector: 0.5rem; - --radius-field: 0.25rem; - --radius-box: 0.5rem; - --size-selector: 0.25rem; - --size-field: 0.25rem; - --border: 1px; - --depth: 1; - --noise: 0; - } - } -} -@layer base { - :root:has(input.theme-controller[value=light]:checked),[data-theme=light] { - color-scheme: light; - --color-base-100: oklch(100% 0 0); - --color-base-200: oklch(98% 0 0); - --color-base-300: oklch(95% 0 0); - --color-base-content: oklch(21% 0.006 285.885); - --color-primary: oklch(45% 0.24 277.023); - --color-primary-content: oklch(93% 0.034 272.788); - --color-secondary: oklch(65% 0.241 354.308); - --color-secondary-content: oklch(94% 0.028 342.258); - --color-accent: oklch(77% 0.152 181.912); - --color-accent-content: oklch(38% 0.063 188.416); - --color-neutral: oklch(14% 0.005 285.823); - --color-neutral-content: oklch(92% 0.004 286.32); - --color-info: oklch(74% 0.16 232.661); - --color-info-content: oklch(29% 0.066 243.157); - --color-success: oklch(76% 0.177 163.223); - --color-success-content: oklch(37% 0.077 168.94); - --color-warning: oklch(82% 0.189 84.429); - --color-warning-content: oklch(41% 0.112 45.904); - --color-error: oklch(71% 0.194 13.428); - --color-error-content: oklch(27% 0.105 12.094); - --radius-selector: 0.5rem; - --radius-field: 0.25rem; - --radius-box: 0.5rem; - --size-selector: 0.25rem; - --size-field: 0.25rem; - --border: 1px; - --depth: 1; - --noise: 0; - } -} -@layer base { - :root:has(input.theme-controller[value=dark]:checked),[data-theme=dark] { - color-scheme: dark; - --color-base-100: oklch(25.33% 0.016 252.42); - --color-base-200: oklch(23.26% 0.014 253.1); - --color-base-300: oklch(21.15% 0.012 254.09); - --color-base-content: oklch(97.807% 0.029 256.847); - --color-primary: oklch(58% 0.233 277.117); - --color-primary-content: oklch(96% 0.018 272.314); - --color-secondary: oklch(65% 0.241 354.308); - --color-secondary-content: oklch(94% 0.028 342.258); - --color-accent: oklch(77% 0.152 181.912); - --color-accent-content: oklch(38% 0.063 188.416); - --color-neutral: oklch(14% 0.005 285.823); - --color-neutral-content: oklch(92% 0.004 286.32); - --color-info: oklch(74% 0.16 232.661); - --color-info-content: oklch(29% 0.066 243.157); - --color-success: oklch(76% 0.177 163.223); - --color-success-content: oklch(37% 0.077 168.94); - --color-warning: oklch(82% 0.189 84.429); - --color-warning-content: oklch(41% 0.112 45.904); - --color-error: oklch(71% 0.194 13.428); - --color-error-content: oklch(27% 0.105 12.094); - --radius-selector: 0.5rem; - --radius-field: 0.25rem; - --radius-box: 0.5rem; - --size-selector: 0.25rem; - --size-field: 0.25rem; - --border: 1px; - --depth: 1; - --noise: 0; - } -} -@layer base { - :root { - --fx-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E"); - } -} -@layer base { - :root { - scrollbar-color: currentColor #0000; - @supports (color: color-mix(in lab, red, red)) { - scrollbar-color: color-mix(in oklch, currentColor 35%, #0000) #0000; - } - } -} -@layer base { - @property --radialprogress { - syntax: ""; - inherits: true; - initial-value: 0%; - } -} -@layer base { - :root:not(span) { - overflow: var(--page-overflow); - } -} -@layer base { - :root { - background: var(--page-scroll-bg, var(--root-bg)); - --page-scroll-bg-on: linear-gradient(var(--root-bg, #0000), var(--root-bg, #0000)) - var(--root-bg, #0000); - @supports (color: color-mix(in lab, red, red)) { - --page-scroll-bg-on: linear-gradient(var(--root-bg, #0000), var(--root-bg, #0000)) - color-mix(in srgb, var(--root-bg, #0000), oklch(0% 0 0) calc(var(--page-has-backdrop, 0) * 40%)); - } - --page-scroll-transition-on: background-color 0.3s ease-out; - transition: var(--page-scroll-transition); - scrollbar-gutter: var(--page-scroll-gutter, unset); - scrollbar-gutter: if(style(--page-has-scroll: 1): var(--page-scroll-gutter, unset) ; else: unset); - } - @keyframes set-page-has-scroll { - 0%, to { - --page-has-scroll: 1; - } - } -} -@layer base { - :root, [data-theme] { - background: var(--page-scroll-bg, var(--root-bg)); - color: var(--color-base-content); - } - :where(:root, [data-theme]) { - --root-bg: var(--color-base-100); - } -} -@keyframes rating { - 0%, 40% { - scale: 1.1; - filter: brightness(1.05) contrast(1.05); - } -} -@keyframes dropdown { - 0% { - opacity: 0; - } -} -@keyframes radio { - 0% { - padding: 5px; - } - 50% { - padding: 3px; - } -} -@keyframes toast { - 0% { - scale: 0.9; - opacity: 0; - } - 100% { - scale: 1; - opacity: 1; - } -} -@keyframes rotator { - 89.9999%, 100% { - --first-item-position: 0 0%; - } - 90%, 99.9999% { - --first-item-position: 0 calc(var(--items) * 100%); - } - 100% { - translate: 0 -100%; - } -} -@keyframes skeleton { - 0% { - background-position: 150%; - } - 100% { - background-position: -50%; - } -} -@keyframes menu { - 0% { - opacity: 0; - } -} -@keyframes progress { - 50% { - background-position-x: -115%; - } -} -@property --tw-space-y-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-space-x-reverse { - syntax: "*"; - inherits: false; - initial-value: 0; -} -@property --tw-border-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-font-weight { - syntax: "*"; - inherits: false; -} -@property --tw-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-inset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-ring-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-ring-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-ring-inset { - syntax: "*"; - inherits: false; -} -@property --tw-ring-offset-width { - syntax: ""; - inherits: false; - initial-value: 0px; -} -@property --tw-ring-offset-color { - syntax: "*"; - inherits: false; - initial-value: #fff; -} -@property --tw-ring-offset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-outline-style { - syntax: "*"; - inherits: false; - initial-value: solid; -} -@property --tw-blur { - syntax: "*"; - inherits: false; -} -@property --tw-brightness { - syntax: "*"; - inherits: false; -} -@property --tw-contrast { - syntax: "*"; - inherits: false; -} -@property --tw-grayscale { - syntax: "*"; - inherits: false; -} -@property --tw-hue-rotate { - syntax: "*"; - inherits: false; -} -@property --tw-invert { - syntax: "*"; - inherits: false; -} -@property --tw-opacity { - syntax: "*"; - inherits: false; -} -@property --tw-saturate { - syntax: "*"; - inherits: false; -} -@property --tw-sepia { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-drop-shadow-alpha { - syntax: ""; - inherits: false; - initial-value: 100%; -} -@property --tw-drop-shadow-size { - syntax: "*"; - inherits: false; -} -@layer properties { - @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { - *, ::before, ::after, ::backdrop { - --tw-space-y-reverse: 0; - --tw-space-x-reverse: 0; - --tw-border-style: solid; - --tw-font-weight: initial; - --tw-shadow: 0 0 #0000; - --tw-shadow-color: initial; - --tw-shadow-alpha: 100%; - --tw-inset-shadow: 0 0 #0000; - --tw-inset-shadow-color: initial; - --tw-inset-shadow-alpha: 100%; - --tw-ring-color: initial; - --tw-ring-shadow: 0 0 #0000; - --tw-inset-ring-color: initial; - --tw-inset-ring-shadow: 0 0 #0000; - --tw-ring-inset: initial; - --tw-ring-offset-width: 0px; - --tw-ring-offset-color: #fff; - --tw-ring-offset-shadow: 0 0 #0000; - --tw-outline-style: solid; - --tw-blur: initial; - --tw-brightness: initial; - --tw-contrast: initial; - --tw-grayscale: initial; - --tw-hue-rotate: initial; - --tw-invert: initial; - --tw-opacity: initial; - --tw-saturate: initial; - --tw-sepia: initial; - --tw-drop-shadow: initial; - --tw-drop-shadow-color: initial; - --tw-drop-shadow-alpha: 100%; - --tw-drop-shadow-size: initial; - } - } -}