diff --git a/common/src/storage/types/user.rs b/common/src/storage/types/user.rs index 57801bb..bab9272 100644 --- a/common/src/storage/types/user.rs +++ b/common/src/storage/types/user.rs @@ -25,6 +25,56 @@ pub struct CategoryResponse { category: String, } +use std::str::FromStr; + +/// Supported UI themes. +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, Default)] +#[serde(rename_all = "kebab-case")] +pub enum Theme { + Light, + Dark, + WarmPaper, + ObsidianPrism, + #[default] + System, +} + +impl FromStr for Theme { + type Err = (); + + fn from_str(s: &str) -> Result { + match s { + "light" => Ok(Self::Light), + "dark" => Ok(Self::Dark), + "warm-paper" => Ok(Self::WarmPaper), + "obsidian-prism" => Ok(Self::ObsidianPrism), + "system" => Ok(Self::System), + _ => Err(()), + } + } +} + +impl Theme { + pub fn as_str(&self) -> &'static str { + match self { + Self::Light => "light", + Self::Dark => "dark", + Self::WarmPaper => "warm-paper", + Self::ObsidianPrism => "obsidian-prism", + Self::System => "system", + } + } + + /// Returns the theme that should be initially applied. + /// For "system", defaults to "light". + pub fn initial_theme(&self) -> &'static str { + match self { + Self::System => "light", + other => other.as_str(), + } + } +} + stored_object!( #[allow(clippy::unsafe_derive_deserialize)] User, "user", { @@ -36,7 +86,7 @@ stored_object!( #[serde(default)] timezone: String, #[serde(default)] - theme: String + theme: Theme }); #[async_trait] @@ -73,11 +123,8 @@ fn validate_timezone(input: &str) -> String { } /// Ensures a theme string is valid, defaulting to "system" when invalid. -fn validate_theme(input: &str) -> String { - match input { - "light" | "dark" | "system" => input.to_owned(), - _ => "system".to_owned(), - } +fn validate_theme(input: &str) -> Theme { + Theme::from_str(input).unwrap_or_default() } #[derive(Serialize, Deserialize, Debug, Clone)] @@ -212,7 +259,7 @@ impl User { .bind(("created_at", surrealdb::Datetime::from(now))) .bind(("updated_at", surrealdb::Datetime::from(now))) .bind(("timezone", validated_tz)) - .bind(("theme", validated_theme)) + .bind(("theme", validated_theme.as_str())) .await? .take(1)?; @@ -490,7 +537,7 @@ impl User { let validated_theme = validate_theme(theme); db.query("UPDATE type::thing('user', $user_id) SET theme = $theme") .bind(("user_id", user_id.to_string())) - .bind(("theme", validated_theme)) + .bind(("theme", validated_theme.as_str())) .await?; Ok(()) } @@ -1152,10 +1199,10 @@ mod tests { #[tokio::test] async fn test_validate_theme() { - assert_eq!(validate_theme("light"), "light"); - assert_eq!(validate_theme("dark"), "dark"); - assert_eq!(validate_theme("system"), "system"); - assert_eq!(validate_theme("invalid"), "system"); + assert_eq!(validate_theme("light"), Theme::Light); + assert_eq!(validate_theme("dark"), Theme::Dark); + assert_eq!(validate_theme("system"), Theme::System); + assert_eq!(validate_theme("invalid"), Theme::System); } #[tokio::test] @@ -1172,7 +1219,7 @@ mod tests { .await .expect("Failed to create user"); - assert_eq!(user.theme, "system"); + assert_eq!(user.theme, Theme::System); User::update_theme(&user.id, "dark", &db) .await @@ -1183,7 +1230,7 @@ mod tests { .await .expect("get user") .unwrap(); - assert_eq!(updated.theme, "dark"); + assert_eq!(updated.theme, Theme::Dark); // Invalid theme should default to system (but update_theme calls validate_theme) User::update_theme(&user.id, "invalid", &db) @@ -1194,6 +1241,6 @@ mod tests { .await .expect("get user") .unwrap(); - assert_eq!(updated2.theme, "system"); + assert_eq!(updated2.theme, Theme::System); } } diff --git a/evaluations/src/namespace.rs b/evaluations/src/namespace.rs index a0b0d10..cf0c208 100644 --- a/evaluations/src/namespace.rs +++ b/evaluations/src/namespace.rs @@ -2,7 +2,11 @@ use anyhow::{anyhow, Context, Result}; use chrono::Utc; -use common::storage::{db::SurrealDbClient, types::user::User, types::StoredObject}; +use common::storage::{ + db::SurrealDbClient, + types::user::{Theme, User}, + types::StoredObject, +}; use serde::Deserialize; use tracing::{info, warn}; @@ -212,7 +216,7 @@ pub(crate) async fn ensure_eval_user(db: &SurrealDbClient) -> Result { api_key: None, admin: false, timezone: "UTC".to_string(), - theme: "system".to_string(), + theme: Theme::System, }; if let Some(existing) = db.get_item::(user.get_id()).await? { diff --git a/html-router/app.css b/html-router/app.css index 7111451..5f3d7e2 100644 --- a/html-router/app.css +++ b/html-router/app.css @@ -97,11 +97,6 @@ --border: 2px; } - /* ========================================================================== - THEME: Obsidian Prism - A forward-looking neobrutalist dark theme. Cool obsidian base, - prismatic violet shadows, dual-accent system (Signal + Ember). - ========================================================================== */ [data-theme="obsidian-prism"] { color-scheme: dark; @@ -151,6 +146,54 @@ --nb-shadow-hover: 6px 6px 0 0 oklch(6% 0.08 calc(var(--nb-shadow-hue) + 15)); } + [data-theme="warm-paper"] { + color-scheme: light; + + /* --- Canvas & Surfaces: Warm cream paper (more yellow than light) --- */ + --color-base-100: oklch(97% 0.025 85); + --color-base-200: oklch(93% 0.028 83); + --color-base-300: oklch(88% 0.032 80); + --color-base-content: oklch(18% 0.015 75); + + /* --- Primary: Warm Amber/Gold (the landing page CTA color) --- */ + --color-primary: oklch(72% 0.16 75); + --color-primary-content: oklch(18% 0.02 75); + + /* --- Secondary: Warm Terracotta --- */ + --color-secondary: oklch(55% 0.14 45); + --color-secondary-content: oklch(98% 0.01 85); + + /* --- Accent: Deep Charcoal (for contrast buttons like "View on GitHub") --- */ + --color-accent: oklch(22% 0.01 80); + --color-accent-content: oklch(98% 0.02 85); + + /* --- Neutral: Warm Charcoal --- */ + --color-neutral: oklch(20% 0.015 75); + --color-neutral-content: oklch(96% 0.015 85); + + /* --- Semantic Colors (warmer variants) --- */ + --color-info: oklch(58% 0.12 230); + --color-info-content: oklch(98% 0.01 230); + --color-success: oklch(62% 0.15 155); + --color-success-content: oklch(98% 0.01 155); + --color-warning: oklch(78% 0.16 70); + --color-warning-content: oklch(20% 0.04 70); + --color-error: oklch(58% 0.20 25); + --color-error-content: oklch(98% 0.02 25); + + /* --- Radii (NB Law: Zero) --- */ + --radius-selector: 0rem; + --radius-field: 0rem; + --radius-box: 0rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 2px; + + /* --- Classic Black Shadow --- */ + --nb-shadow: 4px 4px 0 0 #000; + --nb-shadow-hover: 6px 6px 0 0 #000; + } + body { background-color: var(--color-base-100); color: var(--color-base-content); @@ -956,10 +999,6 @@ } } -/* ========================================================================== - OBSIDIAN PRISM: Component Overrides & Delight Features - ========================================================================== */ - /* Prismatic shadow hue shift on hover */ [data-theme="obsidian-prism"] .nb-panel:hover, [data-theme="obsidian-prism"] .nb-card:hover, @@ -969,8 +1008,15 @@ /* Focus state: breathing shadow pulse */ @keyframes shadow-breathe { - 0%, 100% { box-shadow: 6px 6px 0 0 oklch(8% 0.08 305); } - 50% { box-shadow: 7px 7px 0 0 oklch(10% 0.10 310); } + + 0%, + 100% { + box-shadow: 6px 6px 0 0 oklch(8% 0.08 305); + } + + 50% { + box-shadow: 7px 7px 0 0 oklch(10% 0.10 310); + } } [data-theme="obsidian-prism"] .nb-btn:focus-visible, diff --git a/html-router/assets/style.css b/html-router/assets/style.css index 6b01c38..f117888 100644 --- a/html-router/assets/style.css +++ b/html-router/assets/style.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.1.2 | MIT License | https://tailwindcss.com */ -@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:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--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-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-yellow-300:oklch(90.5% .182 98.111);--color-gray-200:oklch(92.8% .006 264.531);--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--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);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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)}}@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;-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}:-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}:root{--nb-shadow:4px 4px 0 0 #000;--nb-shadow-hover:6px 6px 0 0 #000}[data-theme=light]{color-scheme:light;--color-base-100:oklch(98.42% .012 96.42);--color-base-200:oklch(94.52% .0122 96.43);--color-base-300:oklch(90.96% .0125 91.53);--color-base-content:oklch(17.76% 0 89.88);--color-primary:oklch(20.77% .0398 265.75);--color-primary-content:oklch(100% 0 89.88);--color-secondary:oklch(54.61% .2152 262.88);--color-secondary-content:oklch(100% 0 89.88);--color-accent:oklch(72% .19 80);--color-accent-content:oklch(21% .035 80);--color-neutral:oklch(17.76% 0 89.88);--color-neutral-content:oklch(96.99% .0013 106.42);--color-info:oklch(60.89% .1109 221.72);--color-info-content:oklch(96.99% .0013 106.42);--color-success:oklch(62.71% .1699 149.21);--color-success-content:oklch(96.99% .0013 106.42);--color-warning:oklch(79.52% .1617 86.05);--color-warning-content:oklch(17.76% 0 89.88);--color-error:oklch(57.71% .2152 27.33);--color-error-content:oklch(96.99% .0013 106.42);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px}[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(22% .015 255);--color-base-200:oklch(18% .014 253);--color-base-300:oklch(14% .012 251);--color-base-content:oklch(97.2% .02 255);--color-primary:oklch(58% .233 277.12);--color-primary-content:oklch(96% .018 272.31);--color-secondary:oklch(65% .241 354.31);--color-secondary-content:oklch(94% .028 342.26);--color-accent:oklch(78% .22 80);--color-accent-content:oklch(20% .035 80);--color-neutral:oklch(26% .02 255);--color-neutral-content:oklch(97% .03 255);--color-info:oklch(74% .16 232.66);--color-info-content:oklch(29% .066 243.16);--color-success:oklch(76% .177 163.22);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.43);--color-warning-content:oklch(41% .112 45.9);--color-error:oklch(71% .194 13.43);--color-error-content:oklch(27% .105 12.09);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px}body{background-color:var(--color-base-100);color:var(--color-base-content);-webkit-font-smoothing:antialiased;font-family:Satoshi,sans-serif}body ::selection{background-color:#ffe02a66}@supports (color:color-mix(in lab, red, red)){body ::selection{background-color:color-mix(in oklab,var(--color-yellow-300)40%,transparent)}}body::selection{background-color:#ffe02a66}@supports (color:color-mix(in lab, red, red)){body::selection{background-color:color-mix(in oklab,var(--color-yellow-300)40%,transparent)}}body ::selection{color:var(--color-neutral)}body::selection{color:var(--color-neutral)}html{scrollbar-gutter:stable}*,:after,:before,::backdrop{border-color:var(--color-gray-200,currentColor)}::file-selector-button{border-color:var(--color-gray-200,currentColor)}.container{padding-inline:10px}@media (min-width:640px){.container{padding-inline:2rem}}@media (min-width:1024px){.container{padding-inline:4rem}}@media (min-width:1280px){.container{padding-inline:5rem}}@media (min-width:1536px){.container{padding-inline:6rem}}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:#0003 transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:0 0}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#0003;border-radius:3px}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}form.htmx-request{opacity:.5}[data-theme=dark] .nb-input::placeholder,[data-theme=dark] .input::placeholder,[data-theme=dark] .textarea::placeholder,[data-theme=dark] textarea::placeholder,[data-theme=dark] input::placeholder{opacity:.85;color:#ffffffc7!important}body:has(dialog[open]) #main-content-wrapper,body.modal-open #main-content-wrapper{filter:blur(2px);transition:transform .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1)),filter .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1));transform:scale(.98)}#main-content-wrapper{filter:blur();transition:transform .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1)),filter .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1));transform:scale(1)}nav{--scroll-depth:0;box-shadow:4px calc(4px + var(--scroll-depth)*4px)0 0 #000;transition:box-shadow .15s}@property --radialprogress{syntax: ""; inherits: true; initial-value: 0%;}:root{scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e")}}@layer components{.nb-shadow{box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-shadow-hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-card{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*4);box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-card:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-panel{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--nb-panel-bg,var(--color-base-200));box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-panel:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-panel-canvas{--nb-panel-bg:var(--color-base-100)}.nb-canvas{background-color:var(--color-base-100)}.nb-btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--color-base-content);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg);--btn-noise:none;border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);--btn-color:var(--color-base-100);box-shadow:var(--nb-shadow);background-image:none;border-radius:0;flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition:transform .15s,box-shadow .15s;display:inline-flex}:where(.nb-btn){width:unset}@supports (color:color-mix(in lab, red, red)){.nb-btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.prose .nb-btn{text-decoration-line:none}@media (hover:hover){.nb-btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.nb-btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.nb-btn:focus-visible{outline-width:2px;outline-style:solid}.nb-btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));--btn-border:var(--btn-color,var(--color-base-200));--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.nb-btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.nb-btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}.nb-btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){.nb-btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}.nb-btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.nb-btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in srgb,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}@supports (color:color-mix(in lab, red, red)){.nb-btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.nb-btn:is(input[type=checkbox],input[type=radio]){appearance:none}.nb-btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.nb-btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.nb-btn:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-link{text-decoration-line:underline;-webkit-text-decoration-color:var(--color-neutral);-webkit-text-decoration-color:var(--color-neutral);text-decoration-color:var(--color-neutral);text-underline-offset:2px}@media (hover:hover){.nb-link:hover{text-decoration-thickness:4px}}.nb-stat{gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*5);box-shadow:var(--nb-shadow);flex-direction:column;transition:transform .15s,box-shadow .15s;display:flex}.u-hairline{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:color-mix(in srgb,var(--color-neutral)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.u-hairline{border-color:color-mix(in oklab,var(--color-neutral)20%,transparent)}}.prose-tufte{color:var(--tw-prose-body);--tw-prose-body:oklch(37.1% 0 0);--tw-prose-headings:oklch(20.5% 0 0);--tw-prose-lead:oklch(43.9% 0 0);--tw-prose-links:oklch(20.5% 0 0);--tw-prose-bold:oklch(20.5% 0 0);--tw-prose-counters:oklch(55.6% 0 0);--tw-prose-bullets:oklch(87% 0 0);--tw-prose-hr:oklch(92.2% 0 0);--tw-prose-quotes:oklch(20.5% 0 0);--tw-prose-quote-borders:oklch(92.2% 0 0);--tw-prose-captions:oklch(55.6% 0 0);--tw-prose-kbd:oklch(20.5% 0 0);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(20.5% 0 0);--tw-prose-pre-code:oklch(92.2% 0 0);--tw-prose-pre-bg:oklch(26.9% 0 0);--tw-prose-th-borders:oklch(87% 0 0);--tw-prose-td-borders:oklch(92.2% 0 0);--tw-prose-invert-body:oklch(87% 0 0);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 0);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 0);--tw-prose-invert-bullets:oklch(43.9% 0 0);--tw-prose-invert-hr:oklch(37.1% 0 0);--tw-prose-invert-quotes:oklch(97% 0 0);--tw-prose-invert-quote-borders:oklch(37.1% 0 0);--tw-prose-invert-captions:oklch(70.8% 0 0);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 0);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 0);--tw-prose-invert-td-borders:oklch(37.1% 0 0);max-width:min(90ch,100%);font-size:1rem;line-height:1.7}.prose-tufte :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose-tufte :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose-tufte :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose-tufte :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose-tufte :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose-tufte :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose-tufte :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose-tufte :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose-tufte :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose-tufte :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose-tufte :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose-tufte :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose-tufte :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose-tufte :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose-tufte :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose-tufte :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose-tufte :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose-tufte :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose-tufte :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose-tufte :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose-tufte :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose-tufte :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose-tufte :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose-tufte :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose-tufte :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose-tufte :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose-tufte :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose-tufte :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose-tufte :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose-tufte :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose-tufte :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose-tufte :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose-tufte :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose-tufte :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose-tufte :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose-tufte :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-tufte :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-tufte :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-tufte :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-tufte-compact{color:var(--tw-prose-body);--tw-prose-body:oklch(37.1% 0 0);--tw-prose-headings:oklch(20.5% 0 0);--tw-prose-lead:oklch(43.9% 0 0);--tw-prose-links:oklch(20.5% 0 0);--tw-prose-bold:oklch(20.5% 0 0);--tw-prose-counters:oklch(55.6% 0 0);--tw-prose-bullets:oklch(87% 0 0);--tw-prose-hr:oklch(92.2% 0 0);--tw-prose-quotes:oklch(20.5% 0 0);--tw-prose-quote-borders:oklch(92.2% 0 0);--tw-prose-captions:oklch(55.6% 0 0);--tw-prose-kbd:oklch(20.5% 0 0);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(20.5% 0 0);--tw-prose-pre-code:oklch(92.2% 0 0);--tw-prose-pre-bg:oklch(26.9% 0 0);--tw-prose-th-borders:oklch(87% 0 0);--tw-prose-td-borders:oklch(92.2% 0 0);--tw-prose-invert-body:oklch(87% 0 0);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 0);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 0);--tw-prose-invert-bullets:oklch(43.9% 0 0);--tw-prose-invert-hr:oklch(37.1% 0 0);--tw-prose-invert-quotes:oklch(97% 0 0);--tw-prose-invert-quote-borders:oklch(37.1% 0 0);--tw-prose-invert-captions:oklch(70.8% 0 0);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 0);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 0);--tw-prose-invert-td-borders:oklch(37.1% 0 0);max-width:min(90ch,100%);font-size:.875rem;line-height:1.6}.prose-tufte-compact :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte-compact :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose-tufte-compact :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose-tufte-compact :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose-tufte-compact :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose-tufte-compact :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte-compact :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte-compact :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte-compact :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte-compact :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte-compact :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte-compact :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte-compact :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte-compact :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose-tufte-compact :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose-tufte-compact :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose-tufte-compact :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose-tufte-compact :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose-tufte-compact :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose-tufte-compact :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose-tufte-compact :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose-tufte-compact :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose-tufte-compact :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose-tufte-compact :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose-tufte-compact :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose-tufte-compact :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose-tufte-compact :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose-tufte-compact :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte-compact :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose-tufte-compact :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte-compact :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose-tufte-compact :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose-tufte-compact :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose-tufte-compact :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose-tufte-compact :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose-tufte-compact :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose-tufte-compact :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose-tufte-compact :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose-tufte-compact :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose-tufte-compact :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose-tufte-compact :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose-tufte-compact :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose-tufte-compact :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose-tufte-compact :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose-tufte-compact :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte-compact :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose-tufte-compact :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte-compact :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose-tufte-compact :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-tufte-compact :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte-compact :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte-compact :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte-compact :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte-compact :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte-compact :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte-compact :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte-compact :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-tufte-compact :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte-compact :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte-compact :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte-compact :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-tufte-compact :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte-compact :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte-compact :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte-compact :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}[data-theme=dark] .prose-tufte,[data-theme=dark] .prose-tufte-compact{color:var(--color-base-content);--tw-prose-body:var(--color-base-content);--tw-prose-headings:var(--color-base-content);--tw-prose-lead:#ffffffc7;--tw-prose-links:var(--color-accent);--tw-prose-bold:var(--color-base-content);--tw-prose-counters:#ffffffb3;--tw-prose-bullets:#ffffff59;--tw-prose-hr:#fff3;--tw-prose-quotes:var(--color-base-content);--tw-prose-quote-borders:#ffffff40;--tw-prose-captions:#ffffffa6;--tw-prose-code:var(--color-base-content);--tw-prose-pre-code:inherit;--tw-prose-pre-bg:#ffffff12;--tw-prose-th-borders:#ffffff40;--tw-prose-td-borders:#fff3}[data-theme=dark] .prose-tufte a,[data-theme=dark] .prose-tufte-compact a{color:var(--color-accent)}.card{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);box-shadow:var(--nb-shadow);border-radius:0;transition:transform .15s,box-shadow .15s}.card:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-input{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*3);color:var(--color-base-content);box-shadow:var(--nb-shadow);border-radius:0;padding-block:.5rem;transition:transform .15s,box-shadow .15s,border-color .15s}.nb-input::placeholder{color:color-mix(in srgb,var(--color-base-content)60%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-input::placeholder{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.nb-input:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-input:focus{box-shadow:var(--nb-shadow-hover);outline:none}.nb-select{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*3);color:var(--color-base-content);box-shadow:var(--nb-shadow);border-radius:0;padding-block:.5rem;transition:transform .15s,box-shadow .15s,border-color .15s}.nb-select:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-select:focus{box-shadow:var(--nb-shadow-hover);outline:none}.nb-input-sm,.nb-select-sm{padding-inline:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:.25rem}.nb-cta{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content);--btn-noise:none;background-image:none;background-color:var(--color-accent);color:var(--color-accent-content)}.nb-cta:hover{background-color:var(--color-accent);color:var(--color-accent-content);filter:saturate(1.1)brightness(1.05)}.nb-badge{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase;border-radius:0;align-items:center;font-size:10px;display:inline-flex;box-shadow:3px 3px #000}.nb-masonry{column-count:1;column-gap:1rem}.nb-masonry>*{break-inside:avoid;display:block}@media (min-width:768px){.nb-masonry{column-count:2}}@media (min-width:1536px){.nb-masonry{column-count:3}}.chat .chat-bubble{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);color:var(--color-neutral);box-shadow:var(--nb-shadow);border-radius:0;transition:transform .15s,box-shadow .15s}.chat .chat-bubble:before,.chat .chat-bubble:after{content:none!important;display:none!important}.chat.chat-start .chat-bubble{background-color:var(--color-secondary);color:var(--color-secondary-content)}.chat.chat-end .chat-bubble{background-color:var(--color-base-100);color:var(--color-neutral)}.nb-table{border-collapse:separate;border-spacing:0;width:100%}.nb-table thead th{border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--color-neutral);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase}.nb-table th,.nb-table td{padding:calc(var(--spacing)*3)}.nb-table tbody tr+tr td{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:color-mix(in srgb,var(--color-neutral)30%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-table tbody tr+tr td{border-color:color-mix(in oklab,var(--color-neutral)30%,transparent)}}.nb-table tbody tr:hover{background-color:color-mix(in srgb,var(--color-base-200)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-table tbody tr:hover{background-color:color-mix(in oklab,var(--color-base-200)40%,transparent)}}.nb-table tbody tr:hover td:first-child{box-shadow:inset 3px 0 #000}.kg-overlay{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);left:calc(var(--spacing)*4);z-index:10;align-items:stretch;gap:calc(var(--spacing)*2);flex-direction:column;max-width:min(420px,100% - 2rem);display:flex;position:absolute}.kg-control-row{align-items:center;gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.kg-control-row-primary{justify-content:flex-start}.kg-control-row-secondary{justify-content:center}.kg-search-input{padding-left:calc(var(--spacing)*2);width:100%;min-width:0;max-width:320px;height:2rem}.kg-control-row-primary .kg-search-input{flex:auto}.kg-search-btn{flex:none}.kg-toggle{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))}.kg-toggle-active{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content);--btn-noise:none;background-image:none;background-color:var(--color-accent);color:var(--color-accent-content)}.kg-toggle-active:hover{background-color:var(--color-accent);color:var(--color-accent-content);filter:saturate(1.1)brightness(1.05)}@media (min-width:768px){.kg-overlay{width:auto;max-width:none;right:auto}}.kg-legend{bottom:calc(var(--spacing)*2);left:calc(var(--spacing)*2);z-index:10;gap:calc(var(--spacing)*4);flex-wrap:wrap;display:flex;position:absolute}.kg-legend-card{padding:calc(var(--spacing)*2)}.kg-legend-heading{margin-bottom:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));opacity:.7}.kg-legend-row{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:flex}.nb-checkbox{appearance:none;border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);vertical-align:middle;width:1rem;height:1rem;box-shadow:var(--nb-shadow);cursor:pointer;background-position:50%;background-repeat:no-repeat;background-size:80% 80%;border-radius:0;transition:transform .15s,box-shadow .15s,border-color .15s,background-color .15s;display:inline-block}.nb-checkbox:hover{transform:translate(-1px,-1px);box-shadow:5px 5px #000}.nb-checkbox:focus-visible{outline-offset:2px;outline:2px solid #000}.nb-checkbox:active{transform:translate(0);box-shadow:3px 3px #000}.nb-checkbox:checked{background-image:url("data:image/svg+xml;utf8,")}[data-theme=dark] .nb-checkbox:checked{background-image:url("data:image/svg+xml;utf8,")}.nb-checkbox-sm{width:.875rem;height:.875rem}.nb-input::placeholder{letter-spacing:.02em;opacity:.75;font-size:.75rem}.markdown-content{word-wrap:break-word;line-height:1.5}.markdown-content p{margin-bottom:.75em}.markdown-content p:last-child{margin-bottom:0}.markdown-content ul,.markdown-content ol{margin-top:.5em;margin-bottom:.75em;padding-left:2em}.markdown-content li{margin-bottom:.25em}.markdown-content pre{background-color:var(--color-base-200);color:var(--color-base-content);border:1px solid #00000014;border-radius:4px;padding:.75em 1em;overflow-x:auto}.markdown-content pre code{color:inherit;line-height:inherit;background-color:#0000;border-radius:0;padding:0;display:block}.markdown-content :not(pre)>code{color:var(--color-base-content);background-color:#0000000d;border-radius:3px;padding:.15em .4em;font-size:.9em}.markdown-content table{border-collapse:collapse;width:100%;margin:.75em 0}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #00000026;padding:6px 12px}[data-theme=dark] .markdown-content th,[data-theme=dark] .markdown-content td{border-color:#ffffff40}.markdown-content blockquote{color:#0009;border-left:4px solid #00000026;margin:.5em 0 .5em .5em;padding-left:10px}[data-theme=dark] .markdown-content blockquote{color:#fffc;border-color:#ffffff4d}.markdown-content hr{border:none;border-top:1px solid #00000026;margin:.75em 0}[data-theme=dark] .markdown-content hr{border-top-color:#fff3}[data-theme=dark] .markdown-content pre{background-color:var(--color-base-200);color:var(--color-base-content);border-color:#ffffff1f}[data-theme=dark] .markdown-content :not(pre)>code{color:var(--color-base-content);background-color:#ffffff1f}.brand-mark{letter-spacing:.02em}.reference-tooltip{width:calc(var(--spacing)*72);max-width:var(--container-xs);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-base-content);z-index:9999;box-shadow:var(--nb-shadow);position:fixed}.nb-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase}.nb-data{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.nb-btn:active{transform:translate(2px,2px)!important;box-shadow:2px 2px #000!important}@keyframes deal-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}main .nb-card,main .nb-panel{animation:deal-in .3s var(--ease-mechanical,cubic-bezier(.25,1,.5,1))backwards}main nav.nb-panel,main .no-animation{animation:none}main .nb-masonry>.nb-card:first-child,main .grid>.nb-panel:first-child{animation-delay:0s}main .nb-masonry>.nb-card:nth-child(2),main .grid>.nb-panel:nth-child(2){animation-delay:50ms}main .nb-masonry>.nb-card:nth-child(3),main .grid>.nb-panel:nth-child(3){animation-delay:.1s}main .nb-masonry>.nb-card:nth-child(4),main .grid>.nb-panel:nth-child(4){animation-delay:.15s}main .nb-masonry>.nb-card:nth-child(5),main .grid>.nb-panel:nth-child(5){animation-delay:.2s}main .nb-masonry>.nb-card:nth-child(6),main .grid>.nb-panel:nth-child(6){animation-delay:.25s}main .nb-masonry>.nb-card:nth-child(7),main .grid>.nb-panel:nth-child(7){animation-delay:.3s}main .nb-masonry>.nb-card:nth-child(8),main .grid>.nb-panel:nth-child(8){animation-delay:.35s}main .nb-masonry>.nb-card:nth-child(n+9),main .grid>.nb-panel:nth-child(n+9){animation-delay:.4s}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-up{animation:fade-up .2s var(--ease-mechanical,cubic-bezier(.25,1,.5,1))forwards}#chat-input:not(:placeholder-shown)~button{filter:saturate(1.3)brightness(1.1)}#chat-input:not(:placeholder-shown){border-color:var(--color-accent)}.nb-evidence-frame{margin:calc(var(--spacing)*2);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-200)}.nb-evidence-frame img{width:100%;height:auto;display:block}.nb-evidence-frame figcaption{border-top-style:var(--tw-border-style);border-top-width:2px;border-color:var(--color-neutral);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));font-family:JetBrains Mono,ui-monospace,monospace}}@layer utilities{.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:transform .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:oklch(0% 0 0/.4);transition:transform .3s ease-out,background-color .3s ease-out,opacity .1s ease-out}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.drawer-side{pointer-events:none;visibility:hidden;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete,visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0;overflow:hidden}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@supports (color:color-mix(in lab, red, red)){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}@media (forced-colors:active){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);--tw-outline-style:none;outline-style:none;box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);outline-style:none}@media (forced-colors:active){:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active){outline-offset:2px;outline:2px solid #0000}}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px)-2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:color-mix(in srgb,var(--color-base-content)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg);--btn-noise:var(--fx-noise);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}:where(.btn){width:unset}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible{outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));--btn-border:var(--btn-color,var(--color-base-200));--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}.btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in srgb,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.pointer-events-none{pointer-events:none}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error);display:block}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error);display:block}.validator~.validator-hint{visibility:hidden}.visible{visibility:visible}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-field,.25rem)*10);--input-color:color-mix(in srgb,var(--color-base-content)20%,#0000);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.input :where(input):focus,.input :where(input):focus-within){outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=date]){display:inline-block}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@supports (color:color-mix(in lab, red, red)){:is(.input:focus,.input:focus-within){box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in srgb,var(--color-base-content)40%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled])){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in srgb,var(--color-base-content)20%,transparent)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:13px;mask-size:13px}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card:where(.card-border){border:var(--border)solid var(--color-base-200)}.card:where(.card-dash){border:var(--border)dashed var(--color-base-200)}.card.image-full{display:grid}.card.image-full>*{grid-row-start:1;grid-column-start:1}.card.image-full>.card-body{color:var(--color-neutral-content);position:relative}.card.image-full :where(figure){border-radius:inherit;overflow:hidden}.card.image-full>figure img{object-fit:cover;filter:brightness(28%);height:100%}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1;transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1}.menu-horizontal{flex-direction:row;display:inline-flex}.menu-horizontal>li:not(.menu-title)>details>ul{margin-inline-start:0;margin-top:1rem;padding-block:.5rem;padding-inline-end:.5rem;position:absolute}.menu-horizontal>li>details>ul:before{content:none}:where(.menu-horizontal>li:not(.menu-title)>details>ul){border-radius:var(--radius-box);background-color:var(--color-base-100);box-shadow:0 1px 3px oklch(0% 0 0/.1),0 1px 2px -1px oklch(0% 0 0/.1)}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.\!top-2\.5{top:calc(var(--spacing)*2.5)!important}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-9{top:calc(var(--spacing)*9)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-24{right:calc(var(--spacing)*24)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.\!left-3{left:calc(var(--spacing)*3)!important}.left-0{left:calc(var(--spacing)*0)}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.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)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.prose{color:var(--tw-prose-body);--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);max-width:65ch;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.validator-hint{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-top:.5rem}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.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-10{margin-bottom:calc(var(--spacing)*10)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content));border-color:var(--alert-color,var(--color-base-content));box-shadow:none;background-image:none}@supports (color:color-mix(in lab, red, red)){.alert.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100));border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.chat{column-gap:.75rem;padding-block:.25rem;display:grid}.line-clamp-6{-webkit-line-clamp:6;-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}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.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-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-3{height:calc(var(--spacing)*3)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-10{height:calc(var(--spacing)*10)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-96{height:calc(var(--spacing)*96)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-56{max-height:calc(var(--spacing)*56)}.max-h-\[95\%\]{max-height:95%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[10px\]{min-height:10px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[95\%\]{min-height:95%}.min-h-\[100dvh\]{min-height:100dvh}.loading-md{width:calc(var(--size-selector,.25rem)*6)}.loading-sm{width:calc(var(--size-selector,.25rem)*5)}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.w-3{width:calc(var(--spacing)*3)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-11\/12{width:91.6667%}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-full{width:100%}.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-52{max-width:calc(var(--spacing)*52)}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[20ch\]{max-width:20ch}.max-w-\[90ch\]{max-width:90ch}.max-w-\[92vw\]{max-width:92vw}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-72{min-width:calc(var(--spacing)*72)}.min-w-\[90px\]{min-width:90px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:none}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{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-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.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-2{gap:calc(var(--spacing)*2)}.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)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*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)))}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-12{column-gap:calc(var(--spacing)*12)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-8{row-gap:calc(var(--spacing)*8)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.border-base-200{border-color:var(--color-base-200)}.border-error{border-color:var(--color-error)}.border-neutral{border-color:var(--color-neutral)}.border-warning{border-color:var(--color-warning)}.border-warning\/40{border-color:color-mix(in srgb,var(--color-warning)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning)40%,transparent)}}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-transparent{background-color:#0000}.bg-warning\/10{background-color:color-mix(in srgb,var(--color-warning)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--color-warning)10%,transparent)}}.bg-warning\/20{background-color:color-mix(in srgb,var(--color-warning)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning)20%,transparent)}}.loading-dots{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='4' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1'/%3E%3C/circle%3E%3Ccircle cx='12' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.1s'/%3E%3C/circle%3E%3Ccircle cx='20' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.2s'/%3E%3C/circle%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='4' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1'/%3E%3C/circle%3E%3Ccircle cx='12' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.1s'/%3E%3C/circle%3E%3Ccircle cx='20' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.2s'/%3E%3C/circle%3E%3C/svg%3E")}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.fill-current{fill:currentColor}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.py-px{padding-block:1px}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-14{padding-right:calc(var(--spacing)*14)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-44{padding-bottom:calc(var(--spacing)*44)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.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-\[0\.7em\]{font-size:.7em}.text-\[0\.65rem\]{font-size:.65rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.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-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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.text-base-content{color:var(--color-base-content)}.text-base-content\/40{color:color-mix(in srgb,var(--color-base-content)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.text-base-content\/50{color:color-mix(in srgb,var(--color-base-content)50%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.text-base-content\/60{color:color-mix(in srgb,var(--color-base-content)60%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.text-base-content\/70{color:color-mix(in srgb,var(--color-base-content)70%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/70{color:color-mix(in oklab,var(--color-base-content)70%,transparent)}}.text-base-content\/80{color:color-mix(in srgb,var(--color-base-content)80%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/80{color:color-mix(in oklab,var(--color-base-content)80%,transparent)}}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-neutral{color:var(--color-neutral)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-warning-content{color:var(--color-warning-content)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[4px_4px_0_0_\#000\]{--tw-shadow:4px 4px 0 0 var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[8px_8px_0_0_\#000\]{--tw-shadow:8px 8px 0 0 var(--tw-shadow-color,#000);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}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}.blur{--tw-blur:blur(8px);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,)}.invert{--tw-invert:invert(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,)}.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;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-opacity{transition-property:opacity;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled,:checked){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}@media (hover:hover){.group-hover\:bg-base-100:is(:where(.group):hover *){background-color:var(--color-base-100)}.hover\:translate-x-\[-1px\]:hover{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:translate-y-\[-1px\]:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:bg-base-200:hover{background-color:var(--color-base-200)}.hover\:bg-base-200\/40:hover{background-color:color-mix(in srgb,var(--color-base-200)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-base-200\/40:hover{background-color:color-mix(in oklab,var(--color-base-200)40%,transparent)}}.hover\:bg-neutral\/10:hover{background-color:color-mix(in srgb,var(--color-neutral)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-neutral\/10:hover{background-color:color-mix(in oklab,var(--color-neutral)10%,transparent)}}.hover\:shadow-\[6px_6px_0_0_\#000\]:hover{--tw-shadow:6px 6px 0 0 var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media (min-width:40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-4{margin-top:calc(var(--spacing)*4)}.sm\:mt-8{margin-top:calc(var(--spacing)*8)}.sm\:mr-2{margin-right:calc(var(--spacing)*2)}.sm\:ml-2{margin-left:calc(var(--spacing)*2)}.sm\:flex{display:flex}.sm\:w-auto{width:auto}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:calc(var(--spacing)*3)}:where(.sm\: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)))}.sm\:p-5{padding:calc(var(--spacing)*5)}.sm\:text-right{text-align:right}}@media (min-width:48rem){.md\:inline{display:inline}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:drawer-open>.drawer-side{overflow-y:auto}.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;overscroll-behavior:auto;opacity:1;width:auto;display:block;position:sticky}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:#0000}.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay),[dir=rtl] :is(.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:0%}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:left-72{left:calc(var(--spacing)*72)}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:80rem){.xl\:hidden{display:none}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:96rem){.\32 xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.menu li>.nb-btn:hover{background-color:#0000}.menu li>.nb-cta:hover{background-color:var(--color-accent);color:var(--color-accent-content)}.toast-alert{margin-top:calc(var(--spacing)*2);gap:calc(var(--spacing)*1);text-align:left;box-shadow:var(--nb-shadow);flex-direction:column;display:flex}.toast-alert-title{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}}@view-transition{navigation:auto}@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Variable.woff2)format("woff2"),url(fonts/Satoshi-Variable.woff)format("woff"),url(fonts/Satoshi-Variable.ttf)format("truetype");font-weight:300 900;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(fonts/Satoshi-VariableItalic.woff2)format("woff2"),url(fonts/Satoshi-VariableItalic.woff)format("woff"),url(fonts/Satoshi-VariableItalic.ttf)format("truetype");font-weight:300 900;font-style:italic;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(fonts/JetBrainsMono-Regular.woff2)format("woff2"),url(fonts/JetBrainsMono-Variable.ttf)format("truetype");font-weight:400 700;font-style:normal;font-display:swap}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +@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:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--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-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-yellow-300:oklch(90.5% .182 98.111);--color-gray-200:oklch(92.8% .006 264.531);--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--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);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-snug:1.375;--leading-relaxed:1.625;--ease-out:cubic-bezier(0,0,.2,1);--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--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)}}@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;-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}:-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}:root{--nb-shadow:4px 4px 0 0 #000;--nb-shadow-hover:6px 6px 0 0 #000}[data-theme=light]{color-scheme:light;--color-base-100:oklch(98.42% .012 96.42);--color-base-200:oklch(94.52% .0122 96.43);--color-base-300:oklch(90.96% .0125 91.53);--color-base-content:oklch(17.76% 0 89.88);--color-primary:oklch(20.77% .0398 265.75);--color-primary-content:oklch(100% 0 89.88);--color-secondary:oklch(54.61% .2152 262.88);--color-secondary-content:oklch(100% 0 89.88);--color-accent:oklch(72% .19 80);--color-accent-content:oklch(21% .035 80);--color-neutral:oklch(17.76% 0 89.88);--color-neutral-content:oklch(96.99% .0013 106.42);--color-info:oklch(60.89% .1109 221.72);--color-info-content:oklch(96.99% .0013 106.42);--color-success:oklch(62.71% .1699 149.21);--color-success-content:oklch(96.99% .0013 106.42);--color-warning:oklch(79.52% .1617 86.05);--color-warning-content:oklch(17.76% 0 89.88);--color-error:oklch(57.71% .2152 27.33);--color-error-content:oklch(96.99% .0013 106.42);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px}[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(22% .015 255);--color-base-200:oklch(18% .014 253);--color-base-300:oklch(14% .012 251);--color-base-content:oklch(97.2% .02 255);--color-primary:oklch(58% .233 277.12);--color-primary-content:oklch(96% .018 272.31);--color-secondary:oklch(65% .241 354.31);--color-secondary-content:oklch(94% .028 342.26);--color-accent:oklch(78% .22 80);--color-accent-content:oklch(20% .035 80);--color-neutral:oklch(26% .02 255);--color-neutral-content:oklch(97% .03 255);--color-info:oklch(74% .16 232.66);--color-info-content:oklch(29% .066 243.16);--color-success:oklch(76% .177 163.22);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.43);--color-warning-content:oklch(41% .112 45.9);--color-error:oklch(71% .194 13.43);--color-error-content:oklch(27% .105 12.09);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px}[data-theme=obsidian-prism]{color-scheme:dark;--color-base-100:oklch(12% .015 260);--color-base-200:oklch(9% .018 262);--color-base-300:oklch(6% .02 265);--color-base-content:oklch(95% .008 260);--color-primary:oklch(62% .28 290);--color-primary-content:oklch(98% .01 290);--color-secondary:oklch(68% .18 220);--color-secondary-content:oklch(98% .01 220);--color-accent:oklch(78% .19 55);--color-accent-content:oklch(18% .04 55);--color-neutral:oklch(24% .02 260);--color-neutral-content:oklch(92% .01 260);--color-info:oklch(72% .14 230);--color-info-content:oklch(25% .06 230);--color-success:oklch(74% .16 155);--color-success-content:oklch(25% .06 155);--color-warning:oklch(82% .18 75);--color-warning-content:oklch(25% .08 75);--color-error:oklch(68% .22 15);--color-error-content:oklch(98% .02 15);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--nb-shadow-hue:290;--nb-shadow:4px 4px 0 0 oklch(8% .06 var(--nb-shadow-hue));--nb-shadow-hover:6px 6px 0 0 oklch(6% .08 calc(var(--nb-shadow-hue) + 15))}[data-theme=warm-paper]{color-scheme:light;--color-base-100:oklch(97% .025 85);--color-base-200:oklch(93% .028 83);--color-base-300:oklch(88% .032 80);--color-base-content:oklch(18% .015 75);--color-primary:oklch(72% .16 75);--color-primary-content:oklch(18% .02 75);--color-secondary:oklch(55% .14 45);--color-secondary-content:oklch(98% .01 85);--color-accent:oklch(22% .01 80);--color-accent-content:oklch(98% .02 85);--color-neutral:oklch(20% .015 75);--color-neutral-content:oklch(96% .015 85);--color-info:oklch(58% .12 230);--color-info-content:oklch(98% .01 230);--color-success:oklch(62% .15 155);--color-success-content:oklch(98% .01 155);--color-warning:oklch(78% .16 70);--color-warning-content:oklch(20% .04 70);--color-error:oklch(58% .2 25);--color-error-content:oklch(98% .02 25);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--nb-shadow:4px 4px 0 0 #000;--nb-shadow-hover:6px 6px 0 0 #000}body{background-color:var(--color-base-100);color:var(--color-base-content);-webkit-font-smoothing:antialiased;font-family:Satoshi,sans-serif}body ::selection{background-color:#ffe02a66}@supports (color:color-mix(in lab, red, red)){body ::selection{background-color:color-mix(in oklab,var(--color-yellow-300)40%,transparent)}}body::selection{background-color:#ffe02a66}@supports (color:color-mix(in lab, red, red)){body::selection{background-color:color-mix(in oklab,var(--color-yellow-300)40%,transparent)}}body ::selection{color:var(--color-neutral)}body::selection{color:var(--color-neutral)}html{scrollbar-gutter:stable}*,:after,:before,::backdrop{border-color:var(--color-gray-200,currentColor)}::file-selector-button{border-color:var(--color-gray-200,currentColor)}.container{padding-inline:10px}@media (min-width:640px){.container{padding-inline:2rem}}@media (min-width:1024px){.container{padding-inline:4rem}}@media (min-width:1280px){.container{padding-inline:5rem}}@media (min-width:1536px){.container{padding-inline:6rem}}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:#0003 transparent}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-track{background:0 0}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#0003;border-radius:3px}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}form.htmx-request{opacity:.5}[data-theme=dark] .nb-input::placeholder,[data-theme=dark] .input::placeholder,[data-theme=dark] .textarea::placeholder,[data-theme=dark] textarea::placeholder,[data-theme=dark] input::placeholder{opacity:.85;color:#ffffffc7!important}body:has(dialog[open]) #main-content-wrapper,body.modal-open #main-content-wrapper{filter:blur(2px);transition:transform .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1)),filter .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1));transform:scale(.98)}#main-content-wrapper{filter:blur();transition:transform .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1)),filter .25s var(--ease-mechanical,cubic-bezier(.25,1,.5,1));transform:scale(1)}nav{--scroll-depth:0;box-shadow:4px calc(4px + var(--scroll-depth)*4px)0 0 #000;transition:box-shadow .15s}@property --radialprogress{syntax: ""; inherits: true; initial-value: 0%;}:root{scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab, red, red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}:root:has(.modal-open,.modal[open],.modal:target,.modal-toggle:checked,.drawer:not([class*=drawer-open])>.drawer-toggle:checked){overflow:hidden}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E")}.chat{--mask-chat:url("data:image/svg+xml,%3csvg width='13' height='13' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='M0 11.5004C0 13.0004 2 13.0004 2 13.0004H12H13V0.00036329L12.5 0C12.5 0 11.977 2.09572 11.8581 2.50033C11.6075 3.35237 10.9149 4.22374 9 5.50036C6 7.50036 0 10.0004 0 11.5004Z'/%3e%3c/svg%3e")}}@layer components{.nb-shadow{box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-shadow-hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-card{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*4);box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-card:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-panel{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--nb-panel-bg,var(--color-base-200));box-shadow:var(--nb-shadow);transition:transform .15s,box-shadow .15s}.nb-panel:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-panel-canvas{--nb-panel-bg:var(--color-base-100)}.nb-canvas{background-color:var(--color-base-100)}.nb-btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--color-base-content);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg);--btn-noise:none;border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);--btn-color:var(--color-base-100);box-shadow:var(--nb-shadow);background-image:none;border-radius:0;flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition:transform .15s,box-shadow .15s;display:inline-flex}:where(.nb-btn){width:unset}@supports (color:color-mix(in lab, red, red)){.nb-btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.prose .nb-btn{text-decoration-line:none}@media (hover:hover){.nb-btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.nb-btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.nb-btn:focus-visible{outline-width:2px;outline-style:solid}.nb-btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));--btn-border:var(--btn-color,var(--color-base-200));--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.nb-btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.nb-btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}.nb-btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){.nb-btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}.nb-btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.nb-btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in srgb,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}@supports (color:color-mix(in lab, red, red)){.nb-btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.nb-btn:is(input[type=checkbox],input[type=radio]){appearance:none}.nb-btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.nb-btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.nb-btn:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-link{text-decoration-line:underline;-webkit-text-decoration-color:var(--color-neutral);-webkit-text-decoration-color:var(--color-neutral);text-decoration-color:var(--color-neutral);text-underline-offset:2px}@media (hover:hover){.nb-link:hover{text-decoration-thickness:4px}}.nb-stat{gap:calc(var(--spacing)*1);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*5);box-shadow:var(--nb-shadow);flex-direction:column;transition:transform .15s,box-shadow .15s;display:flex}.u-hairline{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:color-mix(in srgb,var(--color-neutral)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.u-hairline{border-color:color-mix(in oklab,var(--color-neutral)20%,transparent)}}.prose-tufte{color:var(--tw-prose-body);--tw-prose-body:oklch(37.1% 0 0);--tw-prose-headings:oklch(20.5% 0 0);--tw-prose-lead:oklch(43.9% 0 0);--tw-prose-links:oklch(20.5% 0 0);--tw-prose-bold:oklch(20.5% 0 0);--tw-prose-counters:oklch(55.6% 0 0);--tw-prose-bullets:oklch(87% 0 0);--tw-prose-hr:oklch(92.2% 0 0);--tw-prose-quotes:oklch(20.5% 0 0);--tw-prose-quote-borders:oklch(92.2% 0 0);--tw-prose-captions:oklch(55.6% 0 0);--tw-prose-kbd:oklch(20.5% 0 0);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(20.5% 0 0);--tw-prose-pre-code:oklch(92.2% 0 0);--tw-prose-pre-bg:oklch(26.9% 0 0);--tw-prose-th-borders:oklch(87% 0 0);--tw-prose-td-borders:oklch(92.2% 0 0);--tw-prose-invert-body:oklch(87% 0 0);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 0);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 0);--tw-prose-invert-bullets:oklch(43.9% 0 0);--tw-prose-invert-hr:oklch(37.1% 0 0);--tw-prose-invert-quotes:oklch(97% 0 0);--tw-prose-invert-quote-borders:oklch(37.1% 0 0);--tw-prose-invert-captions:oklch(70.8% 0 0);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 0);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 0);--tw-prose-invert-td-borders:oklch(37.1% 0 0);max-width:min(90ch,100%);font-size:1rem;line-height:1.7}.prose-tufte :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose-tufte :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose-tufte :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose-tufte :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose-tufte :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose-tufte :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose-tufte :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose-tufte :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose-tufte :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose-tufte :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose-tufte :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose-tufte :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose-tufte :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose-tufte :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose-tufte :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose-tufte :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose-tufte :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose-tufte :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose-tufte :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose-tufte :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose-tufte :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose-tufte :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose-tufte :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose-tufte :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose-tufte :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose-tufte :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose-tufte :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose-tufte :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose-tufte :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose-tufte :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose-tufte :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose-tufte :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose-tufte :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose-tufte :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose-tufte :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose-tufte :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-tufte :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-tufte :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-tufte :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-tufte-compact{color:var(--tw-prose-body);--tw-prose-body:oklch(37.1% 0 0);--tw-prose-headings:oklch(20.5% 0 0);--tw-prose-lead:oklch(43.9% 0 0);--tw-prose-links:oklch(20.5% 0 0);--tw-prose-bold:oklch(20.5% 0 0);--tw-prose-counters:oklch(55.6% 0 0);--tw-prose-bullets:oklch(87% 0 0);--tw-prose-hr:oklch(92.2% 0 0);--tw-prose-quotes:oklch(20.5% 0 0);--tw-prose-quote-borders:oklch(92.2% 0 0);--tw-prose-captions:oklch(55.6% 0 0);--tw-prose-kbd:oklch(20.5% 0 0);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(20.5% 0 0);--tw-prose-pre-code:oklch(92.2% 0 0);--tw-prose-pre-bg:oklch(26.9% 0 0);--tw-prose-th-borders:oklch(87% 0 0);--tw-prose-td-borders:oklch(92.2% 0 0);--tw-prose-invert-body:oklch(87% 0 0);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 0);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 0);--tw-prose-invert-bullets:oklch(43.9% 0 0);--tw-prose-invert-hr:oklch(37.1% 0 0);--tw-prose-invert-quotes:oklch(97% 0 0);--tw-prose-invert-quote-borders:oklch(37.1% 0 0);--tw-prose-invert-captions:oklch(70.8% 0 0);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 0);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 0);--tw-prose-invert-td-borders:oklch(37.1% 0 0);max-width:min(90ch,100%);font-size:.875rem;line-height:1.6}.prose-tufte-compact :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte-compact :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose-tufte-compact :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose-tufte-compact :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose-tufte-compact :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose-tufte-compact :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte-compact :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte-compact :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose-tufte-compact :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose-tufte-compact :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte-compact :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte-compact :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose-tufte-compact :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose-tufte-compact :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose-tufte-compact :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose-tufte-compact :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose-tufte-compact :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose-tufte-compact :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose-tufte-compact :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose-tufte-compact :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose-tufte-compact :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose-tufte-compact :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose-tufte-compact :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose-tufte-compact :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose-tufte-compact :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose-tufte-compact :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose-tufte-compact :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose-tufte-compact :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte-compact :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose-tufte-compact :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose-tufte-compact :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose-tufte-compact :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte-compact :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose-tufte-compact :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose-tufte-compact :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose-tufte-compact :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose-tufte-compact :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-tufte-compact :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose-tufte-compact :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose-tufte-compact :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose-tufte-compact :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose-tufte-compact :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose-tufte-compact :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose-tufte-compact :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose-tufte-compact :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose-tufte-compact :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose-tufte-compact :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose-tufte-compact :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte-compact :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose-tufte-compact :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-tufte-compact :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose-tufte-compact :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose-tufte-compact :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte-compact :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte-compact :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte-compact :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose-tufte-compact :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose-tufte-compact :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose-tufte-compact :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose-tufte-compact :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose-tufte-compact :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-tufte-compact :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte-compact :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte-compact :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte-compact :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose-tufte-compact :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-tufte-compact :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-tufte-compact :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose-tufte-compact :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-tufte-compact :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}[data-theme=dark] .prose-tufte,[data-theme=dark] .prose-tufte-compact{color:var(--color-base-content);--tw-prose-body:var(--color-base-content);--tw-prose-headings:var(--color-base-content);--tw-prose-lead:#ffffffc7;--tw-prose-links:var(--color-accent);--tw-prose-bold:var(--color-base-content);--tw-prose-counters:#ffffffb3;--tw-prose-bullets:#ffffff59;--tw-prose-hr:#fff3;--tw-prose-quotes:var(--color-base-content);--tw-prose-quote-borders:#ffffff40;--tw-prose-captions:#ffffffa6;--tw-prose-code:var(--color-base-content);--tw-prose-pre-code:inherit;--tw-prose-pre-bg:#ffffff12;--tw-prose-th-borders:#ffffff40;--tw-prose-td-borders:#fff3}[data-theme=dark] .prose-tufte a,[data-theme=dark] .prose-tufte-compact a{color:var(--color-accent)}.card{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);box-shadow:var(--nb-shadow);border-radius:0;transition:transform .15s,box-shadow .15s}.card:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-input{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*3);color:var(--color-base-content);box-shadow:var(--nb-shadow);border-radius:0;padding-block:.5rem;transition:transform .15s,box-shadow .15s,border-color .15s}.nb-input::placeholder{color:color-mix(in srgb,var(--color-base-content)60%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-input::placeholder{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.nb-input:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-input:focus{box-shadow:var(--nb-shadow-hover);outline:none}.nb-select{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*3);color:var(--color-base-content);box-shadow:var(--nb-shadow);border-radius:0;padding-block:.5rem;transition:transform .15s,box-shadow .15s,border-color .15s}.nb-select:hover{box-shadow:var(--nb-shadow-hover);transform:translate(-1px,-1px)}.nb-select:focus{box-shadow:var(--nb-shadow-hover);outline:none}.nb-input-sm,.nb-select-sm{padding-inline:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));padding-block:.25rem}.nb-cta{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content);--btn-noise:none;background-image:none;background-color:var(--color-accent);color:var(--color-accent-content)}.nb-cta:hover{background-color:var(--color-accent);color:var(--color-accent-content);filter:saturate(1.1)brightness(1.05)}.nb-badge{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*.5);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase;border-radius:0;align-items:center;font-size:10px;display:inline-flex;box-shadow:3px 3px #000}.nb-masonry{column-count:1;column-gap:1rem}.nb-masonry>*{break-inside:avoid;display:block}@media (min-width:768px){.nb-masonry{column-count:2}}@media (min-width:1536px){.nb-masonry{column-count:3}}.chat .chat-bubble{border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);color:var(--color-neutral);box-shadow:var(--nb-shadow);border-radius:0;transition:transform .15s,box-shadow .15s}.chat .chat-bubble:before,.chat .chat-bubble:after{content:none!important;display:none!important}.chat.chat-start .chat-bubble{background-color:var(--color-secondary);color:var(--color-secondary-content)}.chat.chat-end .chat-bubble{background-color:var(--color-base-100);color:var(--color-neutral)}.nb-table{border-collapse:separate;border-spacing:0;width:100%}.nb-table thead th{border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--color-neutral);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase}.nb-table th,.nb-table td{padding:calc(var(--spacing)*3)}.nb-table tbody tr+tr td{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:color-mix(in srgb,var(--color-neutral)30%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-table tbody tr+tr td{border-color:color-mix(in oklab,var(--color-neutral)30%,transparent)}}.nb-table tbody tr:hover{background-color:color-mix(in srgb,var(--color-base-200)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.nb-table tbody tr:hover{background-color:color-mix(in oklab,var(--color-base-200)40%,transparent)}}.nb-table tbody tr:hover td:first-child{box-shadow:inset 3px 0 #000}.kg-overlay{top:calc(var(--spacing)*4);right:calc(var(--spacing)*4);left:calc(var(--spacing)*4);z-index:10;align-items:stretch;gap:calc(var(--spacing)*2);flex-direction:column;max-width:min(420px,100% - 2rem);display:flex;position:absolute}.kg-control-row{align-items:center;gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}.kg-control-row-primary{justify-content:flex-start}.kg-control-row-secondary{justify-content:center}.kg-search-input{padding-left:calc(var(--spacing)*2);width:100%;min-width:0;max-width:320px;height:2rem}.kg-control-row-primary .kg-search-input{flex:auto}.kg-search-btn{flex:none}.kg-toggle{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))}.kg-toggle-active{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content);--btn-noise:none;background-image:none;background-color:var(--color-accent);color:var(--color-accent-content)}.kg-toggle-active:hover{background-color:var(--color-accent);color:var(--color-accent-content);filter:saturate(1.1)brightness(1.05)}@media (min-width:768px){.kg-overlay{width:auto;max-width:none;right:auto}}.kg-legend{bottom:calc(var(--spacing)*2);left:calc(var(--spacing)*2);z-index:10;gap:calc(var(--spacing)*4);flex-wrap:wrap;display:flex;position:absolute}.kg-legend-card{padding:calc(var(--spacing)*2)}.kg-legend-heading{margin-bottom:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));opacity:.7}.kg-legend-row{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:flex}.nb-checkbox{appearance:none;border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);vertical-align:middle;width:1rem;height:1rem;box-shadow:var(--nb-shadow);cursor:pointer;background-position:50%;background-repeat:no-repeat;background-size:80% 80%;border-radius:0;transition:transform .15s,box-shadow .15s,border-color .15s,background-color .15s;display:inline-block}.nb-checkbox:hover{transform:translate(-1px,-1px);box-shadow:5px 5px #000}.nb-checkbox:focus-visible{outline-offset:2px;outline:2px solid #000}.nb-checkbox:active{transform:translate(0);box-shadow:3px 3px #000}.nb-checkbox:checked{background-image:url("data:image/svg+xml;utf8,")}[data-theme=dark] .nb-checkbox:checked{background-image:url("data:image/svg+xml;utf8,")}.nb-checkbox-sm{width:.875rem;height:.875rem}.nb-input::placeholder{letter-spacing:.02em;opacity:.75;font-size:.75rem}.markdown-content{word-wrap:break-word;line-height:1.5}.markdown-content p{margin-bottom:.75em}.markdown-content p:last-child{margin-bottom:0}.markdown-content ul,.markdown-content ol{margin-top:.5em;margin-bottom:.75em;padding-left:2em}.markdown-content li{margin-bottom:.25em}.markdown-content pre{background-color:var(--color-base-200);color:var(--color-base-content);border:1px solid #00000014;border-radius:4px;padding:.75em 1em;overflow-x:auto}.markdown-content pre code{color:inherit;line-height:inherit;background-color:#0000;border-radius:0;padding:0;display:block}.markdown-content :not(pre)>code{color:var(--color-base-content);background-color:#0000000d;border-radius:3px;padding:.15em .4em;font-size:.9em}.markdown-content table{border-collapse:collapse;width:100%;margin:.75em 0}.markdown-content th,.markdown-content td{text-align:left;border:1px solid #00000026;padding:6px 12px}[data-theme=dark] .markdown-content th,[data-theme=dark] .markdown-content td{border-color:#ffffff40}.markdown-content blockquote{color:#0009;border-left:4px solid #00000026;margin:.5em 0 .5em .5em;padding-left:10px}[data-theme=dark] .markdown-content blockquote{color:#fffc;border-color:#ffffff4d}.markdown-content hr{border:none;border-top:1px solid #00000026;margin:.75em 0}[data-theme=dark] .markdown-content hr{border-top-color:#fff3}[data-theme=dark] .markdown-content pre{background-color:var(--color-base-200);color:var(--color-base-content);border-color:#ffffff1f}[data-theme=dark] .markdown-content :not(pre)>code{color:var(--color-base-content);background-color:#ffffff1f}.brand-mark{letter-spacing:.02em}.reference-tooltip{width:calc(var(--spacing)*72);max-width:var(--container-xs);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-100);padding:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--color-base-content);z-index:9999;box-shadow:var(--nb-shadow);position:fixed}.nb-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide);text-transform:uppercase}.nb-data{font-variant-numeric:tabular-nums;font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.nb-btn:active{transform:translate(2px,2px)!important;box-shadow:2px 2px #000!important}@keyframes deal-in{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}main .nb-card,main .nb-panel{animation:deal-in .3s var(--ease-mechanical,cubic-bezier(.25,1,.5,1))backwards}main nav.nb-panel,main .no-animation{animation:none}main .nb-masonry>.nb-card:first-child,main .grid>.nb-panel:first-child{animation-delay:0s}main .nb-masonry>.nb-card:nth-child(2),main .grid>.nb-panel:nth-child(2){animation-delay:50ms}main .nb-masonry>.nb-card:nth-child(3),main .grid>.nb-panel:nth-child(3){animation-delay:.1s}main .nb-masonry>.nb-card:nth-child(4),main .grid>.nb-panel:nth-child(4){animation-delay:.15s}main .nb-masonry>.nb-card:nth-child(5),main .grid>.nb-panel:nth-child(5){animation-delay:.2s}main .nb-masonry>.nb-card:nth-child(6),main .grid>.nb-panel:nth-child(6){animation-delay:.25s}main .nb-masonry>.nb-card:nth-child(7),main .grid>.nb-panel:nth-child(7){animation-delay:.3s}main .nb-masonry>.nb-card:nth-child(8),main .grid>.nb-panel:nth-child(8){animation-delay:.35s}main .nb-masonry>.nb-card:nth-child(n+9),main .grid>.nb-panel:nth-child(n+9){animation-delay:.4s}@keyframes fade-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-fade-up{animation:fade-up .2s var(--ease-mechanical,cubic-bezier(.25,1,.5,1))forwards}#chat-input:not(:placeholder-shown)~button{filter:saturate(1.3)brightness(1.1)}#chat-input:not(:placeholder-shown){border-color:var(--color-accent)}.nb-evidence-frame{margin:calc(var(--spacing)*2);border-style:var(--tw-border-style);border-width:2px;border-color:var(--color-neutral);background-color:var(--color-base-200)}.nb-evidence-frame img{width:100%;height:auto;display:block}.nb-evidence-frame figcaption{border-top-style:var(--tw-border-style);border-top-width:2px;border-color:var(--color-neutral);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));font-family:JetBrains Mono,ui-monospace,monospace}}@layer utilities{.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:transform .3s ease-out,visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:hidden}.modal::backdrop{display:none}.modal.modal-open,.modal[open],.modal:target{pointer-events:auto;visibility:visible;opacity:1;background-color:oklch(0% 0 0/.4);transition:transform .3s ease-out,background-color .3s ease-out,opacity .1s ease-out}:is(.modal.modal-open,.modal[open],.modal:target) .modal-box{opacity:1;translate:0;scale:1}@starting-style{.modal.modal-open,.modal[open],.modal:target{visibility:hidden;opacity:0}}.drawer-side{pointer-events:none;visibility:hidden;overscroll-behavior:contain;opacity:0;width:100%;transition:opacity .2s ease-out .1s allow-discrete,visibility .3s ease-out .1s allow-discrete;inset-inline-start:0;grid-template-rows:repeat(1,minmax(0,1fr));grid-template-columns:repeat(1,minmax(0,1fr));grid-row-start:1;grid-column-start:1;place-items:flex-start start;height:100dvh;display:grid;position:fixed;top:0;overflow:hidden}.drawer-side>.drawer-overlay{cursor:pointer;background-color:oklch(0% 0 0/.4);place-self:stretch stretch;position:sticky;top:0}.drawer-side>*{grid-row-start:1;grid-column-start:1}.drawer-side>:not(.drawer-overlay){will-change:transform;transition:translate .3s ease-out;translate:-100%}[dir=rtl] :is(.drawer-side>:not(.drawer-overlay)){translate:100%}.drawer-toggle{appearance:none;opacity:0;width:0;height:0;position:fixed}.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible;opacity:1;overflow-y:auto}.drawer-toggle:checked~.drawer-side>:not(.drawer-overlay){translate:0%}.drawer-toggle:focus-visible~.drawer-content label.drawer-button{outline-offset:2px;outline:2px solid}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@supports (color:color-mix(in lab, red, red)){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}@media (forced-colors:active){:is(.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);--tw-outline-style:none;outline-style:none;box-shadow:inset 0 1px oklch(0% 0 0/.01),inset 0 -1px oklch(100% 0 0/.01)}@supports (color:color-mix(in lab, red, red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}@media (forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);outline-style:none}@media (forced-colors:active){:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active){outline-offset:2px;outline:2px solid #0000}}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px)-2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:color-mix(in srgb,var(--color-base-content)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%))inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg);--btn-noise:var(--fx-noise);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}:where(.btn){width:unset}@supports (color:color-mix(in lab, red, red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%));--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.prose .btn{text-decoration-line:none}@media (hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab, red, red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible{outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));--btn-border:var(--btn-color,var(--color-base-200));--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);translate:0 .5px}@supports (color:color-mix(in lab, red, red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%);--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:is(:disabled,[disabled],.btn-disabled){pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in srgb,var(--color-base-content)10%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}.btn:is(:disabled,[disabled],.btn-disabled){--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media (hover:hover){.btn:is(:disabled,[disabled],.btn-disabled):hover{pointer-events:none;background-color:color-mix(in srgb,var(--color-neutral)20%,transparent);--btn-border:#0000;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}@supports (color:color-mix(in lab, red, red)){.btn:is(:disabled,[disabled],.btn-disabled):hover{background-color:color-mix(in oklab,var(--color-neutral)20%,transparent);--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio]):after{content:attr(aria-label)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.pointer-events-none{pointer-events:none}.validator:user-valid{--input-color:var(--color-success)}.validator:user-valid:focus{--input-color:var(--color-success)}.validator:user-valid:checked{--input-color:var(--color-success)}.validator:user-valid[aria-checked=true]{--input-color:var(--color-success)}.validator:user-valid:focus-within{--input-color:var(--color-success)}.validator:has(:user-valid){--input-color:var(--color-success)}.validator:has(:user-valid):focus{--input-color:var(--color-success)}.validator:has(:user-valid):checked{--input-color:var(--color-success)}.validator:has(:user-valid)[aria-checked=true]{--input-color:var(--color-success)}.validator:has(:user-valid):focus-within{--input-color:var(--color-success)}.validator:user-invalid{--input-color:var(--color-error)}.validator:user-invalid:focus{--input-color:var(--color-error)}.validator:user-invalid:checked{--input-color:var(--color-error)}.validator:user-invalid[aria-checked=true]{--input-color:var(--color-error)}.validator:user-invalid:focus-within{--input-color:var(--color-error)}.validator:user-invalid~.validator-hint{visibility:visible;color:var(--color-error);display:block}.validator:has(:user-invalid){--input-color:var(--color-error)}.validator:has(:user-invalid):focus{--input-color:var(--color-error)}.validator:has(:user-invalid):checked{--input-color:var(--color-error)}.validator:has(:user-invalid)[aria-checked=true]{--input-color:var(--color-error)}.validator:has(:user-invalid):focus-within{--input-color:var(--color-error)}.validator:has(:user-invalid)~.validator-hint{visibility:visible;color:var(--color-error);display:block}.validator~.validator-hint{visibility:hidden}.visible{visibility:visible}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);border-color:var(--input-color);box-shadow:0 1px var(--input-color)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--size:calc(var(--size-field,.25rem)*10);--input-color:color-mix(in srgb,var(--color-base-content)20%,#0000);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;font-size:.875rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab, red, red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1))inset;--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){:is(.input :where(input):focus,.input :where(input):focus-within){outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=date]){display:inline-block}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color);outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@supports (color:color-mix(in lab, red, red)){:is(.input:focus,.input:focus-within){box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:color-mix(in srgb,var(--color-base-content)40%,transparent);box-shadow:none}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled])){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in srgb,var(--color-base-content)20%,transparent)}@supports (color:color-mix(in lab, red, red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.chat-bubble{border-radius:var(--radius-field);background-color:var(--color-base-300);width:fit-content;color:var(--color-base-content);grid-row-end:3;min-width:2.5rem;max-width:90%;min-height:2rem;padding-block:.5rem;padding-inline:1rem;display:block;position:relative}.chat-bubble:before{background-color:inherit;content:"";width:.75rem;height:.75rem;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-chat);-webkit-mask-image:var(--mask-chat);mask-image:var(--mask-chat);position:absolute;bottom:0;-webkit-mask-position:0 -1px;mask-position:0 -1px;-webkit-mask-size:13px;mask-size:13px}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card:where(.card-border){border:var(--border)solid var(--color-base-200)}.card:where(.card-dash){border:var(--border)dashed var(--color-base-200)}.card.image-full{display:grid}.card.image-full>*{grid-row-start:1;grid-column-start:1}.card.image-full>.card-body{color:var(--color-neutral-content);position:relative}.card.image-full :where(figure){border-radius:inherit;overflow:hidden}.card.image-full>figure img{object-fit:cover;filter:brightness(28%);height:100%}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.swap{cursor:pointer;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;place-content:center;display:inline-grid;position:relative}.swap input{appearance:none;border:none}.swap>*{grid-row-start:1;grid-column-start:1;transition-property:transform,rotate,opacity;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}.swap .swap-on,.swap .swap-indeterminate,.swap input:indeterminate~.swap-on,.swap input:is(:checked,:indeterminate)~.swap-off{opacity:0}.swap input:checked~.swap-on,.swap input:indeterminate~.swap-indeterminate{opacity:1}.menu-horizontal{flex-direction:row;display:inline-flex}.menu-horizontal>li:not(.menu-title)>details>ul{margin-inline-start:0;margin-top:1rem;padding-block:.5rem;padding-inline-end:.5rem;position:absolute}.menu-horizontal>li>details>ul:before{content:none}:where(.menu-horizontal>li:not(.menu-title)>details>ul){border-radius:var(--radius-box);background-color:var(--color-base-100);box-shadow:0 1px 3px oklch(0% 0 0/.1),0 1px 2px -1px oklch(0% 0 0/.1)}.drawer{grid-auto-columns:max-content auto;width:100%;display:grid;position:relative}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.chat-end{grid-template-columns:1fr auto;place-items:end}.chat-end .chat-header,.chat-end .chat-footer{grid-column-start:1}.chat-end .chat-image{grid-column-start:2}.chat-end .chat-bubble{border-end-end-radius:0;grid-column-start:1}.chat-end .chat-bubble:before{inset-inline-start:100%;transform:rotateY(180deg)}[dir=rtl] :is(.chat-end .chat-bubble):before{transform:rotateY(0)}.chat-start{grid-template-columns:auto 1fr;place-items:start}.chat-start .chat-header,.chat-start .chat-footer{grid-column-start:2}.chat-start .chat-image{grid-column-start:1}.chat-start .chat-bubble{border-end-start-radius:0;grid-column-start:2}.chat-start .chat-bubble:before{inset-inline-start:-.75rem;transform:rotateY(0)}[dir=rtl] :is(.chat-start .chat-bubble):before{transform:rotateY(180deg)}.\!top-2\.5{top:calc(var(--spacing)*2.5)!important}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-9{top:calc(var(--spacing)*9)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-24{right:calc(var(--spacing)*24)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-4{bottom:calc(var(--spacing)*4)}.\!left-3{left:calc(var(--spacing)*3)!important}.left-0{left:calc(var(--spacing)*0)}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-full{grid-column:1/-1}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px oklch(0% 0 0/.25)}.drawer-content{grid-row-start:1;grid-column-start:2;min-width:0}.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)}.-mx-4{margin-inline:calc(var(--spacing)*-4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.prose{color:var(--tw-prose-body);--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:NaN NaN NaN;--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);max-width:65ch;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px 0 rgb(var(--tw-prose-kbd-shadows)/10%);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.validator-hint{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));margin-top:.5rem}.-mt-4{margin-top:calc(var(--spacing)*-4)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-10{margin-top:calc(var(--spacing)*10)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.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-10{margin-bottom:calc(var(--spacing)*10)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.navbar{align-items:center;width:100%;min-height:4rem;padding:.5rem;display:flex}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;border:var(--border)solid var(--color-base-200);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab, red, red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08))inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.alert.alert-outline{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none}.alert.alert-dash{color:var(--alert-color);box-shadow:none;background-color:#0000;background-image:none;border-style:dashed}.alert.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content));border-color:var(--alert-color,var(--color-base-content));box-shadow:none;background-image:none}@supports (color:color-mix(in lab, red, red)){.alert.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100));border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.card-title{font-size:var(--cardtitle-fs,1.125rem);align-items:center;gap:.5rem;font-weight:600;display:flex}.chat{column-gap:.75rem;padding-block:.25rem;display:grid}.line-clamp-6{-webkit-line-clamp:6;-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}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.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-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.h-3{height:calc(var(--spacing)*3)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-10{height:calc(var(--spacing)*10)}.h-24{height:calc(var(--spacing)*24)}.h-32{height:calc(var(--spacing)*32)}.h-96{height:calc(var(--spacing)*96)}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-56{max-height:calc(var(--spacing)*56)}.max-h-\[95\%\]{max-height:95%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-\[10px\]{min-height:10px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[95\%\]{min-height:95%}.min-h-\[100dvh\]{min-height:100dvh}.loading-md{width:calc(var(--size-selector,.25rem)*6)}.loading-sm{width:calc(var(--size-selector,.25rem)*5)}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.w-3{width:calc(var(--spacing)*3)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-11\/12{width:91.6667%}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-full{width:100%}.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-52{max-width:calc(var(--spacing)*52)}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[20ch\]{max-width:20ch}.max-w-\[90ch\]{max-width:90ch}.max-w-\[92vw\]{max-width:92vw}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-72{min-width:calc(var(--spacing)*72)}.min-w-\[90px\]{min-width:90px}.flex-1{flex:1}.flex-none{flex:none}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.swap-rotate .swap-on,.swap-rotate input:indeterminate~.swap-on{rotate:45deg}.swap-rotate input:is(:checked,:indeterminate)~.swap-on,.swap-rotate.swap-active .swap-on{rotate:none}.swap-rotate input:is(:checked,:indeterminate)~.swap-off,.swap-rotate.swap-active .swap-off{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-pulse{animation:var(--animate-pulse)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.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-2{gap:calc(var(--spacing)*2)}.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)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*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)))}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-x-12{column-gap:calc(var(--spacing)*12)}.gap-y-2{row-gap:calc(var(--spacing)*2)}.gap-y-8{row-gap:calc(var(--spacing)*8)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded-none{border-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.alert-error{border-color:var(--color-error);color:var(--color-error-content);--alert-color:var(--color-error)}.border-base-200{border-color:var(--color-base-200)}.border-error{border-color:var(--color-error)}.border-neutral{border-color:var(--color-neutral)}.border-warning{border-color:var(--color-warning)}.border-warning\/40{border-color:color-mix(in srgb,var(--color-warning)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning)40%,transparent)}}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-transparent{background-color:#0000}.bg-warning\/10{background-color:color-mix(in srgb,var(--color-warning)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--color-warning)10%,transparent)}}.bg-warning\/20{background-color:color-mix(in srgb,var(--color-warning)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning)20%,transparent)}}.loading-dots{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='4' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1'/%3E%3C/circle%3E%3Ccircle cx='12' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.1s'/%3E%3C/circle%3E%3Ccircle cx='20' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.2s'/%3E%3C/circle%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='4' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1'/%3E%3C/circle%3E%3Ccircle cx='12' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.1s'/%3E%3C/circle%3E%3Ccircle cx='20' cy='12' r='3'%3E%3Canimate attributeName='cy' values='12;6;12;12' keyTimes='0;0.286;0.571;1' dur='1.05s' repeatCount='indefinite' keySplines='.33,0,.66,.33;.33,.66,.66,1' begin='0.2s'/%3E%3C/circle%3E%3C/svg%3E")}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.fill-current{fill:currentColor}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-2{padding-block:calc(var(--spacing)*2)}.py-px{padding-block:1px}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-14{padding-right:calc(var(--spacing)*14)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-44{padding-bottom:calc(var(--spacing)*44)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.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-\[0\.7em\]{font-size:.7em}.text-\[0\.65rem\]{font-size:.65rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.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-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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.text-base-content{color:var(--color-base-content)}.text-base-content\/40{color:color-mix(in srgb,var(--color-base-content)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/40{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.text-base-content\/50{color:color-mix(in srgb,var(--color-base-content)50%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/50{color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.text-base-content\/60{color:color-mix(in srgb,var(--color-base-content)60%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/60{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.text-base-content\/70{color:color-mix(in srgb,var(--color-base-content)70%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/70{color:color-mix(in oklab,var(--color-base-content)70%,transparent)}}.text-base-content\/80{color:color-mix(in srgb,var(--color-base-content)80%,transparent)}@supports (color:color-mix(in lab, red, red)){.text-base-content\/80{color:color-mix(in oklab,var(--color-base-content)80%,transparent)}}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-neutral{color:var(--color-neutral)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-warning-content{color:var(--color-warning-content)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[4px_4px_0_0_\#000\]{--tw-shadow:4px 4px 0 0 var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[8px_8px_0_0_\#000\]{--tw-shadow:8px 8px 0 0 var(--tw-shadow-color,#000);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}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible):not(:disabled,[disabled],.btn-disabled){--btn-fg:currentColor;outline-color:currentColor}.blur{--tw-blur:blur(8px);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,)}.invert{--tw-invert:invert(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,)}.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;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-opacity{transition-property:opacity;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-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,:disabled,[disabled],.btn-disabled,:checked){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}@media (hover:hover){.group-hover\:bg-base-100:is(:where(.group):hover *){background-color:var(--color-base-100)}.hover\:translate-x-\[-1px\]:hover{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:translate-y-\[-1px\]:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:bg-base-200:hover{background-color:var(--color-base-200)}.hover\:bg-base-200\/40:hover{background-color:color-mix(in srgb,var(--color-base-200)40%,transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-base-200\/40:hover{background-color:color-mix(in oklab,var(--color-base-200)40%,transparent)}}.hover\:bg-neutral\/10:hover{background-color:color-mix(in srgb,var(--color-neutral)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-neutral\/10:hover{background-color:color-mix(in oklab,var(--color-neutral)10%,transparent)}}.hover\:shadow-\[6px_6px_0_0_\#000\]:hover{--tw-shadow:6px 6px 0 0 var(--tw-shadow-color,#000);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media (min-width:40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:mt-4{margin-top:calc(var(--spacing)*4)}.sm\:mt-8{margin-top:calc(var(--spacing)*8)}.sm\:mr-2{margin-right:calc(var(--spacing)*2)}.sm\:ml-2{margin-left:calc(var(--spacing)*2)}.sm\:flex{display:flex}.sm\:w-auto{width:auto}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-none{max-width:none}.sm\:flex-1{flex:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-3{gap:calc(var(--spacing)*3)}:where(.sm\: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)))}.sm\:p-5{padding:calc(var(--spacing)*5)}.sm\:text-right{text-align:right}}@media (min-width:48rem){.md\:inline{display:inline}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:drawer-open>.drawer-side{overflow-y:auto}.lg\:drawer-open>.drawer-toggle{display:none}.lg\:drawer-open>.drawer-toggle~.drawer-side{pointer-events:auto;visibility:visible;overscroll-behavior:auto;opacity:1;width:auto;display:block;position:sticky}.lg\:drawer-open>.drawer-toggle~.drawer-side>.drawer-overlay{cursor:default;background-color:#0000}.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay),[dir=rtl] :is(.lg\:drawer-open>.drawer-toggle~.drawer-side>:not(.drawer-overlay)){translate:0%}.lg\:drawer-open>.drawer-toggle:checked~.drawer-side{pointer-events:auto;visibility:visible}.lg\:left-72{left:calc(var(--spacing)*72)}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:80rem){.xl\:hidden{display:none}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width:96rem){.\32 xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.menu li>.nb-btn:hover{background-color:#0000}.menu li>.nb-cta:hover{background-color:var(--color-accent);color:var(--color-accent-content)}.toast-alert{margin-top:calc(var(--spacing)*2);gap:calc(var(--spacing)*1);text-align:left;box-shadow:var(--nb-shadow);flex-direction:column;display:flex}.toast-alert-title{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}}@view-transition{navigation:auto}@font-face{font-family:Satoshi;src:url(fonts/Satoshi-Variable.woff2)format("woff2"),url(fonts/Satoshi-Variable.woff)format("woff"),url(fonts/Satoshi-Variable.ttf)format("truetype");font-weight:300 900;font-style:normal;font-display:swap}@font-face{font-family:Satoshi;src:url(fonts/Satoshi-VariableItalic.woff2)format("woff2"),url(fonts/Satoshi-VariableItalic.woff)format("woff"),url(fonts/Satoshi-VariableItalic.ttf)format("truetype");font-weight:300 900;font-style:italic;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(fonts/JetBrainsMono-Regular.woff2)format("woff2"),url(fonts/JetBrainsMono-Variable.ttf)format("truetype");font-weight:400 700;font-style:normal;font-display:swap}[data-theme=obsidian-prism] .nb-panel:hover,[data-theme=obsidian-prism] .nb-card:hover,[data-theme=obsidian-prism] .nb-btn:hover{--nb-shadow-hue:305}@keyframes shadow-breathe{0%,to{box-shadow:6px 6px oklch(8% .08 305)}50%{box-shadow:7px 7px oklch(10% .1 310)}}[data-theme=obsidian-prism] .nb-btn:focus-visible,[data-theme=obsidian-prism] .nb-input:focus-visible,[data-theme=obsidian-prism] .nb-select:focus-visible{outline-offset:2px;outline:2px solid oklch(62% .28 290);animation:1.5s ease-in-out infinite shadow-breathe}[data-theme=obsidian-prism] ::selection{color:oklch(98% .01 290);background:oklch(62% .28 290/.35)}[data-theme=obsidian-prism] .prose-tufte,[data-theme=obsidian-prism] .prose-tufte-compact{color:var(--color-base-content);--tw-prose-body:oklch(92% .008 260);--tw-prose-headings:oklch(98% .01 260);--tw-prose-lead:oklch(88% .01 260);--tw-prose-links:oklch(78% .19 55);--tw-prose-bold:oklch(98% .01 260);--tw-prose-counters:oklch(70% .01 260);--tw-prose-bullets:oklch(50% .01 260);--tw-prose-hr:oklch(24% .02 260);--tw-prose-quotes:oklch(88% .01 260);--tw-prose-quote-borders:oklch(40% .04 290);--tw-prose-captions:oklch(70% .01 260);--tw-prose-code:oklch(95% .008 260);--tw-prose-pre-code:inherit;--tw-prose-pre-bg:oklch(8% .02 262);--tw-prose-th-borders:oklch(30% .02 260);--tw-prose-td-borders:oklch(24% .02 260)}[data-theme=obsidian-prism] .prose-tufte a,[data-theme=obsidian-prism] .prose-tufte-compact a{color:oklch(78% .19 55)}[data-theme=obsidian-prism] .markdown-content pre{background-color:oklch(7% .018 262);border-color:oklch(20% .03 290)}[data-theme=obsidian-prism] .markdown-content :not(pre)>code{background-color:oklch(18% .025 265)}[data-theme=obsidian-prism] .markdown-content th,[data-theme=obsidian-prism] .markdown-content td{border-color:oklch(24% .02 260)}[data-theme=obsidian-prism] .markdown-content blockquote{color:oklch(85% .01 260);border-color:oklch(40% .04 290)}[data-theme=obsidian-prism] .markdown-content hr{border-top-color:oklch(24% .02 260)}[data-theme=obsidian-prism] .nb-checkbox:checked{background-image:url("data:image/svg+xml;utf8,")}[data-theme=obsidian-prism] .nb-input::placeholder,[data-theme=obsidian-prism] .input::placeholder,[data-theme=obsidian-prism] .textarea::placeholder,[data-theme=obsidian-prism] textarea::placeholder,[data-theme=obsidian-prism] input::placeholder{opacity:.85;color:oklch(70% .01 260)!important}[data-theme=obsidian-prism] nav{box-shadow:4px calc(4px + var(--scroll-depth,0)*4px)0 0 oklch(8% .06 290)}@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;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file diff --git a/html-router/src/html_state.rs b/html-router/src/html_state.rs index 4396d2d..426fe8f 100644 --- a/html-router/src/html_state.rs +++ b/html-router/src/html_state.rs @@ -65,3 +65,9 @@ impl ProvidesTemplateEngine for HtmlState { &self.templates } } + +impl crate::middlewares::response_middleware::ProvidesHtmlState for HtmlState { + fn html_state(&self) -> &HtmlState { + self + } +} diff --git a/html-router/src/middlewares/response_middleware.rs b/html-router/src/middlewares/response_middleware.rs index 1c1f6da..b7db176 100644 --- a/html-router/src/middlewares/response_middleware.rs +++ b/html-router/src/middlewares/response_middleware.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use axum::{ extract::{Request, State}, http::{HeaderName, StatusCode}, @@ -6,13 +8,24 @@ use axum::{ Extension, }; use axum_htmx::{HxRequest, HX_TRIGGER}; -use common::{error::AppError, utils::template_engine::ProvidesTemplateEngine}; -use minijinja::{context, Value}; +use common::{ + error::AppError, + utils::template_engine::{ProvidesTemplateEngine, Value}, +}; +use minijinja::context; use serde::Serialize; use serde_json::json; use tracing::error; -use crate::AuthSessionType; +use crate::{html_state::HtmlState, AuthSessionType}; +use common::storage::types::{ + conversation::Conversation, + user::{Theme, User}, +}; + +pub trait ProvidesHtmlState { + fn html_state(&self) -> &HtmlState; +} #[derive(Clone)] pub enum TemplateKind { @@ -106,8 +119,10 @@ struct ContextWrapper<'a> { user_theme: &'a str, initial_theme: &'a str, is_authenticated: bool, + user: Option<&'a User>, + conversation_archive: Vec, #[serde(flatten)] - context: &'a Value, + context: HashMap, } pub async fn with_template_response( @@ -117,25 +132,23 @@ pub async fn with_template_response( next: Next, ) -> Response where - S: ProvidesTemplateEngine + Clone + Send + Sync + 'static, + S: ProvidesTemplateEngine + ProvidesHtmlState + Clone + Send + Sync + 'static, { - // Determine theme context - let (user_theme, initial_theme, is_authenticated) = + let mut user_theme = Theme::System.as_str(); + let mut initial_theme = Theme::System.initial_theme(); + let mut is_authenticated = false; + let mut current_user_id = None; + + { if let Some(auth) = req.extensions().get::() { if let Some(user) = &auth.current_user { - let theme = user.theme.as_str(); - // For explicit themes (not "system"), use the theme directly as initial_theme - let initial = match theme { - "system" => "light", - other => other, // "light", "dark", "obsidian-prism", etc. - }; - (theme.to_string(), initial.to_string(), true) - } else { - ("system".to_string(), "light".to_string(), false) + is_authenticated = true; + current_user_id = Some(user.id.clone()); + user_theme = user.theme.as_str(); + initial_theme = user.theme.initial_theme(); } - } else { - ("system".to_string(), "light".to_string(), false) - }; + } + } let response = next.run(req).await; @@ -145,6 +158,20 @@ where if let Some(template_response) = response.extensions().get::().cloned() { let template_engine = state.template_engine(); + let mut current_user = None; + let mut conversation_archive = Vec::new(); + + if let Some(user_id) = current_user_id { + let html_state = state.html_state(); + if let Ok(Some(user)) = html_state.db.get_item::(&user_id).await { + // Fetch conversation archive globally for authenticated users + if let Ok(archive) = User::get_user_conversations(&user.id, &html_state.db).await { + conversation_archive = archive; + } + current_user = Some(user); + } + } + // Helper to forward relevant headers fn forward_headers(from: &axum::http::HeaderMap, to: &mut axum::http::HeaderMap) { for &header_name in HTMX_HEADERS_TO_FORWARD { @@ -156,11 +183,28 @@ where } } + // Convert minijinja::Value to HashMap if it's a map, otherwise use empty HashMap + let context_map = if template_response.context.kind() == minijinja::value::ValueKind::Map { + let mut map = HashMap::new(); + if let Ok(keys) = template_response.context.try_iter() { + for key in keys { + if let Ok(val) = template_response.context.get_item(&key) { + map.insert(key.to_string(), val); + } + } + } + map + } else { + HashMap::new() + }; + let context = ContextWrapper { user_theme: &user_theme, initial_theme: &initial_theme, is_authenticated, - context: &template_response.context, + user: current_user.as_ref(), + conversation_archive, + context: context_map, }; match &template_response.template_kind { diff --git a/html-router/src/routes/account/handlers.rs b/html-router/src/routes/account/handlers.rs index eb1e431..c0ccae8 100644 --- a/html-router/src/routes/account/handlers.rs +++ b/html-router/src/routes/account/handlers.rs @@ -9,40 +9,36 @@ use crate::{ }, AuthSessionType, }; -use common::storage::types::{conversation::Conversation, user::User}; +use common::storage::types::user::{Theme, User}; use crate::html_state::HtmlState; #[derive(Serialize)] pub struct AccountPageData { - user: User, timezones: Vec, - conversation_archive: Vec, theme_options: Vec, } pub async fn show_account_page( - RequireUser(user): RequireUser, - State(state): State, + RequireUser(_user): RequireUser, + State(_state): State, ) -> Result { let timezones = TZ_VARIANTS .iter() .map(std::string::ToString::to_string) .collect(); let theme_options = vec![ - "light".to_string(), - "dark".to_string(), - "obsidian-prism".to_string(), - "system".to_string(), + Theme::Light.as_str().to_string(), + Theme::Dark.as_str().to_string(), + Theme::WarmPaper.as_str().to_string(), + Theme::ObsidianPrism.as_str().to_string(), + Theme::System.as_str().to_string(), ]; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; Ok(TemplateResponse::new_template( "auth/account_settings.html", AccountPageData { - user, timezones, - conversation_archive, theme_options, }, )) @@ -54,25 +50,17 @@ pub async fn set_api_key( auth: AuthSessionType, ) -> Result { // Generate and set the API key - let api_key = User::set_api_key(&user.id, &state.db).await?; + User::set_api_key(&user.id, &state.db).await?; // Clear the cache so new requests have access to the user with api key auth.cache_clear_user(user.id.to_string()); - // Update the user's API key - let updated_user = User { - api_key: Some(api_key), - ..user.clone() - }; - // Render the API key section block Ok(TemplateResponse::new_partial( "auth/account_settings.html", "api_key_section", AccountPageData { - user: updated_user, timezones: vec![], - conversation_archive: vec![], theme_options: vec![], }, )) @@ -108,12 +96,6 @@ pub async fn update_timezone( // Clear the cache auth.cache_clear_user(user.id.to_string()); - // Update the user's API key - let updated_user = User { - timezone: form.timezone, - ..user.clone() - }; - let timezones = TZ_VARIANTS .iter() .map(std::string::ToString::to_string) @@ -124,9 +106,7 @@ pub async fn update_timezone( "auth/account_settings.html", "timezone_section", AccountPageData { - user: updated_user, timezones, - conversation_archive: vec![], theme_options: vec![], }, )) @@ -148,26 +128,19 @@ pub async fn update_theme( // Clear the cache auth.cache_clear_user(user.id.to_string()); - // Update the user's theme - let updated_user = User { - theme: form.theme, - ..user.clone() - }; - let theme_options = vec![ - "light".to_string(), - "dark".to_string(), - "obsidian-prism".to_string(), - "system".to_string(), + Theme::Light.as_str().to_string(), + Theme::Dark.as_str().to_string(), + Theme::WarmPaper.as_str().to_string(), + Theme::ObsidianPrism.as_str().to_string(), + Theme::System.as_str().to_string(), ]; Ok(TemplateResponse::new_partial( "auth/account_settings.html", "theme_section", AccountPageData { - user: updated_user, timezones: vec![], - conversation_archive: vec![], theme_options, }, )) diff --git a/html-router/src/routes/admin/handlers.rs b/html-router/src/routes/admin/handlers.rs index 4c34606..9b85a47 100644 --- a/html-router/src/routes/admin/handlers.rs +++ b/html-router/src/routes/admin/handlers.rs @@ -10,7 +10,6 @@ use common::{ error::AppError, storage::types::{ analytics::Analytics, - conversation::Conversation, knowledge_entity::KnowledgeEntity, system_prompts::{ DEFAULT_IMAGE_PROCESSING_PROMPT, DEFAULT_INGRESS_ANALYSIS_SYSTEM_PROMPT, @@ -18,7 +17,6 @@ use common::{ }, system_settings::SystemSettings, text_chunk::TextChunk, - user::User, }, }; use tracing::{error, info}; @@ -33,13 +31,11 @@ use crate::{ #[derive(Serialize)] pub struct AdminPanelData { - user: User, settings: SystemSettings, analytics: Option, users: Option, default_query_prompt: String, default_image_prompt: String, - conversation_archive: Vec, available_models: Option, current_section: AdminSection, } @@ -64,7 +60,7 @@ pub struct AdminPanelQuery { pub async fn show_admin_panel( State(state): State, - RequireUser(user): RequireUser, + RequireUser(_user): RequireUser, Query(query): Query, ) -> Result { let section = match query.section.as_deref() { @@ -72,10 +68,7 @@ pub async fn show_admin_panel( _ => AdminSection::Overview, }; - let (settings, conversation_archive) = tokio::try_join!( - SystemSettings::get_current(&state.db), - User::get_user_conversations(&user.id, &state.db) - )?; + let settings = SystemSettings::get_current(&state.db).await?; let (analytics, users) = if section == AdminSection::Overview { let (analytics, users) = tokio::try_join!( @@ -103,14 +96,12 @@ pub async fn show_admin_panel( Ok(TemplateResponse::new_template( "admin/base.html", AdminPanelData { - user, settings, analytics, available_models, users, default_query_prompt: DEFAULT_QUERY_SYSTEM_PROMPT.to_string(), default_image_prompt: DEFAULT_IMAGE_PROCESSING_PROMPT.to_string(), - conversation_archive, current_section: section, }, )) diff --git a/html-router/src/routes/auth/signup.rs b/html-router/src/routes/auth/signup.rs index b67c8a2..4b4d0e1 100644 --- a/html-router/src/routes/auth/signup.rs +++ b/html-router/src/routes/auth/signup.rs @@ -6,7 +6,7 @@ use axum::{ use axum_htmx::HxBoosted; use serde::{Deserialize, Serialize}; -use common::storage::types::user::User; +use common::storage::types::user::{Theme, User}; use crate::{ html_state::HtmlState, @@ -50,7 +50,7 @@ pub async fn process_signup_and_show_verification( form.password, &state.db, form.timezone, - "system".to_string(), + Theme::System.as_str().to_string(), ) .await { diff --git a/html-router/src/routes/chat/chat_handlers.rs b/html-router/src/routes/chat/chat_handlers.rs index 5524702..07342d1 100644 --- a/html-router/src/routes/chat/chat_handlers.rs +++ b/html-router/src/routes/chat/chat_handlers.rs @@ -45,10 +45,8 @@ where #[derive(Serialize)] pub struct ChatPageData { - user: User, history: Vec, conversation: Option, - conversation_archive: Vec, } pub async fn show_initialized_chat( @@ -76,16 +74,12 @@ pub async fn show_initialized_chat( state.db.store_item(ai_message.clone()).await?; state.db.store_item(user_message.clone()).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - let messages = vec![user_message, ai_message]; let mut response = TemplateResponse::new_template( "chat/base.html", ChatPageData { history: messages, - user, - conversation_archive, conversation: Some(conversation.clone()), }, ) @@ -100,17 +94,13 @@ pub async fn show_initialized_chat( } pub async fn show_chat_base( - State(state): State, - RequireUser(user): RequireUser, + State(_state): State, + RequireUser(_user): RequireUser, ) -> Result { - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - Ok(TemplateResponse::new_template( "chat/base.html", ChatPageData { history: vec![], - user, - conversation_archive, conversation: None, }, )) @@ -126,8 +116,6 @@ pub async fn show_existing_chat( State(state): State, RequireUser(user): RequireUser, ) -> Result { - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - let (conversation, messages) = Conversation::get_complete_conversation(conversation_id.as_str(), &user.id, &state.db) .await?; @@ -136,9 +124,7 @@ pub async fn show_existing_chat( "chat/base.html", ChatPageData { history: messages, - user, conversation: Some(conversation), - conversation_archive, }, )) } @@ -232,8 +218,6 @@ pub struct PatchConversationTitle { #[derive(Serialize)] pub struct DrawerContext { - user: User, - conversation_archive: Vec, #[serde(skip_serializing_if = "Option::is_none")] edit_conversation_id: Option, } @@ -242,20 +226,19 @@ pub async fn show_conversation_editing_title( RequireUser(user): RequireUser, Path(conversation_id): Path, ) -> Result { - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; + let conversation: Conversation = state + .db + .get_item(&conversation_id) + .await? + .ok_or_else(|| AppError::NotFound("Conversation not found".to_string()))?; - let owns = conversation_archive - .iter() - .any(|c| c.id == conversation_id && c.user_id == user.id); - if !owns { + if conversation.user_id != user.id { return Ok(TemplateResponse::unauthorized().into_response()); } Ok(TemplateResponse::new_template( "sidebar.html", DrawerContext { - user, - conversation_archive, edit_conversation_id: Some(conversation_id), }, ) @@ -270,13 +253,9 @@ pub async fn patch_conversation_title( ) -> Result { Conversation::patch_title(&conversation_id, &user.id, &form.title, &state.db).await?; - let updated_conversations = User::get_user_conversations(&user.id, &state.db).await?; - Ok(TemplateResponse::new_template( "sidebar.html", DrawerContext { - user, - conversation_archive: updated_conversations, edit_conversation_id: None, }, ) @@ -303,29 +282,21 @@ pub async fn delete_conversation( .delete_item::(&conversation_id) .await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - Ok(TemplateResponse::new_template( "sidebar.html", DrawerContext { - user, - conversation_archive, edit_conversation_id: None, }, ) .into_response()) } pub async fn reload_sidebar( - State(state): State, - RequireUser(user): RequireUser, + State(_state): State, + RequireUser(_user): RequireUser, ) -> Result { - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - Ok(TemplateResponse::new_template( "sidebar.html", DrawerContext { - user, - conversation_archive, edit_conversation_id: None, }, ) diff --git a/html-router/src/routes/content/handlers.rs b/html-router/src/routes/content/handlers.rs index c2f0ec5..77d526a 100644 --- a/html-router/src/routes/content/handlers.rs +++ b/html-router/src/routes/content/handlers.rs @@ -7,8 +7,8 @@ use axum_htmx::{HxBoosted, HxRequest, HxTarget}; use serde::{Deserialize, Serialize}; use common::storage::types::{ - conversation::Conversation, file_info::FileInfo, knowledge_entity::KnowledgeEntity, - text_chunk::TextChunk, text_content::TextContent, user::User, + file_info::FileInfo, knowledge_entity::KnowledgeEntity, text_chunk::TextChunk, + text_content::TextContent, user::User, }; use crate::{ @@ -26,18 +26,15 @@ const CONTENTS_PER_PAGE: usize = 12; #[derive(Serialize)] pub struct ContentPageData { - user: User, text_contents: Vec, categories: Vec, selected_category: Option, - conversation_archive: Vec, pagination: Pagination, page_query: String, } #[derive(Serialize)] pub struct RecentTextContentData { - pub user: User, pub text_contents: Vec, } @@ -81,13 +78,10 @@ pub async fn show_content_page( }) .unwrap_or_default(); - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let data = ContentPageData { - user, text_contents, categories, selected_category: params.category.clone(), - conversation_archive, pagination, page_query, }; @@ -112,13 +106,12 @@ pub async fn show_text_content_edit_form( #[derive(Serialize)] pub struct TextContentEditModal { - pub user: User, pub text_content: TextContent, } Ok(TemplateResponse::new_template( "content/edit_text_content_modal.html", - TextContentEditModal { user, text_content }, + TextContentEditModal { text_content }, )) } @@ -145,10 +138,7 @@ pub async fn patch_text_content( return Ok(TemplateResponse::new_template( "dashboard/recent_content.html", - RecentTextContentData { - user, - text_contents, - }, + RecentTextContentData { text_contents }, )); } @@ -159,17 +149,14 @@ pub async fn patch_text_content( ); let text_contents = truncate_text_contents(page_contents); let categories = User::get_user_categories(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; Ok(TemplateResponse::new_partial( "content/base.html", "main", ContentPageData { - user, text_contents, categories, selected_category: None, - conversation_archive, pagination, page_query: String::new(), }, @@ -209,16 +196,13 @@ pub async fn delete_text_content( ); let text_contents = truncate_text_contents(page_contents); let categories = User::get_user_categories(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; Ok(TemplateResponse::new_template( "content/content_list.html", ContentPageData { - user, text_contents, categories, selected_category: None, - conversation_archive, pagination, page_query: String::new(), }, @@ -234,13 +218,12 @@ pub async fn show_content_read_modal( let text_content = User::get_and_validate_text_content(&id, &user.id, &state.db).await?; #[derive(Serialize)] pub struct TextContentReadModalData { - pub user: User, pub text_content: TextContent, } Ok(TemplateResponse::new_template( "content/read_content_modal.html", - TextContentReadModalData { user, text_content }, + TextContentReadModalData { text_content }, )) } @@ -253,9 +236,6 @@ pub async fn show_recent_content( Ok(TemplateResponse::new_template( "dashboard/recent_content.html", - RecentTextContentData { - user, - text_contents, - }, + RecentTextContentData { text_contents }, )) } diff --git a/html-router/src/routes/index/handlers.rs b/html-router/src/routes/index/handlers.rs index fa6e5fa..afc79fe 100644 --- a/html-router/src/routes/index/handlers.rs +++ b/html-router/src/routes/index/handlers.rs @@ -21,19 +21,17 @@ use common::storage::types::user::DashboardStats; use common::{ error::AppError, storage::types::{ - conversation::Conversation, file_info::FileInfo, ingestion_task::IngestionTask, - knowledge_entity::KnowledgeEntity, knowledge_relationship::KnowledgeRelationship, - text_chunk::TextChunk, text_content::TextContent, user::User, + file_info::FileInfo, ingestion_task::IngestionTask, knowledge_entity::KnowledgeEntity, + knowledge_relationship::KnowledgeRelationship, text_chunk::TextChunk, + text_content::TextContent, user::User, }, }; #[derive(Serialize)] pub struct IndexPageData { - user: Option, text_contents: Vec, stats: DashboardStats, active_jobs: Vec, - conversation_archive: Vec, } pub async fn index_handler( @@ -44,7 +42,7 @@ pub async fn index_handler( return Ok(TemplateResponse::redirect("/signin")); }; - let (text_contents, conversation_archive, stats, active_jobs) = try_join!( + let (text_contents, _conversation_archive, stats, active_jobs) = try_join!( User::get_latest_text_contents(&user.id, &state.db), User::get_user_conversations(&user.id, &state.db), User::get_dashboard_stats(&user.id, &state.db), @@ -56,10 +54,8 @@ pub async fn index_handler( Ok(TemplateResponse::new_template( "dashboard/base.html", IndexPageData { - user: Some(user), text_contents, stats, - conversation_archive, active_jobs, }, )) @@ -68,7 +64,6 @@ pub async fn index_handler( #[derive(Serialize)] pub struct LatestTextContentData { text_contents: Vec, - user: User, } pub async fn delete_text_content( @@ -105,10 +100,7 @@ pub async fn delete_text_content( Ok(TemplateResponse::new_partial( "dashboard/recent_content.html", "latest_content_section", - LatestTextContentData { - user: user.clone(), - text_contents, - }, + LatestTextContentData { text_contents }, )) } @@ -136,7 +128,6 @@ async fn get_and_validate_text_content( #[derive(Serialize)] pub struct ActiveJobsData { pub active_jobs: Vec, - pub user: User, } #[derive(Serialize)] @@ -161,7 +152,6 @@ struct TaskArchiveEntry { #[derive(Serialize)] struct TaskArchiveData { - user: User, tasks: Vec, } @@ -177,10 +167,7 @@ pub async fn delete_job( Ok(TemplateResponse::new_partial( "dashboard/active_jobs.html", "active_jobs_section", - ActiveJobsData { - user: user.clone(), - active_jobs, - }, + ActiveJobsData { active_jobs }, )) } @@ -192,10 +179,7 @@ pub async fn show_active_jobs( Ok(TemplateResponse::new_template( "dashboard/active_jobs.html", - ActiveJobsData { - user: user.clone(), - active_jobs, - }, + ActiveJobsData { active_jobs }, )) } @@ -233,10 +217,7 @@ pub async fn show_task_archive( Ok(TemplateResponse::new_template( "dashboard/task_archive_modal.html", - TaskArchiveData { - user, - tasks: entries, - }, + TaskArchiveData { tasks: entries }, )) } diff --git a/html-router/src/routes/ingestion/handlers.rs b/html-router/src/routes/ingestion/handlers.rs index eaa5eac..ee611e1 100644 --- a/html-router/src/routes/ingestion/handlers.rs +++ b/html-router/src/routes/ingestion/handlers.rs @@ -120,13 +120,12 @@ pub async fn process_ingress_form( #[derive(Serialize)] struct NewTasksData { - user: User, tasks: Vec, } Ok(TemplateResponse::new_template( "dashboard/current_task.html", - NewTasksData { user, tasks }, + NewTasksData { tasks }, )) } diff --git a/html-router/src/routes/knowledge/handlers.rs b/html-router/src/routes/knowledge/handlers.rs index 93bc3e5..9456b12 100644 --- a/html-router/src/routes/knowledge/handlers.rs +++ b/html-router/src/routes/knowledge/handlers.rs @@ -17,7 +17,6 @@ use serde::{ use common::{ error::AppError, storage::types::{ - conversation::Conversation, knowledge_entity::{KnowledgeEntity, KnowledgeEntityType}, knowledge_relationship::KnowledgeRelationship, user::User, @@ -333,12 +332,10 @@ pub struct KnowledgeBaseData { entities: Vec, visible_entities: Vec, relationships: Vec, - user: User, entity_types: Vec, content_categories: Vec, selected_entity_type: Option, selected_content_category: Option, - conversation_archive: Vec, pagination: Pagination, page_query: String, relationship_type_options: Vec, @@ -481,18 +478,15 @@ async fn build_knowledge_base_data( relationship_type_options, default_relationship_type, } = build_relationship_table_data(entities.clone(), filtered_relationships); - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; Ok(KnowledgeBaseData { entities, visible_entities, relationships, - user: user.clone(), entity_types, content_categories, selected_entity_type: params.entity_type.clone(), selected_content_category: params.content_category.clone(), - conversation_archive, pagination, page_query, relationship_type_options, @@ -861,7 +855,6 @@ pub async fn show_edit_knowledge_entity_form( pub struct EntityData { entity: KnowledgeEntity, entity_types: Vec, - user: User, } // Get entity types @@ -878,7 +871,6 @@ pub async fn show_edit_knowledge_entity_form( EntityData { entity, entity_types, - user, }, )) } @@ -895,7 +887,6 @@ pub struct PatchKnowledgeEntityParams { pub struct EntityListData { visible_entities: Vec, pagination: Pagination, - user: User, entity_types: Vec, content_categories: Vec, selected_entity_type: Option, @@ -943,7 +934,6 @@ pub async fn patch_knowledge_entity( EntityListData { visible_entities, pagination, - user, entity_types, content_categories, selected_entity_type: None, @@ -982,7 +972,6 @@ pub async fn delete_knowledge_entity( EntityListData { visible_entities, pagination, - user, entity_types, content_categories, selected_entity_type: None, diff --git a/html-router/src/routes/scratchpad/handlers.rs b/html-router/src/routes/scratchpad/handlers.rs index 7343cf3..c429780 100644 --- a/html-router/src/routes/scratchpad/handlers.rs +++ b/html-router/src/routes/scratchpad/handlers.rs @@ -14,16 +14,13 @@ use crate::middlewares::{ response_middleware::{HtmlError, TemplateResponse}, }; use common::storage::types::{ - conversation::Conversation, ingestion_payload::IngestionPayload, ingestion_task::IngestionTask, - scratchpad::Scratchpad, user::User, + ingestion_payload::IngestionPayload, ingestion_task::IngestionTask, scratchpad::Scratchpad, }; #[derive(Serialize)] pub struct ScratchpadPageData { - user: User, scratchpads: Vec, archived_scratchpads: Vec, - conversation_archive: Vec, #[serde(skip_serializing_if = "Option::is_none")] new_scratchpad: Option, } @@ -38,9 +35,7 @@ pub struct ScratchpadListItem { #[derive(Serialize)] pub struct ScratchpadDetailData { - user: User, scratchpad: ScratchpadDetail, - conversation_archive: Vec, is_editing_title: bool, } @@ -135,7 +130,6 @@ pub async fn show_scratchpad_page( ) -> Result { let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let scratchpad_list: Vec = scratchpads.iter().map(ScratchpadListItem::from).collect(); @@ -149,10 +143,8 @@ pub async fn show_scratchpad_page( "scratchpad/base.html", "main", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: None, }, )) @@ -160,10 +152,8 @@ pub async fn show_scratchpad_page( Ok(TemplateResponse::new_template( "scratchpad/base.html", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: None, }, )) @@ -177,7 +167,6 @@ pub async fn show_scratchpad_modal( Query(query): Query, ) -> Result { let scratchpad = Scratchpad::get_by_id(&scratchpad_id, &user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let scratchpad_detail = ScratchpadDetail::from(&scratchpad); @@ -187,9 +176,7 @@ pub async fn show_scratchpad_modal( Ok(TemplateResponse::new_template( "scratchpad/editor_modal.html", ScratchpadDetailData { - user, scratchpad: scratchpad_detail, - conversation_archive, is_editing_title, }, )) @@ -206,7 +193,6 @@ pub async fn create_scratchpad( let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let scratchpad_list: Vec = scratchpads.iter().map(ScratchpadListItem::from).collect(); @@ -219,10 +205,8 @@ pub async fn create_scratchpad( "scratchpad/base.html", "main", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: Some(ScratchpadDetail::from(&scratchpad)), }, )) @@ -257,14 +241,11 @@ pub async fn update_scratchpad_title( Scratchpad::update_title(&scratchpad_id, &user.id, &form.title, &state.db).await?; let scratchpad = Scratchpad::get_by_id(&scratchpad_id, &user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; Ok(TemplateResponse::new_template( "scratchpad/editor_modal.html", ScratchpadDetailData { - user, scratchpad: ScratchpadDetail::from(&scratchpad), - conversation_archive, is_editing_title: false, }, )) @@ -279,7 +260,6 @@ pub async fn delete_scratchpad( // Return the updated main section content let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; let scratchpad_list: Vec = @@ -293,10 +273,8 @@ pub async fn delete_scratchpad( "scratchpad/base.html", "main", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: None, }, )) @@ -350,7 +328,6 @@ pub async fn ingest_scratchpad( let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let scratchpad_list: Vec = scratchpads.iter().map(ScratchpadListItem::from).collect(); @@ -374,10 +351,8 @@ pub async fn ingest_scratchpad( "scratchpad/base.html", "main", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: None, }, ); @@ -399,7 +374,6 @@ pub async fn archive_scratchpad( let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let scratchpad_list: Vec = scratchpads.iter().map(ScratchpadListItem::from).collect(); @@ -411,15 +385,59 @@ pub async fn archive_scratchpad( Ok(TemplateResponse::new_template( "scratchpad/base.html", ScratchpadPageData { - user, scratchpads: scratchpad_list, archived_scratchpads: archived_list, - conversation_archive, new_scratchpad: None, }, )) } +pub async fn restore_scratchpad( + RequireUser(user): RequireUser, + State(state): State, + Path(scratchpad_id): Path, +) -> Result { + Scratchpad::restore(&scratchpad_id, &user.id, &state.db).await?; + + let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; + let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; + + let scratchpad_list: Vec = + scratchpads.iter().map(ScratchpadListItem::from).collect(); + let archived_list: Vec = archived_scratchpads + .iter() + .map(ScratchpadArchiveItem::from) + .collect(); + + let trigger_payload = serde_json::json!({ + "toast": { + "title": "Scratchpad restored", + "description": "The scratchpad is back in your active list.", + "type": "info" + } + }); + let trigger_value = serde_json::to_string(&trigger_payload).unwrap_or_else(|_| { + r#"{"toast":{"title":"Scratchpad restored","description":"The scratchpad is back in your active list.","type":"info"}}"#.to_string() + }); + + let template_response = TemplateResponse::new_partial( + "scratchpad/base.html", + "main", + ScratchpadPageData { + scratchpads: scratchpad_list, + archived_scratchpads: archived_list, + new_scratchpad: None, + }, + ); + + let mut response = template_response.into_response(); + if let Ok(header_value) = HeaderValue::from_str(&trigger_value) { + response.headers_mut().insert(HX_TRIGGER, header_value); + } + + Ok(response) +} + #[cfg(test)] mod tests { use super::*; @@ -509,52 +527,3 @@ mod tests { assert_eq!(archive_item.ingested_at, None); } } - -pub async fn restore_scratchpad( - RequireUser(user): RequireUser, - State(state): State, - Path(scratchpad_id): Path, -) -> Result { - Scratchpad::restore(&scratchpad_id, &user.id, &state.db).await?; - - let scratchpads = Scratchpad::get_by_user(&user.id, &state.db).await?; - let archived_scratchpads = Scratchpad::get_archived_by_user(&user.id, &state.db).await?; - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; - - let scratchpad_list: Vec = - scratchpads.iter().map(ScratchpadListItem::from).collect(); - let archived_list: Vec = archived_scratchpads - .iter() - .map(ScratchpadArchiveItem::from) - .collect(); - - let trigger_payload = serde_json::json!({ - "toast": { - "title": "Scratchpad restored", - "description": "The scratchpad is back in your active list.", - "type": "info" - } - }); - let trigger_value = serde_json::to_string(&trigger_payload).unwrap_or_else(|_| { - r#"{"toast":{"title":"Scratchpad restored","description":"The scratchpad is back in your active list.","type":"info"}}"#.to_string() - }); - - let template_response = TemplateResponse::new_partial( - "scratchpad/base.html", - "main", - ScratchpadPageData { - user, - scratchpads: scratchpad_list, - archived_scratchpads: archived_list, - conversation_archive, - new_scratchpad: None, - }, - ); - - let mut response = template_response.into_response(); - if let Ok(header_value) = HeaderValue::from_str(&trigger_value) { - response.headers_mut().insert(HX_TRIGGER, header_value); - } - - Ok(response) -} diff --git a/html-router/src/routes/search/handlers.rs b/html-router/src/routes/search/handlers.rs index 320af83..f2611e1 100644 --- a/html-router/src/routes/search/handlers.rs +++ b/html-router/src/routes/search/handlers.rs @@ -9,9 +9,7 @@ use axum::{ response::IntoResponse, }; use common::storage::types::{ - conversation::Conversation, text_content::{deserialize_flexible_id, TextContent}, - user::User, StoredObject, }; use retrieval_pipeline::{RetrievalConfig, SearchResult, SearchTarget, StrategyOutput}; @@ -194,10 +192,7 @@ pub async fn search_result_handler( pub struct AnswerData { search_result: Vec, query_param: String, - user: User, - conversation_archive: Vec, } - let conversation_archive = User::get_user_conversations(&user.id, &state.db).await?; let (search_results_for_template, final_query_param_for_template) = if let Some(actual_query) = params.query @@ -346,8 +341,6 @@ pub async fn search_result_handler( AnswerData { search_result: search_results_for_template, query_param: final_query_param_for_template, - user, - conversation_archive, }, )) }