diff --git a/.gitignore b/.gitignore index 7897dc6b..e2d9e5d6 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ yarn-error.log* # Vector store manifest scripts/.vector-manifest.json +gitcoin_co_30/.next/ # Vercel .vercel diff --git a/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css b/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css new file mode 100644 index 00000000..97fa54c7 --- /dev/null +++ b/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css @@ -0,0 +1,5495 @@ +/* [next]/internal/font/google/inter_b2991b2.module.css [app-client] (css) */ +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/2c55a0e60120577a-s.2a48534a.woff2") format("woff2"); + unicode-range: U+460-52F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/9c72aa0f40e4eef8-s.18a48cbc.woff2") format("woff2"); + unicode-range: U+301, U+400-45F, U+490-491, U+4B0-4B1, U+2116; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/ad66f9afd8947f86-s.7a40eb73.woff2") format("woff2"); + unicode-range: U+1F??; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/5476f68d60460930-s.c995e352.woff2") format("woff2"); + unicode-range: U+370-377, U+37A-37F, U+384-38A, U+38C, U+38E-3A1, U+3A3-3FF; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/2bbe8d2671613f1f-s.76dcb0b2.woff2") format("woff2"); + unicode-range: U+102-103, U+110-111, U+128-129, U+168-169, U+1A0-1A1, U+1AF-1B0, U+300-301, U+303-304, U+308-309, U+323, U+329, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/1bffadaabf893a1e-s.7cd81963.woff2") format("woff2"); + unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: Inter; + font-style: normal; + font-weight: 100 900; + font-display: swap; + src: url("../media/83afe278b6a6bb3c-s.p.3a6ba036.woff2") format("woff2"); + unicode-range: U+??, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: Inter Fallback; + src: local(Arial); + ascent-override: 90.44%; + descent-override: 22.52%; + line-gap-override: 0.0%; + size-adjust: 107.12%; +} + +.inter_b2991b2-module__9mH_6q__className { + font-family: Inter, Inter Fallback; + font-style: normal; +} + +.inter_b2991b2-module__9mH_6q__variable { + --font-sans: "Inter", "Inter Fallback"; +} + +/* [project]/gitcoin_co_30/src/app/bdogrotesk_6221f274.module.css [app-client] (css) */ +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_Light-s.p.64c78d2a.woff2") format("woff2"); + font-display: swap; + font-weight: 300; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_Regular-s.p.57816b0d.woff2") format("woff2"); + font-display: swap; + font-weight: 400; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_Medium-s.p.0ba418b2.woff2") format("woff2"); + font-display: swap; + font-weight: 500; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_DemiBold-s.p.74ce75be.woff2") format("woff2"); + font-display: swap; + font-weight: 600; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_Bold-s.p.b8e288e0.woff2") format("woff2"); + font-display: swap; + font-weight: 700; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_ExtraBold-s.p.428cc0e9.woff2") format("woff2"); + font-display: swap; + font-weight: 800; +} + +@font-face { + font-family: bdoGrotesk; + src: url("../media/BDOGrotesk_Black-s.p.acab9363.woff2") format("woff2"); + font-display: swap; + font-weight: 900; +} + +@font-face { + font-family: bdoGrotesk Fallback; + src: local(Arial); + ascent-override: 75.13%; + descent-override: 18.78%; + line-gap-override: 46.95%; + size-adjust: 106.49%; +} + +.bdogrotesk_6221f274-module__MLh4qW__className { + font-family: bdoGrotesk, bdoGrotesk Fallback; +} + +.bdogrotesk_6221f274-module__MLh4qW__variable { + --font-heading: "bdoGrotesk", "bdoGrotesk Fallback"; +} + +/* [next]/internal/font/google/ibm_plex_mono_6ef6cd05.module.css [app-client] (css) */ +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/e390973e931a41c5-s.a82ecf4e.woff2") format("woff2"); + unicode-range: U+460-52F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/59b15b4bcd7b1eb5-s.afa48be3.woff2") format("woff2"); + unicode-range: U+301, U+400-45F, U+490-491, U+4B0-4B1, U+2116; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/e532fa1b9921e1cd-s.764b43eb.woff2") format("woff2"); + unicode-range: U+102-103, U+110-111, U+128-129, U+168-169, U+1A0-1A1, U+1AF-1B0, U+300-301, U+303-304, U+308-309, U+323, U+329, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/2fe89d53234c61d4-s.cb53f04b.woff2") format("woff2"); + unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/99e609270109b47d-s.p.64b9304e.woff2") format("woff2"); + unicode-range: U+??, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("../media/5e05ae5b48faa55e-s.6b5ea6af.woff2") format("woff2"); + unicode-range: U+460-52F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("../media/a7afbb44bec2bb18-s.1dcddae6.woff2") format("woff2"); + unicode-range: U+301, U+400-45F, U+490-491, U+4B0-4B1, U+2116; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("../media/02263ebadd758ea4-s.8da66e7f.woff2") format("woff2"); + unicode-range: U+102-103, U+110-111, U+128-129, U+168-169, U+1A0-1A1, U+1AF-1B0, U+300-301, U+303-304, U+308-309, U+323, U+329, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("../media/68757d6cddeff913-s.e6cd1753.woff2") format("woff2"); + unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: IBM Plex Mono; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url("../media/effe91970fc4db64-s.p.19510058.woff2") format("woff2"); + unicode-range: U+??, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: IBM Plex Mono Fallback; + src: local(Arial); + ascent-override: 76.16%; + descent-override: 20.43%; + line-gap-override: 0.0%; + size-adjust: 134.59%; +} + +.ibm_plex_mono_6ef6cd05-module__NKZtua__className { + font-family: IBM Plex Mono, IBM Plex Mono Fallback; + font-style: normal; +} + +.ibm_plex_mono_6ef6cd05-module__NKZtua__variable { + --font-mono: "IBM Plex Mono", "IBM Plex Mono Fallback"; +} + +/* [next]/internal/font/google/source_serif_4_1a966d00.module.css [app-client] (css) */ +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/812ace1be296b768-s.98cb5c69.woff2") format("woff2"); + unicode-range: U+460-52F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} + +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/eca81df38617fd57-s.ec9d980f.woff2") format("woff2"); + unicode-range: U+301, U+400-45F, U+490-491, U+4B0-4B1, U+2116; +} + +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/325c6d3a683d6317-s.d7df14eb.woff2") format("woff2"); + unicode-range: U+370-377, U+37A-37F, U+384-38A, U+38C, U+38E-3A1, U+3A3-3FF; +} + +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/47f30a82c56c4799-s.3f732cc0.woff2") format("woff2"); + unicode-range: U+102-103, U+110-111, U+128-129, U+168-169, U+1A0-1A1, U+1AF-1B0, U+300-301, U+303-304, U+308-309, U+323, U+329, U+1EA0-1EF9, U+20AB; +} + +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/09dc614ebc304afd-s.1815ac81.woff2") format("woff2"); + unicode-range: U+100-2BA, U+2BD-2C5, U+2C7-2CC, U+2CE-2D7, U+2DD-2FF, U+304, U+308, U+329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} + +@font-face { + font-family: "Source Serif 4"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../media/b2062878eea3d713-s.p.6cb832bb.woff2") format("woff2"); + unicode-range: U+??, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} + +@font-face { + font-family: "Source Serif 4 Fallback"; + src: local(Times New Roman); + ascent-override: 87.87%; + descent-override: 28.41%; + line-gap-override: 0.0%; + size-adjust: 117.91%; +} + +.source_serif_4_1a966d00-module__-FGzja__className { + font-family: "Source Serif 4", "Source Serif 4 Fallback"; + font-style: normal; + font-weight: 400; +} + +.source_serif_4_1a966d00-module__-FGzja__variable { + --font-serif: "Source Serif 4", "Source Serif 4 Fallback"; +} + +/* [project]/gitcoin_co_30/src/app/globals.css [app-client] (css) */ +@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-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-border-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: 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; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + --tw-animation-delay: 0s; + --tw-animation-direction: normal; + --tw-animation-duration: initial; + --tw-animation-fill-mode: none; + --tw-animation-iteration-count: 1; + --tw-enter-blur: 0; + --tw-enter-opacity: 1; + --tw-enter-rotate: 0; + --tw-enter-scale: 1; + --tw-enter-translate-x: 0; + --tw-enter-translate-y: 0; + --tw-exit-blur: 0; + --tw-exit-opacity: 1; + --tw-exit-rotate: 0; + --tw-exit-scale: 1; + --tw-exit-translate-x: 0; + --tw-exit-translate-y: 0; + } + } +} + +@layer theme { + :root, :host { + --font-sans: var(--font-sans); + --font-serif: var(--font-serif); + --font-mono: var(--font-mono); + --color-red-400: #ff6568; + --color-red-500: #fb2c36; + --color-yellow-300: #ffe02a; + --color-yellow-500: #edb200; + --color-yellow-600: #cd8900; + --color-yellow-700: #a36100; + --color-yellow-900: #733e0a; + --color-yellow-950: #432004; + --color-teal-100: #a1f7e7; + --color-teal-300: #2fe5c0; + --color-teal-400: #12d9b2; + --color-teal-500: #02e2ac; + --color-teal-600: #00b894; + --color-teal-700: #008f73; + --color-teal-900: #00483e; + --color-teal-950: #002e28; + --color-gray-50: #f9fafb; + --color-gray-100: #eae8e4; + --color-gray-200: #d6d3cd; + --color-gray-300: #b8b4ac; + --color-gray-400: #9a958c; + --color-gray-500: #7c776f; + --color-gray-600: #605b55; + --color-gray-700: #46423d; + --color-gray-800: #2f2c28; + --color-gray-900: #1c1a17; + --color-gray-950: #12100d; + --color-black: #000; + --color-white: #fff; + --spacing: .25rem; + --container-sm: 24rem; + --container-md: 28rem; + --container-lg: 32rem; + --container-xl: 36rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-4xl: 56rem; + --container-7xl: 80rem; + --text-xs: .75rem; + --text-xs--line-height: calc(1 / .75); + --text-sm: .875rem; + --text-sm--line-height: calc(1.25 / .875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --text-6xl: 3.75rem; + --text-6xl--line-height: 1; + --text-7xl: 4.5rem; + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + --tracking-wider: .05em; + --leading-snug: 1.375; + --leading-relaxed: 1.625; + --ease-in: cubic-bezier(.4, 0, 1, 1); + --ease-out: cubic-bezier(0, 0, .2, 1); + --animate-spin: spin 1s linear infinite; + --blur-sm: 8px; + --blur-md: 12px; + --blur-3xl: 64px; + --aspect-video: 16 / 9; + --default-transition-duration: .15s; + --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + --font-heading: var(--font-heading); + --color-iris-500: #a195f0; + --color-gray-25: #fbfaf9; + --color-system-warning: #eab308; + --color-system-error: #ef4444; + } + + @supports (color: lab(0% 0 0)) { + :root, :host { + --color-red-400: lab(63.7053% 60.745 31.3109); + --color-red-500: lab(55.4814% 75.0732 48.8528); + --color-yellow-300: lab(89.7033% -.480294 84.4917); + --color-yellow-500: lab(76.3898% 14.5258 98.4589); + --color-yellow-600: lab(62.7799% 22.4197 86.1544); + --color-yellow-700: lab(47.8202% 25.2426 66.5015); + --color-yellow-900: lab(32.3865% 21.1273 38.5959); + --color-yellow-950: lab(16.8146% 15.7422 23.1133); + --color-gray-50: lab(98.2596% -.247031 -.706708); + } + } +} + +@layer base { + *, :after, :before, ::backdrop { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + ::file-selector-button { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + html, :host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + line-height: 1.5; + 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; + -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 { + vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + } + + sub { + bottom: -.25em; + } + + sup { + top: -.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 { + vertical-align: middle; + display: block; + } + + img, video { + max-width: 100%; + height: auto; + } + + button, input, select, optgroup, textarea { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + :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)) { + ::placeholder { + 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 { + padding-block: 0; + } + + ::-webkit-datetime-edit-year-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-month-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-day-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-hour-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-minute-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-second-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-millisecond-field { + padding-block: 0; + } + + ::-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"]) { + appearance: button; + } + + ::file-selector-button { + appearance: button; + } + + ::-webkit-inner-spin-button { + height: auto; + } + + ::-webkit-outer-spin-button { + height: auto; + } + + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } + + html { + scroll-behavior: smooth; + font-family: var(--font-sans); + } + + body { + background-color: var(--color-gray-900); + color: var(--color-gray-25); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: var(--font-sans); + } + + * { + border-color: var(--border); + outline-color: var(--ring); + } + + @supports (color: color-mix(in lab, red, red)) { + * { + outline-color: color-mix(in oklab, var(--ring) 50%, transparent); + } + } + + h1, h2 { + --tw-font-weight: var(--font-weight-extrabold); + font-weight: var(--font-weight-extrabold); + color: var(--color-gray-25); + } + + h3, h4, h5, h6 { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + color: var(--color-gray-25); + } + + h1 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + + @media (min-width: 48rem) { + h1 { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + + @media (min-width: 64rem) { + h1 { + font-size: var(--text-6xl); + line-height: var(--tw-leading, var(--text-6xl--line-height)); + } + } + + h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + + @media (min-width: 48rem) { + h2 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + h2 { + line-height: 1.2; + } + + h3 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + + @media (min-width: 48rem) { + h3 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + h3 { + line-height: 1.3; + } + + h4 { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + + @media (min-width: 48rem) { + h4 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + h4 { + line-height: 1.3; + } + + blockquote, .accent-font { + font-style: italic; + } + + .heading { + font-family: var(--font-heading); + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } +} + +@layer components { + .btn-primary { + border-radius: var(--radius); + background-color: var(--color-gray-25); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-900); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-primary:hover { + background-color: var(--color-gray-500); + } + } + + .btn-secondary { + border-radius: var(--radius); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-25); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-25); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-secondary:hover { + background-color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .btn-secondary:hover { + color: var(--color-gray-900); + } + } + + .btn-ghost { + border-radius: var(--radius); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-500); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-ghost:hover { + background-color: #fbfaf91a; + } + + @supports (color: color-mix(in lab, red, red)) { + .btn-ghost:hover { + background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent); + } + } + } + + @media (hover: hover) { + .btn-ghost:hover { + color: var(--color-gray-25); + } + } + + .card { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-600); + background-color: var(--color-gray-900); + padding: calc(var(--spacing) * 6); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + transition-duration: .3s; + } + + .card:hover { + border-color: var(--color-gray-500); + } + + .card-featured { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 2px; + border-color: var(--color-gray-25); + background-color: var(--color-gray-900); + padding: calc(var(--spacing) * 6); + } + + .tag { + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-800); + background-color: var(--color-gray-800); + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 1); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-500); + border-radius: 3.40282e38px; + align-items: center; + display: inline-flex; + } + + .tag-active { + border-color: var(--color-gray-25); + background-color: var(--color-gray-25); + color: var(--color-gray-900); + } + + .section { + margin-block: calc(var(--spacing) * 16); + } + + @media (min-width: 48rem) { + .section { + margin-block: calc(var(--spacing) * 24); + } + } + + .container-page { + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4); + margin-inline: auto; + } + + @media (min-width: 40rem) { + .container-page { + padding-inline: calc(var(--spacing) * 6); + } + } + + @media (min-width: 64rem) { + .container-page { + padding-inline: calc(var(--spacing) * 24); + } + } + + .star { + color: var(--color-gray-25); + display: inline-block; + } + + .star:before { + content: "☆"; + } + + .star-filled:before { + content: "★"; + } + + .constellation-line { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + --tw-gradient-from: transparent; + --tw-gradient-via: var(--color-gray-500); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-gradient-to: transparent; + height: 1px; + } + + .divider-stars { + margin-block: calc(var(--spacing) * 8); + align-items: center; + gap: calc(var(--spacing) * 4); + display: flex; + } + + .divider-stars:before, .divider-stars:after { + content: ""; + background-color: var(--color-gray-800); + flex: 1; + height: 1px; + } +} + +@layer utilities { + .pointer-events-none { + pointer-events: none; + } + + .collapse { + visibility: collapse; + } + + .invisible { + visibility: hidden; + } + + .visible { + visibility: visible; + } + + .sr-only { + clip-path: inset(50%); + white-space: nowrap; + border-width: 0; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + position: absolute; + overflow: hidden; + } + + .absolute { + position: absolute; + } + + .fixed { + position: fixed; + } + + .relative { + position: relative; + } + + .static { + position: static; + } + + .sticky { + position: sticky; + } + + .inset-0 { + inset: calc(var(--spacing) * 0); + } + + .inset-x-0 { + inset-inline: calc(var(--spacing) * 0); + } + + .-top-4 { + top: calc(var(--spacing) * -4); + } + + .top-0 { + top: calc(var(--spacing) * 0); + } + + .top-1\/2 { + top: 50%; + } + + .top-3 { + top: calc(var(--spacing) * 3); + } + + .top-4 { + top: calc(var(--spacing) * 4); + } + + .top-7 { + top: calc(var(--spacing) * 7); + } + + .top-16 { + top: calc(var(--spacing) * 16); + } + + .top-\[10\%\] { + top: 10%; + } + + .right-0 { + right: calc(var(--spacing) * 0); + } + + .right-3 { + right: calc(var(--spacing) * 3); + } + + .right-4 { + right: calc(var(--spacing) * 4); + } + + .-bottom-4 { + bottom: calc(var(--spacing) * -4); + } + + .-bottom-12 { + bottom: calc(var(--spacing) * -12); + } + + .bottom-0 { + bottom: calc(var(--spacing) * 0); + } + + .-left-12 { + left: calc(var(--spacing) * -12); + } + + .left-0 { + left: calc(var(--spacing) * 0); + } + + .left-1\/2 { + left: 50%; + } + + .left-10 { + left: calc(var(--spacing) * 10); + } + + .isolate { + isolation: isolate; + } + + .z-0 { + z-index: 0; + } + + .z-10 { + z-index: 10; + } + + .z-20 { + z-index: 20; + } + + .z-30 { + z-index: 30; + } + + .z-40 { + z-index: 40; + } + + .z-50 { + z-index: 50; + } + + .z-101 { + z-index: 101; + } + + .z-102 { + z-index: 102; + } + + .z-\[1\] { + z-index: 1; + } + + .z-\[100\] { + z-index: 100; + } + + .z-\[101\] { + z-index: 101; + } + + .container { + width: 100%; + } + + @media (min-width: 40rem) { + .container { + max-width: 40rem; + } + } + + @media (min-width: 48rem) { + .container { + max-width: 48rem; + } + } + + @media (min-width: 64rem) { + .container { + max-width: 64rem; + } + } + + @media (min-width: 80rem) { + .container { + max-width: 80rem; + } + } + + @media (min-width: 96rem) { + .container { + max-width: 96rem; + } + } + + .\!m-0 { + margin: calc(var(--spacing) * 0) !important; + } + + .-mx-6 { + margin-inline: calc(var(--spacing) * -6); + } + + .mx-auto { + margin-inline: auto; + } + + .my-4 { + margin-block: calc(var(--spacing) * 4); + } + + .my-6 { + margin-block: calc(var(--spacing) * 6); + } + + .my-8 { + margin-block: calc(var(--spacing) * 8); + } + + .my-10 { + margin-block: calc(var(--spacing) * 10); + } + + .-mt-6 { + margin-top: calc(var(--spacing) * -6); + } + + .-mt-\[1px\] { + margin-top: -1px; + } + + .-mt-\[72px\] { + margin-top: -72px; + } + + .mt-0\.5 { + margin-top: calc(var(--spacing) * .5); + } + + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + + .mt-1\.5 { + margin-top: calc(var(--spacing) * 1.5); + } + + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + + .mt-3 { + margin-top: calc(var(--spacing) * 3); + } + + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + + .mt-5 { + margin-top: calc(var(--spacing) * 5); + } + + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + + .mt-8 { + margin-top: calc(var(--spacing) * 8); + } + + .mt-10 { + margin-top: calc(var(--spacing) * 10); + } + + .mt-12 { + margin-top: calc(var(--spacing) * 12); + } + + .mt-14 { + margin-top: calc(var(--spacing) * 14); + } + + .mt-24 { + margin-top: calc(var(--spacing) * 24); + } + + .mt-30 { + margin-top: calc(var(--spacing) * 30); + } + + .mt-\[5px\] { + margin-top: 5px; + } + + .mt-auto { + margin-top: auto; + } + + .-mr-\[1px\] { + margin-right: -1px; + } + + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + + .mb-1 { + margin-bottom: calc(var(--spacing) * 1); + } + + .mb-1\.5 { + margin-bottom: calc(var(--spacing) * 1.5); + } + + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } + + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + + .mb-5 { + margin-bottom: calc(var(--spacing) * 5); + } + + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + + .mb-8 { + margin-bottom: calc(var(--spacing) * 8); + } + + .mb-14 { + margin-bottom: calc(var(--spacing) * 14); + } + + .mb-16 { + margin-bottom: calc(var(--spacing) * 16); + } + + .ml-8 { + margin-left: calc(var(--spacing) * 8); + } + + .ml-auto { + margin-left: auto; + } + + .line-clamp-1 { + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-2 { + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-3 { + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-4 { + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .block { + display: block; + } + + .contents { + display: contents; + } + + .flex { + display: flex; + } + + .grid { + display: grid; + } + + .hidden { + display: none; + } + + .inline { + display: inline; + } + + .inline-flex { + display: inline-flex; + } + + .table { + display: table; + } + + .aspect-3\/1 { + aspect-ratio: 3; + } + + .aspect-square { + aspect-ratio: 1; + } + + .aspect-video { + aspect-ratio: var(--aspect-video); + } + + .size-2\.5 { + width: calc(var(--spacing) * 2.5); + height: calc(var(--spacing) * 2.5); + } + + .size-3 { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + + .size-3\.5 { + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + } + + .size-4 { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + + .size-5 { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + + .size-6 { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + + .size-8 { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + + .size-9 { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + + .size-10 { + width: calc(var(--spacing) * 10); + height: calc(var(--spacing) * 10); + } + + .size-full { + width: 100%; + height: 100%; + } + + .h-3 { + height: calc(var(--spacing) * 3); + } + + .h-3\.5 { + height: calc(var(--spacing) * 3.5); + } + + .h-4 { + height: calc(var(--spacing) * 4); + } + + .h-5 { + height: calc(var(--spacing) * 5); + } + + .h-6 { + height: calc(var(--spacing) * 6); + } + + .h-8 { + height: calc(var(--spacing) * 8); + } + + .h-9 { + height: calc(var(--spacing) * 9); + } + + .h-10 { + height: calc(var(--spacing) * 10); + } + + .h-12 { + height: calc(var(--spacing) * 12); + } + + .h-14 { + height: calc(var(--spacing) * 14); + } + + .h-16 { + height: calc(var(--spacing) * 16); + } + + .h-18 { + height: calc(var(--spacing) * 18); + } + + .h-20 { + height: calc(var(--spacing) * 20); + } + + .h-32 { + height: calc(var(--spacing) * 32); + } + + .h-48 { + height: calc(var(--spacing) * 48); + } + + .h-52 { + height: calc(var(--spacing) * 52); + } + + .h-64 { + height: calc(var(--spacing) * 64); + } + + .h-\[3\.7rem\] { + height: 3.7rem; + } + + .h-\[21px\] { + height: 21px; + } + + .h-\[45\%\] { + height: 45%; + } + + .h-\[48px\] { + height: 48px; + } + + .h-\[90dvh\] { + height: 90dvh; + } + + .h-\[160px\] { + height: 160px; + } + + .h-\[326px\] { + height: 326px; + } + + .h-\[360px\] { + height: 360px; + } + + .h-full { + height: 100%; + } + + .max-h-\[60vh\] { + max-height: 60vh; + } + + .min-h-16 { + min-height: calc(var(--spacing) * 16); + } + + .min-h-\[120px\] { + min-height: 120px; + } + + .min-h-\[130px\] { + min-height: 130px; + } + + .min-h-\[280px\] { + min-height: 280px; + } + + .min-h-\[386px\] { + min-height: 386px; + } + + .min-h-\[520px\] { + min-height: 520px; + } + + .min-h-screen { + min-height: 100vh; + } + + .w-3 { + width: calc(var(--spacing) * 3); + } + + .w-3\.5 { + width: calc(var(--spacing) * 3.5); + } + + .w-4 { + width: calc(var(--spacing) * 4); + } + + .w-5 { + width: calc(var(--spacing) * 5); + } + + .w-6 { + width: calc(var(--spacing) * 6); + } + + .w-8 { + width: calc(var(--spacing) * 8); + } + + .w-10 { + width: calc(var(--spacing) * 10); + } + + .w-12 { + width: calc(var(--spacing) * 12); + } + + .w-14 { + width: calc(var(--spacing) * 14); + } + + .w-16 { + width: calc(var(--spacing) * 16); + } + + .w-20 { + width: calc(var(--spacing) * 20); + } + + .w-24 { + width: calc(var(--spacing) * 24); + } + + .w-32 { + width: calc(var(--spacing) * 32); + } + + .w-48 { + width: calc(var(--spacing) * 48); + } + + .w-96 { + width: calc(var(--spacing) * 96); + } + + .w-\[180px\] { + width: 180px; + } + + .w-\[calc\(100\%-2rem\)\] { + width: calc(100% - 2rem); + } + + .w-auto { + width: auto; + } + + .w-fit { + width: fit-content; + } + + .w-full { + width: 100%; + } + + .w-px { + width: 1px; + } + + .max-w-2xl { + max-width: var(--container-2xl); + } + + .max-w-3xl { + max-width: var(--container-3xl); + } + + .max-w-4xl { + max-width: var(--container-4xl); + } + + .max-w-170 { + max-width: calc(var(--spacing) * 170); + } + + .max-w-240 { + max-width: calc(var(--spacing) * 240); + } + + .max-w-\[85\%\] { + max-width: 85%; + } + + .max-w-\[95\%\] { + max-width: 95%; + } + + .max-w-\[267px\] { + max-width: 267px; + } + + .max-w-\[295px\] { + max-width: 295px; + } + + .max-w-\[348px\] { + max-width: 348px; + } + + .max-w-\[400px\] { + max-width: 400px; + } + + .max-w-\[580px\] { + max-width: 580px; + } + + .max-w-\[640px\] { + max-width: 640px; + } + + .max-w-\[700px\] { + max-width: 700px; + } + + .max-w-\[730px\] { + max-width: 730px; + } + + .max-w-\[732px\] { + max-width: 732px; + } + + .max-w-\[796px\] { + max-width: 796px; + } + + .max-w-\[850px\] { + max-width: 850px; + } + + .max-w-\[908px\] { + max-width: 908px; + } + + .max-w-\[980px\] { + max-width: 980px; + } + + .max-w-\[1166px\] { + max-width: 1166px; + } + + .max-w-\[1216px\] { + max-width: 1216px; + } + + .max-w-\[1229px\] { + max-width: 1229px; + } + + .max-w-full { + max-width: 100%; + } + + .max-w-lg { + max-width: var(--container-lg); + } + + .max-w-md { + max-width: var(--container-md); + } + + .max-w-none { + max-width: none; + } + + .max-w-xl { + max-width: var(--container-xl); + } + + .min-w-0 { + min-width: calc(var(--spacing) * 0); + } + + .min-w-\[180px\] { + min-width: 180px; + } + + .min-w-full { + min-width: 100%; + } + + .flex-1 { + flex: 1; + } + + .flex-shrink-0, .shrink-0 { + flex-shrink: 0; + } + + .flex-grow, .grow { + flex-grow: 1; + } + + .origin-\(--radix-tooltip-content-transform-origin\) { + transform-origin: var(--radix-tooltip-content-transform-origin); + } + + .origin-top-left { + transform-origin: 0 0; + } + + .-translate-x-1\/2 { + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .translate-y-\[calc\(-50\%_-_2px\)\] { + --tw-translate-y: calc(-50% - 2px); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .rotate-45 { + rotate: 45deg; + } + + .transform { + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + } + + .animate-\[dropdown-in_150ms_ease-out\] { + animation: .15s ease-out dropdown-in; + } + + .animate-\[dropdown-out_100ms_ease-in_forwards\] { + animation: .1s ease-in forwards dropdown-out; + } + + .animate-\[sidebar-in-bottom_250ms_ease-out\] { + animation: .25s ease-out sidebar-in-bottom; + } + + .animate-\[sidebar-out-bottom_200ms_ease-in_forwards\] { + animation: .2s ease-in forwards sidebar-out-bottom; + } + + .animate-in { + animation: enter var(--tw-animation-duration, var(--tw-duration, .15s)) var(--tw-ease, ease) var(--tw-animation-delay, 0s) var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal) var(--tw-animation-fill-mode, none); + } + + .animate-spin { + animation: var(--animate-spin); + } + + .cursor-pointer { + cursor: pointer; + } + + .resize { + resize: both; + } + + .resize-y { + resize: vertical; + } + + .list-outside { + list-style-position: outside; + } + + .list-decimal { + list-style-type: decimal; + } + + .list-disc { + list-style-type: disc; + } + + .appearance-none { + appearance: none; + } + + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .grid-cols-\[1fr_1fr_1\.4fr\] { + grid-template-columns: 1fr 1fr 1.4fr; + } + + .flex-col { + flex-direction: column; + } + + .flex-wrap { + flex-wrap: wrap; + } + + .items-center { + align-items: center; + } + + .items-end { + align-items: flex-end; + } + + .items-start { + align-items: flex-start; + } + + .items-stretch { + align-items: stretch; + } + + .justify-between { + justify-content: space-between; + } + + .justify-center { + justify-content: center; + } + + .justify-end { + justify-content: flex-end; + } + + .justify-start { + justify-content: flex-start; + } + + .gap-0\.5 { + gap: calc(var(--spacing) * .5); + } + + .gap-1 { + gap: calc(var(--spacing) * 1); + } + + .gap-1\.5 { + gap: calc(var(--spacing) * 1.5); + } + + .gap-2 { + gap: calc(var(--spacing) * 2); + } + + .gap-2\.5 { + gap: calc(var(--spacing) * 2.5); + } + + .gap-3 { + gap: calc(var(--spacing) * 3); + } + + .gap-4 { + gap: calc(var(--spacing) * 4); + } + + .gap-5 { + gap: calc(var(--spacing) * 5); + } + + .gap-6 { + gap: calc(var(--spacing) * 6); + } + + .gap-8 { + gap: calc(var(--spacing) * 8); + } + + .gap-10 { + gap: calc(var(--spacing) * 10); + } + + .gap-12 { + gap: calc(var(--spacing) * 12); + } + + .gap-14 { + gap: calc(var(--spacing) * 14); + } + + .gap-\[15px\] { + gap: 15px; + } + + :where(.space-y-0 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-2 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-3 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-4 > :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))); + } + + :where(.space-y-6 > :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))); + } + + :where(.space-y-8 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-12 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse))); + } + + .gap-x-2 { + column-gap: calc(var(--spacing) * 2); + } + + .self-end { + align-self: flex-end; + } + + .self-stretch { + align-self: stretch; + } + + .truncate { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + .overflow-hidden { + overflow: hidden; + } + + .overflow-visible { + overflow: visible; + } + + .overflow-x-auto { + overflow-x: auto; + } + + .overflow-x-hidden { + overflow-x: hidden; + } + + .overflow-y-auto { + overflow-y: auto; + } + + .rounded { + border-radius: .25rem; + } + + .rounded-2xl { + border-radius: calc(var(--radius) + 8px); + } + + .rounded-\[2px\] { + border-radius: 2px; + } + + .rounded-\[12px\] { + border-radius: 12px; + } + + .rounded-full { + border-radius: 3.40282e38px; + } + + .rounded-lg { + border-radius: var(--radius); + } + + .rounded-md { + border-radius: calc(var(--radius) - 2px); + } + + .rounded-xl { + border-radius: calc(var(--radius) + 4px); + } + + .rounded-t-2xl { + border-top-left-radius: calc(var(--radius) + 8px); + border-top-right-radius: calc(var(--radius) + 8px); + } + + .rounded-t-xl { + border-top-left-radius: calc(var(--radius) + 4px); + border-top-right-radius: calc(var(--radius) + 4px); + } + + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + + .border-\[0\.5px\] { + border-style: var(--tw-border-style); + border-width: .5px; + } + + .border-y { + border-block-style: var(--tw-border-style); + border-block-width: 1px; + } + + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + + .border-b-2 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 2px; + } + + .border-l-4 { + border-left-style: var(--tw-border-style); + border-left-width: 4px; + } + + .border-dashed { + --tw-border-style: dashed; + border-style: dashed; + } + + .border-none { + --tw-border-style: none; + border-style: none; + } + + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + + .border-gray-25 { + border-color: var(--color-gray-25); + } + + .border-gray-300 { + border-color: var(--color-gray-300); + } + + .border-gray-300\/40 { + border-color: #b8b4ac66; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-gray-300\/40 { + border-color: color-mix(in oklab, var(--color-gray-300) 40%, transparent); + } + } + + .border-gray-500 { + border-color: var(--color-gray-500); + } + + .border-gray-500\/60 { + border-color: #7c776f99; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-gray-500\/60 { + border-color: color-mix(in oklab, var(--color-gray-500) 60%, transparent); + } + } + + .border-gray-600 { + border-color: var(--color-gray-600); + } + + .border-gray-700 { + border-color: var(--color-gray-700); + } + + .border-gray-800 { + border-color: var(--color-gray-800); + } + + .border-gray-950 { + border-color: var(--color-gray-950); + } + + .border-red-500\/30 { + border-color: #fb2c364d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-red-500\/30 { + border-color: color-mix(in oklab, var(--color-red-500) 30%, transparent); + } + } + + .border-system-error { + border-color: var(--color-system-error); + } + + .border-system-error\/30 { + border-color: #ef44444d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-system-error\/30 { + border-color: color-mix(in oklab, var(--color-system-error) 30%, transparent); + } + } + + .border-system-warning\/30 { + border-color: #eab3084d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-system-warning\/30 { + border-color: color-mix(in oklab, var(--color-system-warning) 30%, transparent); + } + } + + .border-teal-500 { + border-color: var(--color-teal-500); + } + + .border-teal-700 { + border-color: var(--color-teal-700); + } + + .border-yellow-600 { + border-color: var(--color-yellow-600); + } + + .border-yellow-700\/50 { + border-color: #a3610080; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-yellow-700\/50 { + border-color: color-mix(in oklab, var(--color-yellow-700) 50%, transparent); + } + } + + .bg-background { + background-color: var(--background); + } + + .bg-black\/60 { + background-color: #0009; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-black\/60 { + background-color: color-mix(in oklab, var(--color-black) 60%, transparent); + } + } + + .bg-black\/85 { + background-color: #000000d9; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-black\/85 { + background-color: color-mix(in oklab, var(--color-black) 85%, transparent); + } + } + + .bg-border { + background-color: var(--border); + } + + .bg-destructive { + background-color: var(--destructive); + } + + .bg-foreground { + background-color: var(--foreground); + } + + .bg-gray-25 { + background-color: var(--color-gray-25); + } + + .bg-gray-25\/10 { + background-color: #fbfaf91a; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-25\/10 { + background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent); + } + } + + .bg-gray-300 { + background-color: var(--color-gray-300); + } + + .bg-gray-600 { + background-color: var(--color-gray-600); + } + + .bg-gray-700 { + background-color: var(--color-gray-700); + } + + .bg-gray-800 { + background-color: var(--color-gray-800); + } + + .bg-gray-800\/40 { + background-color: #2f2c2866; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-800\/40 { + background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent); + } + } + + .bg-gray-900 { + background-color: var(--color-gray-900); + } + + .bg-gray-900\/60 { + background-color: #1c1a1799; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/60 { + background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent); + } + } + + .bg-gray-900\/70 { + background-color: #1c1a17b3; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/70 { + background-color: color-mix(in oklab, var(--color-gray-900) 70%, transparent); + } + } + + .bg-gray-900\/90 { + background-color: #1c1a17e6; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/90 { + background-color: color-mix(in oklab, var(--color-gray-900) 90%, transparent); + } + } + + .bg-gray-900\/95 { + background-color: #1c1a17f2; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/95 { + background-color: color-mix(in oklab, var(--color-gray-900) 95%, transparent); + } + } + + .bg-gray-950 { + background-color: var(--color-gray-950); + } + + .bg-input { + background-color: var(--input); + } + + .bg-muted { + background-color: var(--muted); + } + + .bg-primary { + background-color: var(--primary); + } + + .bg-red-500\/10 { + background-color: #fb2c361a; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-red-500\/10 { + background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent); + } + } + + .bg-secondary { + background-color: var(--secondary); + } + + .bg-system-error\/20 { + background-color: #ef444433; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-system-error\/20 { + background-color: color-mix(in oklab, var(--color-system-error) 20%, transparent); + } + } + + .bg-system-warning\/20 { + background-color: #eab30833; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-system-warning\/20 { + background-color: color-mix(in oklab, var(--color-system-warning) 20%, transparent); + } + } + + .bg-teal-500 { + background-color: var(--color-teal-500); + } + + .bg-teal-500\/20 { + background-color: #02e2ac33; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-teal-500\/20 { + background-color: color-mix(in oklab, var(--color-teal-500) 20%, transparent); + } + } + + .bg-teal-600 { + background-color: var(--color-teal-600); + } + + .bg-teal-700 { + background-color: var(--color-teal-700); + } + + .bg-teal-950 { + background-color: var(--color-teal-950); + } + + .bg-transparent { + background-color: #0000; + } + + .bg-yellow-900\/30 { + background-color: #733e0a4d; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-yellow-900\/30 { + background-color: color-mix(in oklab, var(--color-yellow-900) 30%, transparent); + } + } + + .bg-yellow-950 { + background-color: var(--color-yellow-950); + } + + .bg-linear-to-b { + --tw-gradient-position: to bottom; + } + + @supports (background-image: linear-gradient(in lab, red, red)) { + .bg-linear-to-b { + --tw-gradient-position: to bottom in oklab; + } + } + + .bg-linear-to-b { + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-linear-to-t { + --tw-gradient-position: to top; + } + + @supports (background-image: linear-gradient(in lab, red, red)) { + .bg-linear-to-t { + --tw-gradient-position: to top in oklab; + } + } + + .bg-linear-to-t { + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-b { + --tw-gradient-position: to bottom in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-r { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-t { + --tw-gradient-position: to top in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-\[image\:linear-gradient\(to_top\,rgba\(161\,149\,240\,0\.7\)\,transparent\)\] { + background-image: linear-gradient(to top, #a195f0b3, #0000); + } + + .bg-\[linear-gradient\(to_top\,rgba\(2\,226\,172\,0\.3\)\,transparent\)\] { + background-image: linear-gradient(to top, #02e2ac4d, #0000); + } + + .bg-\[linear-gradient\(to_top\,rgba\(2\,226\,172\,0\.5\)\,transparent\)\] { + background-image: linear-gradient(to top, #02e2ac80, #0000); + } + + .bg-\[radial-gradient\(ellipse_at_center\,_var\(--tw-gradient-stops\)\)\] { + background-image: radial-gradient(ellipse at center, var(--tw-gradient-stops)); + } + + .from-gray-900 { + --tw-gradient-from: var(--color-gray-900); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-gray-950 { + --tw-gradient-from: var(--color-gray-950); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-teal-500\/25 { + --tw-gradient-from: #02e2ac40; + } + + @supports (color: color-mix(in lab, red, red)) { + .from-teal-500\/25 { + --tw-gradient-from: color-mix(in oklab, var(--color-teal-500) 25%, transparent); + } + } + + .from-teal-500\/25 { + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-transparent { + --tw-gradient-from: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .via-gray-950 { + --tw-gradient-via: var(--color-gray-950); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + + .via-gray-950\/80 { + --tw-gradient-via: #12100dcc; + } + + @supports (color: color-mix(in lab, red, red)) { + .via-gray-950\/80 { + --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 80%, transparent); + } + } + + .via-gray-950\/80 { + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + + .to-black { + --tw-gradient-to: var(--color-black); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-gray-900 { + --tw-gradient-to: var(--color-gray-900); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-gray-950 { + --tw-gradient-to: var(--color-gray-950); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-teal-500\/30 { + --tw-gradient-to: #02e2ac4d; + } + + @supports (color: color-mix(in lab, red, red)) { + .to-teal-500\/30 { + --tw-gradient-to: color-mix(in oklab, var(--color-teal-500) 30%, transparent); + } + } + + .to-teal-500\/30 { + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-transparent { + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .bg-\[length\:100\%_0\%\], .bg-size-\[100\%_0\%\] { + background-size: 100% 0%; + } + + .bg-size-\[100\%_6\%\] { + background-size: 100% 6%; + } + + .bg-bottom { + background-position: bottom; + } + + .bg-no-repeat { + background-repeat: no-repeat; + } + + .fill-foreground { + fill: var(--foreground); + } + + .object-cover { + object-fit: cover; + } + + .object-center { + object-position: center; + } + + .p-0 { + padding: calc(var(--spacing) * 0); + } + + .p-1 { + padding: calc(var(--spacing) * 1); + } + + .p-1\.5 { + padding: calc(var(--spacing) * 1.5); + } + + .p-2 { + padding: calc(var(--spacing) * 2); + } + + .p-4 { + padding: calc(var(--spacing) * 4); + } + + .p-6 { + padding: calc(var(--spacing) * 6); + } + + .p-8 { + padding: calc(var(--spacing) * 8); + } + + .\!px-4 { + padding-inline: calc(var(--spacing) * 4) !important; + } + + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } + + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } + + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + + .px-3\.5 { + padding-inline: calc(var(--spacing) * 3.5); + } + + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + + .px-5 { + padding-inline: calc(var(--spacing) * 5); + } + + .px-6 { + padding-inline: calc(var(--spacing) * 6); + } + + .px-8 { + padding-inline: calc(var(--spacing) * 8); + } + + .px-10 { + padding-inline: calc(var(--spacing) * 10); + } + + .px-\[27px\] { + padding-inline: 27px; + } + + .\!py-1 { + padding-block: calc(var(--spacing) * 1) !important; + } + + .\!py-4 { + padding-block: calc(var(--spacing) * 4) !important; + } + + .py-0\.5 { + padding-block: calc(var(--spacing) * .5); + } + + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + + .py-2\.5 { + padding-block: calc(var(--spacing) * 2.5); + } + + .py-3 { + padding-block: calc(var(--spacing) * 3); + } + + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + + .py-5 { + padding-block: calc(var(--spacing) * 5); + } + + .py-6 { + padding-block: calc(var(--spacing) * 6); + } + + .py-8 { + padding-block: calc(var(--spacing) * 8); + } + + .py-9 { + padding-block: calc(var(--spacing) * 9); + } + + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + + .py-12 { + padding-block: calc(var(--spacing) * 12); + } + + .py-14 { + padding-block: calc(var(--spacing) * 14); + } + + .py-16 { + padding-block: calc(var(--spacing) * 16); + } + + .py-20 { + padding-block: calc(var(--spacing) * 20); + } + + .py-\[10px\] { + padding-block: 10px; + } + + .py-\[34px\] { + padding-block: 34px; + } + + .pt-2 { + padding-top: calc(var(--spacing) * 2); + } + + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } + + .pt-5 { + padding-top: calc(var(--spacing) * 5); + } + + .pt-10 { + padding-top: calc(var(--spacing) * 10); + } + + .pt-16 { + padding-top: calc(var(--spacing) * 16); + } + + .pt-\[17px\] { + padding-top: 17px; + } + + .pt-\[72px\] { + padding-top: 72px; + } + + .pr-4 { + padding-right: calc(var(--spacing) * 4); + } + + .pr-12 { + padding-right: calc(var(--spacing) * 12); + } + + .pr-16 { + padding-right: calc(var(--spacing) * 16); + } + + .pr-20 { + padding-right: calc(var(--spacing) * 20); + } + + .pb-0 { + padding-bottom: calc(var(--spacing) * 0); + } + + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } + + .pb-8 { + padding-bottom: calc(var(--spacing) * 8); + } + + .pb-20 { + padding-bottom: calc(var(--spacing) * 20); + } + + .pb-28 { + padding-bottom: calc(var(--spacing) * 28); + } + + .pb-\[max\(12px\,env\(safe-area-inset-bottom\)\)\] { + padding-bottom: max(12px, env(safe-area-inset-bottom)); + } + + .pl-3 { + padding-left: calc(var(--spacing) * 3); + } + + .pl-4 { + padding-left: calc(var(--spacing) * 4); + } + + .text-center { + text-align: center; + } + + .text-left { + text-align: left; + } + + .text-right { + text-align: right; + } + + .font-heading { + font-family: var(--font-heading); + } + + .font-mono { + font-family: var(--font-mono); + } + + .font-serif { + font-family: var(--font-serif); + } + + .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-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + + .text-\[11px\] { + font-size: 11px; + } + + .text-\[20px\] { + font-size: 20px; + } + + .text-\[26px\] { + font-size: 26px; + } + + .text-\[30px\] { + font-size: 30px; + } + + .text-\[32px\] { + font-size: 32px; + } + + .text-\[36px\] { + font-size: 36px; + } + + .text-\[52px\] { + font-size: 52px; + } + + .text-\[64px\] { + font-size: 64px; + } + + .leading-6 { + --tw-leading: calc(var(--spacing) * 6); + line-height: calc(var(--spacing) * 6); + } + + .leading-7 { + --tw-leading: calc(var(--spacing) * 7); + line-height: calc(var(--spacing) * 7); + } + + .leading-8 { + --tw-leading: calc(var(--spacing) * 8); + line-height: calc(var(--spacing) * 8); + } + + .leading-9 { + --tw-leading: calc(var(--spacing) * 9); + line-height: calc(var(--spacing) * 9); + } + + .leading-10 { + --tw-leading: calc(var(--spacing) * 10); + line-height: calc(var(--spacing) * 10); + } + + .leading-\[1\.3\] { + --tw-leading: 1.3; + line-height: 1.3; + } + + .leading-\[1\.12\] { + --tw-leading: 1.12; + line-height: 1.12; + } + + .leading-none { + --tw-leading: 1; + line-height: 1; + } + + .leading-relaxed { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } + + .leading-snug { + --tw-leading: var(--leading-snug); + line-height: var(--leading-snug); + } + + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + + .font-extrabold { + --tw-font-weight: var(--font-weight-extrabold); + font-weight: var(--font-weight-extrabold); + } + + .font-light { + --tw-font-weight: var(--font-weight-light); + font-weight: var(--font-weight-light); + } + + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + + .tracking-\[0\.012em\] { + --tw-tracking: .012em; + letter-spacing: .012em; + } + + .tracking-\[0\.18em\] { + --tw-tracking: .18em; + letter-spacing: .18em; + } + + .tracking-\[0\.64px\] { + --tw-tracking: .64px; + letter-spacing: .64px; + } + + .tracking-wider { + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } + + .text-balance { + text-wrap: balance; + } + + .whitespace-nowrap { + white-space: nowrap; + } + + .whitespace-pre-wrap { + white-space: pre-wrap; + } + + .text-\[\#A195F0\] { + color: #a195f0; + } + + .text-\[\#d6d3cd\] { + color: #d6d3cd; + } + + .text-background { + color: var(--background); + } + + .text-gray-25 { + color: var(--color-gray-25); + } + + .text-gray-25\/70 { + color: #fbfaf9b3; + } + + @supports (color: color-mix(in lab, red, red)) { + .text-gray-25\/70 { + color: color-mix(in oklab, var(--color-gray-25) 70%, transparent); + } + } + + .text-gray-50 { + color: var(--color-gray-50); + } + + .text-gray-100 { + color: var(--color-gray-100); + } + + .text-gray-200 { + color: var(--color-gray-200); + } + + .text-gray-300 { + color: var(--color-gray-300); + } + + .text-gray-400 { + color: var(--color-gray-400); + } + + .text-gray-500 { + color: var(--color-gray-500); + } + + .text-gray-600 { + color: var(--color-gray-600); + } + + .text-gray-900 { + color: var(--color-gray-900); + } + + .text-iris-500 { + color: var(--color-iris-500); + } + + .text-muted-foreground { + color: var(--muted-foreground); + } + + .text-primary { + color: var(--primary); + } + + .text-primary-foreground { + color: var(--primary-foreground); + } + + .text-red-400 { + color: var(--color-red-400); + } + + .text-secondary-foreground { + color: var(--secondary-foreground); + } + + .text-system-error { + color: var(--color-system-error); + } + + .text-system-warning { + color: var(--color-system-warning); + } + + .text-teal-100 { + color: var(--color-teal-100); + } + + .text-teal-500 { + color: var(--color-teal-500); + } + + .text-teal-700 { + color: var(--color-teal-700); + } + + .text-teal-900 { + color: var(--color-teal-900); + } + + .text-white { + color: var(--color-white); + } + + .text-yellow-300 { + color: var(--color-yellow-300); + } + + .text-yellow-500 { + color: var(--color-yellow-500); + } + + .capitalize { + text-transform: capitalize; + } + + .uppercase { + text-transform: uppercase; + } + + .italic { + font-style: italic; + } + + .underline { + text-decoration-line: underline; + } + + .underline-offset-4 { + text-underline-offset: 4px; + } + + .opacity-0 { + opacity: 0; + } + + .opacity-80 { + opacity: .8; + } + + .shadow-2xl { + --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, #00000040); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .shadow-none { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .shadow-xs { + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + + .blur-3xl { + --tw-blur: blur(var(--blur-3xl)); + 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, ); + } + + .grayscale { + --tw-grayscale: grayscale(100%); + 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, ); + } + + .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, ); + } + + .backdrop-blur-md { + --tw-backdrop-blur: blur(var(--blur-md)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .backdrop-blur-sm { + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .duration-200 { + --tw-duration: .2s; + transition-duration: .2s; + } + + .duration-300 { + --tw-duration: .3s; + transition-duration: .3s; + } + + .duration-500 { + --tw-duration: .5s; + transition-duration: .5s; + } + + .ease-in { + --tw-ease: var(--ease-in); + transition-timing-function: var(--ease-in); + } + + .ease-out { + --tw-ease: var(--ease-out); + transition-timing-function: var(--ease-out); + } + + .fade-in-0 { + --tw-enter-opacity: 0; + } + + .outline-none { + --tw-outline-style: none; + outline-style: none; + } + + .zoom-in-95 { + --tw-enter-scale: .95; + } + + .\[border-image\:repeating-linear-gradient\(to_right\,theme\(colors\.gray\.600\)_0\,theme\(colors\.gray\.600\)_8px\,transparent_8px\,transparent_16px\)_1\] { + border-image: repeating-linear-gradient(to right, #605b55 0 8px, #0000 8px 16px) 1; + } + + .running { + animation-play-state: running; + } + + @media (hover: hover) { + .group-hover\:scale-105:is(:where(.group):hover *) { + --tw-scale-x: 105%; + --tw-scale-y: 105%; + --tw-scale-z: 105%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + + @media (hover: hover) { + .group-hover\:border-teal-500:is(:where(.group):hover *) { + border-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .group-hover\:text-gray-25:is(:where(.group):hover *) { + color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .group-hover\:text-teal-500:is(:where(.group):hover *) { + color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .group-hover\:opacity-0:is(:where(.group):hover *) { + opacity: 0; + } + } + + @media (hover: hover) { + .group-hover\:opacity-100:is(:where(.group):hover *) { + opacity: 1; + } + } + + .group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state="open"] *) { + rotate: 180deg; + } + + .group-\[\.is-assistant\]\:text-foreground:is(:where(.group).is-assistant *) { + color: var(--foreground); + } + + .group-\[\.is-user\]\:ml-auto:is(:where(.group).is-user *) { + margin-left: auto; + } + + .group-\[\.is-user\]\:rounded-lg:is(:where(.group).is-user *) { + border-radius: var(--radius); + } + + .group-\[\.is-user\]\:bg-secondary:is(:where(.group).is-user *) { + background-color: var(--secondary); + } + + .group-\[\.is-user\]\:px-4:is(:where(.group).is-user *) { + padding-inline: calc(var(--spacing) * 4); + } + + .group-\[\.is-user\]\:py-3:is(:where(.group).is-user *) { + padding-block: calc(var(--spacing) * 3); + } + + .group-\[\.is-user\]\:text-foreground:is(:where(.group).is-user *) { + color: var(--foreground); + } + + .placeholder\:text-gray-500::placeholder { + color: var(--color-gray-500); + } + + .first\:mt-0:first-child { + margin-top: calc(var(--spacing) * 0); + } + + .last\:border-b-0:last-child { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0; + } + + @media (hover: hover) { + .hover\:border-iris-500:hover { + border-color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:border-teal-500:hover { + border-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .hover\:border-transparent:hover { + border-color: #0000; + } + } + + @media (hover: hover) { + .hover\:bg-accent:hover { + background-color: var(--accent); + } + } + + @media (hover: hover) { + .hover\:bg-destructive\/90:hover { + background-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-destructive\/90:hover { + background-color: color-mix(in oklab, var(--destructive) 90%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-gray-500:hover { + background-color: var(--color-gray-500); + } + } + + @media (hover: hover) { + .hover\:bg-gray-800:hover { + background-color: var(--color-gray-800); + } + } + + @media (hover: hover) { + .hover\:bg-gray-950\/60:hover { + background-color: #12100d99; + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-gray-950\/60:hover { + background-color: color-mix(in oklab, var(--color-gray-950) 60%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-iris-500:hover { + background-color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:bg-primary\/90:hover { + background-color: var(--primary); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-primary\/90:hover { + background-color: color-mix(in oklab, var(--primary) 90%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-secondary\/80:hover { + background-color: var(--secondary); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-secondary\/80:hover { + background-color: color-mix(in oklab, var(--secondary) 80%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-teal-500:hover { + background-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .hover\:bg-\[linear-gradient\(180deg\,\#1c1a17_94\.231\%\,\#02e2ac_100\%\)\]:hover { + background-image: linear-gradient(#1c1a17 94.231%, #02e2ac 100%); + } + } + + @media (hover: hover) { + .hover\:bg-\[length\:100\%_30\%\]:hover { + background-size: 100% 30%; + } + } + + @media (hover: hover) { + .hover\:bg-size-\[100\%_50\%\]:hover { + background-size: 100% 50%; + } + } + + @media (hover: hover) { + .hover\:text-accent-foreground:hover { + color: var(--accent-foreground); + } + } + + @media (hover: hover) { + .hover\:text-gray-25:hover { + color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .hover\:text-gray-300:hover { + color: var(--color-gray-300); + } + } + + @media (hover: hover) { + .hover\:text-gray-500:hover { + color: var(--color-gray-500); + } + } + + @media (hover: hover) { + .hover\:text-iris-500:hover { + color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:text-teal-100:hover { + color: var(--color-teal-100); + } + } + + @media (hover: hover) { + .hover\:text-teal-400:hover { + color: var(--color-teal-400); + } + } + + @media (hover: hover) { + .hover\:text-white:hover { + color: var(--color-white); + } + } + + @media (hover: hover) { + .hover\:underline:hover { + text-decoration-line: underline; + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_-3px_rgba\(2\,226\,172\,0\.6\)\]:hover { + --tw-shadow: 0 0 12px -3px var(--tw-shadow-color, #02e2ac99); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_0_rgba\(2\,226\,172\,0\.6\)\]:hover { + --tw-shadow: 0 0 12px 0 var(--tw-shadow-color, #02e2ac99); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_0px_rgba\(2\,226\,172\,0\.4\)\]:hover { + --tw-shadow: 0 0 12px 0px var(--tw-shadow-color, #02e2ac66); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_2px_10px_rgba\(161\,149\,240\,0\.6\)\]:hover { + --tw-shadow: 0 2px 10px var(--tw-shadow-color, #a195f099); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + .focus\:border-transparent:focus { + border-color: #0000; + } + + .focus\:shadow-none:focus { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus\:ring-2:focus { + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus\:ring-gray-25:focus { + --tw-ring-color: var(--color-gray-25); + } + + .focus\:ring-teal-500:focus { + --tw-ring-color: var(--color-teal-500); + } + + .focus\:ring-offset-2:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + + .focus\:ring-offset-gray-900:focus { + --tw-ring-offset-color: var(--color-gray-900); + } + + .focus\:outline-none:focus { + --tw-outline-style: none; + outline-style: none; + } + + .focus-visible\:border-ring:focus-visible { + border-color: var(--ring); + } + + .focus-visible\:ring-\[3px\]:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus-visible\:ring-destructive\/20:focus-visible { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .focus-visible\:ring-destructive\/20:focus-visible { + --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent); + } + } + + .focus-visible\:ring-ring\/50:focus-visible { + --tw-ring-color: var(--ring); + } + + @supports (color: color-mix(in lab, red, red)) { + .focus-visible\:ring-ring\/50:focus-visible { + --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent); + } + } + + .disabled\:pointer-events-none:disabled { + pointer-events: none; + } + + .disabled\:cursor-not-allowed:disabled { + cursor: not-allowed; + } + + .disabled\:bg-gray-800:disabled { + background-color: var(--color-gray-800); + } + + .disabled\:opacity-30:disabled { + opacity: .3; + } + + .disabled\:opacity-50:disabled { + opacity: .5; + } + + .has-\[\>\[data-slot\=button-group\]\]\:gap-2:has( > [data-slot="button-group"]) { + gap: calc(var(--spacing) * 2); + } + + .has-\[\>svg\]\:px-1\.5:has( > svg) { + padding-inline: calc(var(--spacing) * 1.5); + } + + .has-\[\>svg\]\:px-2\.5:has( > svg) { + padding-inline: calc(var(--spacing) * 2.5); + } + + .has-\[\>svg\]\:px-3:has( > svg) { + padding-inline: calc(var(--spacing) * 3); + } + + .has-\[\>svg\]\:px-4:has( > svg) { + padding-inline: calc(var(--spacing) * 4); + } + + .aria-invalid\:border-destructive[aria-invalid="true"] { + border-color: var(--destructive); + } + + .aria-invalid\:ring-destructive\/20[aria-invalid="true"] { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .aria-invalid\:ring-destructive\/20[aria-invalid="true"] { + --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent); + } + } + + .data-\[orientation\=horizontal\]\:h-px[data-orientation="horizontal"] { + height: 1px; + } + + .data-\[orientation\=horizontal\]\:w-full[data-orientation="horizontal"] { + width: 100%; + } + + .data-\[orientation\=vertical\]\:h-auto[data-orientation="vertical"] { + height: auto; + } + + .data-\[orientation\=vertical\]\:h-full[data-orientation="vertical"] { + height: 100%; + } + + .data-\[orientation\=vertical\]\:w-px[data-orientation="vertical"] { + width: 1px; + } + + .data-\[side\=bottom\]\:slide-in-from-top-2[data-side="bottom"] { + --tw-enter-translate-y: calc(2 * var(--spacing) * -1); + } + + .data-\[side\=left\]\:slide-in-from-right-2[data-side="left"] { + --tw-enter-translate-x: calc(2 * var(--spacing)); + } + + .data-\[side\=right\]\:slide-in-from-left-2[data-side="right"] { + --tw-enter-translate-x: calc(2 * var(--spacing) * -1); + } + + .data-\[side\=top\]\:slide-in-from-bottom-2[data-side="top"] { + --tw-enter-translate-y: calc(2 * var(--spacing)); + } + + .data-\[state\=closed\]\:animate-\[dropdown-out_100ms_ease-in\][data-state="closed"] { + animation: .1s ease-in dropdown-out; + } + + .data-\[state\=closed\]\:animate-out[data-state="closed"] { + animation: exit var(--tw-animation-duration, var(--tw-duration, .15s)) var(--tw-ease, ease) var(--tw-animation-delay, 0s) var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal) var(--tw-animation-fill-mode, none); + } + + .data-\[state\=closed\]\:fade-out-0[data-state="closed"] { + --tw-exit-opacity: 0; + } + + .data-\[state\=closed\]\:zoom-out-95[data-state="closed"] { + --tw-exit-scale: .95; + } + + @media (min-width: 40rem) { + .sm\:top-0 { + top: calc(var(--spacing) * 0); + } + } + + @media (min-width: 40rem) { + .sm\:top-\[15\%\] { + top: 15%; + } + } + + @media (min-width: 40rem) { + .sm\:right-0 { + right: calc(var(--spacing) * 0); + } + } + + @media (min-width: 40rem) { + .sm\:left-auto { + left: auto; + } + } + + @media (min-width: 40rem) { + .sm\:block { + display: block; + } + } + + @media (min-width: 40rem) { + .sm\:h-full { + height: 100%; + } + } + + @media (min-width: 40rem) { + .sm\:w-full { + width: 100%; + } + } + + @media (min-width: 40rem) { + .sm\:max-w-\[60\%\] { + max-width: 60%; + } + } + + @media (min-width: 40rem) { + .sm\:max-w-sm { + max-width: var(--container-sm); + } + } + + @media (min-width: 40rem) { + .sm\:animate-\[sidebar-in-right_250ms_ease-out\] { + animation: .25s ease-out sidebar-in-right; + } + } + + @media (min-width: 40rem) { + .sm\:animate-\[sidebar-out-right_200ms_ease-in_forwards\] { + animation: .2s ease-in forwards sidebar-out-right; + } + } + + @media (min-width: 40rem) { + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 40rem) { + .sm\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 40rem) { + .sm\:flex-row { + flex-direction: row; + } + } + + @media (min-width: 40rem) { + .sm\:items-center { + align-items: center; + } + } + + @media (min-width: 40rem) { + .sm\:items-end { + align-items: flex-end; + } + } + + @media (min-width: 40rem) { + .sm\:justify-between { + justify-content: space-between; + } + } + + @media (min-width: 40rem) { + .sm\:gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } + } + + @media (min-width: 40rem) { + .sm\:gap-x-10 { + column-gap: calc(var(--spacing) * 10); + } + } + + @media (min-width: 40rem) { + .sm\:rounded-t-none { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + } + + @media (min-width: 40rem) { + .sm\:border-t-0 { + border-top-style: var(--tw-border-style); + border-top-width: 0; + } + } + + @media (min-width: 40rem) { + .sm\:border-l { + border-left-style: var(--tw-border-style); + border-left-width: 1px; + } + } + + @media (min-width: 40rem) { + .sm\:px-5 { + padding-inline: calc(var(--spacing) * 5); + } + } + + @media (min-width: 40rem) { + .sm\:px-6 { + padding-inline: calc(var(--spacing) * 6); + } + } + + @media (min-width: 40rem) { + .sm\:px-8 { + padding-inline: calc(var(--spacing) * 8); + } + } + + @media (min-width: 40rem) { + .sm\:px-12 { + padding-inline: calc(var(--spacing) * 12); + } + } + + @media (min-width: 40rem) { + .sm\:pl-10 { + padding-left: calc(var(--spacing) * 10); + } + } + + @media (min-width: 40rem) { + .sm\:text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-5xl\/14 { + font-size: var(--text-5xl); + line-height: calc(var(--spacing) * 14); + } + } + + @media (min-width: 40rem) { + .sm\:text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-\[32px\] { + font-size: 32px; + } + } + + @media (min-width: 40rem) { + .sm\:text-\[48px\] { + font-size: 48px; + } + } + + @media (min-width: 48rem) { + .md\:mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + } + + @media (min-width: 48rem) { + .md\:mb-24 { + margin-bottom: calc(var(--spacing) * 24); + } + } + + @media (min-width: 48rem) { + .md\:block { + display: block; + } + } + + @media (min-width: 48rem) { + .md\:flex { + display: flex; + } + } + + @media (min-width: 48rem) { + .md\:grid { + display: grid; + } + } + + @media (min-width: 48rem) { + .md\:hidden { + display: none; + } + } + + @media (min-width: 48rem) { + .md\:h-80 { + height: calc(var(--spacing) * 80); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:flex-row { + flex-direction: row; + } + } + + @media (min-width: 48rem) { + .md\:items-center { + align-items: center; + } + } + + @media (min-width: 48rem) { + .md\:items-start { + align-items: flex-start; + } + } + + @media (min-width: 48rem) { + .md\:gap-8 { + gap: calc(var(--spacing) * 8); + } + } + + @media (min-width: 48rem) { + .md\:gap-14 { + gap: calc(var(--spacing) * 14); + } + } + + @media (min-width: 48rem) { + .md\:p-10 { + padding: calc(var(--spacing) * 10); + } + } + + @media (min-width: 48rem) { + .md\:px-12 { + padding-inline: calc(var(--spacing) * 12); + } + } + + @media (min-width: 48rem) { + .md\:py-12 { + padding-block: calc(var(--spacing) * 12); + } + } + + @media (min-width: 48rem) { + .md\:pt-24 { + padding-top: calc(var(--spacing) * 24); + } + } + + @media (min-width: 48rem) { + .md\:pb-28 { + padding-bottom: calc(var(--spacing) * 28); + } + } + + @media (min-width: 48rem) { + .md\:text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-5xl { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-7xl\/20 { + font-size: var(--text-7xl); + line-height: calc(var(--spacing) * 20); + } + } + + @media (min-width: 48rem) { + .md\:text-\[32px\] { + font-size: 32px; + } + } + + @media (min-width: 48rem) { + .md\:text-\[64px\] { + font-size: 64px; + } + } + + @media (min-width: 48rem) { + .md\:text-\[80px\] { + font-size: 80px; + } + } + + @media (min-width: 64rem) { + .lg\:col-span-2 { + grid-column: span 2 / span 2; + } + } + + @media (min-width: 64rem) { + .lg\:flex { + display: flex; + } + } + + @media (min-width: 64rem) { + .lg\:hidden { + display: none; + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-\[2\.2fr_1fr_1fr_1fr\] { + grid-template-columns: 2.2fr 1fr 1fr 1fr; + } + } + + @media (min-width: 64rem) { + .lg\:px-0 { + padding-inline: calc(var(--spacing) * 0); + } + } + + @media (min-width: 64rem) { + .lg\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 64rem) { + .lg\:text-\[38px\] { + font-size: 38px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[52px\] { + font-size: 52px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[64px\] { + font-size: 64px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[72px\] { + font-size: 72px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[88px\] { + font-size: 88px; + } + } + + @media (min-width: 80rem) { + .xl\:flex { + display: flex; + } + } + + @media (min-width: 80rem) { + .xl\:grid-cols-\[2fr_3fr\] { + grid-template-columns: 2fr 3fr; + } + } + + @media (min-width: 80rem) { + .xl\:gap-8 { + gap: calc(var(--spacing) * 8); + } + } + + @media (min-width: 80rem) { + .xl\:px-0 { + padding-inline: calc(var(--spacing) * 0); + } + } + + @media (min-width: 80rem) { + .xl\:px-20 { + padding-inline: calc(var(--spacing) * 20); + } + } + + @media (min-width: 80rem) { + .xl\:pl-14 { + padding-left: calc(var(--spacing) * 14); + } + } + + @media (min-width: 80rem) { + .xl\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + .dark\:border-input:is(.dark *) { + border-color: var(--input); + } + + .dark\:bg-destructive\/60:is(.dark *) { + background-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:bg-destructive\/60:is(.dark *) { + background-color: color-mix(in oklab, var(--destructive) 60%, transparent); + } + } + + .dark\:bg-input\/30:is(.dark *) { + background-color: var(--input); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:bg-input\/30:is(.dark *) { + background-color: color-mix(in oklab, var(--input) 30%, transparent); + } + } + + @media (hover: hover) { + .dark\:hover\:bg-accent\/50:is(.dark *):hover { + background-color: var(--accent); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:hover\:bg-accent\/50:is(.dark *):hover { + background-color: color-mix(in oklab, var(--accent) 50%, transparent); + } + } + } + + @media (hover: hover) { + .dark\:hover\:bg-input\/50:is(.dark *):hover { + background-color: var(--input); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:hover\:bg-input\/50:is(.dark *):hover { + background-color: color-mix(in oklab, var(--input) 50%, transparent); + } + } + } + + .dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible { + --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent); + } + } + + .dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid="true"] { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid="true"] { + --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent); + } + } + + .\[\&_a\]\:text-teal-400 a { + color: var(--color-teal-400); + } + + .\[\&_a\]\:underline a { + text-decoration-line: underline; + } + + .\[\&_a\:hover\]\:text-teal-300 a:hover { + color: var(--color-teal-300); + } + + .\[\&_code\]\:rounded code { + border-radius: .25rem; + } + + .\[\&_code\]\:bg-gray-700 code { + background-color: var(--color-gray-700); + } + + .\[\&_code\]\:px-1 code { + padding-inline: calc(var(--spacing) * 1); + } + + .\[\&_code\]\:py-0\.5 code { + padding-block: calc(var(--spacing) * .5); + } + + .\[\&_code\]\:text-xs code { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + + .\[\&_li\]\:mb-0\.5 li { + margin-bottom: calc(var(--spacing) * .5); + } + + .\[\&_ol\]\:mb-2 ol { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_ol\]\:list-decimal ol { + list-style-type: decimal; + } + + .\[\&_ol\]\:pl-4 ol { + padding-left: calc(var(--spacing) * 4); + } + + .\[\&_p\]\:mb-2 p { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_p\:last-child\]\:mb-0 p:last-child { + margin-bottom: calc(var(--spacing) * 0); + } + + .\[\&_strong\]\:font-semibold strong { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + + .\[\&_strong\]\:text-gray-25 strong { + color: var(--color-gray-25); + } + + .\[\&_svg\]\:pointer-events-none svg { + pointer-events: none; + } + + .\[\&_svg\]\:shrink-0 svg { + flex-shrink: 0; + } + + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*="size-"]) { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*="size-"]) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + + .\[\&_ul\]\:mb-2 ul { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_ul\]\:list-disc ul { + list-style-type: disc; + } + + .\[\&_ul\]\:pl-4 ul { + padding-left: calc(var(--spacing) * 4); + } + + .\[\&\>\*\]\:focus-visible\:relative > *:focus-visible { + position: relative; + } + + .\[\&\>\*\]\:focus-visible\:z-10 > *:focus-visible { + z-index: 10; + } + + .\[\&\>\*\:first-child\]\:mt-0 > :first-child { + margin-top: calc(var(--spacing) * 0); + } + + .\[\&\>\*\:last-child\]\:mb-0 > :last-child { + margin-bottom: calc(var(--spacing) * 0); + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none > :not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-md > :not(:first-child) { + border-top-left-radius: calc(var(--radius) - 2px); + border-bottom-left-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none > :not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:border-t-0 > :not(:first-child) { + border-top-style: var(--tw-border-style); + border-top-width: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:border-l-0 > :not(:first-child) { + border-left-style: var(--tw-border-style); + border-left-width: 0; + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-md > :not(:last-child) { + border-top-right-radius: calc(var(--radius) - 2px); + border-bottom-right-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none > :not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none > :not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md:has(:is(select[aria-hidden="true"]:last-child)) > [data-slot="select-trigger"]:last-of-type { + border-top-right-radius: calc(var(--radius) - 2px); + border-bottom-right-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit > [data-slot="select-trigger"]:not([class*="w-"]) { + width: fit-content; + } + + .\[\&\>div\]\:pb-0 > div { + padding-bottom: calc(var(--spacing) * 0); + } + + .\[\&\>input\]\:flex-1 > input { + flex: 1; + } + + .texture-woodcut { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E"); + } + + .bg-starfield { + background-image: radial-gradient(1px 1px at 20px 30px, #fff, #0000), radial-gradient(1px 1px at 40px 70px, #fffc, #0000), radial-gradient(1px 1px at 50px 160px, #fff9, #0000), radial-gradient(1px 1px at 90px 40px, #fff, #0000), radial-gradient(1px 1px at 130px 80px, #ffffffb3, #0000), radial-gradient(1px 1px at 160px 120px, #ffffff80, #0000); + background-repeat: repeat; + background-size: 200px 200px; + } +} + +@property --tw-animation-delay { + syntax: "*"; + inherits: false; + initial-value: 0s; +} + +@property --tw-animation-direction { + syntax: "*"; + inherits: false; + initial-value: normal; +} + +@property --tw-animation-duration { + syntax: "*"; + inherits: false +} + +@property --tw-animation-fill-mode { + syntax: "*"; + inherits: false; + initial-value: none; +} + +@property --tw-animation-iteration-count { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-exit-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-exit-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +:root { + --radius: .625rem; + --background: #1c1a17; + --foreground: #fbfaf9; + --card: #1c1a17; + --card-foreground: #fbfaf9; + --popover: #1c1a17; + --popover-foreground: #fbfaf9; + --primary: #02e2ac; + --primary-foreground: #1c1a17; + --secondary: #46423d; + --secondary-foreground: #fbfaf9; + --muted: #46423d; + --muted-foreground: #7c776f; + --accent: #46423d; + --accent-foreground: #fbfaf9; + --destructive: #ef4444; + --border: #46423d; + --input: #46423d; + --ring: #02e2ac; +} + +:focus-visible { + outline-style: var(--tw-outline-style); + outline-offset: 2px; + outline-width: 2px; + outline-color: var(--color-gray-25); +} + +::selection { + color: #fff; + background-color: #ffffff4d; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background-color: var(--color-gray-950); +} + +::-webkit-scrollbar-thumb { + background-color: var(--color-gray-800); + border-radius: 3.40282e38px; +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--color-gray-500); +} + +a:not(.btn-primary):not(.btn-secondary):not(.btn-ghost) { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); +} + +pre { + border-radius: var(--radius); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-800); + background-color: var(--color-gray-950); + padding: calc(var(--spacing) * 4); + overflow-x: auto; +} + +code:not(pre code) { + background-color: var(--color-gray-800); + padding-inline: calc(var(--spacing) * 1.5); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-gray-25); + border-radius: .25rem; +} + +blockquote { + margin-block: calc(var(--spacing) * 6); + border-left-style: var(--tw-border-style); + border-left-width: 2px; + border-color: var(--color-gray-25); + padding-left: calc(var(--spacing) * 6); + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + color: var(--color-gray-500); + font-style: italic; +} + +table { + border-collapse: collapse; + width: 100%; +} + +th { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + border-color: var(--color-gray-800); + padding-block: calc(var(--spacing) * 3); + text-align: left; + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + color: var(--color-gray-500); + text-transform: uppercase; +} + +td { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + border-color: var(--color-gray-800); + padding-block: calc(var(--spacing) * 3); +} + +hr { + margin-block: calc(var(--spacing) * 8); + border-color: var(--color-gray-800); +} + +input, textarea, select { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-200); + background-color: #1c1a1799; +} + +@supports (color: color-mix(in lab, red, red)) { + input, textarea, select { + background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent); + } +} + +input, textarea, select { + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 3); + font-family: var(--font-mono); + color: var(--color-gray-25); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .4s; + transition-duration: .4s; +} + +:is(input, textarea, select)::placeholder { + color: var(--color-gray-500); +} + +@media (hover: hover) { + :is(input, textarea, select):hover { + border-color: var(--color-teal-500); + } +} + +:is(input, textarea, select):focus { + border-color: var(--color-teal-500); + --tw-outline-style: none; + outline-style: none; +} + +input, textarea, select { + font-family: var(--font-sans); +} + +@keyframes dropdown-in { + from { + opacity: 0; + transform: scale(.95)translateY(-4px); + } + + to { + opacity: 1; + transform: scale(1)translateY(0); + } +} + +@keyframes dropdown-out { + from { + opacity: 1; + transform: scale(1)translateY(0); + } + + to { + opacity: 0; + transform: scale(.95)translateY(-4px); + } +} + +@keyframes sidebar-in-right { + from { + transform: translateX(100%); + } + + to { + transform: translateX(0); + } +} + +@keyframes sidebar-out-right { + from { + transform: translateX(0); + } + + to { + transform: translateX(100%); + } +} + +@keyframes sidebar-in-bottom { + from { + transform: translateY(100%); + } + + to { + transform: translateY(0); + } +} + +@keyframes sidebar-out-bottom { + from { + transform: translateY(0); + } + + to { + transform: translateY(100%); + } +} + +@keyframes twinkle { + 0%, 100% { + opacity: 1; + } + + 50% { + opacity: .5; + } +} + +@keyframes float { + 0%, 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-10px); + } +} + +.animate-twinkle { + animation: 3s ease-in-out infinite twinkle; +} + +.animate-float { + animation: 6s ease-in-out infinite float; +} + +.icon-hover-container { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + transition-duration: .3s; +} + +.icon-hover-container:hover img { + filter: brightness(1.2); +} + +.icon-hover-container svg path:nth-child(2) { + transform-origin: center; + transition: all .3s; +} + +.icon-hover-container:hover svg path:nth-child(2) { + transform: scale(.65); + fill: #fff !important; +} + +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-rotate-x { + syntax: "*"; + inherits: false +} + +@property --tw-rotate-y { + syntax: "*"; + inherits: false +} + +@property --tw-rotate-z { + syntax: "*"; + inherits: false +} + +@property --tw-skew-x { + syntax: "*"; + inherits: false +} + +@property --tw-skew-y { + syntax: "*"; + inherits: false +} + +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} + +@property --tw-gradient-position { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} + +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} + +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} + +@property --tw-leading { + syntax: "*"; + inherits: false +} + +@property --tw-font-weight { + syntax: "*"; + inherits: false +} + +@property --tw-tracking { + 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: 0; +} + +@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 +} + +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-duration { + syntax: "*"; + inherits: false +} + +@property --tw-ease { + syntax: "*"; + inherits: false +} + +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +@keyframes enter { + from { + opacity: var(--tw-enter-opacity, 1); + transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0)); + filter: blur(var(--tw-enter-blur, 0)); + } +} + +@keyframes exit { + to { + opacity: var(--tw-exit-opacity, 1); + transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0)); + filter: blur(var(--tw-exit-blur, 0)); + } +} + +/*# sourceMappingURL=%5Broot-of-the-server%5D__d2131161._.css.map*/ \ No newline at end of file diff --git a/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css.map b/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css.map new file mode 100644 index 00000000..5f4e9052 --- /dev/null +++ b/gitcoin_co_30/.next/dev/static/chunks/[root-of-the-server]__d2131161._.css.map @@ -0,0 +1,10 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/inter_b2991b2.module.css"],"sourcesContent":["/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7W0Q5n-wU.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7W0Q5nw.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: 'Inter Fallback';\n src: local(\"Arial\");\n ascent-override: 90.44%;\ndescent-override: 22.52%;\nline-gap-override: 0.00%;\nsize-adjust: 107.12%;\n\n}\n.className {\n font-family: 'Inter', 'Inter Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-sans: 'Inter', 'Inter Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, + {"offset": {"line": 83, "column": 0}, "map": {"version":3,"sources":["file:///Users/owocki/Sites/gitcoin_co_30/src/app/bdogrotesk_6221f274.module.css"],"sourcesContent":["@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-Light.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 300;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-Regular.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 400;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-Medium.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 500;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-DemiBold.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 600;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-Bold.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 700;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-ExtraBold.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 800;\n}\n@font-face {\n \nfont-family: 'bdoGrotesk';\n src: url('@vercel/turbopack-next/internal/font/local/font?{%22path%22:%22../../public/assets/fonts/BDOGrotesk-Black.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}') format('woff2');\n font-display: swap;\n \nfont-weight: 900;\n}\n\n@font-face {\n font-family: 'bdoGrotesk Fallback';\n src: local(\"Arial\");\n ascent-override: 75.13%;\ndescent-override: 18.78%;\nline-gap-override: 46.95%;\nsize-adjust: 106.49%;\n\n}\n\n.className {\n font-family: 'bdoGrotesk', 'bdoGrotesk Fallback';\n \n}\n.variable {\n --font-heading: 'bdoGrotesk', 'bdoGrotesk Fallback';\n}\n\n"],"names":[],"mappings":"AAAA;;;;;;;AAQA;;;;;;;AAQA;;;;;;;AAQA;;;;;;;AAQA;;;;;;;AAQA;;;;;;;AAQA;;;;;;;AASA;;;;;;;;;AAUA;;;;AAIA"}}, + {"offset": {"line": 150, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/ibm_plex_mono_6ef6cd05.module.css"],"sourcesContent":["/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iIq131nj-otFQ.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1isq131nj-otFQ.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iAq131nj-otFQ.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iEq131nj-otFQ.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1i8q131nj-o.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgsAXHNlYzg.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgsAXHNlYzg.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgsAXHNlYzg.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgsAXHNlYzg.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgsAXHNk.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: 'IBM Plex Mono Fallback';\n src: local(\"Arial\");\n ascent-override: 76.16%;\ndescent-override: 20.43%;\nline-gap-override: 0.00%;\nsize-adjust: 134.59%;\n\n}\n.className {\n font-family: 'IBM Plex Mono', 'IBM Plex Mono Fallback';\n font-style: normal;\n\n}\n.variable {\n --font-mono: 'IBM Plex Mono', 'IBM Plex Mono Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;AAKA","ignoreList":[0]}}, + {"offset": {"line": 259, "column": 0}, "map": {"version":3,"sources":["turbopack:///[next]/internal/font/google/source_serif_4_1a966d00.module.css"],"sourcesContent":["/* cyrillic-ext */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnhZdDs4DrjTMX0gz.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnh9dDs4DrjTMX0gz.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnhhdDs4DrjTMX0gz.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnhRdDs4DrjTMX0gz.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnhVdDs4DrjTMX0gz.woff2%22,%22preload%22:false,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Source Serif 4';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(@vercel/turbopack-next/internal/font/google/font?{%22url%22:%22https://fonts.gstatic.com/s/sourceserif4/v14/vEFy2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6OAVIJmeUDygwjihdqnhtdDs4DrjTMXw.woff2%22,%22preload%22:true,%22has_size_adjust%22:true}) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: 'Source Serif 4 Fallback';\n src: local(\"Times New Roman\");\n ascent-override: 87.87%;\ndescent-override: 28.41%;\nline-gap-override: 0.00%;\nsize-adjust: 117.91%;\n\n}\n.className {\n font-family: 'Source Serif 4', 'Source Serif 4 Fallback';\n font-weight: 400;\nfont-style: normal;\n\n}\n.variable {\n --font-serif: 'Source Serif 4', 'Source Serif 4 Fallback';\n}\n"],"names":[],"mappings":"AACA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AASA;;;;;;;;;AAQA;;;;;;;;;AASA;;;;;;AAMA","ignoreList":[0]}}, + {"offset": {"line": 333, "column": 0}, "map": {"version":3,"sources":["file:///Users/owocki/Sites/gitcoin_co_30/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: var(--font-sans);\n --font-serif: var(--font-serif);\n --font-mono: var(--font-mono);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n --color-teal-100: #A1F7E7;\n --color-teal-300: #2FE5C0;\n --color-teal-400: #12D9B2;\n --color-teal-500: #02E2AC;\n --color-teal-600: #00B894;\n --color-teal-700: #008F73;\n --color-teal-900: #00483E;\n --color-teal-950: #002E28;\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: #EAE8E4;\n --color-gray-200: #D6D3CD;\n --color-gray-300: #B8B4AC;\n --color-gray-400: #9A958C;\n --color-gray-500: #7C776F;\n --color-gray-600: #605B55;\n --color-gray-700: #46423D;\n --color-gray-800: #2F2C28;\n --color-gray-900: #1C1A17;\n --color-gray-950: #12100D;\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --tracking-wider: 0.05em;\n --leading-snug: 1.375;\n --leading-relaxed: 1.625;\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-3xl: 64px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n --font-heading: var(--font-heading);\n --color-iris-500: #A195F0;\n --color-gray-25: #FBFAF9;\n --color-system-warning: #eab308;\n --color-system-error: #ef4444;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .collapse {\n visibility: collapse;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .-top-4 {\n top: calc(var(--spacing) * -4);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-7 {\n top: calc(var(--spacing) * 7);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[10\\%\\] {\n top: 10%;\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-4 {\n bottom: calc(var(--spacing) * -4);\n }\n .-bottom-12 {\n bottom: calc(var(--spacing) * -12);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .-left-12 {\n left: calc(var(--spacing) * -12);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-1\\/2 {\n left: calc(1/2 * 100%);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .isolate {\n isolation: isolate;\n }\n .z-0 {\n z-index: 0;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-30 {\n z-index: 30;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .z-101 {\n z-index: 101;\n }\n .z-102 {\n z-index: 102;\n }\n .z-\\[1\\] {\n z-index: 1;\n }\n .z-\\[100\\] {\n z-index: 100;\n }\n .z-\\[101\\] {\n z-index: 101;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .\\!m-0 {\n margin: calc(var(--spacing) * 0) !important;\n }\n .-mx-6 {\n margin-inline: calc(var(--spacing) * -6);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n .my-6 {\n margin-block: calc(var(--spacing) * 6);\n }\n .my-8 {\n margin-block: calc(var(--spacing) * 8);\n }\n .my-10 {\n margin-block: calc(var(--spacing) * 10);\n }\n .-mt-6 {\n margin-top: calc(var(--spacing) * -6);\n }\n .-mt-\\[1px\\] {\n margin-top: calc(1px * -1);\n }\n .-mt-\\[72px\\] {\n margin-top: calc(72px * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-14 {\n margin-top: calc(var(--spacing) * 14);\n }\n .mt-24 {\n margin-top: calc(var(--spacing) * 24);\n }\n .mt-30 {\n margin-top: calc(var(--spacing) * 30);\n }\n .mt-\\[5px\\] {\n margin-top: 5px;\n }\n .mt-auto {\n margin-top: auto;\n }\n .-mr-\\[1px\\] {\n margin-right: calc(1px * -1);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .mb-14 {\n margin-bottom: calc(var(--spacing) * 14);\n }\n .mb-16 {\n margin-bottom: calc(var(--spacing) * 16);\n }\n .ml-8 {\n margin-left: calc(var(--spacing) * 8);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-3\\/1 {\n aspect-ratio: 3/1;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-18 {\n height: calc(var(--spacing) * 18);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-52 {\n height: calc(var(--spacing) * 52);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-\\[3\\.7rem\\] {\n height: 3.7rem;\n }\n .h-\\[21px\\] {\n height: 21px;\n }\n .h-\\[45\\%\\] {\n height: 45%;\n }\n .h-\\[48px\\] {\n height: 48px;\n }\n .h-\\[90dvh\\] {\n height: 90dvh;\n }\n .h-\\[160px\\] {\n height: 160px;\n }\n .h-\\[326px\\] {\n height: 326px;\n }\n .h-\\[360px\\] {\n height: 360px;\n }\n .h-full {\n height: 100%;\n }\n .max-h-\\[60vh\\] {\n max-height: 60vh;\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[130px\\] {\n min-height: 130px;\n }\n .min-h-\\[280px\\] {\n min-height: 280px;\n }\n .min-h-\\[386px\\] {\n min-height: 386px;\n }\n .min-h-\\[520px\\] {\n min-height: 520px;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[180px\\] {\n width: 180px;\n }\n .w-\\[calc\\(100\\%-2rem\\)\\] {\n width: calc(100% - 2rem);\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-170 {\n max-width: calc(var(--spacing) * 170);\n }\n .max-w-240 {\n max-width: calc(var(--spacing) * 240);\n }\n .max-w-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-\\[95\\%\\] {\n max-width: 95%;\n }\n .max-w-\\[267px\\] {\n max-width: 267px;\n }\n .max-w-\\[295px\\] {\n max-width: 295px;\n }\n .max-w-\\[348px\\] {\n max-width: 348px;\n }\n .max-w-\\[400px\\] {\n max-width: 400px;\n }\n .max-w-\\[580px\\] {\n max-width: 580px;\n }\n .max-w-\\[640px\\] {\n max-width: 640px;\n }\n .max-w-\\[700px\\] {\n max-width: 700px;\n }\n .max-w-\\[730px\\] {\n max-width: 730px;\n }\n .max-w-\\[732px\\] {\n max-width: 732px;\n }\n .max-w-\\[796px\\] {\n max-width: 796px;\n }\n .max-w-\\[850px\\] {\n max-width: 850px;\n }\n .max-w-\\[908px\\] {\n max-width: 908px;\n }\n .max-w-\\[980px\\] {\n max-width: 980px;\n }\n .max-w-\\[1166px\\] {\n max-width: 1166px;\n }\n .max-w-\\[1216px\\] {\n max-width: 1216px;\n }\n .max-w-\\[1229px\\] {\n max-width: 1229px;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-none {\n max-width: none;\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[180px\\] {\n min-width: 180px;\n }\n .min-w-full {\n min-width: 100%;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .grow {\n flex-grow: 1;\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .origin-top-left {\n transform-origin: 0 0;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-\\[dropdown-in_150ms_ease-out\\] {\n animation: dropdown-in 150ms ease-out;\n }\n .animate-\\[dropdown-out_100ms_ease-in_forwards\\] {\n animation: dropdown-out 100ms ease-in forwards;\n }\n .animate-\\[sidebar-in-bottom_250ms_ease-out\\] {\n animation: sidebar-in-bottom 250ms ease-out;\n }\n .animate-\\[sidebar-out-bottom_200ms_ease-in_forwards\\] {\n animation: sidebar-out-bottom 200ms ease-in forwards;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-y {\n resize: vertical;\n }\n .list-outside {\n list-style-position: outside;\n }\n .list-decimal {\n list-style-type: decimal;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[1fr_1fr_1\\.4fr\\] {\n grid-template-columns: 1fr 1fr 1.4fr;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .gap-14 {\n gap: calc(var(--spacing) * 14);\n }\n .gap-\\[15px\\] {\n gap: 15px;\n }\n .space-y-0 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-12 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .gap-x-2 {\n column-gap: calc(var(--spacing) * 2);\n }\n .self-end {\n align-self: flex-end;\n }\n .self-stretch {\n align-self: stretch;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-visible {\n overflow: visible;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-t-2xl {\n border-top-left-radius: calc(var(--radius) + 8px);\n border-top-right-radius: calc(var(--radius) + 8px);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) + 4px);\n border-top-right-radius: calc(var(--radius) + 4px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[0\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 0.5px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-none {\n --tw-border-style: none;\n border-style: none;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-gray-25 {\n border-color: var(--color-gray-25);\n }\n .border-gray-300 {\n border-color: var(--color-gray-300);\n }\n .border-gray-300\\/40 {\n border-color: color-mix(in srgb, #B8B4AC 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-300) 40%, transparent);\n }\n }\n .border-gray-500 {\n border-color: var(--color-gray-500);\n }\n .border-gray-500\\/60 {\n border-color: color-mix(in srgb, #7C776F 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-500) 60%, transparent);\n }\n }\n .border-gray-600 {\n border-color: var(--color-gray-600);\n }\n .border-gray-700 {\n border-color: var(--color-gray-700);\n }\n .border-gray-800 {\n border-color: var(--color-gray-800);\n }\n .border-gray-950 {\n border-color: var(--color-gray-950);\n }\n .border-red-500\\/30 {\n border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-red-500) 30%, transparent);\n }\n }\n .border-system-error {\n border-color: var(--color-system-error);\n }\n .border-system-error\\/30 {\n border-color: color-mix(in srgb, #ef4444 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-system-error) 30%, transparent);\n }\n }\n .border-system-warning\\/30 {\n border-color: color-mix(in srgb, #eab308 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-system-warning) 30%, transparent);\n }\n }\n .border-teal-500 {\n border-color: var(--color-teal-500);\n }\n .border-teal-700 {\n border-color: var(--color-teal-700);\n }\n .border-yellow-600 {\n border-color: var(--color-yellow-600);\n }\n .border-yellow-700\\/50 {\n border-color: color-mix(in srgb, oklch(55.4% 0.135 66.442) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-yellow-700) 50%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/60 {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n .bg-black\\/85 {\n background-color: color-mix(in srgb, #000 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 85%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-25 {\n background-color: var(--color-gray-25);\n }\n .bg-gray-25\\/10 {\n background-color: color-mix(in srgb, #FBFAF9 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent);\n }\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-600 {\n background-color: var(--color-gray-600);\n }\n .bg-gray-700 {\n background-color: var(--color-gray-700);\n }\n .bg-gray-800 {\n background-color: var(--color-gray-800);\n }\n .bg-gray-800\\/40 {\n background-color: color-mix(in srgb, #2F2C28 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent);\n }\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-gray-900\\/60 {\n background-color: color-mix(in srgb, #1C1A17 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent);\n }\n }\n .bg-gray-900\\/70 {\n background-color: color-mix(in srgb, #1C1A17 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 70%, transparent);\n }\n }\n .bg-gray-900\\/90 {\n background-color: color-mix(in srgb, #1C1A17 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 90%, transparent);\n }\n }\n .bg-gray-900\\/95 {\n background-color: color-mix(in srgb, #1C1A17 95%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 95%, transparent);\n }\n }\n .bg-gray-950 {\n background-color: var(--color-gray-950);\n }\n .bg-input {\n background-color: var(--input);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-red-500\\/10 {\n background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent);\n }\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-system-error\\/20 {\n background-color: color-mix(in srgb, #ef4444 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-system-error) 20%, transparent);\n }\n }\n .bg-system-warning\\/20 {\n background-color: color-mix(in srgb, #eab308 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-system-warning) 20%, transparent);\n }\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-teal-500\\/20 {\n background-color: color-mix(in srgb, #02E2AC 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-teal-500) 20%, transparent);\n }\n }\n .bg-teal-600 {\n background-color: var(--color-teal-600);\n }\n .bg-teal-700 {\n background-color: var(--color-teal-700);\n }\n .bg-teal-950 {\n background-color: var(--color-teal-950);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-yellow-900\\/30 {\n background-color: color-mix(in srgb, oklch(42.1% 0.095 57.708) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-yellow-900) 30%, transparent);\n }\n }\n .bg-yellow-950 {\n background-color: var(--color-yellow-950);\n }\n .bg-linear-to-b {\n --tw-gradient-position: to bottom;\n @supports (background-image: linear-gradient(in lab, red, red)) {\n --tw-gradient-position: to bottom in oklab;\n }\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-linear-to-t {\n --tw-gradient-position: to top;\n @supports (background-image: linear-gradient(in lab, red, red)) {\n --tw-gradient-position: to top in oklab;\n }\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-\\[image\\:linear-gradient\\(to_top\\,rgba\\(161\\,149\\,240\\,0\\.7\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(161,149,240,0.7),transparent);\n }\n .bg-\\[linear-gradient\\(to_top\\,rgba\\(2\\,226\\,172\\,0\\.3\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(2,226,172,0.3),transparent);\n }\n .bg-\\[linear-gradient\\(to_top\\,rgba\\(2\\,226\\,172\\,0\\.5\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(2,226,172,0.5),transparent);\n }\n .bg-\\[radial-gradient\\(ellipse_at_center\\,_var\\(--tw-gradient-stops\\)\\)\\] {\n background-image: radial-gradient(ellipse at center, var(--tw-gradient-stops));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-teal-500\\/25 {\n --tw-gradient-from: color-mix(in srgb, #02E2AC 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-teal-500) 25%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-transparent {\n --tw-gradient-from: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-gray-950 {\n --tw-gradient-via: var(--color-gray-950);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-950\\/80 {\n --tw-gradient-via: color-mix(in srgb, #12100D 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 80%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black {\n --tw-gradient-to: var(--color-black);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-teal-500\\/30 {\n --tw-gradient-to: color-mix(in srgb, #02E2AC 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-teal-500) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .bg-\\[length\\:100\\%_0\\%\\] {\n background-size: 100% 0%;\n }\n .bg-size-\\[100\\%_0\\%\\] {\n background-size: 100% 0%;\n }\n .bg-size-\\[100\\%_6\\%\\] {\n background-size: 100% 6%;\n }\n .bg-bottom {\n background-position: bottom;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-cover {\n object-fit: cover;\n }\n .object-center {\n object-position: center;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .\\!px-4 {\n padding-inline: calc(var(--spacing) * 4) !important;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n .px-10 {\n padding-inline: calc(var(--spacing) * 10);\n }\n .px-\\[27px\\] {\n padding-inline: 27px;\n }\n .\\!py-1 {\n padding-block: calc(var(--spacing) * 1) !important;\n }\n .\\!py-4 {\n padding-block: calc(var(--spacing) * 4) !important;\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-9 {\n padding-block: calc(var(--spacing) * 9);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-14 {\n padding-block: calc(var(--spacing) * 14);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-\\[10px\\] {\n padding-block: 10px;\n }\n .py-\\[34px\\] {\n padding-block: 34px;\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-10 {\n padding-top: calc(var(--spacing) * 10);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pt-\\[17px\\] {\n padding-top: 17px;\n }\n .pt-\\[72px\\] {\n padding-top: 72px;\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pr-16 {\n padding-right: calc(var(--spacing) * 16);\n }\n .pr-20 {\n padding-right: calc(var(--spacing) * 20);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pb-28 {\n padding-bottom: calc(var(--spacing) * 28);\n }\n .pb-\\[max\\(12px\\,env\\(safe-area-inset-bottom\\)\\)\\] {\n padding-bottom: max(12px, env(safe-area-inset-bottom));\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .font-heading {\n font-family: var(--font-heading);\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .font-serif {\n font-family: var(--font-serif);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .text-\\[20px\\] {\n font-size: 20px;\n }\n .text-\\[26px\\] {\n font-size: 26px;\n }\n .text-\\[30px\\] {\n font-size: 30px;\n }\n .text-\\[32px\\] {\n font-size: 32px;\n }\n .text-\\[36px\\] {\n font-size: 36px;\n }\n .text-\\[52px\\] {\n font-size: 52px;\n }\n .text-\\[64px\\] {\n font-size: 64px;\n }\n .leading-6 {\n --tw-leading: calc(var(--spacing) * 6);\n line-height: calc(var(--spacing) * 6);\n }\n .leading-7 {\n --tw-leading: calc(var(--spacing) * 7);\n line-height: calc(var(--spacing) * 7);\n }\n .leading-8 {\n --tw-leading: calc(var(--spacing) * 8);\n line-height: calc(var(--spacing) * 8);\n }\n .leading-9 {\n --tw-leading: calc(var(--spacing) * 9);\n line-height: calc(var(--spacing) * 9);\n }\n .leading-10 {\n --tw-leading: calc(var(--spacing) * 10);\n line-height: calc(var(--spacing) * 10);\n }\n .leading-\\[1\\.3\\] {\n --tw-leading: 1.3;\n line-height: 1.3;\n }\n .leading-\\[1\\.12\\] {\n --tw-leading: 1.12;\n line-height: 1.12;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-extrabold {\n --tw-font-weight: var(--font-weight-extrabold);\n font-weight: var(--font-weight-extrabold);\n }\n .font-light {\n --tw-font-weight: var(--font-weight-light);\n font-weight: var(--font-weight-light);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-\\[0\\.012em\\] {\n --tw-tracking: 0.012em;\n letter-spacing: 0.012em;\n }\n .tracking-\\[0\\.18em\\] {\n --tw-tracking: 0.18em;\n letter-spacing: 0.18em;\n }\n .tracking-\\[0\\.64px\\] {\n --tw-tracking: 0.64px;\n letter-spacing: 0.64px;\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-\\[\\#A195F0\\] {\n color: #A195F0;\n }\n .text-\\[\\#d6d3cd\\] {\n color: #d6d3cd;\n }\n .text-background {\n color: var(--background);\n }\n .text-gray-25 {\n color: var(--color-gray-25);\n }\n .text-gray-25\\/70 {\n color: color-mix(in srgb, #FBFAF9 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-gray-25) 70%, transparent);\n }\n }\n .text-gray-50 {\n color: var(--color-gray-50);\n }\n .text-gray-100 {\n color: var(--color-gray-100);\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-iris-500 {\n color: var(--color-iris-500);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-system-error {\n color: var(--color-system-error);\n }\n .text-system-warning {\n color: var(--color-system-warning);\n }\n .text-teal-100 {\n color: var(--color-teal-100);\n }\n .text-teal-500 {\n color: var(--color-teal-500);\n }\n .text-teal-700 {\n color: var(--color-teal-700);\n }\n .text-teal-900 {\n color: var(--color-teal-900);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-300 {\n color: var(--color-yellow-300);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n 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,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n 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,);\n }\n .filter {\n 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,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .ease-in {\n --tw-ease: var(--ease-in);\n transition-timing-function: var(--ease-in);\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .\\[border-image\\:repeating-linear-gradient\\(to_right\\,theme\\(colors\\.gray\\.600\\)_0\\,theme\\(colors\\.gray\\.600\\)_8px\\,transparent_8px\\,transparent_16px\\)_1\\] {\n border-image: repeating-linear-gradient(to right,#605B55 0,#605B55 8px,transparent 8px,transparent 16px) 1;\n }\n .running {\n animation-play-state: running;\n }\n .group-hover\\:scale-105 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:border-teal-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n }\n .group-hover\\:text-gray-25 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .group-hover\\:text-teal-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-teal-500);\n }\n }\n }\n .group-hover\\:opacity-0 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 0%;\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-data-\\[state\\=open\\]\\:rotate-180 {\n &:is(:where(.group)[data-state=\"open\"] *) {\n rotate: 180deg;\n }\n }\n .group-\\[\\.is-assistant\\]\\:text-foreground {\n &:is(:where(.group):is(.is-assistant) *) {\n color: var(--foreground);\n }\n }\n .group-\\[\\.is-user\\]\\:ml-auto {\n &:is(:where(.group):is(.is-user) *) {\n margin-left: auto;\n }\n }\n .group-\\[\\.is-user\\]\\:rounded-lg {\n &:is(:where(.group):is(.is-user) *) {\n border-radius: var(--radius);\n }\n }\n .group-\\[\\.is-user\\]\\:bg-secondary {\n &:is(:where(.group):is(.is-user) *) {\n background-color: var(--secondary);\n }\n }\n .group-\\[\\.is-user\\]\\:px-4 {\n &:is(:where(.group):is(.is-user) *) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .group-\\[\\.is-user\\]\\:py-3 {\n &:is(:where(.group):is(.is-user) *) {\n padding-block: calc(var(--spacing) * 3);\n }\n }\n .group-\\[\\.is-user\\]\\:text-foreground {\n &:is(:where(.group):is(.is-user) *) {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-gray-500 {\n &::placeholder {\n color: var(--color-gray-500);\n }\n }\n .first\\:mt-0 {\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .last\\:border-b-0 {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n .hover\\:border-iris-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-iris-500);\n }\n }\n }\n .hover\\:border-teal-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n }\n .hover\\:border-transparent {\n &:hover {\n @media (hover: hover) {\n border-color: transparent;\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-500);\n }\n }\n }\n .hover\\:bg-gray-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-800);\n }\n }\n }\n .hover\\:bg-gray-950\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #12100D 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-950) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-iris-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-iris-500);\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-teal-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-teal-500);\n }\n }\n }\n .hover\\:bg-\\[linear-gradient\\(180deg\\,\\#1c1a17_94\\.231\\%\\,\\#02e2ac_100\\%\\)\\] {\n &:hover {\n @media (hover: hover) {\n background-image: linear-gradient(180deg,#1c1a17 94.231%,#02e2ac 100%);\n }\n }\n }\n .hover\\:bg-\\[length\\:100\\%_30\\%\\] {\n &:hover {\n @media (hover: hover) {\n background-size: 100% 30%;\n }\n }\n }\n .hover\\:bg-size-\\[100\\%_50\\%\\] {\n &:hover {\n @media (hover: hover) {\n background-size: 100% 50%;\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-gray-25 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .hover\\:text-gray-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-300);\n }\n }\n }\n .hover\\:text-gray-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-500);\n }\n }\n }\n .hover\\:text-iris-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-iris-500);\n }\n }\n }\n .hover\\:text-teal-100 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-teal-100);\n }\n }\n }\n .hover\\:text-teal-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-teal-400);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_-3px_rgba\\(2\\,226\\,172\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px -3px var(--tw-shadow-color, rgba(2,226,172,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_0_rgba\\(2\\,226\\,172\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px 0 var(--tw-shadow-color, rgba(2,226,172,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_0px_rgba\\(2\\,226\\,172\\,0\\.4\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px 0px var(--tw-shadow-color, rgba(2,226,172,0.4));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_2px_10px_rgba\\(161\\,149\\,240\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 2px 10px var(--tw-shadow-color, rgba(161,149,240,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:shadow-none {\n &:focus {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-gray-25 {\n &:focus {\n --tw-ring-color: var(--color-gray-25);\n }\n }\n .focus\\:ring-teal-500 {\n &:focus {\n --tw-ring-color: var(--color-teal-500);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:ring-offset-gray-900 {\n &:focus {\n --tw-ring-offset-color: var(--color-gray-900);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:bg-gray-800 {\n &:disabled {\n background-color: var(--color-gray-800);\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-\\[\\>\\[data-slot\\=button-group\\]\\]\\:gap-2 {\n &:has(>[data-slot=button-group]) {\n gap: calc(var(--spacing) * 2);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-auto {\n &[data-orientation=\"vertical\"] {\n height: auto;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[state\\=closed\\]\\:animate-\\[dropdown-out_100ms_ease-in\\] {\n &[data-state=\"closed\"] {\n animation: dropdown-out 100ms ease-in;\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .sm\\:top-0 {\n @media (width >= 40rem) {\n top: calc(var(--spacing) * 0);\n }\n }\n .sm\\:top-\\[15\\%\\] {\n @media (width >= 40rem) {\n top: 15%;\n }\n }\n .sm\\:right-0 {\n @media (width >= 40rem) {\n right: calc(var(--spacing) * 0);\n }\n }\n .sm\\:left-auto {\n @media (width >= 40rem) {\n left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:h-full {\n @media (width >= 40rem) {\n height: 100%;\n }\n }\n .sm\\:w-full {\n @media (width >= 40rem) {\n width: 100%;\n }\n }\n .sm\\:max-w-\\[60\\%\\] {\n @media (width >= 40rem) {\n max-width: 60%;\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:animate-\\[sidebar-in-right_250ms_ease-out\\] {\n @media (width >= 40rem) {\n animation: sidebar-in-right 250ms ease-out;\n }\n }\n .sm\\:animate-\\[sidebar-out-right_200ms_ease-in_forwards\\] {\n @media (width >= 40rem) {\n animation: sidebar-out-right 200ms ease-in forwards;\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:items-end {\n @media (width >= 40rem) {\n align-items: flex-end;\n }\n }\n .sm\\:justify-between {\n @media (width >= 40rem) {\n justify-content: space-between;\n }\n }\n .sm\\:gap-x-4 {\n @media (width >= 40rem) {\n column-gap: calc(var(--spacing) * 4);\n }\n }\n .sm\\:gap-x-10 {\n @media (width >= 40rem) {\n column-gap: calc(var(--spacing) * 10);\n }\n }\n .sm\\:rounded-t-none {\n @media (width >= 40rem) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n .sm\\:border-t-0 {\n @media (width >= 40rem) {\n border-top-style: var(--tw-border-style);\n border-top-width: 0px;\n }\n }\n .sm\\:border-l {\n @media (width >= 40rem) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .sm\\:px-5 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 5);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:px-12 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 12);\n }\n }\n .sm\\:pl-10 {\n @media (width >= 40rem) {\n padding-left: calc(var(--spacing) * 10);\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl\\/14 {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: calc(var(--spacing) * 14);\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-xl {\n @media (width >= 40rem) {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n }\n .sm\\:text-\\[32px\\] {\n @media (width >= 40rem) {\n font-size: 32px;\n }\n }\n .sm\\:text-\\[48px\\] {\n @media (width >= 40rem) {\n font-size: 48px;\n }\n }\n .md\\:mb-4 {\n @media (width >= 48rem) {\n margin-bottom: calc(var(--spacing) * 4);\n }\n }\n .md\\:mb-24 {\n @media (width >= 48rem) {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:grid {\n @media (width >= 48rem) {\n display: grid;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:h-80 {\n @media (width >= 48rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-3 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:items-start {\n @media (width >= 48rem) {\n align-items: flex-start;\n }\n }\n .md\\:gap-8 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 8);\n }\n }\n .md\\:gap-14 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 14);\n }\n }\n .md\\:p-10 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 10);\n }\n }\n .md\\:px-12 {\n @media (width >= 48rem) {\n padding-inline: calc(var(--spacing) * 12);\n }\n }\n .md\\:py-12 {\n @media (width >= 48rem) {\n padding-block: calc(var(--spacing) * 12);\n }\n }\n .md\\:pt-24 {\n @media (width >= 48rem) {\n padding-top: calc(var(--spacing) * 24);\n }\n }\n .md\\:pb-28 {\n @media (width >= 48rem) {\n padding-bottom: calc(var(--spacing) * 28);\n }\n }\n .md\\:text-2xl {\n @media (width >= 48rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .md\\:text-3xl {\n @media (width >= 48rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .md\\:text-4xl {\n @media (width >= 48rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .md\\:text-5xl {\n @media (width >= 48rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .md\\:text-7xl\\/20 {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: calc(var(--spacing) * 20);\n }\n }\n .md\\:text-\\[32px\\] {\n @media (width >= 48rem) {\n font-size: 32px;\n }\n }\n .md\\:text-\\[64px\\] {\n @media (width >= 48rem) {\n font-size: 64px;\n }\n }\n .md\\:text-\\[80px\\] {\n @media (width >= 48rem) {\n font-size: 80px;\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-4 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-\\[2\\.2fr_1fr_1fr_1fr\\] {\n @media (width >= 64rem) {\n grid-template-columns: 2.2fr 1fr 1fr 1fr;\n }\n }\n .lg\\:px-0 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 0);\n }\n }\n .lg\\:text-3xl {\n @media (width >= 64rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .lg\\:text-\\[38px\\] {\n @media (width >= 64rem) {\n font-size: 38px;\n }\n }\n .lg\\:text-\\[52px\\] {\n @media (width >= 64rem) {\n font-size: 52px;\n }\n }\n .lg\\:text-\\[64px\\] {\n @media (width >= 64rem) {\n font-size: 64px;\n }\n }\n .lg\\:text-\\[72px\\] {\n @media (width >= 64rem) {\n font-size: 72px;\n }\n }\n .lg\\:text-\\[88px\\] {\n @media (width >= 64rem) {\n font-size: 88px;\n }\n }\n .xl\\:flex {\n @media (width >= 80rem) {\n display: flex;\n }\n }\n .xl\\:grid-cols-\\[2fr_3fr\\] {\n @media (width >= 80rem) {\n grid-template-columns: 2fr 3fr;\n }\n }\n .xl\\:gap-8 {\n @media (width >= 80rem) {\n gap: calc(var(--spacing) * 8);\n }\n }\n .xl\\:px-0 {\n @media (width >= 80rem) {\n padding-inline: calc(var(--spacing) * 0);\n }\n }\n .xl\\:px-20 {\n @media (width >= 80rem) {\n padding-inline: calc(var(--spacing) * 20);\n }\n }\n .xl\\:pl-14 {\n @media (width >= 80rem) {\n padding-left: calc(var(--spacing) * 14);\n }\n }\n .xl\\:text-4xl {\n @media (width >= 80rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .\\[\\&_a\\]\\:text-teal-400 {\n & a {\n color: var(--color-teal-400);\n }\n }\n .\\[\\&_a\\]\\:underline {\n & a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&_a\\:hover\\]\\:text-teal-300 {\n & a:hover {\n color: var(--color-teal-300);\n }\n }\n .\\[\\&_code\\]\\:rounded {\n & code {\n border-radius: 0.25rem;\n }\n }\n .\\[\\&_code\\]\\:bg-gray-700 {\n & code {\n background-color: var(--color-gray-700);\n }\n }\n .\\[\\&_code\\]\\:px-1 {\n & code {\n padding-inline: calc(var(--spacing) * 1);\n }\n }\n .\\[\\&_code\\]\\:py-0\\.5 {\n & code {\n padding-block: calc(var(--spacing) * 0.5);\n }\n }\n .\\[\\&_code\\]\\:text-xs {\n & code {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .\\[\\&_li\\]\\:mb-0\\.5 {\n & li {\n margin-bottom: calc(var(--spacing) * 0.5);\n }\n }\n .\\[\\&_ol\\]\\:mb-2 {\n & ol {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_ol\\]\\:list-decimal {\n & ol {\n list-style-type: decimal;\n }\n }\n .\\[\\&_ol\\]\\:pl-4 {\n & ol {\n padding-left: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_p\\]\\:mb-2 {\n & p {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_p\\:last-child\\]\\:mb-0 {\n & p:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&_strong\\]\\:font-semibold {\n & strong {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n }\n .\\[\\&_strong\\]\\:text-gray-25 {\n & strong {\n color: var(--color-gray-25);\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_ul\\]\\:mb-2 {\n & ul {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_ul\\]\\:list-disc {\n & ul {\n list-style-type: disc;\n }\n }\n .\\[\\&_ul\\]\\:pl-4 {\n & ul {\n padding-left: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>\\*\\]\\:focus-visible\\:relative {\n &>* {\n &:focus-visible {\n position: relative;\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:focus-visible\\:z-10 {\n &>* {\n &:focus-visible {\n z-index: 10;\n }\n }\n }\n .\\[\\&\\>\\*\\:first-child\\]\\:mt-0 {\n &>*:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>\\*\\:last-child\\]\\:mb-0 {\n &>*:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-t-none {\n &>*:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-l-md {\n &>*:not(:first-child) {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-l-none {\n &>*:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:border-t-0 {\n &>*:not(:first-child) {\n border-top-style: var(--tw-border-style);\n border-top-width: 0px;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:border-l-0 {\n &>*:not(:first-child) {\n border-left-style: var(--tw-border-style);\n border-left-width: 0px;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-r-md {\n &>*:not(:last-child) {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-r-none {\n &>*:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-b-none {\n &>*:not(:last-child) {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n .has-\\[select\\[aria-hidden\\=true\\]\\:last-child\\]\\:\\[\\&\\>\\[data-slot\\=select-trigger\\]\\:last-of-type\\]\\:rounded-r-md {\n &:has(*:is(select[aria-hidden=true]:last-child)) {\n &>[data-slot=select-trigger]:last-of-type {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n }\n }\n }\n .\\[\\&\\>\\[data-slot\\=select-trigger\\]\\:not\\(\\[class\\*\\=\\'w-\\'\\]\\)\\]\\:w-fit {\n &>[data-slot=select-trigger]:not([class*='w-']) {\n width: fit-content;\n }\n }\n .\\[\\&\\>div\\]\\:pb-0 {\n &>div {\n padding-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>input\\]\\:flex-1 {\n &>input {\n flex: 1;\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: #1C1A17;\n --foreground: #FBFAF9;\n --card: #1C1A17;\n --card-foreground: #FBFAF9;\n --popover: #1C1A17;\n --popover-foreground: #FBFAF9;\n --primary: #02E2AC;\n --primary-foreground: #1C1A17;\n --secondary: #46423D;\n --secondary-foreground: #FBFAF9;\n --muted: #46423D;\n --muted-foreground: #7C776F;\n --accent: #46423D;\n --accent-foreground: #FBFAF9;\n --destructive: #ef4444;\n --border: #46423D;\n --input: #46423D;\n --ring: #02E2AC;\n}\n@layer base {\n html {\n scroll-behavior: smooth;\n font-family: var(--font-sans);\n }\n body {\n background-color: var(--color-gray-900);\n color: var(--color-gray-25);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-family: var(--font-sans);\n }\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n h1, h2 {\n --tw-font-weight: var(--font-weight-extrabold);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-gray-25);\n }\n h3, h4, h5, h6 {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n color: var(--color-gray-25);\n }\n h1 {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n @media (width >= 64rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n h2 {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n line-height: 1.2;\n }\n h3 {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n line-height: 1.3;\n }\n h4 {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n line-height: 1.3;\n }\n blockquote, .accent-font {\n font-style: italic;\n }\n .heading {\n font-family: var(--font-heading);\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n}\n@layer components {\n .btn-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n background-color: var(--color-gray-25);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-900);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-500);\n }\n }\n }\n .btn-secondary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-25);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-25);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-25);\n }\n }\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-900);\n }\n }\n }\n .btn-ghost {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-500);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #FBFAF9 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent);\n }\n }\n }\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .card {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-600);\n background-color: var(--color-gray-900);\n padding: calc(var(--spacing) * 6);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .card:hover {\n border-color: var(--color-gray-500);\n }\n .card-featured {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--color-gray-25);\n background-color: var(--color-gray-900);\n padding: calc(var(--spacing) * 6);\n }\n .tag {\n display: inline-flex;\n align-items: center;\n border-radius: calc(infinity * 1px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-800);\n background-color: var(--color-gray-800);\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 1);\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-500);\n }\n .tag-active {\n border-color: var(--color-gray-25);\n background-color: var(--color-gray-25);\n color: var(--color-gray-900);\n }\n .section {\n margin-block: calc(var(--spacing) * 16);\n @media (width >= 48rem) {\n margin-block: calc(var(--spacing) * 24);\n }\n }\n .container-page {\n margin-inline: auto;\n max-width: var(--container-7xl);\n padding-inline: calc(var(--spacing) * 4);\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 24);\n }\n }\n .star {\n display: inline-block;\n color: var(--color-gray-25);\n }\n .star::before {\n content: '☆';\n }\n .star-filled::before {\n content: '★';\n }\n .constellation-line {\n height: 1px;\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n --tw-gradient-from: transparent;\n --tw-gradient-via: var(--color-gray-500);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .divider-stars {\n margin-block: calc(var(--spacing) * 8);\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 4);\n }\n .divider-stars::before,\n .divider-stars::after {\n content: '';\n height: 1px;\n flex: 1;\n background-color: var(--color-gray-800);\n }\n}\n@layer utilities {\n .texture-woodcut {\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E\");\n }\n .bg-starfield {\n background-image: radial-gradient(1px 1px at 20px 30px, white, transparent),\n radial-gradient(1px 1px at 40px 70px, rgba(255,255,255,0.8), transparent),\n radial-gradient(1px 1px at 50px 160px, rgba(255,255,255,0.6), transparent),\n radial-gradient(1px 1px at 90px 40px, white, transparent),\n radial-gradient(1px 1px at 130px 80px, rgba(255,255,255,0.7), transparent),\n radial-gradient(1px 1px at 160px 120px, rgba(255,255,255,0.5), transparent);\n background-repeat: repeat;\n background-size: 200px 200px;\n }\n}\n:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--color-gray-25);\n}\n::selection {\n background-color: rgba(255, 255, 255, 0.3);\n color: white;\n}\n::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n::-webkit-scrollbar-track {\n background-color: var(--color-gray-950);\n}\n::-webkit-scrollbar-thumb {\n border-radius: calc(infinity * 1px);\n background-color: var(--color-gray-800);\n}\n::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-gray-500);\n}\na:not(.btn-primary):not(.btn-secondary):not(.btn-ghost) {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n}\npre {\n overflow-x: auto;\n border-radius: var(--radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-800);\n background-color: var(--color-gray-950);\n padding: calc(var(--spacing) * 4);\n}\ncode:not(pre code) {\n border-radius: 0.25rem;\n background-color: var(--color-gray-800);\n padding-inline: calc(var(--spacing) * 1.5);\n padding-block: calc(var(--spacing) * 0.5);\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n color: var(--color-gray-25);\n}\nblockquote {\n margin-block: calc(var(--spacing) * 6);\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n border-color: var(--color-gray-25);\n padding-left: calc(var(--spacing) * 6);\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n color: var(--color-gray-500);\n font-style: italic;\n}\ntable {\n width: 100%;\n border-collapse: collapse;\n}\nth {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n border-color: var(--color-gray-800);\n padding-block: calc(var(--spacing) * 3);\n text-align: left;\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n color: var(--color-gray-500);\n text-transform: uppercase;\n}\ntd {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n border-color: var(--color-gray-800);\n padding-block: calc(var(--spacing) * 3);\n}\nhr {\n margin-block: calc(var(--spacing) * 8);\n border-color: var(--color-gray-800);\n}\ninput, textarea, select {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-200);\n background-color: color-mix(in srgb, #1C1A17 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent);\n }\n padding-inline: calc(var(--spacing) * 4);\n padding-block: calc(var(--spacing) * 3);\n font-family: var(--font-mono);\n color: var(--color-gray-25);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 400ms;\n transition-duration: 400ms;\n &::placeholder {\n color: var(--color-gray-500);\n }\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n &:focus {\n border-color: var(--color-teal-500);\n }\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n font-family: var(--font-sans);\n}\n@keyframes dropdown-in {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n@keyframes dropdown-out {\n from {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n to {\n opacity: 0;\n transform: scale(0.95) translateY(-4px);\n }\n}\n@keyframes sidebar-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n@keyframes sidebar-out-right {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(100%);\n }\n}\n@keyframes sidebar-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n@keyframes sidebar-out-bottom {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(100%);\n }\n}\n@keyframes twinkle {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes float {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-10px);\n }\n}\n.animate-twinkle {\n animation: twinkle 3s ease-in-out infinite;\n}\n.animate-float {\n animation: float 6s ease-in-out infinite;\n}\n.icon-hover-container {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n}\n.icon-hover-container:hover img {\n filter: brightness(1.2);\n}\n.icon-hover-container svg path:nth-child(2) {\n transition: all 0.3s ease;\n transform-origin: center;\n}\n.icon-hover-container:hover svg path:nth-child(2) {\n fill: white !important;\n transform: scale(0.65);\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EA0lIE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1lIJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;AAFF;EA6FE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EA6lGA;;;;;EAIA;;;;;;;;EAOA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;EAKA;;;;;;EAKA;;;;;EAGE;IAAyB;;;;;;EAIzB;IAAyB;;;;;;EAK3B;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;EAGA;;;;;;;AA/4GF;EAs5GE;;;;;;;;;;;;;;;;;;EAiBI;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;;;;;;;EAmBI;IAAuB;;;;;EAKvB;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;;;;EAgBI;IAAuB;;;;IAErB;MAAgD;;;;;;EAMlD;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;EAaA;;;;EAGA;;;;;;;;;EAQA;;;;;;;;;;;;;;;;;EAgBA;;;;;;EAKA;;;;EAEE;IAAyB;;;;;EAI3B;;;;;;EAIE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;EAWA;;;;;;;EAMA;;;;;;;;AA/jHF;EAiPE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAMA;;;;EAMA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAIE;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAMF;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAiE;;;;;EAGhD;;;;EAEnB;;;;EAEE;IAAiE;;;;;EAGhD;;;;EAEnB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAIA;;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAKI;IAAuB;;;;;;;;EAUvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAMzB;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAOE;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAOzB;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;;EAMA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAMA;;;;EAMA;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;;;;EAKA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAEE;IAAgD;;;;;EAQ9C;IAAuB;;;;IAErB;MAAgD;;;;;;EAUlD;IAAuB;;;;IAErB;MAAgD;;;;;;EASpD;;;;EAEE;IAAgD;;;;;EAQlD;;;;EAEE;IAAgD;;;;;EAOpD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAME;;;;EAOA;;;;EAMF;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAOE;;;;;EAOF;;;;EAKA;;;;EAKA;;;;EA8WF;;;;EAGA;;;;;;;AA5WF;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;AAmSA;;;;;;;AAMA;;;;;AAIA;;;;;AAIA;;;;AAGA;;;;;AAIA;;;;AAGA;;;;;;AAKA;;;;;;;;;;AASA;;;;;;;;;;AASA;;;;;;;;;;;;AAWA;;;;;AAIA;;;;;;;;;;;;;;;;AAeA;;;;;;;AAMA;;;;;AAIA;;;;;;;;AAME;EAAgD;;;;;AAGjC;;;;;;;;;;;;AASf;;;;AAIE;EAAuB;;;;;AAIzB;;;;;;AAOY;;;;AAEd;;;;;;;;;;;;AAUA;;;;;;;;;;;;AAUA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;AAGA;;;;AAGA;;;;;;;;AAOA;;;;AAGA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;AAOA"}}] +} \ No newline at end of file diff --git a/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css b/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css new file mode 100644 index 00000000..28db0f63 --- /dev/null +++ b/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css @@ -0,0 +1,5163 @@ +/* [project]/gitcoin_co_30/src/app/globals.css [app-client] (css) */ +@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-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-border-style: solid; + --tw-gradient-position: initial; + --tw-gradient-from: #0000; + --tw-gradient-via: #0000; + --tw-gradient-to: #0000; + --tw-gradient-stops: initial; + --tw-gradient-via-stops: initial; + --tw-gradient-from-position: 0%; + --tw-gradient-via-position: 50%; + --tw-gradient-to-position: 100%; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: 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; + --tw-backdrop-blur: initial; + --tw-backdrop-brightness: initial; + --tw-backdrop-contrast: initial; + --tw-backdrop-grayscale: initial; + --tw-backdrop-hue-rotate: initial; + --tw-backdrop-invert: initial; + --tw-backdrop-opacity: initial; + --tw-backdrop-saturate: initial; + --tw-backdrop-sepia: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; + --tw-animation-delay: 0s; + --tw-animation-direction: normal; + --tw-animation-duration: initial; + --tw-animation-fill-mode: none; + --tw-animation-iteration-count: 1; + --tw-enter-blur: 0; + --tw-enter-opacity: 1; + --tw-enter-rotate: 0; + --tw-enter-scale: 1; + --tw-enter-translate-x: 0; + --tw-enter-translate-y: 0; + --tw-exit-blur: 0; + --tw-exit-opacity: 1; + --tw-exit-rotate: 0; + --tw-exit-scale: 1; + --tw-exit-translate-x: 0; + --tw-exit-translate-y: 0; + } + } +} + +@layer theme { + :root, :host { + --font-sans: var(--font-sans); + --font-serif: var(--font-serif); + --font-mono: var(--font-mono); + --color-red-400: #ff6568; + --color-red-500: #fb2c36; + --color-yellow-300: #ffe02a; + --color-yellow-500: #edb200; + --color-yellow-600: #cd8900; + --color-yellow-700: #a36100; + --color-yellow-900: #733e0a; + --color-yellow-950: #432004; + --color-teal-100: #a1f7e7; + --color-teal-300: #2fe5c0; + --color-teal-400: #12d9b2; + --color-teal-500: #02e2ac; + --color-teal-600: #00b894; + --color-teal-700: #008f73; + --color-teal-900: #00483e; + --color-teal-950: #002e28; + --color-gray-50: #f9fafb; + --color-gray-100: #eae8e4; + --color-gray-200: #d6d3cd; + --color-gray-300: #b8b4ac; + --color-gray-400: #9a958c; + --color-gray-500: #7c776f; + --color-gray-600: #605b55; + --color-gray-700: #46423d; + --color-gray-800: #2f2c28; + --color-gray-900: #1c1a17; + --color-gray-950: #12100d; + --color-black: #000; + --color-white: #fff; + --spacing: .25rem; + --container-sm: 24rem; + --container-md: 28rem; + --container-lg: 32rem; + --container-xl: 36rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-4xl: 56rem; + --container-7xl: 80rem; + --text-xs: .75rem; + --text-xs--line-height: calc(1 / .75); + --text-sm: .875rem; + --text-sm--line-height: calc(1.25 / .875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --text-6xl: 3.75rem; + --text-6xl--line-height: 1; + --text-7xl: 4.5rem; + --font-weight-light: 300; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --font-weight-extrabold: 800; + --tracking-wider: .05em; + --leading-snug: 1.375; + --leading-relaxed: 1.625; + --ease-in: cubic-bezier(.4, 0, 1, 1); + --ease-out: cubic-bezier(0, 0, .2, 1); + --animate-spin: spin 1s linear infinite; + --blur-sm: 8px; + --blur-md: 12px; + --blur-3xl: 64px; + --aspect-video: 16 / 9; + --default-transition-duration: .15s; + --default-transition-timing-function: cubic-bezier(.4, 0, .2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + --font-heading: var(--font-heading); + --color-iris-500: #a195f0; + --color-gray-25: #fbfaf9; + --color-system-warning: #eab308; + --color-system-error: #ef4444; + } + + @supports (color: lab(0% 0 0)) { + :root, :host { + --color-red-400: lab(63.7053% 60.745 31.3109); + --color-red-500: lab(55.4814% 75.0732 48.8528); + --color-yellow-300: lab(89.7033% -.480294 84.4917); + --color-yellow-500: lab(76.3898% 14.5258 98.4589); + --color-yellow-600: lab(62.7799% 22.4197 86.1544); + --color-yellow-700: lab(47.8202% 25.2426 66.5015); + --color-yellow-900: lab(32.3865% 21.1273 38.5959); + --color-yellow-950: lab(16.8146% 15.7422 23.1133); + --color-gray-50: lab(98.2596% -.247031 -.706708); + } + } +} + +@layer base { + *, :after, :before, ::backdrop { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + ::file-selector-button { + box-sizing: border-box; + border: 0 solid; + margin: 0; + padding: 0; + } + + html, :host { + -webkit-text-size-adjust: 100%; + tab-size: 4; + line-height: 1.5; + 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; + -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 { + vertical-align: baseline; + font-size: 75%; + line-height: 0; + position: relative; + } + + sub { + bottom: -.25em; + } + + sup { + top: -.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 { + vertical-align: middle; + display: block; + } + + img, video { + max-width: 100%; + height: auto; + } + + button, input, select, optgroup, textarea { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + opacity: 1; + background-color: #0000; + border-radius: 0; + } + + :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)) { + ::placeholder { + 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 { + padding-block: 0; + } + + ::-webkit-datetime-edit-year-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-month-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-day-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-hour-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-minute-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-second-field { + padding-block: 0; + } + + ::-webkit-datetime-edit-millisecond-field { + padding-block: 0; + } + + ::-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"]) { + appearance: button; + } + + ::file-selector-button { + appearance: button; + } + + ::-webkit-inner-spin-button { + height: auto; + } + + ::-webkit-outer-spin-button { + height: auto; + } + + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } + + html { + scroll-behavior: smooth; + font-family: var(--font-sans); + } + + body { + background-color: var(--color-gray-900); + color: var(--color-gray-25); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-family: var(--font-sans); + } + + * { + border-color: var(--border); + outline-color: var(--ring); + } + + @supports (color: color-mix(in lab, red, red)) { + * { + outline-color: color-mix(in oklab, var(--ring) 50%, transparent); + } + } + + h1, h2 { + --tw-font-weight: var(--font-weight-extrabold); + font-weight: var(--font-weight-extrabold); + color: var(--color-gray-25); + } + + h3, h4, h5, h6 { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + color: var(--color-gray-25); + } + + h1 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + + @media (min-width: 48rem) { + h1 { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + + @media (min-width: 64rem) { + h1 { + font-size: var(--text-6xl); + line-height: var(--tw-leading, var(--text-6xl--line-height)); + } + } + + h2 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + + @media (min-width: 48rem) { + h2 { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + h2 { + line-height: 1.2; + } + + h3 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + + @media (min-width: 48rem) { + h3 { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + h3 { + line-height: 1.3; + } + + h4 { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + + @media (min-width: 48rem) { + h4 { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + h4 { + line-height: 1.3; + } + + blockquote, .accent-font { + font-style: italic; + } + + .heading { + font-family: var(--font-heading); + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } +} + +@layer components { + .btn-primary { + border-radius: var(--radius); + background-color: var(--color-gray-25); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-900); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-primary:hover { + background-color: var(--color-gray-500); + } + } + + .btn-secondary { + border-radius: var(--radius); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-25); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-25); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-secondary:hover { + background-color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .btn-secondary:hover { + color: var(--color-gray-900); + } + } + + .btn-ghost { + border-radius: var(--radius); + padding-inline: calc(var(--spacing) * 6); + padding-block: calc(var(--spacing) * 3); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-500); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + justify-content: center; + align-items: center; + transition-duration: .3s; + display: inline-flex; + } + + @media (hover: hover) { + .btn-ghost:hover { + background-color: #fbfaf91a; + } + + @supports (color: color-mix(in lab, red, red)) { + .btn-ghost:hover { + background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent); + } + } + } + + @media (hover: hover) { + .btn-ghost:hover { + color: var(--color-gray-25); + } + } + + .card { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-600); + background-color: var(--color-gray-900); + padding: calc(var(--spacing) * 6); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + transition-duration: .3s; + } + + .card:hover { + border-color: var(--color-gray-500); + } + + .card-featured { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 2px; + border-color: var(--color-gray-25); + background-color: var(--color-gray-900); + padding: calc(var(--spacing) * 6); + } + + .tag { + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-800); + background-color: var(--color-gray-800); + padding-inline: calc(var(--spacing) * 3); + padding-block: calc(var(--spacing) * 1); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + color: var(--color-gray-500); + border-radius: 3.40282e38px; + align-items: center; + display: inline-flex; + } + + .tag-active { + border-color: var(--color-gray-25); + background-color: var(--color-gray-25); + color: var(--color-gray-900); + } + + .section { + margin-block: calc(var(--spacing) * 16); + } + + @media (min-width: 48rem) { + .section { + margin-block: calc(var(--spacing) * 24); + } + } + + .container-page { + max-width: var(--container-7xl); + padding-inline: calc(var(--spacing) * 4); + margin-inline: auto; + } + + @media (min-width: 40rem) { + .container-page { + padding-inline: calc(var(--spacing) * 6); + } + } + + @media (min-width: 64rem) { + .container-page { + padding-inline: calc(var(--spacing) * 24); + } + } + + .star { + color: var(--color-gray-25); + display: inline-block; + } + + .star:before { + content: "☆"; + } + + .star-filled:before { + content: "★"; + } + + .constellation-line { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + --tw-gradient-from: transparent; + --tw-gradient-via: var(--color-gray-500); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + --tw-gradient-to: transparent; + height: 1px; + } + + .divider-stars { + margin-block: calc(var(--spacing) * 8); + align-items: center; + gap: calc(var(--spacing) * 4); + display: flex; + } + + .divider-stars:before, .divider-stars:after { + content: ""; + background-color: var(--color-gray-800); + flex: 1; + height: 1px; + } +} + +@layer utilities { + .pointer-events-none { + pointer-events: none; + } + + .collapse { + visibility: collapse; + } + + .invisible { + visibility: hidden; + } + + .visible { + visibility: visible; + } + + .sr-only { + clip-path: inset(50%); + white-space: nowrap; + border-width: 0; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + position: absolute; + overflow: hidden; + } + + .absolute { + position: absolute; + } + + .fixed { + position: fixed; + } + + .relative { + position: relative; + } + + .static { + position: static; + } + + .sticky { + position: sticky; + } + + .inset-0 { + inset: calc(var(--spacing) * 0); + } + + .inset-x-0 { + inset-inline: calc(var(--spacing) * 0); + } + + .-top-4 { + top: calc(var(--spacing) * -4); + } + + .top-0 { + top: calc(var(--spacing) * 0); + } + + .top-1\/2 { + top: 50%; + } + + .top-3 { + top: calc(var(--spacing) * 3); + } + + .top-4 { + top: calc(var(--spacing) * 4); + } + + .top-7 { + top: calc(var(--spacing) * 7); + } + + .top-16 { + top: calc(var(--spacing) * 16); + } + + .top-\[10\%\] { + top: 10%; + } + + .right-0 { + right: calc(var(--spacing) * 0); + } + + .right-3 { + right: calc(var(--spacing) * 3); + } + + .right-4 { + right: calc(var(--spacing) * 4); + } + + .-bottom-4 { + bottom: calc(var(--spacing) * -4); + } + + .-bottom-12 { + bottom: calc(var(--spacing) * -12); + } + + .bottom-0 { + bottom: calc(var(--spacing) * 0); + } + + .-left-12 { + left: calc(var(--spacing) * -12); + } + + .left-0 { + left: calc(var(--spacing) * 0); + } + + .left-1\/2 { + left: 50%; + } + + .left-10 { + left: calc(var(--spacing) * 10); + } + + .isolate { + isolation: isolate; + } + + .z-0 { + z-index: 0; + } + + .z-10 { + z-index: 10; + } + + .z-20 { + z-index: 20; + } + + .z-30 { + z-index: 30; + } + + .z-40 { + z-index: 40; + } + + .z-50 { + z-index: 50; + } + + .z-101 { + z-index: 101; + } + + .z-102 { + z-index: 102; + } + + .z-\[1\] { + z-index: 1; + } + + .z-\[100\] { + z-index: 100; + } + + .z-\[101\] { + z-index: 101; + } + + .container { + width: 100%; + } + + @media (min-width: 40rem) { + .container { + max-width: 40rem; + } + } + + @media (min-width: 48rem) { + .container { + max-width: 48rem; + } + } + + @media (min-width: 64rem) { + .container { + max-width: 64rem; + } + } + + @media (min-width: 80rem) { + .container { + max-width: 80rem; + } + } + + @media (min-width: 96rem) { + .container { + max-width: 96rem; + } + } + + .\!m-0 { + margin: calc(var(--spacing) * 0) !important; + } + + .-mx-6 { + margin-inline: calc(var(--spacing) * -6); + } + + .mx-auto { + margin-inline: auto; + } + + .my-4 { + margin-block: calc(var(--spacing) * 4); + } + + .my-6 { + margin-block: calc(var(--spacing) * 6); + } + + .my-8 { + margin-block: calc(var(--spacing) * 8); + } + + .my-10 { + margin-block: calc(var(--spacing) * 10); + } + + .-mt-6 { + margin-top: calc(var(--spacing) * -6); + } + + .-mt-\[1px\] { + margin-top: -1px; + } + + .-mt-\[72px\] { + margin-top: -72px; + } + + .mt-0\.5 { + margin-top: calc(var(--spacing) * .5); + } + + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + + .mt-1\.5 { + margin-top: calc(var(--spacing) * 1.5); + } + + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + + .mt-3 { + margin-top: calc(var(--spacing) * 3); + } + + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + + .mt-5 { + margin-top: calc(var(--spacing) * 5); + } + + .mt-6 { + margin-top: calc(var(--spacing) * 6); + } + + .mt-8 { + margin-top: calc(var(--spacing) * 8); + } + + .mt-10 { + margin-top: calc(var(--spacing) * 10); + } + + .mt-12 { + margin-top: calc(var(--spacing) * 12); + } + + .mt-14 { + margin-top: calc(var(--spacing) * 14); + } + + .mt-24 { + margin-top: calc(var(--spacing) * 24); + } + + .mt-30 { + margin-top: calc(var(--spacing) * 30); + } + + .mt-\[5px\] { + margin-top: 5px; + } + + .mt-auto { + margin-top: auto; + } + + .-mr-\[1px\] { + margin-right: -1px; + } + + .mr-2 { + margin-right: calc(var(--spacing) * 2); + } + + .mb-1 { + margin-bottom: calc(var(--spacing) * 1); + } + + .mb-1\.5 { + margin-bottom: calc(var(--spacing) * 1.5); + } + + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } + + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + + .mb-5 { + margin-bottom: calc(var(--spacing) * 5); + } + + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + + .mb-8 { + margin-bottom: calc(var(--spacing) * 8); + } + + .mb-14 { + margin-bottom: calc(var(--spacing) * 14); + } + + .mb-16 { + margin-bottom: calc(var(--spacing) * 16); + } + + .ml-8 { + margin-left: calc(var(--spacing) * 8); + } + + .ml-auto { + margin-left: auto; + } + + .line-clamp-1 { + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-2 { + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-3 { + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .line-clamp-4 { + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + } + + .block { + display: block; + } + + .contents { + display: contents; + } + + .flex { + display: flex; + } + + .grid { + display: grid; + } + + .hidden { + display: none; + } + + .inline { + display: inline; + } + + .inline-flex { + display: inline-flex; + } + + .table { + display: table; + } + + .aspect-3\/1 { + aspect-ratio: 3; + } + + .aspect-square { + aspect-ratio: 1; + } + + .aspect-video { + aspect-ratio: var(--aspect-video); + } + + .size-2\.5 { + width: calc(var(--spacing) * 2.5); + height: calc(var(--spacing) * 2.5); + } + + .size-3 { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + + .size-3\.5 { + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + } + + .size-4 { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + + .size-5 { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + + .size-6 { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + + .size-8 { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + + .size-9 { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + + .size-10 { + width: calc(var(--spacing) * 10); + height: calc(var(--spacing) * 10); + } + + .size-full { + width: 100%; + height: 100%; + } + + .h-3 { + height: calc(var(--spacing) * 3); + } + + .h-3\.5 { + height: calc(var(--spacing) * 3.5); + } + + .h-4 { + height: calc(var(--spacing) * 4); + } + + .h-5 { + height: calc(var(--spacing) * 5); + } + + .h-6 { + height: calc(var(--spacing) * 6); + } + + .h-8 { + height: calc(var(--spacing) * 8); + } + + .h-9 { + height: calc(var(--spacing) * 9); + } + + .h-10 { + height: calc(var(--spacing) * 10); + } + + .h-12 { + height: calc(var(--spacing) * 12); + } + + .h-14 { + height: calc(var(--spacing) * 14); + } + + .h-16 { + height: calc(var(--spacing) * 16); + } + + .h-18 { + height: calc(var(--spacing) * 18); + } + + .h-20 { + height: calc(var(--spacing) * 20); + } + + .h-32 { + height: calc(var(--spacing) * 32); + } + + .h-48 { + height: calc(var(--spacing) * 48); + } + + .h-52 { + height: calc(var(--spacing) * 52); + } + + .h-64 { + height: calc(var(--spacing) * 64); + } + + .h-\[3\.7rem\] { + height: 3.7rem; + } + + .h-\[21px\] { + height: 21px; + } + + .h-\[45\%\] { + height: 45%; + } + + .h-\[48px\] { + height: 48px; + } + + .h-\[90dvh\] { + height: 90dvh; + } + + .h-\[160px\] { + height: 160px; + } + + .h-\[326px\] { + height: 326px; + } + + .h-\[360px\] { + height: 360px; + } + + .h-full { + height: 100%; + } + + .max-h-\[60vh\] { + max-height: 60vh; + } + + .min-h-16 { + min-height: calc(var(--spacing) * 16); + } + + .min-h-\[120px\] { + min-height: 120px; + } + + .min-h-\[130px\] { + min-height: 130px; + } + + .min-h-\[280px\] { + min-height: 280px; + } + + .min-h-\[386px\] { + min-height: 386px; + } + + .min-h-\[520px\] { + min-height: 520px; + } + + .min-h-screen { + min-height: 100vh; + } + + .w-3 { + width: calc(var(--spacing) * 3); + } + + .w-3\.5 { + width: calc(var(--spacing) * 3.5); + } + + .w-4 { + width: calc(var(--spacing) * 4); + } + + .w-5 { + width: calc(var(--spacing) * 5); + } + + .w-6 { + width: calc(var(--spacing) * 6); + } + + .w-8 { + width: calc(var(--spacing) * 8); + } + + .w-10 { + width: calc(var(--spacing) * 10); + } + + .w-12 { + width: calc(var(--spacing) * 12); + } + + .w-14 { + width: calc(var(--spacing) * 14); + } + + .w-16 { + width: calc(var(--spacing) * 16); + } + + .w-20 { + width: calc(var(--spacing) * 20); + } + + .w-24 { + width: calc(var(--spacing) * 24); + } + + .w-32 { + width: calc(var(--spacing) * 32); + } + + .w-48 { + width: calc(var(--spacing) * 48); + } + + .w-96 { + width: calc(var(--spacing) * 96); + } + + .w-\[180px\] { + width: 180px; + } + + .w-\[calc\(100\%-2rem\)\] { + width: calc(100% - 2rem); + } + + .w-auto { + width: auto; + } + + .w-fit { + width: fit-content; + } + + .w-full { + width: 100%; + } + + .w-px { + width: 1px; + } + + .max-w-2xl { + max-width: var(--container-2xl); + } + + .max-w-3xl { + max-width: var(--container-3xl); + } + + .max-w-4xl { + max-width: var(--container-4xl); + } + + .max-w-170 { + max-width: calc(var(--spacing) * 170); + } + + .max-w-240 { + max-width: calc(var(--spacing) * 240); + } + + .max-w-\[85\%\] { + max-width: 85%; + } + + .max-w-\[95\%\] { + max-width: 95%; + } + + .max-w-\[267px\] { + max-width: 267px; + } + + .max-w-\[295px\] { + max-width: 295px; + } + + .max-w-\[348px\] { + max-width: 348px; + } + + .max-w-\[400px\] { + max-width: 400px; + } + + .max-w-\[580px\] { + max-width: 580px; + } + + .max-w-\[640px\] { + max-width: 640px; + } + + .max-w-\[700px\] { + max-width: 700px; + } + + .max-w-\[730px\] { + max-width: 730px; + } + + .max-w-\[732px\] { + max-width: 732px; + } + + .max-w-\[796px\] { + max-width: 796px; + } + + .max-w-\[850px\] { + max-width: 850px; + } + + .max-w-\[908px\] { + max-width: 908px; + } + + .max-w-\[980px\] { + max-width: 980px; + } + + .max-w-\[1166px\] { + max-width: 1166px; + } + + .max-w-\[1216px\] { + max-width: 1216px; + } + + .max-w-\[1229px\] { + max-width: 1229px; + } + + .max-w-full { + max-width: 100%; + } + + .max-w-lg { + max-width: var(--container-lg); + } + + .max-w-md { + max-width: var(--container-md); + } + + .max-w-none { + max-width: none; + } + + .max-w-xl { + max-width: var(--container-xl); + } + + .min-w-0 { + min-width: calc(var(--spacing) * 0); + } + + .min-w-\[180px\] { + min-width: 180px; + } + + .min-w-full { + min-width: 100%; + } + + .flex-1 { + flex: 1; + } + + .flex-shrink-0, .shrink-0 { + flex-shrink: 0; + } + + .flex-grow, .grow { + flex-grow: 1; + } + + .origin-\(--radix-tooltip-content-transform-origin\) { + transform-origin: var(--radix-tooltip-content-transform-origin); + } + + .origin-top-left { + transform-origin: 0 0; + } + + .-translate-x-1\/2 { + --tw-translate-x: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1 / 2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .translate-y-\[calc\(-50\%_-_2px\)\] { + --tw-translate-y: calc(-50% - 2px); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + + .rotate-45 { + rotate: 45deg; + } + + .transform { + transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, ); + } + + .animate-\[dropdown-in_150ms_ease-out\] { + animation: .15s ease-out dropdown-in; + } + + .animate-\[dropdown-out_100ms_ease-in_forwards\] { + animation: .1s ease-in forwards dropdown-out; + } + + .animate-\[sidebar-in-bottom_250ms_ease-out\] { + animation: .25s ease-out sidebar-in-bottom; + } + + .animate-\[sidebar-out-bottom_200ms_ease-in_forwards\] { + animation: .2s ease-in forwards sidebar-out-bottom; + } + + .animate-in { + animation: enter var(--tw-animation-duration, var(--tw-duration, .15s)) var(--tw-ease, ease) var(--tw-animation-delay, 0s) var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal) var(--tw-animation-fill-mode, none); + } + + .animate-spin { + animation: var(--animate-spin); + } + + .cursor-pointer { + cursor: pointer; + } + + .resize { + resize: both; + } + + .resize-y { + resize: vertical; + } + + .list-outside { + list-style-position: outside; + } + + .list-decimal { + list-style-type: decimal; + } + + .list-disc { + list-style-type: disc; + } + + .appearance-none { + appearance: none; + } + + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .grid-cols-\[1fr_1fr_1\.4fr\] { + grid-template-columns: 1fr 1fr 1.4fr; + } + + .flex-col { + flex-direction: column; + } + + .flex-wrap { + flex-wrap: wrap; + } + + .items-center { + align-items: center; + } + + .items-end { + align-items: flex-end; + } + + .items-start { + align-items: flex-start; + } + + .items-stretch { + align-items: stretch; + } + + .justify-between { + justify-content: space-between; + } + + .justify-center { + justify-content: center; + } + + .justify-end { + justify-content: flex-end; + } + + .justify-start { + justify-content: flex-start; + } + + .gap-0\.5 { + gap: calc(var(--spacing) * .5); + } + + .gap-1 { + gap: calc(var(--spacing) * 1); + } + + .gap-1\.5 { + gap: calc(var(--spacing) * 1.5); + } + + .gap-2 { + gap: calc(var(--spacing) * 2); + } + + .gap-2\.5 { + gap: calc(var(--spacing) * 2.5); + } + + .gap-3 { + gap: calc(var(--spacing) * 3); + } + + .gap-4 { + gap: calc(var(--spacing) * 4); + } + + .gap-5 { + gap: calc(var(--spacing) * 5); + } + + .gap-6 { + gap: calc(var(--spacing) * 6); + } + + .gap-8 { + gap: calc(var(--spacing) * 8); + } + + .gap-10 { + gap: calc(var(--spacing) * 10); + } + + .gap-12 { + gap: calc(var(--spacing) * 12); + } + + .gap-14 { + gap: calc(var(--spacing) * 14); + } + + .gap-\[15px\] { + gap: 15px; + } + + :where(.space-y-0 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-2 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-3 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-4 > :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))); + } + + :where(.space-y-6 > :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))); + } + + :where(.space-y-8 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse))); + } + + :where(.space-y-12 > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse))); + } + + .gap-x-2 { + column-gap: calc(var(--spacing) * 2); + } + + .self-end { + align-self: flex-end; + } + + .self-stretch { + align-self: stretch; + } + + .truncate { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + .overflow-hidden { + overflow: hidden; + } + + .overflow-visible { + overflow: visible; + } + + .overflow-x-auto { + overflow-x: auto; + } + + .overflow-x-hidden { + overflow-x: hidden; + } + + .overflow-y-auto { + overflow-y: auto; + } + + .rounded { + border-radius: .25rem; + } + + .rounded-2xl { + border-radius: calc(var(--radius) + 8px); + } + + .rounded-\[2px\] { + border-radius: 2px; + } + + .rounded-\[12px\] { + border-radius: 12px; + } + + .rounded-full { + border-radius: 3.40282e38px; + } + + .rounded-lg { + border-radius: var(--radius); + } + + .rounded-md { + border-radius: calc(var(--radius) - 2px); + } + + .rounded-xl { + border-radius: calc(var(--radius) + 4px); + } + + .rounded-t-2xl { + border-top-left-radius: calc(var(--radius) + 8px); + border-top-right-radius: calc(var(--radius) + 8px); + } + + .rounded-t-xl { + border-top-left-radius: calc(var(--radius) + 4px); + border-top-right-radius: calc(var(--radius) + 4px); + } + + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + + .border-2 { + border-style: var(--tw-border-style); + border-width: 2px; + } + + .border-\[0\.5px\] { + border-style: var(--tw-border-style); + border-width: .5px; + } + + .border-y { + border-block-style: var(--tw-border-style); + border-block-width: 1px; + } + + .border-t { + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + + .border-b-2 { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 2px; + } + + .border-l-4 { + border-left-style: var(--tw-border-style); + border-left-width: 4px; + } + + .border-dashed { + --tw-border-style: dashed; + border-style: dashed; + } + + .border-none { + --tw-border-style: none; + border-style: none; + } + + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + + .border-gray-25 { + border-color: var(--color-gray-25); + } + + .border-gray-300 { + border-color: var(--color-gray-300); + } + + .border-gray-300\/40 { + border-color: #b8b4ac66; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-gray-300\/40 { + border-color: color-mix(in oklab, var(--color-gray-300) 40%, transparent); + } + } + + .border-gray-500 { + border-color: var(--color-gray-500); + } + + .border-gray-500\/60 { + border-color: #7c776f99; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-gray-500\/60 { + border-color: color-mix(in oklab, var(--color-gray-500) 60%, transparent); + } + } + + .border-gray-600 { + border-color: var(--color-gray-600); + } + + .border-gray-700 { + border-color: var(--color-gray-700); + } + + .border-gray-800 { + border-color: var(--color-gray-800); + } + + .border-gray-950 { + border-color: var(--color-gray-950); + } + + .border-red-500\/30 { + border-color: #fb2c364d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-red-500\/30 { + border-color: color-mix(in oklab, var(--color-red-500) 30%, transparent); + } + } + + .border-system-error { + border-color: var(--color-system-error); + } + + .border-system-error\/30 { + border-color: #ef44444d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-system-error\/30 { + border-color: color-mix(in oklab, var(--color-system-error) 30%, transparent); + } + } + + .border-system-warning\/30 { + border-color: #eab3084d; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-system-warning\/30 { + border-color: color-mix(in oklab, var(--color-system-warning) 30%, transparent); + } + } + + .border-teal-500 { + border-color: var(--color-teal-500); + } + + .border-teal-700 { + border-color: var(--color-teal-700); + } + + .border-yellow-600 { + border-color: var(--color-yellow-600); + } + + .border-yellow-700\/50 { + border-color: #a3610080; + } + + @supports (color: color-mix(in lab, red, red)) { + .border-yellow-700\/50 { + border-color: color-mix(in oklab, var(--color-yellow-700) 50%, transparent); + } + } + + .bg-background { + background-color: var(--background); + } + + .bg-black\/60 { + background-color: #0009; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-black\/60 { + background-color: color-mix(in oklab, var(--color-black) 60%, transparent); + } + } + + .bg-black\/85 { + background-color: #000000d9; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-black\/85 { + background-color: color-mix(in oklab, var(--color-black) 85%, transparent); + } + } + + .bg-border { + background-color: var(--border); + } + + .bg-destructive { + background-color: var(--destructive); + } + + .bg-foreground { + background-color: var(--foreground); + } + + .bg-gray-25 { + background-color: var(--color-gray-25); + } + + .bg-gray-25\/10 { + background-color: #fbfaf91a; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-25\/10 { + background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent); + } + } + + .bg-gray-300 { + background-color: var(--color-gray-300); + } + + .bg-gray-600 { + background-color: var(--color-gray-600); + } + + .bg-gray-700 { + background-color: var(--color-gray-700); + } + + .bg-gray-800 { + background-color: var(--color-gray-800); + } + + .bg-gray-800\/40 { + background-color: #2f2c2866; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-800\/40 { + background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent); + } + } + + .bg-gray-900 { + background-color: var(--color-gray-900); + } + + .bg-gray-900\/60 { + background-color: #1c1a1799; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/60 { + background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent); + } + } + + .bg-gray-900\/70 { + background-color: #1c1a17b3; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/70 { + background-color: color-mix(in oklab, var(--color-gray-900) 70%, transparent); + } + } + + .bg-gray-900\/90 { + background-color: #1c1a17e6; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/90 { + background-color: color-mix(in oklab, var(--color-gray-900) 90%, transparent); + } + } + + .bg-gray-900\/95 { + background-color: #1c1a17f2; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-gray-900\/95 { + background-color: color-mix(in oklab, var(--color-gray-900) 95%, transparent); + } + } + + .bg-gray-950 { + background-color: var(--color-gray-950); + } + + .bg-input { + background-color: var(--input); + } + + .bg-muted { + background-color: var(--muted); + } + + .bg-primary { + background-color: var(--primary); + } + + .bg-red-500\/10 { + background-color: #fb2c361a; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-red-500\/10 { + background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent); + } + } + + .bg-secondary { + background-color: var(--secondary); + } + + .bg-system-error\/20 { + background-color: #ef444433; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-system-error\/20 { + background-color: color-mix(in oklab, var(--color-system-error) 20%, transparent); + } + } + + .bg-system-warning\/20 { + background-color: #eab30833; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-system-warning\/20 { + background-color: color-mix(in oklab, var(--color-system-warning) 20%, transparent); + } + } + + .bg-teal-500 { + background-color: var(--color-teal-500); + } + + .bg-teal-500\/20 { + background-color: #02e2ac33; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-teal-500\/20 { + background-color: color-mix(in oklab, var(--color-teal-500) 20%, transparent); + } + } + + .bg-teal-600 { + background-color: var(--color-teal-600); + } + + .bg-teal-700 { + background-color: var(--color-teal-700); + } + + .bg-teal-950 { + background-color: var(--color-teal-950); + } + + .bg-transparent { + background-color: #0000; + } + + .bg-yellow-900\/30 { + background-color: #733e0a4d; + } + + @supports (color: color-mix(in lab, red, red)) { + .bg-yellow-900\/30 { + background-color: color-mix(in oklab, var(--color-yellow-900) 30%, transparent); + } + } + + .bg-yellow-950 { + background-color: var(--color-yellow-950); + } + + .bg-linear-to-b { + --tw-gradient-position: to bottom; + } + + @supports (background-image: linear-gradient(in lab, red, red)) { + .bg-linear-to-b { + --tw-gradient-position: to bottom in oklab; + } + } + + .bg-linear-to-b { + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-linear-to-t { + --tw-gradient-position: to top; + } + + @supports (background-image: linear-gradient(in lab, red, red)) { + .bg-linear-to-t { + --tw-gradient-position: to top in oklab; + } + } + + .bg-linear-to-t { + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-b { + --tw-gradient-position: to bottom in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-r { + --tw-gradient-position: to right in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-gradient-to-t { + --tw-gradient-position: to top in oklab; + background-image: linear-gradient(var(--tw-gradient-stops)); + } + + .bg-\[image\:linear-gradient\(to_top\,rgba\(161\,149\,240\,0\.7\)\,transparent\)\] { + background-image: linear-gradient(to top, #a195f0b3, #0000); + } + + .bg-\[linear-gradient\(to_top\,rgba\(2\,226\,172\,0\.3\)\,transparent\)\] { + background-image: linear-gradient(to top, #02e2ac4d, #0000); + } + + .bg-\[linear-gradient\(to_top\,rgba\(2\,226\,172\,0\.5\)\,transparent\)\] { + background-image: linear-gradient(to top, #02e2ac80, #0000); + } + + .bg-\[radial-gradient\(ellipse_at_center\,_var\(--tw-gradient-stops\)\)\] { + background-image: radial-gradient(ellipse at center, var(--tw-gradient-stops)); + } + + .from-gray-900 { + --tw-gradient-from: var(--color-gray-900); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-gray-950 { + --tw-gradient-from: var(--color-gray-950); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-teal-500\/25 { + --tw-gradient-from: #02e2ac40; + } + + @supports (color: color-mix(in lab, red, red)) { + .from-teal-500\/25 { + --tw-gradient-from: color-mix(in oklab, var(--color-teal-500) 25%, transparent); + } + } + + .from-teal-500\/25 { + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .from-transparent { + --tw-gradient-from: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .via-gray-950 { + --tw-gradient-via: var(--color-gray-950); + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + + .via-gray-950\/80 { + --tw-gradient-via: #12100dcc; + } + + @supports (color: color-mix(in lab, red, red)) { + .via-gray-950\/80 { + --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 80%, transparent); + } + } + + .via-gray-950\/80 { + --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-via-stops); + } + + .to-black { + --tw-gradient-to: var(--color-black); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-gray-900 { + --tw-gradient-to: var(--color-gray-900); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-gray-950 { + --tw-gradient-to: var(--color-gray-950); + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-teal-500\/30 { + --tw-gradient-to: #02e2ac4d; + } + + @supports (color: color-mix(in lab, red, red)) { + .to-teal-500\/30 { + --tw-gradient-to: color-mix(in oklab, var(--color-teal-500) 30%, transparent); + } + } + + .to-teal-500\/30 { + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .to-transparent { + --tw-gradient-to: transparent; + --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position)); + } + + .bg-\[length\:100\%_0\%\], .bg-size-\[100\%_0\%\] { + background-size: 100% 0%; + } + + .bg-size-\[100\%_6\%\] { + background-size: 100% 6%; + } + + .bg-bottom { + background-position: bottom; + } + + .bg-no-repeat { + background-repeat: no-repeat; + } + + .fill-foreground { + fill: var(--foreground); + } + + .object-cover { + object-fit: cover; + } + + .object-center { + object-position: center; + } + + .p-0 { + padding: calc(var(--spacing) * 0); + } + + .p-1 { + padding: calc(var(--spacing) * 1); + } + + .p-1\.5 { + padding: calc(var(--spacing) * 1.5); + } + + .p-2 { + padding: calc(var(--spacing) * 2); + } + + .p-4 { + padding: calc(var(--spacing) * 4); + } + + .p-6 { + padding: calc(var(--spacing) * 6); + } + + .p-8 { + padding: calc(var(--spacing) * 8); + } + + .\!px-4 { + padding-inline: calc(var(--spacing) * 4) !important; + } + + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + + .px-1\.5 { + padding-inline: calc(var(--spacing) * 1.5); + } + + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } + + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + + .px-3\.5 { + padding-inline: calc(var(--spacing) * 3.5); + } + + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + + .px-5 { + padding-inline: calc(var(--spacing) * 5); + } + + .px-6 { + padding-inline: calc(var(--spacing) * 6); + } + + .px-8 { + padding-inline: calc(var(--spacing) * 8); + } + + .px-10 { + padding-inline: calc(var(--spacing) * 10); + } + + .px-\[27px\] { + padding-inline: 27px; + } + + .\!py-1 { + padding-block: calc(var(--spacing) * 1) !important; + } + + .\!py-4 { + padding-block: calc(var(--spacing) * 4) !important; + } + + .py-0\.5 { + padding-block: calc(var(--spacing) * .5); + } + + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + + .py-2\.5 { + padding-block: calc(var(--spacing) * 2.5); + } + + .py-3 { + padding-block: calc(var(--spacing) * 3); + } + + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + + .py-5 { + padding-block: calc(var(--spacing) * 5); + } + + .py-6 { + padding-block: calc(var(--spacing) * 6); + } + + .py-8 { + padding-block: calc(var(--spacing) * 8); + } + + .py-9 { + padding-block: calc(var(--spacing) * 9); + } + + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + + .py-12 { + padding-block: calc(var(--spacing) * 12); + } + + .py-14 { + padding-block: calc(var(--spacing) * 14); + } + + .py-16 { + padding-block: calc(var(--spacing) * 16); + } + + .py-20 { + padding-block: calc(var(--spacing) * 20); + } + + .py-\[10px\] { + padding-block: 10px; + } + + .py-\[34px\] { + padding-block: 34px; + } + + .pt-2 { + padding-top: calc(var(--spacing) * 2); + } + + .pt-4 { + padding-top: calc(var(--spacing) * 4); + } + + .pt-5 { + padding-top: calc(var(--spacing) * 5); + } + + .pt-10 { + padding-top: calc(var(--spacing) * 10); + } + + .pt-16 { + padding-top: calc(var(--spacing) * 16); + } + + .pt-\[17px\] { + padding-top: 17px; + } + + .pt-\[72px\] { + padding-top: 72px; + } + + .pr-4 { + padding-right: calc(var(--spacing) * 4); + } + + .pr-12 { + padding-right: calc(var(--spacing) * 12); + } + + .pr-16 { + padding-right: calc(var(--spacing) * 16); + } + + .pr-20 { + padding-right: calc(var(--spacing) * 20); + } + + .pb-0 { + padding-bottom: calc(var(--spacing) * 0); + } + + .pb-4 { + padding-bottom: calc(var(--spacing) * 4); + } + + .pb-8 { + padding-bottom: calc(var(--spacing) * 8); + } + + .pb-20 { + padding-bottom: calc(var(--spacing) * 20); + } + + .pb-28 { + padding-bottom: calc(var(--spacing) * 28); + } + + .pb-\[max\(12px\,env\(safe-area-inset-bottom\)\)\] { + padding-bottom: max(12px, env(safe-area-inset-bottom)); + } + + .pl-3 { + padding-left: calc(var(--spacing) * 3); + } + + .pl-4 { + padding-left: calc(var(--spacing) * 4); + } + + .text-center { + text-align: center; + } + + .text-left { + text-align: left; + } + + .text-right { + text-align: right; + } + + .font-heading { + font-family: var(--font-heading); + } + + .font-mono { + font-family: var(--font-mono); + } + + .font-serif { + font-family: var(--font-serif); + } + + .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-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + + .text-lg { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + + .text-\[11px\] { + font-size: 11px; + } + + .text-\[20px\] { + font-size: 20px; + } + + .text-\[26px\] { + font-size: 26px; + } + + .text-\[30px\] { + font-size: 30px; + } + + .text-\[32px\] { + font-size: 32px; + } + + .text-\[36px\] { + font-size: 36px; + } + + .text-\[52px\] { + font-size: 52px; + } + + .text-\[64px\] { + font-size: 64px; + } + + .leading-6 { + --tw-leading: calc(var(--spacing) * 6); + line-height: calc(var(--spacing) * 6); + } + + .leading-7 { + --tw-leading: calc(var(--spacing) * 7); + line-height: calc(var(--spacing) * 7); + } + + .leading-8 { + --tw-leading: calc(var(--spacing) * 8); + line-height: calc(var(--spacing) * 8); + } + + .leading-9 { + --tw-leading: calc(var(--spacing) * 9); + line-height: calc(var(--spacing) * 9); + } + + .leading-10 { + --tw-leading: calc(var(--spacing) * 10); + line-height: calc(var(--spacing) * 10); + } + + .leading-\[1\.3\] { + --tw-leading: 1.3; + line-height: 1.3; + } + + .leading-\[1\.12\] { + --tw-leading: 1.12; + line-height: 1.12; + } + + .leading-none { + --tw-leading: 1; + line-height: 1; + } + + .leading-relaxed { + --tw-leading: var(--leading-relaxed); + line-height: var(--leading-relaxed); + } + + .leading-snug { + --tw-leading: var(--leading-snug); + line-height: var(--leading-snug); + } + + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + + .font-extrabold { + --tw-font-weight: var(--font-weight-extrabold); + font-weight: var(--font-weight-extrabold); + } + + .font-light { + --tw-font-weight: var(--font-weight-light); + font-weight: var(--font-weight-light); + } + + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + + .tracking-\[0\.012em\] { + --tw-tracking: .012em; + letter-spacing: .012em; + } + + .tracking-\[0\.18em\] { + --tw-tracking: .18em; + letter-spacing: .18em; + } + + .tracking-\[0\.64px\] { + --tw-tracking: .64px; + letter-spacing: .64px; + } + + .tracking-wider { + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + } + + .text-balance { + text-wrap: balance; + } + + .whitespace-nowrap { + white-space: nowrap; + } + + .whitespace-pre-wrap { + white-space: pre-wrap; + } + + .text-\[\#A195F0\] { + color: #a195f0; + } + + .text-\[\#d6d3cd\] { + color: #d6d3cd; + } + + .text-background { + color: var(--background); + } + + .text-gray-25 { + color: var(--color-gray-25); + } + + .text-gray-25\/70 { + color: #fbfaf9b3; + } + + @supports (color: color-mix(in lab, red, red)) { + .text-gray-25\/70 { + color: color-mix(in oklab, var(--color-gray-25) 70%, transparent); + } + } + + .text-gray-50 { + color: var(--color-gray-50); + } + + .text-gray-100 { + color: var(--color-gray-100); + } + + .text-gray-200 { + color: var(--color-gray-200); + } + + .text-gray-300 { + color: var(--color-gray-300); + } + + .text-gray-400 { + color: var(--color-gray-400); + } + + .text-gray-500 { + color: var(--color-gray-500); + } + + .text-gray-600 { + color: var(--color-gray-600); + } + + .text-gray-900 { + color: var(--color-gray-900); + } + + .text-iris-500 { + color: var(--color-iris-500); + } + + .text-muted-foreground { + color: var(--muted-foreground); + } + + .text-primary { + color: var(--primary); + } + + .text-primary-foreground { + color: var(--primary-foreground); + } + + .text-red-400 { + color: var(--color-red-400); + } + + .text-secondary-foreground { + color: var(--secondary-foreground); + } + + .text-system-error { + color: var(--color-system-error); + } + + .text-system-warning { + color: var(--color-system-warning); + } + + .text-teal-100 { + color: var(--color-teal-100); + } + + .text-teal-500 { + color: var(--color-teal-500); + } + + .text-teal-700 { + color: var(--color-teal-700); + } + + .text-teal-900 { + color: var(--color-teal-900); + } + + .text-white { + color: var(--color-white); + } + + .text-yellow-300 { + color: var(--color-yellow-300); + } + + .text-yellow-500 { + color: var(--color-yellow-500); + } + + .capitalize { + text-transform: capitalize; + } + + .uppercase { + text-transform: uppercase; + } + + .italic { + font-style: italic; + } + + .underline { + text-decoration-line: underline; + } + + .underline-offset-4 { + text-underline-offset: 4px; + } + + .opacity-0 { + opacity: 0; + } + + .opacity-80 { + opacity: .8; + } + + .shadow-2xl { + --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, #00000040); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .shadow-none { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .shadow-xs { + --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, #0000000d); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + + .blur-3xl { + --tw-blur: blur(var(--blur-3xl)); + 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, ); + } + + .grayscale { + --tw-grayscale: grayscale(100%); + 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, ); + } + + .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, ); + } + + .backdrop-blur-md { + --tw-backdrop-blur: blur(var(--blur-md)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .backdrop-blur-sm { + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + backdrop-filter: var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, ); + } + + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-colors { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .transition-transform { + transition-property: transform, translate, scale, rotate; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + + .duration-200 { + --tw-duration: .2s; + transition-duration: .2s; + } + + .duration-300 { + --tw-duration: .3s; + transition-duration: .3s; + } + + .duration-500 { + --tw-duration: .5s; + transition-duration: .5s; + } + + .ease-in { + --tw-ease: var(--ease-in); + transition-timing-function: var(--ease-in); + } + + .ease-out { + --tw-ease: var(--ease-out); + transition-timing-function: var(--ease-out); + } + + .fade-in-0 { + --tw-enter-opacity: 0; + } + + .outline-none { + --tw-outline-style: none; + outline-style: none; + } + + .zoom-in-95 { + --tw-enter-scale: .95; + } + + .\[border-image\:repeating-linear-gradient\(to_right\,theme\(colors\.gray\.600\)_0\,theme\(colors\.gray\.600\)_8px\,transparent_8px\,transparent_16px\)_1\] { + border-image: repeating-linear-gradient(to right, #605b55 0 8px, #0000 8px 16px) 1; + } + + .running { + animation-play-state: running; + } + + @media (hover: hover) { + .group-hover\:scale-105:is(:where(.group):hover *) { + --tw-scale-x: 105%; + --tw-scale-y: 105%; + --tw-scale-z: 105%; + scale: var(--tw-scale-x) var(--tw-scale-y); + } + } + + @media (hover: hover) { + .group-hover\:border-teal-500:is(:where(.group):hover *) { + border-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .group-hover\:text-gray-25:is(:where(.group):hover *) { + color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .group-hover\:text-teal-500:is(:where(.group):hover *) { + color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .group-hover\:opacity-0:is(:where(.group):hover *) { + opacity: 0; + } + } + + @media (hover: hover) { + .group-hover\:opacity-100:is(:where(.group):hover *) { + opacity: 1; + } + } + + .group-data-\[state\=open\]\:rotate-180:is(:where(.group)[data-state="open"] *) { + rotate: 180deg; + } + + .group-\[\.is-assistant\]\:text-foreground:is(:where(.group).is-assistant *) { + color: var(--foreground); + } + + .group-\[\.is-user\]\:ml-auto:is(:where(.group).is-user *) { + margin-left: auto; + } + + .group-\[\.is-user\]\:rounded-lg:is(:where(.group).is-user *) { + border-radius: var(--radius); + } + + .group-\[\.is-user\]\:bg-secondary:is(:where(.group).is-user *) { + background-color: var(--secondary); + } + + .group-\[\.is-user\]\:px-4:is(:where(.group).is-user *) { + padding-inline: calc(var(--spacing) * 4); + } + + .group-\[\.is-user\]\:py-3:is(:where(.group).is-user *) { + padding-block: calc(var(--spacing) * 3); + } + + .group-\[\.is-user\]\:text-foreground:is(:where(.group).is-user *) { + color: var(--foreground); + } + + .placeholder\:text-gray-500::placeholder { + color: var(--color-gray-500); + } + + .first\:mt-0:first-child { + margin-top: calc(var(--spacing) * 0); + } + + .last\:border-b-0:last-child { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0; + } + + @media (hover: hover) { + .hover\:border-iris-500:hover { + border-color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:border-teal-500:hover { + border-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .hover\:border-transparent:hover { + border-color: #0000; + } + } + + @media (hover: hover) { + .hover\:bg-accent:hover { + background-color: var(--accent); + } + } + + @media (hover: hover) { + .hover\:bg-destructive\/90:hover { + background-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-destructive\/90:hover { + background-color: color-mix(in oklab, var(--destructive) 90%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-gray-500:hover { + background-color: var(--color-gray-500); + } + } + + @media (hover: hover) { + .hover\:bg-gray-800:hover { + background-color: var(--color-gray-800); + } + } + + @media (hover: hover) { + .hover\:bg-gray-950\/60:hover { + background-color: #12100d99; + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-gray-950\/60:hover { + background-color: color-mix(in oklab, var(--color-gray-950) 60%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-iris-500:hover { + background-color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:bg-primary\/90:hover { + background-color: var(--primary); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-primary\/90:hover { + background-color: color-mix(in oklab, var(--primary) 90%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-secondary\/80:hover { + background-color: var(--secondary); + } + + @supports (color: color-mix(in lab, red, red)) { + .hover\:bg-secondary\/80:hover { + background-color: color-mix(in oklab, var(--secondary) 80%, transparent); + } + } + } + + @media (hover: hover) { + .hover\:bg-teal-500:hover { + background-color: var(--color-teal-500); + } + } + + @media (hover: hover) { + .hover\:bg-\[linear-gradient\(180deg\,\#1c1a17_94\.231\%\,\#02e2ac_100\%\)\]:hover { + background-image: linear-gradient(#1c1a17 94.231%, #02e2ac 100%); + } + } + + @media (hover: hover) { + .hover\:bg-\[length\:100\%_30\%\]:hover { + background-size: 100% 30%; + } + } + + @media (hover: hover) { + .hover\:bg-size-\[100\%_50\%\]:hover { + background-size: 100% 50%; + } + } + + @media (hover: hover) { + .hover\:text-accent-foreground:hover { + color: var(--accent-foreground); + } + } + + @media (hover: hover) { + .hover\:text-gray-25:hover { + color: var(--color-gray-25); + } + } + + @media (hover: hover) { + .hover\:text-gray-300:hover { + color: var(--color-gray-300); + } + } + + @media (hover: hover) { + .hover\:text-gray-500:hover { + color: var(--color-gray-500); + } + } + + @media (hover: hover) { + .hover\:text-iris-500:hover { + color: var(--color-iris-500); + } + } + + @media (hover: hover) { + .hover\:text-teal-100:hover { + color: var(--color-teal-100); + } + } + + @media (hover: hover) { + .hover\:text-teal-400:hover { + color: var(--color-teal-400); + } + } + + @media (hover: hover) { + .hover\:text-white:hover { + color: var(--color-white); + } + } + + @media (hover: hover) { + .hover\:underline:hover { + text-decoration-line: underline; + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_-3px_rgba\(2\,226\,172\,0\.6\)\]:hover { + --tw-shadow: 0 0 12px -3px var(--tw-shadow-color, #02e2ac99); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_0_rgba\(2\,226\,172\,0\.6\)\]:hover { + --tw-shadow: 0 0 12px 0 var(--tw-shadow-color, #02e2ac99); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_0_12px_0px_rgba\(2\,226\,172\,0\.4\)\]:hover { + --tw-shadow: 0 0 12px 0px var(--tw-shadow-color, #02e2ac66); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + @media (hover: hover) { + .hover\:shadow-\[0_2px_10px_rgba\(161\,149\,240\,0\.6\)\]:hover { + --tw-shadow: 0 2px 10px var(--tw-shadow-color, #a195f099); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + + .focus\:border-transparent:focus { + border-color: #0000; + } + + .focus\:shadow-none:focus { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus\:ring-2:focus { + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus\:ring-gray-25:focus { + --tw-ring-color: var(--color-gray-25); + } + + .focus\:ring-teal-500:focus { + --tw-ring-color: var(--color-teal-500); + } + + .focus\:ring-offset-2:focus { + --tw-ring-offset-width: 2px; + --tw-ring-offset-shadow: var(--tw-ring-inset, ) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + + .focus\:ring-offset-gray-900:focus { + --tw-ring-offset-color: var(--color-gray-900); + } + + .focus\:outline-none:focus { + --tw-outline-style: none; + outline-style: none; + } + + .focus-visible\:border-ring:focus-visible { + border-color: var(--ring); + } + + .focus-visible\:ring-\[3px\]:focus-visible { + --tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + + .focus-visible\:ring-destructive\/20:focus-visible { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .focus-visible\:ring-destructive\/20:focus-visible { + --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent); + } + } + + .focus-visible\:ring-ring\/50:focus-visible { + --tw-ring-color: var(--ring); + } + + @supports (color: color-mix(in lab, red, red)) { + .focus-visible\:ring-ring\/50:focus-visible { + --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent); + } + } + + .disabled\:pointer-events-none:disabled { + pointer-events: none; + } + + .disabled\:cursor-not-allowed:disabled { + cursor: not-allowed; + } + + .disabled\:bg-gray-800:disabled { + background-color: var(--color-gray-800); + } + + .disabled\:opacity-30:disabled { + opacity: .3; + } + + .disabled\:opacity-50:disabled { + opacity: .5; + } + + .has-\[\>\[data-slot\=button-group\]\]\:gap-2:has( > [data-slot="button-group"]) { + gap: calc(var(--spacing) * 2); + } + + .has-\[\>svg\]\:px-1\.5:has( > svg) { + padding-inline: calc(var(--spacing) * 1.5); + } + + .has-\[\>svg\]\:px-2\.5:has( > svg) { + padding-inline: calc(var(--spacing) * 2.5); + } + + .has-\[\>svg\]\:px-3:has( > svg) { + padding-inline: calc(var(--spacing) * 3); + } + + .has-\[\>svg\]\:px-4:has( > svg) { + padding-inline: calc(var(--spacing) * 4); + } + + .aria-invalid\:border-destructive[aria-invalid="true"] { + border-color: var(--destructive); + } + + .aria-invalid\:ring-destructive\/20[aria-invalid="true"] { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .aria-invalid\:ring-destructive\/20[aria-invalid="true"] { + --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent); + } + } + + .data-\[orientation\=horizontal\]\:h-px[data-orientation="horizontal"] { + height: 1px; + } + + .data-\[orientation\=horizontal\]\:w-full[data-orientation="horizontal"] { + width: 100%; + } + + .data-\[orientation\=vertical\]\:h-auto[data-orientation="vertical"] { + height: auto; + } + + .data-\[orientation\=vertical\]\:h-full[data-orientation="vertical"] { + height: 100%; + } + + .data-\[orientation\=vertical\]\:w-px[data-orientation="vertical"] { + width: 1px; + } + + .data-\[side\=bottom\]\:slide-in-from-top-2[data-side="bottom"] { + --tw-enter-translate-y: calc(2 * var(--spacing) * -1); + } + + .data-\[side\=left\]\:slide-in-from-right-2[data-side="left"] { + --tw-enter-translate-x: calc(2 * var(--spacing)); + } + + .data-\[side\=right\]\:slide-in-from-left-2[data-side="right"] { + --tw-enter-translate-x: calc(2 * var(--spacing) * -1); + } + + .data-\[side\=top\]\:slide-in-from-bottom-2[data-side="top"] { + --tw-enter-translate-y: calc(2 * var(--spacing)); + } + + .data-\[state\=closed\]\:animate-\[dropdown-out_100ms_ease-in\][data-state="closed"] { + animation: .1s ease-in dropdown-out; + } + + .data-\[state\=closed\]\:animate-out[data-state="closed"] { + animation: exit var(--tw-animation-duration, var(--tw-duration, .15s)) var(--tw-ease, ease) var(--tw-animation-delay, 0s) var(--tw-animation-iteration-count, 1) var(--tw-animation-direction, normal) var(--tw-animation-fill-mode, none); + } + + .data-\[state\=closed\]\:fade-out-0[data-state="closed"] { + --tw-exit-opacity: 0; + } + + .data-\[state\=closed\]\:zoom-out-95[data-state="closed"] { + --tw-exit-scale: .95; + } + + @media (min-width: 40rem) { + .sm\:top-0 { + top: calc(var(--spacing) * 0); + } + } + + @media (min-width: 40rem) { + .sm\:top-\[15\%\] { + top: 15%; + } + } + + @media (min-width: 40rem) { + .sm\:right-0 { + right: calc(var(--spacing) * 0); + } + } + + @media (min-width: 40rem) { + .sm\:left-auto { + left: auto; + } + } + + @media (min-width: 40rem) { + .sm\:block { + display: block; + } + } + + @media (min-width: 40rem) { + .sm\:h-full { + height: 100%; + } + } + + @media (min-width: 40rem) { + .sm\:w-full { + width: 100%; + } + } + + @media (min-width: 40rem) { + .sm\:max-w-\[60\%\] { + max-width: 60%; + } + } + + @media (min-width: 40rem) { + .sm\:max-w-sm { + max-width: var(--container-sm); + } + } + + @media (min-width: 40rem) { + .sm\:animate-\[sidebar-in-right_250ms_ease-out\] { + animation: .25s ease-out sidebar-in-right; + } + } + + @media (min-width: 40rem) { + .sm\:animate-\[sidebar-out-right_200ms_ease-in_forwards\] { + animation: .2s ease-in forwards sidebar-out-right; + } + } + + @media (min-width: 40rem) { + .sm\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 40rem) { + .sm\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 40rem) { + .sm\:flex-row { + flex-direction: row; + } + } + + @media (min-width: 40rem) { + .sm\:items-center { + align-items: center; + } + } + + @media (min-width: 40rem) { + .sm\:items-end { + align-items: flex-end; + } + } + + @media (min-width: 40rem) { + .sm\:justify-between { + justify-content: space-between; + } + } + + @media (min-width: 40rem) { + .sm\:gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } + } + + @media (min-width: 40rem) { + .sm\:gap-x-10 { + column-gap: calc(var(--spacing) * 10); + } + } + + @media (min-width: 40rem) { + .sm\:rounded-t-none { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + } + + @media (min-width: 40rem) { + .sm\:border-t-0 { + border-top-style: var(--tw-border-style); + border-top-width: 0; + } + } + + @media (min-width: 40rem) { + .sm\:border-l { + border-left-style: var(--tw-border-style); + border-left-width: 1px; + } + } + + @media (min-width: 40rem) { + .sm\:px-5 { + padding-inline: calc(var(--spacing) * 5); + } + } + + @media (min-width: 40rem) { + .sm\:px-6 { + padding-inline: calc(var(--spacing) * 6); + } + } + + @media (min-width: 40rem) { + .sm\:px-8 { + padding-inline: calc(var(--spacing) * 8); + } + } + + @media (min-width: 40rem) { + .sm\:px-12 { + padding-inline: calc(var(--spacing) * 12); + } + } + + @media (min-width: 40rem) { + .sm\:pl-10 { + padding-left: calc(var(--spacing) * 10); + } + } + + @media (min-width: 40rem) { + .sm\:text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-5xl\/14 { + font-size: var(--text-5xl); + line-height: calc(var(--spacing) * 14); + } + } + + @media (min-width: 40rem) { + .sm\:text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + } + + @media (min-width: 40rem) { + .sm\:text-\[32px\] { + font-size: 32px; + } + } + + @media (min-width: 40rem) { + .sm\:text-\[48px\] { + font-size: 48px; + } + } + + @media (min-width: 48rem) { + .md\:mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + } + + @media (min-width: 48rem) { + .md\:mb-24 { + margin-bottom: calc(var(--spacing) * 24); + } + } + + @media (min-width: 48rem) { + .md\:block { + display: block; + } + } + + @media (min-width: 48rem) { + .md\:flex { + display: flex; + } + } + + @media (min-width: 48rem) { + .md\:grid { + display: grid; + } + } + + @media (min-width: 48rem) { + .md\:hidden { + display: none; + } + } + + @media (min-width: 48rem) { + .md\:h-80 { + height: calc(var(--spacing) * 80); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + } + + @media (min-width: 48rem) { + .md\:flex-row { + flex-direction: row; + } + } + + @media (min-width: 48rem) { + .md\:items-center { + align-items: center; + } + } + + @media (min-width: 48rem) { + .md\:items-start { + align-items: flex-start; + } + } + + @media (min-width: 48rem) { + .md\:gap-8 { + gap: calc(var(--spacing) * 8); + } + } + + @media (min-width: 48rem) { + .md\:gap-14 { + gap: calc(var(--spacing) * 14); + } + } + + @media (min-width: 48rem) { + .md\:p-10 { + padding: calc(var(--spacing) * 10); + } + } + + @media (min-width: 48rem) { + .md\:px-12 { + padding-inline: calc(var(--spacing) * 12); + } + } + + @media (min-width: 48rem) { + .md\:py-12 { + padding-block: calc(var(--spacing) * 12); + } + } + + @media (min-width: 48rem) { + .md\:pt-24 { + padding-top: calc(var(--spacing) * 24); + } + } + + @media (min-width: 48rem) { + .md\:pb-28 { + padding-bottom: calc(var(--spacing) * 28); + } + } + + @media (min-width: 48rem) { + .md\:text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-5xl { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + + @media (min-width: 48rem) { + .md\:text-7xl\/20 { + font-size: var(--text-7xl); + line-height: calc(var(--spacing) * 20); + } + } + + @media (min-width: 48rem) { + .md\:text-\[32px\] { + font-size: 32px; + } + } + + @media (min-width: 48rem) { + .md\:text-\[64px\] { + font-size: 64px; + } + } + + @media (min-width: 48rem) { + .md\:text-\[80px\] { + font-size: 80px; + } + } + + @media (min-width: 64rem) { + .lg\:col-span-2 { + grid-column: span 2 / span 2; + } + } + + @media (min-width: 64rem) { + .lg\:flex { + display: flex; + } + } + + @media (min-width: 64rem) { + .lg\:hidden { + display: none; + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + + @media (min-width: 64rem) { + .lg\:grid-cols-\[2\.2fr_1fr_1fr_1fr\] { + grid-template-columns: 2.2fr 1fr 1fr 1fr; + } + } + + @media (min-width: 64rem) { + .lg\:px-0 { + padding-inline: calc(var(--spacing) * 0); + } + } + + @media (min-width: 64rem) { + .lg\:text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + + @media (min-width: 64rem) { + .lg\:text-\[38px\] { + font-size: 38px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[52px\] { + font-size: 52px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[64px\] { + font-size: 64px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[72px\] { + font-size: 72px; + } + } + + @media (min-width: 64rem) { + .lg\:text-\[88px\] { + font-size: 88px; + } + } + + @media (min-width: 80rem) { + .xl\:flex { + display: flex; + } + } + + @media (min-width: 80rem) { + .xl\:grid-cols-\[2fr_3fr\] { + grid-template-columns: 2fr 3fr; + } + } + + @media (min-width: 80rem) { + .xl\:gap-8 { + gap: calc(var(--spacing) * 8); + } + } + + @media (min-width: 80rem) { + .xl\:px-0 { + padding-inline: calc(var(--spacing) * 0); + } + } + + @media (min-width: 80rem) { + .xl\:px-20 { + padding-inline: calc(var(--spacing) * 20); + } + } + + @media (min-width: 80rem) { + .xl\:pl-14 { + padding-left: calc(var(--spacing) * 14); + } + } + + @media (min-width: 80rem) { + .xl\:text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + + .dark\:border-input:is(.dark *) { + border-color: var(--input); + } + + .dark\:bg-destructive\/60:is(.dark *) { + background-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:bg-destructive\/60:is(.dark *) { + background-color: color-mix(in oklab, var(--destructive) 60%, transparent); + } + } + + .dark\:bg-input\/30:is(.dark *) { + background-color: var(--input); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:bg-input\/30:is(.dark *) { + background-color: color-mix(in oklab, var(--input) 30%, transparent); + } + } + + @media (hover: hover) { + .dark\:hover\:bg-accent\/50:is(.dark *):hover { + background-color: var(--accent); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:hover\:bg-accent\/50:is(.dark *):hover { + background-color: color-mix(in oklab, var(--accent) 50%, transparent); + } + } + } + + @media (hover: hover) { + .dark\:hover\:bg-input\/50:is(.dark *):hover { + background-color: var(--input); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:hover\:bg-input\/50:is(.dark *):hover { + background-color: color-mix(in oklab, var(--input) 50%, transparent); + } + } + } + + .dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible { + --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent); + } + } + + .dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid="true"] { + --tw-ring-color: var(--destructive); + } + + @supports (color: color-mix(in lab, red, red)) { + .dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid="true"] { + --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent); + } + } + + .\[\&_a\]\:text-teal-400 a { + color: var(--color-teal-400); + } + + .\[\&_a\]\:underline a { + text-decoration-line: underline; + } + + .\[\&_a\:hover\]\:text-teal-300 a:hover { + color: var(--color-teal-300); + } + + .\[\&_code\]\:rounded code { + border-radius: .25rem; + } + + .\[\&_code\]\:bg-gray-700 code { + background-color: var(--color-gray-700); + } + + .\[\&_code\]\:px-1 code { + padding-inline: calc(var(--spacing) * 1); + } + + .\[\&_code\]\:py-0\.5 code { + padding-block: calc(var(--spacing) * .5); + } + + .\[\&_code\]\:text-xs code { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + + .\[\&_li\]\:mb-0\.5 li { + margin-bottom: calc(var(--spacing) * .5); + } + + .\[\&_ol\]\:mb-2 ol { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_ol\]\:list-decimal ol { + list-style-type: decimal; + } + + .\[\&_ol\]\:pl-4 ol { + padding-left: calc(var(--spacing) * 4); + } + + .\[\&_p\]\:mb-2 p { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_p\:last-child\]\:mb-0 p:last-child { + margin-bottom: calc(var(--spacing) * 0); + } + + .\[\&_strong\]\:font-semibold strong { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + + .\[\&_strong\]\:text-gray-25 strong { + color: var(--color-gray-25); + } + + .\[\&_svg\]\:pointer-events-none svg { + pointer-events: none; + } + + .\[\&_svg\]\:shrink-0 svg { + flex-shrink: 0; + } + + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*="size-"]) { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + + .\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*="size-"]) { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + + .\[\&_ul\]\:mb-2 ul { + margin-bottom: calc(var(--spacing) * 2); + } + + .\[\&_ul\]\:list-disc ul { + list-style-type: disc; + } + + .\[\&_ul\]\:pl-4 ul { + padding-left: calc(var(--spacing) * 4); + } + + .\[\&\>\*\]\:focus-visible\:relative > *:focus-visible { + position: relative; + } + + .\[\&\>\*\]\:focus-visible\:z-10 > *:focus-visible { + z-index: 10; + } + + .\[\&\>\*\:first-child\]\:mt-0 > :first-child { + margin-top: calc(var(--spacing) * 0); + } + + .\[\&\>\*\:last-child\]\:mb-0 > :last-child { + margin-bottom: calc(var(--spacing) * 0); + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none > :not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-md > :not(:first-child) { + border-top-left-radius: calc(var(--radius) - 2px); + border-bottom-left-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\*\:not\(\:first-child\)\]\:rounded-l-none > :not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:border-t-0 > :not(:first-child) { + border-top-style: var(--tw-border-style); + border-top-width: 0; + } + + .\[\&\>\*\:not\(\:first-child\)\]\:border-l-0 > :not(:first-child) { + border-left-style: var(--tw-border-style); + border-left-width: 0; + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-md > :not(:last-child) { + border-top-right-radius: calc(var(--radius) - 2px); + border-bottom-right-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-r-none > :not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none > :not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } + + .has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-r-md:has(:is(select[aria-hidden="true"]:last-child)) > [data-slot="select-trigger"]:last-of-type { + border-top-right-radius: calc(var(--radius) - 2px); + border-bottom-right-radius: calc(var(--radius) - 2px); + } + + .\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'w-\'\]\)\]\:w-fit > [data-slot="select-trigger"]:not([class*="w-"]) { + width: fit-content; + } + + .\[\&\>div\]\:pb-0 > div { + padding-bottom: calc(var(--spacing) * 0); + } + + .\[\&\>input\]\:flex-1 > input { + flex: 1; + } + + .texture-woodcut { + background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E"); + } + + .bg-starfield { + background-image: radial-gradient(1px 1px at 20px 30px, #fff, #0000), radial-gradient(1px 1px at 40px 70px, #fffc, #0000), radial-gradient(1px 1px at 50px 160px, #fff9, #0000), radial-gradient(1px 1px at 90px 40px, #fff, #0000), radial-gradient(1px 1px at 130px 80px, #ffffffb3, #0000), radial-gradient(1px 1px at 160px 120px, #ffffff80, #0000); + background-repeat: repeat; + background-size: 200px 200px; + } +} + +@property --tw-animation-delay { + syntax: "*"; + inherits: false; + initial-value: 0s; +} + +@property --tw-animation-direction { + syntax: "*"; + inherits: false; + initial-value: normal; +} + +@property --tw-animation-duration { + syntax: "*"; + inherits: false +} + +@property --tw-animation-fill-mode { + syntax: "*"; + inherits: false; + initial-value: none; +} + +@property --tw-animation-iteration-count { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-enter-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-enter-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-exit-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-exit-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-exit-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +:root { + --radius: .625rem; + --background: #1c1a17; + --foreground: #fbfaf9; + --card: #1c1a17; + --card-foreground: #fbfaf9; + --popover: #1c1a17; + --popover-foreground: #fbfaf9; + --primary: #02e2ac; + --primary-foreground: #1c1a17; + --secondary: #46423d; + --secondary-foreground: #fbfaf9; + --muted: #46423d; + --muted-foreground: #7c776f; + --accent: #46423d; + --accent-foreground: #fbfaf9; + --destructive: #ef4444; + --border: #46423d; + --input: #46423d; + --ring: #02e2ac; +} + +:focus-visible { + outline-style: var(--tw-outline-style); + outline-offset: 2px; + outline-width: 2px; + outline-color: var(--color-gray-25); +} + +::selection { + color: #fff; + background-color: #ffffff4d; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background-color: var(--color-gray-950); +} + +::-webkit-scrollbar-thumb { + background-color: var(--color-gray-800); + border-radius: 3.40282e38px; +} + +::-webkit-scrollbar-thumb:hover { + background-color: var(--color-gray-500); +} + +a:not(.btn-primary):not(.btn-secondary):not(.btn-ghost) { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); +} + +pre { + border-radius: var(--radius); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-800); + background-color: var(--color-gray-950); + padding: calc(var(--spacing) * 4); + overflow-x: auto; +} + +code:not(pre code) { + background-color: var(--color-gray-800); + padding-inline: calc(var(--spacing) * 1.5); + padding-block: calc(var(--spacing) * .5); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + color: var(--color-gray-25); + border-radius: .25rem; +} + +blockquote { + margin-block: calc(var(--spacing) * 6); + border-left-style: var(--tw-border-style); + border-left-width: 2px; + border-color: var(--color-gray-25); + padding-left: calc(var(--spacing) * 6); + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + color: var(--color-gray-500); + font-style: italic; +} + +table { + border-collapse: collapse; + width: 100%; +} + +th { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + border-color: var(--color-gray-800); + padding-block: calc(var(--spacing) * 3); + text-align: left; + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + --tw-tracking: var(--tracking-wider); + letter-spacing: var(--tracking-wider); + color: var(--color-gray-500); + text-transform: uppercase; +} + +td { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + border-color: var(--color-gray-800); + padding-block: calc(var(--spacing) * 3); +} + +hr { + margin-block: calc(var(--spacing) * 8); + border-color: var(--color-gray-800); +} + +input, textarea, select { + border-radius: calc(var(--radius) + 4px); + border-style: var(--tw-border-style); + border-width: 1px; + border-color: var(--color-gray-200); + background-color: #1c1a1799; +} + +@supports (color: color-mix(in lab, red, red)) { + input, textarea, select { + background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent); + } +} + +input, textarea, select { + padding-inline: calc(var(--spacing) * 4); + padding-block: calc(var(--spacing) * 3); + font-family: var(--font-mono); + color: var(--color-gray-25); + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .4s; + transition-duration: .4s; +} + +:is(input, textarea, select)::placeholder { + color: var(--color-gray-500); +} + +@media (hover: hover) { + :is(input, textarea, select):hover { + border-color: var(--color-teal-500); + } +} + +:is(input, textarea, select):focus { + border-color: var(--color-teal-500); + --tw-outline-style: none; + outline-style: none; +} + +input, textarea, select { + font-family: var(--font-sans); +} + +@keyframes dropdown-in { + from { + opacity: 0; + transform: scale(.95)translateY(-4px); + } + + to { + opacity: 1; + transform: scale(1)translateY(0); + } +} + +@keyframes dropdown-out { + from { + opacity: 1; + transform: scale(1)translateY(0); + } + + to { + opacity: 0; + transform: scale(.95)translateY(-4px); + } +} + +@keyframes sidebar-in-right { + from { + transform: translateX(100%); + } + + to { + transform: translateX(0); + } +} + +@keyframes sidebar-out-right { + from { + transform: translateX(0); + } + + to { + transform: translateX(100%); + } +} + +@keyframes sidebar-in-bottom { + from { + transform: translateY(100%); + } + + to { + transform: translateY(0); + } +} + +@keyframes sidebar-out-bottom { + from { + transform: translateY(0); + } + + to { + transform: translateY(100%); + } +} + +@keyframes twinkle { + 0%, 100% { + opacity: 1; + } + + 50% { + opacity: .5; + } +} + +@keyframes float { + 0%, 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-10px); + } +} + +.animate-twinkle { + animation: 3s ease-in-out infinite twinkle; +} + +.animate-float { + animation: 6s ease-in-out infinite float; +} + +.icon-hover-container { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + --tw-duration: .3s; + transition-duration: .3s; +} + +.icon-hover-container:hover img { + filter: brightness(1.2); +} + +.icon-hover-container svg path:nth-child(2) { + transform-origin: center; + transition: all .3s; +} + +.icon-hover-container:hover svg path:nth-child(2) { + transform: scale(.65); + fill: #fff !important; +} + +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-rotate-x { + syntax: "*"; + inherits: false +} + +@property --tw-rotate-y { + syntax: "*"; + inherits: false +} + +@property --tw-rotate-z { + syntax: "*"; + inherits: false +} + +@property --tw-skew-x { + syntax: "*"; + inherits: false +} + +@property --tw-skew-y { + syntax: "*"; + inherits: false +} + +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} + +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} + +@property --tw-gradient-position { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-via { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-to { + syntax: ""; + inherits: false; + initial-value: #0000; +} + +@property --tw-gradient-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-via-stops { + syntax: "*"; + inherits: false +} + +@property --tw-gradient-from-position { + syntax: ""; + inherits: false; + initial-value: 0%; +} + +@property --tw-gradient-via-position { + syntax: ""; + inherits: false; + initial-value: 50%; +} + +@property --tw-gradient-to-position { + syntax: ""; + inherits: false; + initial-value: 100%; +} + +@property --tw-leading { + syntax: "*"; + inherits: false +} + +@property --tw-font-weight { + syntax: "*"; + inherits: false +} + +@property --tw-tracking { + 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: 0; +} + +@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 +} + +@property --tw-backdrop-blur { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-brightness { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-contrast { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-grayscale { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-hue-rotate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-invert { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-opacity { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-saturate { + syntax: "*"; + inherits: false +} + +@property --tw-backdrop-sepia { + syntax: "*"; + inherits: false +} + +@property --tw-duration { + syntax: "*"; + inherits: false +} + +@property --tw-ease { + syntax: "*"; + inherits: false +} + +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +@keyframes enter { + from { + opacity: var(--tw-enter-opacity, 1); + transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0)); + filter: blur(var(--tw-enter-blur, 0)); + } +} + +@keyframes exit { + to { + opacity: var(--tw-exit-opacity, 1); + transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0)); + filter: blur(var(--tw-exit-blur, 0)); + } +} + +/*# sourceMappingURL=gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css.map*/ \ No newline at end of file diff --git a/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css.map b/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css.map new file mode 100644 index 00000000..f51e7640 --- /dev/null +++ b/gitcoin_co_30/.next/dev/static/chunks/gitcoin_co_30_src_app_globals_css_bad6b30c._.single.css.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "sources": [], + "sections": [ + {"offset": {"line": 1, "column": 0}, "map": {"version":3,"sources":["turbopack:///[project]/gitcoin_co_30/src/app/globals.css"],"sourcesContent":["/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: var(--font-sans);\n --font-serif: var(--font-serif);\n --font-mono: var(--font-mono);\n --color-red-400: oklch(70.4% 0.191 22.216);\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-yellow-300: oklch(90.5% 0.182 98.111);\n --color-yellow-500: oklch(79.5% 0.184 86.047);\n --color-yellow-600: oklch(68.1% 0.162 75.834);\n --color-yellow-700: oklch(55.4% 0.135 66.442);\n --color-yellow-900: oklch(42.1% 0.095 57.708);\n --color-yellow-950: oklch(28.6% 0.066 53.813);\n --color-teal-100: #A1F7E7;\n --color-teal-300: #2FE5C0;\n --color-teal-400: #12D9B2;\n --color-teal-500: #02E2AC;\n --color-teal-600: #00B894;\n --color-teal-700: #008F73;\n --color-teal-900: #00483E;\n --color-teal-950: #002E28;\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-gray-100: #EAE8E4;\n --color-gray-200: #D6D3CD;\n --color-gray-300: #B8B4AC;\n --color-gray-400: #9A958C;\n --color-gray-500: #7C776F;\n --color-gray-600: #605B55;\n --color-gray-700: #46423D;\n --color-gray-800: #2F2C28;\n --color-gray-900: #1C1A17;\n --color-gray-950: #12100D;\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-sm: 24rem;\n --container-md: 28rem;\n --container-lg: 32rem;\n --container-xl: 36rem;\n --container-2xl: 42rem;\n --container-3xl: 48rem;\n --container-4xl: 56rem;\n --container-7xl: 80rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-xl: 1.25rem;\n --text-xl--line-height: calc(1.75 / 1.25);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --text-3xl: 1.875rem;\n --text-3xl--line-height: calc(2.25 / 1.875);\n --text-4xl: 2.25rem;\n --text-4xl--line-height: calc(2.5 / 2.25);\n --text-5xl: 3rem;\n --text-5xl--line-height: 1;\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --text-7xl: 4.5rem;\n --font-weight-light: 300;\n --font-weight-normal: 400;\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --font-weight-extrabold: 800;\n --tracking-wider: 0.05em;\n --leading-snug: 1.375;\n --leading-relaxed: 1.625;\n --ease-in: cubic-bezier(0.4, 0, 1, 1);\n --ease-out: cubic-bezier(0, 0, 0.2, 1);\n --animate-spin: spin 1s linear infinite;\n --blur-sm: 8px;\n --blur-md: 12px;\n --blur-3xl: 64px;\n --aspect-video: 16 / 9;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans);\n --default-mono-font-family: var(--font-mono);\n --font-heading: var(--font-heading);\n --color-iris-500: #A195F0;\n --color-gray-25: #FBFAF9;\n --color-system-warning: #eab308;\n --color-system-error: #ef4444;\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n ::-webkit-calendar-picker-indicator {\n line-height: 1;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .collapse {\n visibility: collapse;\n }\n .invisible {\n visibility: hidden;\n }\n .visible {\n visibility: visible;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .static {\n position: static;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .inset-x-0 {\n inset-inline: calc(var(--spacing) * 0);\n }\n .-top-4 {\n top: calc(var(--spacing) * -4);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-3 {\n top: calc(var(--spacing) * 3);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-7 {\n top: calc(var(--spacing) * 7);\n }\n .top-16 {\n top: calc(var(--spacing) * 16);\n }\n .top-\\[10\\%\\] {\n top: 10%;\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .right-3 {\n right: calc(var(--spacing) * 3);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .-bottom-4 {\n bottom: calc(var(--spacing) * -4);\n }\n .-bottom-12 {\n bottom: calc(var(--spacing) * -12);\n }\n .bottom-0 {\n bottom: calc(var(--spacing) * 0);\n }\n .-left-12 {\n left: calc(var(--spacing) * -12);\n }\n .left-0 {\n left: calc(var(--spacing) * 0);\n }\n .left-1\\/2 {\n left: calc(1/2 * 100%);\n }\n .left-10 {\n left: calc(var(--spacing) * 10);\n }\n .isolate {\n isolation: isolate;\n }\n .z-0 {\n z-index: 0;\n }\n .z-10 {\n z-index: 10;\n }\n .z-20 {\n z-index: 20;\n }\n .z-30 {\n z-index: 30;\n }\n .z-40 {\n z-index: 40;\n }\n .z-50 {\n z-index: 50;\n }\n .z-101 {\n z-index: 101;\n }\n .z-102 {\n z-index: 102;\n }\n .z-\\[1\\] {\n z-index: 1;\n }\n .z-\\[100\\] {\n z-index: 100;\n }\n .z-\\[101\\] {\n z-index: 101;\n }\n .container {\n width: 100%;\n @media (width >= 40rem) {\n max-width: 40rem;\n }\n @media (width >= 48rem) {\n max-width: 48rem;\n }\n @media (width >= 64rem) {\n max-width: 64rem;\n }\n @media (width >= 80rem) {\n max-width: 80rem;\n }\n @media (width >= 96rem) {\n max-width: 96rem;\n }\n }\n .\\!m-0 {\n margin: calc(var(--spacing) * 0) !important;\n }\n .-mx-6 {\n margin-inline: calc(var(--spacing) * -6);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-4 {\n margin-block: calc(var(--spacing) * 4);\n }\n .my-6 {\n margin-block: calc(var(--spacing) * 6);\n }\n .my-8 {\n margin-block: calc(var(--spacing) * 8);\n }\n .my-10 {\n margin-block: calc(var(--spacing) * 10);\n }\n .-mt-6 {\n margin-top: calc(var(--spacing) * -6);\n }\n .-mt-\\[1px\\] {\n margin-top: calc(1px * -1);\n }\n .-mt-\\[72px\\] {\n margin-top: calc(72px * -1);\n }\n .mt-0\\.5 {\n margin-top: calc(var(--spacing) * 0.5);\n }\n .mt-1 {\n margin-top: calc(var(--spacing) * 1);\n }\n .mt-1\\.5 {\n margin-top: calc(var(--spacing) * 1.5);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-3 {\n margin-top: calc(var(--spacing) * 3);\n }\n .mt-4 {\n margin-top: calc(var(--spacing) * 4);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-6 {\n margin-top: calc(var(--spacing) * 6);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .mt-10 {\n margin-top: calc(var(--spacing) * 10);\n }\n .mt-12 {\n margin-top: calc(var(--spacing) * 12);\n }\n .mt-14 {\n margin-top: calc(var(--spacing) * 14);\n }\n .mt-24 {\n margin-top: calc(var(--spacing) * 24);\n }\n .mt-30 {\n margin-top: calc(var(--spacing) * 30);\n }\n .mt-\\[5px\\] {\n margin-top: 5px;\n }\n .mt-auto {\n margin-top: auto;\n }\n .-mr-\\[1px\\] {\n margin-right: calc(1px * -1);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-1\\.5 {\n margin-bottom: calc(var(--spacing) * 1.5);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .mb-3 {\n margin-bottom: calc(var(--spacing) * 3);\n }\n .mb-4 {\n margin-bottom: calc(var(--spacing) * 4);\n }\n .mb-5 {\n margin-bottom: calc(var(--spacing) * 5);\n }\n .mb-6 {\n margin-bottom: calc(var(--spacing) * 6);\n }\n .mb-8 {\n margin-bottom: calc(var(--spacing) * 8);\n }\n .mb-14 {\n margin-bottom: calc(var(--spacing) * 14);\n }\n .mb-16 {\n margin-bottom: calc(var(--spacing) * 16);\n }\n .ml-8 {\n margin-left: calc(var(--spacing) * 8);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .line-clamp-2 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .line-clamp-3 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n }\n .line-clamp-4 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n }\n .block {\n display: block;\n }\n .contents {\n display: contents;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline {\n display: inline;\n }\n .inline-flex {\n display: inline-flex;\n }\n .table {\n display: table;\n }\n .aspect-3\\/1 {\n aspect-ratio: 3/1;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .aspect-video {\n aspect-ratio: var(--aspect-video);\n }\n .size-2\\.5 {\n width: calc(var(--spacing) * 2.5);\n height: calc(var(--spacing) * 2.5);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .size-6 {\n width: calc(var(--spacing) * 6);\n height: calc(var(--spacing) * 6);\n }\n .size-8 {\n width: calc(var(--spacing) * 8);\n height: calc(var(--spacing) * 8);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-10 {\n width: calc(var(--spacing) * 10);\n height: calc(var(--spacing) * 10);\n }\n .size-full {\n width: 100%;\n height: 100%;\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-14 {\n height: calc(var(--spacing) * 14);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-18 {\n height: calc(var(--spacing) * 18);\n }\n .h-20 {\n height: calc(var(--spacing) * 20);\n }\n .h-32 {\n height: calc(var(--spacing) * 32);\n }\n .h-48 {\n height: calc(var(--spacing) * 48);\n }\n .h-52 {\n height: calc(var(--spacing) * 52);\n }\n .h-64 {\n height: calc(var(--spacing) * 64);\n }\n .h-\\[3\\.7rem\\] {\n height: 3.7rem;\n }\n .h-\\[21px\\] {\n height: 21px;\n }\n .h-\\[45\\%\\] {\n height: 45%;\n }\n .h-\\[48px\\] {\n height: 48px;\n }\n .h-\\[90dvh\\] {\n height: 90dvh;\n }\n .h-\\[160px\\] {\n height: 160px;\n }\n .h-\\[326px\\] {\n height: 326px;\n }\n .h-\\[360px\\] {\n height: 360px;\n }\n .h-full {\n height: 100%;\n }\n .max-h-\\[60vh\\] {\n max-height: 60vh;\n }\n .min-h-16 {\n min-height: calc(var(--spacing) * 16);\n }\n .min-h-\\[120px\\] {\n min-height: 120px;\n }\n .min-h-\\[130px\\] {\n min-height: 130px;\n }\n .min-h-\\[280px\\] {\n min-height: 280px;\n }\n .min-h-\\[386px\\] {\n min-height: 386px;\n }\n .min-h-\\[520px\\] {\n min-height: 520px;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-3 {\n width: calc(var(--spacing) * 3);\n }\n .w-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-14 {\n width: calc(var(--spacing) * 14);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-48 {\n width: calc(var(--spacing) * 48);\n }\n .w-96 {\n width: calc(var(--spacing) * 96);\n }\n .w-\\[180px\\] {\n width: 180px;\n }\n .w-\\[calc\\(100\\%-2rem\\)\\] {\n width: calc(100% - 2rem);\n }\n .w-auto {\n width: auto;\n }\n .w-fit {\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .w-px {\n width: 1px;\n }\n .max-w-2xl {\n max-width: var(--container-2xl);\n }\n .max-w-3xl {\n max-width: var(--container-3xl);\n }\n .max-w-4xl {\n max-width: var(--container-4xl);\n }\n .max-w-170 {\n max-width: calc(var(--spacing) * 170);\n }\n .max-w-240 {\n max-width: calc(var(--spacing) * 240);\n }\n .max-w-\\[85\\%\\] {\n max-width: 85%;\n }\n .max-w-\\[95\\%\\] {\n max-width: 95%;\n }\n .max-w-\\[267px\\] {\n max-width: 267px;\n }\n .max-w-\\[295px\\] {\n max-width: 295px;\n }\n .max-w-\\[348px\\] {\n max-width: 348px;\n }\n .max-w-\\[400px\\] {\n max-width: 400px;\n }\n .max-w-\\[580px\\] {\n max-width: 580px;\n }\n .max-w-\\[640px\\] {\n max-width: 640px;\n }\n .max-w-\\[700px\\] {\n max-width: 700px;\n }\n .max-w-\\[730px\\] {\n max-width: 730px;\n }\n .max-w-\\[732px\\] {\n max-width: 732px;\n }\n .max-w-\\[796px\\] {\n max-width: 796px;\n }\n .max-w-\\[850px\\] {\n max-width: 850px;\n }\n .max-w-\\[908px\\] {\n max-width: 908px;\n }\n .max-w-\\[980px\\] {\n max-width: 980px;\n }\n .max-w-\\[1166px\\] {\n max-width: 1166px;\n }\n .max-w-\\[1216px\\] {\n max-width: 1216px;\n }\n .max-w-\\[1229px\\] {\n max-width: 1229px;\n }\n .max-w-full {\n max-width: 100%;\n }\n .max-w-lg {\n max-width: var(--container-lg);\n }\n .max-w-md {\n max-width: var(--container-md);\n }\n .max-w-none {\n max-width: none;\n }\n .max-w-xl {\n max-width: var(--container-xl);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[180px\\] {\n min-width: 180px;\n }\n .min-w-full {\n min-width: 100%;\n }\n .flex-1 {\n flex: 1;\n }\n .flex-shrink-0 {\n flex-shrink: 0;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .grow {\n flex-grow: 1;\n }\n .origin-\\(--radix-tooltip-content-transform-origin\\) {\n transform-origin: var(--radix-tooltip-content-transform-origin);\n }\n .origin-top-left {\n transform-origin: 0 0;\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[calc\\(-50\\%_-_2px\\)\\] {\n --tw-translate-y: calc(-50% - 2px);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-45 {\n rotate: 45deg;\n }\n .transform {\n transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);\n }\n .animate-\\[dropdown-in_150ms_ease-out\\] {\n animation: dropdown-in 150ms ease-out;\n }\n .animate-\\[dropdown-out_100ms_ease-in_forwards\\] {\n animation: dropdown-out 100ms ease-in forwards;\n }\n .animate-\\[sidebar-in-bottom_250ms_ease-out\\] {\n animation: sidebar-in-bottom 250ms ease-out;\n }\n .animate-\\[sidebar-out-bottom_200ms_ease-in_forwards\\] {\n animation: sidebar-out-bottom 200ms ease-in forwards;\n }\n .animate-in {\n animation: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .resize-y {\n resize: vertical;\n }\n .list-outside {\n list-style-position: outside;\n }\n .list-decimal {\n list-style-type: decimal;\n }\n .list-disc {\n list-style-type: disc;\n }\n .appearance-none {\n appearance: none;\n }\n .grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n .grid-cols-\\[1fr_1fr_1\\.4fr\\] {\n grid-template-columns: 1fr 1fr 1.4fr;\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .items-end {\n align-items: flex-end;\n }\n .items-start {\n align-items: flex-start;\n }\n .items-stretch {\n align-items: stretch;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .justify-start {\n justify-content: flex-start;\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1 {\n gap: calc(var(--spacing) * 1);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-2\\.5 {\n gap: calc(var(--spacing) * 2.5);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-8 {\n gap: calc(var(--spacing) * 8);\n }\n .gap-10 {\n gap: calc(var(--spacing) * 10);\n }\n .gap-12 {\n gap: calc(var(--spacing) * 12);\n }\n .gap-14 {\n gap: calc(var(--spacing) * 14);\n }\n .gap-\\[15px\\] {\n gap: 15px;\n }\n .space-y-0 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-3 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-8 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-12 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 12) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 12) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .gap-x-2 {\n column-gap: calc(var(--spacing) * 2);\n }\n .self-end {\n align-self: flex-end;\n }\n .self-stretch {\n align-self: stretch;\n }\n .truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-visible {\n overflow: visible;\n }\n .overflow-x-auto {\n overflow-x: auto;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded {\n border-radius: 0.25rem;\n }\n .rounded-2xl {\n border-radius: calc(var(--radius) + 8px);\n }\n .rounded-\\[2px\\] {\n border-radius: 2px;\n }\n .rounded-\\[12px\\] {\n border-radius: 12px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-xl {\n border-radius: calc(var(--radius) + 4px);\n }\n .rounded-t-2xl {\n border-top-left-radius: calc(var(--radius) + 8px);\n border-top-right-radius: calc(var(--radius) + 8px);\n }\n .rounded-t-xl {\n border-top-left-radius: calc(var(--radius) + 4px);\n border-top-right-radius: calc(var(--radius) + 4px);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-2 {\n border-style: var(--tw-border-style);\n border-width: 2px;\n }\n .border-\\[0\\.5px\\] {\n border-style: var(--tw-border-style);\n border-width: 0.5px;\n }\n .border-y {\n border-block-style: var(--tw-border-style);\n border-block-width: 1px;\n }\n .border-t {\n border-top-style: var(--tw-border-style);\n border-top-width: 1px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-b-2 {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 2px;\n }\n .border-l-4 {\n border-left-style: var(--tw-border-style);\n border-left-width: 4px;\n }\n .border-dashed {\n --tw-border-style: dashed;\n border-style: dashed;\n }\n .border-none {\n --tw-border-style: none;\n border-style: none;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-gray-25 {\n border-color: var(--color-gray-25);\n }\n .border-gray-300 {\n border-color: var(--color-gray-300);\n }\n .border-gray-300\\/40 {\n border-color: color-mix(in srgb, #B8B4AC 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-300) 40%, transparent);\n }\n }\n .border-gray-500 {\n border-color: var(--color-gray-500);\n }\n .border-gray-500\\/60 {\n border-color: color-mix(in srgb, #7C776F 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-gray-500) 60%, transparent);\n }\n }\n .border-gray-600 {\n border-color: var(--color-gray-600);\n }\n .border-gray-700 {\n border-color: var(--color-gray-700);\n }\n .border-gray-800 {\n border-color: var(--color-gray-800);\n }\n .border-gray-950 {\n border-color: var(--color-gray-950);\n }\n .border-red-500\\/30 {\n border-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-red-500) 30%, transparent);\n }\n }\n .border-system-error {\n border-color: var(--color-system-error);\n }\n .border-system-error\\/30 {\n border-color: color-mix(in srgb, #ef4444 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-system-error) 30%, transparent);\n }\n }\n .border-system-warning\\/30 {\n border-color: color-mix(in srgb, #eab308 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-system-warning) 30%, transparent);\n }\n }\n .border-teal-500 {\n border-color: var(--color-teal-500);\n }\n .border-teal-700 {\n border-color: var(--color-teal-700);\n }\n .border-yellow-600 {\n border-color: var(--color-yellow-600);\n }\n .border-yellow-700\\/50 {\n border-color: color-mix(in srgb, oklch(55.4% 0.135 66.442) 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n border-color: color-mix(in oklab, var(--color-yellow-700) 50%, transparent);\n }\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/60 {\n background-color: color-mix(in srgb, #000 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 60%, transparent);\n }\n }\n .bg-black\\/85 {\n background-color: color-mix(in srgb, #000 85%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 85%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-foreground {\n background-color: var(--foreground);\n }\n .bg-gray-25 {\n background-color: var(--color-gray-25);\n }\n .bg-gray-25\\/10 {\n background-color: color-mix(in srgb, #FBFAF9 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent);\n }\n }\n .bg-gray-300 {\n background-color: var(--color-gray-300);\n }\n .bg-gray-600 {\n background-color: var(--color-gray-600);\n }\n .bg-gray-700 {\n background-color: var(--color-gray-700);\n }\n .bg-gray-800 {\n background-color: var(--color-gray-800);\n }\n .bg-gray-800\\/40 {\n background-color: color-mix(in srgb, #2F2C28 40%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent);\n }\n }\n .bg-gray-900 {\n background-color: var(--color-gray-900);\n }\n .bg-gray-900\\/60 {\n background-color: color-mix(in srgb, #1C1A17 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent);\n }\n }\n .bg-gray-900\\/70 {\n background-color: color-mix(in srgb, #1C1A17 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 70%, transparent);\n }\n }\n .bg-gray-900\\/90 {\n background-color: color-mix(in srgb, #1C1A17 90%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 90%, transparent);\n }\n }\n .bg-gray-900\\/95 {\n background-color: color-mix(in srgb, #1C1A17 95%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 95%, transparent);\n }\n }\n .bg-gray-950 {\n background-color: var(--color-gray-950);\n }\n .bg-input {\n background-color: var(--input);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-red-500\\/10 {\n background-color: color-mix(in srgb, oklch(63.7% 0.237 25.331) 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-red-500) 10%, transparent);\n }\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-system-error\\/20 {\n background-color: color-mix(in srgb, #ef4444 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-system-error) 20%, transparent);\n }\n }\n .bg-system-warning\\/20 {\n background-color: color-mix(in srgb, #eab308 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-system-warning) 20%, transparent);\n }\n }\n .bg-teal-500 {\n background-color: var(--color-teal-500);\n }\n .bg-teal-500\\/20 {\n background-color: color-mix(in srgb, #02E2AC 20%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-teal-500) 20%, transparent);\n }\n }\n .bg-teal-600 {\n background-color: var(--color-teal-600);\n }\n .bg-teal-700 {\n background-color: var(--color-teal-700);\n }\n .bg-teal-950 {\n background-color: var(--color-teal-950);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .bg-yellow-900\\/30 {\n background-color: color-mix(in srgb, oklch(42.1% 0.095 57.708) 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-yellow-900) 30%, transparent);\n }\n }\n .bg-yellow-950 {\n background-color: var(--color-yellow-950);\n }\n .bg-linear-to-b {\n --tw-gradient-position: to bottom;\n @supports (background-image: linear-gradient(in lab, red, red)) {\n --tw-gradient-position: to bottom in oklab;\n }\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-linear-to-t {\n --tw-gradient-position: to top;\n @supports (background-image: linear-gradient(in lab, red, red)) {\n --tw-gradient-position: to top in oklab;\n }\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-b {\n --tw-gradient-position: to bottom in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-r {\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-gradient-to-t {\n --tw-gradient-position: to top in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n }\n .bg-\\[image\\:linear-gradient\\(to_top\\,rgba\\(161\\,149\\,240\\,0\\.7\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(161,149,240,0.7),transparent);\n }\n .bg-\\[linear-gradient\\(to_top\\,rgba\\(2\\,226\\,172\\,0\\.3\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(2,226,172,0.3),transparent);\n }\n .bg-\\[linear-gradient\\(to_top\\,rgba\\(2\\,226\\,172\\,0\\.5\\)\\,transparent\\)\\] {\n background-image: linear-gradient(to top,rgba(2,226,172,0.5),transparent);\n }\n .bg-\\[radial-gradient\\(ellipse_at_center\\,_var\\(--tw-gradient-stops\\)\\)\\] {\n background-image: radial-gradient(ellipse at center, var(--tw-gradient-stops));\n }\n .from-gray-900 {\n --tw-gradient-from: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-gray-950 {\n --tw-gradient-from: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-teal-500\\/25 {\n --tw-gradient-from: color-mix(in srgb, #02E2AC 25%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-from: color-mix(in oklab, var(--color-teal-500) 25%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .from-transparent {\n --tw-gradient-from: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .via-gray-950 {\n --tw-gradient-via: var(--color-gray-950);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .via-gray-950\\/80 {\n --tw-gradient-via: color-mix(in srgb, #12100D 80%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-via: color-mix(in oklab, var(--color-gray-950) 80%, transparent);\n }\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n }\n .to-black {\n --tw-gradient-to: var(--color-black);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-900 {\n --tw-gradient-to: var(--color-gray-900);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-gray-950 {\n --tw-gradient-to: var(--color-gray-950);\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-teal-500\\/30 {\n --tw-gradient-to: color-mix(in srgb, #02E2AC 30%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-gradient-to: color-mix(in oklab, var(--color-teal-500) 30%, transparent);\n }\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .to-transparent {\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .bg-\\[length\\:100\\%_0\\%\\] {\n background-size: 100% 0%;\n }\n .bg-size-\\[100\\%_0\\%\\] {\n background-size: 100% 0%;\n }\n .bg-size-\\[100\\%_6\\%\\] {\n background-size: 100% 6%;\n }\n .bg-bottom {\n background-position: bottom;\n }\n .bg-no-repeat {\n background-repeat: no-repeat;\n }\n .fill-foreground {\n fill: var(--foreground);\n }\n .object-cover {\n object-fit: cover;\n }\n .object-center {\n object-position: center;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-1\\.5 {\n padding: calc(var(--spacing) * 1.5);\n }\n .p-2 {\n padding: calc(var(--spacing) * 2);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .p-8 {\n padding: calc(var(--spacing) * 8);\n }\n .\\!px-4 {\n padding-inline: calc(var(--spacing) * 4) !important;\n }\n .px-1 {\n padding-inline: calc(var(--spacing) * 1);\n }\n .px-1\\.5 {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-2\\.5 {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-3\\.5 {\n padding-inline: calc(var(--spacing) * 3.5);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-5 {\n padding-inline: calc(var(--spacing) * 5);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .px-8 {\n padding-inline: calc(var(--spacing) * 8);\n }\n .px-10 {\n padding-inline: calc(var(--spacing) * 10);\n }\n .px-\\[27px\\] {\n padding-inline: 27px;\n }\n .\\!py-1 {\n padding-block: calc(var(--spacing) * 1) !important;\n }\n .\\!py-4 {\n padding-block: calc(var(--spacing) * 4) !important;\n }\n .py-0\\.5 {\n padding-block: calc(var(--spacing) * 0.5);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-2\\.5 {\n padding-block: calc(var(--spacing) * 2.5);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-5 {\n padding-block: calc(var(--spacing) * 5);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .py-8 {\n padding-block: calc(var(--spacing) * 8);\n }\n .py-9 {\n padding-block: calc(var(--spacing) * 9);\n }\n .py-10 {\n padding-block: calc(var(--spacing) * 10);\n }\n .py-12 {\n padding-block: calc(var(--spacing) * 12);\n }\n .py-14 {\n padding-block: calc(var(--spacing) * 14);\n }\n .py-16 {\n padding-block: calc(var(--spacing) * 16);\n }\n .py-20 {\n padding-block: calc(var(--spacing) * 20);\n }\n .py-\\[10px\\] {\n padding-block: 10px;\n }\n .py-\\[34px\\] {\n padding-block: 34px;\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pt-5 {\n padding-top: calc(var(--spacing) * 5);\n }\n .pt-10 {\n padding-top: calc(var(--spacing) * 10);\n }\n .pt-16 {\n padding-top: calc(var(--spacing) * 16);\n }\n .pt-\\[17px\\] {\n padding-top: 17px;\n }\n .pt-\\[72px\\] {\n padding-top: 72px;\n }\n .pr-4 {\n padding-right: calc(var(--spacing) * 4);\n }\n .pr-12 {\n padding-right: calc(var(--spacing) * 12);\n }\n .pr-16 {\n padding-right: calc(var(--spacing) * 16);\n }\n .pr-20 {\n padding-right: calc(var(--spacing) * 20);\n }\n .pb-0 {\n padding-bottom: calc(var(--spacing) * 0);\n }\n .pb-4 {\n padding-bottom: calc(var(--spacing) * 4);\n }\n .pb-8 {\n padding-bottom: calc(var(--spacing) * 8);\n }\n .pb-20 {\n padding-bottom: calc(var(--spacing) * 20);\n }\n .pb-28 {\n padding-bottom: calc(var(--spacing) * 28);\n }\n .pb-\\[max\\(12px\\,env\\(safe-area-inset-bottom\\)\\)\\] {\n padding-bottom: max(12px, env(safe-area-inset-bottom));\n }\n .pl-3 {\n padding-left: calc(var(--spacing) * 3);\n }\n .pl-4 {\n padding-left: calc(var(--spacing) * 4);\n }\n .text-center {\n text-align: center;\n }\n .text-left {\n text-align: left;\n }\n .text-right {\n text-align: right;\n }\n .font-heading {\n font-family: var(--font-heading);\n }\n .font-mono {\n font-family: var(--font-mono);\n }\n .font-serif {\n font-family: var(--font-serif);\n }\n .text-2xl {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n .text-3xl {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n .text-4xl {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xl {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .text-\\[11px\\] {\n font-size: 11px;\n }\n .text-\\[20px\\] {\n font-size: 20px;\n }\n .text-\\[26px\\] {\n font-size: 26px;\n }\n .text-\\[30px\\] {\n font-size: 30px;\n }\n .text-\\[32px\\] {\n font-size: 32px;\n }\n .text-\\[36px\\] {\n font-size: 36px;\n }\n .text-\\[52px\\] {\n font-size: 52px;\n }\n .text-\\[64px\\] {\n font-size: 64px;\n }\n .leading-6 {\n --tw-leading: calc(var(--spacing) * 6);\n line-height: calc(var(--spacing) * 6);\n }\n .leading-7 {\n --tw-leading: calc(var(--spacing) * 7);\n line-height: calc(var(--spacing) * 7);\n }\n .leading-8 {\n --tw-leading: calc(var(--spacing) * 8);\n line-height: calc(var(--spacing) * 8);\n }\n .leading-9 {\n --tw-leading: calc(var(--spacing) * 9);\n line-height: calc(var(--spacing) * 9);\n }\n .leading-10 {\n --tw-leading: calc(var(--spacing) * 10);\n line-height: calc(var(--spacing) * 10);\n }\n .leading-\\[1\\.3\\] {\n --tw-leading: 1.3;\n line-height: 1.3;\n }\n .leading-\\[1\\.12\\] {\n --tw-leading: 1.12;\n line-height: 1.12;\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .leading-relaxed {\n --tw-leading: var(--leading-relaxed);\n line-height: var(--leading-relaxed);\n }\n .leading-snug {\n --tw-leading: var(--leading-snug);\n line-height: var(--leading-snug);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-extrabold {\n --tw-font-weight: var(--font-weight-extrabold);\n font-weight: var(--font-weight-extrabold);\n }\n .font-light {\n --tw-font-weight: var(--font-weight-light);\n font-weight: var(--font-weight-light);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-normal {\n --tw-font-weight: var(--font-weight-normal);\n font-weight: var(--font-weight-normal);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-\\[0\\.012em\\] {\n --tw-tracking: 0.012em;\n letter-spacing: 0.012em;\n }\n .tracking-\\[0\\.18em\\] {\n --tw-tracking: 0.18em;\n letter-spacing: 0.18em;\n }\n .tracking-\\[0\\.64px\\] {\n --tw-tracking: 0.64px;\n letter-spacing: 0.64px;\n }\n .tracking-wider {\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n .text-balance {\n text-wrap: balance;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .whitespace-pre-wrap {\n white-space: pre-wrap;\n }\n .text-\\[\\#A195F0\\] {\n color: #A195F0;\n }\n .text-\\[\\#d6d3cd\\] {\n color: #d6d3cd;\n }\n .text-background {\n color: var(--background);\n }\n .text-gray-25 {\n color: var(--color-gray-25);\n }\n .text-gray-25\\/70 {\n color: color-mix(in srgb, #FBFAF9 70%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, var(--color-gray-25) 70%, transparent);\n }\n }\n .text-gray-50 {\n color: var(--color-gray-50);\n }\n .text-gray-100 {\n color: var(--color-gray-100);\n }\n .text-gray-200 {\n color: var(--color-gray-200);\n }\n .text-gray-300 {\n color: var(--color-gray-300);\n }\n .text-gray-400 {\n color: var(--color-gray-400);\n }\n .text-gray-500 {\n color: var(--color-gray-500);\n }\n .text-gray-600 {\n color: var(--color-gray-600);\n }\n .text-gray-900 {\n color: var(--color-gray-900);\n }\n .text-iris-500 {\n color: var(--color-iris-500);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-400 {\n color: var(--color-red-400);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-system-error {\n color: var(--color-system-error);\n }\n .text-system-warning {\n color: var(--color-system-warning);\n }\n .text-teal-100 {\n color: var(--color-teal-100);\n }\n .text-teal-500 {\n color: var(--color-teal-500);\n }\n .text-teal-700 {\n color: var(--color-teal-700);\n }\n .text-teal-900 {\n color: var(--color-teal-900);\n }\n .text-white {\n color: var(--color-white);\n }\n .text-yellow-300 {\n color: var(--color-yellow-300);\n }\n .text-yellow-500 {\n color: var(--color-yellow-500);\n }\n .capitalize {\n text-transform: capitalize;\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .underline {\n text-decoration-line: underline;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-80 {\n opacity: 80%;\n }\n .shadow-2xl {\n --tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / 0.25));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-none {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .blur-3xl {\n --tw-blur: blur(var(--blur-3xl));\n 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,);\n }\n .grayscale {\n --tw-grayscale: grayscale(100%);\n 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,);\n }\n .filter {\n 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,);\n }\n .backdrop-blur-md {\n --tw-backdrop-blur: blur(var(--blur-md));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .backdrop-blur-sm {\n --tw-backdrop-blur: blur(var(--blur-sm));\n -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-all {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-colors {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .duration-300 {\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .duration-500 {\n --tw-duration: 500ms;\n transition-duration: 500ms;\n }\n .ease-in {\n --tw-ease: var(--ease-in);\n transition-timing-function: var(--ease-in);\n }\n .ease-out {\n --tw-ease: var(--ease-out);\n transition-timing-function: var(--ease-out);\n }\n .fade-in-0 {\n --tw-enter-opacity: calc(0/100);\n --tw-enter-opacity: 0;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .zoom-in-95 {\n --tw-enter-scale: calc(95*1%);\n --tw-enter-scale: .95;\n }\n .\\[border-image\\:repeating-linear-gradient\\(to_right\\,theme\\(colors\\.gray\\.600\\)_0\\,theme\\(colors\\.gray\\.600\\)_8px\\,transparent_8px\\,transparent_16px\\)_1\\] {\n border-image: repeating-linear-gradient(to right,#605B55 0,#605B55 8px,transparent 8px,transparent 16px) 1;\n }\n .running {\n animation-play-state: running;\n }\n .group-hover\\:scale-105 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n --tw-scale-x: 105%;\n --tw-scale-y: 105%;\n --tw-scale-z: 105%;\n scale: var(--tw-scale-x) var(--tw-scale-y);\n }\n }\n }\n .group-hover\\:border-teal-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n }\n .group-hover\\:text-gray-25 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .group-hover\\:text-teal-500 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n color: var(--color-teal-500);\n }\n }\n }\n .group-hover\\:opacity-0 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 0%;\n }\n }\n }\n .group-hover\\:opacity-100 {\n &:is(:where(.group):hover *) {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .group-data-\\[state\\=open\\]\\:rotate-180 {\n &:is(:where(.group)[data-state=\"open\"] *) {\n rotate: 180deg;\n }\n }\n .group-\\[\\.is-assistant\\]\\:text-foreground {\n &:is(:where(.group):is(.is-assistant) *) {\n color: var(--foreground);\n }\n }\n .group-\\[\\.is-user\\]\\:ml-auto {\n &:is(:where(.group):is(.is-user) *) {\n margin-left: auto;\n }\n }\n .group-\\[\\.is-user\\]\\:rounded-lg {\n &:is(:where(.group):is(.is-user) *) {\n border-radius: var(--radius);\n }\n }\n .group-\\[\\.is-user\\]\\:bg-secondary {\n &:is(:where(.group):is(.is-user) *) {\n background-color: var(--secondary);\n }\n }\n .group-\\[\\.is-user\\]\\:px-4 {\n &:is(:where(.group):is(.is-user) *) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .group-\\[\\.is-user\\]\\:py-3 {\n &:is(:where(.group):is(.is-user) *) {\n padding-block: calc(var(--spacing) * 3);\n }\n }\n .group-\\[\\.is-user\\]\\:text-foreground {\n &:is(:where(.group):is(.is-user) *) {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-gray-500 {\n &::placeholder {\n color: var(--color-gray-500);\n }\n }\n .first\\:mt-0 {\n &:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .last\\:border-b-0 {\n &:last-child {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 0px;\n }\n }\n .hover\\:border-iris-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-iris-500);\n }\n }\n }\n .hover\\:border-teal-500 {\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n }\n .hover\\:border-transparent {\n &:hover {\n @media (hover: hover) {\n border-color: transparent;\n }\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-gray-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-500);\n }\n }\n }\n .hover\\:bg-gray-800 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-800);\n }\n }\n }\n .hover\\:bg-gray-950\\/60 {\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #12100D 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-950) 60%, transparent);\n }\n }\n }\n }\n .hover\\:bg-iris-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-iris-500);\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:bg-teal-500 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-teal-500);\n }\n }\n }\n .hover\\:bg-\\[linear-gradient\\(180deg\\,\\#1c1a17_94\\.231\\%\\,\\#02e2ac_100\\%\\)\\] {\n &:hover {\n @media (hover: hover) {\n background-image: linear-gradient(180deg,#1c1a17 94.231%,#02e2ac 100%);\n }\n }\n }\n .hover\\:bg-\\[length\\:100\\%_30\\%\\] {\n &:hover {\n @media (hover: hover) {\n background-size: 100% 30%;\n }\n }\n }\n .hover\\:bg-size-\\[100\\%_50\\%\\] {\n &:hover {\n @media (hover: hover) {\n background-size: 100% 50%;\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-gray-25 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .hover\\:text-gray-300 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-300);\n }\n }\n }\n .hover\\:text-gray-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-500);\n }\n }\n }\n .hover\\:text-iris-500 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-iris-500);\n }\n }\n }\n .hover\\:text-teal-100 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-teal-100);\n }\n }\n }\n .hover\\:text-teal-400 {\n &:hover {\n @media (hover: hover) {\n color: var(--color-teal-400);\n }\n }\n }\n .hover\\:text-white {\n &:hover {\n @media (hover: hover) {\n color: var(--color-white);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_-3px_rgba\\(2\\,226\\,172\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px -3px var(--tw-shadow-color, rgba(2,226,172,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_0_rgba\\(2\\,226\\,172\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px 0 var(--tw-shadow-color, rgba(2,226,172,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_0_12px_0px_rgba\\(2\\,226\\,172\\,0\\.4\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 0 12px 0px var(--tw-shadow-color, rgba(2,226,172,0.4));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .hover\\:shadow-\\[0_2px_10px_rgba\\(161\\,149\\,240\\,0\\.6\\)\\] {\n &:hover {\n @media (hover: hover) {\n --tw-shadow: 0 2px 10px var(--tw-shadow-color, rgba(161,149,240,0.6));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n }\n .focus\\:border-transparent {\n &:focus {\n border-color: transparent;\n }\n }\n .focus\\:shadow-none {\n &:focus {\n --tw-shadow: 0 0 #0000;\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-gray-25 {\n &:focus {\n --tw-ring-color: var(--color-gray-25);\n }\n }\n .focus\\:ring-teal-500 {\n &:focus {\n --tw-ring-color: var(--color-teal-500);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:ring-offset-gray-900 {\n &:focus {\n --tw-ring-offset-color: var(--color-gray-900);\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:bg-gray-800 {\n &:disabled {\n background-color: var(--color-gray-800);\n }\n }\n .disabled\\:opacity-30 {\n &:disabled {\n opacity: 30%;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-\\[\\>\\[data-slot\\=button-group\\]\\]\\:gap-2 {\n &:has(>[data-slot=button-group]) {\n gap: calc(var(--spacing) * 2);\n }\n }\n .has-\\[\\>svg\\]\\:px-1\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 1.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:h-px {\n &[data-orientation=\"horizontal\"] {\n height: 1px;\n }\n }\n .data-\\[orientation\\=horizontal\\]\\:w-full {\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-auto {\n &[data-orientation=\"vertical\"] {\n height: auto;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:h-full {\n &[data-orientation=\"vertical\"] {\n height: 100%;\n }\n }\n .data-\\[orientation\\=vertical\\]\\:w-px {\n &[data-orientation=\"vertical\"] {\n width: 1px;\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: calc(2*var(--spacing));\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: calc(2*var(--spacing)*-1);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: calc(2*var(--spacing));\n }\n }\n .data-\\[state\\=closed\\]\\:animate-\\[dropdown-out_100ms_ease-in\\] {\n &[data-state=\"closed\"] {\n animation: dropdown-out 100ms ease-in;\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: calc(0/100);\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: calc(95*1%);\n --tw-exit-scale: .95;\n }\n }\n .sm\\:top-0 {\n @media (width >= 40rem) {\n top: calc(var(--spacing) * 0);\n }\n }\n .sm\\:top-\\[15\\%\\] {\n @media (width >= 40rem) {\n top: 15%;\n }\n }\n .sm\\:right-0 {\n @media (width >= 40rem) {\n right: calc(var(--spacing) * 0);\n }\n }\n .sm\\:left-auto {\n @media (width >= 40rem) {\n left: auto;\n }\n }\n .sm\\:block {\n @media (width >= 40rem) {\n display: block;\n }\n }\n .sm\\:h-full {\n @media (width >= 40rem) {\n height: 100%;\n }\n }\n .sm\\:w-full {\n @media (width >= 40rem) {\n width: 100%;\n }\n }\n .sm\\:max-w-\\[60\\%\\] {\n @media (width >= 40rem) {\n max-width: 60%;\n }\n }\n .sm\\:max-w-sm {\n @media (width >= 40rem) {\n max-width: var(--container-sm);\n }\n }\n .sm\\:animate-\\[sidebar-in-right_250ms_ease-out\\] {\n @media (width >= 40rem) {\n animation: sidebar-in-right 250ms ease-out;\n }\n }\n .sm\\:animate-\\[sidebar-out-right_200ms_ease-in_forwards\\] {\n @media (width >= 40rem) {\n animation: sidebar-out-right 200ms ease-in forwards;\n }\n }\n .sm\\:grid-cols-2 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .sm\\:grid-cols-3 {\n @media (width >= 40rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:items-center {\n @media (width >= 40rem) {\n align-items: center;\n }\n }\n .sm\\:items-end {\n @media (width >= 40rem) {\n align-items: flex-end;\n }\n }\n .sm\\:justify-between {\n @media (width >= 40rem) {\n justify-content: space-between;\n }\n }\n .sm\\:gap-x-4 {\n @media (width >= 40rem) {\n column-gap: calc(var(--spacing) * 4);\n }\n }\n .sm\\:gap-x-10 {\n @media (width >= 40rem) {\n column-gap: calc(var(--spacing) * 10);\n }\n }\n .sm\\:rounded-t-none {\n @media (width >= 40rem) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n .sm\\:border-t-0 {\n @media (width >= 40rem) {\n border-top-style: var(--tw-border-style);\n border-top-width: 0px;\n }\n }\n .sm\\:border-l {\n @media (width >= 40rem) {\n border-left-style: var(--tw-border-style);\n border-left-width: 1px;\n }\n }\n .sm\\:px-5 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 5);\n }\n }\n .sm\\:px-6 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n }\n .sm\\:px-8 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .sm\\:px-12 {\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 12);\n }\n }\n .sm\\:pl-10 {\n @media (width >= 40rem) {\n padding-left: calc(var(--spacing) * 10);\n }\n }\n .sm\\:text-2xl {\n @media (width >= 40rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .sm\\:text-3xl {\n @media (width >= 40rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .sm\\:text-4xl {\n @media (width >= 40rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .sm\\:text-5xl\\/14 {\n @media (width >= 40rem) {\n font-size: var(--text-5xl);\n line-height: calc(var(--spacing) * 14);\n }\n }\n .sm\\:text-base {\n @media (width >= 40rem) {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n }\n .sm\\:text-sm {\n @media (width >= 40rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .sm\\:text-xl {\n @media (width >= 40rem) {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n }\n }\n .sm\\:text-\\[32px\\] {\n @media (width >= 40rem) {\n font-size: 32px;\n }\n }\n .sm\\:text-\\[48px\\] {\n @media (width >= 40rem) {\n font-size: 48px;\n }\n }\n .md\\:mb-4 {\n @media (width >= 48rem) {\n margin-bottom: calc(var(--spacing) * 4);\n }\n }\n .md\\:mb-24 {\n @media (width >= 48rem) {\n margin-bottom: calc(var(--spacing) * 24);\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:grid {\n @media (width >= 48rem) {\n display: grid;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:h-80 {\n @media (width >= 48rem) {\n height: calc(var(--spacing) * 80);\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-3 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-4 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-5 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(5, minmax(0, 1fr));\n }\n }\n .md\\:flex-row {\n @media (width >= 48rem) {\n flex-direction: row;\n }\n }\n .md\\:items-center {\n @media (width >= 48rem) {\n align-items: center;\n }\n }\n .md\\:items-start {\n @media (width >= 48rem) {\n align-items: flex-start;\n }\n }\n .md\\:gap-8 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 8);\n }\n }\n .md\\:gap-14 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 14);\n }\n }\n .md\\:p-10 {\n @media (width >= 48rem) {\n padding: calc(var(--spacing) * 10);\n }\n }\n .md\\:px-12 {\n @media (width >= 48rem) {\n padding-inline: calc(var(--spacing) * 12);\n }\n }\n .md\\:py-12 {\n @media (width >= 48rem) {\n padding-block: calc(var(--spacing) * 12);\n }\n }\n .md\\:pt-24 {\n @media (width >= 48rem) {\n padding-top: calc(var(--spacing) * 24);\n }\n }\n .md\\:pb-28 {\n @media (width >= 48rem) {\n padding-bottom: calc(var(--spacing) * 28);\n }\n }\n .md\\:text-2xl {\n @media (width >= 48rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n }\n .md\\:text-3xl {\n @media (width >= 48rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .md\\:text-4xl {\n @media (width >= 48rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .md\\:text-5xl {\n @media (width >= 48rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n }\n .md\\:text-7xl\\/20 {\n @media (width >= 48rem) {\n font-size: var(--text-7xl);\n line-height: calc(var(--spacing) * 20);\n }\n }\n .md\\:text-\\[32px\\] {\n @media (width >= 48rem) {\n font-size: 32px;\n }\n }\n .md\\:text-\\[64px\\] {\n @media (width >= 48rem) {\n font-size: 64px;\n }\n }\n .md\\:text-\\[80px\\] {\n @media (width >= 48rem) {\n font-size: 80px;\n }\n }\n .lg\\:col-span-2 {\n @media (width >= 64rem) {\n grid-column: span 2 / span 2;\n }\n }\n .lg\\:flex {\n @media (width >= 64rem) {\n display: flex;\n }\n }\n .lg\\:hidden {\n @media (width >= 64rem) {\n display: none;\n }\n }\n .lg\\:grid-cols-2 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-3 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-4 {\n @media (width >= 64rem) {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n }\n }\n .lg\\:grid-cols-\\[2\\.2fr_1fr_1fr_1fr\\] {\n @media (width >= 64rem) {\n grid-template-columns: 2.2fr 1fr 1fr 1fr;\n }\n }\n .lg\\:px-0 {\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 0);\n }\n }\n .lg\\:text-3xl {\n @media (width >= 64rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n }\n .lg\\:text-\\[38px\\] {\n @media (width >= 64rem) {\n font-size: 38px;\n }\n }\n .lg\\:text-\\[52px\\] {\n @media (width >= 64rem) {\n font-size: 52px;\n }\n }\n .lg\\:text-\\[64px\\] {\n @media (width >= 64rem) {\n font-size: 64px;\n }\n }\n .lg\\:text-\\[72px\\] {\n @media (width >= 64rem) {\n font-size: 72px;\n }\n }\n .lg\\:text-\\[88px\\] {\n @media (width >= 64rem) {\n font-size: 88px;\n }\n }\n .xl\\:flex {\n @media (width >= 80rem) {\n display: flex;\n }\n }\n .xl\\:grid-cols-\\[2fr_3fr\\] {\n @media (width >= 80rem) {\n grid-template-columns: 2fr 3fr;\n }\n }\n .xl\\:gap-8 {\n @media (width >= 80rem) {\n gap: calc(var(--spacing) * 8);\n }\n }\n .xl\\:px-0 {\n @media (width >= 80rem) {\n padding-inline: calc(var(--spacing) * 0);\n }\n }\n .xl\\:px-20 {\n @media (width >= 80rem) {\n padding-inline: calc(var(--spacing) * 20);\n }\n }\n .xl\\:pl-14 {\n @media (width >= 80rem) {\n padding-left: calc(var(--spacing) * 14);\n }\n }\n .xl\\:text-4xl {\n @media (width >= 80rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n }\n .dark\\:border-input {\n &:is(.dark *) {\n border-color: var(--input);\n }\n }\n .dark\\:bg-destructive\\/60 {\n &:is(.dark *) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 60%, transparent);\n }\n }\n }\n .dark\\:bg-input\\/30 {\n &:is(.dark *) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 30%, transparent);\n }\n }\n }\n .dark\\:hover\\:bg-accent\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--accent) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:hover\\:bg-input\\/50 {\n &:is(.dark *) {\n &:hover {\n @media (hover: hover) {\n background-color: var(--input);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--input) 50%, transparent);\n }\n }\n }\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n &:is(.dark *) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .\\[\\&_a\\]\\:text-teal-400 {\n & a {\n color: var(--color-teal-400);\n }\n }\n .\\[\\&_a\\]\\:underline {\n & a {\n text-decoration-line: underline;\n }\n }\n .\\[\\&_a\\:hover\\]\\:text-teal-300 {\n & a:hover {\n color: var(--color-teal-300);\n }\n }\n .\\[\\&_code\\]\\:rounded {\n & code {\n border-radius: 0.25rem;\n }\n }\n .\\[\\&_code\\]\\:bg-gray-700 {\n & code {\n background-color: var(--color-gray-700);\n }\n }\n .\\[\\&_code\\]\\:px-1 {\n & code {\n padding-inline: calc(var(--spacing) * 1);\n }\n }\n .\\[\\&_code\\]\\:py-0\\.5 {\n & code {\n padding-block: calc(var(--spacing) * 0.5);\n }\n }\n .\\[\\&_code\\]\\:text-xs {\n & code {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .\\[\\&_li\\]\\:mb-0\\.5 {\n & li {\n margin-bottom: calc(var(--spacing) * 0.5);\n }\n }\n .\\[\\&_ol\\]\\:mb-2 {\n & ol {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_ol\\]\\:list-decimal {\n & ol {\n list-style-type: decimal;\n }\n }\n .\\[\\&_ol\\]\\:pl-4 {\n & ol {\n padding-left: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_p\\]\\:mb-2 {\n & p {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_p\\:last-child\\]\\:mb-0 {\n & p:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&_strong\\]\\:font-semibold {\n & strong {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n }\n .\\[\\&_strong\\]\\:text-gray-25 {\n & strong {\n color: var(--color-gray-25);\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-3 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_ul\\]\\:mb-2 {\n & ul {\n margin-bottom: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_ul\\]\\:list-disc {\n & ul {\n list-style-type: disc;\n }\n }\n .\\[\\&_ul\\]\\:pl-4 {\n & ul {\n padding-left: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&\\>\\*\\]\\:focus-visible\\:relative {\n &>* {\n &:focus-visible {\n position: relative;\n }\n }\n }\n .\\[\\&\\>\\*\\]\\:focus-visible\\:z-10 {\n &>* {\n &:focus-visible {\n z-index: 10;\n }\n }\n }\n .\\[\\&\\>\\*\\:first-child\\]\\:mt-0 {\n &>*:first-child {\n margin-top: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>\\*\\:last-child\\]\\:mb-0 {\n &>*:last-child {\n margin-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-t-none {\n &>*:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-l-md {\n &>*:not(:first-child) {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:rounded-l-none {\n &>*:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:border-t-0 {\n &>*:not(:first-child) {\n border-top-style: var(--tw-border-style);\n border-top-width: 0px;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:first-child\\)\\]\\:border-l-0 {\n &>*:not(:first-child) {\n border-left-style: var(--tw-border-style);\n border-left-width: 0px;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-r-md {\n &>*:not(:last-child) {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-r-none {\n &>*:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n .\\[\\&\\>\\*\\:not\\(\\:last-child\\)\\]\\:rounded-b-none {\n &>*:not(:last-child) {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n .has-\\[select\\[aria-hidden\\=true\\]\\:last-child\\]\\:\\[\\&\\>\\[data-slot\\=select-trigger\\]\\:last-of-type\\]\\:rounded-r-md {\n &:has(*:is(select[aria-hidden=true]:last-child)) {\n &>[data-slot=select-trigger]:last-of-type {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n }\n }\n }\n .\\[\\&\\>\\[data-slot\\=select-trigger\\]\\:not\\(\\[class\\*\\=\\'w-\\'\\]\\)\\]\\:w-fit {\n &>[data-slot=select-trigger]:not([class*='w-']) {\n width: fit-content;\n }\n }\n .\\[\\&\\>div\\]\\:pb-0 {\n &>div {\n padding-bottom: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&\\>input\\]\\:flex-1 {\n &>input {\n flex: 1;\n }\n }\n}\n@property --tw-animation-delay {\n syntax: \"*\";\n inherits: false;\n initial-value: 0s;\n}\n@property --tw-animation-direction {\n syntax: \"*\";\n inherits: false;\n initial-value: normal;\n}\n@property --tw-animation-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-animation-fill-mode {\n syntax: \"*\";\n inherits: false;\n initial-value: none;\n}\n@property --tw-animation-iteration-count {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-enter-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-enter-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-blur {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-opacity {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-rotate {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-scale {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-exit-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-exit-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n:root {\n --radius: 0.625rem;\n --background: #1C1A17;\n --foreground: #FBFAF9;\n --card: #1C1A17;\n --card-foreground: #FBFAF9;\n --popover: #1C1A17;\n --popover-foreground: #FBFAF9;\n --primary: #02E2AC;\n --primary-foreground: #1C1A17;\n --secondary: #46423D;\n --secondary-foreground: #FBFAF9;\n --muted: #46423D;\n --muted-foreground: #7C776F;\n --accent: #46423D;\n --accent-foreground: #FBFAF9;\n --destructive: #ef4444;\n --border: #46423D;\n --input: #46423D;\n --ring: #02E2AC;\n}\n@layer base {\n html {\n scroll-behavior: smooth;\n font-family: var(--font-sans);\n }\n body {\n background-color: var(--color-gray-900);\n color: var(--color-gray-25);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n font-family: var(--font-sans);\n }\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n h1, h2 {\n --tw-font-weight: var(--font-weight-extrabold);\n font-weight: var(--font-weight-extrabold);\n color: var(--color-gray-25);\n }\n h3, h4, h5, h6 {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n color: var(--color-gray-25);\n }\n h1 {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-5xl);\n line-height: var(--tw-leading, var(--text-5xl--line-height));\n }\n @media (width >= 64rem) {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n }\n h2 {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-4xl);\n line-height: var(--tw-leading, var(--text-4xl--line-height));\n }\n line-height: 1.2;\n }\n h3 {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-3xl);\n line-height: var(--tw-leading, var(--text-3xl--line-height));\n }\n line-height: 1.3;\n }\n h4 {\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n @media (width >= 48rem) {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n }\n line-height: 1.3;\n }\n blockquote, .accent-font {\n font-style: italic;\n }\n .heading {\n font-family: var(--font-heading);\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n }\n}\n@layer components {\n .btn-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n background-color: var(--color-gray-25);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-900);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-500);\n }\n }\n }\n .btn-secondary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-25);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-25);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: var(--color-gray-25);\n }\n }\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-900);\n }\n }\n }\n .btn-ghost {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--radius);\n padding-inline: calc(var(--spacing) * 6);\n padding-block: calc(var(--spacing) * 3);\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-500);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n &:hover {\n @media (hover: hover) {\n background-color: color-mix(in srgb, #FBFAF9 10%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-25) 10%, transparent);\n }\n }\n }\n &:hover {\n @media (hover: hover) {\n color: var(--color-gray-25);\n }\n }\n }\n .card {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-600);\n background-color: var(--color-gray-900);\n padding: calc(var(--spacing) * 6);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n }\n .card:hover {\n border-color: var(--color-gray-500);\n }\n .card-featured {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 2px;\n border-color: var(--color-gray-25);\n background-color: var(--color-gray-900);\n padding: calc(var(--spacing) * 6);\n }\n .tag {\n display: inline-flex;\n align-items: center;\n border-radius: calc(infinity * 1px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-800);\n background-color: var(--color-gray-800);\n padding-inline: calc(var(--spacing) * 3);\n padding-block: calc(var(--spacing) * 1);\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n color: var(--color-gray-500);\n }\n .tag-active {\n border-color: var(--color-gray-25);\n background-color: var(--color-gray-25);\n color: var(--color-gray-900);\n }\n .section {\n margin-block: calc(var(--spacing) * 16);\n @media (width >= 48rem) {\n margin-block: calc(var(--spacing) * 24);\n }\n }\n .container-page {\n margin-inline: auto;\n max-width: var(--container-7xl);\n padding-inline: calc(var(--spacing) * 4);\n @media (width >= 40rem) {\n padding-inline: calc(var(--spacing) * 6);\n }\n @media (width >= 64rem) {\n padding-inline: calc(var(--spacing) * 24);\n }\n }\n .star {\n display: inline-block;\n color: var(--color-gray-25);\n }\n .star::before {\n content: '☆';\n }\n .star-filled::before {\n content: '★';\n }\n .constellation-line {\n height: 1px;\n --tw-gradient-position: to right in oklab;\n background-image: linear-gradient(var(--tw-gradient-stops));\n --tw-gradient-from: transparent;\n --tw-gradient-via: var(--color-gray-500);\n --tw-gradient-via-stops: var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-via-stops);\n --tw-gradient-to: transparent;\n --tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position));\n }\n .divider-stars {\n margin-block: calc(var(--spacing) * 8);\n display: flex;\n align-items: center;\n gap: calc(var(--spacing) * 4);\n }\n .divider-stars::before,\n .divider-stars::after {\n content: '';\n height: 1px;\n flex: 1;\n background-color: var(--color-gray-800);\n }\n}\n@layer utilities {\n .texture-woodcut {\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.03'/%3E%3C/svg%3E\");\n }\n .bg-starfield {\n background-image: radial-gradient(1px 1px at 20px 30px, white, transparent),\n radial-gradient(1px 1px at 40px 70px, rgba(255,255,255,0.8), transparent),\n radial-gradient(1px 1px at 50px 160px, rgba(255,255,255,0.6), transparent),\n radial-gradient(1px 1px at 90px 40px, white, transparent),\n radial-gradient(1px 1px at 130px 80px, rgba(255,255,255,0.7), transparent),\n radial-gradient(1px 1px at 160px 120px, rgba(255,255,255,0.5), transparent);\n background-repeat: repeat;\n background-size: 200px 200px;\n }\n}\n:focus-visible {\n outline-style: var(--tw-outline-style);\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--color-gray-25);\n}\n::selection {\n background-color: rgba(255, 255, 255, 0.3);\n color: white;\n}\n::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n::-webkit-scrollbar-track {\n background-color: var(--color-gray-950);\n}\n::-webkit-scrollbar-thumb {\n border-radius: calc(infinity * 1px);\n background-color: var(--color-gray-800);\n}\n::-webkit-scrollbar-thumb:hover {\n background-color: var(--color-gray-500);\n}\na:not(.btn-primary):not(.btn-secondary):not(.btn-ghost) {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n}\npre {\n overflow-x: auto;\n border-radius: var(--radius);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-800);\n background-color: var(--color-gray-950);\n padding: calc(var(--spacing) * 4);\n}\ncode:not(pre code) {\n border-radius: 0.25rem;\n background-color: var(--color-gray-800);\n padding-inline: calc(var(--spacing) * 1.5);\n padding-block: calc(var(--spacing) * 0.5);\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n color: var(--color-gray-25);\n}\nblockquote {\n margin-block: calc(var(--spacing) * 6);\n border-left-style: var(--tw-border-style);\n border-left-width: 2px;\n border-color: var(--color-gray-25);\n padding-left: calc(var(--spacing) * 6);\n font-size: var(--text-xl);\n line-height: var(--tw-leading, var(--text-xl--line-height));\n color: var(--color-gray-500);\n font-style: italic;\n}\ntable {\n width: 100%;\n border-collapse: collapse;\n}\nth {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n border-color: var(--color-gray-800);\n padding-block: calc(var(--spacing) * 3);\n text-align: left;\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n --tw-tracking: var(--tracking-wider);\n letter-spacing: var(--tracking-wider);\n color: var(--color-gray-500);\n text-transform: uppercase;\n}\ntd {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n border-color: var(--color-gray-800);\n padding-block: calc(var(--spacing) * 3);\n}\nhr {\n margin-block: calc(var(--spacing) * 8);\n border-color: var(--color-gray-800);\n}\ninput, textarea, select {\n border-radius: calc(var(--radius) + 4px);\n border-style: var(--tw-border-style);\n border-width: 1px;\n border-color: var(--color-gray-200);\n background-color: color-mix(in srgb, #1C1A17 60%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-gray-900) 60%, transparent);\n }\n padding-inline: calc(var(--spacing) * 4);\n padding-block: calc(var(--spacing) * 3);\n font-family: var(--font-mono);\n color: var(--color-gray-25);\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 400ms;\n transition-duration: 400ms;\n &::placeholder {\n color: var(--color-gray-500);\n }\n &:hover {\n @media (hover: hover) {\n border-color: var(--color-teal-500);\n }\n }\n &:focus {\n border-color: var(--color-teal-500);\n }\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n font-family: var(--font-sans);\n}\n@keyframes dropdown-in {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(-4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n@keyframes dropdown-out {\n from {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n to {\n opacity: 0;\n transform: scale(0.95) translateY(-4px);\n }\n}\n@keyframes sidebar-in-right {\n from {\n transform: translateX(100%);\n }\n to {\n transform: translateX(0);\n }\n}\n@keyframes sidebar-out-right {\n from {\n transform: translateX(0);\n }\n to {\n transform: translateX(100%);\n }\n}\n@keyframes sidebar-in-bottom {\n from {\n transform: translateY(100%);\n }\n to {\n transform: translateY(0);\n }\n}\n@keyframes sidebar-out-bottom {\n from {\n transform: translateY(0);\n }\n to {\n transform: translateY(100%);\n }\n}\n@keyframes twinkle {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n@keyframes float {\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-10px);\n }\n}\n.animate-twinkle {\n animation: twinkle 3s ease-in-out infinite;\n}\n.animate-float {\n animation: float 6s ease-in-out infinite;\n}\n.icon-hover-container {\n transition-property: all;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n --tw-duration: 300ms;\n transition-duration: 300ms;\n}\n.icon-hover-container:hover img {\n filter: brightness(1.2);\n}\n.icon-hover-container svg path:nth-child(2) {\n transition: all 0.3s ease;\n transform-origin: center;\n}\n.icon-hover-container:hover svg path:nth-child(2) {\n fill: white !important;\n transform: scale(0.65);\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-rotate-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-rotate-z {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-x {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-skew-y {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-gradient-position {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-via {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-to {\n syntax: \"\";\n inherits: false;\n initial-value: #0000;\n}\n@property --tw-gradient-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-via-stops {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-gradient-from-position {\n syntax: \"\";\n inherits: false;\n initial-value: 0%;\n}\n@property --tw-gradient-via-position {\n syntax: \"\";\n inherits: false;\n initial-value: 50%;\n}\n@property --tw-gradient-to-position {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-drop-shadow-alpha {\n syntax: \"\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-drop-shadow-size {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-blur {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-brightness {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-contrast {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-grayscale {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-hue-rotate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-invert {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-opacity {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-saturate {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-backdrop-sepia {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ease {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-scale-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@property --tw-scale-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 1;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity,1);\n transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));\n filter: blur(var(--tw-enter-blur,0));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity,1);\n transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));\n filter: blur(var(--tw-exit-blur,0));\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-rotate-x: initial;\n --tw-rotate-y: initial;\n --tw-rotate-z: initial;\n --tw-skew-x: initial;\n --tw-skew-y: initial;\n --tw-space-y-reverse: 0;\n --tw-border-style: solid;\n --tw-gradient-position: initial;\n --tw-gradient-from: #0000;\n --tw-gradient-via: #0000;\n --tw-gradient-to: #0000;\n --tw-gradient-stops: initial;\n --tw-gradient-via-stops: initial;\n --tw-gradient-from-position: 0%;\n --tw-gradient-via-position: 50%;\n --tw-gradient-to-position: 100%;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-blur: initial;\n --tw-brightness: initial;\n --tw-contrast: initial;\n --tw-grayscale: initial;\n --tw-hue-rotate: initial;\n --tw-invert: initial;\n --tw-opacity: initial;\n --tw-saturate: initial;\n --tw-sepia: initial;\n --tw-drop-shadow: initial;\n --tw-drop-shadow-color: initial;\n --tw-drop-shadow-alpha: 100%;\n --tw-drop-shadow-size: initial;\n --tw-backdrop-blur: initial;\n --tw-backdrop-brightness: initial;\n --tw-backdrop-contrast: initial;\n --tw-backdrop-grayscale: initial;\n --tw-backdrop-hue-rotate: initial;\n --tw-backdrop-invert: initial;\n --tw-backdrop-opacity: initial;\n --tw-backdrop-saturate: initial;\n --tw-backdrop-sepia: initial;\n --tw-duration: initial;\n --tw-ease: initial;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-scale-z: 1;\n --tw-animation-delay: 0s;\n --tw-animation-direction: normal;\n --tw-animation-duration: initial;\n --tw-animation-fill-mode: none;\n --tw-animation-iteration-count: 1;\n --tw-enter-blur: 0;\n --tw-enter-opacity: 1;\n --tw-enter-rotate: 0;\n --tw-enter-scale: 1;\n --tw-enter-translate-x: 0;\n --tw-enter-translate-y: 0;\n --tw-exit-blur: 0;\n --tw-exit-opacity: 1;\n --tw-exit-rotate: 0;\n --tw-exit-scale: 1;\n --tw-exit-translate-x: 0;\n --tw-exit-translate-y: 0;\n }\n }\n}\n"],"names":[],"mappings":"AACA;EA0lIE;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA1lIJ;EAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;IAAA;;;;;;;;;;;;;;AAFF;EA6FE;;;;;;;EAAA;;;;;;;EAMA;;;;;;;;;;EASA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;;;EAKA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;;;;;;;EAAA;;;;;;;;;;;EAUA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;IACE;;;;IAEE;MAAgD;;;;;;EAKpD;;;;EAGA;;;;EAGA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAAA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EAAA;;;;EAGA;;;;EA6lGA;;;;;EAIA;;;;;;;;EAOA;;;;;EAGE;IAAgD;;;;;EAIlD;;;;;;EAKA;;;;;;EAKA;;;;;EAGE;IAAyB;;;;;;EAIzB;IAAyB;;;;;;EAK3B;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;;EAGE;IAAyB;;;;;;EAIb;;;;EAEd;;;;EAGA;;;;;;;AA/4GF;EAs5GE;;;;;;;;;;;;;;;;;;EAiBI;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;;;;;;;EAmBI;IAAuB;;;;;EAKvB;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;;;;EAgBI;IAAuB;;;;IAErB;MAAgD;;;;;;EAMlD;IAAuB;;;;;EAK3B;;;;;;;;;;;;;;EAaA;;;;EAGA;;;;;;;;;EAQA;;;;;;;;;;;;;;;;;EAgBA;;;;;;EAKA;;;;EAEE;IAAyB;;;;;EAI3B;;;;;;EAIE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;;EAIA;;;;EAGA;;;;EAGA;;;;;;;;;;;EAWA;;;;;;;EAMA;;;;;;;;AA/jHF;EAiPE;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;;;;;;EAWA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAGzB;IAAyB;;;;;EAI3B;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAMA;;;;EAMA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAIE;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAMF;;;;EAGA;;;;EAGA;;;;EAGA;;;;;;EAKA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAEE;IAAiE;;;;;EAGhD;;;;EAEnB;;;;EAEE;IAAiE;;;;;EAGhD;;;;EAEnB;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;;;EAKA;;;;EAEE;IAAgD;;;;;EAGxB;;;;;EAG1B;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAEE;IAAgD;;;;;EAG5B;;;;EAEtB;;;;;EAIA;;;;EAMA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAEE;IAAgD;;;;;EAIlD;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;EAGA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAGA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;;EAKA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;;EAIA;;;;EAIA;;;;;EAIA;;;;EAIA;;;;EAGA;;;;EAKI;IAAuB;;;;;;;;EAUvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAMzB;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAOE;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;IAErB;MAAgD;;;;;;EAQlD;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;EAOvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAQvB;IAAuB;;;;;;EAOzB;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;;EAMA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAMA;;;;EAMA;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;EAKzB;IAAyB;;;;;;EAMzB;;;;EAKA;;;;EAEE;IAAgD;;;;;EAMlD;;;;EAEE;IAAgD;;;;;EAQ9C;IAAuB;;;;IAErB;MAAgD;;;;;;EAUlD;IAAuB;;;;IAErB;MAAgD;;;;;;EASpD;;;;EAEE;IAAgD;;;;;EAQlD;;;;EAEE;IAAgD;;;;;EAOpD;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA;;;;EAME;;;;EAOA;;;;EAMF;;;;EAKA;;;;EAKA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;;EAOE;;;;;EAOF;;;;EAKA;;;;EAKA;;;;EA8WF;;;;EAGA;;;;;;;AA5WF;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;AAmSA;;;;;;;AAMA;;;;;AAIA;;;;;AAIA;;;;AAGA;;;;;AAIA;;;;AAGA;;;;;;AAKA;;;;;;;;;;AASA;;;;;;;;;;AASA;;;;;;;;;;;;AAWA;;;;;AAIA;;;;;;;;;;;;;;;;AAeA;;;;;;;AAMA;;;;;AAIA;;;;;;;;AAME;EAAgD;;;;;AAGjC;;;;;;;;;;;;AASf;;;;AAIE;EAAuB;;;;;AAIzB;;;;;;AAOY;;;;AAEd;;;;;;;;;;;;AAUA;;;;;;;;;;;;AAUA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;;;;;;;AAQA;;;;AAGA;;;;AAGA;;;;;;;;AAOA;;;;AAGA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;AAIA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;AAKA;;;;;;;;AAOA"}}] +} \ No newline at end of file diff --git a/next.config.ts b/next.config.ts index 85bb3470..cac0bf02 100644 --- a/next.config.ts +++ b/next.config.ts @@ -20,10 +20,12 @@ const nextConfig: NextConfig = { // eslint-disable-next-line @typescript-eslint/no-explicit-any ...({ outputFileTracingExcludes: { + // Exclude the banner images and three.js from all serverless function // bundles — they are served as static files and don't need to be // bundled into functions like opengraph-image routes "**": [ + './**/*.pdf', "public/content-images/**", "node_modules/three/**", "node_modules/@react-three/**", diff --git a/public/content-images/research/biomimetic-capital-allocation/banner.png b/public/content-images/research/biomimetic-capital-allocation/banner.png new file mode 100644 index 00000000..8bb43389 Binary files /dev/null and b/public/content-images/research/biomimetic-capital-allocation/banner.png differ diff --git a/public/content-images/research/civilizational-stakes-coordination-capacity/banner.png b/public/content-images/research/civilizational-stakes-coordination-capacity/banner.png new file mode 100644 index 00000000..3b7dbb0b Binary files /dev/null and b/public/content-images/research/civilizational-stakes-coordination-capacity/banner.png differ diff --git a/public/content-images/research/ethereum-localism/ethereum-localism.pdf b/public/content-images/research/ethereum-localism/ethereum-localism.pdf new file mode 100644 index 00000000..8a99410e Binary files /dev/null and b/public/content-images/research/ethereum-localism/ethereum-localism.pdf differ diff --git a/public/content-images/research/exploring-mycofi/mycofi.pdf b/public/content-images/research/exploring-mycofi/mycofi.pdf new file mode 100644 index 00000000..2fa9c10d Binary files /dev/null and b/public/content-images/research/exploring-mycofi/mycofi.pdf differ diff --git a/public/content-images/research/grantee-to-funder-flywheel/banner.png b/public/content-images/research/grantee-to-funder-flywheel/banner.png new file mode 100644 index 00000000..efbaef2e Binary files /dev/null and b/public/content-images/research/grantee-to-funder-flywheel/banner.png differ diff --git a/public/content-images/research/grassroots-economics/grassroots-economics.pdf b/public/content-images/research/grassroots-economics/grassroots-economics.pdf new file mode 100644 index 00000000..a26d1612 Binary files /dev/null and b/public/content-images/research/grassroots-economics/grassroots-economics.pdf differ diff --git a/public/content-images/research/identity-infrastructure-binding-constraint/banner.png b/public/content-images/research/identity-infrastructure-binding-constraint/banner.png new file mode 100644 index 00000000..c6254313 Binary files /dev/null and b/public/content-images/research/identity-infrastructure-binding-constraint/banner.png differ diff --git a/public/content-images/research/mechanism-pluralism-survival-requirement/banner.png b/public/content-images/research/mechanism-pluralism-survival-requirement/banner.png new file mode 100644 index 00000000..6a067d07 Binary files /dev/null and b/public/content-images/research/mechanism-pluralism-survival-requirement/banner.png differ diff --git a/public/content-images/research/ocah-volume-1-innovators-edition/onchain-capital-allocation-v1.pdf b/public/content-images/research/ocah-volume-1-innovators-edition/onchain-capital-allocation-v1.pdf new file mode 100644 index 00000000..be867c70 Binary files /dev/null and b/public/content-images/research/ocah-volume-1-innovators-edition/onchain-capital-allocation-v1.pdf differ diff --git a/public/content-images/research/ocah-volume-2-explorers-edition/onchain-capital-allocation-v2.pdf b/public/content-images/research/ocah-volume-2-explorers-edition/onchain-capital-allocation-v2.pdf new file mode 100644 index 00000000..18d5ef33 Binary files /dev/null and b/public/content-images/research/ocah-volume-2-explorers-edition/onchain-capital-allocation-v2.pdf differ diff --git a/public/content-images/research/pathways-to-regeneration/pathways-to-regeneration.pdf b/public/content-images/research/pathways-to-regeneration/pathways-to-regeneration.pdf new file mode 100644 index 00000000..e87bf0a6 Binary files /dev/null and b/public/content-images/research/pathways-to-regeneration/pathways-to-regeneration.pdf differ diff --git a/public/content-images/research/post-capitalist-substrate-of-the-abundance-economy/banner.png b/public/content-images/research/post-capitalist-substrate-of-the-abundance-economy/banner.png new file mode 100644 index 00000000..2820a05a Binary files /dev/null and b/public/content-images/research/post-capitalist-substrate-of-the-abundance-economy/banner.png differ diff --git a/public/content-images/research/public-goods-funding-five-layer-stack/banner.png b/public/content-images/research/public-goods-funding-five-layer-stack/banner.png new file mode 100644 index 00000000..30de775c Binary files /dev/null and b/public/content-images/research/public-goods-funding-five-layer-stack/banner.png differ diff --git a/public/content-images/research/retroactive-funding-most-scalable-pattern/banner.png b/public/content-images/research/retroactive-funding-most-scalable-pattern/banner.png new file mode 100644 index 00000000..71a7da8a Binary files /dev/null and b/public/content-images/research/retroactive-funding-most-scalable-pattern/banner.png differ diff --git a/public/content-images/research/signal-as-important-as-capital/banner.png b/public/content-images/research/signal-as-important-as-capital/banner.png new file mode 100644 index 00000000..808b6495 Binary files /dev/null and b/public/content-images/research/signal-as-important-as-capital/banner.png differ diff --git a/public/content-images/research/structural-funding-beyond-grants/banner.png b/public/content-images/research/structural-funding-beyond-grants/banner.png new file mode 100644 index 00000000..41f9954f Binary files /dev/null and b/public/content-images/research/structural-funding-beyond-grants/banner.png differ diff --git a/public/content-images/research/trust-precedes-coordination/banner.png b/public/content-images/research/trust-precedes-coordination/banner.png new file mode 100644 index 00000000..4006dddc Binary files /dev/null and b/public/content-images/research/trust-precedes-coordination/banner.png differ diff --git a/src/components/Markdown.tsx b/src/components/Markdown.tsx index ad18dcb5..3ff390b3 100644 --- a/src/components/Markdown.tsx +++ b/src/components/Markdown.tsx @@ -91,7 +91,7 @@ export function Markdown({ content, className = "" }: MarkdownProps) { {alt ), // Style tables diff --git a/src/content/research/biomimetic-capital-allocation.md b/src/content/research/biomimetic-capital-allocation.md new file mode 100644 index 00000000..1f6d937d --- /dev/null +++ b/src/content/research/biomimetic-capital-allocation.md @@ -0,0 +1,143 @@ +--- +id: '1741267200008' +slug: biomimetic-capital-allocation +name: "Biomimetic Capital Allocation: What Nature Can Teach Funding Mechanism Designers" +shortDescription: "Mycelial networks, slime molds, and bioregional nutrient cycling aren't metaphors -- they're engineering blueprints for distributed resource allocation under uncertainty." +tags: + - biomimicry + - mycelium + - resilience + - capital-allocation + - nature + - antifragility +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - conviction-voting + - quadratic-funding + - token-streaming + - community-currencies + - mutual-aid-networks +relatedApps: + - flows-wtf + - gardens + - giveth +relatedCaseStudies: [] +relatedResearch: + - what-nature-can-teach-us-about-allocating-capital + - biofi-bioregional-finance-web3 + - bioregional-swarms +relatedCampaigns: [] +banner: /content-images/research/biomimetic-capital-allocation/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- 3.8 billion years of biological evolution have already solved most of the problems that capital allocation designers face: distributed resource routing, adaptive response to changing conditions, symbiotic value exchange, resilience without central control. Mycelial networks, slime mold foraging, bioregional nutrient cycling, and evolutionary antifragility aren't poetic metaphors for onchain systems -- they are engineering blueprints with specific, actionable design patterns. + +--- + +## Why Biology Matters to Mechanism Design + +Capital allocation in the Ethereum ecosystem faces a set of challenges that look novel but are, in fact, ancient: + +- How do you route resources to where they're most needed without a central authority? +- How do you adapt allocation in real-time as conditions change? +- How do you maintain system resilience when individual components fail? +- How do you incentivize cooperation in a system of independent agents? +- How do you balance exploration (trying new things) with exploitation (investing in what works)? + +Biological systems have been solving these problems since the first cells formed cooperative communities. The solutions that survived 3.8 billion years of selection pressure are not random -- they are deeply optimized for the exact conditions that distributed coordination systems face. + +## Five Biological Blueprints + +### 1. Mycelial Networks: Distributed Resource Routing + +**The biology:** Mycorrhizal networks -- the underground fungal networks that connect forest trees -- transport nutrients, water, and chemical signals between plants across vast distances. A single mycelial network can span hectares, connecting hundreds of trees of different species. The network routes resources from surplus areas to deficit areas, strengthens stressed trees by directing nutrients toward them, and even transmits chemical warning signals when part of the network is under attack. + +Key properties: +- **No central controller.** Resource routing emerges from local chemical gradients and fungal growth patterns. +- **Redundant pathways.** If one connection is severed, the network reroutes through alternative paths. +- **Cross-species cooperation.** The network connects organisms that don't share a genome or governance structure. +- **Adaptive resource allocation.** Resources flow toward need, not toward the loudest signal. + +**The design pattern:** Flows.wtf's continuous streaming through token-curated registries mirrors mycelial routing. Resources flow continuously to approved recipients based on community curation, with the flow adapting as the community's priorities shift. Drips' dependency splitting -- where funding a project automatically routes resources to its upstream dependencies -- is a direct analog of how mycelial networks channel nutrients to the roots that need them. + +**Actionable principle:** Design funding systems with redundant pathways and adaptive routing. Don't rely on a single allocation mechanism or a single decision point. Build networks where resources can flow through multiple channels simultaneously, with the network adapting to route around failures and toward emerging needs. + +### 2. Slime Mold: Decentralized Search Without Central Planning + +**The biology:** Physarum polycephalum, a single-celled slime mold, can solve complex optimization problems without a brain, a central nervous system, or any form of central planning. When placed in an environment with scattered food sources, it extends exploratory tendrils in all directions, finds the food, and then prunes its network to an efficient transport structure that closely approximates optimal solutions to graph problems. + +Key properties: +- **Explore broadly, then exploit.** The organism extends in all directions before concentrating on productive paths. +- **Prune what doesn't work.** Unproductive tendrils are retracted, and resources are redirected to productive ones. +- **The solution is emergent.** No individual cell "knows" the optimal network structure. It emerges from local interactions. + +**The design pattern:** Evolutionary grants games, where proposals compete, mutate, and adapt across iterative rounds, follow the slime mold pattern. So does GG24's multi-mechanism approach: extend multiple allocation mechanisms simultaneously (explore broadly), then concentrate resources on the mechanisms that produce the best outcomes (exploit what works). + +**Actionable principle:** Fund broadly in early rounds, then concentrate. Don't try to pick winners from the start. Deploy capital across many small experiments, measure outcomes, and redirect resources toward what's working. The cost of early exploration is repaid by the quality of later concentration. + +### 3. Bioregional Nutrient Cycling: Local-First, Globally Connected + +**The biology:** Healthy ecosystems cycle nutrients locally -- leaf litter feeds soil organisms, which feed plant roots, which produce more leaves. But they're also connected to larger cycles: rivers carry nutrients downstream, migrating animals transport minerals across continents, atmospheric processes distribute water globally. The system is local-first but globally connected. + +Key properties: +- **Local circulation dominates.** Most nutrients cycle within a small area, keeping the local ecosystem self-sustaining. +- **Inter-regional transfers supplement.** Nutrients flow between regions when local cycles can't meet needs. +- **Scale-appropriate mechanisms.** Different mechanisms operate at different scales -- soil bacteria at centimeters, rivers at kilometers, atmosphere at continental scales. + +**The design pattern:** The emerging pattern of community-level funding (gift circles, cookie jars, local QF rounds) supplemented by ecosystem-level programs (Optimism RetroPGF, Protocol Guild) mirrors bioregional nutrient cycling. Most coordination and funding happens at the community scale, where trust is high and context is rich. Larger programs supplement local efforts when cross-community coordination is needed. + +**Actionable principle:** Design funding systems that are local-first and globally connected. Invest in local funding capacity (community grants, crew-level allocation) and supplement with cross-ecosystem programs for work that transcends community boundaries. Don't try to run everything from the top. + +### 4. Immune Systems: Adaptive Defense Without Central Command + +**The biology:** The vertebrate immune system identifies and neutralizes threats without a central controller. It maintains a diverse repertoire of defender cells, rapidly amplifies effective responses, remembers past threats (immunological memory), and distinguishes self from non-self -- all through distributed cellular interactions. + +Key properties: +- **Diversity as defense.** A diverse repertoire of responses ensures that no single threat can evade all defenses. +- **Adaptive amplification.** When a defense works, it's rapidly amplified. When it doesn't, it's pruned. +- **Memory.** Past encounters are remembered, enabling faster response to recurring threats. +- **Self/non-self discrimination.** The system distinguishes legitimate participants from invaders. + +**The design pattern:** Sybil resistance systems (Gitcoin Passport, MACI, COCM) are immune systems for funding mechanisms. They maintain diverse verification approaches (stamps, ZK proofs, graph analysis), amplify effective defenses, remember known attack patterns, and attempt to distinguish genuine participants from manufactured ones. + +**Actionable principle:** Build Sybil resistance as an adaptive immune system, not a static wall. Maintain diverse verification approaches. When an attack succeeds, analyze it and update defenses. Build institutional memory of attack patterns. Accept that some threats will get through and design for resilience, not impermeability. + +### 5. Evolutionary Antifragility: Gaining from Disorder + +**The biology:** Biological evolution doesn't just survive stress -- it uses stress as information to produce better-adapted organisms. Environmental challenges drive selection, which drives adaptation, which produces systems that are more robust than they would have been without the challenge. Bones strengthen under load. Immune systems strengthen through exposure. Ecosystems diversify after disturbances. + +Key properties: +- **Stress is information.** Challenges reveal weaknesses and drive improvement. +- **Redundancy enables experimentation.** Because biology maintains many variants, individual failures don't threaten the whole system. +- **Selection operates on outcomes, not intentions.** What survives is what works, regardless of what was planned. + +**The design pattern:** Retroactive funding is the most directly antifragile mechanism in the ecosystem. By funding demonstrated outcomes rather than proposals, it lets the "selection" of real-world results determine allocation rather than the "planning" of grant proposals. Iterative round design -- where each round's retrospective informs the next round's mechanism -- builds adaptive capacity through accumulated experience. + +**Actionable principle:** Treat failures and attacks as information, not just as problems. Run retrospectives after every round. Publish honest assessments of what didn't work. Design mechanisms that improve through stress rather than just surviving it. + +## The Meta-Pattern: Biomimetic Design Principles + +Across all five biological blueprints, several meta-principles emerge: + +1. **Decentralize control, centralize nothing.** Every biological system that survives long-term is distributed. Central control points are single points of failure, and evolution eliminates them ruthlessly. + +2. **Optimize for resilience, not efficiency.** Biological systems maintain apparent "waste" -- redundant pathways, excess capacity, diverse strategies -- because resilience under stress matters more than efficiency under ideal conditions. + +3. **Adapt continuously, don't plan once.** Biological systems don't create five-year plans. They respond to current conditions with whatever resources are available, adjusting constantly. + +4. **Use local information, aggregate globally.** No cell knows the state of the whole organism. Each responds to local signals, and the aggregate behavior produces system-level intelligence. + +5. **Build symbiotic relationships, not extractive ones.** The longest-lasting biological partnerships are mutualistic -- both parties benefit. Parasitic relationships are inherently unstable because the host evolves defenses. + +## Conclusion + +The public goods funding ecosystem has spent enormous intellectual energy on mechanism design from first principles -- game theory, social choice theory, mechanism design theory. This work is valuable and should continue. But it is incomplete without the design patterns that 3.8 billion years of biological evolution have already validated. + +The most robust onchain funding systems will be the ones that mimic biological resilience: redundant pathways, adaptive routing, local-first coordination, diverse defense strategies, and the capacity to gain from disorder. These are not aspirational principles -- they are engineering constraints, validated by the longest-running optimization process in the known universe. + +Nature is the most experienced mechanism designer we have. The field would do well to study its work. diff --git a/src/content/research/civilizational-stakes-coordination-capacity.md b/src/content/research/civilizational-stakes-coordination-capacity.md new file mode 100644 index 00000000..43a59b1a --- /dev/null +++ b/src/content/research/civilizational-stakes-coordination-capacity.md @@ -0,0 +1,150 @@ +--- +id: '1741267200010' +slug: civilizational-stakes-coordination-capacity +name: "The Civilizational Stakes: Public Goods Funding as Coordination Rehearsal" +shortDescription: "Why the coordination capacity being built through onchain funding mechanisms is a general-purpose capability that civilization needs -- and why the window to build it is finite." +tags: + - metacrisis + - coordination + - civilization + - governance + - d-acc + - resilience +researchType: Opinion +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - retroactive-funding + - participatory-budgeting + - commitment-pooling + - dominant-assurance-contracts +relatedApps: + - optimism-retropgf + - gitcoin-grants-stack + - protocol-guild +relatedCaseStudies: + - eip-1559-how-quadratic-funding-legitimized-ethereum-s-most-important-fee-market-reform + - tornado-cash-how-quadratic-funding-sustained-ethereum-s-most-important-privacy-tool +relatedResearch: + - the-great-interregnum-where-capital-flows-after-institutional-breakdown + - d-acc-market-map +relatedCampaigns: [] +banner: /content-images/research/civilizational-stakes-coordination-capacity/banner.png +--- + +**Type:** Opinion +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- The Ethereum public goods funding ecosystem is often framed as a niche technical concern: how do we fund open source software? This framing is accurate but dangerously narrow. The coordination capacity being built -- the ability for strangers to pool resources toward shared goals without central authorities -- is a general-purpose capability that civilization will need to navigate the converging crises of climate change, AI risk, institutional erosion, and epistemic fragmentation. Public goods funding is a rehearsal for coordination at civilizational scale. + +--- + +## The Coordination Deficit + +The defining feature of the 21st century's major challenges is that they are coordination problems. + +**Climate change** is not a technology problem -- we have the technology to decarbonize. It is a coordination problem: how do you get 8 billion people, 195 nations, and millions of corporations to align their behavior toward a shared atmospheric goal when the benefits are diffuse and the costs are concentrated? + +**AI risk** is not (only) a technical alignment problem. It is a coordination problem: how do you prevent a race to the bottom in AI safety standards when the competitive incentives favor speed over caution, and the consequences of failure are global? + +**Institutional erosion** is not a management problem. It is a coordination problem: how do you maintain the legitimacy and effectiveness of institutions that were designed for a world of slower information flow, clearer national boundaries, and smaller-scale collective action? + +**Epistemic fragmentation** is not an education problem. It is a coordination problem: how do you maintain shared understanding of basic facts when information systems optimize for engagement rather than truth, and when any group can construct a self-reinforcing information environment? + +Each of these challenges requires humans to coordinate at scales and speeds that existing institutions were not designed to handle. The nation-state system coordinates through treaties (slow, fragile). Corporations coordinate through markets (efficient for private goods, blind to externalities). International organizations coordinate through consensus (lowest common denominator). None of these is adequate for the speed and scale of 21st-century coordination challenges. + +## The Rehearsal Thesis + +The Ethereum public goods funding ecosystem has spent seven years building something that looks like a niche concern but is actually a general-purpose coordination technology: + +- **Quadratic funding** enables democratic resource allocation among strangers at global scale +- **Retroactive funding** creates incentive structures that reward demonstrated public contribution +- **Conviction voting** enables continuous preference expression without episodic governance overhead +- **Token streaming** enables real-time resource flows that adapt to changing conditions +- **Impact certificates** create markets for verified public benefit +- **Coalitional funding** coordinates multiple independent funders around shared dependencies +- **Sybil resistance** verifies that participants in democratic processes are unique humans + +Each of these is framed as a tool for funding open source software. And each is, in fact, a general-purpose coordination primitive that could be applied to any collective action problem. + +Consider: if you can use quadratic funding to determine which Ethereum libraries deserve support, you can use it to determine which climate adaptation projects a community prioritizes. If you can use retroactive funding to reward open source contributors, you can use it to reward verified carbon sequestration. If you can use conviction voting to allocate a DAO treasury, you can use it to allocate a city's participatory budget. + +The mechanisms are general. The current application to Ethereum public goods is a rehearsal. + +## Three Attractor States + +The research corpus identifies three attractor states for the coming decades -- trajectories that, once entered, become self-reinforcing: + +### 1. Distributed Coordination + +The optimistic attractor: humanity develops the coordination infrastructure to address shared challenges through voluntary, decentralized cooperation. Information systems support shared understanding. Economic systems internalize externalities. Governance systems enable rapid, legitimate collective action. + +This is the attractor that public goods funding is building toward. Every QF round, every retroactive funding program, every protocol revenue commitment to public goods is a small step toward coordination capacity at civilizational scale. + +### 2. Authoritarian Capture + +The dystopian attractor: coordination challenges are "solved" through centralized control. Climate change is addressed through top-down mandates. AI is controlled through state monopolies. Institutional legitimacy is replaced by surveillance-enabled compliance. This "works" in the narrow sense of producing coordinated action, but at the cost of autonomy, pluralism, and human dignity. + +### 3. Coordination Failure + +The catastrophic attractor: no coordination mechanism -- distributed or centralized -- proves adequate for the speed and scale of 21st-century challenges. Climate change produces cascading ecological collapse. AI development produces uncontrollable systems. Institutional erosion produces governance vacuums filled by conflict. + +The thesis is not that public goods funding will single-handedly determine which attractor state civilization reaches. The thesis is that the coordination capacity being built in this ecosystem -- the tools, the practices, the social norms, the institutional knowledge -- contributes to the probability of reaching the first attractor rather than the second or third. + +## The d/acc Framework + +Vitalik Buterin's "defensive acceleration" (d/acc) framework maps the landscape of technologies that strengthen civilization's capacity to navigate existential risks. The framework identifies four domains: + +- **Bio defense** -- biosecurity, pandemic preparedness, environmental monitoring +- **Cyber defense** -- information integrity, secure communications, privacy infrastructure +- **Info defense** -- epistemic infrastructure, sensemaking tools, anti-manipulation technology +- **Institutional resilience** -- governance innovation, coordination mechanisms, conflict resolution + +Public goods funding mechanisms sit squarely in the institutional resilience domain. They are the governance innovation layer of the d/acc stack. And they are built on the info defense layer (sensemaking tools like Open Source Observer, Pol.is, prediction markets) and the cyber defense layer (privacy-preserving identity, ZK proofs, secure voting). + +The d/acc framing makes explicit what the public goods funding ecosystem often leaves implicit: this work is defensive infrastructure for civilization. It is not optional, and it has urgency. + +## The Legitimacy Question + +The Great Interregnum -- the period between the decline of existing institutional legitimacy and the emergence of new forms -- creates both opportunity and danger. + +**Opportunity:** There is a vacuum of legitimate coordination infrastructure. Existing institutions (governments, international organizations, corporations) are losing trust and effectiveness. New infrastructure that can demonstrate coordination capacity, transparency, and democratic accountability will fill that vacuum. + +**Danger:** The vacuum can also be filled by authoritarian systems that provide coordination without legitimacy. If democratic coordination infrastructure isn't ready when the demand peaks, the authoritarian alternative will be adopted by default. + +This timeline pressure is real. The public goods funding ecosystem is not building in a vacuum -- it is building against a clock. The coordination challenges (climate tipping points, AI capability advances, institutional erosion) are accelerating. The coordination infrastructure (funding mechanisms, identity systems, governance tools) must mature fast enough to be relevant when the crises peak. + +## What the Rehearsal Has Taught Us + +Seven years of public goods funding experimentation have produced specific lessons that apply to coordination at any scale: + +**1. Pluralism is structural, not ideological.** No single mechanism handles all contexts. Client diversity prevents Ethereum consensus failures; mechanism diversity prevents allocation capture. This principle applies to climate governance (no single policy instrument), AI governance (no single regulatory framework), and institutional design (no single governance model). + +**2. Identity is load-bearing.** Democratic processes require verified participants. This applies to QF rounds and to national elections and to any system where one-person-one-voice matters. The Sybil resistance technology being developed for Ethereum funding has direct applications in every democratic context. + +**3. Retroactive evaluation outperforms prospective prediction.** Rewarding demonstrated outcomes is more tractable than predicting future value. This applies to climate projects (fund verified sequestration, not proposals), scientific research (fund demonstrated results, not grant proposals), and public policy (fund programs with proven impact, not theoretical models). + +**4. Trust is built in small groups and scales through nesting.** Microsolidarity's crew → congregation → ecosystem progression applies to any coordination challenge. Effective climate action starts with local groups. Effective AI governance starts with researcher communities. Scaling happens through federation, not top-down mandates. + +**5. Protocol-embedded incentives outperform voluntary compliance.** Optimism's sequencer revenue commitment to public goods is more durable than voluntary donations because it's structural. Carbon taxes are more durable than corporate sustainability pledges for the same reason. The lesson: embed coordination incentives in the systems themselves, don't rely on ongoing goodwill. + +## The Window + +The research corpus is explicit that the window for building distributed coordination infrastructure is finite. Not infinite. Not "whenever we get around to it." Finite. + +Climate science gives us decades, not centuries, to fundamentally alter energy and industrial systems. AI capabilities are advancing on timelines measured in years. Institutional trust erosion is happening now, in real time, across democracies worldwide. + +This doesn't mean the work must be finished tomorrow. It means the work must be accelerating -- building coordination capacity faster than coordination challenges are growing. The public goods funding ecosystem has been in R&D mode for seven years. The next phase must be deployment mode: taking the mechanisms that work and applying them beyond Ethereum, beyond crypto, beyond the current community. + +## Conclusion + +When someone asks "why does funding Ethereum open source matter?", the narrow answer is that the Ethereum ecosystem depends on shared infrastructure and needs mechanisms to fund it. This answer is true and insufficient. + +The broader answer is that the coordination technology being developed through public goods funding -- democratic resource allocation, retroactive impact reward, continuous governance, verified identity, composable mechanism design -- is exactly the technology that civilization needs to navigate the defining challenges of the 21st century. + +Public goods funding is not a niche concern. It is a rehearsal for coordination at civilizational scale. The mechanisms being tested on Ethereum today are the governance primitives that will be deployed on climate, AI, institutional design, and epistemic infrastructure tomorrow. + +The rehearsal is valuable precisely because the stakes are manageable. You can learn from a failed QF round. You cannot learn from a failed response to climate tipping points. The time to build coordination capacity is before the crisis demands it -- and the ecosystem building that capacity today is producing exactly the tools, practices, and institutional knowledge that the future requires. + +The question is not whether this work matters. The question is whether it matures fast enough. diff --git a/src/content/research/ethereum-localism.md b/src/content/research/ethereum-localism.md index f1936493..e1a75cc9 100644 --- a/src/content/research/ethereum-localism.md +++ b/src/content/research/ethereum-localism.md @@ -25,6 +25,7 @@ relatedResearch: - bioregional-swarms relatedCampaigns: [] banner: /content-images/research/ethereum-localism/banner.png +ctaUrl: /content-images/research/ethereum-localism/ethereum-localism.pdf --- **Type:** Book diff --git a/src/content/research/exploring-mycofi.md b/src/content/research/exploring-mycofi.md index 754bdc67..cc08eb3f 100644 --- a/src/content/research/exploring-mycofi.md +++ b/src/content/research/exploring-mycofi.md @@ -24,6 +24,7 @@ relatedResearch: - capturing-value-like-a-slime-mold relatedCampaigns: [] banner: /content-images/research/exploring-mycofi/banner.png +ctaUrl: /content-images/research/exploring-mycofi/mycofi.pdf --- **Type:** Book diff --git a/src/content/research/grantee-to-funder-flywheel.md b/src/content/research/grantee-to-funder-flywheel.md new file mode 100644 index 00000000..931e2262 --- /dev/null +++ b/src/content/research/grantee-to-funder-flywheel.md @@ -0,0 +1,178 @@ +--- +id: '1741267200009' +slug: grantee-to-funder-flywheel +name: "The Grantee-to-Funder Flywheel: How Early Public Goods Funding Seeds Future Funders" +shortDescription: "Tracing the empirical evidence that early-stage public goods funding creates a compounding flywheel -- from Plasma Group's modest QF grant to Optimism's 60M+ OP distribution, and from 1inch's $50K to $3M given back." +tags: + - flywheel + - ROI + - quadratic-funding + - ecosystem + - sustainability + - impact +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - retroactive-funding + - direct-grants +relatedApps: + - gitcoin-grants-stack + - optimism-retropgf + - protocol-guild +relatedCaseStudies: + - optimism-from-plasma-group-research-to-a-2b-layer-2-ecosystem + - 1inch-from-hackathon-to-decentralized-exchange-powerhouse + - coin-center-defending-cryptocurrency-rights-through-community-funded-advocacy + - austin-griffith-quadratic-freelancer-onboarding-developers +relatedResearch: + - what-if-gitcoin-grants-had-been-early-stage-investments + - state-of-public-goods-funding-2024 +relatedCampaigns: + - gitcoin-grants-20-gg20 +banner: /content-images/research/grantee-to-funder-flywheel/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- The strongest empirical argument for public goods funding is not any individual grant outcome -- it is the documented flywheel from grantee to funder. Plasma Group received modest QF support and became Optimism, which distributes 60M+ OP for public goods. 1inch received a $50K grant and gave back $3M. Pocket Network received Optimism funds and redistributed them through its own RetroPGF. This flywheel, if it compounds, transforms public goods funding from a charitable expense into a self-reinforcing investment. + +--- + +## The Flywheel Thesis + +The conventional framing of public goods funding is charitable: resources flow from funders to recipients, and the return is the public good itself. This framing is accurate but incomplete. It misses the compounding dynamic that emerges when funded projects become funders themselves. + +The flywheel works like this: + +1. **Early-stage funding** supports a project before it has product-market fit, revenue, or institutional backing +2. **The project grows** using the funded work as a foundation +3. **The project succeeds** and generates value (users, revenue, treasury, tokens) +4. **The project funds public goods** at a scale that dwarfs the original grant +5. **Those funded projects grow** and eventually fund public goods themselves + +If this cycle repeats, public goods funding is not a cost center -- it's a compounding investment in ecosystem capacity. + +## The Empirical Cases + +### Plasma Group → Optimism: ~1000x Return to the Commons + +**The investment:** Plasma Group, a five-person nonprofit Ethereum scalability research team, received early quadratic funding through Gitcoin Grants Rounds 1-4 in 2019. The amounts were modest -- community-scale contributions, not venture-scale capital. + +**The growth:** The team transitioned from Plasma Group into Optimism, raised $3.5M in venture funding, built a leading Layer 2 with $2B+ in total value locked, and became one of the most important scaling solutions in the Ethereum ecosystem. + +**The return to the commons:** +- Contributed back to Gitcoin's matching pools +- Launched Retroactive Public Goods Funding, distributing 60M+ OP tokens +- Reserved 850M OP (20% of total supply) for public goods +- Built the intellectual and operational model for retroactive funding that the entire ecosystem now uses + +The ratio of original QF funding to public goods redistribution is roughly 1000x. But the return extends beyond capital: Optimism's RetroPGF model became the template adopted by Filecoin, Celo, Pocket Network, and others. The mechanism innovation funded by early Gitcoin grants propagated across the entire ecosystem. + +### 1inch: From $50K Grant to $3M+ Given Back + +**The investment:** 1inch co-founders Sergej Kunz and Anton Bukov built their DEX aggregator in 18 hours at ETHNewYork 2019, then received a $50,000 Gitcoin grant that enabled them to pay their team during early development. + +**The growth:** 1inch has since facilitated 25M+ trades and $250B+ in trading volume, becoming one of the most-used DeFi protocols. + +**The return to the commons:** The founders gave back $3M to their foundation's grant program, plus hundreds of thousands to Gitcoin directly. The 60x return in direct capital repatriation understates the total impact -- 1inch's DEX aggregation infrastructure is itself a public good used across the ecosystem. + +### Pocket Network: The Cascade + +**The investment:** Pocket Network received retroactive funding from Optimism's RetroPGF program. + +**The return to the commons:** Rather than treating the funds as a windfall, Pocket Network allocated $475,000 in POKT, OP, and ARB tokens through its own retroactive funding program, targeted at its specific middleware contributor community. + +This is the flywheel operating at the second derivative: Optimism funds Pocket Network, which funds its own contributors, who build infrastructure that benefits the broader ecosystem. Retroactive funding cascading down through ecosystem layers. + +### Austin Griffith: The Quadratic Freelancer + +**The investment:** Austin Griffith was a top Round 3 Gitcoin grantee, dubbed "The Quadratic Freelancer" by Vitalik Buterin. + +**The growth:** The QF funding enabled Griffith to leave his job and build open-source developer tools full-time. He created Scaffold-ETH (8,400+ GitHub stars), SpeedRunEthereum.com, and The BuidlGuidl. + +**The return to the commons:** The BuidlGuidl has funded 600+ builds and paid out 300+ ETH, creating its own ecosystem of developer education and tooling. Each developer onboarded through Griffith's tools potentially generates compounding contributions to the ecosystem. + +### Coin Center: Institutional Legitimacy Loop + +**The investment:** Coin Center raised over $1 million from 11,000+ Gitcoin QF contributors between 2020 and 2023. + +**The return:** Coin Center's policy advocacy work -- including litigation of cryptocurrency rights -- protects the legal environment that makes all of crypto public goods funding possible. The return is not capital but institutional: preserving the regulatory conditions under which the entire ecosystem operates. + +## The Counterfactual Analysis + +"What If Gitcoin Grants Had Been Early-Stage Investments?" posed a revealing counterfactual: $767K in Gitcoin grants to projects like Uniswap would have been worth approximately $20M as seed investments. This analysis is illuminating but narrowly framed. It measures only the financial return of equity-like positions. + +The actual return to the commons is larger because it includes: + +- **Capital repatriation** (1inch's $3M, Optimism's 60M+ OP) +- **Mechanism innovation** (Optimism's RetroPGF model, now adopted by 4+ ecosystems) +- **Tooling** (Scaffold-ETH, BuidlGuidl, 600+ builds) +- **Ecosystem infrastructure** (Optimism's L2, 1inch's DEX aggregation) +- **Institutional protection** (Coin Center's policy advocacy) +- **Human capital** (thousands of developers onboarded through Griffith's tools) + +The total return, measured across all forms of capital, dwarfs even the $20M equity-equivalent estimate. + +## Flywheel Dynamics + +### Compounding vs. Linear + +In a linear funding model, each dollar produces a fixed return in public goods. $1M in grants produces $1M worth of public goods. The return doesn't grow. + +In a flywheel model, each dollar produces public goods *and* increases the ecosystem's capacity to fund future public goods. The return compounds: + +- Round 1: Fund Project A → Project A grows → Project A funds Projects B, C, D +- Round 2: Projects B, C, D grow → They fund Projects E through M +- Round 3: The ecosystem's total funding capacity has multiplied + +The compounding rate depends on what percentage of successful projects give back. If 10% of funded projects eventually become funders at 10x their original funding, the flywheel doubles ecosystem funding capacity roughly every two generations of projects. + +### The Conditions for Compounding + +The flywheel compounds only if several conditions hold: + +1. **Early-stage projects must actually succeed.** The flywheel starts with project growth. This requires that funding reaches genuinely promising projects at the right time -- the filtering and discovery function of QF and grants. + +2. **Successful projects must give back.** This is cultural, not mechanical. Protocol Guild's 1% Pledge -- establishing a social norm that token projects contribute to core infrastructure -- is an attempt to institutionalize the give-back step. Optimism's sequencer revenue commitment and 1inch's foundation contributions demonstrate that giving back can become part of a project's identity. + +3. **The give-back must be larger than the original funding.** This is the growth multiplier. It works because successful crypto projects can generate enormous value from modest early investments. The power-law distribution of startup outcomes means that a portfolio approach -- many small grants, a few massive successes -- can produce outsized aggregate returns. + +4. **The ecosystem must be durable.** Compounding requires time. If the ecosystem collapses (regulatory, technical, market) before the flywheel turns a few times, the compounding never materializes. + +## Implications for Funding Strategy + +### Fund Early, Fund Broadly + +The flywheel's highest-leverage moment is the earliest stage, when modest funding can make the difference between a project surviving and dying. Plasma Group's QF contributions were small, but they came at a critical moment -- before venture funding, before revenue, before institutional backing. The ecosystem benefit of that timing was enormous. + +This argues for maintaining a significant allocation to early-stage, high-risk, broadly distributed funding (QF, small grants, bounties) even as the ecosystem matures. The hits pay for the misses many times over. + +### Make Giving Back Easy and Normal + +The flywheel requires that successful projects fund public goods. This doesn't happen automatically -- it requires cultural norms and convenient infrastructure. + +Protocol Guild's 1% Pledge normalizes contribution as a project expectation, not an exceptional act. Drips' dependency splitting makes funding upstream dependencies automatic. Optimism's sequencer revenue commitment embeds giving back in protocol economics rather than relying on discretionary decisions. + +The easier and more normal it is to give back, the faster the flywheel turns. + +### Measure the Full Return + +Current impact measurement focuses on direct grant outcomes: did the funded project ship what it promised? This misses the flywheel return. A complete impact assessment would track: + +- Did the project succeed beyond the grant scope? +- Did it generate value for the broader ecosystem? +- Did it fund other public goods? +- Did those funded projects in turn produce value? + +This multi-generational tracking is hard, but it's the only way to understand the true ROI of public goods funding. + +## Conclusion + +The grantee-to-funder flywheel is the most powerful empirical argument for public goods funding. Not because every grant produces a 1000x return -- most don't -- but because the ones that do produce returns so large that they fund entire ecosystems of subsequent public goods work. + +Plasma Group's journey from modest QF recipient to Optimism's 850M OP public goods commitment is not an outlier to be celebrated and forgotten. It is a model to be systematized. The field's task is to make the flywheel turn faster and more reliably: fund early, fund broadly, make giving back easy, and measure the compounding return across generations of projects. + +Public goods funding is not charity. It is investment in the ecosystem's capacity to fund itself. diff --git a/src/content/research/grassroots-economics.md b/src/content/research/grassroots-economics.md index a67d23cd..b31c0043 100644 --- a/src/content/research/grassroots-economics.md +++ b/src/content/research/grassroots-economics.md @@ -25,6 +25,7 @@ relatedResearch: - pathways-to-regeneration relatedCampaigns: [] banner: /content-images/research/grassroots-economics/banner.png +ctaUrl: /content-images/research/grassroots-economics/grassroots-economics.pdf --- **Type:** Book diff --git a/src/content/research/greenpill-books/comic-1.pdf b/src/content/research/greenpill-books/comic-1.pdf new file mode 100644 index 00000000..254b2684 Binary files /dev/null and b/src/content/research/greenpill-books/comic-1.pdf differ diff --git a/src/content/research/greenpill-books/comic-2.pdf b/src/content/research/greenpill-books/comic-2.pdf new file mode 100644 index 00000000..9e63ce7a Binary files /dev/null and b/src/content/research/greenpill-books/comic-2.pdf differ diff --git a/src/content/research/greenpill-books/comic-3.pdf b/src/content/research/greenpill-books/comic-3.pdf new file mode 100644 index 00000000..9209b0ce Binary files /dev/null and b/src/content/research/greenpill-books/comic-3.pdf differ diff --git a/src/content/research/greenpill-books/comic-4.pdf b/src/content/research/greenpill-books/comic-4.pdf new file mode 100644 index 00000000..3c366b32 Binary files /dev/null and b/src/content/research/greenpill-books/comic-4.pdf differ diff --git a/src/content/research/greenpill-books/comic-5.pdf b/src/content/research/greenpill-books/comic-5.pdf new file mode 100644 index 00000000..a9679062 Binary files /dev/null and b/src/content/research/greenpill-books/comic-5.pdf differ diff --git a/src/content/research/greenpill-books/comic-6.pdf b/src/content/research/greenpill-books/comic-6.pdf new file mode 100644 index 00000000..f1f05861 Binary files /dev/null and b/src/content/research/greenpill-books/comic-6.pdf differ diff --git a/src/content/research/greenpill-books/comic-7.pdf b/src/content/research/greenpill-books/comic-7.pdf new file mode 100644 index 00000000..09344aec Binary files /dev/null and b/src/content/research/greenpill-books/comic-7.pdf differ diff --git a/src/content/research/greenpill-books/crypto-ogs-know.pdf b/src/content/research/greenpill-books/crypto-ogs-know.pdf new file mode 100644 index 00000000..51e0d9ea Binary files /dev/null and b/src/content/research/greenpill-books/crypto-ogs-know.pdf differ diff --git a/src/content/research/greenpill-books/future-history-open-internet.pdf b/src/content/research/greenpill-books/future-history-open-internet.pdf new file mode 100644 index 00000000..8bf1a79a Binary files /dev/null and b/src/content/research/greenpill-books/future-history-open-internet.pdf differ diff --git a/src/content/research/greenpill-books/greenpilled.pdf b/src/content/research/greenpill-books/greenpilled.pdf new file mode 100644 index 00000000..36813f2e Binary files /dev/null and b/src/content/research/greenpill-books/greenpilled.pdf differ diff --git a/src/content/research/greenpill-books/impact-daos.pdf b/src/content/research/greenpill-books/impact-daos.pdf new file mode 100644 index 00000000..1ccfcc1c Binary files /dev/null and b/src/content/research/greenpill-books/impact-daos.pdf differ diff --git a/src/content/research/greenpill-books/local-regen-guide.pdf b/src/content/research/greenpill-books/local-regen-guide.pdf new file mode 100644 index 00000000..5818b62b Binary files /dev/null and b/src/content/research/greenpill-books/local-regen-guide.pdf differ diff --git a/src/content/research/greenpill-books/onchain-impact-networks.pdf b/src/content/research/greenpill-books/onchain-impact-networks.pdf new file mode 100644 index 00000000..e4a990e4 Binary files /dev/null and b/src/content/research/greenpill-books/onchain-impact-networks.pdf differ diff --git a/src/content/research/identity-infrastructure-binding-constraint.md b/src/content/research/identity-infrastructure-binding-constraint.md new file mode 100644 index 00000000..77eaa9e6 --- /dev/null +++ b/src/content/research/identity-infrastructure-binding-constraint.md @@ -0,0 +1,143 @@ +--- +id: '1741267200005' +slug: identity-infrastructure-binding-constraint +name: "Identity Infrastructure: The Binding Constraint on Democratic Funding" +shortDescription: "Why Sybil resistance is the single biggest bottleneck in public goods funding -- every democratic mechanism degrades without it, and the sophistication of allocation algorithms has outrun the ability to verify participants." +tags: + - sybil-resistance + - identity + - quadratic-funding + - security + - infrastructure + - gitcoin-passport +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - quadratic-voting + - universal-basic-income + - participatory-budgeting + - attestation-based-funding + - decentralized-validators +relatedApps: + - gitcoin-grants-stack + - deep-funding +relatedCaseStudies: + - gitcoin-citizens-round-1-retroactive-quadratic-funding-for-community-contributions +relatedResearch: + - quadratic-funding-sybil-resistance + - reforming-eth-public-goods-funding-2026 +relatedCampaigns: + - gitcoin-grants-22-gg22 +banner: /content-images/research/identity-infrastructure-binding-constraint/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- Every democratic funding mechanism -- quadratic funding, quadratic voting, UBI, participatory budgeting, conviction voting -- requires the ability to distinguish unique humans from manufactured identities. The sophistication of allocation algorithms has outrun the identity infrastructure that supports them. Without solving Sybil resistance, no amount of mechanism design will produce trustworthy outcomes. This is the binding constraint on the entire field. + +--- + +## The Problem in One Sentence + +If you can't verify that each participant is a unique human, you can't run a democratic funding mechanism. + +This is not a nuanced claim. It is a hard constraint. Quadratic funding's mathematical elegance depends on each contribution representing one person's genuine preference. If a single actor controls 100 accounts, they can redirect matching funds as effectively as if they'd hacked the smart contract. The outcome looks democratic but is controlled. + +## The Evidence + +### The Citizens Round: 50%+ Farming + +Gitcoin's inaugural retroactive QF round (June 2023) achieved impressive headline numbers: ~103,000 DAI distributed, a record 4x crowdfunding-to-matching ratio, 17,000+ donors. But deeper analysis revealed that over 50% of donors were motivated primarily by airdrop speculation rather than genuine impact assessment. + +These participants weren't breaking the rules -- they contributed real money to real projects. But their behavior was driven by the expectation of future token airdrops for "active ecosystem participants," not by preferences about which projects deserved funding. The democratic signal the mechanism was designed to produce was diluted by speculative noise. + +### QuadraticLenster: Rapid Sybil Exploitation + +When quadratic funding was piloted on Lens Protocol's social network in July 2023, replacing "likes" with QF-matched tips, Sybil attacks appeared almost immediately. A $10,000 matching pool attracted both genuine participants (581 contributions from 181 participants) and manufactured accounts attempting to capture matching funds. + +The attack happened faster than defenders could respond. The small scale limited damage, but it demonstrated the principle: any system where participation generates economic value will attract manufactured participation at the speed of automation. + +### Early Gitcoin Rounds: Zero Identity Verification + +Gitcoin's earliest QF rounds (2019-2020) operated with essentially no Sybil resistance. The mechanism worked because the ecosystem was small enough and the amounts modest enough that the cost of attacking exceeded the benefit. As matching pools grew from thousands to millions, the incentive to game the system grew proportionally, while the identity infrastructure remained minimal. + +## Why This Is the Binding Constraint + +A binding constraint is the single bottleneck that limits the performance of an entire system. In public goods funding, the binding constraint is not: + +- **Mechanism design.** The field has 76+ documented mechanisms, more than enough for any context. +- **Capital formation.** L2 treasuries, staking yield, protocol revenue, and MEV provide abundant capital. +- **Tooling.** Allo Protocol, Grants Stack, EasyRetroPGF, Drips, and others provide composable infrastructure. +- **Allocation algorithms.** QF, retroactive funding, conviction voting, metrics-based voting, and AI-assisted evaluation provide sophisticated allocation logic. + +What limits the system is the identity layer that all democratic mechanisms depend on. Consider: + +**Quadratic funding** derives its mathematical properties from the assumption that each contributor is a unique person. Violate this assumption and the mechanism degenerates into standard plutocratic matching. + +**Quadratic voting** allocates voice credits per person. If one entity controls multiple identities, they acquire disproportionate voting power -- exactly the outcome the quadratic cost function was designed to prevent. + +**Universal basic income** distributes to every unique human. Without reliable human verification, UBI becomes a subsidy for identity manufacturing. + +**Participatory budgeting** gives each community member a voice. Fake members dilute real voices. + +**Conviction voting** accumulates voting power over time per participant. Multiple identities accumulate multiple streams of conviction. + +In every case, the mechanism's integrity depends on an identity guarantee that existing infrastructure cannot reliably provide. + +## The Current State of Identity Infrastructure + +### Gitcoin Passport + +Gitcoin Passport aggregates "stamps" from various identity providers (social accounts, biometric verification, onchain activity) into a composite score. Passport achieved roughly 60% reduction in suspicious activity -- a meaningful improvement that still leaves 40% of attack surface uncovered. + +The stamp-based approach faces a structural challenge: stamps verify that an account is connected to a specific service (Twitter, GitHub, etc.), not that the person behind the account is unique. Sophisticated actors maintain multiple verified accounts across services. + +### MACI (Minimum Anti-Collusion Infrastructure) + +MACI uses zero-knowledge proofs to enable private voting, preventing vote-buying and collusion. It was deployed in GG24's privacy round. MACI addresses a different but related problem: not identity verification but collusion resistance. Even with verified identities, actors can coordinate to game allocation. MACI makes this coordination computationally infeasible. + +### Connection-Oriented Cluster Matching (COCM) + +COCM analyzes the social graph of contributors to detect clusters of coordinated behavior. If a group of accounts consistently donate to the same projects in the same patterns, COCM reduces their collective matching weight. This addresses Sybil behavior without requiring identity verification per se -- it detects coordination patterns that suggest manufactured participants. + +### Biometric Verification + +Worldcoin's iris-scanning approach and similar biometric systems offer the strongest uniqueness guarantee -- it is very difficult to have two different iris scans. But biometric systems face adoption barriers (privacy concerns, hardware requirements, geographic availability) and philosophical objections (centralized biometric databases, exclusion of those unwilling to submit to scanning). + +## The Arms Race Dynamic + +Every improvement in Sybil resistance triggers adaptation by attackers. This is not a problem that gets solved once -- it is an ongoing arms race with a structural asymmetry: defenders must verify every participant, while attackers need only find one exploitable gap. + +The asymmetry worsens as AI matures. Large language models can generate convincing social media profiles, engage in plausible conversation, and build credible-looking activity histories across platforms. The cost of manufacturing a "convincing" identity is declining faster than the cost of detecting manufactured identities. + +This suggests that identity infrastructure must evolve toward: + +1. **Layered verification** combining multiple independent signals (biometric + social + onchain + in-person) so that no single vector is sufficient for manufactured identity +2. **Continuous authentication** rather than one-time verification, so that identity quality is maintained over time rather than front-loaded +3. **Contextual thresholds** where higher-stakes mechanisms require stronger identity verification (light verification for small QF contributions, heavy verification for large allocation votes) +4. **Privacy-preserving proofs** (ZK-based) that verify uniqueness without revealing personal information + +## Implications for the Field + +### For Mechanism Designers + +Stop designing allocation mechanisms in isolation from identity infrastructure. The most mathematically elegant mechanism in the world produces garbage outputs if participants aren't verified. Mechanism design papers should state their identity assumptions explicitly, the way cryptographic protocols state their security assumptions. + +### For Funders + +Invest in identity infrastructure as infrastructure, not as a feature of individual programs. Gitcoin Passport, MACI, and COCM should be funded as ecosystem-wide public goods, not as line items in specific round budgets. The ROI of better identity verification flows to every democratic mechanism simultaneously. + +### For Ecosystem Designers + +The identity layer is the foundation of the funding stack. Building sophisticated allocation mechanisms on weak identity infrastructure is building on sand. Prioritize identity investment over mechanism innovation until the binding constraint loosens. + +## Conclusion + +The Ethereum ecosystem has produced extraordinary innovation in allocation mechanisms -- 76 documented approaches ranging from simple bounties to AI-weighted dependency graph analysis. It has generated abundant capital through L2 treasuries, staking yield, and protocol revenue. It has built composable tooling that allows any community to run a funding program. + +What it has not built, at sufficient maturity, is the identity infrastructure that all democratic mechanisms require. This is the binding constraint. Every dollar invested in better Sybil resistance improves the performance of every democratic funding mechanism simultaneously. Every dollar invested in a new allocation algorithm without corresponding identity infrastructure produces diminishing returns. + +The field's next breakthrough will not be a new way to allocate capital. It will be a new way to verify that participants are real. diff --git a/src/content/research/mechanism-pluralism-survival-requirement.md b/src/content/research/mechanism-pluralism-survival-requirement.md new file mode 100644 index 00000000..6935d844 --- /dev/null +++ b/src/content/research/mechanism-pluralism-survival-requirement.md @@ -0,0 +1,137 @@ +--- +id: '1741267200001' +slug: mechanism-pluralism-survival-requirement +name: "Mechanism Pluralism: Why No Single Funding Model Works" +shortDescription: "A cross-ecosystem analysis showing that monoculture in funding mechanisms is as dangerous as monoculture in agriculture, and why the future belongs to mechanism portfolios." +tags: + - mechanism-design + - pluralism + - quadratic-funding + - retroactive-funding + - governance + - capital-allocation +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - retroactive-funding + - direct-grants + - conviction-voting + - bounties + - milestone-based-funding +relatedApps: + - gitcoin-grants-stack + - optimism-retropgf + - allo-protocol + - gardens +relatedCaseStudies: + - gitcoin-citizens-round-1-retroactive-quadratic-funding-for-community-contributions +relatedResearch: + - plural-funding-mechanisms + - state-of-public-goods-funding-2024 +relatedCampaigns: + - gg24-upcoming +banner: /content-images/research/mechanism-pluralism-survival-requirement/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- After analyzing 76 documented funding mechanisms across the Ethereum ecosystem, the evidence is clear: no single mechanism handles all allocation contexts well. The programs producing the best outcomes -- Optimism, GG24, Protocol Guild -- deliberately compose multiple mechanisms into coherent stacks. Mechanism monoculture creates single points of capture, just as client monoculture creates single points of failure. + +--- + +## The Monoculture Problem + +In agriculture, monoculture -- planting a single crop across vast acreage -- maximizes short-term yield but creates catastrophic fragility. A single pest, a single drought, a single disease can wipe out everything. The Irish Potato Famine, the American Dust Bowl, and the collapse of the Gros Michel banana all follow the same pattern: optimize for one thing, lose everything when conditions change. + +Public goods funding has the same problem. From 2019 to 2023, the Ethereum ecosystem's primary democratic allocation mechanism was quadratic funding. QF was a genuine breakthrough -- Vitalik Buterin and others showed that matching funds based on the number of contributors rather than donation size could approximate optimal public goods provision. Gitcoin alone distributed over $60M through QF rounds. + +But monoculture is monoculture, regardless of whether you're planting corn or deploying smart contracts. QF's failure modes became increasingly apparent: + +- **Popularity bias.** Projects with strong social media presence and existing communities consistently outperformed technically important but less visible work. Deep infrastructure libraries -- the load-bearing code that the entire ecosystem depends on -- received a fraction of what well-marketed consumer apps attracted. +- **Sybil vulnerability.** Any system where participation generates economic value (matching funds, airdrop eligibility, reputation) attracts manufactured participation. The Citizens Round revealed that over 50% of donors were airdrop farming, diluting the democratic signal the mechanism was designed to produce. +- **Temporal blindness.** QF funds promises. It cannot reward demonstrated outcomes, sustain ongoing maintenance work, or provide the predictable cash flow that builders need between rounds. +- **Cognitive overload.** Donors in a QF round face hundreds of projects and lack the technical expertise to evaluate most of them. Rational ignorance becomes the dominant strategy: donate to familiar names, skip the rest. + +None of these are fatal flaws. They're the expected failure modes of any single mechanism operating beyond its design parameters. + +## The Evidence for Pluralism + +### Ethereum Client Diversity + +The strongest analogy comes from Ethereum itself. The network deliberately maintains multiple client implementations -- Geth, Nethermind, Besu, Erigon for execution; Prysm, Lighthouse, Teku, Lodestar, Nimbus for consensus. No single client dominates. This redundancy is not inefficiency; it is the reason Ethereum has never suffered a consensus failure that brought down the entire network. When one client has a bug, the others keep running. + +Mechanism diversity serves the same function. When QF is gamed, retroactive funding can catch what QF missed. When direct grants suffer from committee capture, conviction voting surfaces grassroots priorities. When retroactive evaluation defaults to incumbency bias, prospective QF discovers new projects. + +### GG24: Six Mechanisms in One Round + +Gitcoin Grants 24 (October 2025) was the most ambitious demonstration of mechanism pluralism to date. Six thematic domains ran five-plus distinct mechanisms simultaneously: + +- **Quadratic Funding** for democratic grassroots signal +- **Deep Funding** for AI-weighted dependency graph analysis +- **MACI Private Voting** for collusion-resistant allocation +- **Conviction Voting** for continuous preference expression +- **Retroactive Funding** for rewarding demonstrated impact +- **Hypercerts** for structured impact certification + +Each mechanism covered a different failure mode. QF surfaced community priorities. Deep Funding reached invisible infrastructure dependencies that no human panel could evaluate across a 40,000-edge dependency graph. MACI eliminated bribery and collusion. Conviction voting rewarded sustained commitment over flash coordination. Retroactive funding validated outcomes rather than promises. + +The result: $1.8M distributed with broader coverage across the project lifecycle than any single-mechanism round could achieve. + +### Optimism's Two-House Architecture + +Optimism's governance splits allocation authority between two bodies with fundamentally different legitimacy sources: + +- The **Token House** (token-weighted voting) handles protocol upgrades and treasury allocation -- decisions where economic stake provides appropriate signal. +- The **Citizens' House** (citizenship-based, one-person-one-vote) handles retroactive public goods funding -- decisions where democratic legitimacy matters more than economic weight. + +This is mechanism pluralism at the governance level. Neither house alone produces good outcomes. Token voting concentrates power in large holders; citizenship voting can be captured by popularity dynamics. Together, they check each other's failure modes. + +## The Temporal Portfolio + +Mechanisms divide into three temporal modes, and mature programs deploy all three: + +**Prospective mechanisms** (direct grants, RFPs, QF) fund promises and early-stage work before outcomes are known. They accept higher allocation risk in exchange for enabling new projects to start. Without prospective funding, nothing new gets built. + +**Continuous mechanisms** (conviction voting, token streaming, AutoPGF, percent-for-public-goods) sustain ongoing contributions without episodic application overhead. They provide the steady cash flow builders need to keep working between rounds. Without continuous funding, projects die in the gaps. + +**Retroactive mechanisms** (retro funding, impact certificates, metrics-based voting) reward demonstrated outcomes. They reduce allocation risk and create exit-like incentives for public goods. Without retroactive funding, there's no feedback loop connecting quality to resources. + +Any single temporal mode leaves critical gaps: +- Prospective-only overweights promises and underweights execution. +- Retroactive-only creates cash flow crises that kill projects before they can demonstrate impact. +- Continuous-only lacks evaluative rigor to redirect resources from low-performing to high-performing work. + +The portfolio approach -- prospective to start, continuous to sustain, retroactive to validate -- covers the full project lifecycle. + +## The Democracy-Expertise Tension + +The deepest structural tension in the field runs between democratic legitimacy and evaluative quality. + +Democratic mechanisms (QF, participatory budgeting, conviction voting) surface community preferences and produce broad legitimacy. But they suffer from popularity bias, rational ignorance, and Sybil vulnerability. They're good at identifying what the community *wants* but poor at identifying what the community *needs*. + +Expert mechanisms (direct grants, RFPs, dedicated domain allocation, metrics-based voting) provide deeper evaluation and strategic coherence. But they concentrate power, create capture risk, and exclude grassroots signal. + +No single mechanism resolves this tension. The most promising approaches manage it through composition: + +- Gitcoin runs QF alongside direct grants and retroactive funding. +- Optimism pairs token-weighted governance with citizenship-based governance. +- Arbitrum delegates domain expertise to elected allocators while retaining community governance over the overall framework. + +The pattern is consistent: use democratic mechanisms for legitimacy and grassroots discovery, expert mechanisms for depth and strategic coverage, and retroactive mechanisms for accountability -- all within the same program. + +## Practical Implications + +**For funders:** Don't ask "which mechanism should we use?" Ask "which combination of mechanisms covers the lifecycle of work we're trying to fund?" A well-designed program deploys at least two temporal modes and balances democratic with expert allocation. + +**For mechanism designers:** Design for composability, not dominance. Build mechanisms that work as modules in a larger system rather than total solutions. Allo Protocol's strategy pattern -- where allocation logic can be swapped without rebuilding the surrounding infrastructure -- is the right architectural model. + +**For grantees:** Expect to engage with multiple mechanisms simultaneously. The era of a single annual QF round as the primary funding pathway is over. Build the capacity to demonstrate impact (for retroactive mechanisms), sustain community relationships (for democratic mechanisms), and articulate technical strategy (for expert mechanisms). + +## Conclusion + +Mechanism pluralism is not a value preference. It is a structural requirement for resilient capital allocation, grounded in the same logic that makes client diversity essential for network security. The ecosystem has generated more than enough mechanisms -- 76 and counting. The challenge now is learning which combinations, at which layers, produce the best outcomes for which kinds of contributions. That is a compositional challenge, not a winner-take-all competition. + +The programs that thrive will be the ones that treat mechanism selection as a design variable, not a religious commitment. diff --git a/src/content/research/ocah-volume-1-innovators-edition.md b/src/content/research/ocah-volume-1-innovators-edition.md index ef26961a..6c67eefb 100644 --- a/src/content/research/ocah-volume-1-innovators-edition.md +++ b/src/content/research/ocah-volume-1-innovators-edition.md @@ -26,6 +26,7 @@ relatedResearch: - onchain-capital-allocation-neural-networks-allonets relatedCampaigns: [] banner: /content-images/research/ocah-volume-1-innovators-edition/banner.png +ctaUrl: /content-images/research/ocah-volume-1-innovators-edition/onchain-capital-allocation-v1.pdf --- > **TLDR:** The builder's handbook for onchain capital allocation — covers composability, modular design, and implementation pathways for protocol developers and DAO architects. A technical deep-dive into the mechanisms, primitives, and patterns that make decentralized funding infrastructure work. diff --git a/src/content/research/ocah-volume-2-explorers-edition.md b/src/content/research/ocah-volume-2-explorers-edition.md index 09858101..44e8ad4e 100644 --- a/src/content/research/ocah-volume-2-explorers-edition.md +++ b/src/content/research/ocah-volume-2-explorers-edition.md @@ -26,6 +26,8 @@ relatedResearch: - plural-funding-mechanisms relatedCampaigns: [] banner: /content-images/research/ocah-volume-2-explorers-edition/banner.png +ctaUrl: /content-images/research/ocah-volume-2-explorers-edition/onchain-capital-allocation-v2.pdf + --- > **TLDR:** A practical guide to experimenting with onchain capital allocation for communities and DAOs — covers voting-based, market-driven, and reputation-weighted mechanisms. Less technical theory, more "here's how to actually try this in your community." diff --git a/src/content/research/pathways-to-regeneration.md b/src/content/research/pathways-to-regeneration.md index e5840b71..d1145bcf 100644 --- a/src/content/research/pathways-to-regeneration.md +++ b/src/content/research/pathways-to-regeneration.md @@ -24,6 +24,7 @@ relatedResearch: - biofi-bioregional-finance-web3 relatedCampaigns: [] banner: /content-images/research/pathways-to-regeneration/banner.png +ctaUrl: /content-images/research/pathways-to-regeneration/pathways-to-regeneration.pdf --- **Type:** Book diff --git a/src/content/research/post-capitalist-substrate-of-the-abundance-economy.md b/src/content/research/post-capitalist-substrate-of-the-abundance-economy.md new file mode 100644 index 00000000..d8778d23 --- /dev/null +++ b/src/content/research/post-capitalist-substrate-of-the-abundance-economy.md @@ -0,0 +1,204 @@ +--- +id: '1741353600001' +slug: post-capitalist-substrate-of-the-abundance-economy +name: "Post-Capitalist Substrate of the Abundance Economy" +shortDescription: "How programmable money, protocol-embedded incentives, and networked coordination are assembling the economic grammar for a post-scarcity commons -- not by abolishing markets, but by expanding what counts as value." +tags: + - post-capitalism + - abundance + - coordination + - protocol-economics + - regenerative + - commons + - mechanism-design +researchType: Opinion +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - retroactive-funding + - token-streaming + - community-currencies + - universal-basic-income + - bonding-curves + - retailism-revenue-networks + - harberger-taxes + - gift-circles + - mutual-aid-networks +relatedApps: + - protocol-guild + - octant + - revnets + - flows-wtf + - giveth + - drips +relatedCaseStudies: + - optimism-from-plasma-group-research-to-a-2b-layer-2-ecosystem +relatedResearch: + - protocols-for-postcapitalist-expression + - the-great-interregnum-where-capital-flows-after-institutional-breakdown + - the-wells-are-all-dry-regen-web3-crossroads + - what-nature-can-teach-us-about-allocating-capital + - civilizational-stakes-coordination-capacity + - structural-funding-beyond-grants +relatedCampaigns: + - protocol-guild-ongoing + - thedao-security-fund +banner: /content-images/research/post-capitalist-substrate-of-the-abundance-economy/banner.png +--- + +**Type:** Opinion +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- Capitalism solved the allocation problem for private goods: price signals coordinate production and consumption with remarkable efficiency. But it fails systematically for public goods, commons, care work, ecological regeneration, and anything whose value cannot be captured by the entity that produces it. The Ethereum ecosystem is quietly assembling the substrate for a different economic grammar -- one where value flows to what matters, not just to what's priced. This is not utopian speculation. The primitives exist today: quadratic funding, retroactive rewards, token streaming, protocol-embedded revenue sharing, autonomous treasuries, and community currencies. What's emerging is not the abolition of markets but their completion -- an economy that can finally account for abundance. + +--- + +## The Incompleteness of Capitalism + +Capitalism is the most powerful coordination technology humanity has deployed. Price signals aggregate distributed information. Property rights incentivize investment. Competition drives innovation. Markets enable strangers to cooperate without trust. Two centuries of capitalist coordination have produced material abundance that pre-industrial societies could not have imagined. + +And yet. + +Capitalism has a blind spot the size of the biosphere. It can price a barrel of oil but not a stable climate. It can price a software license but not the open source library it depends on. It can price an hour of labor but not a year of parenting. It can price a financial instrument but not the institutional trust that makes finance possible. + +The technical term is *externalities* -- costs and benefits that fall outside the transaction. But "externality" makes it sound like an edge case, a minor accounting error in an otherwise functional system. The reality is that the externalities are the main event. The atmosphere, the ocean, the topsoil, the open internet, scientific knowledge, public health infrastructure, institutional trust, community cohesion, ecological stability -- these are not externalities to the economy. They *are* the economy. They are the substrate on which all market activity depends. + +Capitalism is not wrong. It is incomplete. It accounts for roughly half of what matters and ignores the rest. The question is not how to abolish it but how to complete it -- how to build an economic system that can account for the full spectrum of value, including the value that markets structurally cannot see. + +## The Eight Forms of Capital + +The incompleteness becomes concrete when you expand the definition of capital beyond money: + +1. **Financial capital** -- money, investments, debt instruments +2. **Material capital** -- physical infrastructure, tools, buildings +3. **Living capital** -- ecosystems, soil, water, biodiversity +4. **Social capital** -- relationships, trust, community bonds +5. **Intellectual capital** -- knowledge, research, open source code +6. **Experiential capital** -- skills, embodied knowledge, tacit understanding +7. **Spiritual capital** -- meaning, purpose, cultural coherence +8. **Cultural capital** -- shared stories, traditions, collective identity + +Capitalism optimizes for form 1 and, to a lesser extent, form 2. Forms 3-8 are either ignored (living capital is depleted for financial return), instrumentalized (social capital is mined for engagement metrics), or actively destroyed (cultural capital is homogenized for market efficiency). + +An abundance economy would optimize across all eight forms simultaneously. Not by central planning -- that approach failed catastrophically in the 20th century -- but by building economic infrastructure that makes the full spectrum of value legible, measurable, and fundable. + +This is exactly what the Ethereum public goods funding ecosystem is doing, whether or not it uses this language. + +## The Primitives Already Exist + +The post-capitalist substrate is not a whitepaper. It is operational infrastructure, deployed on mainnet, moving real capital: + +### Programmable Value Definition + +**What capitalism provides:** Price signals denominated in fiat currency. Value = what someone will pay. + +**What the substrate adds:** Programmable money that can encode values directly into economic flows. Smart contracts that route revenue to public goods (Optimism's sequencer commitment). Bonding curves that mathematically define the relationship between participation and value. Revnets that create autonomous, immutable treasuries with rules no one can change. Harberger taxes that prevent monopolistic hoarding while generating public revenue. + +The key innovation is that value definitions are no longer implicit in market transactions -- they are *explicit in code*. When Optimism commits sequencer revenue to public goods, it is writing a value statement into protocol economics: "the infrastructure this protocol depends on deserves ongoing investment." When Protocol Guild distributes to core contributors weighted by tenure, it is encoding a value: "sustained commitment to shared infrastructure is worth more than transient contribution." + +These are not charitable afterthoughts bolted onto a capitalist system. They are alternative economic grammars -- ways of defining and routing value that capitalism's price mechanism cannot express. + +### Democratic Resource Allocation + +**What capitalism provides:** Dollar voting. Resources flow to whoever has the most money to spend. + +**What the substrate adds:** Quadratic funding, where breadth of support matters more than depth of any single wallet. Conviction voting, where sustained commitment outweighs flash coordination. Retroactive funding, where demonstrated impact is rewarded regardless of who funded it. Participatory budgeting, where communities collectively decide how shared resources are allocated. + +Each of these is a different answer to the question "how should resources flow?" -- and each answer encodes a different value system. QF encodes "many people caring a little is worth more than one person caring a lot." Retroactive funding encodes "what you did matters more than what you promised." Conviction voting encodes "persistence signals genuine preference." + +Capitalism has one answer: resources flow to the highest bidder. The substrate provides dozens. + +### Continuous Value Flows + +**What capitalism provides:** Episodic transactions. You pay once, you receive once. The relationship is discrete. + +**What the substrate adds:** Token streaming that distributes value second-by-second (Sablier, Superfluid, Drips). Flows.wtf routing continuous funding to community-curated recipients. Protocol Guild vesting contributions over four years. Octant cycling staking yield through community governance every 90 days. + +Continuous flows are a fundamentally different economic relationship than discrete transactions. They model ongoing contribution and ongoing compensation -- the actual pattern of most meaningful work. A core developer doesn't produce value in discrete units. They contribute continuously, and the compensation infrastructure should match. + +Streaming also enables a different relationship to abundance. In a transaction-based economy, every transfer is a zero-sum event: my dollar becomes your dollar. In a streaming economy, value flows continuously from sources (protocol revenue, staking yield, MEV) through networks (dependency graphs, curated registries, governance processes) to recipients -- more like a watershed than a ledger. + +### Commons-Native Ownership + +**What capitalism provides:** Private property and corporate equity. You own it or you don't. + +**What the substrate adds:** Impact certificates (hypercerts) that represent verified public contribution. Protocol ownership distributed across all contributors (Protocol Guild). Token-curated registries where communities collectively maintain shared resources. CC0/public domain IP (Nouns DAO) where value accrues to the commons rather than to intellectual property holders. + +These are ownership models that capitalism doesn't have a category for. A hypercert is not equity (it doesn't grant control over the project) and it's not a receipt (it represents ongoing impact, not a completed transaction). It's a new primitive: ownership of verified public benefit. It creates a market for public goods contribution -- not by privatizing the goods, but by making the *act of contributing* legible and tradeable. + +### Regenerative Feedback Loops + +**What capitalism provides:** Extractive feedback loops. Success is measured by financial return. Successful extraction enables more extraction. The feedback loop depletes its own substrate (natural resources, social trust, institutional capacity). + +**What the substrate adds:** The grantee-to-funder flywheel, where funded projects become funders. Funding cascades, where retroactive funds flow downstream through ecosystem layers. Percent-for-public-goods commitments, where protocol usage automatically generates public goods funding. Community currencies that keep value circulating locally rather than extracting it to distant capital markets. + +The critical difference is directionality. Capitalist feedback loops concentrate: wealth begets wealth, scale begets scale, extraction begets extraction. Abundance feedback loops distribute: funding begets funders, public goods beget more public goods, ecosystem health begets more ecosystem health. + +Optimism's flywheel is the clearest example: sequencer revenue funds public goods, which improve the ecosystem, which drives more usage, which generates more sequencer revenue. The loop is regenerative -- each cycle strengthens the substrate rather than depleting it. + +## What This Is Not + +### Not Central Planning + +The 20th century's attempt at post-capitalism -- state socialism -- failed because it replaced price signals with bureaucratic allocation. The result was information destruction on a massive scale. Without prices, planners couldn't know what to produce, in what quantities, for whom. + +The substrate described here doesn't replace price signals. It *supplements* them with additional coordination mechanisms that cover the domains where prices fail. Markets continue to coordinate private goods. QF coordinates public goods. Retroactive funding coordinates commons maintenance. Streaming coordinates ongoing contribution. Each mechanism handles what it's good at. + +This is mechanism pluralism applied to economic systems: no single coordination technology handles everything, and the goal is a portfolio that covers the full spectrum of value. + +### Not Degrowth + +The abundance economy is not about producing less. It's about producing *differently* -- expanding the definition of production to include ecological regeneration, community building, knowledge creation, and institutional maintenance. An economy that accounts for all eight forms of capital would likely produce *more* total value than one that optimizes for financial capital alone, because it would stop destroying the substrate (living capital, social capital) on which financial production depends. + +Abundance is not about having more stuff. It's about having enough of what matters -- including the things that markets currently can't see. + +### Not Charity + +The post-capitalist substrate is not a system where productive people subsidize unproductive ones. It is a system where the full range of productive activity -- including the activity that capitalism structurally ignores -- is recognized, measured, and compensated. + +When Protocol Guild compensates core developers, that's not charity. It's recognition that Ethereum's $300B+ market cap depends on infrastructure maintained by people earning 50-60% below market rates. When Optimism funds public goods from sequencer revenue, that's not philanthropy. It's rational infrastructure investment. When community currencies compensate care work, that's not welfare. It's accurate accounting of work that was always productive but never priced. + +The shift is from "charity for the deserving" to "accurate compensation for actual value creation." + +## The Grammar of Abundance + +Programming languages have grammars -- rules for expressing computation. Economic systems have grammars too -- rules for expressing value, ownership, exchange, and obligation. + +Capitalism's grammar is powerful but limited: +- **Nouns:** property, equity, debt, currency +- **Verbs:** buy, sell, invest, earn +- **Adjectives:** profitable, efficient, competitive, scarce + +The substrate adds new vocabulary: +- **Nouns:** commons, impact certificate, public good, attestation, stream, dependency graph +- **Verbs:** fund retroactively, stream continuously, match quadratically, curate collectively, vest over time +- **Adjectives:** regenerative, composable, pluralistic, abundant, antifragile + +This is not metaphorical. Smart contracts are literally economic grammar -- formal rules for how value moves, who decides, and what counts. Every Allo Protocol strategy, every Revnet configuration, every QF matching formula is a grammatical rule in an emerging economic language. + +The language is still early. The vocabulary is growing but incomplete. The grammar has inconsistencies and gaps. But the direction is clear: an economic language capable of expressing value in all its forms, not just the forms that fit in a price tag. + +## The Transition Path + +The substrate doesn't replace capitalism overnight. It grows alongside it, handling an expanding share of coordination as its tools mature: + +**Phase 1 (2019-2024): Proof of concept.** QF works. Retroactive funding works. Streaming works. Protocol revenue commitments work. The mechanisms produce real outcomes with real capital. $500M+ distributed. The question "does this work?" is answered. + +**Phase 2 (2025-2028): Infrastructure maturation.** Identity systems reach sufficient Sybil resistance. Impact measurement becomes data-driven. Composable tooling (Allo Protocol, Drips, Karma GAP) enables any community to assemble funding programs. AI-assisted allocation (Deep Funding) scales evaluation beyond human limits. The substrate becomes reliable enough for mainstream adoption. + +**Phase 3 (2028-2035): Domain expansion.** The mechanisms proven on Ethereum public goods funding expand to adjacent domains: climate (retroactive carbon credits), science (streaming research funding), governance (quadratic participatory budgeting), care work (community currencies for domestic labor), local infrastructure (bioregional finance). Each domain adapts the primitives to its context. + +**Phase 4 (2035+): Economic grammar shift.** The substrate handles enough economic coordination that the default assumption shifts. "How will this be funded?" is answered not by "find a buyer" or "apply for a grant" but by "which combination of mechanisms fits this kind of value?" The post-capitalist economy is not declared but gradually instantiated, one protocol at a time. + +## Conclusion + +The abundance economy is not a destination. It is a direction -- away from an economic system that can only see half of what matters, toward one that can see all of it. Away from coordination that works only for private goods, toward coordination that works for the full spectrum of human value. Away from feedback loops that deplete their own substrate, toward loops that regenerate it. + +The substrate is being built. Not in manifestos or policy papers, but in smart contracts and protocol designs and community practices. Quadratic funding, retroactive rewards, token streaming, autonomous treasuries, impact certificates, community currencies, protocol revenue commitments -- these are not experiments waiting for validation. They are operational infrastructure, moving billions, serving millions, and expanding the economic grammar one primitive at a time. + +Capitalism's great achievement was making private value legible through prices. The substrate's great project is making *all* value legible -- public goods, commons, care, ecology, knowledge, community, meaning -- and building the economic infrastructure to fund it. + +The economy of abundance is not post-scarcity in the naive sense of unlimited material goods. It is post-scarcity in the deeper sense of an economic system that no longer treats the most important things as externalities. An economy that can finally see what matters, and fund it accordingly. + +That economy is not coming. It is being compiled, one block at a time. diff --git a/src/content/research/public-goods-funding-five-layer-stack.md b/src/content/research/public-goods-funding-five-layer-stack.md new file mode 100644 index 00000000..8ff36020 --- /dev/null +++ b/src/content/research/public-goods-funding-five-layer-stack.md @@ -0,0 +1,157 @@ +--- +id: '1741267200006' +slug: public-goods-funding-five-layer-stack +name: "The Five-Layer Stack: An Architecture for Public Goods Funding" +shortDescription: "Public goods funding operates as a multi-layer stack -- formation, allocation, execution, attribution, and accountability. Every failed program has a gap in one of these layers." +tags: + - architecture + - infrastructure + - capital-allocation + - mechanism-design + - composability +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - retroactive-funding + - direct-grants + - token-streaming + - milestone-based-funding + - attestation-based-funding + - impact-attestations +relatedApps: + - allo-protocol + - karma-gap + - open-source-observer + - sablier + - superfluid + - drips +relatedCaseStudies: [] +relatedResearch: + - allo-protocol-ecosystem-analysis + - plural-funding-mechanisms + - state-of-public-goods-funding-2024 +relatedCampaigns: + - gg24-upcoming +banner: /content-images/research/public-goods-funding-five-layer-stack/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- Public goods funding is not a single problem with a single solution. It is a stack of five interdependent layers: formation (where does money come from?), allocation (who decides who gets funded?), execution (how does money move?), attribution (who did what?), and accountability (did it work?). Every failed or underperforming funding program can be diagnosed as having a gap in one of these layers. The most effective programs -- Optimism, Protocol Guild, GG24 -- are the ones that have assembled coherent stacks across all five. + +--- + +## The Insight + +When a funding program underperforms, the diagnosis usually focuses on the allocation mechanism: "QF doesn't work for infrastructure," "direct grants are too centralized," "retroactive funding has incumbency bias." These diagnoses are often correct but incomplete. They identify a problem in one layer while ignoring gaps in others. + +Consider: quadratic funding without Sybil resistance produces farmed outcomes. This is typically diagnosed as a QF problem, but it's actually an *attribution* problem -- the system can't verify who participants are. Direct grants without milestone tracking produce accountability gaps -- not an allocation problem but an *execution* problem. Retroactive funding without impact data produces popularity contests -- not an allocation problem but an *attribution* problem. + +The field needs a diagnostic framework that identifies which layer is failing, not just which mechanism to blame. + +## The Five Layers + +### Layer 1: Formation + +**Question:** Where does the money come from? + +This is the capital supply layer. Without it, nothing else matters. + +**Mechanisms:** Treasury allocations, protocol fees, staking yield, MEV redirection, bonding curves, auctions, taxes, percent-for-public-goods commitments, crowdfunding, donations. + +**Current state:** This layer has seen the most dramatic improvement. L2 treasuries (Arbitrum, Optimism, Polygon, Scroll) have committed hundreds of millions in tokens. Endowment models (Octant, TheDAO Security Fund) generate renewable yield. Protocol Guild receives ongoing revenue splits. The formation layer is no longer the binding constraint for most programs. + +**Common gap:** Programs that depend on one-time treasury allocations without renewable sources. When the treasury runs out, the program dies regardless of how well the other layers function. + +### Layer 2: Allocation + +**Question:** Who decides who gets funded? + +This is the decision layer -- the most studied and debated layer in the field. + +**Mechanisms:** Quadratic funding, retroactive funding, direct grants, conviction voting, metrics-based voting, AI-assisted evaluation (Deep Funding), participatory budgeting, ranked-choice voting, MACI private voting. + +**Current state:** The most mechanism-rich layer, with 76+ documented approaches. The field has more allocation mechanisms than it can effectively deploy. The challenge is not mechanism scarcity but mechanism selection -- matching the right mechanism to the right context. + +**Common gap:** Using a single allocation mechanism for all contexts. QF is excellent for grassroots discovery but poor for deep infrastructure. Direct grants are excellent for strategic priorities but poor for democratic legitimacy. The gap is not in any individual mechanism but in the failure to compose multiple mechanisms. + +### Layer 3: Execution + +**Question:** How does money actually move? + +This is the disbursement and delivery layer -- often overlooked in mechanism design discussions but critical for program effectiveness. + +**Mechanisms:** Lump-sum grants, milestone-based disbursement, token streaming (Sablier, Superfluid, Drips), vesting schedules (Protocol Guild's 4-year vesting), aqueducts (continuous routing between organizations). + +**Current state:** Rapidly maturing. Token streaming protocols (552,000+ streams on Sablier alone, 297,500+ users) have made continuous disbursement technically trivial. Milestone-based tools (Karma GAP) enable conditional release based on verified deliverables. The execution layer is increasingly composable. + +**Common gap:** Programs that distribute large lump sums with no milestone tracking or accountability mechanism. The capital leaves the program's control immediately, and there is no feedback loop connecting delivery to funding. Also: programs that use episodic disbursement (quarterly grants) when continuous streaming would better match the contribution pattern. + +### Layer 4: Attribution + +**Question:** Who are the participants, and what did they do? + +This is the identity and impact data layer -- the layer that determines whether the other layers can function correctly. + +**Mechanisms:** Decentralized identity (Gitcoin Passport, Worldcoin), attestations (EAS, Karma GAP), impact certificates (hypercerts), impact analytics (Open Source Observer), dependency mapping (Deep Funding, Tea Protocol's teaRank), peer recognition (Praise, SourceCred, Coordinape). + +**Current state:** The weakest layer in the stack and the binding constraint for most programs. Identity infrastructure can detect roughly 60% of Sybil activity, leaving significant attack surface. Impact measurement is improving through Open Source Observer and similar tools but remains inadequate for qualitative, creative, and emergent contributions. + +**Common gap:** Programs that run sophisticated allocation mechanisms on weak identity and impact data. The allocation algorithm is only as good as the data it operates on. QF without identity verification produces gamed results. Retroactive funding without impact data produces popularity contests. Metrics-based voting without comprehensive metrics produces narrow outcomes. + +### Layer 5: Accountability + +**Question:** Did the funded work actually happen, and did it matter? + +This is the feedback layer -- the one that closes the loop between funding and outcomes. + +**Mechanisms:** Onchain milestone attestations (Karma GAP), impact reporting, round retrospectives, outcome evaluation, community feedback loops. + +**Current state:** The newest and least mature layer. Karma GAP is adopted across 7+ major programs (Arbitrum, Gitcoin, Optimism, Octant, Celo, Scroll, Lisk), providing the first standardized approach to grantee accountability. But most programs still operate in a "fund and forget" mode with no systematic outcome tracking. + +**Common gap:** Programs that invest heavily in allocation (Layer 2) but have no mechanism for evaluating whether funded work was delivered or impactful. Without accountability, there is no feedback loop to improve allocation over time. Each round starts from scratch rather than building on lessons from previous rounds. + +## Diagnostic Framework + +Any funding program can be analyzed by identifying which layers are present, which are absent, and which are weakest: + +| Program | Formation | Allocation | Execution | Attribution | Accountability | +|---------|-----------|------------|-----------|-------------|----------------| +| **Optimism RetroPGF** | Strong (sequencer revenue) | Strong (retro + metrics) | Moderate (lump sum) | Moderate (badgeholders + OSO) | Weak | +| **Protocol Guild** | Strong (revenue splits) | Strong (self-curated) | Strong (4yr vesting) | Strong (core dev verification) | Moderate | +| **GG24** | Moderate (matching pools) | Strong (6 mechanisms) | Moderate (varies by domain) | Moderate (Passport + COCM) | Moderate (Karma GAP) | +| **Typical Foundation** | Variable | Moderate (committee review) | Weak (lump sum) | Weak (application only) | Weak | +| **Typical DAO Treasury** | Strong (token treasury) | Weak (governance voting) | Weak (lump sum) | Weak (address only) | None | + +The diagnostic reveals that most programs invest disproportionately in Layer 2 (allocation) while underinvesting in Layers 4 (attribution) and 5 (accountability). The best programs -- Protocol Guild, GG24, Optimism -- have the most balanced coverage across all five layers. + +## Composability: The DeFi Analogy + +DeFi's breakthrough was not any individual protocol but the composable stack: lending protocols, DEXes, aggregators, and oracles that snap together through shared standards (ERC-20, ERC-721). A yield farming strategy might touch Aave, Uniswap, Yearn, and Chainlink in a single transaction. Each protocol is a module in a larger system. + +Public goods funding is building the same composable architecture: + +- **Formation:** Octant (yield), Nouns (auctions), Optimism (revenue), Revnets (autonomous) +- **Allocation:** Allo Protocol (modular strategies), Gardens (conviction voting), Deep Funding (AI-assisted) +- **Execution:** Sablier, Superfluid, Drips (streaming); Karma GAP (milestone-based) +- **Attribution:** Gitcoin Passport (identity), EAS (attestations), Open Source Observer (impact data), Tea Protocol (dependency ranking) +- **Accountability:** Karma GAP (milestone tracking), hypercerts (impact certification) + +These layers are increasingly open, composable, and permissionless. Any community can assemble a funding program from these components without building from scratch. This is the infrastructure that made GG24's six simultaneous mechanisms possible. + +## Implications + +**For program designers:** Use the five-layer framework as a checklist. Before launching a funding program, ensure you have a credible answer for each layer. The weakest layer will determine overall program quality, regardless of how strong the others are. + +**For infrastructure builders:** Identify which layer has the least mature tooling and build there. Currently, that's attribution (identity + impact data) and accountability (outcome tracking). These are the highest-leverage infrastructure investments. + +**For the ecosystem:** Stop debating which allocation mechanism is best. Start building the attribution and accountability infrastructure that makes all mechanisms work better. A mediocre allocation algorithm on excellent identity and impact data will outperform a brilliant allocation algorithm on garbage data. + +## Conclusion + +Public goods funding is a stack, not a mechanism. The field's long debate about "QF vs. retro vs. direct grants" has been asking the wrong question -- it's like debating whether lending or trading is more important for DeFi. The answer is that both are layers in a stack, and the stack's performance depends on all layers functioning together. + +The diagnostic power of the five-layer model is that it directs attention to actual gaps rather than ideological preferences. When a program fails, the question is not "which mechanism should we switch to?" but "which layer is weakest, and how do we strengthen it?" That reframing -- from mechanism selection to stack completion -- is the conceptual shift the field needs. diff --git a/src/content/research/retroactive-funding-most-scalable-pattern.md b/src/content/research/retroactive-funding-most-scalable-pattern.md new file mode 100644 index 00000000..94847243 --- /dev/null +++ b/src/content/research/retroactive-funding-most-scalable-pattern.md @@ -0,0 +1,150 @@ +--- +id: '1741267200004' +slug: retroactive-funding-most-scalable-pattern +name: "Retroactive Funding: The Most Scalable New Pattern in Public Goods" +shortDescription: "How retroactive public goods funding traveled from Optimism to Filecoin to Celo to Pocket Network, and why its properties make it the most generalizable mechanism to emerge from the Ethereum ecosystem." +tags: + - retroactive-funding + - optimism + - scalability + - impact-measurement + - grants +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - retroactive-funding + - impact-certificates-hypercerts + - quadratic-funding +relatedApps: + - optimism-retropgf + - drips + - deep-funding + - open-source-observer +relatedCaseStudies: + - gitcoin-citizens-round-1-retroactive-quadratic-funding-for-community-contributions + - optimism-from-plasma-group-research-to-a-2b-layer-2-ecosystem +relatedResearch: + - retropgf-impact-measurement-evolution + - state-of-public-goods-funding-2024 +relatedCampaigns: + - gitcoin-grants-23-gg23 + - gg24-upcoming +banner: /content-images/research/retroactive-funding-most-scalable-pattern/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- Retroactive funding -- allocating capital based on demonstrated outcomes rather than proposals -- has become the most widely adopted new mechanism in public goods funding. Its spread from Optimism (60M+ OP) to Filecoin (1M+ FIL) to Celo to Pocket Network demonstrates genuine portability. Three properties drive its scalability: lower cognitive cost, open-source tooling, and cascade dynamics. But incumbency bias, evaluation quality, and cash-flow timing remain unsolved challenges. + +--- + +## The Core Insight + +Vitalik Buterin articulated the retroactive funding thesis in 2021: it is easier to agree on what was useful than to predict what will be useful. This seemingly simple observation has profound implications for mechanism design. + +Prospective funding requires evaluators to predict the future. Will this team execute? Will this technology work? Will this research matter? These predictions are cognitively expensive, unreliable, and biased toward legible narratives over genuine technical merit. The history of venture capital, government grants, and foundation funding is littered with confident predictions that proved wrong in both directions -- funding projects that failed and ignoring projects that succeeded. + +Retroactive funding inverts the prediction problem. Instead of asking "will this work?", it asks "did this work?" The evaluation challenge doesn't disappear, but it shifts from prediction (hard, unreliable) to assessment (hard, but more tractable). + +## The Diffusion Evidence + +### Optimism: The Pioneer + +Optimism committed 850M OP tokens (20% of total supply) to retroactive public goods funding, making it the largest single allocation to public goods in the Ethereum ecosystem. Through successive rounds, the program has distributed 60M+ OP tokens. + +The evolution across rounds reveals rapid learning: + +- **Round 3** (2023): Broad scope, badgeholder evaluation, significant debate about criteria. Revealed that wide-open evaluation leads to popularity-based allocation. +- **Round 4** (2024): Introduced metrics-based voting via Open Source Observer. Voters weighted quantitative impact metrics rather than evaluating projects individually. This scaled evaluation to hundreds of projects. +- **Rounds 5-6** (2025): Narrower scope per round, more structured evaluation frameworks, deeper integration of onchain impact data. Demonstrated that constraining the evaluation space improves outcome quality. + +The trend is clear: each round narrowed scope, improved measurement, and moved from subjective to data-informed evaluation. + +### Filecoin: Portability Proven + +Filecoin's FIL-RetroPGF program grew across three rounds: +- Round 1: 200,000 FIL +- Round 2: 270,000 FIL +- Round 3: 585,000 FIL (migrated to Drips for streaming distribution) + +Total: 1,055,000 FIL across nearly 200 unique projects. + +Three observations matter: + +First, **the mechanism traveled.** Filecoin is a different ecosystem with different governance, different values, different infrastructure priorities. The fact that retroactive funding worked there demonstrates that the mechanism is not Optimism-specific but genuinely generalizable. + +Second, **the tooling scaled.** By Round 3, Filecoin migrated its entire pipeline to the Drips protocol, demonstrating that open-source infrastructure makes adoption efficient. No custom-built tooling required. + +Third, **incumbency bias appeared immediately.** Round 2 saw 92% of funds going to returning applicants. This is the most important warning sign for retroactive funding: "did this work?" can easily collapse into "do I recognize this project?" + +### Celo: Lightweight Adoption + +CeloRPGF0 distributed 250,000 CELO to 89 projects using Gitcoin's open-source EasyRetroPGF platform. The round was paired with parallel QF rounds through Grants Stack, creating complementary prospective and retroactive signals. + +The Celo case demonstrates that retroactive funding can be adopted by smaller ecosystems without heavy infrastructure investment. EasyRetroPGF dramatically lowered the barrier -- from months of custom development to weeks of configuration. + +### Pocket Network: The Cascade + +Pocket Network allocated $475,000 in POKT, OP, and ARB tokens through its own RetroPGF, built on EasyRetroPGF. The critical innovation: Pocket Network had itself received retroactive funds from Optimism. It chose to redistribute a portion of those funds through its own retroactive program, targeted at its specific middleware community. + +This created a **funding cascade** -- retroactive funds flowing from a large ecosystem (Optimism) through a mid-layer protocol (Pocket Network) to specialized contributors who would have been invisible to the top-level program. The cascade model suggests that retroactive funding can propagate down the ecosystem stack, reaching granularity that no single program could achieve alone. + +## Why It Scales: Three Properties + +### 1. Lower Cognitive Cost + +Evaluating demonstrated impact is cognitively cheaper than predicting future value, for three reasons: + +- **Observable outcomes** replace hypothetical ones. You can see the code, measure the usage, read the research. You don't have to imagine it. +- **Consensus is easier on the past.** People disagree about the future but converge more readily on what has already happened. This enables broader participation -- the Citizens Round attracted 17,000 donors; Filecoin's applicant pool expanded across rounds. +- **Metrics can substitute for judgment.** Open Source Observer's integration into Optimism's process demonstrates that quantitative impact data can scale evaluation beyond what human panels can handle. + +### 2. Open-Source Tooling + +EasyRetroPGF and Drips allow any ecosystem to run credible retroactive rounds without building custom infrastructure. This amortizes development costs across the entire space. The Celo and Pocket Network adoptions were measured in weeks, not months. + +The tooling advantage compounds: each new deployment generates learnings that improve the tools for the next deployment. Filecoin's migration to Drips for streaming distribution became a template for future programs. The infrastructure is maturing faster than any single organization could drive. + +### 3. Cascade Dynamics + +The Pocket Network model suggests a fractal pattern: large ecosystem programs fund mid-layer protocols, which run their own retroactive programs for specialized contributors, which could (in principle) cascade further down. + +This cascade addresses the fundamental information problem in public goods funding: no top-level funder has the domain knowledge to evaluate contributors at every layer of the stack. But if retroactive funds flow down through ecosystem-specific programs, each layer evaluates within its own domain of expertise. + +## The Unsolved Challenges + +### Incumbency Bias + +Filecoin Round 2's 92% return-applicant funding rate is not an anomaly -- it's a structural tendency. "What was useful?" often reduces to "what do I already know about?" Established projects have track records, visibility, and social capital that newer projects lack. Without active countermeasures, retroactive funding will concentrate in incumbent projects, creating the same stagnation it was designed to prevent. + +Partial mitigations include: +- Category-specific evaluation (separating established infrastructure from emerging projects) +- Structured impact data (hypercerts, Open Source Observer) that makes lesser-known work visible +- Expanded evaluator sets that bring diverse domain expertise +- Dedicated discovery mechanisms (QF, grants) that feed new projects into the retroactive pipeline + +### Cash Flow Timing + +Retroactive funding rewards work after it's done. But work requires resources while it's being done. A builder who spends six months on critical infrastructure and then applies for retroactive funding has carried six months of uncompensated risk. For well-resourced teams, this is manageable. For independent contributors and small teams, it's a barrier to entry. + +The portfolio approach addresses this: prospective mechanisms (grants, QF) fund early-stage work; continuous mechanisms (streaming, conviction voting) sustain ongoing effort; retroactive mechanisms validate outcomes. No single temporal mode covers the full lifecycle. + +### Evaluation Quality + +"Easier to agree on what was useful" is a relative claim, not an absolute one. Retroactive evaluation still requires judgment about what counts as impact, how to weight different kinds of contribution, and how to handle work whose value is diffuse or delayed. The Citizens Round revealed that popularity and social capital influenced outcomes more than demonstrated impact -- even in a retroactive context. + +Metrics-based approaches (Optimism RF4, Open Source Observer) improve evaluation rigor but introduce their own risks: Goodhart's Law (optimizing for metrics rather than impact), narrow definitions that miss qualitative contributions, and data availability bias (funding what's measurable over what's meaningful). + +## The Trajectory + +Retroactive funding is no longer experimental. It is operational infrastructure used across multiple ecosystems with combined allocations exceeding $100M. The mechanism's trajectory suggests it will become a standard component of ecosystem governance -- as routine as direct grants or QF rounds. + +The next frontier is not whether retroactive funding works, but how to make it work better: +- **Better measurement** through impact certificates (hypercerts) and AI-assisted evaluation (Deep Funding) +- **Better timing** through integration with prospective and continuous mechanisms +- **Better reach** through cascade dynamics and expanded evaluator diversity +- **Better resistance** to incumbency bias through structured discovery mechanisms + +The programs that get this right will fund public goods at a scale and accuracy that neither prospective grants nor democratic matching can achieve alone. diff --git a/src/content/research/signal-as-important-as-capital.md b/src/content/research/signal-as-important-as-capital.md new file mode 100644 index 00000000..53f5f0e2 --- /dev/null +++ b/src/content/research/signal-as-important-as-capital.md @@ -0,0 +1,137 @@ +--- +id: '1741267200002' +slug: signal-as-important-as-capital +name: "The Signal Is as Important as the Capital" +shortDescription: "How quadratic funding rounds produce democratic preference data that is independently valuable for governance, legitimacy, and institutional decision-making -- often more so than the dollars distributed." +tags: + - quadratic-funding + - governance + - legitimacy + - signal + - democratic + - coordination +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - quadratic-funding + - quadratic-voting + - attestation-based-funding + - impact-attestations +relatedApps: + - gitcoin-grants-stack + - optimism-retropgf +relatedCaseStudies: + - eip-1559-how-quadratic-funding-legitimized-ethereum-s-most-important-fee-market-reform + - coin-center-defending-cryptocurrency-rights-through-community-funded-advocacy + - optimism-from-plasma-group-research-to-a-2b-layer-2-ecosystem + - unicef-alpha-round-partnership-driving-fairness-collaboration-impact +relatedResearch: + - quadratic-funding-sybil-resistance + - plural-funding-mechanisms +relatedCampaigns: + - gitcoin-grants-23-gg23 +banner: /content-images/research/signal-as-important-as-capital/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- Quadratic funding rounds are commonly evaluated by how many dollars they distribute. This misses at least half their value. The democratic preference data QF generates -- who the community believes is doing valuable work, and how broadly that belief is held -- is an independent public good that has legitimized contested protocol changes, strengthened policy advocacy, sustained builder motivation, and demonstrated to traditional institutions that community-driven allocation works. + +--- + +## Beyond the Matching Pool + +When we evaluate a QF round, we typically look at the numbers: matching pool size, number of projects funded, total contributions. GG23 distributed $1.4M. GG24 distributed $1.8M. Optimism RetroPGF has allocated 60M+ OP tokens. These are meaningful numbers. + +But they miss something fundamental. Across a decade of case studies, the non-financial outputs of funding rounds have repeatedly proven as consequential as the capital itself -- and sometimes more so. + +## Four Cases Where Signal Outweighed Capital + +### EIP-1559: Democratic Legitimacy for Protocol Reform + +In July 2020, the EIP-1559 Community Fund became the top grant in Gitcoin Grants Round 6, raising $65,473 from 412 contributors. The money funded client implementations and economic analysis -- useful, but not transformative. + +What was transformative was the *signal*. EIP-1559 proposed burning a portion of transaction fees rather than paying them entirely to miners -- a change that would directly reduce miner revenue. Miners opposed it. The standard governance mechanism for resolving such disputes was coin voting, which concentrates power in large holders and provides no measure of democratic breadth. + +The 412 QF contributors produced something coin voting could not: a credible, non-plutocratic measure of community demand. Each contribution, regardless of size, counted as evidence that a real person wanted this change. The quadratic formula ensured that breadth of support mattered more than depth of any single wallet. + +This signal helped legitimize EIP-1559 through the governance process despite significant opposition. The mechanism's democratic properties -- weighting breadth over depth, requiring actual transactions rather than just token holdings -- made it a more credible gauge of community will than any vote-by-token-balance could be. + +**The insight:** QF provided governance legitimacy that no other available mechanism could. The $65K in funding was useful; the democratic mandate was essential. + +### Coin Center: Quantifiable Ecosystem Support + +Coin Center, a nonprofit cryptocurrency policy advocacy organization, raised over $1 million from 11,000+ contributors through Gitcoin QF rounds between 2020 and 2023. For a policy organization, the money mattered -- it funded litigation, regulatory engagement, and research. + +But the 11,000 contributors mattered more. When Coin Center engaged with policymakers, media, and institutional donors, it could point to quantifiable evidence of broad community support. "Eleven thousand people in the Ethereum ecosystem contributed to our work" is a fundamentally different statement than "We received a grant from a foundation." + +The contributor count served as a credibility multiplier: +- With **policymakers**, it demonstrated that Coin Center represented a real constituency, not just a well-funded lobby. +- With **traditional donors**, it provided social proof that the community valued the work, reducing the perceived risk of philanthropic investment. +- With **media**, it offered a tangible metric for the ecosystem's commitment to policy engagement. + +**The insight:** QF's breadth metric became an institutional asset -- a quantifiable measure of democratic support that strengthened Coin Center's hand across every relationship where legitimacy matters. + +### Plasma Group: Validation as Sustenance + +Plasma Group, a five-person nonprofit researching Ethereum scalability, received early QF funding through Gitcoin Grants Rounds 1-4 in 2019. The amounts were modest -- enough to sustain the team through a period of unfunded research, but not enough to compete with venture-backed alternatives. + +The team later cited community validation as *equally important* to the capital in sustaining motivation during this period. Working on cutting-edge scalability research with no clear path to revenue, the signal that hundreds of community members valued the work enough to contribute provided the social legitimacy that kept the team together. + +Plasma Group eventually became Optimism -- a Layer 2 network with $2B+ in value locked, which has since contributed back to Gitcoin's matching pools and launched its own 850M OP retroactive funding program. + +**The insight:** For pre-product teams working in the gap between "too public for venture capital" and "too early for foundation grants," community validation can be the difference between persistence and dissolution. The signal sustained the team; the team built a $2B ecosystem. + +### UNICEF: Institutional Proof of Concept + +UNICEF's Office of Innovation partnered with Gitcoin to run a QF pilot for Digital Public Goods Alliance projects. The round attracted 15,500+ unique donors who contributed 67.5 ETH and ~15,000 DAI -- with individual donations *exceeding* the matching pool. + +For UNICEF, the monetary outcome was secondary. What mattered was demonstrating that community-driven allocation could produce different -- and in some respects superior -- signal to committee-based grantmaking. The pilot showed a traditional institution that transparent, democratic funding mechanisms could: + +1. Surface community priorities that internal committees missed +2. Generate measurably broader participation than typical institutional processes +3. Produce allocation decisions that correlated with, but were not identical to, expert assessment + +**The insight:** QF served as a proof of concept for institutional adoption of democratic allocation. The signal it generated was the product UNICEF was evaluating, not a byproduct. + +## The Preference Data as Public Good + +These cases point to a general principle: **QF rounds produce a dataset of community preferences that is independently valuable.** + +This dataset has specific properties: +- **Sybil-weighted breadth:** The quadratic formula ensures that the signal reflects genuine breadth of support, not the depth of any single contributor's wallet. +- **Revealed preference:** Contributors back their stated preferences with actual transactions, making the data more reliable than surveys or polls. +- **Granular attribution:** Each contribution is linked to an address (and, with identity tools like Gitcoin Passport, to a verified person), enabling analysis of who supports what. +- **Temporal resolution:** Round-over-round data reveals how community priorities shift over time. + +This preference data serves multiple downstream functions: + +**Governance input.** When contentious decisions arise, QF contribution patterns provide a democratic signal that complements token-weighted voting. EIP-1559 demonstrated this directly. + +**Credentialing and reputation.** Projects with broad QF support gain a verifiable credential of community trust. This credential is useful in contexts far beyond the round itself -- fundraising, hiring, partnership negotiations. + +**Institutional intelligence.** Foundations, DAOs, and traditional institutions can use QF signal to identify blind spots in their own allocation. If a project receives broad community support but no institutional funding, that gap deserves investigation. + +**Ecosystem mapping.** Aggregate QF data reveals the structure of community priorities -- which domains receive the most support, which are underfunded, how preferences correlate across rounds. + +## Implications for Round Design + +If the signal is as important as the capital, round design should optimize for signal quality, not just efficient distribution: + +**Invest in identity infrastructure.** Signal quality degrades linearly with Sybil penetration. Every manufactured participant dilutes the preference data. Gitcoin Passport, MACI private voting, and connection-oriented cluster matching (COCM) are not just anti-fraud measures -- they are signal-quality investments. + +**Publish and analyze the data.** Most QF rounds publish results but do not systematically analyze the preference data they generate. Treating contribution patterns as a research dataset -- publishing it, analyzing it, making it available to governance processes -- would multiply the round's value. + +**Design for breadth, not just matching efficiency.** Round mechanics that maximize the number of genuine participants (even at the cost of some matching efficiency) may produce more total value when signal is counted alongside capital. + +**Measure signal outcomes.** Track how QF preference data influences downstream decisions -- governance votes, institutional funding choices, hiring and partnership decisions. This creates a feedback loop that improves round design over time. + +## Conclusion + +The conventional framing of QF rounds as capital allocation mechanisms understates their value by roughly half. They are simultaneously capital allocation mechanisms and preference revelation mechanisms, and the preference data they produce has proven consequential across governance (EIP-1559), institutional credibility (Coin Center), team motivation (Plasma Group), and organizational learning (UNICEF). + +This means the value proposition of QF should not be measured solely by dollars distributed. A round that distributes $100K in matching funds while generating a high-quality, Sybil-resistant democratic signal across 10,000 participants may produce more total ecosystem value than a round that distributes $1M to a smaller set of participants with weaker identity verification. + +The signal is not a side effect. It is a primary output, and it deserves to be designed for, measured, and valued accordingly. diff --git a/src/content/research/structural-funding-beyond-grants.md b/src/content/research/structural-funding-beyond-grants.md new file mode 100644 index 00000000..51796200 --- /dev/null +++ b/src/content/research/structural-funding-beyond-grants.md @@ -0,0 +1,142 @@ +--- +id: '1741267200003' +slug: structural-funding-beyond-grants +name: "Structural Funding: Why the Grant Model Is Dying and What Replaces It" +shortDescription: "The transition from episodic, charity-based grants to funding embedded in protocol economics -- MEV taxes, staking yield, sequencer revenue, and dependency-based revenue splits." +tags: + - sustainability + - protocol-economics + - MEV + - staking + - revenue + - infrastructure +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - direct-grants + - token-streaming + - crowdstaking + - direct-to-contract-incentives +relatedApps: + - protocol-guild + - octant + - drips + - sablier + - optimism-retropgf +relatedCaseStudies: [] +relatedResearch: + - the-wells-are-all-dry-regen-web3-crossroads + - eip-1890-and-eip-6969-lessons-from-in-protocol-funding + - revnets-retailism-autonomous-public-goods-funding +relatedCampaigns: + - protocol-guild-ongoing + - thedao-security-fund +banner: /content-images/research/structural-funding-beyond-grants/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- The grant-funding model that sustained Ethereum public goods from 2018 to 2024 depended on flush treasury balances, bull-market enthusiasm, and small enough ecosystems that vibes-based evaluation worked. Those conditions no longer hold. The successor model embeds funding into protocol economics: MEV taxes, staking yield routing, sequencer revenue commitments, and dependency-based revenue splits. These aren't philanthropy -- they're rational infrastructure investment by parties who depend on the infrastructure. + +--- + +## The Three Pillars That No Longer Hold + +The first era of Ethereum public goods funding (2018-2024) distributed over $500 million -- a genuine achievement. But it rested on three conditions that are no longer reliable: + +**Flush treasury balances from token appreciation.** DAOs and foundations funded public goods from treasuries that swelled during bull markets. When token prices declined, so did funding capacity. Arbitrum, Optimism, Polygon, and others committed hundreds of millions in tokens, but the dollar value of those commitments fluctuated wildly with market conditions. This is not a sustainable funding model -- it's an exposure to crypto market cycles disguised as a public goods program. + +**A small enough ecosystem that vibes-based evaluation could work.** In 2019, a handful of reviewers could plausibly evaluate every grant application. By 2024, the Ethereum ecosystem had grown to thousands of active projects across dozens of L2s, and no committee -- no matter how well-intentioned -- could meaningfully assess them all. The result was rational shortcuts: fund familiar names, fund what's visible, fund what has good marketing. + +**Enough ideological enthusiasm to paper over misaligned incentives.** The regen movement carried the early era on a combination of genuine idealism and bull-market surplus. But as "The Wells Are All Dry" documented unflinchingly, much of regen web3 operated on vibes, narrative coherence, and speculative exuberance rather than genuine product-market fit. When the surplus dried up, so did the enthusiasm. + +## The Structural Alternative + +The successor to the grant model is not a better grant model. It is funding that is structurally embedded in the economic design of protocols -- funding that scales automatically with protocol usage, requires no recurring governance decisions, and aligns the incentives of funders with the infrastructure they depend on. + +Five models are emerging: + +### 1. Yield-Based Funding + +**Model:** Stake principal assets; route yield to public goods; preserve principal indefinitely. + +**Examples:** +- **Octant** stakes 100,000 ETH (Golem Foundation) and distributes staking yield (~3-4% annually) through community-governed 90-day cycles. Over 2,340 ETH distributed to 80+ projects. The principal remains intact, generating funding in perpetuity. +- **TheDAO Security Fund** stakes 75,000+ ETH ($220M+) from recovered 2016 DAO hack assets, generating ~$8M/year for Ethereum security research. Seven curators including Vitalik Buterin allocate using QF, retroactive funding, and ranked-choice voting. + +**Why it works:** Yield-based funding is endowment economics applied to crypto. The principal is preserved, the funding is renewable, and the annual capacity is predictable regardless of market sentiment. It decouples public goods funding from the boom-bust cycle of treasury drawdowns. + +### 2. Revenue-Based Funding + +**Model:** Protocols commit a percentage of ongoing revenue to public goods, creating funding that scales with usage. + +**Examples:** +- **Optimism** commits all sequencer profits to retroactive public goods funding, with 850M OP (20% of total supply) reserved. As L2 usage grows, so does funding capacity. +- **Protocol Guild** receives ongoing revenue splits from protocols that depend on Ethereum L1 infrastructure. Over $100M cumulative donations to ~190 core contributors via 4-year vesting. +- **Obol** directs 1% of distributed validator staking rewards to its Retroactive Active Fund. + +**Why it works:** Revenue-based funding aligns incentives structurally. Protocols that benefit from shared infrastructure contribute a percentage back. Funding scales with the thing it's funding -- more L2 usage means more sequencer revenue means more public goods funding. No governance vote needed for each disbursement. + +### 3. MEV Redirection + +**Model:** Redirect a portion of Maximal Extractable Value -- currently over $1B extracted since the merge -- toward public goods. + +**Mechanisms in development:** +- **MEV-Share** allows users to reclaim a portion of the MEV their transactions generate +- **MEV Taxes** enable smart contracts to capture a percentage of MEV from transactions that interact with them +- **Builder auction requirements** condition block-building rights on public goods contributions + +**Why it matters:** A 10% MEV tax could exceed Gitcoin's entire historical distribution ($67M) in a single year. MEV is currently extracted as a private good from a public system. Redirecting a portion of it represents one of the largest untapped funding sources in the ecosystem. + +### 4. Dependency-Based Coalitional Funding + +**Model:** Multiple entities that depend on shared infrastructure coordinate to fund it proportionally to their dependence. + +**Examples:** +- **Coalitional funding** modeled on SEMATECH (where semiconductor firms pooled R&D funding) and The Global Fund (where governments pool health funding). Applied to Ethereum, this means L2s, DeFi protocols, and infrastructure projects jointly funding the shared dependencies they all rely on. +- **Drips** enables automatic dependency splitting -- when you fund a project, its upstream dependencies automatically receive a proportional share. +- **Deep Funding** uses AI to map and weight the 40,000+ edge dependency graph of Ethereum infrastructure, enabling allocation proportional to actual dependency relationships. + +**Why it works:** Coalitional funding solves the collective action problem at its root. No individual protocol can justify funding the full cost of shared infrastructure. But a coalition of protocols that each contribute proportional to their dependence can collectively fund what none would fund alone -- just as SEMATECH's member firms collectively funded pre-competitive semiconductor research. + +### 5. Autonomous Revenue Networks + +**Model:** Fully autonomous, immutable treasuries that tokenize revenues with mathematically defined rules -- no governance, no committees, no grants. + +**Examples:** +- **Revnets** (built on Juicebox V4) deploy treasuries with rising price floors, ceiling/floor/Uniswap pool interactions, and self-stabilizing markets. Once deployed, rules cannot be changed by anyone. +- **Flows.wtf** uses token-curated registries with AI-powered continuous streaming -- second-by-second distribution to community-approved recipients. + +**Why it works:** Autonomous networks remove the governance overhead entirely. Funding flows according to programmatic rules, eliminating the discretionary bottleneck that makes traditional grants slow, political, and inconsistent. + +## The Transition Is Not Philanthropy to Business + +It's important to be precise about what this transition represents. Structural funding is not the commercialization of public goods. The goods remain public -- open source, permissionless, non-excludable. What changes is the funding relationship: + +| | Grant Model | Structural Model | +|---|---|---| +| **Capital source** | Treasury drawdowns, donations | Protocol revenue, yield, MEV | +| **Decision cadence** | Periodic rounds | Continuous or automatic | +| **Scaling** | Linear (more grants = more committee work) | Automatic (scales with protocol usage) | +| **Incentive alignment** | Charitable (funders don't directly benefit) | Rational (funders depend on what they fund) | +| **Sustainability** | Depletes over time | Self-renewing | + +The shift from "generous donors give grants" to "protocols fund their own dependencies" is not a retreat from public goods values. It is their most durable instantiation -- funding that persists because it is economically rational, not because it depends on ongoing goodwill. + +## What Must Be True + +Structural funding is not a panacea. Several conditions must hold for it to work: + +**Revenue must exist.** Protocols without meaningful revenue cannot self-fund their public goods. The revenue-based model works for Optimism (sequencer fees) and Protocol Guild (protocol revenue splits) but not for pre-revenue projects. Prospective mechanisms (grants, QF) remain essential for early-stage work. + +**Commitments must be credible.** A pledge to dedicate "a percentage of revenue" is only as durable as the governance that can reverse it. Optimism's commitment is encoded in its social contract but not technically irreversible. Revnets solve this with immutability -- once deployed, the rules cannot be changed. The more credible the commitment, the more trust it generates. + +**Allocation must still happen.** Structural funding solves the *formation* problem (where does the money come from?) but not the *allocation* problem (who gets it?). Sequencer revenue still needs to be directed to specific projects. Yield still needs to be distributed through some mechanism. The allocation layer -- QF, retroactive funding, AI-assisted evaluation -- remains essential. + +## Conclusion + +The grant model served its era well and distributed over $500M in public goods funding. But it was powered by conditions -- flush treasuries, small ecosystems, bull-market idealism -- that have expired. The next era of public goods funding will be powered by protocol economics: yield that renews indefinitely, revenue that scales with usage, MEV that flows back to the commons, and dependencies that fund themselves through coalitional coordination. + +This is not a betrayal of the public goods mission. It is its maturation. The most durable public goods are the ones funded by the systems that depend on them. diff --git a/src/content/research/the-networked-firm.md b/src/content/research/the-networked-firm.md index b06adafe..d233e8a5 100644 --- a/src/content/research/the-networked-firm.md +++ b/src/content/research/the-networked-firm.md @@ -25,6 +25,7 @@ relatedResearch: - 69-trends-in-2025-era-dao-design relatedCampaigns: [] banner: /content-images/research/the-networked-firm/banner.png +ctaUrl: https://allocapital.metalabel.com/record_dvc23nccdarkaobcv?variantId=1 --- > **TLDR:** AI and blockchain are turning rigid companies into adaptive networks — the cost of cognition and trust approach zero, enabling fluid organizational forms. The Networked Firm is a playbook for operating and allocating capital in this new era where coordination beats command. diff --git a/src/content/research/trust-precedes-coordination.md b/src/content/research/trust-precedes-coordination.md new file mode 100644 index 00000000..e2f409c8 --- /dev/null +++ b/src/content/research/trust-precedes-coordination.md @@ -0,0 +1,176 @@ +--- +id: '1741267200007' +slug: trust-precedes-coordination +name: "Trust Precedes Coordination Precedes Capital Allocation" +shortDescription: "Why small crews of 3-8 people are the irreducible atomic unit of effective coordination, and why mechanisms that skip the trust-building step consistently fail." +tags: + - trust + - microsolidarity + - coordination + - governance + - community + - organizational-design +researchType: Report +lastUpdated: '2026-03-06' +relatedMechanisms: + - gift-circles + - mutual-aid-networks + - guilds + - cookie-jar + - commitment-pooling +relatedApps: + - protocol-guild + - coordinape +relatedCaseStudies: [] +relatedResearch: + - plural-funding-mechanisms + - what-nature-can-teach-us-about-allocating-capital +relatedCampaigns: + - protocol-guild-ongoing +banner: /content-images/research/trust-precedes-coordination/banner.png +--- + +**Type:** Report +**Authors:** Gitcoin Research +**Published:** March 2026 + +**TLDR** -- The most practically important insight in the entire public goods funding literature is also the most frequently ignored: trust precedes coordination, and coordination precedes capital allocation. You cannot skip the trust step. Mechanisms deployed among strangers consistently underperform mechanisms deployed within trusted communities. Small crews of 3-8 people are the irreducible atomic unit of effective coordination, and programs that invest in relational infrastructure outperform programs that invest only in mechanism design. + +--- + +## The Sequence That Cannot Be Skipped + +Richard Bartlett's microsolidarity framework articulates a sequence that appears across every successful coordination effort in the ecosystem: + +1. **Trust** -- People develop genuine relationships, shared context, and mutual accountability +2. **Coordination** -- Trust enables effective joint action, resource sharing, and conflict resolution +3. **Capital allocation** -- Coordination enables intelligent, accountable distribution of resources + +This sequence is not optional. DAOs that jump straight to capital allocation -- deploying sophisticated mechanisms among strangers with no relational foundation -- reliably fail. The mechanism works on paper. The math is sound. The smart contracts execute correctly. And the outcomes are mediocre, gamed, or abandoned. + +The reason is that capital allocation is a high-trust activity. It requires: +- **Shared context** about what matters and why +- **Mutual accountability** for how resources are used +- **Conflict resolution** when disagreements arise (and they always arise) +- **Information sharing** that goes beyond what's visible on-chain +- **Forgiveness** when things don't go as planned + +No mechanism design provides these. They emerge from relationships. + +## Evidence from the Ecosystem + +### Protocol Guild: Trust at the Foundation + +Protocol Guild is the most successful public goods funding program in the Ethereum ecosystem by almost any metric: $100M+ cumulative donations, ~190 contributors, 4-year vesting, self-curated membership. It works because it is built on an existing foundation of trust. + +Ethereum core developers are a community before they are a funding recipient. They work together across ~30 teams. They review each other's code, attend the same calls, share context about protocol development. The social bonds that make Protocol Guild's self-curation credible were built over years of collaborative work, not through a smart contract deployment. + +Protocol Guild's allocation mechanism (longevity-weighted, self-curated membership) is simple to the point of being crude compared to QF or retroactive funding. But it works because the trust layer is extraordinarily strong. The community knows who belongs, who is contributing, and who deserves what. The mechanism's job is to encode trust that already exists, not to substitute for trust that doesn't. + +### Gift Circles: Dialogue Before Distribution + +Gift circles -- participatory gatherings where community members distribute shared funds through dialogue and relational trust -- represent the most trust-intensive funding mechanism in the ecosystem. There are no algorithms, no quadratic formulas, no smart contracts. People sit together, share needs, and decide collectively who receives what. + +Gift circles consistently produce outcomes that participants describe as more satisfying and more accurate than algorithmic allocation. Not because the outcomes are objectively "better" by some metric, but because the process builds and reinforces the relational infrastructure that makes all future coordination more effective. + +The lesson is not that we should replace QF with gift circles. It's that the relational capacity gift circles build is the foundation on which all other mechanisms depend. + +### DAOs That Skipped Trust + +The counter-evidence is equally instructive. The 2021-2022 DAO boom produced hundreds of organizations that deployed governance tokens, multisig treasuries, and sophisticated voting mechanisms -- among strangers who had met on Discord weeks earlier. + +The pattern was predictable: +1. Launch with enthusiasm and a treasury +2. Make initial allocation decisions through voting +3. Encounter disagreements that require trust to resolve +4. Discover that voting cannot substitute for relationships +5. Fragment, stagnate, or centralize around a small trusted group + +The DAOs that survived and thrived were invariably the ones where a core group had pre-existing trust relationships. MolochDAO worked because Ethereum developers already knew and trusted each other. Nouns DAO's most productive period involved a relatively small group of aligned builders who had developed relationships through shared creative work. + +## The Dunbar Layers + +Robin Dunbar's research on social group size provides the neurological basis for why trust matters at specific scales: + +- **5 (intimate)** -- Deep trust, high bandwidth, emotional support +- **15 (sympathy group)** -- Close collaboration, shared goals, mutual accountability +- **50 (band)** -- Effective working groups, shared norms, peer recognition +- **150 (clan)** -- Maximum stable social network, shared identity, cultural coherence +- **500-1500 (tribe/mega-band)** -- Institutional coordination, formal rules required + +Microsolidarity maps these to coordination structures: + +- **Dyads** (2 people) -- The minimum unit of trust +- **Crews** (3-8 people) -- The minimum unit of coordination. Small enough for deep trust, large enough for diverse skills and perspectives. +- **Congregations** (30-200 people) -- The maximum unit of direct trust. Beyond this, coordination requires formal mechanisms. + +The critical insight: **crews of 3-8 are the atomic unit of effective coordination.** They are where trust is built, maintained, and deployed. Programs that invest in crew formation -- through residencies, working groups, pair programming, shared meals, regular check-ins -- build the relational infrastructure that makes larger-scale coordination possible. + +## Implications for Mechanism Design + +### The Trust Gradient + +Different mechanisms require different trust levels, and should be deployed accordingly: + +**High trust required:** +- Gift circles, cookie jars, mutual aid +- Self-curated registries (Protocol Guild) +- Coordinape (peer-based allocation) +- Direct grants (committee trust) + +**Moderate trust required:** +- Conviction voting (sustained engagement signals trust) +- Milestone-based funding (trust but verify) +- Retroactive funding (trust evaluators) + +**Lower trust required (but identity needed):** +- Quadratic funding +- Quadratic voting +- Participatory budgeting +- Bounties + +**Minimal trust required:** +- Token streaming (programmatic) +- AutoPGF (algorithmic) +- Bonding curves (mathematical) +- Revnets (autonomous) + +The mistake is deploying high-trust mechanisms in low-trust contexts, or assuming that low-trust mechanisms can substitute for high-trust ones. QF among strangers with good Sybil resistance can work. Gift circles among strangers cannot. + +### Investing in Relational Infrastructure + +If trust precedes coordination, then programs should explicitly invest in trust-building as infrastructure: + +**Co-location.** Zuzalu demonstrated that two months of physical co-location produces qualitatively different coordination than two-day conferences. The pop-up city generated Zupass (ZK identity), Daimo (crypto payments), and Edge City (a self-sustaining organization) -- all from relationships that formed through shared daily life. + +**Small group formation.** Programs that actively form crews -- through cohort-based onboarding, working groups, mentorship pairs -- build the relational substrate that makes subsequent capital allocation more effective. + +**Regular cadence.** Trust degrades without maintenance. Programs that maintain regular interaction cadences (weekly calls, monthly retrospectives, quarterly retreats) preserve the relational capital that episodic programs lose between rounds. + +**Conflict resolution capacity.** Trust is not the absence of conflict but the ability to navigate it. Programs that invest in explicit conflict resolution processes (mediation, restorative justice, structured dialogue) maintain trust through disagreements rather than fragmenting. + +### The Domain Allocator Pattern + +GG24's domain allocator model -- where community-appointed operators independently run rounds within thematic domains -- is a trust-aware design. Rather than asking the entire ecosystem to evaluate everything (low trust, high cognitive load), it delegates allocation authority to trusted domain specialists who have the context and relationships to make informed decisions. + +This is the same pattern that makes Protocol Guild effective: a trusted community evaluating within its domain of expertise. The trust is scoped and specific, not global and generic. + +## The Organizational Implication + +The sequence trust → coordination → capital allocation implies a specific organizational strategy: + +1. **Start with people, not mechanisms.** Before selecting an allocation mechanism, invest in the community that will use it. Form crews, build relationships, develop shared context. + +2. **Match mechanism to trust level.** Deploy high-trust mechanisms (gift circles, self-curation) within established communities. Deploy lower-trust mechanisms (QF, bounties) for broader participation. Don't mix them up. + +3. **Build trust infrastructure alongside funding infrastructure.** For every dollar spent on allocation algorithms and smart contracts, spend a comparable amount on community building, conflict resolution, and relational maintenance. + +4. **Expect trust to take time.** Protocol Guild's trust was built over years of collaborative development. Zuzalu's trust was built over months of co-location. Crews form over weeks of regular interaction. There are no shortcuts. + +## Conclusion + +The public goods funding field has invested enormously in mechanism design -- 76 documented approaches and counting. It has invested comparatively little in the relational infrastructure that makes mechanisms effective. + +This is backwards. A simple mechanism deployed within a trusted community will outperform a sophisticated mechanism deployed among strangers, every time. The most practically important thing the field can do is not invent another allocation algorithm but invest in the conditions that make existing algorithms work: small groups, shared context, mutual accountability, and the patient work of building trust. + +The sequence is non-negotiable: trust first, then coordination, then capital allocation. Skip a step, and the mechanism will fail no matter how elegant its mathematics.