diff --git a/CHANGELOG.md b/CHANGELOG.md index 35c9781..304efad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,9 @@ # Changelog -## Unreleased +## 1.0.0 (2026-01-02) +- **Locally generated embeddings are now default**. If you want to continue using API embeddings, set EMBEDDING_BACKEND to openai. This will download a ONNX model and recreate all embeddings. But in most instances it's very worth it. Removing the network bound call to create embeddings. Creating embeddings on my N100 device is extremely fast. Typically a search response is provided in less than 50ms. - Added a benchmarks create for evaluating the retrieval process - Added fastembed embedding support, enables the use of local CPU generated embeddings, greatly improved latency if machine can handle it. Quick search has vastly better accuracy and is much faster, 50ms latency when testing compared to minimum 300ms. -- Embeddings stored on own table +- Embeddings stored on own table. - Refactored retrieval pipeline to use the new, faster and more accurate strategy. Read [blog post](https://blog.stark.pub/posts/eval-retrieval-refactor/) for more details. ## Version 0.2.7 (2025-12-04) diff --git a/Cargo.lock b/Cargo.lock index 3da9754..f66de0e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3820,7 +3820,7 @@ checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30" [[package]] name = "main" -version = "0.2.7" +version = "1.0.0" dependencies = [ "anyhow", "api-router", diff --git a/README.md b/README.md index 8f993b0..07a8826 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Minne -**A graph-powered personal knowledge base that remembers for you.** +**A graph-powered personal knowledge base that makes storing easy.** Capture content effortlessly, let AI discover connections, and explore your knowledge visually. Self-hosted and privacy-focused. diff --git a/common/migrations/20251231_enforce_schemafull.surql b/common/migrations/20251231_enforce_schemafull.surql index d37cbe1..30b0dd7 100644 --- a/common/migrations/20251231_enforce_schemafull.surql +++ b/common/migrations/20251231_enforce_schemafull.surql @@ -62,7 +62,13 @@ DEFINE TABLE OVERWRITE conversation SCHEMAFULL; DEFINE TABLE OVERWRITE file SCHEMAFULL; DEFINE TABLE OVERWRITE knowledge_entity SCHEMAFULL; DEFINE TABLE OVERWRITE message SCHEMAFULL; -DEFINE TABLE OVERWRITE relates_to SCHEMAFULL; +DEFINE TABLE OVERWRITE relates_to SCHEMAFULL TYPE RELATION; +DEFINE FIELD IF NOT EXISTS in ON relates_to TYPE record; +DEFINE FIELD IF NOT EXISTS out ON relates_to TYPE record; +DEFINE FIELD IF NOT EXISTS metadata ON relates_to TYPE object; +DEFINE FIELD IF NOT EXISTS metadata.user_id ON relates_to TYPE string; +DEFINE FIELD IF NOT EXISTS metadata.source_id ON relates_to TYPE string; +DEFINE FIELD IF NOT EXISTS metadata.relationship_type ON relates_to TYPE string; DEFINE TABLE OVERWRITE scratchpad SCHEMAFULL; DEFINE TABLE OVERWRITE system_settings SCHEMAFULL; DEFINE TABLE OVERWRITE text_chunk SCHEMAFULL; diff --git a/common/src/storage/indexes.rs b/common/src/storage/indexes.rs index a196a47..79e7ad0 100644 --- a/common/src/storage/indexes.rs +++ b/common/src/storage/indexes.rs @@ -253,11 +253,7 @@ async fn ensure_runtime_indexes_inner( Ok(()) } -async fn get_index_status( - db: &SurrealDbClient, - index_name: &str, - table: &str, -) -> Result { +async fn get_index_status(db: &SurrealDbClient, index_name: &str, table: &str) -> Result { let info_query = format!("INFO FOR INDEX {index_name} ON TABLE {table};"); let mut info_res = db .client diff --git a/common/src/storage/types/file_info.rs b/common/src/storage/types/file_info.rs index 4e8f0d9..f06ec68 100644 --- a/common/src/storage/types/file_info.rs +++ b/common/src/storage/types/file_info.rs @@ -3,7 +3,10 @@ use bytes; use mime_guess::from_path; use object_store::Error as ObjectStoreError; use sha2::{Digest, Sha256}; -use std::{io::{BufReader, Read}, path::Path}; +use std::{ + io::{BufReader, Read}, + path::Path, +}; use tempfile::NamedTempFile; use thiserror::Error; use tokio::task; diff --git a/common/src/storage/types/knowledge_entity.rs b/common/src/storage/types/knowledge_entity.rs index 0758ea7..be47313 100644 --- a/common/src/storage/types/knowledge_entity.rs +++ b/common/src/storage/types/knowledge_entity.rs @@ -460,7 +460,11 @@ impl KnowledgeEntity { for (i, entity) in all_entities.iter().enumerate() { if i > 0 && i % 100 == 0 { - info!(progress = i, total = total_entities, "Re-embedding progress"); + info!( + progress = i, + total = total_entities, + "Re-embedding progress" + ); } let embedding_input = format!( @@ -489,12 +493,12 @@ impl KnowledgeEntity { // Clear existing embeddings and index first to prevent SurrealDB panics and dimension conflicts. info!("Removing old index and clearing embeddings..."); - + // Explicitly remove the index first. This prevents background HNSW maintenance from crashing // when we delete/replace data, dealing with a known SurrealDB panic. db.client .query(format!( - "REMOVE INDEX idx_embedding_knowledge_entity_embedding ON TABLE {};", + "REMOVE INDEX idx_embedding_knowledge_entity_embedding ON TABLE {};", KnowledgeEntityEmbedding::table_name() )) .await @@ -503,7 +507,10 @@ impl KnowledgeEntity { .map_err(AppError::Database)?; db.client - .query(format!("DELETE FROM {};", KnowledgeEntityEmbedding::table_name())) + .query(format!( + "DELETE FROM {};", + KnowledgeEntityEmbedding::table_name() + )) .await .map_err(AppError::Database)? .check() diff --git a/common/src/storage/types/knowledge_relationship.rs b/common/src/storage/types/knowledge_relationship.rs index 6b41c4d..56a4603 100644 --- a/common/src/storage/types/knowledge_relationship.rs +++ b/common/src/storage/types/knowledge_relationship.rs @@ -55,7 +55,7 @@ impl KnowledgeRelationship { relationship_type = self.metadata.relationship_type.as_str() ); - db_client.query(query).await?; + db_client.query(query).await?.check()?; Ok(()) } @@ -99,9 +99,7 @@ impl KnowledgeRelationship { Err(AppError::NotFound(format!("Relationship {id} not found"))) } } else { - db_client - .query(format!("DELETE relates_to:`{id}`")) - .await?; + db_client.query(format!("DELETE relates_to:`{id}`")).await?; Ok(()) } } @@ -161,7 +159,7 @@ mod tests { } #[tokio::test] - async fn test_store_relationship() { + async fn test_store_and_verify_by_source_id() { // Setup in-memory database for testing let namespace = "test_ns"; let database = &Uuid::new_v4().to_string(); @@ -169,6 +167,10 @@ mod tests { .await .expect("Failed to start in-memory surrealdb"); + db.apply_migrations() + .await + .expect("Failed to apply migrations"); + // Create two entities to relate let entity1_id = create_test_entity("Entity 1", &db).await; let entity2_id = create_test_entity("Entity 2", &db).await; @@ -209,7 +211,7 @@ mod tests { } #[tokio::test] - async fn test_delete_relationship_by_id() { + async fn test_store_and_delete_relationship() { // Setup in-memory database for testing let namespace = "test_ns"; let database = &Uuid::new_v4().to_string(); @@ -234,7 +236,7 @@ mod tests { relationship_type, ); - // Store the relationship + // Store relationship relationship .store_relationship(&db) .await @@ -255,12 +257,12 @@ mod tests { "Relationship should exist before deletion" ); - // Delete the relationship by ID + // Delete relationship by ID KnowledgeRelationship::delete_relationship_by_id(&relationship.id, &user_id, &db) .await .expect("Failed to delete relationship by ID"); - // Query to verify the relationship was deleted + // Query to verify relationship was deleted let mut result = db .query(format!( "SELECT * FROM relates_to WHERE metadata.user_id = '{}' AND metadata.source_id = '{}'", @@ -270,7 +272,7 @@ mod tests { .expect("Query failed"); let results: Vec = result.take(0).unwrap_or_default(); - // Verify the relationship no longer exists + // Verify relationship no longer exists assert!(results.is_empty(), "Relationship should be deleted"); } @@ -342,7 +344,7 @@ mod tests { } #[tokio::test] - async fn test_delete_relationships_by_source_id() { + async fn test_store_relationship_exists() { // Setup in-memory database for testing let namespace = "test_ns"; let database = &Uuid::new_v4().to_string(); diff --git a/common/src/storage/types/mod.rs b/common/src/storage/types/mod.rs index 8434254..eae257f 100644 --- a/common/src/storage/types/mod.rs +++ b/common/src/storage/types/mod.rs @@ -116,7 +116,7 @@ macro_rules! stored_object { } - $(#[$struct_attr])* + $(#[$struct_attr])* #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct $name { #[serde(deserialize_with = "deserialize_flexible_id")] diff --git a/common/src/storage/types/text_chunk.rs b/common/src/storage/types/text_chunk.rs index fa2e9ff..1f876c0 100644 --- a/common/src/storage/types/text_chunk.rs +++ b/common/src/storage/types/text_chunk.rs @@ -352,12 +352,12 @@ impl TextChunk { // Generate all new embeddings in memory let mut new_embeddings: HashMap, String, String)> = HashMap::new(); info!("Generating new embeddings for all chunks..."); - + for (i, chunk) in all_chunks.iter().enumerate() { if i > 0 && i % 100 == 0 { info!(progress = i, total = total_chunks, "Re-embedding progress"); } - + let embedding = provider .embed(&chunk.chunk) .await @@ -381,12 +381,12 @@ impl TextChunk { // Clear existing embeddings and index first to prevent SurrealDB panics and dimension conflicts. info!("Removing old index and clearing embeddings..."); - + // Explicitly remove the index first. This prevents background HNSW maintenance from crashing // when we delete/replace data, dealing with a known SurrealDB panic. db.client .query(format!( - "REMOVE INDEX idx_embedding_text_chunk_embedding ON TABLE {};", + "REMOVE INDEX idx_embedding_text_chunk_embedding ON TABLE {};", TextChunkEmbedding::table_name() )) .await diff --git a/common/src/utils/embedding.rs b/common/src/utils/embedding.rs index c3b5cd3..ae4c33a 100644 --- a/common/src/utils/embedding.rs +++ b/common/src/utils/embedding.rs @@ -250,9 +250,8 @@ impl EmbeddingProvider { match config.embedding_backend { EmbeddingBackend::OpenAI => { - let client = openai_client.ok_or_else(|| { - anyhow!("OpenAI embedding backend requires an OpenAI client") - })?; + let client = openai_client + .ok_or_else(|| anyhow!("OpenAI embedding backend requires an OpenAI client"))?; // Use defaults that match SystemSettings initial values Self::new_openai(client, "text-embedding-3-small".to_string(), 1536) } diff --git a/dist-workspace.toml b/dist-workspace.toml index ab9bb09..4384e5e 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -12,11 +12,13 @@ include = ["lib"] # The installers to generate for each app installers = [] # Target platforms to build apps for (Rust target-triple syntax) -targets = ["aarch64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc"] +targets = ["aarch64-apple-darwin", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc"] # Skip checking whether the specified configuration files are up to date allow-dirty = ["ci"] [dist.github-custom-runners] +aarch64-apple-darwin = "macos-latest" +x86_64-apple-darwin = "macos-15-intel" x86_64-unknown-linux-gnu = "ubuntu-22.04" x86_64-unknown-linux-musl = "ubuntu-22.04" x86_64-pc-windows-msvc = "windows-latest" diff --git a/docs/configuration.md b/docs/configuration.md index 82db87d..3d75dbf 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -25,7 +25,7 @@ Minne can be configured via environment variables or a `config.yaml` file. Envir | `STORAGE` | Storage backend (`local`, `memory`) | `local` | | `PDF_INGEST_MODE` | PDF ingestion strategy (`classic`, `llm-first`) | `llm-first` | | `RETRIEVAL_STRATEGY` | Default retrieval strategy | - | -| `EMBEDDING_BACKEND` | Embedding provider (`openai`, `fastembed`, `hashed`) | `fastembed` | +| `EMBEDDING_BACKEND` | Embedding provider (`openai`, `fastembed`) | `fastembed` | | `FASTEMBED_CACHE_DIR` | Model cache directory | `/fastembed` | | `FASTEMBED_SHOW_DOWNLOAD_PROGRESS` | Show progress bar for model downloads | `false` | | `FASTEMBED_MAX_LENGTH` | Max sequence length for FastEmbed models | - | diff --git a/evaluations/src/corpus/store.rs b/evaluations/src/corpus/store.rs index 0bd7f02..5f31cf9 100644 --- a/evaluations/src/corpus/store.rs +++ b/evaluations/src/corpus/store.rs @@ -893,158 +893,6 @@ mod tests { } } - #[tokio::test] - async fn seeds_manifest_with_transactional_batches() { - let namespace = "test_ns"; - let database = Uuid::new_v4().to_string(); - let db = SurrealDbClient::memory(namespace, &database) - .await - .expect("memory db"); - db.apply_migrations() - .await - .expect("apply migrations for memory db"); - - let manifest = build_manifest(); - seed_manifest_into_db(&db, &manifest) - .await - .expect("manifest seed should succeed"); - - let text_contents: Vec = db - .client - .query(format!("SELECT * FROM {};", TextContent::table_name())) - .await - .expect("select text_content") - .take(0) - .unwrap_or_default(); - assert_eq!(text_contents.len(), 1); - - let entities: Vec = db - .client - .query(format!("SELECT * FROM {};", KnowledgeEntity::table_name())) - .await - .expect("select knowledge_entity") - .take(0) - .unwrap_or_default(); - assert_eq!(entities.len(), 1); - - let chunks: Vec = db - .client - .query(format!("SELECT * FROM {};", TextChunk::table_name())) - .await - .expect("select text_chunk") - .take(0) - .unwrap_or_default(); - assert_eq!(chunks.len(), 1); - - let relationships: Vec = db - .client - .query("SELECT * FROM relates_to;") - .await - .expect("select relates_to") - .take(0) - .unwrap_or_default(); - assert_eq!(relationships.len(), 1); - - let entity_embeddings: Vec = db - .client - .query(format!( - "SELECT * FROM {};", - KnowledgeEntityEmbedding::table_name() - )) - .await - .expect("select knowledge_entity_embedding") - .take(0) - .unwrap_or_default(); - assert_eq!(entity_embeddings.len(), 1); - - let chunk_embeddings: Vec = db - .client - .query(format!( - "SELECT * FROM {};", - TextChunkEmbedding::table_name() - )) - .await - .expect("select text_chunk_embedding") - .take(0) - .unwrap_or_default(); - assert_eq!(chunk_embeddings.len(), 1); - } - - #[tokio::test] - async fn rolls_back_when_embeddings_mismatch_index_dimension() { - let namespace = "test_ns_rollback"; - let database = Uuid::new_v4().to_string(); - let db = SurrealDbClient::memory(namespace, &database) - .await - .expect("memory db"); - db.apply_migrations() - .await - .expect("apply migrations for memory db"); - - let manifest = build_manifest(); - let result = seed_manifest_into_db(&db, &manifest).await; - assert!( - result.is_ok(), - "seeding should succeed even if embedding dimensions differ from default index" - ); - - let text_contents: Vec = db - .client - .query(format!("SELECT * FROM {};", TextContent::table_name())) - .await - .expect("select text_content") - .take(0) - .unwrap_or_default(); - let entities: Vec = db - .client - .query(format!("SELECT * FROM {};", KnowledgeEntity::table_name())) - .await - .expect("select knowledge_entity") - .take(0) - .unwrap_or_default(); - let chunks: Vec = db - .client - .query(format!("SELECT * FROM {};", TextChunk::table_name())) - .await - .expect("select text_chunk") - .take(0) - .unwrap_or_default(); - let relationships: Vec = db - .client - .query("SELECT * FROM relates_to;") - .await - .expect("select relates_to") - .take(0) - .unwrap_or_default(); - let entity_embeddings: Vec = db - .client - .query(format!( - "SELECT * FROM {};", - KnowledgeEntityEmbedding::table_name() - )) - .await - .expect("select knowledge_entity_embedding") - .take(0) - .unwrap_or_default(); - let chunk_embeddings: Vec = db - .client - .query(format!( - "SELECT * FROM {};", - TextChunkEmbedding::table_name() - )) - .await - .expect("select text_chunk_embedding") - .take(0) - .unwrap_or_default(); - - assert_eq!(text_contents.len(), 1); - assert_eq!(entities.len(), 1); - assert_eq!(chunks.len(), 1); - assert_eq!(relationships.len(), 1); - assert_eq!(entity_embeddings.len(), 1); - assert_eq!(chunk_embeddings.len(), 1); - } - #[test] fn window_manifest_trims_questions_and_negatives() { let manifest = build_manifest(); diff --git a/evaluations/src/inspection.rs b/evaluations/src/inspection.rs index 064ed53..6e5d086 100644 --- a/evaluations/src/inspection.rs +++ b/evaluations/src/inspection.rs @@ -7,7 +7,7 @@ use std::{ use anyhow::{anyhow, Context, Result}; use common::storage::{db::SurrealDbClient, types::text_chunk::TextChunk}; -use crate::{args::Config, eval::connect_eval_db, corpus, snapshot::DbSnapshotState}; +use crate::{args::Config, corpus, eval::connect_eval_db, snapshot::DbSnapshotState}; pub async fn inspect_question(config: &Config) -> Result<()> { let question_id = config diff --git a/evaluations/src/pipeline/context.rs b/evaluations/src/pipeline/context.rs index 390a724..4bf02ed 100644 --- a/evaluations/src/pipeline/context.rs +++ b/evaluations/src/pipeline/context.rs @@ -20,9 +20,10 @@ use retrieval_pipeline::{ use crate::{ args::Config, cache::EmbeddingCache, + corpus, datasets::ConvertedDataset, eval::{CaseDiagnostics, CaseSummary, EvaluationStageTimings, EvaluationSummary, SeededCase}, - corpus, slice, snapshot, + slice, snapshot, }; pub(super) struct EvaluationContext<'a> { diff --git a/evaluations/src/pipeline/stages/prepare_corpus.rs b/evaluations/src/pipeline/stages/prepare_corpus.rs index cd73690..2e6e369 100644 --- a/evaluations/src/pipeline/stages/prepare_corpus.rs +++ b/evaluations/src/pipeline/stages/prepare_corpus.rs @@ -3,7 +3,7 @@ use std::time::Instant; use anyhow::Context; use tracing::info; -use crate::{eval::can_reuse_namespace, corpus, slice, snapshot}; +use crate::{corpus, eval::can_reuse_namespace, slice, snapshot}; use super::super::{ context::{EvalStage, EvaluationContext}, diff --git a/evaluations/src/pipeline/stages/prepare_namespace.rs b/evaluations/src/pipeline/stages/prepare_namespace.rs index a12c81f..8ea7103 100644 --- a/evaluations/src/pipeline/stages/prepare_namespace.rs +++ b/evaluations/src/pipeline/stages/prepare_namespace.rs @@ -5,12 +5,12 @@ use common::storage::types::system_settings::SystemSettings; use tracing::{info, warn}; use crate::{ + corpus, db_helpers::{recreate_indexes, remove_all_indexes, reset_namespace}, eval::{ can_reuse_namespace, cases_from_manifest, enforce_system_settings, ensure_eval_user, record_namespace_state, warm_hnsw_cache, }, - corpus, }; use super::super::{ diff --git a/evaluations/src/pipeline/stages/prepare_slice.rs b/evaluations/src/pipeline/stages/prepare_slice.rs index 7396338..f5909bf 100644 --- a/evaluations/src/pipeline/stages/prepare_slice.rs +++ b/evaluations/src/pipeline/stages/prepare_slice.rs @@ -48,7 +48,9 @@ pub(crate) async fn prepare_slice( .database .db_namespace .clone() - .unwrap_or_else(|| default_namespace(ctx.dataset().metadata.id.as_str(), ctx.config().limit)); + .unwrap_or_else(|| { + default_namespace(ctx.dataset().metadata.id.as_str(), ctx.config().limit) + }); ctx.database = ctx .config() .database diff --git a/html-router/app.css b/html-router/app.css index 5940581..c6afe6e 100644 --- a/html-router/app.css +++ b/html-router/app.css @@ -608,7 +608,7 @@ line-height: inherit; } - .markdown-content :not(pre) > code { + .markdown-content :not(pre)>code { background-color: rgba(0, 0, 0, 0.05); color: var(--color-base-content); padding: 0.15em 0.4em; @@ -662,7 +662,7 @@ color: var(--color-base-content); } - [data-theme="dark"] .markdown-content :not(pre) > code { + [data-theme="dark"] .markdown-content :not(pre)>code { background-color: rgba(255, 255, 255, 0.12); color: var(--color-base-content); } @@ -677,6 +677,136 @@ z-index: 9999; box-shadow: var(--nb-shadow); } + + /* .nb-label: Uppercase, bold, tracking-wide, text-xs for section headers */ + .nb-label { + @apply uppercase font-bold tracking-wide text-xs; + } + + /* .nb-data: JetBrains Mono, tabular-nums for timestamps, IDs, badges */ + .nb-data { + font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; + font-variant-numeric: tabular-nums; + } + + /* The Stamp: Button :active state pushes into page */ + .nb-btn:active { + transform: translate(2px, 2px) !important; + box-shadow: 2px 2px 0 0 #000 !important; + } + + /* Staggered Card Dealing Animation */ + @keyframes deal-in { + 0% { + opacity: 0; + transform: translateY(12px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } + } + + /* Staggered deal-in animation - STRICTLY SCOPED to main content area */ + main .nb-card, + main .nb-panel { + animation: deal-in 300ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)) backwards; + } + + /* Exclude elements that shouldn't animate even inside main */ + main nav.nb-panel, + main .no-animation { + animation: none; + } + + /* Apply staggered delays only to direct children of grids/lists or top-level containers */ + main .nb-masonry>.nb-card:nth-child(1), + main .grid>.nb-panel:nth-child(1) { + animation-delay: 0ms; + } + + 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: 100ms; + } + + main .nb-masonry>.nb-card:nth-child(4), + main .grid>.nb-panel:nth-child(4) { + animation-delay: 150ms; + } + + main .nb-masonry>.nb-card:nth-child(5), + main .grid>.nb-panel:nth-child(5) { + animation-delay: 200ms; + } + + main .nb-masonry>.nb-card:nth-child(6), + main .grid>.nb-panel:nth-child(6) { + animation-delay: 250ms; + } + + main .nb-masonry>.nb-card:nth-child(7), + main .grid>.nb-panel:nth-child(7) { + animation-delay: 300ms; + } + + main .nb-masonry>.nb-card:nth-child(8), + main .grid>.nb-panel:nth-child(8) { + animation-delay: 350ms; + } + + main .nb-masonry>.nb-card:nth-child(n+9), + main .grid>.nb-panel:nth-child(n+9) { + animation-delay: 400ms; + } + + /* HTMX Swap Fade-Up Animation */ + @keyframes fade-up { + 0% { + opacity: 0; + transform: translateY(8px); + } + + 100% { + opacity: 1; + transform: translateY(0); + } + } + + .animate-fade-up { + animation: fade-up 200ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)) forwards; + } + + /* Kinetic Input: Chat Armed State */ + #chat-input:not(:placeholder-shown)~button { + filter: saturate(1.3) brightness(1.1); + } + + #chat-input:not(:placeholder-shown) { + border-color: var(--color-accent); + } + + /* Evidence Frame for images (Tufte treatment) */ + .nb-evidence-frame { + @apply border-2 border-neutral m-2 bg-base-200; + } + + .nb-evidence-frame img { + display: block; + width: 100%; + height: auto; + } + + .nb-evidence-frame figcaption { + @apply text-xs px-2 py-1 border-t-2 border-neutral; + font-family: 'JetBrains Mono', ui-monospace, monospace; + } } /* Theme-aware placeholder contrast tweaks */ @@ -691,6 +821,31 @@ color: rgba(255, 255, 255, 0.78) !important; opacity: 0.85; } + + /* === DESIGN POLISHING: Receding Reality === */ + /* Modal opens → background scales and blurs */ + body:has(dialog[open]) #main-content-wrapper, + body.modal-open #main-content-wrapper { + transform: scale(0.98); + filter: blur(2px); + transition: transform 250ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)), + filter 250ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)); + } + + #main-content-wrapper { + transform: scale(1); + filter: blur(0); + transition: transform 250ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)), + filter 250ms var(--ease-mechanical, cubic-bezier(0.25, 1, 0.5, 1)); + } + + /* === DESIGN POLISHING: Scroll-Linked Navbar Shadow === */ + nav { + --scroll-depth: 0; + box-shadow: 4px calc(4px + var(--scroll-depth) * 4px) 0 0 #000; + transition: box-shadow 150ms ease; + } + } /* satoshi.css */ @@ -714,6 +869,15 @@ 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; +} + /* Minimal override: prevent DaisyUI .menu hover bg on our nb buttons */ @layer utilities { @@ -736,4 +900,4 @@ .toast-alert-title { @apply text-lg font-bold; } -} +} \ No newline at end of file diff --git a/html-router/assets/design-polish.js b/html-router/assets/design-polish.js new file mode 100644 index 0000000..13fcef3 --- /dev/null +++ b/html-router/assets/design-polish.js @@ -0,0 +1,199 @@ +/** + * Design Polishing Pass - Interactive Effects + * + * Includes: + * - Scroll-Linked Navbar Shadow + * - HTMX Swap Animation + * - Typewriter AI Response + * - Rubberbanding Scroll + */ + +(function() { + 'use strict'; + + // === SCROLL-LINKED NAVBAR SHADOW === + function initScrollShadow() { + const mainContent = document.querySelector('main'); + const navbar = document.querySelector('nav'); + if (!mainContent || !navbar) return; + + mainContent.addEventListener('scroll', () => { + const scrollTop = mainContent.scrollTop; + const scrollHeight = mainContent.scrollHeight - mainContent.clientHeight; + const scrollDepth = scrollHeight > 0 ? Math.min(scrollTop / 200, 1) : 0; + navbar.style.setProperty('--scroll-depth', scrollDepth.toFixed(2)); + }, { passive: true }); + } + + // === HTMX SWAP ANIMATION === + function initHtmxSwapAnimation() { + document.body.addEventListener('htmx:afterSwap', (event) => { + let target = event.detail.target; + if (!target) return; + + // If full body swap (hx-boost), animate only the main content + if (target.tagName === 'BODY') { + const main = document.querySelector('main'); + if (main) target = main; + } + + // Only animate if target is valid and inside/is main content or a card/panel + // Avoid animating sidebar or navbar updates + if (target && (target.tagName === 'MAIN' || target.closest('main'))) { + if (!target.classList.contains('animate-fade-up')) { + target.classList.add('animate-fade-up'); + // Remove class after animation completes to allow re-animation + setTimeout(() => { + target.classList.remove('animate-fade-up'); + }, 250); + } + } + }); + } + + // === TYPEWRITER AI RESPONSE === + // Works with SSE streaming - buffers text and reveals character by character + window.initTypewriter = function(element, options = {}) { + const { + minDelay = 5, + maxDelay = 15, + showCursor = true + } = options; + + let buffer = ''; + let isTyping = false; + let cursorElement = null; + + if (showCursor) { + cursorElement = document.createElement('span'); + cursorElement.className = 'typewriter-cursor'; + cursorElement.textContent = '▌'; + cursorElement.style.animation = 'blink 1s step-end infinite'; + element.appendChild(cursorElement); + } + + function typeNextChar() { + if (buffer.length === 0) { + isTyping = false; + return; + } + + isTyping = true; + const char = buffer.charAt(0); + buffer = buffer.slice(1); + + // Insert before cursor + if (cursorElement && cursorElement.parentNode) { + const textNode = document.createTextNode(char); + element.insertBefore(textNode, cursorElement); + } else { + element.textContent += char; + } + + const delay = minDelay + Math.random() * (maxDelay - minDelay); + setTimeout(typeNextChar, delay); + } + + return { + append: function(text) { + buffer += text; + if (!isTyping) { + typeNextChar(); + } + }, + complete: function() { + // Flush remaining buffer immediately + if (cursorElement && cursorElement.parentNode) { + const textNode = document.createTextNode(buffer); + element.insertBefore(textNode, cursorElement); + cursorElement.remove(); + } else { + element.textContent += buffer; + } + buffer = ''; + isTyping = false; + } + }; + }; + + // === RUBBERBANDING SCROLL === + function initRubberbanding() { + const containers = document.querySelectorAll('#chat-scroll-container, .content-scroll-container'); + + containers.forEach(container => { + let startY = 0; + let pulling = false; + let pullDistance = 0; + const maxPull = 60; + const resistance = 0.4; + + container.addEventListener('touchstart', (e) => { + startY = e.touches[0].clientY; + }, { passive: true }); + + container.addEventListener('touchmove', (e) => { + const currentY = e.touches[0].clientY; + const diff = currentY - startY; + + // At top boundary, pulling down + if (container.scrollTop <= 0 && diff > 0) { + pulling = true; + pullDistance = Math.min(diff * resistance, maxPull); + container.style.transform = `translateY(${pullDistance}px)`; + } + // At bottom boundary, pulling up + else if (container.scrollTop + container.clientHeight >= container.scrollHeight && diff < 0) { + pulling = true; + pullDistance = Math.max(diff * resistance, -maxPull); + container.style.transform = `translateY(${pullDistance}px)`; + } + }, { passive: true }); + + container.addEventListener('touchend', () => { + if (pulling) { + container.style.transition = 'transform 300ms cubic-bezier(0.25, 1, 0.5, 1)'; + container.style.transform = 'translateY(0)'; + setTimeout(() => { + container.style.transition = ''; + }, 300); + pulling = false; + pullDistance = 0; + } + }, { passive: true }); + }); + } + + // === INITIALIZATION === + function init() { + initScrollShadow(); + initHtmxSwapAnimation(); + initRubberbanding(); + } + + // Run on DOMContentLoaded + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', init); + } else { + init(); + } + + // Re-init rubberbanding after HTMX navigations + document.body.addEventListener('htmx:afterSettle', () => { + initRubberbanding(); + }); + + // Add typewriter cursor blink animation + const style = document.createElement('style'); + style.textContent = ` + @keyframes blink { + 0%, 100% { opacity: 1; } + 50% { opacity: 0; } + } + .typewriter-cursor { + color: var(--color-accent); + font-weight: bold; + } + `; + document.head.appendChild(style); + +})(); diff --git a/html-router/assets/fonts/JetBrainsMono-Regular.woff2 b/html-router/assets/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..40da427 Binary files /dev/null and b/html-router/assets/fonts/JetBrainsMono-Regular.woff2 differ diff --git a/html-router/assets/fonts/JetBrainsMono-Variable.ttf b/html-router/assets/fonts/JetBrainsMono-Variable.ttf new file mode 100644 index 0000000..5b7a526 Binary files /dev/null and b/html-router/assets/fonts/JetBrainsMono-Variable.ttf differ diff --git a/html-router/assets/htmx-head-ext.js b/html-router/assets/htmx-head-ext.js deleted file mode 100644 index b1e6878..0000000 --- a/html-router/assets/htmx-head-ext.js +++ /dev/null @@ -1,144 +0,0 @@ -//========================================================== -// head-support.js -// -// An extension to add head tag merging. -//========================================================== -(function(){ - - var api = null; - - function log() { - //console.log(arguments); - } - - function mergeHead(newContent, defaultMergeStrategy) { - - if (newContent && newContent.indexOf(' -1) { - const htmlDoc = document.createElement("html"); - // remove svgs to avoid conflicts - var contentWithSvgsRemoved = newContent.replace(/]*>|>)([\s\S]*?)<\/svg>/gim, ''); - // extract head tag - var headTag = contentWithSvgsRemoved.match(/(]*>|>)([\s\S]*?)<\/head>)/im); - - // if the head tag exists... - if (headTag) { - - var added = [] - var removed = [] - var preserved = [] - var nodesToAppend = [] - - htmlDoc.innerHTML = headTag; - var newHeadTag = htmlDoc.querySelector("head"); - var currentHead = document.head; - - if (newHeadTag == null) { - return; - } else { - // put all new head elements into a Map, by their outerHTML - var srcToNewHeadNodes = new Map(); - for (const newHeadChild of newHeadTag.children) { - srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild); - } - } - - - - // determine merge strategy - var mergeStrategy = api.getAttributeValue(newHeadTag, "hx-head") || defaultMergeStrategy; - - // get the current head - for (const currentHeadElt of currentHead.children) { - - // If the current head element is in the map - var inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML); - var isReAppended = currentHeadElt.getAttribute("hx-head") === "re-eval"; - var isPreserved = api.getAttributeValue(currentHeadElt, "hx-preserve") === "true"; - if (inNewContent || isPreserved) { - if (isReAppended) { - // remove the current version and let the new version replace it and re-execute - removed.push(currentHeadElt); - } else { - // this element already exists and should not be re-appended, so remove it from - // the new content map, preserving it in the DOM - srcToNewHeadNodes.delete(currentHeadElt.outerHTML); - preserved.push(currentHeadElt); - } - } else { - if (mergeStrategy === "append") { - // we are appending and this existing element is not new content - // so if and only if it is marked for re-append do we do anything - if (isReAppended) { - removed.push(currentHeadElt); - nodesToAppend.push(currentHeadElt); - } - } else { - // if this is a merge, we remove this content since it is not in the new head - if (api.triggerEvent(document.body, "htmx:removingHeadElement", {headElement: currentHeadElt}) !== false) { - removed.push(currentHeadElt); - } - } - } - } - - // Push the tremaining new head elements in the Map into the - // nodes to append to the head tag - nodesToAppend.push(...srcToNewHeadNodes.values()); - log("to append: ", nodesToAppend); - - for (const newNode of nodesToAppend) { - log("adding: ", newNode); - var newElt = document.createRange().createContextualFragment(newNode.outerHTML); - log(newElt); - if (api.triggerEvent(document.body, "htmx:addingHeadElement", {headElement: newElt}) !== false) { - currentHead.appendChild(newElt); - added.push(newElt); - } - } - - // remove all removed elements, after we have appended the new elements to avoid - // additional network requests for things like style sheets - for (const removedElement of removed) { - if (api.triggerEvent(document.body, "htmx:removingHeadElement", {headElement: removedElement}) !== false) { - currentHead.removeChild(removedElement); - } - } - - api.triggerEvent(document.body, "htmx:afterHeadMerge", {added: added, kept: preserved, removed: removed}); - } - } - } - - htmx.defineExtension("head-support", { - init: function(apiRef) { - // store a reference to the internal API. - api = apiRef; - - htmx.on('htmx:afterSwap', function(evt){ - let xhr = evt.detail.xhr; - if (xhr) { - var serverResponse = xhr.response; - if (api.triggerEvent(document.body, "htmx:beforeHeadMerge", evt.detail)) { - mergeHead(serverResponse, evt.detail.boosted ? "merge" : "append"); - } - } - }) - - htmx.on('htmx:historyRestore', function(evt){ - if (api.triggerEvent(document.body, "htmx:beforeHeadMerge", evt.detail)) { - if (evt.detail.cacheMiss) { - mergeHead(evt.detail.serverResponse, "merge"); - } else { - mergeHead(evt.detail.item.head, "merge"); - } - } - }) - - htmx.on('htmx:historyItemCreated', function(evt){ - var historyItem = evt.detail.item; - historyItem.head = document.head.outerHTML; - }) - } - }); - -})() diff --git a/html-router/assets/style.css b/html-router/assets/style.css index add73f8..6b01c38 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-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-green-400:oklch(79.2% .209 151.711);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--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;--leading-snug:1.375;--leading-relaxed:1.625;--radius-lg:.5rem;--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}@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}}@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-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-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)}.file-input{cursor:pointer;cursor:pointer;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;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));align-items:center;padding-inline-end:.75rem;font-size:.875rem;line-height:2;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.file-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)}}.file-input::file-selector-button{cursor:pointer;webkit-user-select:none;-webkit-user-select:none;user-select:none;height:calc(100% + var(--border)*2);margin-inline-end:1rem;margin-block:calc(var(--border)*-1);color:var(--btn-fg);border-width:var(--border);border-style:solid;border-color:var(--btn-border);background-color:var(--btn-bg);background-size:calc(var(--noise)*100%);background-image:var(--btn-noise);text-shadow:0 .5px oklch(1 0 0/calc(var(--depth)*.15));box-shadow:0 .5px 0 .5px white 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-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:calc(var(--join-ss,var(--radius-field) - var(--border)));border-end-start-radius:calc(var(--join-es,var(--radius-field) - var(--border)));margin-inline-start:calc(var(--border)*-1);padding-inline:1rem;font-size:.875rem;font-weight:600}@supports (color:color-mix(in lab, red, red)){.file-input::file-selector-button{box-shadow:0 .5px 0 .5px color-mix(in oklab,color-mix(in oklab,white 30%,var(--btn-bg))calc(var(--depth)*20%),#0000)inset,var(--btn-shadow);--btn-border:color-mix(in oklab,var(--btn-bg),#000 5%);--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)30%,#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)30%,#0000)}}.file-input:focus{--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)){.file-input:focus{box-shadow:0 1px color-mix(in oklab,var(--input-color)10%,#0000)}}.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);box-shadow:none;color:color-mix(in srgb,var(--color-base-content)20%,#0000)}:is(.file-input:has(>input[disabled]),.file-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(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled])){color:color-mix(in oklch,var(--color-base-content)20%,#0000)}}:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);--btn-border:#0000;--btn-noise:none;--btn-fg:color-mix(in srgb,var(--color-base-content)20%,#0000)}@supports (color:color-mix(in lab, red, red)){:is(.file-input:has(>input[disabled]),.file-input:is(:disabled,[disabled]))::file-selector-button{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.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}.chat-image{grid-row:span 2/span 2;align-self:flex-end}.chat-footer{grid-row-start:3;gap:.25rem;font-size:.6875rem;display:flex}.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-6{margin-bottom:calc(var(--spacing)*6)}.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-2{height:calc(var(--spacing)*2)}.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-28{min-height:calc(var(--spacing)*28)}.min-h-\[10px\]{min-height:10px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[95\%\]{min-height:95%}.min-h-\[100dvh\]{min-height:100dvh}.min-h-\[400px\]{min-height:400px}.min-h-\[500px\]{min-height:500px}.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-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-11{width:calc(var(--spacing)*11)}.w-11\/12{width:91.6667%}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-full{width:100%}.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-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{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.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{gap:calc(var(--spacing)*0)}.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-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-y-2{row-gap:calc(var(--spacing)*2)}: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{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.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-error\/20{border-color:color-mix(in srgb,var(--color-error)20%,transparent)}@supports (color:color-mix(in lab, red, red)){.border-error\/20{border-color:color-mix(in oklab,var(--color-error)20%,transparent)}}.border-gray-200{border-color:var(--color-gray-200)}.border-neutral{border-color:var(--color-neutral)}.border-warning{border-color:var(--color-warning)}.bg-accent{background-color:var(--color-accent)}.bg-accent\/10{background-color:color-mix(in srgb,var(--color-accent)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent)10%,transparent)}}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200{background-color:var(--color-base-200)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-error{background-color:var(--color-error)}.bg-error\/10{background-color:color-mix(in srgb,var(--color-error)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-error\/10{background-color:color-mix(in oklab,var(--color-error)10%,transparent)}}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-green-400{background-color:var(--color-green-400)}.bg-info{background-color:var(--color-info)}.bg-info\/10{background-color:color-mix(in srgb,var(--color-info)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-info\/10{background-color:color-mix(in oklab,var(--color-info)10%,transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-primary\/10{background-color:color-mix(in srgb,var(--color-primary)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary)10%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-secondary{background-color:var(--color-secondary)}.bg-secondary\/10{background-color:color-mix(in srgb,var(--color-secondary)10%,transparent)}@supports (color:color-mix(in lab, red, red)){.bg-secondary\/10{background-color:color-mix(in oklab,var(--color-secondary)10%,transparent)}}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.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-8{padding:calc(var(--spacing)*8)}.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)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.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-\[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)}.break-words{overflow-wrap:break-word}.text-accent{color:var(--color-accent)}.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-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-error{color:var(--color-error)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-secondary{color:var(--color-secondary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-warning-content{color:var(--color-warning-content)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.swap-active .swap-off{opacity:0}.swap-active .swap-on{opacity:1}.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-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)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}@media (hover:hover){.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-base-200\/50:hover{background-color:color-mix(in srgb,var(--color-base-200)50%,transparent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-base-200\/50:hover{background-color:color-mix(in oklab,var(--color-base-200)50%,transparent)}}.hover\:opacity-100:hover{opacity:1}}@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\: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))}.lg\:grid-cols-4{grid-template-columns:repeat(4,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))}}@media (prefers-color-scheme:dark){.dark\:border-gray-700{border-color:var(--color-gray-700)}.dark\:bg-gray-800{background-color:var(--color-gray-800)}.dark\:bg-gray-900{background-color:var(--color-gray-900)}.dark\:text-blue-300{color:var(--color-blue-300)}.dark\:text-blue-400{color:var(--color-blue-400)}.dark\:text-gray-300{color:var(--color-gray-300)}.dark\:text-gray-400{color:var(--color-gray-400)}.dark\:text-red-300{color:var(--color-red-300)}.dark\:text-red-400{color:var(--color-red-400)}.dark\:text-yellow-300{color:var(--color-yellow-300)}.dark\:text-yellow-400{color:var(--color-yellow-400)}}.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}@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}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 diff --git a/html-router/src/routes/scratchpad/handlers.rs b/html-router/src/routes/scratchpad/handlers.rs index 6219b44..7343cf3 100644 --- a/html-router/src/routes/scratchpad/handlers.rs +++ b/html-router/src/routes/scratchpad/handlers.rs @@ -41,6 +41,7 @@ pub struct ScratchpadDetailData { user: User, scratchpad: ScratchpadDetail, conversation_archive: Vec, + is_editing_title: bool, } #[derive(Serialize)] @@ -180,8 +181,8 @@ pub async fn show_scratchpad_modal( let scratchpad_detail = ScratchpadDetail::from(&scratchpad); - // Handle edit_title query parameter if needed in future - let _ = query.edit_title.unwrap_or(false); + // Handle edit_title query parameter + let is_editing_title = query.edit_title.unwrap_or(false); Ok(TemplateResponse::new_template( "scratchpad/editor_modal.html", @@ -189,6 +190,7 @@ pub async fn show_scratchpad_modal( user, scratchpad: scratchpad_detail, conversation_archive, + is_editing_title, }, )) } @@ -263,6 +265,7 @@ pub async fn update_scratchpad_title( user, scratchpad: ScratchpadDetail::from(&scratchpad), conversation_archive, + is_editing_title: false, }, )) } diff --git a/html-router/src/routes/search/handlers.rs b/html-router/src/routes/search/handlers.rs index af7d8e9..320af83 100644 --- a/html-router/src/routes/search/handlers.rs +++ b/html-router/src/routes/search/handlers.rs @@ -1,6 +1,7 @@ use std::{ collections::{HashMap, HashSet}, - fmt, str::FromStr, + fmt, + str::FromStr, }; use axum::{ @@ -198,59 +199,60 @@ pub async fn search_result_handler( } 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 { - let trimmed_query = actual_query.trim(); - if trimmed_query.is_empty() { - (Vec::::new(), String::new()) + let (search_results_for_template, final_query_param_for_template) = if let Some(actual_query) = + params.query + { + let trimmed_query = actual_query.trim(); + if trimmed_query.is_empty() { + (Vec::::new(), String::new()) + } else { + // Use retrieval pipeline Search strategy + let config = RetrievalConfig::for_search(SearchTarget::Both); + + // Checkout a reranker lease if pool is available + let reranker_lease = match &state.reranker_pool { + Some(pool) => Some(pool.checkout().await), + None => None, + }; + + let result = retrieval_pipeline::pipeline::run_pipeline( + &state.db, + &state.openai_client, + Some(&state.embedding_provider), + trimmed_query, + &user.id, + config, + reranker_lease, + ) + .await?; + + let search_result = match result { + StrategyOutput::Search(sr) => sr, + _ => SearchResult::new(vec![], vec![]), + }; + + let mut source_ids = HashSet::new(); + for chunk_result in &search_result.chunks { + source_ids.insert(chunk_result.chunk.source_id.clone()); + } + for entity_result in &search_result.entities { + source_ids.insert(entity_result.entity.source_id.clone()); + } + + let source_label_map = if source_ids.is_empty() { + HashMap::new() } else { - // Use retrieval pipeline Search strategy - let config = RetrievalConfig::for_search(SearchTarget::Both); - - // Checkout a reranker lease if pool is available - let reranker_lease = match &state.reranker_pool { - Some(pool) => Some(pool.checkout().await), - None => None, - }; - - let result = retrieval_pipeline::pipeline::run_pipeline( - &state.db, - &state.openai_client, - Some(&state.embedding_provider), - trimmed_query, - &user.id, - config, - reranker_lease, - ) - .await?; - - let search_result = match result { - StrategyOutput::Search(sr) => sr, - _ => SearchResult::new(vec![], vec![]), - }; - - let mut source_ids = HashSet::new(); - for chunk_result in &search_result.chunks { - source_ids.insert(chunk_result.chunk.source_id.clone()); - } - for entity_result in &search_result.entities { - source_ids.insert(entity_result.entity.source_id.clone()); - } - - let source_label_map = if source_ids.is_empty() { - HashMap::new() - } else { - let record_ids: Vec = source_ids - .iter() - .filter_map(|id| { - if id.contains(':') { - RecordId::from_str(id).ok() - } else { - Some(RecordId::from_table_key(TextContent::table_name(), id)) - } - }) - .collect(); - let mut response = state + let record_ids: Vec = source_ids + .iter() + .filter_map(|id| { + if id.contains(':') { + RecordId::from_str(id).ok() + } else { + Some(RecordId::from_table_key(TextContent::table_name(), id)) + } + }) + .collect(); + let mut response = state .db .client .query( @@ -260,84 +262,84 @@ pub async fn search_result_handler( .bind(("user_id", user.id.clone())) .bind(("record_ids", record_ids)) .await?; - let contents: Vec = response.take(0)?; + let contents: Vec = response.take(0)?; - tracing::debug!( - source_id_count = source_ids.len(), - label_row_count = contents.len(), - "Resolved search source labels" + tracing::debug!( + source_id_count = source_ids.len(), + label_row_count = contents.len(), + "Resolved search source labels" + ); + + let mut labels = HashMap::new(); + for content in contents { + let label = build_source_label(&content); + labels.insert(content.id.clone(), label.clone()); + labels.insert( + format!("{}:{}", TextContent::table_name(), content.id), + label, ); + } - let mut labels = HashMap::new(); - for content in contents { - let label = build_source_label(&content); - labels.insert(content.id.clone(), label.clone()); - labels.insert( - format!("{}:{}", TextContent::table_name(), content.id), - label, - ); - } + labels + }; - labels - }; + let mut combined_results: Vec = + Vec::with_capacity(search_result.chunks.len() + search_result.entities.len()); - let mut combined_results: Vec = - Vec::with_capacity(search_result.chunks.len() + search_result.entities.len()); - - // Add chunk results - for chunk_result in search_result.chunks { - let source_label = source_label_map - .get(&chunk_result.chunk.source_id) - .cloned() - .unwrap_or_else(|| fallback_source_label(&chunk_result.chunk.source_id)); - combined_results.push(SearchResultForTemplate { - result_type: "text_chunk".to_string(), + // Add chunk results + for chunk_result in search_result.chunks { + let source_label = source_label_map + .get(&chunk_result.chunk.source_id) + .cloned() + .unwrap_or_else(|| fallback_source_label(&chunk_result.chunk.source_id)); + combined_results.push(SearchResultForTemplate { + result_type: "text_chunk".to_string(), + score: chunk_result.score, + text_chunk: Some(TextChunkForTemplate { + id: chunk_result.chunk.id, + source_id: chunk_result.chunk.source_id, + source_label, + chunk: chunk_result.chunk.chunk, score: chunk_result.score, - text_chunk: Some(TextChunkForTemplate { - id: chunk_result.chunk.id, - source_id: chunk_result.chunk.source_id, - source_label, - chunk: chunk_result.chunk.chunk, - score: chunk_result.score, - }), - knowledge_entity: None, - }); - } - - // Add entity results - for entity_result in search_result.entities { - let source_label = source_label_map - .get(&entity_result.entity.source_id) - .cloned() - .unwrap_or_else(|| fallback_source_label(&entity_result.entity.source_id)); - combined_results.push(SearchResultForTemplate { - result_type: "knowledge_entity".to_string(), - score: entity_result.score, - text_chunk: None, - knowledge_entity: Some(KnowledgeEntityForTemplate { - id: entity_result.entity.id, - name: entity_result.entity.name, - description: entity_result.entity.description, - entity_type: format!("{:?}", entity_result.entity.entity_type), - source_id: entity_result.entity.source_id, - source_label, - score: entity_result.score, - }), - }); - } - - // Sort by score descending - combined_results.sort_by(|a, b| b.score.total_cmp(&a.score)); - - // Limit results - const TOTAL_LIMIT: usize = 10; - combined_results.truncate(TOTAL_LIMIT); - - (combined_results, trimmed_query.to_string()) + }), + knowledge_entity: None, + }); } - } else { - (Vec::::new(), String::new()) - }; + + // Add entity results + for entity_result in search_result.entities { + let source_label = source_label_map + .get(&entity_result.entity.source_id) + .cloned() + .unwrap_or_else(|| fallback_source_label(&entity_result.entity.source_id)); + combined_results.push(SearchResultForTemplate { + result_type: "knowledge_entity".to_string(), + score: entity_result.score, + text_chunk: None, + knowledge_entity: Some(KnowledgeEntityForTemplate { + id: entity_result.entity.id, + name: entity_result.entity.name, + description: entity_result.entity.description, + entity_type: format!("{:?}", entity_result.entity.entity_type), + source_id: entity_result.entity.source_id, + source_label, + score: entity_result.score, + }), + }); + } + + // Sort by score descending + combined_results.sort_by(|a, b| b.score.total_cmp(&a.score)); + + // Limit results + const TOTAL_LIMIT: usize = 10; + combined_results.truncate(TOTAL_LIMIT); + + (combined_results, trimmed_query.to_string()) + } + } else { + (Vec::::new(), String::new()) + }; Ok(TemplateResponse::new_template( "search/base.html", diff --git a/html-router/templates/admin/edit_image_prompt_modal.html b/html-router/templates/admin/edit_image_prompt_modal.html index e83cc81..ff2d737 100644 --- a/html-router/templates/admin/edit_image_prompt_modal.html +++ b/html-router/templates/admin/edit_image_prompt_modal.html @@ -1,5 +1,7 @@ {% extends "modal_base.html" %} +{% block modal_class %}max-w-3xl{% endblock %} + {% block form_attributes %} hx-patch="/update-image-prompt" hx-target="#system_prompt_section" diff --git a/html-router/templates/admin/edit_ingestion_prompt_modal.html b/html-router/templates/admin/edit_ingestion_prompt_modal.html index e915486..a750ea2 100644 --- a/html-router/templates/admin/edit_ingestion_prompt_modal.html +++ b/html-router/templates/admin/edit_ingestion_prompt_modal.html @@ -1,5 +1,7 @@ {% extends "modal_base.html" %} +{% block modal_class %}max-w-3xl{% endblock %} + {% block form_attributes %} hx-patch="/update-ingestion-prompt" hx-target="#system_prompt_section" diff --git a/html-router/templates/admin/edit_query_prompt_modal.html b/html-router/templates/admin/edit_query_prompt_modal.html index 2fc57c6..ac86893 100644 --- a/html-router/templates/admin/edit_query_prompt_modal.html +++ b/html-router/templates/admin/edit_query_prompt_modal.html @@ -1,5 +1,7 @@ {% extends "modal_base.html" %} +{% block modal_class %}max-w-3xl{% endblock %} + {% block form_attributes %} hx-patch="/update-query-prompt" hx-target="#system_prompt_section" diff --git a/html-router/templates/body_base.html b/html-router/templates/body_base.html index f2f48cc..95b2bac 100644 --- a/html-router/templates/body_base.html +++ b/html-router/templates/body_base.html @@ -2,8 +2,8 @@ {% block body %} - -
+ +
@@ -14,6 +14,7 @@ {% block main %}{% endblock %}
+ {% block overlay %}{% endblock %}
{% if user %} diff --git a/html-router/templates/chat/base.html b/html-router/templates/chat/base.html index 044a9fb..8702a97 100644 --- a/html-router/templates/chat/base.html +++ b/html-router/templates/chat/base.html @@ -2,10 +2,6 @@ {% block title %}Minne - Chat{% endblock %} -{% block head %} - -{% endblock %} - {% block main %}
@@ -17,32 +13,69 @@
{% include "chat/history.html" %} - {% include "chat/new_message_form.html" %}
{% endblock %} + +{% block overlay %} +{% include "chat/new_message_form.html" %} +{% endblock %} diff --git a/html-router/templates/chat/new_message_form.html b/html-router/templates/chat/new_message_form.html index 7ca97d6..960ac7e 100644 --- a/html-router/templates/chat/new_message_form.html +++ b/html-router/templates/chat/new_message_form.html @@ -1,6 +1,6 @@
-
+
-
{{ error }}
+ {% endblock %} + {% block primary_actions %} - {% endblock %} diff --git a/html-router/templates/modal_base.html b/html-router/templates/modal_base.html index b13bace..61e39e5 100644 --- a/html-router/templates/modal_base.html +++ b/html-router/templates/modal_base.html @@ -1,15 +1,24 @@