diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 4ff3337f..66d82308 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -23,7 +23,6 @@ jobs: - "3.13" - "3.12" - "3.11" - - "3.10" steps: - uses: actions/checkout@v5 - uses: astral-sh/setup-uv@v6 diff --git a/.gitignore b/.gitignore index e2048df2..ed8cbe33 100644 --- a/.gitignore +++ b/.gitignore @@ -85,3 +85,4 @@ inlined visualizer.tgz package .mypy_cache/ +*.json diff --git a/Cargo.lock b/Cargo.lock index 102adecb..e43a1b4f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,6 +35,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "2.9.4" @@ -67,9 +73,9 @@ checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cpufeatures" @@ -148,21 +154,21 @@ dependencies = [ [[package]] name = "csv" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ "csv-core", "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] @@ -215,19 +221,19 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" [[package]] name = "egglog" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "csv", "dyn-clone", "egglog-add-primitive", + "egglog-ast", "egglog-bridge", "egglog-core-relations", "egglog-numeric-id", "egraph-serialize", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "im-rc", "indexmap", - "lazy_static", "log", "num", "ordered-float", @@ -240,27 +246,36 @@ dependencies = [ [[package]] name = "egglog-add-primitive" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "quote", - "syn 2.0.106", + "syn 2.0.107", +] + +[[package]] +name = "egglog-ast" +version = "1.0.0" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" +dependencies = [ + "ordered-float", ] [[package]] name = "egglog-bridge" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "anyhow", "dyn-clone", "egglog-core-relations", "egglog-numeric-id", "egglog-union-find", - "hashbrown 0.15.5", + "hashbrown 0.16.0", "indexmap", "log", "num-rational", "once_cell", + "ordered-float", "petgraph", "rayon", "smallvec", @@ -271,7 +286,7 @@ dependencies = [ [[package]] name = "egglog-concurrency" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "arc-swap", "rayon", @@ -280,7 +295,7 @@ dependencies = [ [[package]] name = "egglog-core-relations" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "anyhow", "bumpalo", @@ -290,10 +305,9 @@ dependencies = [ "egglog-concurrency", "egglog-numeric-id", "egglog-union-find", - "fixedbitset 0.5.7", - "hashbrown 0.15.5", + "fixedbitset", + "hashbrown 0.16.0", "indexmap", - "lazy_static", "log", "num", "once_cell", @@ -309,9 +323,10 @@ dependencies = [ [[package]] name = "egglog-experimental" version = "0.1.0" -source = "git+https://github.com/egraphs-good/egglog-experimental?branch=cli#6d07a34ac76deec751f86f70d9b9358cd3e236ca" +source = "git+https://github.com/egraphs-good/egglog-experimental?branch=update-egglog#ebb3a581732cc00aa41c8356f2c12e800a768e0f" dependencies = [ "egglog", + "egglog-ast", "lazy_static", "log", "num", @@ -320,16 +335,15 @@ dependencies = [ [[package]] name = "egglog-numeric-id" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ - "lazy_static", "rayon", ] [[package]] name = "egglog-union-find" version = "1.0.0" -source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=clone-cost#2b6de8034d8fd7af0dc8143f0a8ade5734c34f8c" +source = "git+https://github.com/saulshanabrook/egg-smol.git?branch=let-bindings-again#7b1b7fcb47c0e6766f04dd1aa10577cb29307273" dependencies = [ "crossbeam", "egglog-concurrency", @@ -338,9 +352,11 @@ dependencies = [ [[package]] name = "egglog_python" -version = "11.3.0" +version = "11.4.0" dependencies = [ + "base64", "egglog", + "egglog-ast", "egglog-bridge", "egglog-core-relations", "egglog-experimental", @@ -359,9 +375,9 @@ dependencies = [ [[package]] name = "egraph-serialize" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31c5c0d7f760f9c1c84e21d73dcd3b3ce7a4770c27689f56a0db26e0f3e79ca" +checksum = "0977732fb537ace6f8c15ce160ebdda78b6502b4866d3b904e4fe752e2be4702" dependencies = [ "graphviz-rust", "indexmap", @@ -399,12 +415,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fixedbitset" version = "0.5.7" @@ -418,43 +428,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "generic-array" -version = "0.14.7" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] -name = "getrandom" -version = "0.2.16" +name = "generic-array" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "typenum", + "version_check", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", ] [[package]] name = "graphviz-rust" -version = "0.6.6" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27dafd1ac303e0dfb347a3861d9ac440859bab26ec2f534bbceb262ea492a1e0" +checksum = "db134cb611668917cabf340af9a39518426f9a10827b4cedcb4cdcf84443f6d0" dependencies = [ "dot-generator", "dot-structures", @@ -462,7 +467,7 @@ dependencies = [ "into-attr-derive", "pest", "pest_derive", - "rand 0.8.5", + "rand 0.9.2", "tempfile", ] @@ -478,9 +483,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -488,6 +491,11 @@ name = "hashbrown" version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] [[package]] name = "heck" @@ -511,9 +519,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -557,9 +565,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -583,9 +591,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "linux-raw-sys" @@ -595,11 +603,10 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -611,9 +618,9 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "memoffset" @@ -705,9 +712,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "ordered-float" -version = "3.9.2" +version = "5.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" dependencies = [ "num-traits", "rand 0.8.5", @@ -716,33 +723,32 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets", + "windows-link", ] [[package]] name = "pest" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e0a3a33733faeaf8651dfee72dd0f388f0c8e5ad496a3478fa5a922f49cfa8" +checksum = "989e7521a040efde50c3ab6bbadafbe15ab6dc042686926be59ac35d74607df4" dependencies = [ "memchr", - "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc58706f770acb1dbd0973e6530a3cff4746fb721207feb3a8a6064cd0b6c663" +checksum = "187da9a3030dbafabbbfb20cb323b976dc7b7ce91fcd84f2f74d6e31d378e2de" dependencies = [ "pest", "pest_generator", @@ -750,22 +756,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d4f36811dfe07f7b8573462465d5cb8965fffc2e71ae377a33aecf14c2c9a2f" +checksum = "49b401d98f5757ebe97a26085998d6c0eecec4995cad6ab7fc30ffdf4b052843" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "pest_meta" -version = "2.8.2" +version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42919b05089acbd0a5dcd5405fb304d17d1053847b81163d09c4ad18ce8e8420" +checksum = "72f27a2cfee9f9039c4d86faa5af122a0ac3851441a34865b8a043b46be0065a" dependencies = [ "pest", "sha2", @@ -773,12 +779,14 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.5" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ - "fixedbitset 0.4.2", + "fixedbitset", + "hashbrown 0.15.5", "indexmap", + "serde", ] [[package]] @@ -807,15 +815,16 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.26.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ba0117f4212101ee6544044dae45abe1083d30ce7b29c4b5cbdfa2354e07383" +checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf" dependencies = [ "indoc", "libc", "memoffset", "num-bigint", "num-rational", + "num-traits", "once_cell", "portable-atomic", "pyo3-build-config", @@ -826,18 +835,18 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.26.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc6ddaf24947d12a9aa31ac65431fb1b851b8f4365426e182901eabfb87df5f" +checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-ffi" -version = "0.26.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025474d3928738efb38ac36d4744a74a400c901c7596199e20e45d98eb194105" +checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be" dependencies = [ "libc", "pyo3-build-config", @@ -845,9 +854,8 @@ dependencies = [ [[package]] name = "pyo3-log" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "833e6fdc21553e9938d9443050ed3c7787ac3c1a1aefccbd03dfae0c7a4be529" +version = "0.13.1" +source = "git+https://github.com/a1phyr/pyo3-log.git?branch=pyo3_0.27#4ccd4c7c96e8e3bda4a47bc85d92749b4927fcb9" dependencies = [ "arc-swap", "log", @@ -856,34 +864,34 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.26.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e64eb489f22fe1c95911b77c44cc41e7c19f3082fc81cce90f657cdc42ffded" +checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "pyo3-macros-backend" -version = "0.26.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "100246c0ecf400b475341b8455a9213344569af29a3c841d29270e53102e0fcf" +checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -900,8 +908,6 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc", - "rand_chacha 0.3.1", "rand_core 0.6.4", "serde", ] @@ -912,20 +918,10 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.3", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -942,7 +938,6 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", "serde", ] @@ -952,7 +947,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom", ] [[package]] @@ -986,18 +981,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1006,9 +1001,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "rustc-hash" @@ -1049,9 +1044,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -1059,22 +1054,22 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] @@ -1131,9 +1126,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.106" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -1148,12 +1143,12 @@ checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" [[package]] name = "tempfile" -version = "3.22.0" +version = "3.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom", "once_cell", "rustix", "windows-sys", @@ -1161,29 +1156,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ucd-trie" @@ -1209,7 +1204,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom", "js-sys", "wasm-bindgen", ] @@ -1220,21 +1215,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -1246,9 +1226,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -1259,23 +1239,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1283,22 +1263,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -1315,83 +1295,19 @@ dependencies = [ [[package]] name = "windows-link" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" -version = "0.61.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - [[package]] name = "wit-bindgen" version = "0.46.0" @@ -1415,5 +1331,5 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn 2.0.106", + "syn 2.0.107", ] diff --git a/Cargo.toml b/Cargo.toml index bfbbe8fc..6c1a622d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,31 +10,34 @@ name = "egglog" crate-type = ["cdylib"] [dependencies] -pyo3 = { version = "0.26", features = ["extension-module", "num-bigint", "num-rational"] } +pyo3 = { version = "0.27", features = ["extension-module", "num-bigint", "num-rational"] } num-bigint = "*" num-rational = "*" # egglog = { git = "https://github.com/egraphs-good/egglog.git", branch = "main", default-features = false } # egglog-bridge = { git = "https://github.com/egraphs-good/egglog.git", branch = "main" } # egglog-core-relations = { git = "https://github.com/egraphs-good/egglog.git", branch = "main" } -egglog = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost", default-features = false } -egglog-bridge = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost" } -egglog-core-relations = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost" } -egglog-experimental = { git = "https://github.com/egraphs-good/egglog-experimental", branch = "cli", default-features = false } -egraph-serialize = { version = "0.2", features = ["serde", "graphviz"] } +egglog = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again", default-features = false } +egglog-bridge = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egglog-core-relations = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egglog-experimental = { git = "https://github.com/egraphs-good/egglog-experimental", branch = "update-egglog", default-features = false } +egglog-ast = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egraph-serialize = { version = "0.3", features = ["serde", "graphviz"] } serde_json = "1" -pyo3-log = "0.13" +pyo3-log = { git = "https://github.com/a1phyr/pyo3-log.git", branch = "pyo3_0.27" } log = "0.4" lalrpop-util = { version = "0.22", features = ["lexer"] } -ordered-float = "3.7" +ordered-float = "5" uuid = { version = "1.18", features = ["v4"] } rayon = "1.11" +base64 = "0.22.1" # Use patched version of egglog in experimental [patch.'https://github.com/egraphs-good/egglog'] # egglog = { git = "https://github.com/egraphs-good//egglog.git", branch = "main" } -egglog = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost" } -egglog-bridge = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost" } -egglog-core-relations = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "clone-cost" } +egglog = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egglog-bridge = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egglog-core-relations = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } +egglog-ast = { git = "https://github.com/saulshanabrook/egg-smol.git", branch = "let-bindings-again" } # egglog = { path = "../egg-smol" } # egglog = { git = "https://github.com/egraphs-good//egglog.git", rev = "5542549" } diff --git a/docs/changelog.md b/docs/changelog.md index 67384185..261bc750 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,13 +4,24 @@ _This project uses semantic versioning_ ## UNRELEASED +- Add WIP `egglog.exp.any_expr` code for tracing arbitrary expressions with Python fallback [#366](https://github.com/egraphs-good/egglog-python/pull/366) + - BREAKING: Remove support for Python 3.11 now that pyo3 has dropped support. + - Allow mutating methods to update their underlying expression via `Expr.__replace_expr__`, and ensure default rewrites return the mutated receiver when using `mutates_self` or `mutates_first_arg`. + - BREAKING: Store `PyObject` values as `cloudpickle` bytes instead of live references so duplicates merge by value; `.value` now returns a fresh copy and the sort accepts objects like `None` that previously failed. + - Adds a `__call__` method (and `call_extended` for kwargs) to `PyObject` to replace `py_eval_fn`, which is now deprecated. + - Improve doctest support, teaching expressions about their `__module__`, `__dir__`, and special methods. + - Surface original Python exceptions from the runtime and tighten pretty-printing of values that cannot be re-parsed to make debugging e-graph executions easier. + - Update the bundled Egglog crate, visualizer, and related dev dependencies (including `ipykernel`) to pick up the latest backend fixes. + ## 11.4.0 (2025-10-02) - Add ability to create custom model and pass them in to extract [#357](https://github.com/egraphs-good/egglog-python/pull/357) + ## 11.3.0 (2025-09-12) - Add egglog tutorials, change display to not inline by default, and fix bug looking up binary methods [#352](https://github.com/egraphs-good/egglog-python/pull/352) - Add `back_off` scheduler [#350](https://github.com/egraphs-good/egglog-python/pull/350) + ## 11.2.0 (2025-09-03) - Add support for `set_cost` action to have row level costs for extraction [#343](https://github.com/egraphs-good/egglog-python/pull/343) @@ -83,7 +94,6 @@ Vec(1, 2)[0] Fraction(1, 2) ``` - You can also manually set the e-graph to use, instead of it having to create a new one, with the `egraph.set_current` context manager: ```python diff --git a/docs/reference/python-integration.md b/docs/reference/python-integration.md index 48154ffa..466ebc0a 100644 --- a/docs/reference/python-integration.md +++ b/docs/reference/python-integration.md @@ -96,43 +96,78 @@ We define a custom "primitive sort" (i.e. a builtin type) for `PyObject`s. This ### Saving Python Objects -To create an expression of type `PyObject`, we call the call the constructor with any Python object. It will -save a reference to the object: +To create an expression of type `PyObject`, call the constructor with any Python object. The value is immediately +serialized with `cloudpickle.dumps`, and the serialized bytes (base64 encoded when printed) are what get stored +inside the e-graph. This means the e-graph keeps a snapshot of the object rather than a live reference. ```{code-cell} python -PyObject(1) +from dataclasses import dataclass + +@dataclass +class MyObject: + a: int = 10 + +PyObject(MyObject()) ``` -We see that this as saved internally as a pointer to the Python object. For hashable objects like `int` we store two integers, a hash of the type and a has of the value. +The new serialization approach works for both hashable and unhashable Python values, and no longer depends on +their `id()`. Subsequent inserts of equal values round-trip through `cloudpickle` so the e-graph can identify and +merge them by value. -We can also store unhashable objects in the e-graph like lists. +```{admonition} Serialization requirements +:class: note -```{code-cell} python -lst = PyObject([1, 2, 3]) -lst +`PyObject` relies on `cloudpickle`. Any object you store must be serializable by `cloudpickle.dumps`; objects such +as open file handles, generators, or extension types that `cloudpickle` cannot handle will raise an error when you +try to construct a `PyObject`. ``` -We see that this is stored with one number, simply the `id` of the object. +### Retrieving Python Objects + +Like other primitives, we can retrieve a Python object by using the `.value` property. Deserialization happens on +every access, so you receive a fresh copy each time rather than the original object. -```{admonition} Mutable Objects -:class: warning +```{code-cell} python +original = {"count": 1} +expr = PyObject(original) -While it is possible to store unhashable objects in the e-graph, you have to be careful defining any rules which create new unhashable objects. If each time a rule is run, it creates a new object, then the e-graph will never saturate. +restored = expr.value +assert restored == original +assert restored is not original -Creating hashable objects is safer, since while the rule might create new Python objects each time it executes, they should have the same hash, i.e. be equal, so that the e-graph can saturate. +# Mutating the copy does not affect the stored value. +restored["count"] = 2 +assert expr.value == {"count": 1} ``` -### Retrieving Python Objects +### Builtin methods + +Currently, we only support a few methods on `PyObject`s, but we plan to add more in the future. Each builtin +deserializes its inputs, performs the operation in Python, and then serializes the result back into a new +`PyObject`, so previously stored values remain unchanged. + +### Calling Stored Python Functions -Like other primitives, we can retrieve the Python object from the e-graph by using the `.value` property: +Any `PyObject` whose value is callable can now be invoked directly. Each positional or keyword argument is first +converted into a `PyObject`, the call executes inside Python, and the result is serialized back into a new +`PyObject` expression. ```{code-cell} python -assert lst.value == [1, 2, 3] +scale = PyObject(lambda x, *, factor=1: x * factor) +result = scale(21) + +assert EGraph().extract(result).value == 21 ``` -### Builtin methods +When you already have the arguments packaged up, use `call_extended` to forward explicit `*args`/`**kwargs` +collections. This is needed when you want to call any keyword arguments as well which are not supported y the simple form: -Currently, we only support a few methods on `PyObject`s, but we plan to add more in the future. +```{code-cell} python +args = PyObject((10,)) +kwargs = PyObject({"factor": 3}) + +assert EGraph().extract(scale.call_extended(args, kwargs)).value == 30 +``` Conversion to/from a string: @@ -174,21 +209,12 @@ evalled = py_eval("my_add(one, 2)", locals(), amended_globals) assert EGraph().extract(evalled).value == 3 ``` -### Simpler Eval +### `py_eval_fn` (deprecated) -Instead of using the above low level primitive for evaluating, there is a higher level wrapper function, `py_eval_fn`. +The previous helper `py_eval_fn` is still available for backward compatibility, but it now simply returns +`PyObject(fn)` and is deprecated. Prefer constructing a `PyObject` directly and calling it as shown above. -It takes in a Python function and converts it to a function of PyObjects, by using `py_eval` under the hood. - -The above code code be re-written like this: - -```{code-cell} python -def my_add(a, b): - return a + b - -evalled = py_eval_fn(lambda a: my_add(a, 2))(1) -assert EGraph().extract(evalled).value == 3 -``` +`py_eval_fn` returns a callable that mirrors the old behaviour, so existing code continues to work while you migrate. ## Functions @@ -364,6 +390,10 @@ if TRUE | FALSE: print("True!") ``` +Preserved methods now support binary operators as well. You can mark implementations like `__add__` or `__lt__` as +preserved when you need their Python behaviour, and the runtime will call your preserved implementation for both the +regular and reflected (`__r*__`) variants. + Note that the following list of methods are only supported as "preserved" since they have to return a specific Python object type: - `__bool__` @@ -426,7 +456,12 @@ assert str(-1.0 + Int.var("x")) == "Float(-1.0) + Float.from_int(Int.var(\"x\")) ### Mutating arguments -In order to support Python functions and methods which mutate their arguments, you can pass in the `mutate_first_arg` keyword argument to the `@function` decorator and the `mutates_self` argument to the `@method` decorator. This will cause the first argument to be mutated in place, instead of being copied. +In order to support Python functions and methods which mutate their arguments, use the `mutates_first_arg` keyword argument on `@function` and the `mutates_self` keyword argument on `@method`. The runtime treats the mutated receiver as the return value of the egglog call, so the default rewrite points the call expression at the updated argument. + +Inside the Python implementation you can call `__replace_expr__` on an `Expr` instance to swap out its underlying egglog expression in-place. This keeps any existing Python references in sync while still allowing the e-graph to reason about the mutated value. The same helper works for methods that run immediately with `@method(preserve=True)`. + +Any function which mutates its first argument must return `None`. In egglog, this is translated into a function which +returns the type of its first argument. ```{code-cell} python from copy import copy @@ -453,12 +488,20 @@ mutate_egraph = EGraph() mutate_egraph.register(rewrite(incr_i).to(i + Int(1)), x) mutate_egraph.run(10) mutate_egraph.check(eq(x).to(Int(10) + Int(1))) + +# incr with the rewrite could also be written like this: +@function(mutates_first_arg=True) +def incr_other(x: Int) -> None: + x.__replace_expr__(x + Int(1)) +x = Int(10) +incr_other(x) +mutate_egraph = EGraph() +mutate_egraph.register(x) +mutate_egraph.run(10) +mutate_egraph.check(eq(x).to(Int(10) + Int(1))) mutate_egraph ``` -Any function which mutates its first argument must return `None`. In egglog, this is translated into a function which -returns the type of its first argument. - Note that dunder methods such as `__setitem__` will automatically be marked as mutating their first argument. ## Functions as Values diff --git a/modify_changelog.py b/modify_changelog.py index 2cdaa959..7153ba2f 100644 --- a/modify_changelog.py +++ b/modify_changelog.py @@ -77,7 +77,7 @@ def find_unreleased_section(lines): def update_changelog_version(file_path: Path, new_version: str) -> None: """Update changelog for version bump - replaces UNRELEASED with versioned section.""" - today = datetime.datetime.now(tz=datetime.timezone.utc).strftime("%Y-%m-%d") + today = datetime.datetime.now(tz=datetime.UTC).strftime("%Y-%m-%d") content = file_path.read_text() new_section = f"## UNRELEASED\n\n## {new_version} ({today})" content = content.replace("## UNRELEASED", new_section, 1) diff --git a/pyproject.toml b/pyproject.toml index c5e4ae08..5321fd1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ description = "e-graphs in Python built around the the egglog rust library" readme = "README.md" dynamic = ["version"] license = { text = "MIT" } -requires-python = ">=3.10" +requires-python = ">=3.11" classifiers = [ "Environment :: MacOS X", "Environment :: Win32 (MS Windows)", @@ -16,7 +16,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", @@ -37,6 +36,7 @@ array = [ "numba>=0.59.1", "llvmlite>=0.42.0", "numpy>2", + "cloudpickle>=3", ] dev = [ "ruff", @@ -45,6 +45,7 @@ dev = [ "anywidget[dev]", "egglog[docs,test]", "jupyterlab", + "ipykernel", ] test = [ @@ -252,7 +253,7 @@ module-name = "egglog.bindings" features = ["pyo3/extension-module"] [tool.pytest.ini_options] -addopts = ["--import-mode=importlib"] +addopts = ["--import-mode=importlib", "--doctest-modules"] testpaths = ["python"] python_files = ["test_*.py", "test.py"] markers = ["slow: marks tests as slow (deselect with '-m \"not slow\"')"] diff --git a/python/egglog/bindings.pyi b/python/egglog/bindings.pyi index 9c93b64d..220a18b0 100644 --- a/python/egglog/bindings.pyi +++ b/python/egglog/bindings.pyi @@ -2,9 +2,7 @@ from collections.abc import Callable from datetime import timedelta from fractions import Fraction from pathlib import Path -from typing import Any, Generic, Protocol, TypeAlias, TypeVar - -from typing_extensions import final +from typing import Any, Generic, Protocol, TypeAlias, TypeVar, final __all__ = [ "ActionCommand", @@ -54,7 +52,6 @@ __all__ = [ "PrintOverallStatistics", "PrintSize", "Push", - "PyObjectSort", "Relation", "Repeat", "Rewrite", @@ -105,22 +102,10 @@ class SerializedEGraph: def map_ops(self, map: dict[str, str]) -> None: ... def split_classes(self, egraph: EGraph, ops: set[str]) -> None: ... -@final -class PyObjectSort: - def __init__(self) -> None: ... - def store(self, __o: object, /) -> _Expr: ... - def load(self, __e: _Expr, /) -> object: ... - @final class EGraph: def __init__( - self, - py_object_sort: PyObjectSort | None = None, - /, - *, - fact_directory: str | Path | None = None, - seminaive: bool = True, - record: bool = False, + self, *, fact_directory: str | Path | None = None, seminaive: bool = True, record: bool = False ) -> None: ... def parse_program(self, __input: str, /, filename: str | None = None) -> list[_Command]: ... def commands(self) -> str | None: ... @@ -142,7 +127,7 @@ class EGraph: def value_to_rational(self, v: Value) -> Fraction: ... def value_to_bigint(self, v: Value) -> int: ... def value_to_bigrat(self, v: Value) -> Fraction: ... - def value_to_pyobject(self, py_object_sort: PyObjectSort, v: Value) -> object: ... + def value_to_pyobject(self, v: Value) -> object: ... def value_to_map(self, v: Value) -> dict[Value, Value]: ... def value_to_multiset(self, v: Value) -> list[Value]: ... def value_to_vec(self, v: Value) -> list[Value]: ... @@ -357,11 +342,14 @@ _Action: TypeAlias = Let | Set | Change | Union | Panic | Expr_ @final class Variant: - def __init__(self, span: _Span, name: str, types: list[str], cost: int | None = None) -> None: ... + def __init__( + self, span: _Span, name: str, types: list[str], cost: int | None = None, unextractable: bool = False + ) -> None: ... span: _Span name: str types: list[str] cost: int | None + unextractable: bool @final class Schema: @@ -374,7 +362,9 @@ class Rule: span: _Span head: list[_Action] body: list[_Fact] - def __init__(self, span: _Span, head: list[_Action], body: list[_Fact]) -> None: ... + name: str + ruleset: str + def __init__(self, span: _Span, head: list[_Action], body: list[_Fact], name: str, ruleset: str) -> None: ... @final class Rewrite: @@ -586,10 +576,8 @@ class AddRuleset: @final class RuleCommand: - name: str - ruleset: str rule: Rule - def __init__(self, name: str, ruleset: str, rule: Rule) -> None: ... + def __init__(self, rule: Rule) -> None: ... @final class RewriteCommand: diff --git a/python/egglog/builtins.py b/python/egglog/builtins.py index 269566c0..9b40f21e 100644 --- a/python/egglog/builtins.py +++ b/python/egglog/builtins.py @@ -13,6 +13,7 @@ from types import FunctionType, MethodType from typing import TYPE_CHECKING, Generic, Protocol, TypeAlias, TypeVar, cast, overload +import cloudpickle from typing_extensions import TypeVarTuple, Unpack, deprecated from .conversion import convert, converter, get_type_args, resolve_literal @@ -85,7 +86,7 @@ def __bool__(self) -> bool: return bool(expr_fact(self)) -class String(BuiltinExpr): +class String(BuiltinExpr, egg_sort="String"): def __init__(self, value: str) -> None: ... @method(preserve=True) @@ -163,7 +164,7 @@ def implies(self, other: BoolLike) -> Bool: ... converter(bool, Bool, Bool) -class i64(BuiltinExpr): # noqa: N801 +class i64(BuiltinExpr, egg_sort="i64"): # noqa: N801 def __init__(self, value: int) -> None: ... @method(preserve=True) @@ -290,7 +291,7 @@ def bool_ge(self, other: i64Like) -> Bool: ... def count_matches(s: StringLike, pattern: StringLike) -> i64: ... -class f64(BuiltinExpr): # noqa: N801 +class f64(BuiltinExpr, egg_sort="f64"): # noqa: N801 def __init__(self, value: float) -> None: ... @method(preserve=True) @@ -387,7 +388,7 @@ def to_string(self) -> String: ... V = TypeVar("V", bound=BaseExpr) -class Map(BuiltinExpr, Generic[T, V]): +class Map(BuiltinExpr, Generic[T, V], egg_sort="Map"): @method(preserve=True) @deprecated("use .value") def eval(self) -> dict[T, V]: @@ -457,7 +458,7 @@ def rebuild(self) -> Map[T, V]: ... MapLike: TypeAlias = Map[T, V] | dict[TO, VO] -class Set(BuiltinExpr, Generic[T]): +class Set(BuiltinExpr, Generic[T], egg_sort="Set"): @method(preserve=True) @deprecated("use .value") def eval(self) -> set[T]: @@ -527,7 +528,7 @@ def rebuild(self) -> Set[T]: ... SetLike: TypeAlias = Set[T] | set[TO] -class MultiSet(BuiltinExpr, Generic[T]): +class MultiSet(BuiltinExpr, Generic[T], egg_sort="MultiSet"): @method(preserve=True) @deprecated("use .value") def eval(self) -> list[T]: @@ -582,7 +583,7 @@ def __add__(self, other: MultiSet[T]) -> MultiSet[T]: ... def map(self, f: Callable[[T], T]) -> MultiSet[T]: ... -class Rational(BuiltinExpr): +class Rational(BuiltinExpr, egg_sort="Rational"): @method(preserve=True) @deprecated("use .value") def eval(self) -> Fraction: @@ -666,7 +667,7 @@ def numer(self) -> i64: ... def denom(self) -> i64: ... -class BigInt(BuiltinExpr): +class BigInt(BuiltinExpr, egg_sort="BigInt"): @method(preserve=True) @deprecated("use .value") def eval(self) -> int: @@ -793,7 +794,7 @@ def bool_ge(self, other: BigIntLike) -> Bool: ... BigIntLike: TypeAlias = BigInt | i64Like -class BigRat(BuiltinExpr): +class BigRat(BuiltinExpr, egg_sort="BigRat"): @method(preserve=True) @deprecated("use .value") def eval(self) -> Fraction: @@ -893,7 +894,7 @@ def __le__(self, other: BigRatLike) -> Unit: ... BigRatLike: TypeAlias = BigRat | Fraction -class Vec(BuiltinExpr, Generic[T]): +class Vec(BuiltinExpr, Generic[T], egg_sort="Vec"): @method(preserve=True) @deprecated("use .value") def eval(self) -> tuple[T, ...]: @@ -972,7 +973,7 @@ def set(self, index: i64Like, value: T) -> Vec[T]: ... VecLike: TypeAlias = Vec[T] | tuple[TO, ...] | list[TO] -class PyObject(BuiltinExpr): +class PyObject(BuiltinExpr, egg_sort="PyObject"): @method(preserve=True) @deprecated("use .value") def eval(self) -> object: @@ -984,12 +985,21 @@ def value(self) -> object: expr = cast("RuntimeExpr", self).__egg_typed_expr__.expr if not isinstance(expr, PyObjectDecl): raise ExprValueError(self, "PyObject(x)") - return expr.value + return cloudpickle.loads(expr.pickled) __match_args__ = ("value",) def __init__(self, value: object) -> None: ... + @method(egg_fn="py-call") + def __call__(self, *args: object) -> PyObject: ... + + @method(egg_fn="py-call-extended") + def call_extended(self, args: PyObject, kwargs: PyObject) -> PyObject: + """ + Call the PyObject with the given args and kwargs PyObjects. + """ + @method(egg_fn="py-from-string") @classmethod def from_string(cls, s: StringLike) -> PyObject: ... @@ -1023,6 +1033,7 @@ class PyObjectFunction(Protocol): def __call__(self, *__args: PyObject) -> PyObject: ... +@deprecated("use PyObject(fn) directly") def py_eval_fn(fn: Callable) -> PyObjectFunction: """ Takes a python callable and maps it to a callable which takes and returns PyObjects. @@ -1030,17 +1041,7 @@ def py_eval_fn(fn: Callable) -> PyObjectFunction: It translates it to a call which uses `py_eval` to call the function, passing in the args as locals, and using the globals from function. """ - - def inner(*__args: PyObject, __fn: Callable = fn) -> PyObject: - new_kvs: list[object] = [] - eval_str = "__fn(" - for i, arg in enumerate(__args): - new_kvs.extend((f"__arg_{i}", arg)) - eval_str += f"__arg_{i}, " - eval_str += ")" - return py_eval(eval_str, PyObject({"__fn": __fn}).dict_update(*new_kvs), __fn.__globals__) - - return inner + return PyObject(fn) @function(builtin=True, egg_fn="py-exec") @@ -1057,7 +1058,7 @@ def py_exec(code: StringLike, globals: object = PyObject.dict(), locals: object T3 = TypeVar("T3") -class UnstableFn(BuiltinExpr, Generic[T, Unpack[TS]]): +class UnstableFn(BuiltinExpr, Generic[T, *TS], egg_sort="UnstableFn"): @overload def __init__(self, f: Callable[[Unpack[TS]], T]) -> None: ... @@ -1095,7 +1096,7 @@ def value(self) -> Callable[[Unpack[TS]], T]: __match_args__ = ("value",) @method(egg_fn="unstable-app") - def __call__(self, *args: Unpack[TS]) -> T: ... + def __call__(self, *args: *TS) -> T: ... # Method Type is for builtins like __getitem__ diff --git a/python/egglog/conversion.py b/python/egglog/conversion.py index 7d31c0c5..3690df1b 100644 --- a/python/egglog/conversion.py +++ b/python/egglog/conversion.py @@ -83,7 +83,7 @@ def _is_type_compatible(source: type | JustTypeRef, target: type | JustTypeRef) if source == target: return True if isinstance(source, JustTypeRef) and isinstance(target, JustTypeRef) and source.args and not target.args: - return source.name == target.name + return source.ident == target.ident # TODO: Support case where B[T] where T is typevar is mapped to B[C] return False @@ -162,7 +162,7 @@ def min_binary_conversion( for lhs_cost, lhs_converted_type, lhs_convert in possible_lhs: # Start by checking if we have a LHS that matches exactly and a RHS which can be converted if (desired_other_type := decls.check_binary_method_with_self_type(method_name, lhs_converted_type)) and ( - converter := CONVERSIONS.get((rhs, desired_other_type)) + converter := _lookup_conversion(rhs, desired_other_type) ): cost = lhs_cost + converter[0] if best_method is None or best_method[0] > cost: @@ -171,7 +171,7 @@ def min_binary_conversion( for rhs_cost, rhs_converted_type, rhs_convert in possible_rhs: # Next see if it's possible to convert the LHS and keep the RHS as is for desired_self_type in decls.check_binary_method_with_other_type(method_name, rhs_converted_type): - if converter := CONVERSIONS.get((lhs, desired_self_type)): + if converter := _lookup_conversion(lhs, desired_self_type): cost = rhs_cost + converter[0] if best_method is None or best_method[0] > cost: best_method = (cost, converter[1], rhs_convert) @@ -186,7 +186,11 @@ def _all_conversions_from(tp: JustTypeRef | type) -> list[tuple[int, JustTypeRef Returns a list of tuples of (cost, target type, conversion function). """ - return [(cost, target, fn) for (source, target), (cost, fn) in CONVERSIONS.items() if source == tp] + return [ + (cost, target, fn) + for (source, target), (cost, fn) in CONVERSIONS.items() + if (issubclass(tp, source) if isinstance(tp, type) and isinstance(source, type) else source == tp) + ] def identity(x: Any) -> Any: @@ -217,7 +221,7 @@ def resolve_literal( arg: object, decls: Callable[[], Declarations] = retrieve_conversion_decls, tcs: TypeConstraintSolver | None = None, - cls_name: str | None = None, + cls_ident: Ident | None = None, ) -> RuntimeExpr: """ Try to convert an object to a type, raising a ConvertError if it is not possible. @@ -236,7 +240,7 @@ def resolve_literal( # args first based on the existing type constraint solver if tcs: try: - tp_just = tcs.substitute_typevars(tp, cls_name) + tp_just = tcs.substitute_typevars(tp, cls_ident) # If we can't resolve the type var yet, then just assume it is the right value except TypeConstraintError: assert isinstance(arg, RuntimeExpr), f"Expected a runtime expression, got {arg}" @@ -246,25 +250,29 @@ def resolve_literal( assert isinstance(arg, RuntimeExpr), f"Expected a runtime expression, got {arg}" return arg if tcs: - tcs.infer_typevars(tp, tp_just, cls_name) + tcs.infer_typevars(tp, tp_just, cls_ident) if arg_type == tp_just: # If the type is an egg type, it has to be a runtime expr assert isinstance(arg, RuntimeExpr) return arg - # Try all parent types as well, if we are converting from a Python type - for arg_type_instance in arg_type.__mro__ if isinstance(arg_type, type) else [arg_type]: - if (key := (arg_type_instance, tp_just)) in CONVERSIONS: - fn = CONVERSIONS[key][1] - break - # Try broadening if we have a convert to the general type instead of the specific one too, for generics - if tp_just.args and (key := (arg_type_instance, JustTypeRef(tp_just.name))) in CONVERSIONS: - fn = CONVERSIONS[key][1] - break - # if we didn't find any raise an error - else: - raise ConvertError(f"Cannot convert {arg_type} to {tp_just}") - with with_type_args(tp_just.args, decls): - return fn(arg) + if (conversion := _lookup_conversion(arg_type, tp_just)) is not None: + with with_type_args(tp_just.args, decls): + return conversion[1](arg) + raise ConvertError(f"Cannot convert {arg} of type {arg_type} to {tp_just}") + + +def _lookup_conversion(lhs: type | JustTypeRef, rhs: JustTypeRef) -> tuple[int, Callable[[Any], RuntimeExpr]] | None: + """ + Looks up a conversion function for the given types. + + Also looks up all parent types of the lhs if it is a Python type and looks up more general not paramtrized types for rhs. + """ + for lhs_type in lhs.__mro__ if isinstance(lhs, type) else [lhs]: + if (key := (lhs_type, rhs)) in CONVERSIONS: + return CONVERSIONS[key] + if rhs.args and (key := (lhs_type, JustTypeRef(rhs.ident))) in CONVERSIONS: + return CONVERSIONS[key] + return None def _debug_print_converers(): @@ -279,8 +287,4 @@ def _debug_print_converers(): def resolve_type(x: object) -> JustTypeRef | type: if isinstance(x, RuntimeExpr): return x.__egg_typed_expr__.tp - tp = type(x) - # If this value has a custom metaclass, let's use that as our index instead of the type - if type(tp) is not type: - return type(tp) - return tp + return type(x) diff --git a/python/egglog/declarations.py b/python/egglog/declarations.py index f3ed264b..e2ffa08f 100644 --- a/python/egglog/declarations.py +++ b/python/egglog/declarations.py @@ -8,12 +8,22 @@ from dataclasses import dataclass, field from functools import cached_property -from typing import TYPE_CHECKING, ClassVar, Literal, Protocol, TypeAlias, TypeVar, Union, cast, runtime_checkable +from typing import ( + TYPE_CHECKING, + ClassVar, + Literal, + Protocol, + Self, + TypeAlias, + TypeVar, + Union, + assert_never, + cast, + runtime_checkable, +) from uuid import UUID from weakref import WeakValueDictionary -from typing_extensions import Self, assert_never - from .bindings import Value if TYPE_CHECKING: @@ -53,6 +63,7 @@ "FunctionSignature", "GetCostDecl", "HasDeclerations", + "Ident", "InitRef", "JustTypeRef", "LetDecl", @@ -131,17 +142,37 @@ def upcast_declerations(declerations_like: Iterable[DeclerationsLike]) -> list[D return d +@dataclass(frozen=True) +class Ident: + name: str + module: str | None = None + + def __str__(self) -> str: + if self.module: + return f"{self.module}.{self.name}" + return self.name + + @classmethod + def builtin(cls, name: str) -> Ident: + return cls(name, "egglog.builtins") + + +default_ruleset_identifier = Ident("") + + @dataclass class Declarations: _unnamed_functions: set[UnnamedFunctionRef] = field(default_factory=set) - _functions: dict[str, FunctionDecl | RelationDecl | ConstructorDecl] = field(default_factory=dict) - _constants: dict[str, ConstantDecl] = field(default_factory=dict) - _classes: dict[str, ClassDecl] = field(default_factory=dict) - _rulesets: dict[str, RulesetDecl | CombinedRulesetDecl] = field(default_factory=lambda: {"": RulesetDecl([])}) + _functions: dict[Ident, FunctionDecl | RelationDecl | ConstructorDecl] = field(default_factory=dict) + _constants: dict[Ident, ConstantDecl] = field(default_factory=dict) + _classes: dict[Ident, ClassDecl] = field(default_factory=dict) + _rulesets: dict[Ident, RulesetDecl | CombinedRulesetDecl] = field( + default_factory=lambda: {default_ruleset_identifier: RulesetDecl([])} + ) @property def default_ruleset(self) -> RulesetDecl: - ruleset = self._rulesets[""] + ruleset = self._rulesets[default_ruleset_identifier] assert isinstance(ruleset, RulesetDecl) return ruleset @@ -190,7 +221,7 @@ def update_other(self, other: Declarations) -> None: # is added to functions. combined_default_rules: set[RewriteOrRuleDecl] = {*self.default_ruleset.rules, *other.default_ruleset.rules} other._rulesets |= self._rulesets - other._rulesets[""] = RulesetDecl(list(combined_default_rules)) + other._rulesets[default_ruleset_identifier] = RulesetDecl(list(combined_default_rules)) def get_callable_decl(self, ref: CallableRef) -> CallableDecl: # noqa: PLR0911 match ref: @@ -239,7 +270,7 @@ def check_binary_method_with_types(self, method_name: str, self_type: JustTypeRe Checks if the class has a binary method compatible with the given types. """ vars: dict[ClassTypeVarRef, JustTypeRef] = {} - if callable_decl := self._classes[self_type.name].methods.get(method_name): + if callable_decl := self._classes[self_type.ident].methods.get(method_name): match callable_decl.signature: case FunctionSignature((self_arg_type, other_arg_type)) if self_arg_type.matches_just( vars, self_type @@ -252,7 +283,7 @@ def check_binary_method_with_self_type(self, method_name: str, self_type: JustTy Checks if the class has a binary method with the given name and self type. Returns the other type if it exists. """ vars: dict[ClassTypeVarRef, JustTypeRef] = {} - class_decl = self._classes.get(self_type.name) + class_decl = self._classes.get(self_type.ident) if class_decl is None: return None if callable_decl := class_decl.methods.get(method_name): @@ -274,15 +305,15 @@ def check_binary_method_with_other_type(self, method_name: str, other_type: Just ): yield self_arg_type.to_just(vars) - def get_class_decl(self, name: str) -> ClassDecl: - return self._classes[name] + def get_class_decl(self, ident: Ident) -> ClassDecl: + return self._classes[ident] - def get_paramaterized_class(self, name: str) -> TypeRefWithVars: + def get_paramaterized_class(self, ident: Ident) -> TypeRefWithVars: """ Returns a class reference with type parameters, if the class is paramaterized. """ - type_vars = self._classes[name].type_vars - return TypeRefWithVars(name, type_vars) + type_vars = self._classes[ident].type_vars + return TypeRefWithVars(ident, type_vars) @dataclass @@ -298,6 +329,7 @@ class ClassDecl: properties: dict[str, FunctionDecl | ConstructorDecl] = field(default_factory=dict) preserved_methods: dict[str, Callable] = field(default_factory=dict) match_args: tuple[str, ...] = field(default=()) + doc: str | None = field(default=None) @dataclass(frozen=True) @@ -312,7 +344,7 @@ def __hash__(self) -> int: @dataclass(frozen=True) class CombinedRulesetDecl: - rulesets: tuple[str, ...] + rulesets: tuple[Ident, ...] # Have two different types of type refs, one that can include vars recursively and one that cannot. @@ -320,16 +352,16 @@ class CombinedRulesetDecl: # well as runtime values. @dataclass(frozen=True) class JustTypeRef: - name: str + ident: Ident args: tuple[JustTypeRef, ...] = () def to_var(self) -> TypeRefWithVars: - return TypeRefWithVars(self.name, tuple(a.to_var() for a in self.args)) + return TypeRefWithVars(self.ident, tuple(a.to_var() for a in self.args)) def __str__(self) -> str: if self.args: - return f"{self.name}[{', '.join(str(a) for a in self.args)}]" - return self.name + return f"{self.ident.name}[{', '.join(str(a) for a in self.args)}]" + return str(self.ident.name) ## @@ -352,8 +384,7 @@ class ClassTypeVarRef: A class type variable represents one of the types of the class, if it is a generic class. """ - name: str - module: str + ident: Ident def to_just(self, vars: dict[ClassTypeVarRef, JustTypeRef] | None = None) -> JustTypeRef: if vars is None or self not in vars: @@ -365,7 +396,7 @@ def __str__(self) -> str: @classmethod def from_type_var(cls, typevar: TypeVar) -> ClassTypeVarRef: - res = cls(typevar.__name__, typevar.__module__) + res = cls(Ident(typevar.__name__, typevar.__module__)) _RESOLVED_TYPEVARS[res] = typevar return res @@ -384,23 +415,23 @@ def matches_just(self, vars: dict[ClassTypeVarRef, JustTypeRef], other: JustType @dataclass(frozen=True) class TypeRefWithVars: - name: str + ident: Ident args: tuple[TypeOrVarRef, ...] = () def to_just(self, vars: dict[ClassTypeVarRef, JustTypeRef] | None = None) -> JustTypeRef: - return JustTypeRef(self.name, tuple(a.to_just(vars) for a in self.args)) + return JustTypeRef(self.ident, tuple(a.to_just(vars) for a in self.args)) def __str__(self) -> str: if self.args: - return f"{self.name}[{', '.join(str(a) for a in self.args)}]" - return self.name + return f"{self.ident.name}[{', '.join(str(a) for a in self.args)}]" + return str(self.ident.name) def matches_just(self, vars: dict[ClassTypeVarRef, JustTypeRef], other: JustTypeRef) -> bool: """ Checks if this type reference matches the given JustTypeRef, including type variables. """ return ( - self.name == other.name + self.ident == other.ident and len(self.args) == len(other.args) and all(a.matches_just(vars, b) for a, b in zip(self.args, other.args, strict=True)) ) @@ -445,40 +476,40 @@ def egg_name(self) -> None | str: @dataclass(frozen=True) class FunctionRef: - name: str + ident: Ident @dataclass(frozen=True) class ConstantRef: - name: str + ident: Ident @dataclass(frozen=True) class MethodRef: - class_name: str + ident: Ident method_name: str @dataclass(frozen=True) class ClassMethodRef: - class_name: str + ident: Ident method_name: str @dataclass(frozen=True) class InitRef: - class_name: str + ident: Ident @dataclass(frozen=True) class ClassVariableRef: - class_name: str + ident: Ident var_name: str @dataclass(frozen=True) class PropertyRef: - class_name: str + ident: Ident property_name: str @@ -512,7 +543,7 @@ def signature(self) -> FunctionSignature: arg_types=tuple(a.to_var() for a in self.arg_types), arg_names=tuple(f"__{i}" for i in range(len(self.arg_types))), arg_defaults=self.arg_defaults, - return_type=TypeRefWithVars("Unit"), + return_type=TypeRefWithVars(Ident.builtin("Unit")), ) @@ -564,6 +595,7 @@ class FunctionDecl: builtin: bool = False egg_name: str | None = None merge: ExprDecl | None = None + doc: str | None = None @dataclass(frozen=True) @@ -572,6 +604,7 @@ class ConstructorDecl: egg_name: str | None = None cost: int | None = None unextractable: bool = False + doc: str | None = None CallableDecl: TypeAlias = RelationDecl | ConstantDecl | FunctionDecl | ConstructorDecl @@ -594,23 +627,7 @@ class LetRefDecl: @dataclass(frozen=True) class PyObjectDecl: - value: object - - def __hash__(self) -> int: - """Tries using the hash of the value, if unhashable use the ID.""" - try: - return hash((type(self.value), self.value)) - except TypeError: - return id(self.value) - - def __eq__(self, other: object) -> bool: - if not isinstance(other, PyObjectDecl): - return False - return self.parts == other.parts - - @property - def parts(self) -> tuple[type, object]: - return (type(self.value), self.value) + pickled: bytes LitType: TypeAlias = int | str | float | bool | None @@ -808,7 +825,7 @@ class SequenceDecl: @dataclass(frozen=True) class RunDecl: - ruleset: str + ruleset: Ident until: tuple[FactDecl, ...] | None scheduler: BackOffDecl | None = None diff --git a/python/egglog/deconstruct.py b/python/egglog/deconstruct.py index 1d60b85d..26a35622 100644 --- a/python/egglog/deconstruct.py +++ b/python/egglog/deconstruct.py @@ -8,6 +8,7 @@ from functools import partial from typing import TYPE_CHECKING, TypeVar, overload +import cloudpickle from typing_extensions import TypeVarTuple, Unpack from .declarations import * @@ -46,7 +47,7 @@ def get_literal_value(x: PyObject) -> object: ... @overload -def get_literal_value(x: UnstableFn[T, Unpack[TS]]) -> Callable[[Unpack[TS]], T] | None: ... +def get_literal_value(x: UnstableFn[T, *TS]) -> Callable[[Unpack[TS]], T] | None: ... @overload @@ -64,7 +65,7 @@ def get_literal_value(x: object) -> object: case LitDecl(v): return v case PyObjectDecl(obj): - return obj + return cloudpickle.loads(obj) case PartialCallDecl(call): fn, args = _deconstruct_call_decl(x.__egg_decls_thunk__, call) if not args: @@ -117,10 +118,10 @@ def get_callable_args(x: T, fn: None = ...) -> tuple[BaseExpr, ...]: ... @overload -def get_callable_args(x: T, fn: Callable[[Unpack[TS]], T]) -> tuple[Unpack[TS]] | None: ... +def get_callable_args(x: T, fn: Callable[[Unpack[TS]], T]) -> tuple[*TS] | None: ... -def get_callable_args(x: T, fn: Callable[[Unpack[TS]], T] | None = None) -> tuple[Unpack[TS]] | None: +def get_callable_args(x: T, fn: Callable[[Unpack[TS]], T] | None = None) -> tuple[*TS] | None: """ Gets all the arguments of an expression. If a function is provided, it will only return the arguments if the expression is a call @@ -146,7 +147,7 @@ def get_callable_args(x: T, fn: Callable[[Unpack[TS]], T] | None = None) -> tupl if ( isinstance(actual_fn, RuntimeClass) and isinstance(fn, RuntimeClass) - and actual_fn.__egg_tp__.name == fn.__egg_tp__.name + and actual_fn.__egg_tp__.ident == fn.__egg_tp__.ident ): return args return None @@ -164,10 +165,10 @@ def _deconstruct_call_decl( if isinstance(call.callable, InitRef): return RuntimeClass( decls_thunk, - TypeRefWithVars(call.callable.class_name, tuple(tp.to_var() for tp in (call.bound_tp_params or []))), + TypeRefWithVars(call.callable.ident, tuple(tp.to_var() for tp in (call.bound_tp_params or []))), ), arg_exprs egg_bound = ( - JustTypeRef(call.callable.class_name, call.bound_tp_params or ()) + JustTypeRef(call.callable.ident, call.bound_tp_params or ()) if isinstance(call.callable, ClassMethodRef) else None ) diff --git a/python/egglog/egraph.py b/python/egglog/egraph.py index 64d97fe9..819248d0 100644 --- a/python/egglog/egraph.py +++ b/python/egglog/egraph.py @@ -8,7 +8,7 @@ from contextvars import ContextVar, Token from dataclasses import InitVar, dataclass, field from functools import partial -from inspect import Parameter, currentframe, signature +from inspect import Parameter, currentframe, getmodule, signature from types import FrameType, FunctionType from typing import ( TYPE_CHECKING, @@ -16,10 +16,13 @@ ClassVar, Generic, Literal, + Never, Protocol, + Self, TypeAlias, TypedDict, TypeVar, + assert_never, cast, get_type_hints, overload, @@ -28,7 +31,7 @@ from warnings import warn import graphviz -from typing_extensions import Never, ParamSpec, Self, Unpack, assert_never +from typing_extensions import ParamSpec, Unpack from . import bindings from .conversion import * @@ -39,7 +42,6 @@ from .pretty import pretty_decl from .runtime import * from .thunk import * -from .version_compat import * if TYPE_CHECKING: from .builtins import String, Unit, i64, i64Like @@ -132,26 +134,6 @@ } -# special methods that return none and mutate self -ALWAYS_MUTATES_SELF = {"__setitem__", "__delitem__"} -# special methods which must return real python values instead of lazy expressions -ALWAYS_PRESERVED = { - "__repr__", - "__str__", - "__bytes__", - "__format__", - "__hash__", - "__bool__", - "__len__", - "__length_hint__", - "__iter__", - "__reversed__", - "__contains__", - "__index__", - "__bufer__", -} - - def check_eq(x: BASE_EXPR, y: BASE_EXPR, schedule: Schedule | None = None, *, add_second=True, display=False) -> EGraph: """ Verifies that two expressions are equal after running the schedule. @@ -173,9 +155,8 @@ def check_eq(x: BASE_EXPR, y: BASE_EXPR, schedule: Schedule | None = None, *, ad except bindings.EggSmolError as err: if display: egraph.display() - raise add_note( - f"Failed:\n{eq(x).to(y)}\n\nExtracted:\n {eq(egraph.extract(x)).to(egraph.extract(y))})", err - ) from None + err.add_note(f"Failed:\n{eq(x).to(y)}\n\nExtracted:\n {eq(egraph.extract(x)).to(egraph.extract(y))})") + raise return egraph @@ -343,10 +324,10 @@ def __new__( # type: ignore[misc] assert frame prev_frame = frame.f_back assert prev_frame - + cls_ident = Ident(name, _get_module(prev_frame)) # Pass in an instance of the class so that when we are generating the decls # we can update them eagerly so that we can access the methods in the class body - runtime_cls = RuntimeClass(None, TypeRefWithVars(name)) # type: ignore[arg-type] + runtime_cls = RuntimeClass(None, TypeRefWithVars(cls_ident)) # type: ignore[arg-type] # Store frame so that we can get live access to updated locals/globals # Otherwise, f_locals returns a copy @@ -357,7 +338,7 @@ def __new__( # type: ignore[misc] prev_frame, builtin, egg_sort, - name, + cls_ident, ruleset, runtime_cls, ) @@ -372,11 +353,19 @@ class BaseExpr(metaclass=_ExprMetaclass): Either a builtin or a user defined expression type. """ + # these methods are only provided for type checking + # The real implementations are in the runtime system + def __ne__(self, other: Self) -> Unit: ... # type: ignore[override, empty-body] # not currently dissalowing other types of equality https://github.com/python/typeshed/issues/8217#issuecomment-3140873292 def __eq__(self, other: Self) -> Fact: ... # type: ignore[override, empty-body] + def __replace_expr__(self, new_expr: Self) -> None: + """ + Replace the current expression with the new expression in place. + """ + class BuiltinExpr(BaseExpr, metaclass=_ExprMetaclass): """ @@ -395,7 +384,7 @@ def _generate_class_decls( # noqa: C901,PLR0912 frame: FrameType, builtin: bool, egg_sort: str | None, - cls_name: str, + cls_ident: Ident, ruleset: Ruleset | None, runtime_cls: RuntimeClass, ) -> Declarations: @@ -408,8 +397,10 @@ def _generate_class_decls( # noqa: C901,PLR0912 ) type_vars = tuple(ClassTypeVarRef.from_type_var(p) for p in parameters) del parameters - cls_decl = ClassDecl(egg_sort, type_vars, builtin, match_args=namespace.pop("__match_args__", ())) - decls = Declarations(_classes={cls_name: cls_decl}) + cls_decl = ClassDecl( + egg_sort, type_vars, builtin, match_args=namespace.pop("__match_args__", ()), doc=namespace.pop("__doc__", None) + ) + decls = Declarations(_classes={cls_ident: cls_decl}) # Update class think eagerly when resolving so that lookups work in methods runtime_cls.__egg_decls_thunk__ = Thunk.value(decls) @@ -424,10 +415,10 @@ def _generate_class_decls( # noqa: C901,PLR0912 type_ref = resolve_type_annotation_mutate(decls, inner_tp) cls_decl.class_variables[k] = ConstantDecl(type_ref.to_just()) _add_default_rewrite( - decls, ClassVariableRef(cls_name, k), type_ref, namespace.pop(k, None), ruleset, subsume=False + decls, ClassVariableRef(cls_ident, k), type_ref, namespace.pop(k, None), ruleset, subsume=False ) else: - msg = f"On class {cls_name}, for attribute '{k}', expected a ClassVar, but got {v}" + msg = f"On class {cls_ident}, for attribute '{k}', expected a ClassVar, but got {v}" raise NotImplementedError(msg) ## @@ -444,7 +435,7 @@ def _generate_class_decls( # noqa: C901,PLR0912 for method_name, method in filtered_namespace: is_init = method_name == "__init__" # Don't register the init methods for literals, since those don't use the type checking mechanisms - if is_init and cls_name in LIT_CLASS_NAMES: + if is_init and cls_ident in LIT_IDENTS: continue match method: case _WrappedMethod(egg_fn, cost, merge, fn, preserve, mutates, unextractable, subsume, reverse_args): @@ -455,7 +446,7 @@ def _generate_class_decls( # noqa: C901,PLR0912 unextractable, preserve, subsume = False, False, False mutates = method_name in ALWAYS_MUTATES_SELF reverse_args = False - if preserve: + if preserve or method_name in ALWAYS_PRESERVED: cls_decl.preserved_methods[method_name] = fn continue locals = frame.f_locals @@ -465,15 +456,15 @@ def _generate_class_decls( # noqa: C901,PLR0912 fn = fn.__wrapped__ # type: ignore[attr-defined] match fn: case classmethod(): - ref = ClassMethodRef(cls_name, method_name) + ref = ClassMethodRef(cls_ident, method_name) fn = fn.__func__ case property(): - ref = PropertyRef(cls_name, method_name) + ref = PropertyRef(cls_ident, method_name) fn = fn.fget case _: - ref = InitRef(cls_name) if is_init else MethodRef(cls_name, method_name) + ref = InitRef(cls_ident) if is_init else MethodRef(cls_ident, method_name) if isinstance(fn, _WrappedMethod): - msg = f"{cls_name}.{method_name} Add the @method(...) decorator above @classmethod or @property" + msg = f"{cls_ident}.{method_name} Add the @method(...) decorator above @classmethod or @property" raise ValueError(msg) # noqa: TRY004 special_function_name: SpecialFunctions | None = ( @@ -500,9 +491,10 @@ def _generate_class_decls( # noqa: C901,PLR0912 reverse_args=reverse_args, ) except Exception as e: - raise add_note(f"Error processing {cls_name}.{method_name}", e) from None + e.add_note(f"Error processing {cls_ident}.{method_name}") + raise - if not builtin and not isinstance(ref, InitRef) and not mutates: + if not builtin and not isinstance(ref, InitRef): add_default_funcs.append(add_rewrite) # Add all rewrite methods at the end so that all methods are registered first and can be accessed @@ -532,7 +524,7 @@ def create_decls(self, fn: Callable) -> tuple[Declarations, CallableRef]: add_rewrite = _fn_decl( decls, self.egg_fn, - ref := FunctionRef(fn.__name__), + ref := FunctionRef(Ident(fn.__name__, fn.__module__)), fn, self.hint_locals, self.cost, @@ -593,7 +585,7 @@ def _fn_decl( else: var_arg_type = None arg_types = tuple( - decls.get_paramaterized_class(ref.class_name) + decls.get_paramaterized_class(ref.ident) if i == 0 and isinstance(ref, MethodRef | PropertyRef) else resolve_type_annotation_mutate(decls, hints[t.name]) for i, t in enumerate(params) @@ -608,7 +600,7 @@ def _fn_decl( decls.update(*arg_defaults) return_type = ( - decls.get_paramaterized_class(ref.class_name) + decls.get_paramaterized_class(ref.ident) if isinstance(ref, InitRef) else arg_types[0] if mutates_first_arg @@ -635,7 +627,7 @@ def _fn_decl( args = (TypedExprDecl(tp.to_just(), UnboundVarDecl(name)) for name, tp in zip(arg_names, arg_types, strict=True)) return_type_is_eqsort = ( - not decls._classes[return_type.name].builtin if isinstance(return_type, TypeRefWithVars) else False + not decls._classes[return_type.ident].builtin if isinstance(return_type, TypeRefWithVars) else False ) is_constructor = not is_builtin and return_type_is_eqsort and merged is None signature_ = FunctionSignature( @@ -646,9 +638,10 @@ def _fn_decl( arg_defaults=tuple(a.__egg_typed_expr__.expr if a is not None else None for a in arg_defaults), reverse_args=reverse_args, ) + doc = fn.__doc__ decl: ConstructorDecl | FunctionDecl if is_constructor: - decl = ConstructorDecl(signature_, egg_name, cost, unextractable) + decl = ConstructorDecl(signature_, egg_name, cost, unextractable, doc) else: if cost is not None: msg = "Cost can only be set for constructors" @@ -661,10 +654,20 @@ def _fn_decl( egg_name=egg_name, merge=merged.__egg_typed_expr__.expr if merged is not None else None, builtin=is_builtin, + doc=doc, ) decls.set_function_decl(ref, decl) return Thunk.fn( - _add_default_rewrite_function, decls, ref, fn, args, ruleset, subsume, return_type, context=f"creating {ref}" + _add_default_rewrite_function, + decls, + ref, + fn, + args, + ruleset, + subsume, + return_type, + mutates_first_arg, + context=f"creating {ref}", ) @@ -695,17 +698,32 @@ def relation(name: str, /, *tps: type, egg_fn: str | None = None) -> Callable[.. """ Creates a function whose return type is `Unit` and has a default value. """ - decls_thunk = Thunk.fn(_relation_decls, name, tps, egg_fn) - return cast("Callable[..., Unit]", RuntimeFunction(decls_thunk, Thunk.value(FunctionRef(name)))) + ident = Ident(name, _get_module()) + + decls_thunk = Thunk.fn(_relation_decls, ident, tps, egg_fn) + return cast("Callable[..., Unit]", RuntimeFunction(decls_thunk, Thunk.value(FunctionRef(ident)))) -def _relation_decls(name: str, tps: tuple[type, ...], egg_fn: str | None) -> Declarations: +def _get_module(frame: FrameType | None = None) -> str | None: + if frame is None: + frame = currentframe() + assert frame is not None + frame = frame.f_back + assert frame is not None + frame = frame.f_back + assert frame is not None + + module = getmodule(frame) + return module.__name__ if module is not None else None + + +def _relation_decls(ident: Ident, tps: tuple[type, ...], egg_fn: str | None) -> Declarations: from .builtins import Unit # noqa: PLC0415 decls = Declarations() decls |= cast("RuntimeClass", Unit) arg_types = tuple(resolve_type_annotation_mutate(decls, tp).to_just() for tp in tps) - decls._functions[name] = RelationDecl(arg_types, tuple(None for _ in tps), egg_fn) + decls._functions[ident] = RelationDecl(arg_types, tuple(None for _ in tps), egg_fn) return decls @@ -733,8 +751,9 @@ def _constant_thunk( ) -> tuple[Declarations, TypedExprDecl]: decls = Declarations() type_ref = resolve_type_annotation_mutate(decls, tp) - callable_ref = ConstantRef(name) - decls._constants[name] = ConstantDecl(type_ref.to_just(), egg_name) + ident = Ident(name, _get_module()) + callable_ref = ConstantRef(ident) + decls._constants[ident] = ConstantDecl(type_ref.to_just(), egg_name) _add_default_rewrite(decls, callable_ref, type_ref, default_replacement, ruleset, subsume=False) return decls, TypedExprDecl(type_ref.to_just(), CallDecl(callable_ref)) @@ -747,15 +766,19 @@ def _add_default_rewrite_function( ruleset: Ruleset | None, subsume: bool, res_type: TypeOrVarRef, + mutates_first_arg: bool, ) -> None: - args: list[object] = [RuntimeExpr.__from_values__(decls, a) for a in args] - + args = list(args) + arg_exprs: list[RuntimeExpr | RuntimeClass] = [RuntimeExpr.__from_values__(decls, a) for a in args] # If this is a classmethod, add the class as the first arg if isinstance(ref, ClassMethodRef): - tp = decls.get_paramaterized_class(ref.class_name) - args.insert(0, RuntimeClass(Thunk.value(decls), tp)) + tp = decls.get_paramaterized_class(ref.ident) + arg_exprs.insert(0, RuntimeClass(Thunk.value(decls), tp)) with set_current_ruleset(ruleset): - res = fn(*args) + res = fn(*arg_exprs) + # If the function mutates the first arg and we have overwritten it, then use that as the result + if mutates_first_arg and arg_exprs[0].__egg_typed_expr__ != args[0]: + res = arg_exprs[0] _add_default_rewrite(decls, ref, res_type, res, ruleset, subsume) @@ -839,7 +862,7 @@ class EGraph: _token_stack: list[EGraph] = field(default_factory=list, repr=False) def __post_init__(self, seminaive: bool, save_egglog_string: bool) -> None: - egraph = bindings.EGraph(GLOBAL_PY_OBJECT_SORT, seminaive=seminaive, record=save_egglog_string) + egraph = bindings.EGraph(seminaive=seminaive, record=save_egglog_string) self._state = EGraphState(egraph) def _add_decls(self, *decls: DeclerationsLike) -> None: @@ -1029,7 +1052,8 @@ def _run_extract(self, expr: RuntimeExpr, n: int) -> bindings._CommandOutput: try: return self._egraph.run_program(cmd)[0] except BaseException as e: - raise add_note("Extracting: " + str(expr), e) # noqa: B904 + e.add_note("Extracting: " + str(expr)) + raise def push(self) -> None: """ @@ -1216,17 +1240,17 @@ def _register_commands(self, cmds: list[Command]) -> None: self._egraph.run_program(*egg_cmds) def _command_to_egg(self, cmd: Command) -> bindings._Command | None: - ruleset_name = "" + ruleset_ident = Ident("") cmd_decl: CommandDecl match cmd: case RewriteOrRule(_, cmd_decl, ruleset): if ruleset: - ruleset_name = ruleset.__egg_name__ + ruleset_ident = ruleset.__egg_ident__ case Action(_, action): cmd_decl = ActionCommandDecl(action) case _: assert_never(cmd) - return self._state.command_to_egg(cmd_decl, ruleset_name) + return self._state.command_to_egg(cmd_decl, ruleset_ident) def function_size(self, fn: ExprCallable) -> int: """ @@ -1335,9 +1359,13 @@ def ruleset( If no name is provided, try using the name of the funciton. """ + module: str | None if isinstance(rule_or_generator, FunctionType): name = name or rule_or_generator.__name__ - r = Ruleset(name) + module = rule_or_generator.__module__ + else: + module = _get_module() + r = Ruleset(Ident(name, module if name else None) if name is not None else None) if rule_or_generator is not None: r.register(rule_or_generator, *rules, _increase_frame=True) return r @@ -1385,7 +1413,7 @@ class Ruleset(Schedule): __egg_decls_thunk__: Callable[[], Declarations] = field(init=False) schedule: RunDecl = field(init=False) - name: str | None + ident: Ident | None # Current declerations we have accumulated _current_egg_decls: Declarations = field(default_factory=Declarations) @@ -1395,8 +1423,8 @@ class Ruleset(Schedule): deferred_rule_gens: list[Callable[[], Iterable[RewriteOrRule]]] = field(default_factory=list) def __post_init__(self) -> None: - self.schedule = RunDecl(self.__egg_name__, ()) - self.__egg_ruleset__ = self._current_egg_decls._rulesets[self.__egg_name__] = RulesetDecl([]) + self.schedule = RunDecl(self.__egg_ident__, ()) + self.__egg_ruleset__ = self._current_egg_decls._rulesets[self.__egg_ident__] = RulesetDecl([]) self.__egg_decls_thunk__ = self._update_egg_decls def _update_egg_decls(self) -> Declarations: @@ -1443,7 +1471,7 @@ def register( self.deferred_rule_gens.append(Thunk.fn(_rewrite_or_rule_generator, rule_or_generator, original_frame)) def __str__(self) -> str: - return pretty_decl(self._current_egg_decls, self.__egg_ruleset__, ruleset_name=self.name) + return pretty_decl(self._current_egg_decls, self.__egg_ruleset__, ruleset_ident=self.ident) def __repr__(self) -> str: return str(self) @@ -1453,30 +1481,30 @@ def __or__(self, other: Ruleset | UnstableCombinedRuleset) -> UnstableCombinedRu # Create a unique name if we didn't pass one from the user @property - def __egg_name__(self) -> str: - return self.name or f"ruleset_{id(self)}" + def __egg_ident__(self) -> Ident: + return self.ident or Ident(f"ruleset_{id(self)}") @dataclass class UnstableCombinedRuleset(Schedule): __egg_decls_thunk__: Callable[[], Declarations] = field(init=False) schedule: RunDecl = field(init=False) - name: str | None + ident: Ident | None rulesets: InitVar[list[Ruleset | UnstableCombinedRuleset]] def __post_init__(self, rulesets: list[Ruleset | UnstableCombinedRuleset]) -> None: - self.schedule = RunDecl(self.__egg_name__, ()) + self.schedule = RunDecl(self.__egg_ident__, ()) # Don't use thunk so that this is re-evaluated each time its requsted, so that additions inside will # be added after its been evaluated once. self.__egg_decls_thunk__ = partial(self._create_egg_decls, *rulesets) @property - def __egg_name__(self) -> str: - return self.name or f"combined_ruleset_{id(self)}" + def __egg_ident__(self) -> Ident: + return self.ident or Ident(f"combined_ruleset_{id(self)}") def _create_egg_decls(self, *rulesets: Ruleset | UnstableCombinedRuleset) -> Declarations: decls = Declarations.create(*rulesets) - decls._rulesets[self.__egg_name__] = CombinedRulesetDecl(tuple(r.__egg_name__ for r in rulesets)) + decls._rulesets[self.__egg_ident__] = CombinedRulesetDecl(tuple(r.__egg_ident__ for r in rulesets)) return decls def __or__(self, other: Ruleset | UnstableCombinedRuleset) -> UnstableCombinedRuleset: @@ -1489,7 +1517,7 @@ def unstable_combine_rulesets( """ Combine multiple rulesets into a single ruleset. """ - return UnstableCombinedRuleset(name, list(rulesets)) + return UnstableCombinedRuleset(Ident(name, _get_module()) if name else None, list(rulesets)) @dataclass @@ -1527,7 +1555,9 @@ def __bool__(self) -> bool: match self.fact: case EqDecl(_, left, right): return left == right - case ExprFactDecl(TypedExprDecl(_, CallDecl(FunctionRef("!="), (left_tp, right_tp)))): + case ExprFactDecl(TypedExprDecl(_, CallDecl(FunctionRef(name), (left_tp, right_tp)))) if ( + name == Ident.builtin("!=") + ): return left_tp != right_tp msg = f"Can only check equality for == or != not {self}" raise ValueError(msg) @@ -1747,7 +1777,8 @@ def to(self, rhs: BASE_EXPR) -> Unit: res = RuntimeExpr.__from_values__( Declarations.create(cast("RuntimeClass", Unit), lhs, rhs), TypedExprDecl( - JustTypeRef("Unit"), CallDecl(FunctionRef("!="), (lhs.__egg_typed_expr__, rhs.__egg_typed_expr__)) + JustTypeRef(Ident.builtin("Unit")), + CallDecl(FunctionRef(Ident.builtin("!=")), (lhs.__egg_typed_expr__, rhs.__egg_typed_expr__)), ), ) return cast("Unit", res) @@ -1851,7 +1882,7 @@ def run(ruleset: Ruleset | None = None, *until: FactLike, scheduler: BackOff | N return Schedule( Thunk.fn(Declarations.create, ruleset, *facts), RunDecl( - ruleset.__egg_name__ if ruleset else "", + ruleset.__egg_ident__ if ruleset else Ident(""), tuple(f.fact for f in facts) or None, scheduler.scheduler if scheduler else None, ), diff --git a/python/egglog/egraph_state.py b/python/egglog/egraph_state.py index 19aeba16..c82e38ff 100644 --- a/python/egglog/egraph_state.py +++ b/python/egglog/egraph_state.py @@ -5,12 +5,13 @@ from __future__ import annotations import re +from base64 import standard_b64decode, standard_b64encode from collections import defaultdict from dataclasses import dataclass, field, replace -from typing import TYPE_CHECKING, Literal, overload +from typing import TYPE_CHECKING, Literal, assert_never, overload from uuid import UUID -from typing_extensions import assert_never +import cloudpickle from . import bindings from .declarations import * @@ -21,11 +22,7 @@ if TYPE_CHECKING: from collections.abc import Iterable -__all__ = ["GLOBAL_PY_OBJECT_SORT", "EGraphState", "span"] - -# Create a global sort for python objects, so we can store them without an e-graph instance -# Needed when serializing commands to egg commands when creating modules -GLOBAL_PY_OBJECT_SORT = bindings.PyObjectSort() +__all__ = ["EGraphState", "span"] def span(frame_index: int = 0) -> bindings.RustSpan: @@ -54,16 +51,16 @@ class EGraphState: # The decleratons we have added. __egg_decls__: Declarations = field(default_factory=Declarations) # Mapping of added rulesets to the added rules - rulesets: dict[str, set[RewriteOrRuleDecl]] = field(default_factory=dict) + rulesets: dict[Ident, set[RewriteOrRuleDecl]] = field(default_factory=dict) # Bidirectional mapping between egg function names and python callable references. # Note that there are possibly mutliple callable references for a single egg function name, like `+` # for both int and rational classes. egg_fn_to_callable_refs: dict[str, set[CallableRef]] = field( - default_factory=lambda: defaultdict(set, {"!=": {FunctionRef("!=")}}) + default_factory=lambda: defaultdict(set, {"!=": {FunctionRef(Ident.builtin("!="))}}) ) callable_ref_to_egg_fn: dict[CallableRef, tuple[str, bool]] = field( - default_factory=lambda: {FunctionRef("!="): ("!=", False)} + default_factory=lambda: {FunctionRef(Ident.builtin("!=")): ("!=", False)} ) # Bidirectional mapping between egg sort names and python type references. @@ -155,10 +152,12 @@ def _schedule_to_egg(self, schedule: ScheduleDecl) -> bindings._Schedule: return bindings.Repeat(span(), times, self._schedule_to_egg(schedule)) case SequenceDecl(schedules): return bindings.Sequence(span(), [self._schedule_to_egg(s) for s in schedules]) - case RunDecl(ruleset_name, until, scheduler): + case RunDecl(ruleset_ident, until, scheduler): if scheduler is not None: raise ValueError(msg) - config = bindings.RunConfig(ruleset_name, None if not until else list(map(self.fact_to_egg, until))) + config = bindings.RunConfig( + str(ruleset_ident), None if not until else list(map(self.fact_to_egg, until)) + ) return bindings.Run(span(), config) case LetSchedulerDecl(): raise ValueError(msg) @@ -187,8 +186,8 @@ def _schedule_with_scheduler_to_egg( # noqa: C901, PLR0912 back_off_decl = bindings.Call(span(), "back-off", args) let_decl = bindings.Call(span(), "let-scheduler", [bindings.Var(span(), name), back_off_decl]) return [let_decl, *self._schedule_with_scheduler_to_egg(inner, bound_schedulers)] - case RunDecl(ruleset_name, until, scheduler): - args = [bindings.Var(span(), ruleset_name)] + case RunDecl(ruleset_ident, until, scheduler): + args = [bindings.Var(span(), str(ruleset_ident))] if scheduler: name = "run-with" scheduler_name = f"_scheduler_{bound_schedulers.index(scheduler.id)}" @@ -229,34 +228,34 @@ def _schedule_with_scheduler_to_egg( # noqa: C901, PLR0912 case _: assert_never(schedule) - def ruleset_to_egg(self, name: str) -> None: + def ruleset_to_egg(self, ident: Ident) -> None: """ Registers a ruleset if it's not already registered. """ - match self.__egg_decls__._rulesets[name]: + match self.__egg_decls__._rulesets[ident]: case RulesetDecl(rules): - if name not in self.rulesets: - if name: - self.egraph.run_program(bindings.AddRuleset(span(), name)) - added_rules = self.rulesets[name] = set() + if ident not in self.rulesets: + if str(ident): + self.egraph.run_program(bindings.AddRuleset(span(), str(ident))) + added_rules = self.rulesets[ident] = set() else: - added_rules = self.rulesets[name] + added_rules = self.rulesets[ident] for rule in rules: if rule in added_rules: continue - cmd = self.command_to_egg(rule, name) + cmd = self.command_to_egg(rule, ident) if cmd is not None: self.egraph.run_program(cmd) added_rules.add(rule) case CombinedRulesetDecl(rulesets): - if name in self.rulesets: + if ident in self.rulesets: return - self.rulesets[name] = set() + self.rulesets[ident] = set() for ruleset in rulesets: self.ruleset_to_egg(ruleset) - self.egraph.run_program(bindings.UnstableCombinedRuleset(span(), name, list(rulesets))) + self.egraph.run_program(bindings.UnstableCombinedRuleset(span(), str(ident), list(map(str, rulesets)))) - def command_to_egg(self, cmd: CommandDecl, ruleset: str) -> bindings._Command | None: + def command_to_egg(self, cmd: CommandDecl, ruleset: Ident) -> bindings._Command | None: match cmd: case ActionCommandDecl(action): action_egg = self.action_to_egg(action, expr_to_let=True) @@ -272,17 +271,20 @@ def command_to_egg(self, cmd: CommandDecl, ruleset: str) -> bindings._Command | [self.fact_to_egg(c) for c in conditions], ) return ( - bindings.RewriteCommand(ruleset, rewrite, cmd.subsume) + bindings.RewriteCommand(str(ruleset), rewrite, cmd.subsume) if isinstance(cmd, RewriteDecl) - else bindings.BiRewriteCommand(ruleset, rewrite) + else bindings.BiRewriteCommand(str(ruleset), rewrite) ) case RuleDecl(head, body, name): - rule = bindings.Rule( - span(), - [self.action_to_egg(a) for a in head], - [self.fact_to_egg(f) for f in body], + return bindings.RuleCommand( + bindings.Rule( + span(), + [self.action_to_egg(a) for a in head], + [self.fact_to_egg(f) for f in body], + name or "", + str(ruleset), + ) ) - return bindings.RuleCommand(name or "", ruleset, rule) # TODO: Replace with just constants value and looking at REF of function case DefaultRewriteDecl(ref, expr, subsume): sig = self.__egg_decls__.get_callable_decl(ref).signature @@ -354,12 +356,11 @@ def create_cost_table(self, ref: CallableRef) -> str: Creates the egg cost table if needed and gets the name of the table. """ name = self.cost_table_name(ref) - print(name, self.cost_callables) if ref not in self.cost_callables: self.cost_callables.add(ref) signature = self.__egg_decls__.get_callable_decl(ref).signature assert isinstance(signature, FunctionSignature), "Can only add cost tables for functions" - signature = replace(signature, return_type=TypeRefWithVars("i64")) + signature = replace(signature, return_type=TypeRefWithVars(Ident.builtin("i64"))) self.egraph.run_program( bindings.FunctionCommand(span(), name, self._signature_to_egg_schema(signature), None) ) @@ -398,7 +399,7 @@ def callable_ref_to_egg(self, ref: CallableRef) -> tuple[str, bool]: # noqa: C9 case ConstantDecl(tp, _): # Use constructor decleration instead of constant b/c constants cannot be extracted # https://github.com/egraphs-good/egglog/issues/334 - is_function = self.__egg_decls__._classes[tp.name].builtin + is_function = self.__egg_decls__._classes[tp.ident].builtin schema = bindings.Schema([], self.type_ref_to_egg(tp)) if is_function: self.egraph.run_program(bindings.FunctionCommand(span(), egg_name, schema, None)) @@ -412,7 +413,7 @@ def callable_ref_to_egg(self, ref: CallableRef) -> tuple[str, bool]: # noqa: C9 # Compile functions that return unit to relations, because these show up in methods where you # cant use the relation helper schema = self._signature_to_egg_schema(signature) - if signature.return_type == TypeRefWithVars("Unit"): + if signature.return_type == TypeRefWithVars(Ident.builtin("Unit")): if merge: msg = "Cannot specify a merge function for a function that returns unit" raise ValueError(msg) @@ -456,12 +457,12 @@ def type_ref_to_egg(self, ref: JustTypeRef) -> str: # noqa: C901, PLR0912 return self.type_ref_to_egg_sort[ref] except KeyError: pass - decl = self.__egg_decls__._classes[ref.name] - self.type_ref_to_egg_sort[ref] = egg_name = decl.egg_name or _generate_type_egg_name(ref) + decl = self.__egg_decls__._classes[ref.ident] + self.type_ref_to_egg_sort[ref] = egg_name = (not ref.args and decl.egg_name) or _generate_type_egg_name(ref) self.egg_sort_to_type_ref[egg_name] = ref if not decl.builtin or ref.args: if ref.args: - if ref.name == "UnstableFn": + if ref.ident == Ident.builtin("UnstableFn"): # UnstableFn is a special case, where the rest of args are collected into a call if len(ref.args) < 2: msg = "Zero argument higher order functions not supported" @@ -484,11 +485,11 @@ def type_ref_to_egg(self, ref: JustTypeRef) -> str: # noqa: C901, PLR0912 if not isinstance((signature := method.signature), FunctionSignature): continue for arg_tp in signature.arg_types: - if isinstance(arg_tp, TypeRefWithVars) and arg_tp.args and arg_tp.name != ref.name: - self.type_ref_to_egg(tcs.substitute_typevars(arg_tp, ref.name)) + if isinstance(arg_tp, TypeRefWithVars) and arg_tp.args and arg_tp.ident != ref.ident: + self.type_ref_to_egg(tcs.substitute_typevars(arg_tp, ref.ident)) type_args = [bindings.Var(span(), self.type_ref_to_egg(a)) for a in ref.args] - args = (self.type_ref_to_egg(JustTypeRef(ref.name)), type_args) + args = (self.type_ref_to_egg(JustTypeRef(ref.ident)), type_args) else: args = None self.egraph.run_program(bindings.Sort(span(), egg_name, args)) @@ -497,9 +498,9 @@ def type_ref_to_egg(self, ref: JustTypeRef) -> str: # noqa: C901, PLR0912 # even if you never use that function. if decl.builtin: for method_name in decl.class_methods: - self.callable_ref_to_egg(ClassMethodRef(ref.name, method_name)) + self.callable_ref_to_egg(ClassMethodRef(ref.ident, method_name)) if decl.init: - self.callable_ref_to_egg(InitRef(ref.name)) + self.callable_ref_to_egg(InitRef(ref.ident)) return egg_name @@ -601,7 +602,11 @@ def _expr_to_egg(self, expr_decl: ExprDecl) -> bindings._Expr: # noqa: PLR0912, egg_args = [self.typed_expr_to_egg(a, False) for a in typed_args] res = bindings.Call(span(), egg_fn, egg_args) case PyObjectDecl(value): - res = GLOBAL_PY_OBJECT_SORT.store(value) + res = bindings.Call( + span(), + "py-object", + [bindings.Lit(span(), bindings.String(standard_b64encode(value).decode("utf-8")))], + ) case PartialCallDecl(call_decl): egg_fn_call = self._expr_to_egg(call_decl) res = bindings.Call( @@ -643,32 +648,32 @@ def exprs_from_egg( state = FromEggState(self, termdag) return [state.from_expr(tp, term) for term in terms] - def _get_possible_types(self, cls_name: str) -> frozenset[JustTypeRef]: + def _get_possible_types(self, cls_ident: Ident) -> frozenset[JustTypeRef]: """ Given a class name, returns all possible registered types that it can be. """ - return frozenset(tp for tp in self.type_ref_to_egg_sort if tp.name == cls_name) + return frozenset(tp for tp in self.type_ref_to_egg_sort if tp.ident == cls_ident) def _generate_callable_egg_name(self, ref: CallableRef) -> str: """ Generates a valid egg function name for a callable reference. """ match ref: - case FunctionRef(name): - return name + case FunctionRef(ident): + return str(ident) - case ConstantRef(name): + case ConstantRef(ident): # Prefix to avoid name collisions with local vars - return f"%{name}" + return f"%{ident}" case ( - MethodRef(cls_name, name) - | ClassMethodRef(cls_name, name) - | ClassVariableRef(cls_name, name) - | PropertyRef(cls_name, name) + MethodRef(cls_ident, name) + | ClassMethodRef(cls_ident, name) + | ClassVariableRef(cls_ident, name) + | PropertyRef(cls_ident, name) ): - return f"{cls_name}.{name}" - case InitRef(cls_name): - return f"{cls_name}.__init__" + return f"{cls_ident}.{name}" + case InitRef(cls_ident): + return f"{cls_ident}.__init__" case UnnamedFunctionRef(args, val): parts = [str(self._expr_to_egg(a.expr)) + "-" + str(self.type_ref_to_egg(a.tp)) for a in args] + [ str(self.typed_expr_to_egg(val, False)) @@ -682,7 +687,10 @@ def typed_expr_to_value(self, typed_expr: TypedExprDecl) -> bindings.Value: return self.egraph.eval_expr(egg_expr)[1] def value_to_expr(self, tp: JustTypeRef, value: bindings.Value) -> ExprDecl: # noqa: C901, PLR0911, PLR0912 - match tp.name: + if tp.ident.module != Ident.builtin("").module: + return ValueDecl(value) + + match tp.ident.name: # Should match list in egraph bindings case "i64": return LitDecl(self.egraph.value_to_i64(value)) @@ -695,49 +703,58 @@ def value_to_expr(self, tp: JustTypeRef, value: bindings.Value) -> ExprDecl: # case "Unit": return LitDecl(None) case "PyObject": - return PyObjectDecl(self.egraph.value_to_pyobject(GLOBAL_PY_OBJECT_SORT, value)) + val = self.egraph.value_to_pyobject(value) + return PyObjectDecl(cloudpickle.dumps(val)) case "Rational": fraction = self.egraph.value_to_rational(value) return CallDecl( - InitRef("Rational"), + InitRef(Ident.builtin("Rational")), ( - TypedExprDecl(JustTypeRef("i64"), LitDecl(fraction.numerator)), - TypedExprDecl(JustTypeRef("i64"), LitDecl(fraction.denominator)), + TypedExprDecl(JustTypeRef(Ident.builtin("i64")), LitDecl(fraction.numerator)), + TypedExprDecl(JustTypeRef(Ident.builtin("i64")), LitDecl(fraction.denominator)), ), ) case "BigInt": i = self.egraph.value_to_bigint(value) return CallDecl( - ClassMethodRef("BigInt", "from_string"), - (TypedExprDecl(JustTypeRef("String"), LitDecl(str(i))),), + ClassMethodRef(Ident.builtin("BigInt"), "from_string"), + (TypedExprDecl(JustTypeRef(Ident.builtin("String")), LitDecl(str(i))),), ) case "BigRat": fraction = self.egraph.value_to_bigrat(value) return CallDecl( - InitRef("BigRat"), + InitRef(Ident.builtin("BigRat")), ( TypedExprDecl( - JustTypeRef("BigInt"), + JustTypeRef(Ident.builtin("BigInt")), CallDecl( - ClassMethodRef("BigInt", "from_string"), - (TypedExprDecl(JustTypeRef("String"), LitDecl(str(fraction.numerator))),), + ClassMethodRef(Ident.builtin("BigInt"), "from_string"), + ( + TypedExprDecl( + JustTypeRef(Ident.builtin("String")), LitDecl(str(fraction.numerator)) + ), + ), ), ), TypedExprDecl( - JustTypeRef("BigInt"), + JustTypeRef(Ident.builtin("BigInt")), CallDecl( - ClassMethodRef("BigInt", "from_string"), - (TypedExprDecl(JustTypeRef("String"), LitDecl(str(fraction.denominator))),), + ClassMethodRef(Ident.builtin("BigInt"), "from_string"), + ( + TypedExprDecl( + JustTypeRef(Ident.builtin("String")), LitDecl(str(fraction.denominator)) + ), + ), ), ), ), ) case "Map": k_tp, v_tp = tp.args - expr = CallDecl(ClassMethodRef("Map", "empty"), (), (k_tp, v_tp)) + expr = CallDecl(ClassMethodRef(Ident.builtin("Map"), "empty"), (), (k_tp, v_tp)) for k, v in self.egraph.value_to_map(value).items(): expr = CallDecl( - MethodRef("Map", "insert"), + MethodRef(Ident.builtin("Map"), "insert"), ( TypedExprDecl(tp, expr), TypedExprDecl(k_tp, self.value_to_expr(k_tp, k)), @@ -749,25 +766,32 @@ def value_to_expr(self, tp: JustTypeRef, value: bindings.Value) -> ExprDecl: # xs_ = self.egraph.value_to_set(value) (v_tp,) = tp.args return CallDecl( - InitRef("Set"), tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs_), (v_tp,) + InitRef(Ident.builtin("Set")), + tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs_), + (v_tp,), ) case "Vec": xs = self.egraph.value_to_vec(value) (v_tp,) = tp.args return CallDecl( - InitRef("Vec"), tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs), (v_tp,) + InitRef(Ident.builtin("Vec")), + tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs), + (v_tp,), ) case "MultiSet": xs = self.egraph.value_to_multiset(value) (v_tp,) = tp.args return CallDecl( - InitRef("MultiSet"), tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs), (v_tp,) + InitRef(Ident.builtin("MultiSet")), + tuple(TypedExprDecl(v_tp, self.value_to_expr(v_tp, x)) for x in xs), + (v_tp,), ) case "UnstableFn": _names, _args = self.egraph.value_to_function(value) return_tp, *arg_types = tp.args return self._unstable_fn_value_to_expr(_names, _args, return_tp, arg_types) - return ValueDecl(value) + case _: + raise NotImplementedError(f"Value to expr not implemented for type {tp.ident}") def _unstable_fn_value_to_expr( self, name: str, partial_args: list[bindings.Value], return_tp: JustTypeRef, _arg_types: list[JustTypeRef] @@ -778,7 +802,7 @@ def _unstable_fn_value_to_expr( signature = self.__egg_decls__.get_callable_decl(callable_ref).signature if not isinstance(signature, FunctionSignature): continue - if signature.semantic_return_type.name != return_tp.name: + if signature.semantic_return_type.ident != return_tp.ident: continue tcs = TypeConstraintSolver(self.__egg_decls__) @@ -837,10 +861,10 @@ def _generate_type_egg_name(ref: JustTypeRef) -> str: """ Generates an egg sort name for this type reference by linearizing the type. """ - name = ref.name + name = ref.ident if not ref.args: - return name - return f"{name}_{'_'.join(map(_generate_type_egg_name, ref.args))}" + return str(name) + return f"{name}[{','.join(map(_generate_type_egg_name, ref.args))}]" @dataclass @@ -870,18 +894,21 @@ def from_expr(self, tp: JustTypeRef, term: bindings._Term) -> TypedExprDecl: expr_decl = LitDecl(None if isinstance(value, bindings.Unit) else value.value) elif isinstance(term, bindings.TermApp): if term.name == "py-object": - call = self.termdag.term_to_expr(term, span()) - expr_decl = PyObjectDecl(GLOBAL_PY_OBJECT_SORT.load(call)) + (str_term,) = term.args + call = self.termdag.get(str_term) + assert isinstance(call, bindings.TermLit) + assert isinstance(call.value, bindings.String) + expr_decl = PyObjectDecl(standard_b64decode(call.value.value)) elif term.name == "unstable-fn": # Get function name fn_term, *arg_terms = term.args - fn_value = self.resolve_term(fn_term, JustTypeRef("String")) + fn_value = self.resolve_term(fn_term, JustTypeRef(Ident.builtin("String"))) assert isinstance(fn_value.expr, LitDecl) fn_name = fn_value.expr.value assert isinstance(fn_name, str) # Resolve what types the partially applied args are - assert tp.name == "UnstableFn" + assert tp.ident == Ident.builtin("UnstableFn") call_decl = self.from_call(tp.args[0], bindings.TermApp(fn_name, arg_terms)) expr_decl = PartialCallDecl(call_decl) else: @@ -915,8 +942,8 @@ def from_call( # Need OR in case we have class method whose class whas never added as a sort, which would happen # if the class method didn't return that type and no other function did. In this case, we don't need # to care about the type vars and we we don't need to bind any possible type. - possible_types = self.state._get_possible_types(callable_ref.class_name) or [None] - cls_name = callable_ref.class_name + possible_types = self.state._get_possible_types(callable_ref.ident) or [None] + cls_name = callable_ref.ident else: possible_types = [None] cls_name = None diff --git a/python/egglog/exp/any_expr.py b/python/egglog/exp/any_expr.py new file mode 100644 index 00000000..4de0d3ff --- /dev/null +++ b/python/egglog/exp/any_expr.py @@ -0,0 +1,947 @@ +""" +WIP + +An `AnyExpr`, which can be used to trace arbitrary expressions. + +Created from any Python object, it should forward any operations on it to the underlying Python object. + +This will only happen when it needs to be "materialized" however, through operations like `__bool__` or `__iter__`. + +Generally it will try to avoid materializing the underlying object, and instead just treat it as a black box. +""" +# mypy: disable-error-code="empty-body" + +from __future__ import annotations + +import contextlib +import math +import operator +from collections.abc import Iterator +from copy import copy +from functools import reduce +from typing import Any, TypeAlias + +from egglog import * +from egglog.exp.program_gen import * + + +class AnyExpr(Expr): + """ + Wraps an arbitrary Python object. + + Any operations on it will be forwarded to the underlying object when needed. + + Attempts to implement as many operations from https://docs.python.org/3/reference/datamodel.html as possible. + + Can be converted from any Python object: + + >>> AnyExpr(42) + 42 + AnyExpr(A(42) + A(42)) + + Will also convert tuples and lists item by item: + + >>> AnyExpr((1, 2,)) + (5, 6) + AnyExpr(append(append(A(()), A(1)), A(2)) + append(append(A(()), A(5)), A(6))) + """ + + def __init__(self, obj: ALike) -> None: ... + + __match_args__ = ("egglog_any_expr_value",) + + @method(preserve=True) # type: ignore[prop-decorator] + @property + def egglog_any_expr_value(self) -> A: + """ + Return the underlying Python object, if it was constructued with one. + + Long method name so it doesn't conflict with any user-defined properties. + + >>> AnyExpr(10).egglog_any_expr_value + A(10) + """ + match get_callable_args(self, AnyExpr): + case (A() as any_expr,): + return any_expr + raise ExprValueError(self, "AnyExpr") + + @method(preserve=True) + def __bytes__(self) -> bytes: + """ + >>> bytes(AnyExpr(b"hello")) + b'hello' + """ + return any_eval(bytes_(self)) + + @method(preserve=True) + def __bool__(self) -> bool: + """ + >>> bool(AnyExpr(True)) + True + >>> bool(AnyExpr(False)) + False + """ + return any_eval(bool_(self)) + + @method(preserve=True) + def __eq__(self, other: object) -> AnyExpr: # type: ignore[override] + """ + >>> bool(AnyExpr(1) == AnyExpr(1)) + True + >>> bool(AnyExpr(1) == AnyExpr(2)) + False + """ + return with_assert(self.egglog_any_expr_value == other) + + @method(preserve=True) + def __ne__(self, other: object) -> AnyExpr: # type: ignore[override] + """ + >>> bool(AnyExpr(1) != AnyExpr(2)) + True + >>> bool(AnyExpr(1) != AnyExpr(1)) + False + """ + return with_assert(self.egglog_any_expr_value != other) + + @method(preserve=True) + def __lt__(self, other: object) -> AnyExpr: + """ + >>> bool(AnyExpr(1) < AnyExpr(2)) + True + >>> bool(AnyExpr(2) < AnyExpr(1)) + False + """ + return with_assert(self.egglog_any_expr_value < other) + + @method(preserve=True) + def __le__(self, other: object) -> AnyExpr: + """ + >>> bool(AnyExpr(2) <= AnyExpr(2)) + True + >>> bool(AnyExpr(3) <= AnyExpr(2)) + False + """ + return with_assert(self.egglog_any_expr_value <= other) + + @method(preserve=True) + def __gt__(self, other: object) -> AnyExpr: + """ + >>> bool(AnyExpr(3) > AnyExpr(2)) + True + >>> bool(AnyExpr(2) > AnyExpr(3)) + False + """ + return with_assert(self.egglog_any_expr_value > other) + + @method(preserve=True) + def __ge__(self, other: object) -> AnyExpr: + """ + >>> bool(AnyExpr(3) >= AnyExpr(3)) + True + >>> bool(AnyExpr(2) >= AnyExpr(3)) + False + """ + return with_assert(self.egglog_any_expr_value >= other) + + @method(preserve=True) + def __hash__(self) -> int: + """ + Turn the underlying object into a hash. + + >>> hash(AnyExpr("hello")) == hash("hello") + True + """ + return hash(any_eval(self.egglog_any_expr_value)) + + @method(preserve=True) + def __getattr__(self, name: StringLike) -> AnyExpr | Any: + """ + Get an attribute of the underlying object. + + >>> int(AnyExpr([1, 2, 3]).index(2)) + 1 + + Also should work with hasattr: + >>> hasattr(AnyExpr([1, 2, 3]), "index") + True + >>> hasattr(AnyExpr([1, 2, 3]), "nonexistent") + False + """ + inner = self.egglog_any_expr_value + # Need to raise attribute error if it doesn't exist, since this is called for hasattr + if not any_eval(hasattr_(inner, name)): + raise AttributeError(f"{self} has no attribute {name}") + egraph = _get_current_egraph() + res = inner.__getattr__(name) + egraph.register(res) + egraph.run(any_expr_schedule) + if egraph.check_bool(getattr_eager(inner, name)): + return any_eval(res) + return with_assert(res) + + # TODO: Not working for now + # @method(mutates_self=True) + # def __setattr__(self, name: StringLike, value: object) -> None: + # """ + # Set an attribute of the underlying object. + + # >>> x = lambda: None + # >>> expr = AnyExpr(x) + # >>> expr.attr = 42 + # >>> int(expr.attr) + # 42 + # """ + + # TODO: delattr + # TODO: __get__/__set__? + + @method(preserve=True) + def __len__(self) -> int: + """ + Get the length of the underlying object. + + >>> len(AnyExpr([1, 2, 3])) + 3 + """ + return any_eval(len_(self)) + + @method(preserve=True) + def __call__(self, *args: object, **kwargs: object) -> AnyExpr: + """ + Call the underlying object. + + >>> int(AnyExpr(int)(42)) + 42 + >>> int(AnyExpr(lambda *x, **y: len(x) + len(y))(1, 2, a=3, b=4)) + 4 + """ + args_expr = A(()) + for a in args: + args_expr = append(args_expr, a) + kwargs_expr = A({}) + for k, v in kwargs.items(): + kwargs_expr = set_kwarg(kwargs_expr, k, v) + return with_assert(self.egglog_any_expr_value(args_expr, kwargs_expr)) + + @method(preserve=True) + def __getitem__(self, key: object) -> AnyExpr: + """ + Get an item from the underlying object. + + >>> int(AnyExpr([1, 2, 3])[1]) + 2 + """ + return with_assert(self.egglog_any_expr_value[key]) + + @method(preserve=True) + def __setitem__(self, key: object, value: object) -> None: + """ + Set an item in the underlying object. + + >>> x = [1, 2, 3] + >>> expr = AnyExpr(x) + >>> expr[1] = 42 + >>> int(expr[1]) + 42 + """ + any_expr_inner = self.egglog_any_expr_value + any_expr_inner[key] = value + self.__replace_expr__(AnyExpr(with_assert(any_expr_inner))) + + @method(preserve=True) + def __delitem__(self, key: object) -> None: + """ + Delete an item from the underlying object. + + >>> x = [1, 2, 3] + >>> expr = AnyExpr(x) + >>> del expr[1] + >>> len(expr) + 2 + """ + any_expr_inner = self.egglog_any_expr_value + del any_expr_inner[key] + self.__replace_expr__(AnyExpr(with_assert(any_expr_inner))) + + # TODO: support real iterators + @method(preserve=True) + def __iter__(self) -> Iterator[AnyExpr]: + """ + Iterate over the underlying object. + + >>> list(AnyExpr((1, 2))) + [AnyExpr(append(append(A(()), A(1)), A(2))[A(0)]), AnyExpr(append(append(A(()), A(1)), A(2))[A(1)])] + """ + return iter(self[i] for i in range(len(self))) + + # TODO: Not working for now + # @method(preserve=True) + # def __reversed__(self) -> Iterator[AnyExpr]: + # """ + # Reverse iterate over the underlying object. + + # >>> list(reversed(AnyExpr([1, 2, 3]))) + # [AnyExpr(3), AnyExpr(2), AnyExpr(1)] + # """ + # return map(AnyExpr, any_eval(reversed_op(self))) + + @method(preserve=True) + def __contains__(self, item: object) -> bool: + """ + Check if the underlying object contains an item. + + >>> class A: + ... def __contains__(self, item): + ... return item == 42 + >>> 42 in AnyExpr(A()) + True + >>> 2 in AnyExpr(A()) + False + """ + return any_eval(contains(self, item)) + + ## + # Emulating numeric types + # https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types + ## + + @method(preserve=True) + def __add__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(1) + 2) + 3 + """ + return with_assert(self.egglog_any_expr_value + other) + + @method(preserve=True) + def __sub__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(3) - 2) + 1 + """ + return with_assert(self.egglog_any_expr_value - other) + + @method(preserve=True) + def __mul__(self, other: object) -> AnyExpr: + """ + # >>> int(AnyExpr(3) * 2) + # 6 + >>> 4 * AnyExpr(3) + AnyExpr(A(4) * A(3)) + """ + return with_assert(self.egglog_any_expr_value * other) + + @method(preserve=True) + def __matmul__(self, other: object) -> AnyExpr: + """ + >>> class Matrix: + ... def __matmul__(self, other): + ... return 42 + >>> int(AnyExpr(Matrix()) @ Matrix()) + 42 + """ + return with_assert(self.egglog_any_expr_value @ other) + + @method(preserve=True) + def __truediv__(self, other: object) -> AnyExpr: + """ + >>> float(AnyExpr(3) / 2) + 1.5 + """ + return with_assert(self.egglog_any_expr_value / other) + + @method(preserve=True) + def __floordiv__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(3) // 2) + 1 + """ + return with_assert(self.egglog_any_expr_value // other) + + @method(preserve=True) + def __mod__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(3) % 2) + 1 + """ + return with_assert(self.egglog_any_expr_value % other) + + @method(preserve=True) + def __divmod__(self, other: object) -> AnyExpr: + """ + >>> div, mod = divmod(AnyExpr(3), 2) + >>> int(div) + 1 + >>> int(mod) + 1 + """ + return with_assert(divmod(self.egglog_any_expr_value, other)) + + # TODO: Support modulo + @method(preserve=True) + def __pow__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(3) ** 2) + 9 + """ + return with_assert(self.egglog_any_expr_value**other) + + @method(preserve=True) + def __lshift__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(1) << 2) + 4 + """ + return with_assert(self.egglog_any_expr_value << other) + + @method(preserve=True) + def __rshift__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(4) >> 2) + 1 + """ + return with_assert(self.egglog_any_expr_value >> other) + + @method(preserve=True) + def __and__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(6) & 3) + 2 + """ + return with_assert(self.egglog_any_expr_value & other) + + @method(preserve=True) + def __xor__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(6) ^ 3) + 5 + """ + return with_assert(self.egglog_any_expr_value ^ other) + + @method(preserve=True) + def __or__(self, other: object) -> AnyExpr: + """ + >>> int(AnyExpr(6) | 3) + 7 + """ + return with_assert(self.egglog_any_expr_value | other) + + @method(preserve=True) + def __neg__(self) -> AnyExpr: + """ + >>> int(-AnyExpr(3)) + -3 + """ + return with_assert(-self.egglog_any_expr_value) + + @method(preserve=True) + def __pos__(self) -> AnyExpr: + """ + >>> int(+AnyExpr(3)) + 3 + """ + return with_assert(+self.egglog_any_expr_value) + + @method(preserve=True) + def __abs__(self) -> AnyExpr: + """ + >>> int(abs(AnyExpr(-3))) + 3 + """ + return with_assert(abs(self.egglog_any_expr_value)) + + @method(preserve=True) + def __complex__(self) -> complex: + """ + >>> complex(AnyExpr(3+4j)) + (3+4j) + """ + return any_eval(complex_(self)) + + @method(preserve=True) + def __int__(self) -> int: + """ + >>> int(AnyExpr(42)) + 42 + """ + return any_eval(int_(self)) + + @method(preserve=True) + def __float__(self) -> float: + """ + >>> float(AnyExpr(3.14)) + 3.14 + """ + return any_eval(float_(self)) + + @method(preserve=True) + def __index__(self) -> int: + """ + >>> import operator + >>> operator.index(AnyExpr(42)) + 42 + """ + return any_eval(index(self)) + + # TODO: support ndigits with optional int + @method(preserve=True) + def __round__(self) -> AnyExpr: + """ + >>> int(round(AnyExpr(3.6))) + 4 + """ + return with_assert(round(self.egglog_any_expr_value)) + + @method(preserve=True) + def __trunc__(self) -> AnyExpr: + """ + >>> import math + >>> int(math.trunc(AnyExpr(3.6))) + 3 + """ + return with_assert(math.trunc(self.egglog_any_expr_value)) + + @method(preserve=True) + def __floor__(self) -> AnyExpr: + """ + >>> import math + >>> int(math.floor(AnyExpr(3.6))) + 3 + """ + return with_assert(math.floor(self.egglog_any_expr_value)) + + @method(preserve=True) + def __ceil__(self) -> AnyExpr: + """ + >>> import math + >>> int(math.ceil(AnyExpr(3.4))) + 4 + """ + return with_assert(math.ceil(self.egglog_any_expr_value)) + + # TODO: https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers + + +class A(Expr): + def __init__(self, obj: object) -> None: ... + + __match_args__ = ("egglog_any_expr_value",) + + @method(preserve=True) # type: ignore[prop-decorator] + @property + def egglog_any_expr_value(self) -> object: + """ + Return the underlying Python object, if it was constructued with one. + + Long method name so it doesn't conflict with any user-defined properties. + + >>> A(10).egglog_any_expr_value + 10 + """ + match get_callable_args(self, A): + case (PyObject(obj),): + return obj + raise ExprValueError(self, "A") + + def __eq__(self, other: ALike) -> A: ... # type: ignore[override] + def __ne__(self, other: ALike) -> A: ... # type: ignore[override] + def __lt__(self, other: ALike) -> A: ... + def __le__(self, other: ALike) -> A: ... + def __gt__(self, other: ALike) -> A: ... + def __ge__(self, other: ALike) -> A: ... + def __getattr__(self, name: StringLike) -> A: ... + def __call__(self, args: ALike = (), kwargs: ALike = {}) -> A: ... # noqa: B006 + def __getitem__(self, key: ALike) -> A: ... + def __setitem__(self, key: ALike, value: ALike) -> None: ... + def __delitem__(self, key: ALike) -> None: ... + def __add__(self, other: ALike) -> A: ... + def __sub__(self, other: ALike) -> A: ... + def __mul__(self, other: ALike) -> A: ... + def __matmul__(self, other: ALike) -> A: ... + def __truediv__(self, other: ALike) -> A: ... + def __floordiv__(self, other: ALike) -> A: ... + def __mod__(self, other: ALike) -> A: ... + def __divmod__(self, other: ALike) -> A: ... + def __pow__(self, other: ALike) -> A: ... + def __lshift__(self, other: ALike) -> A: ... + def __rshift__(self, other: ALike) -> A: ... + def __and__(self, other: ALike) -> A: ... + def __xor__(self, other: ALike) -> A: ... + def __or__(self, other: ALike) -> A: ... + def __neg__(self) -> A: ... + def __pos__(self) -> A: ... + def __abs__(self) -> A: ... + def __round__(self) -> A: ... + def __trunc__(self) -> A: ... + def __floor__(self) -> A: ... + def __ceil__(self) -> A: ... + + +converter(A, AnyExpr, AnyExpr) +converter(object, AnyExpr, lambda x: AnyExpr(A(PyObject(x)))) + +converter(AnyExpr, A, lambda a: a.egglog_any_expr_value, cost=10) +converter(PyObject, A, A, cost=10) +converter(object, A, lambda x: A(PyObject(x)), cost=10) + +ALike: TypeAlias = A | object + + +@function() +def given(expr: ALike, condition: ALike) -> A: ... +@function +def bytes_(expr: ALike) -> A: ... +@function +def bool_(expr: ALike) -> A: ... +@function +def hasattr_(expr: ALike, name: StringLike) -> A: ... +@function +def getattr_eager(expr: ALike, name: StringLike) -> Unit: + """ + Set if we should eagerly get the attribute. + """ + + +@function +def len_(expr: ALike) -> A: ... +@function +def append(expr: ALike, item: ALike) -> A: + """ + Appends an item to a tuple. + """ + + +@function +def set_kwarg(expr: ALike, key: StringLike, value: ALike) -> A: + """ + Sets a value in a dict with a string key + """ + + +@function +def contains(expr: ALike, item: ALike) -> A: ... +@function +def complex_(expr: ALike) -> A: ... +@function +def int_(expr: ALike) -> A: ... +@function +def float_(expr: ALike) -> A: ... +@function +def index(expr: ALike) -> A: ... +@function +def slice_(start: ALike = None, stop: ALike = None, step: ALike = None) -> A: ... +@function +def list_(expr: ALike) -> A: ... +@function +def not_(expr: ALike) -> A: ... +@function +def and_(left: ALike, right: ALike) -> A: ... + + +# Special case containers so that Any expressions inside +converter(tuple, A, lambda x: reduce(append, x, A(()))) +converter(list, A, lambda x: list_(tuple(x))) +converter(slice, A, lambda x: slice_(x.start, x.stop, x.step)) + + +@ruleset +def any_expr_ruleset(x: PyObject, y: PyObject, z: PyObject, s: String, a: A): + yield rewrite(bytes_(A(x))).to(A(PyObject(bytes)(x))) + yield rewrite(bool_(A(x))).to(A(PyObject(bool)(x))) + yield rewrite(A(x) == A(y)).to(A(PyObject(operator.eq)(x, y))) + yield rewrite(A(x) != A(y)).to(A(PyObject(operator.ne)(x, y))) + yield rewrite(A(x) < A(y)).to(A(PyObject(operator.lt)(x, y))) + yield rewrite(A(x) <= A(y)).to(A(PyObject(operator.le)(x, y))) + yield rewrite(A(x) > A(y)).to(A(PyObject(operator.gt)(x, y))) + yield rewrite(A(x) >= A(y)).to(A(PyObject(operator.ge)(x, y))) + yield rewrite(A(x).__getattr__(s)).to(A(PyObject(getattr)(x, PyObject.from_string(s)))) + yield rewrite(hasattr_(A(x), s)).to(A(PyObject(hasattr)(x, PyObject.from_string(s)))) + yield rewrite(len_(A(x))).to(A(PyObject(len)(x))) + yield rewrite(A(x)(y, z)).to(A(x.call_extended(y, z))) + yield rewrite(append(A(x), A(y))).to(A(PyObject(lambda t, v: (*t, v))(x, y))) + yield rewrite(set_kwarg(A(x), s, A(y))).to(A(PyObject(lambda d, k, v: {**d, k: v})(x, PyObject.from_string(s), y))) + yield rewrite(A(x)[A(y)]).to(A(PyObject(operator.getitem)(x, y))) + setitem_any = A(x) + setitem_any[A(y)] = A(z) + yield rewrite(setitem_any).to(A(PyObject(lambda obj, k, v: operator.setitem(obj, k, v) or obj)(x, y, z))) + delitem_any = A(x) + del delitem_any[A(y)] + yield rewrite(delitem_any).to(A(PyObject(lambda obj, k: operator.delitem(obj, k) or obj)(x, y))) + yield rewrite(contains(A(x), A(y))).to(A(PyObject(operator.contains)(x, y))) + yield rewrite(A(x) + A(y)).to(A(PyObject(operator.add)(x, y))) + yield rewrite(A(x) - A(y)).to(A(PyObject(operator.sub)(x, y))) + yield rewrite(A(x) * A(y)).to(A(PyObject(operator.mul)(x, y))) + yield rewrite(A(x) @ A(y)).to(A(PyObject(operator.matmul)(x, y))) + yield rewrite(A(x) / A(y)).to(A(PyObject(operator.truediv)(x, y))) + yield rewrite(A(x) // A(y)).to(A(PyObject(operator.floordiv)(x, y))) + yield rewrite(A(x) % A(y)).to(A(PyObject(operator.mod)(x, y))) + yield rewrite(divmod(A(x), A(y))).to(A(PyObject(divmod)(x, y))) + yield rewrite(A(x) ** A(y)).to(A(PyObject(operator.pow)(x, y))) + yield rewrite(A(x) << A(y)).to(A(PyObject(operator.lshift)(x, y))) + yield rewrite(A(x) >> A(y)).to(A(PyObject(operator.rshift)(x, y))) + yield rewrite(A(x) & A(y)).to(A(PyObject(operator.and_)(x, y))) + yield rewrite(A(x) ^ A(y)).to(A(PyObject(operator.xor)(x, y))) + yield rewrite(A(x) | A(y)).to(A(PyObject(operator.or_)(x, y))) + yield rewrite(-A(x)).to(A(PyObject(operator.neg)(x))) + yield rewrite(+A(x)).to(A(PyObject(operator.pos)(x))) + yield rewrite(abs(A(x))).to(A(PyObject(operator.abs)(x))) + yield rewrite(complex_(A(x))).to(A(PyObject(complex)(x))) + yield rewrite(int_(A(x))).to(A(PyObject(int)(x))) + yield rewrite(float_(A(x))).to(A(PyObject(float)(x))) + yield rewrite(index(A(x))).to(A(PyObject(operator.index)(x))) + yield rewrite(round(A(x))).to(A(PyObject(round)(x))) + yield rewrite(math.trunc(A(x))).to(A(PyObject(math.trunc)(x))) + yield rewrite(math.floor(A(x))).to(A(PyObject(math.floor)(x))) + yield rewrite(math.ceil(A(x))).to(A(PyObject(math.ceil)(x))) + yield rewrite(list_(A(x))).to(A(PyObject(list)(x))) + yield rewrite(slice_(A(x), A(y), A(z))).to(A(PyObject(slice)(x, y, z))) + + # Given + yield rewrite(given(A(x), a)).to(A(x)) + + +any_expr_schedule = any_expr_ruleset.saturate() + + +def any_eval(self: A) -> Any: + """ + Evaluate the AnyExpr to get its underlying Python value. + + Runs rules if it's not already resolved + """ + global _LAST_ASSERT + egraph = _get_current_egraph() + # 1. First see if it's already a primitive value + try: + return self.egglog_any_expr_value + except ExprValueError: + pass + # 2. If not, try to extract it from the egraph + expr = egraph.extract(self) + try: + res = expr.egglog_any_expr_value + except ExprValueError: + # 3. If that isn't one, then try running the schedule to extract it + egraph.register(expr) + egraph.run(any_expr_schedule) + expr = egraph.extract(expr) + res = expr.egglog_any_expr_value + # Don't save hasattr asserts + if get_callable_fn(self) != hasattr_: + # If we are calling bool_ same as just asserting vlaues + match get_callable_args(self, bool_): + case (A() as inner,): + self = inner + if eq(expr).to(A(True)): + asserted = self + _LAST_ASSERT = with_assert(self).egglog_any_expr_value + elif eq(expr).to(A(False)): + match get_callable_args(self, A.__eq__): + case (A() as left, A() as right): + asserted = left != right + case _: + match get_callable_args(self, A.__ne__): + case (A() as left, A() as right): + asserted = left == right + case _: + asserted = not_(self) + else: + asserted = self == expr + # _LAST_ASSERT = ( + # asserted if _LAST_ASSERT is None or eq(_LAST_ASSERT).to(asserted) else and_(_LAST_ASSERT, asserted) + # ) + _LAST_ASSERT = given(asserted, _LAST_ASSERT) if _LAST_ASSERT is not None else asserted + return res + + +_CURRENT_EGRAPH: None | EGraph = None +_LAST_ASSERT: None | A = None + + +@contextlib.contextmanager +def set_any_expr_egraph(egraph: EGraph) -> Iterator[None]: + """ + Context manager that will set the current egraph. It will be set back after. + """ + global _CURRENT_EGRAPH, _LAST_ASSERT + assert _CURRENT_EGRAPH is None + assert _LAST_ASSERT is None + _CURRENT_EGRAPH = egraph + try: + yield + finally: + _CURRENT_EGRAPH = None + _LAST_ASSERT = None + + +def _get_current_egraph() -> EGraph: + return _CURRENT_EGRAPH or EGraph() + + +def with_assert(expr: A) -> AnyExpr: + """ + Add all current asserts to the given expression. + + This is used to make sure that any_evaled expressions are consistent with + the current context. + """ + if _CURRENT_EGRAPH and _LAST_ASSERT is not None: # noqa: SIM108 + a = given(expr, _LAST_ASSERT) + # match get_callable_args(expr, given): + # case (A() as inner, A() as condition): + # a = expr if eq(condition).to(_LAST_ASSERT) else given(inner, and_(condition, _LAST_ASSERT)) + # case _: + + else: + a = expr + return AnyExpr(a) + + +@ruleset +def given_ruleset(x: A, y: A, z: A): + yield rewrite(not_(given(x, y)), subsume=True).to(given(not_(x), y)) + yield rewrite(given(given(x, y), z), subsume=True).to(given(x, and_(y, z))) + yield rewrite(and_(x, x), subsume=True).to(x) + + +@function +def any_expr_program(x: AnyExpr) -> Program: + r""" + Convert an AnyExpr to a Program. + + >>> any_expr_source(AnyExpr(42) == 10) + '(42 == 10)' + """ + + +@function +def a_program(x: A) -> Program: + """ + Convert an A to a Program. + """ + + +def w(p: Program) -> Program: + return Program("(") + p + ")" + + +def ca(p: ProgramLike, *args: ProgramLike) -> Program: + args_expr = Program("") + for a in args[:-1]: + args_expr += a + ", " + args_expr += args[-1] + return convert(p, Program) + Program("(") + args_expr + Program(")") + + +INLINE_TYPES = int, str, float, bytes, bool, type(None), tuple, dict + + +@ruleset +def any_program_ruleset(a: A, b: A, c: A, p: PyObject, s: String): + yield rewrite(any_expr_program(AnyExpr(a)), subsume=True).to(a_program(a)) + + yield rewrite(a_program(A(p)), subsume=True).to( + Program(PyObject(repr)(p).to_string()), + PyObject(lambda x: isinstance(x, INLINE_TYPES))(p).to_bool() == Bool(True), + ) + yield rewrite(a_program(A(p)), subsume=True).to( + Program(PyObject(repr)(p).to_string()).assign(), + PyObject(lambda x: isinstance(x, INLINE_TYPES))(p).to_bool() == Bool(False), + ) + yield rewrite(a_program(bytes_(a)), subsume=True).to(a_program(a) + ".bytes()") + yield rewrite(a_program(bool_(a)), subsume=True).to(ca("bool", a_program(a))) + yield rewrite(a_program(a == b), subsume=True).to(w(a_program(a) + " == " + a_program(b))) + yield rewrite(a_program(a != b), subsume=True).to(w(a_program(a) + " != " + a_program(b))) + yield rewrite(a_program(a < b), subsume=True).to(w(a_program(a) + " < " + a_program(b))) + yield rewrite(a_program(a <= b), subsume=True).to(w(a_program(a) + " <= " + a_program(b))) + yield rewrite(a_program(a > b), subsume=True).to(w(a_program(a) + " > " + a_program(b))) + yield rewrite(a_program(a >= b), subsume=True).to(w(a_program(a) + " >= " + a_program(b))) + yield rewrite(a_program(a.__getattr__(s)), subsume=True).to(a_program(a) + "." + s) + yield rewrite(a_program(hasattr_(a, s)), subsume=True).to( + ca("hasattr", a_program(a), PyObject(repr)(PyObject.from_string(s)).to_string()) + ) + yield rewrite(a_program(len_(a)), subsume=True).to(ca("len", a_program(a))) + yield rewrite(a_program(a(b, c)), subsume=True).to( + ca(a_program(a), "*" + a_program(b), "**" + a_program(c)).assign() + ) + yield rewrite(a_program(append(a, b)), subsume=True).to(ca("", "*" + a_program(a), a_program(b))) + yield rewrite(a_program(set_kwarg(a, s, b)), subsume=True).to( + "{**" + a_program(a) + ", " + PyObject(repr)(PyObject.from_string(s)).to_string() + ": " + a_program(b) + "}" + ) + yield rewrite(a_program(a[b]), subsume=True).to(a_program(a) + "[" + a_program(b) + "]") + assigned_a = a_program(a).assign() + setitem_a = copy(a) + setitem_a[b] = c + yield rewrite(a_program(setitem_a), subsume=True).to( + assigned_a.statement(assigned_a + "[" + a_program(b) + "] = " + a_program(c)) + ) + delitem_a = copy(a) + del delitem_a[b] + yield rewrite(a_program(delitem_a), subsume=True).to( + assigned_a.statement("del " + assigned_a + "[" + a_program(b) + "]") + ) + yield rewrite(a_program(contains(a, b)), subsume=True).to(w(a_program(a) + " in " + a_program(b))) + yield rewrite(a_program(a + b), subsume=True).to(w(a_program(a) + " + " + a_program(b))) + yield rewrite(a_program(a - b), subsume=True).to(w(a_program(a) + " - " + a_program(b))) + yield rewrite(a_program(a * b), subsume=True).to(w(a_program(a) + " * " + a_program(b))) + yield rewrite(a_program(a @ b), subsume=True).to(w(a_program(a) + " @ " + a_program(b))) + yield rewrite(a_program(a / b), subsume=True).to(w(a_program(a) + " / " + a_program(b))) + yield rewrite(a_program(a // b), subsume=True).to(w(a_program(a) + " // " + a_program(b))) + yield rewrite(a_program(a % b), subsume=True).to(w(a_program(a) + " % " + a_program(b))) + yield rewrite(a_program(divmod(a, b)), subsume=True).to(ca("divmod", a_program(a), a_program(b))) + yield rewrite(a_program(a**b), subsume=True).to(w(a_program(a) + " ** " + a_program(b))) + yield rewrite(a_program(a << b), subsume=True).to(w(a_program(a) + " << " + a_program(b))) + yield rewrite(a_program(a >> b), subsume=True).to(w(a_program(a) + " >> " + a_program(b))) + yield rewrite(a_program(a & b), subsume=True).to(w(a_program(a) + " & " + a_program(b))) + yield rewrite(a_program(a ^ b), subsume=True).to(w(a_program(a) + " ^ " + a_program(b))) + yield rewrite(a_program(a | b), subsume=True).to(w(a_program(a) + " | " + a_program(b))) + yield rewrite(a_program(-a), subsume=True).to("-" + a_program(a)) + yield rewrite(a_program(+a), subsume=True).to("+" + a_program(a)) + yield rewrite(a_program(abs(a)), subsume=True).to(ca("abs", a_program(a))) + yield rewrite(a_program(complex_(a)), subsume=True).to(ca("complex", a_program(a))) + yield rewrite(a_program(int_(a)), subsume=True).to(ca("int", a_program(a))) + yield rewrite(a_program(float_(a)), subsume=True).to(ca("float", a_program(a))) + yield rewrite(a_program(index(a)), subsume=True).to(ca("operator.index", a_program(a))) + yield rewrite(a_program(round(a)), subsume=True).to(ca("round", a_program(a))) + yield rewrite(a_program(math.trunc(a)), subsume=True).to(ca("math.trunc", a_program(a))) + yield rewrite(a_program(math.floor(a)), subsume=True).to(ca("math.floor", a_program(a))) + yield rewrite(a_program(math.ceil(a)), subsume=True).to(ca("math.ceil", a_program(a))) + yield rewrite(a_program(list_(a)), subsume=True).to(ca("list", a_program(a))) + yield rewrite(a_program(slice_(a, b, c)), subsume=True).to(ca("slice", a_program(a), a_program(b), a_program(c))) + + yield rewrite(a_program(not_(a)), subsume=True).to(w("not " + a_program(a))) + yield rewrite(a_program(and_(a, b)), subsume=True).to(w(a_program(a) + " and " + a_program(b))) + # # Given + yield rewrite(a_program(given(a, b)), subsume=True).to(a_program(a).statement("assert " + a_program(b))) + + +any_program_schedule = any_program_ruleset.saturate() + program_gen_ruleset.saturate() + + +def any_expr_source(x: AnyExpr) -> str: + x = x.egglog_any_expr_value + # print(x) + program = a_program(x) + # print("program", program) + egraph = EGraph() + # program = egraph.let("program", program) + egraph.register(program) + egraph.run(any_program_ruleset.saturate()) + res_program = egraph.extract(program) + egraph = EGraph() + egraph.register(res_program.compile()) + egraph.run(program_gen_ruleset.saturate()) + # print(egraph.extract(program)) + # while egraph.run(any_program_ruleset).updated: + # print(egraph.extract(program)) + # print("extracted", egraph.extract(program)) + # egraph.run(program_gen_ruleset.saturate()) + res = join(res_program.statements, res_program.expr) + return egraph.extract(res).value + # egraph.display() + # return black.format_str(str_res, mode=black.Mode()).strip() + + +x = AnyExpr([42]) + + +print(x[0] + 10) diff --git a/python/egglog/exp/any_expr_example.ipynb b/python/egglog/exp/any_expr_example.ipynb new file mode 100644 index 00000000..e65e757d --- /dev/null +++ b/python/egglog/exp/any_expr_example.ipynb @@ -0,0 +1,408 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "6005ea18", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "7d1e4a46", + "metadata": {}, + "source": [ + "WIP example of using `any_expr` to generate sklearn code\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "42cc576e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_0 = list((*(), 42))\n", + "del _0[0]\n", + "assert (list((*(), 42)) != 10)\n", + "assert (not (_0 == 1))\n", + "-_0\n" + ] + } + ], + "source": [ + "import os\n", + "\n", + "os.environ[\"SCIPY_ARRAY_API\"] = \"1\"\n", + "\n", + "from sklearn import set_config\n", + "from sklearn.datasets import make_classification\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", + "\n", + "from egglog import *\n", + "from egglog.exp import any_expr\n", + "from egglog.exp.any_expr import *\n", + "\n", + "set_config(array_api_dispatch=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a7d3e251", + "metadata": {}, + "outputs": [], + "source": [ + "@ruleset\n", + "def extra_rules(x: A, y: A, z: A, o: PyObject):\n", + " yield rewrite(x.__array_namespace__(y, z).__name__, subsume=True).to(A(__name__))\n", + "\n", + " # File ~/p/egg-smol-python/.venv/lib/python3.13/site-packages/sklearn/utils/_unique.py:72, in _cached_unique(y, xp)\n", + " # 63 \"\"\"Return the unique values of y.\n", + " # 64\n", + " # 65 Use the cached values from dtype.metadata if present.\n", + " # (...) 69 Call `attach_unique` to attach the unique values to y.\n", + " # 70 \"\"\"\n", + " # 71 try:\n", + " # ---> 72 if y.dtype.metadata is not None and \"unique\" in y.dtype.metadata:\n", + "\n", + " yield rule(eq(A(None)).to(x.dtype.metadata)).then(getattr_eager(x.dtype, \"metadata\"))\n", + "\n", + " # File ~/p/egg-smol-python/.venv/lib/python3.13/site-packages/sklearn/utils/validation.py:1093, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_writeable, force_all_finite, ensure_all_finite, ensure_non_negative, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)\n", + " # 1085 msg = (\n", + " # 1086 f\"Expected 2D array, got 1D array instead:\\narray={array}.\\n\"\n", + " # 1087 \"Reshape your data either using array.reshape(-1, 1) if \"\n", + " # 1088 \"your data has a single feature or array.reshape(1, -1) \"\n", + " # 1089 \"if it contains a single sample.\"\n", + " # 1090 )\n", + " # 1091 raise ValueError(msg)\n", + " # -> 1093 if dtype_numeric and hasattr(array.dtype, \"kind\") and array.dtype.kind in \"USV\":\n", + " # 1094 raise ValueError(\n", + " # 1095 \"dtype='numeric' is not compatible with arrays of bytes/strings.\"\n", + " # 1096 \"Convert your data to numeric values explicitly instead.\"\n", + " # 1097 )\n", + " # 1098 if not allow_nd and array.ndim >= 3:\n", + "\n", + " # TypeError: 'in ' requires string as left operand, not RuntimeExpr\n", + " # Eagerly eval kind on dtype attribute\n", + " yield rule(x.dtype.kind).then(getattr_eager(x.dtype, \"kind\"))\n", + "\n", + "\n", + "any_expr.any_expr_schedule = (extra_rules.saturate() + any_expr_ruleset).saturate()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "6080fd28", + "metadata": {}, + "outputs": [], + "source": [ + "lda = LinearDiscriminantAnalysis()\n", + "X_np, y_np = make_classification(random_state=0)\n", + "\n", + "egraph = EGraph()\n", + "with set_any_expr_egraph(egraph):\n", + " x = lda.fit_transform(AnyExpr(X_np), AnyExpr(y_np))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c408cfcc", + "metadata": {}, + "outputs": [], + "source": [ + "# print(str(x))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "cd520b07", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "_0 = array([[-0.03926799, 0.13191176, -0.21120598, ..., 1.97698901,\n", + " 1.02122474, -0.46931074],\n", + " [ 0.77416061, 0.10490717, -0.33281176, ..., 1.2678044 ,\n", + " 0.62251914, -1.49026539],\n", + " [-0.0148577 , 0.67057045, -0.21416666, ..., -0.10486202,\n", + " -0.10169727, -0.45130304],\n", + " ...,\n", + " [ 0.29673317, -0.49610233, -0.86404499, ..., -1.10453952,\n", + " 2.01406015, 0.69042902],\n", + " [ 0.08617684, 0.9836362 , 0.17124355, ..., 2.11564734,\n", + " 0.11273794, 1.20985013],\n", + " [-1.58249448, -1.42279491, -0.56430103, ..., 1.26661394,\n", + " -1.31771734, 1.61805427]], shape=(100, 20))\n", + "_1 = array([0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,\n", + " 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0,\n", + " 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1,\n", + " 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,\n", + " 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0])\n", + "_2 = _0.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "_3 = \n", + "assert (_2 == _3)\n", + "assert (not (_2.__name__ == 'array_api_strict'))\n", + "_4 = _0.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_4 == _3)\n", + "assert (not (_4.__name__ == 'array_api_strict'))\n", + "assert (_2.float64 == _0.dtype)\n", + "assert (_2.float64 == _0.dtype)\n", + "assert (_4.__name__ == '__main__')\n", + "_5 = _4.asarray(*(*(), _0), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "assert (_5.dtype.kind == 'f')\n", + "assert (_5.dtype.kind == 'f')\n", + "assert (not (_5.ndim == 0))\n", + "assert (not (_5.ndim == 1))\n", + "assert (not (_5.ndim >= 3))\n", + "_6 = _5.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_6 == _3)\n", + "assert (not (_6.__name__ == 'array_api_strict'))\n", + "_7 = _6.asarray(*(*(), _5), **{})\n", + "_8 = _6.isdtype(*(*(*(), _7.dtype), (*(*(), 'real floating'), 'complex floating')), **{})\n", + "assert _8\n", + "assert _8\n", + "_9 = _6.sum(*(*(), _7), **{})\n", + "_10 = _6.isfinite(*(*(), _9), **{})\n", + "assert _10\n", + "assert _10\n", + "assert (len(_5.shape) == 2)\n", + "assert (len(_5) == 100)\n", + "assert (_5.ndim == 2)\n", + "assert (_5.ndim == 2)\n", + "assert (not (_5.shape[1] < 1))\n", + "_11 = _1.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_11 == _3)\n", + "assert (not (_11.__name__ == 'array_api_strict'))\n", + "_12 = _1.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_12 == _3)\n", + "assert (not (_12.__name__ == 'array_api_strict'))\n", + "assert (_12.__name__ == '__main__')\n", + "_13 = _12.asarray(*(*(), _1), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "assert (_13.dtype.kind == 'i')\n", + "assert (_13.dtype.kind == 'i')\n", + "assert (not (_13.ndim >= 3))\n", + "assert (not (_13.ndim == 2))\n", + "assert (len(_13.shape) == 1)\n", + "assert (_11.__name__ == '__main__')\n", + "_14 = _11.reshape(*(*(*(), _13), (*(), -1)), **{})\n", + "_15 = _11.asarray(*(*(), _14), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "_16 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_16 == _3)\n", + "assert (not (_16.__name__ == 'array_api_strict'))\n", + "_17 = _16.asarray(*(*(), _15), **{})\n", + "_18 = _16.isdtype(*(*(*(), _17.dtype), (*(*(), 'real floating'), 'complex floating')), **{})\n", + "assert (not _18)\n", + "assert (_15.dtype.kind == 'i')\n", + "assert (_15.dtype.kind == 'i')\n", + "assert (len(_5.shape) == 2)\n", + "assert (len(_5) == 100)\n", + "assert (len(_15.shape) == 1)\n", + "assert (len(_15) == 100)\n", + "assert (len(_5.shape) == 2)\n", + "_19 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_19 == _3)\n", + "assert (not (_19.__name__ == 'array_api_strict'))\n", + "_20 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_20 == _3)\n", + "assert (not (_20.__name__ == 'array_api_strict'))\n", + "_21 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_21 == _3)\n", + "assert (not (_21.__name__ == 'array_api_strict'))\n", + "_22 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_22 == _3)\n", + "assert (not (_22.__name__ == 'array_api_strict'))\n", + "assert (_22.__name__ == '__main__')\n", + "_23 = _22.asarray(*(*(), _15), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "assert (_23.dtype.kind == 'i')\n", + "assert (_23.dtype.kind == 'i')\n", + "assert (not (_23.ndim == 2))\n", + "_24 = _15.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_24 == _3)\n", + "assert (not (_24.__name__ == 'array_api_strict'))\n", + "assert (_24.__name__ == '__main__')\n", + "_25 = _24.asarray(*(*(), _15), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "assert (_25.dtype.kind == 'i')\n", + "assert (_25.dtype.kind == 'i')\n", + "assert (_25.ndim == 1)\n", + "assert (_25.ndim == 1)\n", + "assert (len(_25.shape) == 1)\n", + "assert _25.shape[0]\n", + "assert _25.shape[0]\n", + "_26 = \n", + "assert (not (_25.dtype == _26))\n", + "assert (not (_25.ndim == 2))\n", + "_27 = _20.isdtype(*(*(*(), _25.dtype), 'real floating'), **{})\n", + "assert (not _27)\n", + "assert (_25.dtype.metadata == None)\n", + "_28 = _25.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_28 == _3)\n", + "assert (not (_28.__name__ == 'array_api_strict'))\n", + "_29 = _28.unique_values(*(*(), _25), **{})\n", + "assert (_25.shape[0] > 20)\n", + "assert (_25.shape[0] > 20)\n", + "assert (_25.shape[0] > _29.shape[0])\n", + "assert (_25.shape[0] > _29.shape[0])\n", + "assert (not (_29.shape[0] > round((0.5 * _25.shape[0]))))\n", + "assert (not (_29.shape[0] > 2))\n", + "assert (not (_25.ndim == 2))\n", + "_30 = _19.asarray(*(*(), _15), **{})\n", + "assert (_30.dtype.metadata == None)\n", + "_31 = _19.unique_values(*(*(), _30), **{})\n", + "_32 = _19.concat(*(*(), list((*(), _31))), **{})\n", + "_33 = _19.unique_values(*(*(), _32), **{})\n", + "assert (len(_5.shape) == 2)\n", + "assert (not (_5.shape[0] == _33.shape[0]))\n", + "_34 = _2.unique_counts(*(*(), _15), **{})\n", + "assert (len(_34) == 2)\n", + "assert (float(_15.shape[0]) == 100.0)\n", + "_35 = _2.astype(*(*(*(), _34[1]), _5.dtype), **{})\n", + "_36 = _2.any(*(*(), ((_35 / 100.0) < 0)), **{})\n", + "assert (not _36)\n", + "_37 = _2.sum(*(*(), (_35 / 100.0)), **{})\n", + "_38 = _2.abs(*(*(), (_37 - 1.0)), **{})\n", + "assert (not (_38 > 1e-05))\n", + "assert (not (_5.shape[1] < (_33.shape[0] - 1)))\n", + "_39 = _5.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_39 == _3)\n", + "assert (not (_39.__name__ == 'array_api_strict'))\n", + "assert (len(_5.shape) == 2)\n", + "_40 = _5.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_40 == _3)\n", + "assert (not (_40.__name__ == 'array_api_strict'))\n", + "_41 = _40.unique_inverse(*(*(), _15), **{})\n", + "assert (len(_41) == 2)\n", + "assert (operator.index(_41[0].shape[0]) == 2)\n", + "assert (len(_33) == 2)\n", + "_42 = _39.asarray(*(*(), (1.0 / (_5.shape[0] - _33.shape[0]))), **{**{**{}, 'dtype': _5.dtype}, 'device': _5.device})\n", + "_43 = _39.sqrt(*(*(), _42), **{})\n", + "_44 = _40.zeros(*(*(), (*(*(), _41[0].shape[0]), _5.shape[1])), **{**{**{}, 'device': _5.device}, 'dtype': _5.dtype})\n", + "_45 = _40.mean(*(*(), _5[(_41[1] == 0)]), **{**{}, 'axis': 0})\n", + "_44[(*(*(), 0), slice(None, None, None))] = _45\n", + "_46 = _40.mean(*(*(), _5[(_41[1] == 1)]), **{**{}, 'axis': 0})\n", + "_44[(*(*(), 1), slice(None, None, None))] = _46\n", + "_47 = _39.concat(*(*(), list((*(*(), (_5[(_15 == _33[0])] - _44[(*(*(), 0), slice(None, None, None))])), (_5[(_15 == _33[1])] - _44[(*(*(), 1), slice(None, None, None))])))), **{**{}, 'axis': 0})\n", + "_48 = _39.std(*(*(), _47), **{**{}, 'axis': 0})\n", + "_48[(_48 == 0)] = 1.0\n", + "_49 = _39.linalg.svd(*(*(), (_43 * (_47 / _48))), **{**{}, 'full_matrices': False})\n", + "assert (len(_49) == 3)\n", + "assert (not (_33.shape[0] == 1))\n", + "_50 = _39.sqrt(*(*(), ((_5.shape[0] * (_35 / 100.0)) * (1.0 / (_33.shape[0] - 1)))), **{})\n", + "_51 = _39.astype(*(*(*(), (_49[1] > 0.0001)), _39.int32), **{})\n", + "_52 = _39.sum(*(*(), _51), **{})\n", + "_53 = _39.linalg.svd(*(*(), ((_50 * (_44 - ((_35 / 100.0) @ _44)).T).T @ ((_49[2][(*(*(), slice(None, _52, None)), slice(None, None, None))] / _48).T / _49[1][slice(None, _52, None)]))), **{**{}, 'full_matrices': False})\n", + "assert (len(_53) == 3)\n", + "assert (not ((_33.shape[0] - 1) == 0))\n", + "assert (len(_33.shape) == 1)\n", + "assert ((1 * _33.shape[0]) == 2)\n", + "assert ((1 * _33.shape[0]) == 2)\n", + "_54 = _0.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_54 == _3)\n", + "assert (not (_54.__name__ == 'array_api_strict'))\n", + "_55 = _0.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_55 == _3)\n", + "assert (not (_55.__name__ == 'array_api_strict'))\n", + "assert (_0.dtype.kind == 'f')\n", + "assert (_0.dtype.kind == 'f')\n", + "assert (_55.__name__ == '__main__')\n", + "_56 = _55.asarray(*(*(), _0), **{**{**{**{}, 'dtype': None}, 'copy': None}, 'device': None})\n", + "assert (_56.dtype.kind == 'f')\n", + "assert (_56.dtype.kind == 'f')\n", + "assert (not (_56.ndim == 0))\n", + "assert (not (_56.ndim == 1))\n", + "assert (_56.dtype.kind == 'f')\n", + "assert (_56.dtype.kind == 'f')\n", + "assert (not (_56.ndim >= 3))\n", + "_57 = _56.__array_namespace__(*(), **{**{}, 'api_version': None})\n", + "assert (_57 == _3)\n", + "assert (not (_57.__name__ == 'array_api_strict'))\n", + "_58 = _57.asarray(*(*(), _56), **{})\n", + "_59 = _57.isdtype(*(*(*(), _58.dtype), (*(*(), 'real floating'), 'complex floating')), **{})\n", + "assert _59\n", + "assert _59\n", + "_60 = _57.sum(*(*(), _58), **{})\n", + "_61 = _57.isfinite(*(*(), _60), **{})\n", + "assert _61\n", + "assert _61\n", + "assert (len(_56.shape) == 2)\n", + "assert (len(_56) == 100)\n", + "assert (_56.ndim == 2)\n", + "assert (_56.ndim == 2)\n", + "assert (not (_56.shape[1] < 1))\n", + "assert (len(_0.shape) == 2)\n", + "assert (not (_0.shape[1] != _5.shape[1]))\n", + "_62 = _39.astype(*(*(*(), (_53[1] > (0.0001 * _53[1][0]))), _39.int32), **{})\n", + "_63 = _39.sum(*(*(), _62), **{})\n", + "((_56 - ((_35 / 100.0) @ _44)) @ (((_49[2][(*(*(), slice(None, _52, None)), slice(None, None, None))] / _48).T / _49[1][slice(None, _52, None)]) @ _53[2].T[(*(*(), slice(None, None, None)), slice(None, _63, None))]))[(*(*(), slice(None, None, None)), slice(None, (_33.shape[0] - 1), None))]\n" + ] + } + ], + "source": [ + "print(any_expr_source(x))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "664abeee", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The history saving thread hit an unexpected error (OperationalError('attempt to write a readonly database')).History will not be written to the database.\n" + ] + } + ], + "source": [ + "# egraph = EGraph()\n", + "# # x = given(given(10, 100), 1000)\n", + "# egraph.register(x)\n", + "# egraph.run(given_ruleset.saturate())\n", + "# # egraph.display()\n", + "# print(str(egraph.extract(x))) # $, cost_model=greedy_dag_cost_model())))\n", + "\n", + "# a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b94d88c7", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "egglog", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/python/egglog/exp/array_api.py b/python/egglog/exp/array_api.py index 3eca6b9a..b69d8212 100644 --- a/python/egglog/exp/array_api.py +++ b/python/egglog/exp/array_api.py @@ -69,7 +69,6 @@ from egglog import * from egglog.runtime import RuntimeExpr -from egglog.version_compat import add_note from .program_gen import * @@ -729,7 +728,7 @@ def __eq__(self, other: DType) -> Boolean: # type: ignore[override] _DTYPES = [float64, float32, int32, int64, DType.object] converter(type, DType, lambda x: convert(np.dtype(x), DType)) -converter(type(np.dtype), DType, lambda x: getattr(DType, x.name)) # type:ignore[call-overload] +converter(np.dtype, DType, lambda x: getattr(DType, x.name)) @array_api_ruleset.register @@ -2015,5 +2014,6 @@ def try_evaling(egraph: EGraph, schedule: Schedule, expr: Expr, prim_expr: Built extracted = egraph.extract(prim_expr) except BaseException as e: # egraph.display(n_inline_leaves=1, split_primitive_outputs=True) - raise add_note(f"Cannot evaluate {egraph.extract(expr)}", e) # noqa: B904 + e.add_note(f"Cannot evaluate {egraph.extract(expr)}") + raise return extracted.value # type: ignore[attr-defined] diff --git a/python/egglog/exp/program_gen.py b/python/egglog/exp/program_gen.py index 933ec256..eb5a2480 100644 --- a/python/egglog/exp/program_gen.py +++ b/python/egglog/exp/program_gen.py @@ -27,6 +27,8 @@ def __add__(self, other: ProgramLike) -> Program: Concats the strings of the two expressions and also the statements. """ + def __radd__(self, other: ProgramLike) -> Program: ... + @method(unextractable=True) def statement(self, statement: ProgramLike) -> Program: """ diff --git a/python/egglog/pretty.py b/python/egglog/pretty.py index a2eeeed4..556d629e 100644 --- a/python/egglog/pretty.py +++ b/python/egglog/pretty.py @@ -4,12 +4,13 @@ from __future__ import annotations +import ast from collections import Counter, defaultdict from dataclasses import dataclass, field -from typing import TYPE_CHECKING, TypeAlias +from typing import TYPE_CHECKING, TypeAlias, assert_never import black -from typing_extensions import assert_never +import cloudpickle from .declarations import * @@ -67,13 +68,21 @@ "__invert__": "~", } +NAMED_UNARY_METHODS = { + "__abs__": "abs", + "__round__": "round", + "__trunc__": "trunc", + "__floor__": "floor", + "__ceil__": "ceil", +} + AllDecls: TypeAlias = ( RulesetDecl | CombinedRulesetDecl | CommandDecl | ActionDecl | FactDecl | ExprDecl | ScheduleDecl | BackOffDecl ) def pretty_decl( - decls: Declarations, decl: AllDecls, *, wrapping_fn: str | None = None, ruleset_name: str | None = None + decls: Declarations, decl: AllDecls, *, wrapping_fn: str | None = None, ruleset_ident: Ident | None = None ) -> str: """ Pretty print a decleration. @@ -83,7 +92,7 @@ def pretty_decl( traverse = TraverseContext(decls) traverse(decl, toplevel=True) pretty = traverse.pretty() - expr = pretty(decl, ruleset_name=ruleset_name) + expr = pretty(decl, ruleset_ident=ruleset_ident) if wrapping_fn: expr = f"{wrapping_fn}({expr})" program = "\n".join([*pretty.statements, expr]) @@ -238,11 +247,11 @@ class PrettyContext: _gen_name_types: dict[str, int] = field(default_factory=lambda: defaultdict(lambda: 0)) def __call__( - self, decl: AllDecls, *, unwrap_lit: bool = False, parens: bool = False, ruleset_name: str | None = None + self, decl: AllDecls, *, unwrap_lit: bool = False, parens: bool = False, ruleset_ident: Ident | None = None ) -> str: if decl in self.names: return self.names[decl] - expr, tp_name = self.uncached(decl, unwrap_lit=unwrap_lit, parens=parens, ruleset_name=ruleset_name) + expr, tp_name = self.uncached(decl, unwrap_lit=unwrap_lit, parens=parens, ruleset_ident=ruleset_ident) # We use a heuristic to decide whether to name this sub-expression as a variable # The rough goal is to reduce the number of newlines, given our line length of ~180 # We determine it's worth making a new line for this expression if the total characters @@ -258,7 +267,9 @@ def __call__( return expr_name return expr - def uncached(self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_name: str | None) -> tuple[str, str]: # noqa: C901, PLR0911, PLR0912 + def uncached( # noqa: C901, PLR0911, PLR0912 + self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_ident: Ident | None + ) -> tuple[str, str]: """ Returns a tuple of a string value of the decleration and the "type" to use when create a memoized cached version for de-duplication. @@ -283,8 +294,13 @@ def uncached(self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_na return self._call(decl, parens) case PartialCallDecl(CallDecl(ref, typed_args, _)): return self._pretty_partial(ref, [a.expr for a in typed_args], parens), "fn" - case PyObjectDecl(value): - return repr(value) if unwrap_lit else f"PyObject({value!r})", "PyObject" + case PyObjectDecl(pickled): + value = cloudpickle.loads(pickled) + value_str = repr(value) + if not is_valid_python_expr(value_str): + # If this isn't a valid python expr, represent as string + value_str = f"eval({value_str!r})" + return value_str if unwrap_lit else f"PyObject({value_str})", "PyObject" case ActionCommandDecl(action): return self(action), "action" case RewriteDecl(_, lhs, rhs, conditions) | BiRewriteDecl(_, lhs, rhs, conditions): @@ -316,14 +332,15 @@ def uncached(self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_na case EqDecl(_, left, right): return f"eq({self(left)}).to({self(right)})", "fact" case RulesetDecl(rules): - if ruleset_name: - return f"ruleset(name={ruleset_name!r})", f"ruleset_{ruleset_name}" + if ruleset_ident: + return f"ruleset(name={ruleset_ident.name!r})", f"ruleset_{ruleset_ident.name}" args = ", ".join(self(r) for r in rules if not isinstance(r, DefaultRewriteDecl)) return f"ruleset({args})", "ruleset" case CombinedRulesetDecl(rulesets): - if ruleset_name: - rulesets = (*rulesets, f"name={ruleset_name!r})") - return f"unstable_combine_rulesets({', '.join(rulesets)})", "combined_ruleset" + list_args = [r.name for r in rulesets] + if ruleset_ident: + list_args.append(f"name={ruleset_ident.name!r})") + return (f"unstable_combine_rulesets({', '.join(list_args)})", "combined_ruleset") case SaturateDecl(schedule): return f"{self(schedule, parens=True)}.saturate()", "schedule" case RepeatDecl(schedule, times): @@ -335,9 +352,9 @@ def uncached(self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_na return f"seq({args})", "schedule" case LetSchedulerDecl(scheduler, schedule): return f"{self(scheduler, parens=True)}.scope({self(schedule, parens=True)})", "schedule" - case RunDecl(ruleset_name, until, scheduler): - ruleset = self.decls._rulesets[ruleset_name] - ruleset_str = self(ruleset, ruleset_name=ruleset_name) + case RunDecl(ruleset_ident, until, scheduler): + ruleset = self.decls._rulesets[ruleset_ident] + ruleset_str = self(ruleset, ruleset_ident=ruleset_ident) if not until and not scheduler: return ruleset_str, "schedule" arg_lst = list(map(self, until or [])) @@ -348,7 +365,7 @@ def uncached(self, decl: AllDecls, *, unwrap_lit: bool, parens: bool, ruleset_na msg = "default rewrites should not be pretty printed" raise TypeError(msg) case BackOffDecl(_, match_limit, ban_length): - list_args: list[str] = [] + list_args = [] if match_limit is not None: list_args.append(f"match_limit={match_limit}") if ban_length is not None: @@ -373,7 +390,7 @@ def _call( args = [a.expr for a in decl.args] ref = decl.callable # Special case != - if decl.callable == FunctionRef("!="): + if decl.callable == FunctionRef(Ident.builtin("!=")): l, r = self(args[0]), self(args[1]) return f"ne({l}).to({r})", "Unit" signature = self.decls.get_callable_decl(ref).signature @@ -393,10 +410,10 @@ def _call( # If this is a function application, the type is the first type arg of the function object if signature == "fn-app": - tp_name = decl.args[0].tp.args[0].name + tp_name = decl.args[0].tp.args[0].ident.name else: assert isinstance(signature, FunctionSignature) - tp_name = signature.semantic_return_type.name + tp_name = signature.semantic_return_type.ident.name if isinstance(signature, FunctionSignature) and signature.mutates: first_arg = args[0] expr_str = self(first_arg) @@ -430,7 +447,7 @@ def _call_inner( # noqa: C901, PLR0911, PLR0912 Pretty print the call, returning either the full function call or a tuple of the function and the args. """ match ref: - case FunctionRef(name): + case FunctionRef(Ident(name)): return name, args case ClassMethodRef(class_name, method_name): tp_ref = JustTypeRef(class_name, bound_tp_params or ()) @@ -454,13 +471,15 @@ def _call_inner( # noqa: C901, PLR0911, PLR0912 return f"del {slf}[{self(args[0], unwrap_lit=True)}]" case "__setitem__": return f"{slf}[{self(args[0], unwrap_lit=True)}] = {self(args[1], unwrap_lit=True)}" - case "__round__": - return "round", [non_str_slf, *args] + case _ if method_name in NAMED_UNARY_METHODS: + return NAMED_UNARY_METHODS[method_name], [non_str_slf, *args] + case "__getattr__" if isinstance(args[0], LitDecl) and isinstance(args[0].value, str): + return f"{slf}.{args[0].value}" case _: return f"{slf}.{method_name}", args - case ConstantRef(name): + case ConstantRef(Ident(name)): return name - case ClassVariableRef(class_name, variable_name): + case ClassVariableRef(Ident(class_name), variable_name): return f"{class_name}.{variable_name}" case PropertyRef(_class_name, property_name): return f"{self(args[0], parens=True)}.{property_name}" @@ -495,18 +514,18 @@ def _pretty_partial(self, ref: CallableRef, args: list[ExprDecl], parens: bool) Returns a partial function call as a string. """ match ref: - case FunctionRef(name): + case FunctionRef(Ident(name)): fn = name case UnnamedFunctionRef(): res = self._pretty_function_body(ref, args) return f"({res})" if parens else res case ( - ClassMethodRef(class_name, method_name) - | MethodRef(class_name, method_name) - | PropertyRef(class_name, method_name) + ClassMethodRef(Ident(class_name), method_name) + | MethodRef(Ident(class_name), method_name) + | PropertyRef(Ident(class_name), method_name) ): fn = f"{class_name}.{method_name}" - case InitRef(class_name): + case InitRef(Ident(class_name)): fn = class_name case ConstantRef(_): msg = "Constants should not be callable" @@ -537,3 +556,11 @@ def _pretty_function_body(self, fn: UnnamedFunctionRef, args: list[ExprDecl]) -> if arg_names: prefix += f" {', '.join(self(a.expr) for a in arg_names)}" return f"{prefix}: {self(res.expr)}" + + +def is_valid_python_expr(s: str) -> bool: + try: + ast.parse(s, mode="eval") + except SyntaxError: + return False + return True diff --git a/python/egglog/runtime.py b/python/egglog/runtime.py index a53aa260..56f68ea7 100644 --- a/python/egglog/runtime.py +++ b/python/egglog/runtime.py @@ -18,22 +18,23 @@ from dataclasses import InitVar, dataclass, replace from inspect import Parameter, Signature from itertools import zip_longest -from typing import TYPE_CHECKING, Any, TypeVar, Union, cast, get_args, get_origin +from typing import TYPE_CHECKING, Any, TypeVar, Union, assert_never, cast, get_args, get_origin -from typing_extensions import assert_never +import cloudpickle from .declarations import * from .pretty import * from .thunk import Thunk from .type_constraint_solver import * -from .version_compat import * if TYPE_CHECKING: from collections.abc import Iterable __all__ = [ - "LIT_CLASS_NAMES", + "ALWAYS_MUTATES_SELF", + "ALWAYS_PRESERVED", + "LIT_IDENTS", "NUMERIC_BINARY_METHODS", "RuntimeClass", "RuntimeExpr", @@ -46,9 +47,9 @@ ] -UNIT_CLASS_NAME = "Unit" -UNARY_LIT_CLASS_NAMES = {"i64", "f64", "Bool", "String"} -LIT_CLASS_NAMES = UNARY_LIT_CLASS_NAMES | {UNIT_CLASS_NAME, "PyObject"} +UNIT_IDENT = Ident.builtin("Unit") +UNARY_LIT_IDENTS = {Ident.builtin("i64"), Ident.builtin("f64"), Ident.builtin("Bool"), Ident.builtin("String")} +LIT_IDENTS = UNARY_LIT_IDENTS | {UNIT_IDENT, Ident.builtin("PyObject")} # All methods which should return NotImplemented if they fail to resolve and are reflected as well # From https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types @@ -75,24 +76,59 @@ } -# Methods that need to be defined on the runtime type that holds `Expr` objects, so that they can be used as methods. +# special methods that return none and mutate self +ALWAYS_MUTATES_SELF = { + "__setitem__", + "__delitem__", + # "__setattr__", +} -TYPE_DEFINED_METHODS = { +# special methods which must return real python values instead of lazy expressions +ALWAYS_PRESERVED = { + "__bytes__", + # "__format__", + "__hash__", "__bool__", "__len__", + "__length_hint__", + "__iter__", + "__reversed__", + "__contains__", + "__index__", + "__buffer__", "__complex__", "__int__", "__float__", - "__iter__", - "__index__", + "__str__", + "__repr__", +} + +# Methods that need to be defined on the runtime type that holds `Expr` objects, so that they can be used as methods. + +TYPE_DEFINED_METHODS = { "__call__", "__getitem__", - "__setitem__", - "__delitem__", "__pos__", "__neg__", "__invert__", "__round__", + "__abs__", + "__trunc__", + "__floor__", + "__ceil__", + *ALWAYS_PRESERVED, + *ALWAYS_MUTATES_SELF, +} - {"__str__", "__repr__"} # these are defined on RuntimeFunction + +# Methods that need to be defined as descriptors on the class so that they can be looked up on the class itself. +CLASS_DESCRIPTOR_METHODS = { + "__eq__", + "__ne__", + "__str__", + "__repr__", + "__getattr__", + *NUMERIC_BINARY_METHODS, + *TYPE_DEFINED_METHODS, } # Set this globally so we can get access to PyObject when we have a type annotation of just object. @@ -162,7 +198,7 @@ class BaseClassFactoryMeta(type): def __instancecheck__(cls, instance: object) -> bool: assert isinstance(cls, RuntimeClass) - return isinstance(instance, RuntimeExpr) and cls.__egg_tp__.name == instance.__egg_typed_expr__.tp.name + return isinstance(instance, RuntimeExpr) and cls.__egg_tp__.ident == instance.__egg_typed_expr__.tp.ident class ClassFactory(type): @@ -179,10 +215,11 @@ def __call__(cls, *args, **kwargs) -> type: return super().__call__(*args, **kwargs) namespace: dict[str, Any] = {} for m in reversed(cls.__mro__): - namespace.update(m.__dict__) + if m is not object: + namespace.update(m.__dict__) init = namespace.pop("__init__") meta = types.new_class("type(RuntimeClass)", (BaseClassFactoryMeta,), {}, lambda ns: ns.update(**namespace)) - tp = types.new_class("RuntimeClass", (), {"metaclass": meta}) + tp = types.new_class("RuntimeClass", (), {"metaclass": meta}, lambda ns: ns.update(RUNTIME_CLASS_DESCRIPTORS)) init(tp, *args, **kwargs) return tp @@ -190,6 +227,32 @@ def __instancecheck__(cls, instance: object) -> bool: return isinstance(instance, BaseClassFactoryMeta) +# Add a custom descriptor for each method we want to support on the class itself, so that we can lookup things like __add__ +# on the expr class. This is used for things like running docstrings. + + +@dataclass +class RuntimeClassDescriptor: + name: str + + def __get__(self, obj: object, owner: RuntimeClass | None = None) -> Callable: + if owner is None: + raise AttributeError(f"Can only access {self.name} on the class, not an instance") + cls_decl = owner.__egg_decls__._classes[owner.__egg_tp__.ident] + if self.name in cls_decl.class_methods: + return RuntimeFunction( + owner.__egg_decls_thunk__, Thunk.value(ClassMethodRef(owner.__egg_tp__.ident, self.name)), None + ) + if self.name in cls_decl.preserved_methods: + return cls_decl.preserved_methods[self.name] + raise AttributeError(f"Class {owner.__egg_tp__.ident} has no method {self.name}") from None + + +RUNTIME_CLASS_DESCRIPTORS: dict[str, RuntimeClassDescriptor] = { + method: RuntimeClassDescriptor(method) for method in CLASS_DESCRIPTOR_METHODS +} + + @dataclass(match_args=False) class RuntimeClass(DelayedDeclerations, metaclass=ClassFactory): __egg_tp__: TypeRefWithVars @@ -198,17 +261,22 @@ class RuntimeClass(DelayedDeclerations, metaclass=ClassFactory): def __post_init__(self, _egg_has_params: bool) -> None: global _PY_OBJECT_CLASS, _UNSTABLE_FN_CLASS - if (name := self.__egg_tp__.name) == "PyObject": + ident = self.__egg_tp__.ident + if (ident) == Ident.builtin("PyObject"): _PY_OBJECT_CLASS = self - elif name == "UnstableFn" and not self.__egg_tp__.args: + elif ident == Ident.builtin("UnstableFn") and not self.__egg_tp__.args: _UNSTABLE_FN_CLASS = self + # Set the module and name so that this works with doctest + if ident.module: + self.__module__ = ident.module + self.__name__ = ident.name def verify(self) -> None: if not self.__egg_tp__.args: return # Raise error if we have args, but they are the wrong number - desired_args = self.__egg_decls__.get_class_decl(self.__egg_tp__.name).type_vars + desired_args = self.__egg_decls__.get_class_decl(self.__egg_tp__.ident).type_vars if len(self.__egg_tp__.args) != len(desired_args): raise ValueError(f"Expected {desired_args} type args, got {len(self.__egg_tp__.args)}") @@ -217,12 +285,17 @@ def __call__(self, *args: object, **kwargs: object) -> RuntimeExpr | None: Create an instance of this kind by calling the __init__ classmethod """ # If this is a literal type, initializing it with a literal should return a literal - if (name := self.__egg_tp__.name) == "PyObject": + if (name := self.__egg_tp__.ident) == Ident.builtin("PyObject"): assert len(args) == 1 + try: + pickled = cloudpickle.dumps(args[0]) + except Exception as e: + e.add_note(f"Failed to pickle object of type {type(args[0])}") + raise return RuntimeExpr( - self.__egg_decls_thunk__, Thunk.value(TypedExprDecl(self.__egg_tp__.to_just(), PyObjectDecl(args[0]))) + self.__egg_decls_thunk__, Thunk.value(TypedExprDecl(self.__egg_tp__.to_just(), PyObjectDecl(pickled))) ) - if name == "UnstableFn": + if name == Ident.builtin("UnstableFn"): assert not kwargs fn_arg, *partial_args = args del args @@ -239,16 +312,16 @@ def __call__(self, *args: object, **kwargs: object) -> RuntimeExpr | None: n_args = len(partial_args) value = PartialCallDecl(replace(call, args=call.args[:n_args])) remaining_arg_types = [a.tp for a in call.args[n_args:]] - type_ref = JustTypeRef("UnstableFn", (return_tp, *remaining_arg_types)) + type_ref = JustTypeRef(Ident.builtin("UnstableFn"), (return_tp, *remaining_arg_types)) return RuntimeExpr.__from_values__(Declarations.create(self, res), TypedExprDecl(type_ref, value)) - if name in UNARY_LIT_CLASS_NAMES: + if name in UNARY_LIT_IDENTS: assert len(args) == 1 assert isinstance(args[0], int | float | str | bool) return RuntimeExpr( self.__egg_decls_thunk__, Thunk.value(TypedExprDecl(self.__egg_tp__.to_just(), LitDecl(args[0]))) ) - if name == UNIT_CLASS_NAME: + if name == UNIT_IDENT: assert len(args) == 0 return RuntimeExpr( self.__egg_decls_thunk__, Thunk.value(TypedExprDecl(self.__egg_tp__.to_just(), LitDecl(None))) @@ -256,15 +329,15 @@ def __call__(self, *args: object, **kwargs: object) -> RuntimeExpr | None: fn = RuntimeFunction(self.__egg_decls_thunk__, Thunk.value(InitRef(name)), self.__egg_tp__.to_just()) return fn(*args, **kwargs) # type: ignore[arg-type] - def __dir__(self) -> list[str]: - cls_decl = self.__egg_decls__.get_class_decl(self.__egg_tp__.name) - possible_methods = ( - list(cls_decl.class_methods) + list(cls_decl.class_variables) + list(cls_decl.preserved_methods) + def __dir__(self) -> Iterable[str]: + cls_decl = self.__egg_decls__._classes[self.__egg_tp__.ident] + return ( + list(cls_decl.class_methods) + + list(cls_decl.class_variables) + + list(cls_decl.preserved_methods) + + list(cls_decl.methods) + + list(cls_decl.properties) ) - if "__init__" in possible_methods: - possible_methods.remove("__init__") - possible_methods.append("__call__") - return possible_methods def __getitem__(self, args: object) -> RuntimeClass: if not isinstance(args, tuple): @@ -285,12 +358,14 @@ def __getitem__(self, args: object) -> RuntimeClass: final_args = tuple(new_args_list.pop(0) if is_typevar[i] else old_args[i] for i in range(len(old_args))) else: final_args = new_args - tp = TypeRefWithVars(self.__egg_tp__.name, final_args) + tp = TypeRefWithVars(self.__egg_tp__.ident, final_args) return RuntimeClass(Thunk.fn(Declarations.create, self, *decls_like), tp, _egg_has_params=True) def __getattr__(self, name: str) -> RuntimeFunction | RuntimeExpr | Callable: + if not isinstance(name, str): + raise TypeError(f"Attribute name must be a string, got {name!r}") if name == "__origin__" and self.__egg_tp__.args: - return RuntimeClass(self.__egg_decls_thunk__, TypeRefWithVars(self.__egg_tp__.name)) + return RuntimeClass(self.__egg_decls_thunk__, TypeRefWithVars(self.__egg_tp__.ident)) # Special case some names that don't exist so we can exit early without resolving decls # Important so if we take union of RuntimeClass it won't try to resolve decls @@ -305,34 +380,35 @@ def __getattr__(self, name: str) -> RuntimeFunction | RuntimeExpr | Callable: raise AttributeError try: - cls_decl = self.__egg_decls__._classes[self.__egg_tp__.name] + cls_decl = self.__egg_decls__._classes[self.__egg_tp__.ident] except Exception as e: - raise add_note(f"Error processing class {self.__egg_tp__.name}", e) from None + e.add_note(f"Error processing class {self.__egg_tp__.ident}") + raise preserved_methods = cls_decl.preserved_methods if name in preserved_methods: - return preserved_methods[name].__get__(self) + return preserved_methods[name] # if this is a class variable, return an expr for it, otherwise, assume it's a method if name in cls_decl.class_variables: return_tp = cls_decl.class_variables[name] return RuntimeExpr( self.__egg_decls_thunk__, - Thunk.value(TypedExprDecl(return_tp.type_ref, CallDecl(ClassVariableRef(self.__egg_tp__.name, name)))), + Thunk.value(TypedExprDecl(return_tp.type_ref, CallDecl(ClassVariableRef(self.__egg_tp__.ident, name)))), ) if name in cls_decl.class_methods: return RuntimeFunction( self.__egg_decls_thunk__, - Thunk.value(ClassMethodRef(self.__egg_tp__.name, name)), + Thunk.value(ClassMethodRef(self.__egg_tp__.ident, name)), self.__egg_tp__.to_just(), ) # allow referencing properties and methods as class variables as well if name in cls_decl.properties: - return RuntimeFunction(self.__egg_decls_thunk__, Thunk.value(PropertyRef(self.__egg_tp__.name, name))) + return RuntimeFunction(self.__egg_decls_thunk__, Thunk.value(PropertyRef(self.__egg_tp__.ident, name))) if name in cls_decl.methods: - return RuntimeFunction(self.__egg_decls_thunk__, Thunk.value(MethodRef(self.__egg_tp__.name, name))) + return RuntimeFunction(self.__egg_decls_thunk__, Thunk.value(MethodRef(self.__egg_tp__.ident, name))) - msg = f"Class {self.__egg_tp__.name} has no method {name}" + msg = f"Class {self.__egg_tp__.ident} has no method {name}" raise AttributeError(msg) from None def __str__(self) -> str: @@ -366,15 +442,44 @@ def __parameters__(self) -> tuple[object, ...]: @property def __match_args__(self) -> tuple[str, ...]: - return self.__egg_decls__._classes[self.__egg_tp__.name].match_args + return self.__egg_decls__._classes[self.__egg_tp__.ident].match_args + + @property + def __doc__(self) -> str | None: # type: ignore[override] + return self.__egg_decls__._classes[self.__egg_tp__.ident].doc + + @property + def __dict__(self) -> dict[str, Any]: # type: ignore[override] + """ + Return the dict so that this works with things like `DocTestFinder`. + """ + return {attr: getattr(self, attr) for attr in dir(self)} + + +class RuntimeFunctionMeta(type): + # Override getatribute on class so that it if we call RuntimeFunction.__module__ we get this module + # but if we call it on an instance we get the module of the instance so that it works with doctest. + def __getattribute__(cls, name: str) -> Any: + if name == "__module__": + return __name__ + return super().__getattribute__(name) @dataclass -class RuntimeFunction(DelayedDeclerations): +class RuntimeFunction(DelayedDeclerations, metaclass=RuntimeFunctionMeta): __egg_ref_thunk__: Callable[[], CallableRef] # bound methods need to store RuntimeExpr not just TypedExprDecl, so they can mutate the expr if required on self __egg_bound__: JustTypeRef | RuntimeExpr | None = None + __get__: None = None + + @property + def __module__(self) -> str | None: # type: ignore[override] + ref = self.__egg_ref__ + if isinstance(ref, UnnamedFunctionRef): + return None + return ref.ident.module + def __eq__(self, other: object) -> bool: """ Support equality for runtime comparison of egglog functions. @@ -398,7 +503,8 @@ def __call__(self, *args: object, _egg_partial_function: bool = False, **kwargs: try: signature = self.__egg_decls__.get_callable_decl(self.__egg_ref__).signature except Exception as e: - raise add_note(f"Failed to find callable {self}", e) # noqa: B904 + e.add_note(f"Failed to find callable {self}") + raise decls = self.__egg_decls__.copy() # Special case function application bc we dont support variadic generics yet generally if signature == "fn-app": @@ -409,7 +515,7 @@ def __call__(self, *args: object, _egg_partial_function: bool = False, **kwargs: decls.update(fn) function_value = fn.__egg_typed_expr__ fn_tp = function_value.tp - assert fn_tp.name == "UnstableFn" + assert fn_tp.ident == Ident.builtin("UnstableFn") fn_return_tp, *fn_arg_tps = fn_tp.args signature = FunctionSignature( tuple(tp.to_var() for tp in fn_arg_tps), @@ -448,14 +554,14 @@ def __call__(self, *args: object, _egg_partial_function: bool = False, **kwargs: ): tcs.bind_class(bound_tp) assert (operator.ge if signature.var_arg_type else operator.eq)(len(args), len(signature.arg_types)) - cls_name = bound_tp.name if bound_tp else None + cls_ident = bound_tp.ident if bound_tp else None upcasted_args = [ - resolve_literal(cast("TypeOrVarRef", tp), arg, Thunk.value(decls), tcs=tcs, cls_name=cls_name) + resolve_literal(cast("TypeOrVarRef", tp), arg, Thunk.value(decls), tcs=tcs, cls_ident=cls_ident) for arg, tp in zip_longest(args, signature.arg_types, fillvalue=signature.var_arg_type) ] decls.update(*upcasted_args) arg_exprs = tuple(arg.__egg_typed_expr__ for arg in upcasted_args) - return_tp = tcs.substitute_typevars(signature.semantic_return_type, cls_name) + return_tp = tcs.substitute_typevars(signature.semantic_return_type, cls_ident) bound_params = ( cast("JustTypeRef", bound_tp).args if isinstance(self.__egg_ref__, ClassMethodRef | InitRef) else () ) @@ -484,6 +590,13 @@ def __str__(self) -> str: def __repr__(self) -> str: return str(self) + @property + def __doc__(self) -> str | None: # type: ignore[override] + decl = self.__egg_decls__.get_callable_decl(self.__egg_ref__) + if isinstance(decl, FunctionDecl | ConstructorDecl): + return decl.doc + return None + def to_py_signature(sig: FunctionSignature, decls: Declarations, optional_args: bool) -> Signature: """ @@ -509,10 +622,17 @@ def to_py_signature(sig: FunctionSignature, decls: Declarations, optional_args: return Signature(parameters) +ON_CREATE_EXPR: None | Callable[[Callable[[], TypedExprDecl]], None] = None + + @dataclass class RuntimeExpr(DelayedDeclerations): __egg_typed_expr_thunk__: Callable[[], TypedExprDecl] + def __post_init__(self) -> None: + if ON_CREATE_EXPR: + ON_CREATE_EXPR(self.__egg_typed_expr_thunk__) + @classmethod def __from_values__(cls, d: Declarations, e: TypedExprDecl) -> RuntimeExpr: return cls(Thunk.value(d), Thunk.value(e)) @@ -524,23 +644,29 @@ def __with_expr__(self, e: TypedExprDecl) -> RuntimeExpr: def __egg_typed_expr__(self) -> TypedExprDecl: return self.__egg_typed_expr_thunk__() - def __getattr__(self, name: str) -> RuntimeFunction | RuntimeExpr | Callable | None: - if (method := _get_expr_method(self, name)) is not None: + def __getattr__(self, name: str) -> object: + if (method := _get_expr_method(self, name)) is not _no_method_sentinel: return method if name in self.__egg_class_decl__.properties: fn = RuntimeFunction( - self.__egg_decls_thunk__, Thunk.value(PropertyRef(self.__egg_class_name__, name)), self + self.__egg_decls_thunk__, Thunk.value(PropertyRef(self.__egg_class_ident__, name)), self ) return fn() - raise AttributeError(f"{self.__egg_class_name__} has no method {name}") from None + if (getattr_method := _get_expr_method(self, "__getattr__")) is not _no_method_sentinel: + return cast("Callable", getattr_method)(name) + raise AttributeError(f"{self.__egg_class_ident__} has no method {name}") from None def __repr__(self) -> str: """ The repr of the expr is the pretty printed version of the expr. """ + if (method := _get_expr_method(self, "__repr__")) is not _no_method_sentinel: + return cast("str", cast("Any", cast("Callable", method)())) return str(self) def __str__(self) -> str: + if (method := _get_expr_method(self, "__str__")) is not _no_method_sentinel: + return cast("str", cast("Any", cast("Callable", method)())) return self.__egg_pretty__(None) def __egg_pretty__(self, wrapping_fn: str | None) -> str: @@ -552,16 +678,22 @@ def _ipython_display_(self) -> None: display(Code(str(self), language="python")) def __dir__(self) -> Iterable[str]: - class_decl = self.__egg_class_decl__ - return list(class_decl.methods) + list(class_decl.properties) + list(class_decl.preserved_methods) + cls_decl = self.__egg_class_decl__ + return ( + list(cls_decl.class_methods) + + list(cls_decl.class_variables) + + list(cls_decl.preserved_methods) + + list(cls_decl.methods) + + list(cls_decl.properties) + ) @property - def __egg_class_name__(self) -> str: - return self.__egg_typed_expr__.tp.name + def __egg_class_ident__(self) -> Ident: + return self.__egg_typed_expr__.tp.ident @property def __egg_class_decl__(self) -> ClassDecl: - return self.__egg_decls__.get_class_decl(self.__egg_class_name__) + return self.__egg_decls__.get_class_decl(self.__egg_class_ident__) # Implement these so that copy() works on this object # otherwise copy will try to call `__getstate__` before object is initialized with properties which will cause inifinite recursion @@ -574,15 +706,15 @@ def __setstate__(self, d: tuple[Declarations, TypedExprDecl]) -> None: self.__egg_typed_expr_thunk__ = Thunk.value(d[1]) def __hash__(self) -> int: - if (method := _get_expr_method(self, "__hash__")) is not None: - return cast("int", cast("Any", method())) + if (method := _get_expr_method(self, "__hash__")) is not _no_method_sentinel: + return cast("int", cast("Any", cast("Callable", method)())) return hash(self.__egg_typed_expr__) # Implement this directly to special case behavior where it transforms to an egraph equality, if it is not a # preserved method or defined on the class def __eq__(self, other: object) -> object: # type: ignore[override] - if (method := _get_expr_method(self, "__eq__")) is not None: - return method(other) + if (method := _get_expr_method(self, "__eq__")) is not _no_method_sentinel: + return cast("Callable", method)(other) if not (isinstance(self, RuntimeExpr) and isinstance(other, RuntimeExpr)): return NotImplemented @@ -597,8 +729,8 @@ def __eq__(self, other: object) -> object: # type: ignore[override] ) def __ne__(self, other: object) -> object: # type: ignore[override] - if (method := _get_expr_method(self, "__ne__")) is not None: - return method(other) + if (method := _get_expr_method(self, "__ne__")) is not _no_method_sentinel: + return cast("Callable", method)(other) from .egraph import BaseExpr, ne # noqa: PLC0415 @@ -609,28 +741,37 @@ def __call__( ) -> object: # define it here only for type checking, it will be overriden below ... + def __replace_expr__(self, new_expr: RuntimeExpr) -> None: + self.__egg_decls_thunk__ = new_expr.__egg_decls_thunk__ + self.__egg_typed_expr_thunk__ = new_expr.__egg_typed_expr_thunk__ + + +# Return a sentinel value to differentiate between no method and property that returns None +_no_method_sentinel = object() + -def _get_expr_method(expr: RuntimeExpr, name: str) -> RuntimeFunction | RuntimeExpr | Callable | None: +def _get_expr_method(expr: RuntimeExpr, name: str) -> object: if name in (preserved_methods := expr.__egg_class_decl__.preserved_methods): return preserved_methods[name].__get__(expr) - if name in expr.__egg_class_decl__.methods: - return RuntimeFunction(expr.__egg_decls_thunk__, Thunk.value(MethodRef(expr.__egg_class_name__, name)), expr) - return None + return RuntimeFunction(expr.__egg_decls_thunk__, Thunk.value(MethodRef(expr.__egg_class_ident__, name)), expr) + return _no_method_sentinel def define_expr_method(name: str) -> None: """ Given the name of a method, explicitly defines it on the runtime type that holds `Expr` objects as a method. - Call this if you need a method to be defined on the type itself where overrindg with `__getattr__` does not suffice, + Call this if you need a method to be defined on the type itself where overrding with `__getattr__` does not suffice, like for NumPy's `__array_ufunc__`. """ - def _defined_method(self: RuntimeExpr, *args, __name: str = name, **kwargs): - fn = _get_expr_method(self, __name) - if fn is None: - raise TypeError(f"{self.__egg_class_name__} expression has no method {__name}") + def _defined_method(self: RuntimeExpr, *args, __name: str = name, **kwargs) -> object: + fn = cast("Callable", _get_expr_method(self, __name)) + if fn is _no_method_sentinel: + if __name == "__hash__": + return hash(self.__egg_typed_expr__) + raise AttributeError(f"{self.__egg_class_ident__} expression has no method {__name}") return fn(*args, **kwargs) setattr(RuntimeExpr, name, _defined_method) @@ -652,14 +793,34 @@ def _numeric_binary_method( Tries to find the minimum cost conversion of either the LHS or the RHS, by finding all methods with either the LHS or the RHS as exactly the right type and then upcasting the other to that type. """ + from .conversion import ( # noqa: PLC0415 + ConvertError, + convert_to_same_type, + min_binary_conversion, + resolve_type, + ) + + # 1. switch if reversed method + if r_method: + self, other = other, self # First check if we have a preserved method for this: if isinstance(self, RuntimeExpr) and ( - (preserved_method := self.__egg_class_decl__.preserved_methods.get(method_name)) is not None + (preserved_method := self.__egg_class_decl__.preserved_methods.get(name)) is not None ): return preserved_method.__get__(self)(other) - # 1. switch if reversed method - if r_method: - self, other = other, self + # Then check if the self is a Python type and the other side has a preserved method + if ( + not isinstance(self, RuntimeExpr) + and isinstance(other, RuntimeExpr) + and ((preserved_method := other.__egg_class_decl__.preserved_methods.get(name)) is not None) + ): + try: + new_self = convert_to_same_type(self, other) + except ConvertError: + pass + else: + return preserved_method.__get__(new_self)(other) + # If the types don't exactly match to start, then we need to try converting one of them, by finding the cheapest conversion if not ( isinstance(self, RuntimeExpr) @@ -670,15 +831,15 @@ def _numeric_binary_method( ) ) ): - from .conversion import min_binary_conversion, resolve_type # noqa: PLC0415 - best_method = min_binary_conversion(name, resolve_type(self), resolve_type(other)) if not best_method: - raise RuntimeError(f"Cannot resolve {name} for {self} and {other}, no conversion found") + raise RuntimeError( + f"Cannot resolve {name} for {resolve_type(self)} and {resolve_type(other)}, no conversion found" + ) self, other = best_method[0](self), best_method[1](other) - method_ref = MethodRef(self.__egg_class_name__, name) + method_ref = MethodRef(self.__egg_class_ident__, name) fn = RuntimeFunction(Thunk.value(self.__egg_decls__), Thunk.value(method_ref), self) return fn(other) @@ -691,7 +852,7 @@ def resolve_callable(callable: object) -> tuple[CallableRef, Declarations]: """ # TODO: Make runtime class work with __match_args__ if isinstance(callable, RuntimeClass): - return InitRef(callable.__egg_tp__.name), callable.__egg_decls__ + return InitRef(callable.__egg_tp__.ident), callable.__egg_decls__ match callable: case RuntimeFunction(decls, ref, _): return ref(), decls() @@ -702,7 +863,7 @@ def resolve_callable(callable: object) -> tuple[CallableRef, Declarations]: raise NotImplementedError(f"Can only turn constants or classvars into callable refs, not {expr}") return expr.callable, decl_thunk() case types.MethodWrapperType() if isinstance((slf := callable.__self__), RuntimeClass): - return MethodRef(slf.__egg_tp__.name, callable.__name__), slf.__egg_decls__ + return MethodRef(slf.__egg_tp__.ident, callable.__name__), slf.__egg_decls__ case _: raise NotImplementedError(f"Cannot turn {callable} of type {type(callable)} into a callable ref") @@ -716,7 +877,7 @@ def create_callable(decls: Declarations, ref: CallableRef) -> RuntimeClass | Run case InitRef(name): return RuntimeClass(Thunk.value(decls), TypeRefWithVars(name)) case FunctionRef() | MethodRef() | ClassMethodRef() | PropertyRef() | UnnamedFunctionRef(): - bound = JustTypeRef(ref.class_name) if isinstance(ref, ClassMethodRef) else None + bound = JustTypeRef(ref.ident) if isinstance(ref, ClassMethodRef) else None return RuntimeFunction(Thunk.value(decls), Thunk.value(ref), bound) case ConstantRef(name): tp = decls._constants[name].type_ref diff --git a/python/egglog/thunk.py b/python/egglog/thunk.py index 0de42a65..4363449e 100644 --- a/python/egglog/thunk.py +++ b/python/egglog/thunk.py @@ -33,15 +33,15 @@ def right(self) -> V: @dataclass -class Thunk(Generic[T, Unpack[TS]]): +class Thunk(Generic[T, *TS]): """ Cached delayed function call. """ - state: Resolved[T] | Unresolved[T, Unpack[TS]] | Resolving | Error + state: Resolved[T] | Unresolved[T, *TS] | Resolving | Error @classmethod - def fn(cls, fn: Callable[[Unpack[TS]], T], *args: Unpack[TS], context: str | None = None) -> Thunk[T, Unpack[TS]]: + def fn(cls, fn: Callable[[Unpack[TS]], T], *args: *TS, context: str | None = None) -> Thunk[T, *TS]: """ Create a thunk based on some functions and some partial args. @@ -80,9 +80,9 @@ class Resolved(Generic[T]): @dataclass -class Unresolved(Generic[T, Unpack[TS]]): +class Unresolved(Generic[T, *TS]): fn: Callable[[Unpack[TS]], T] - args: tuple[Unpack[TS]] + args: tuple[*TS] context: str | None diff --git a/python/egglog/type_constraint_solver.py b/python/egglog/type_constraint_solver.py index 24779a25..4a333179 100644 --- a/python/egglog/type_constraint_solver.py +++ b/python/egglog/type_constraint_solver.py @@ -5,9 +5,7 @@ from collections import defaultdict from dataclasses import dataclass, field from itertools import chain, repeat -from typing import TYPE_CHECKING - -from typing_extensions import assert_never +from typing import TYPE_CHECKING, assert_never from .declarations import * @@ -29,8 +27,8 @@ class TypeConstraintSolver: """ _decls: Declarations = field(repr=False) - # Mapping of class name to mapping of bound class typevar to type - _cls_typevar_index_to_type: defaultdict[str, dict[ClassTypeVarRef, JustTypeRef]] = field( + # Mapping of class ident to mapping of bound class typevar to type + _cls_typevar_index_to_type: defaultdict[Ident, dict[ClassTypeVarRef, JustTypeRef]] = field( default_factory=lambda: defaultdict(dict) ) @@ -39,7 +37,7 @@ def bind_class(self, ref: JustTypeRef) -> None: Bind the typevars of a class to the given types. Used for a situation like Map[int, str].create(). """ - name = ref.name + name = ref.ident cls_typevars = self._decls.get_class_decl(name).type_vars if len(cls_typevars) != len(ref.args): raise TypeConstraintError(f"Mismatch of typevars {cls_typevars} and {ref}") @@ -53,45 +51,45 @@ def infer_arg_types( fn_return: TypeOrVarRef, fn_var_args: TypeOrVarRef | None, return_: JustTypeRef, - cls_name: str | None, + cls_ident: Ident | None, ) -> tuple[Iterable[JustTypeRef], tuple[JustTypeRef, ...]]: """ Given a return type, infer the argument types. If there is a variable arg, it returns an infinite iterable. Also returns the bound type params if the class name is passed in. """ - self.infer_typevars(fn_return, return_, cls_name) - arg_types: Iterable[JustTypeRef] = [self.substitute_typevars(a, cls_name) for a in fn_args] + self.infer_typevars(fn_return, return_, cls_ident) + arg_types: Iterable[JustTypeRef] = [self.substitute_typevars(a, cls_ident) for a in fn_args] if fn_var_args: # Need to be generator so it can be infinite for variable args - arg_types = chain(arg_types, repeat(self.substitute_typevars(fn_var_args, cls_name))) + arg_types = chain(arg_types, repeat(self.substitute_typevars(fn_var_args, cls_ident))) bound_typevars = ( tuple( v # Sort by the index of the typevar in the class for _, v in sorted( - self._cls_typevar_index_to_type[cls_name].items(), - key=lambda kv: self._decls.get_class_decl(cls_name).type_vars.index(kv[0]), + self._cls_typevar_index_to_type[cls_ident].items(), + key=lambda kv: self._decls.get_class_decl(cls_ident).type_vars.index(kv[0]), ) ) - if cls_name + if cls_ident else () ) return arg_types, bound_typevars - def infer_typevars(self, fn_arg: TypeOrVarRef, arg: JustTypeRef, cls_name: str | None = None) -> None: + def infer_typevars(self, fn_arg: TypeOrVarRef, arg: JustTypeRef, cls_ident: Ident | None = None) -> None: match fn_arg: - case TypeRefWithVars(cls_name, fn_args): - if cls_name != arg.name: - raise TypeConstraintError(f"Expected {cls_name}, got {arg.name}") + case TypeRefWithVars(cls_ident, fn_args): + if cls_ident != arg.ident: + raise TypeConstraintError(f"Expected {cls_ident}, got {arg.ident}") for inner_fn_arg, inner_arg in zip(fn_args, arg.args, strict=True): - self.infer_typevars(inner_fn_arg, inner_arg, cls_name) + self.infer_typevars(inner_fn_arg, inner_arg, cls_ident) case ClassTypeVarRef(): - if cls_name is None: + if cls_ident is None: msg = "Cannot infer typevar without class name" raise RuntimeError(msg) - class_typevars = self._cls_typevar_index_to_type[cls_name] + class_typevars = self._cls_typevar_index_to_type[cls_ident] if fn_arg in class_typevars: if class_typevars[fn_arg] != arg: raise TypeConstraintError(f"Expected {class_typevars[fn_arg]}, got {arg}") @@ -100,14 +98,14 @@ def infer_typevars(self, fn_arg: TypeOrVarRef, arg: JustTypeRef, cls_name: str | case _: assert_never(fn_arg) - def substitute_typevars(self, tp: TypeOrVarRef, cls_name: str | None = None) -> JustTypeRef: + def substitute_typevars(self, tp: TypeOrVarRef, cls_ident: Ident | None = None) -> JustTypeRef: match tp: case ClassTypeVarRef(): - assert cls_name is not None + assert cls_ident is not None try: - return self._cls_typevar_index_to_type[cls_name][tp] + return self._cls_typevar_index_to_type[cls_ident][tp] except KeyError as e: - raise TypeConstraintError(f"Not enough bound typevars for {tp!r} in class {cls_name}") from e + raise TypeConstraintError(f"Not enough bound typevars for {tp!r} in class {cls_ident}") from e case TypeRefWithVars(name, args): - return JustTypeRef(name, tuple(self.substitute_typevars(arg, cls_name) for arg in args)) + return JustTypeRef(name, tuple(self.substitute_typevars(arg, cls_ident) for arg in args)) assert_never(tp) diff --git a/python/egglog/version_compat.py b/python/egglog/version_compat.py deleted file mode 100644 index 2dc74fa4..00000000 --- a/python/egglog/version_compat.py +++ /dev/null @@ -1,87 +0,0 @@ -import collections -import sys -import types -import typing - -BEFORE_3_11 = sys.version_info < (3, 11) - -__all__ = ["add_note"] - - -def add_note(message: str, exc: BaseException) -> BaseException: - """ - Backwards compatible add_note for Python <= 3.10 - """ - if BEFORE_3_11: - return exc - exc.add_note(message) - return exc - - -# For Python version 3.10 need to monkeypatch this function so that RuntimeClass type parameters -# will be collected as typevars -if BEFORE_3_11: - - @typing.no_type_check - def _collect_type_vars_monkeypatch(types_, typevar_types=None): - """ - Collect all type variable contained - in types in order of first appearance (lexicographic order). For example:: - - _collect_type_vars((T, List[S, T])) == (T, S) - """ - from .runtime import RuntimeClass # noqa: PLC0415 - - if typevar_types is None: - typevar_types = typing.TypeVar - tvars = [] - for t in types_: - if isinstance(t, typevar_types) and t not in tvars: - tvars.append(t) - # **MONKEYPATCH CHANGE HERE TO ADD RuntimeClass** - if isinstance(t, (typing._GenericAlias, typing.GenericAlias, types.UnionType, RuntimeClass)): - tvars.extend([t for t in t.__parameters__ if t not in tvars]) - return tuple(tvars) - - typing._collect_type_vars = _collect_type_vars_monkeypatch # type: ignore[attr-defined] - - @typing.no_type_check - @typing._tp_cache - def __getitem__monkeypatch(self, params): # noqa: C901, PLR0912 - from .runtime import RuntimeClass # noqa: PLC0415 - - if self.__origin__ in (typing.Generic, typing.Protocol): - # Can't subscript Generic[...] or Protocol[...]. - raise TypeError(f"Cannot subscript already-subscripted {self}") - if not isinstance(params, tuple): - params = (params,) - params = tuple(typing._type_convert(p) for p in params) - if self._paramspec_tvars and any(isinstance(t, typing.ParamSpec) for t in self.__parameters__): - params = typing._prepare_paramspec_params(self, params) - else: - typing._check_generic(self, params, len(self.__parameters__)) - - subst = dict(zip(self.__parameters__, params, strict=False)) - new_args = [] - for arg in self.__args__: - if isinstance(arg, self._typevar_types): - if isinstance(arg, typing.ParamSpec): - arg = subst[arg] # noqa: PLW2901 - if not typing._is_param_expr(arg): - raise TypeError(f"Expected a list of types, an ellipsis, ParamSpec, or Concatenate. Got {arg}") - else: - arg = subst[arg] # noqa: PLW2901 - # **MONKEYPATCH CHANGE HERE TO ADD RuntimeClass** - elif isinstance(arg, (typing._GenericAlias, typing.GenericAlias, types.UnionType, RuntimeClass)): - subparams = arg.__parameters__ - if subparams: - subargs = tuple(subst[x] for x in subparams) - arg = arg[subargs] # noqa: PLW2901 - # Required to flatten out the args for CallableGenericAlias - if self.__origin__ == collections.abc.Callable and isinstance(arg, tuple): - new_args.extend(arg) - else: - new_args.append(arg) - return self.copy_with(tuple(new_args)) - - typing._GenericAlias.__getitem__ = __getitem__monkeypatch # type: ignore[attr-defined] diff --git a/python/egglog/visualizer.css b/python/egglog/visualizer.css index ee325a3d..3d08f3cb 100644 --- a/python/egglog/visualizer.css +++ b/python/egglog/visualizer.css @@ -1 +1 @@ -.react-flow__node{z-index:-1!important;transition:transform 1s ease}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*:where(.twp,.twp *),:before:where(.twp,.twp *),:after:where(.twp,.twp *){box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before:where(.twp,.twp *),:after:where(.twp,.twp *){--tw-content: ""}.twp{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}.twp{margin:0;line-height:inherit}hr:where(.twp,.twp *){height:0;color:inherit;border-top-width:1px}abbr:where([title]):where(.twp,.twp *){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1:where(.twp,.twp *),h2:where(.twp,.twp *),h3:where(.twp,.twp *),h4:where(.twp,.twp *),h5:where(.twp,.twp *),h6:where(.twp,.twp *){font-size:inherit;font-weight:inherit}a:where(.twp,.twp *){color:inherit;text-decoration:inherit}b:where(.twp,.twp *),strong:where(.twp,.twp *){font-weight:bolder}code:where(.twp,.twp *),kbd:where(.twp,.twp *),samp:where(.twp,.twp *),pre:where(.twp,.twp *){font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small:where(.twp,.twp *){font-size:80%}sub:where(.twp,.twp *),sup:where(.twp,.twp *){font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub:where(.twp,.twp *){bottom:-.25em}sup:where(.twp,.twp *){top:-.5em}table:where(.twp,.twp *){text-indent:0;border-color:inherit;border-collapse:collapse}button:where(.twp,.twp *),input:where(.twp,.twp *),optgroup:where(.twp,.twp *),select:where(.twp,.twp *),textarea:where(.twp,.twp *){font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button:where(.twp,.twp *),select:where(.twp,.twp *){text-transform:none}button:where(.twp,.twp *),input:where([type=button]):where(.twp,.twp *),input:where([type=reset]):where(.twp,.twp *),input:where([type=submit]):where(.twp,.twp *){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring:where(.twp,.twp *){outline:auto}:-moz-ui-invalid:where(.twp,.twp *){box-shadow:none}progress:where(.twp,.twp *){vertical-align:baseline}::-webkit-inner-spin-button:where(.twp,.twp *),::-webkit-outer-spin-button:where(.twp,.twp *){height:auto}[type=search]:where(.twp,.twp *){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration:where(.twp,.twp *){-webkit-appearance:none}::-webkit-file-upload-button:where(.twp,.twp *){-webkit-appearance:button;font:inherit}summary:where(.twp,.twp *){display:list-item}blockquote:where(.twp,.twp *),dl:where(.twp,.twp *),dd:where(.twp,.twp *),h1:where(.twp,.twp *),h2:where(.twp,.twp *),h3:where(.twp,.twp *),h4:where(.twp,.twp *),h5:where(.twp,.twp *),h6:where(.twp,.twp *),hr:where(.twp,.twp *),figure:where(.twp,.twp *),p:where(.twp,.twp *),pre:where(.twp,.twp *){margin:0}fieldset:where(.twp,.twp *){margin:0;padding:0}legend:where(.twp,.twp *){padding:0}ol:where(.twp,.twp *),ul:where(.twp,.twp *),menu:where(.twp,.twp *){list-style:none;margin:0;padding:0}dialog:where(.twp,.twp *){padding:0}textarea:where(.twp,.twp *){resize:vertical}input::-moz-placeholder:where(.twp,.twp *),textarea::-moz-placeholder:where(.twp,.twp *){opacity:1;color:#9ca3af}input::placeholder:where(.twp,.twp *),textarea::placeholder:where(.twp,.twp *){opacity:1;color:#9ca3af}button:where(.twp,.twp *),[role=button]:where(.twp,.twp *){cursor:pointer}:disabled:where(.twp,.twp *){cursor:default}img:where(.twp,.twp *),svg:where(.twp,.twp *),video:where(.twp,.twp *),canvas:where(.twp,.twp *),audio:where(.twp,.twp *),iframe:where(.twp,.twp *),embed:where(.twp,.twp *),object:where(.twp,.twp *){display:block;vertical-align:middle}img:where(.twp,.twp *),video:where(.twp,.twp *){max-width:100%;height:auto}[hidden]:where(.twp,.twp *){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 4%;--border: 240 5% 84%;--muted: 240 4% 46%;--success: 142 72% 29%;--destructive: 0 72% 51%;--warning: 41 96% 40%}.dark{--background: 240 10% 4%;--foreground: 0 0% 98%;--border: 240 5% 26%;--muted: 240 5% 65%;--success: 142 72% 29%;--destructive: 0 72% 51%;--warning: 41 96% 40%}*,*:before,*:after{border-color:hsl(var(--border))}body{height:100%;background-color:hsl(var(--background));font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg{flex-shrink:0}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.bottom-0{bottom:0!important}.bottom-6{bottom:1.5rem!important}.end-0{inset-inline-end:0px!important}.end-3{inset-inline-end:.75rem!important}.left-0{left:0!important}.left-1\/2{left:50%!important}.left-6{left:1.5rem!important}.left-full{left:100%!important}.right-0{right:0!important}.right-1{right:.25rem!important}.right-2{right:.5rem!important}.right-6{right:1.5rem!important}.top-0{top:0!important}.top-1{top:.25rem!important}.top-1\.5{top:.375rem!important}.top-1\/2{top:50%!important}.top-3{top:.75rem!important}.top-6{top:1.5rem!important}.top-\[0px\]{top:0!important}.top-\[50\%\]{top:50%!important}.isolate{isolation:isolate!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-50{z-index:50!important}.col-span-3{grid-column:span 3 / span 3!important}.col-span-full{grid-column:1 / -1!important}.col-start-1{grid-column-start:1!important}.col-start-2{grid-column-start:2!important}.-col-end-1{grid-column-end:-1!important}.-col-end-2{grid-column-end:-2!important}.row-start-1{grid-row-start:1!important}.-mx-\[1px\]{margin-left:-1px!important;margin-right:-1px!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.-mb-px{margin-bottom:-1px!important}.-me-2{margin-inline-end:-.5rem!important}.-ms-2{margin-inline-start:-.5rem!important}.mb-0{margin-bottom:0!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:.75rem!important}.mb-6{margin-bottom:1.5rem!important}.me-1{margin-inline-end:.25rem!important}.me-12{margin-inline-end:3rem!important}.ml-2{margin-left:.5rem!important}.ml-2\.5{margin-left:.625rem!important}.ml-7{margin-left:1.75rem!important}.ml-auto{margin-left:auto!important}.mr-1\.5{margin-right:.375rem!important}.mr-3{margin-right:.75rem!important}.mr-4{margin-right:1rem!important}.ms-1{margin-inline-start:.25rem!important}.ms-2{margin-inline-start:.5rem!important}.ms-auto{margin-inline-start:auto!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-8{margin-top:2rem!important}.mt-\[5px\]{margin-top:5px!important}.mt-auto{margin-top:auto!important}.box-content{box-sizing:content-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.inline-flex{display:inline-flex!important}.table{display:table!important}.grid{display:grid!important}.contents{display:contents!important}.hidden{display:none!important}.aspect-square{aspect-ratio:1 / 1!important}.size-10{width:2.5rem!important;height:2.5rem!important}.size-11{width:2.75rem!important;height:2.75rem!important}.size-12{width:3rem!important;height:3rem!important}.size-14{width:3.5rem!important;height:3.5rem!important}.size-16{width:4rem!important;height:4rem!important}.size-2{width:.5rem!important;height:.5rem!important}.size-20{width:5rem!important;height:5rem!important}.size-3{width:.75rem!important;height:.75rem!important}.size-4{width:1rem!important;height:1rem!important}.size-5{width:1.25rem!important;height:1.25rem!important}.size-6{width:1.5rem!important;height:1.5rem!important}.size-8{width:2rem!important;height:2rem!important}.size-9{width:2.25rem!important;height:2.25rem!important}.size-\[1\.0625rem\]{width:1.0625rem!important;height:1.0625rem!important}.size-\[1\.125rem\]{width:1.125rem!important;height:1.125rem!important}.size-\[calc\(theme\(size\.9\)-1px\)\]{width:calc(2.25rem - 1px)!important;height:calc(2.25rem - 1px)!important}.size-\[max\(100\%\,2\.75rem\)\]{width:max(100%,2.75rem)!important;height:max(100%,2.75rem)!important}.size-full{width:100%!important;height:100%!important}.h-1\.5{height:.375rem!important}.h-12{height:3rem!important}.h-14{height:3.5rem!important}.h-2{height:.5rem!important}.h-4{height:1rem!important}.h-48{height:12rem!important}.h-5{height:1.25rem!important}.h-6{height:1.5rem!important}.h-8{height:2rem!important}.h-9{height:2.25rem!important}.h-\[--visual-viewport-height\]{height:var(--visual-viewport-height)!important}.h-\[0\.95rem\]{height:.95rem!important}.h-\[min\(85vh\,820px\)\]{height:min(85vh,820px)!important}.h-auto{height:auto!important}.h-full{height:100%!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.max-h-\[280px\]{max-height:280px!important}.max-h-\[calc\(var\(--visual-viewport-height\)-var\(--visual-viewport-vertical-padding\)-var\(--dialog-header-height\,0px\)-var\(--dialog-footer-height\,0px\)\)\]{max-height:calc(var(--visual-viewport-height) - var(--visual-viewport-vertical-padding) - var(--dialog-header-height,0px) - var(--dialog-footer-height,0px))!important}.max-h-\[inherit\]{max-height:inherit!important}.max-h-full{max-height:100%!important}.min-h-9{min-height:2.25rem!important}.min-h-screen{min-height:100vh!important}.w-1\.5{width:.375rem!important}.w-1\/2{width:50%!important}.w-1\/3{width:33.333333%!important}.w-10{width:2.5rem!important}.w-12{width:3rem!important}.w-16{width:4rem!important}.w-2\/3{width:66.666667%!important}.w-2\/5{width:40%!important}.w-3\/4{width:75%!important}.w-3\/5{width:60%!important}.w-32{width:8rem!important}.w-36{width:9rem!important}.w-4{width:1rem!important}.w-5{width:1.25rem!important}.w-56{width:14rem!important}.w-64{width:16rem!important}.w-72{width:18rem!important}.w-8{width:2rem!important}.w-96{width:24rem!important}.w-\[--trigger-width\]{width:var(--trigger-width)!important}.w-\[0\.95rem\]{width:.95rem!important}.w-\[1\.5px\]{width:1.5px!important}.w-\[100px\]{width:100px!important}.w-\[180px\]{width:180px!important}.w-\[1px\]{width:1px!important}.w-\[220px\]{width:220px!important}.w-\[250px\]{width:250px!important}.w-\[350px\]{width:350px!important}.w-\[550px\]{width:550px!important}.w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)!important}.w-\[min\(85vw\,360px\)\]{width:min(85vw,360px)!important}.w-auto{width:auto!important}.w-full{width:100%!important}.w-max{width:-moz-max-content!important;width:max-content!important}.min-w-36{min-width:9rem!important}.min-w-4{min-width:1rem!important}.min-w-48{min-width:12rem!important}.min-w-52{min-width:13rem!important}.min-w-56{min-width:14rem!important}.min-w-60{min-width:15rem!important}.min-w-64{min-width:16rem!important}.min-w-72{min-width:18rem!important}.min-w-9{min-width:2.25rem!important}.min-w-96{min-width:24rem!important}.min-w-\[110px\]{min-width:110px!important}.min-w-\[150px\]{min-width:150px!important}.min-w-\[278px\]{min-width:278px!important}.min-w-\[max\(144px\,var\(--trigger-width\)\)\]{min-width:max(144px,var(--trigger-width))!important}.min-w-fit{min-width:-moz-fit-content!important;min-width:fit-content!important}.min-w-full{min-width:100%!important}.min-w-max{min-width:-moz-max-content!important;min-width:max-content!important}.max-w-2xl{max-width:42rem!important}.max-w-32{max-width:8rem!important}.max-w-4xl{max-width:56rem!important}.max-w-56{max-width:14rem!important}.max-w-64{max-width:16rem!important}.max-w-6xl{max-width:72rem!important}.max-w-72{max-width:18rem!important}.max-w-7xl{max-width:80rem!important}.max-w-80{max-width:20rem!important}.max-w-96{max-width:24rem!important}.max-w-fit{max-width:-moz-fit-content!important;max-width:fit-content!important}.max-w-lg{max-width:32rem!important}.max-w-md{max-width:28rem!important}.max-w-none{max-width:none!important}.max-w-prose{max-width:65ch!important}.max-w-sm{max-width:24rem!important}.flex-1{flex:1 1 0%!important}.flex-shrink-0,.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.border-separate{border-collapse:separate!important}.border-spacing-0{--tw-border-spacing-x: 0px !important;--tw-border-spacing-y: 0px !important;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)!important}.-translate-x-1\/2{--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-1\.5{--tw-translate-y: -.375rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-1\/2{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-0{--tw-translate-x: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-1{--tw-translate-x: .25rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[15\%\]{--tw-translate-x: 15% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[50\%\]{--tw-translate-x: 50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[8px\]{--tw-translate-x: 8px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-\[-50\%\]{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-\[20\%\]{--tw-translate-y: 20% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-90{--tw-rotate: 90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.animate-none{animation:none!important}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite!important}.cursor-col-resize{cursor:col-resize!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.resize-y{resize:vertical!important}.resize-x{resize:horizontal!important}.resize{resize:both!important}.scroll-pt-\[2\.281rem\]{scroll-padding-top:2.281rem!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-flow-col{grid-auto-flow:column!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.grid-cols-\[1fr_16px_1fr_36px\]{grid-template-columns:1fr 16px 1fr 36px!important}.grid-cols-\[1fr_16px_1fr_40px\]{grid-template-columns:1fr 16px 1fr 40px!important}.grid-cols-\[1fr_36px\]{grid-template-columns:1fr 36px!important}.grid-cols-\[1fr_calc\(theme\(size\.5\)\+20px\)\]{grid-template-columns:1fr calc(1.25rem + 20px)!important}.grid-cols-\[36px_1fr_minmax\(40px\,max-content\)_minmax\(40px\,max-content\)\]{grid-template-columns:36px 1fr minmax(40px,max-content) minmax(40px,max-content)!important}.grid-cols-\[auto_auto_1fr_auto_auto\]{grid-template-columns:auto auto 1fr auto auto!important}.grid-cols-\[calc\(theme\(size\.5\)\+20px\)_1fr_calc\(theme\(size\.5\)\+20px\)\]{grid-template-columns:calc(1.25rem + 20px) 1fr calc(1.25rem + 20px)!important}.grid-cols-subgrid{grid-template-columns:subgrid!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.place-content-center{place-content:center!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.items-stretch{align-items:stretch!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-1{gap:.25rem!important}.gap-1\.5{gap:.375rem!important}.gap-12{gap:3rem!important}.gap-2{gap:.5rem!important}.gap-2\.5{gap:.625rem!important}.gap-3{gap:.75rem!important}.gap-4{gap:1rem!important}.gap-5{gap:1.25rem!important}.gap-6{gap:1.5rem!important}.gap-x-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.gap-x-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.gap-x-2\.5{-moz-column-gap:.625rem!important;column-gap:.625rem!important}.gap-x-3{-moz-column-gap:.75rem!important;column-gap:.75rem!important}.gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.gap-x-6{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.gap-x-8{-moz-column-gap:2rem!important;column-gap:2rem!important}.gap-y-0{row-gap:0px!important}.gap-y-0\.5{row-gap:.125rem!important}.gap-y-1{row-gap:.25rem!important}.gap-y-1\.5{row-gap:.375rem!important}.gap-y-4{row-gap:1rem!important}.gap-y-6{row-gap:1.5rem!important}.gap-y-8{row-gap:2rem!important}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(-.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.375rem * var(--tw-space-x-reverse))!important;margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.75rem * var(--tw-space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(1rem * var(--tw-space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(1.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--tw-space-y-reverse))!important}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))!important}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(3rem * var(--tw-space-y-reverse))!important}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--tw-space-y-reverse))!important}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--tw-space-y-reverse))!important}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.875rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.875rem * var(--tw-space-y-reverse))!important}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1rem * var(--tw-space-y-reverse))!important}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))!important}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))!important}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(2rem * var(--tw-space-y-reverse))!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))!important}.place-self-center{place-self:center!important}.self-start{align-self:flex-start!important}.self-center{align-self:center!important}.self-stretch{align-self:stretch!important}.justify-self-start{justify-self:start!important}.justify-self-end{justify-self:end!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.whitespace-nowrap{white-space:nowrap!important}.text-wrap{text-wrap:wrap!important}.text-nowrap{text-wrap:nowrap!important}.text-balance{text-wrap:balance!important}.text-pretty{text-wrap:pretty!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-md{border-radius:.375rem!important}.rounded-none{border-radius:0!important}.rounded-sm{border-radius:.125rem!important}.rounded-xl{border-radius:.75rem!important}.rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-l-lg{border-top-left-radius:.5rem!important;border-bottom-left-radius:.5rem!important}.rounded-l-sm{border-top-left-radius:.125rem!important;border-bottom-left-radius:.125rem!important}.rounded-r-lg{border-top-right-radius:.5rem!important;border-bottom-right-radius:.5rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-xl{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.rounded-tl-md{border-top-left-radius:.375rem!important}.border{border-width:1px!important}.border-0{border-width:0px!important}.border-2{border-width:2px!important}.border-\[5px\]{border-width:5px!important}.border-y{border-top-width:1px!important;border-bottom-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border-t{border-top-width:1px!important}.border-t-0{border-top-width:0px!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-none{border-style:none!important}.border-\[var\(--btn-bg\)\]{border-color:var(--btn-bg)!important}.border-accent{border-color:hsl(var(--accent))!important}.border-background{border-color:hsl(var(--background))!important}.border-black{--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.border-blue-500{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.border-border{border-color:hsl(var(--border))!important}.border-border\/35{border-color:hsl(var(--border) / .35)!important}.border-border\/50{border-color:hsl(var(--border) / .5)!important}.border-border\/65{border-color:hsl(var(--border) / .65)!important}.border-border\/75{border-color:hsl(var(--border) / .75)!important}.border-destructive\/15{border-color:hsl(var(--destructive) / .15)!important}.border-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(107 114 128 / var(--tw-border-opacity))!important}.border-green-500{--tw-border-opacity: 1 !important;border-color:rgb(34 197 94 / var(--tw-border-opacity))!important}.border-orange-500{--tw-border-opacity: 1 !important;border-color:rgb(249 115 22 / var(--tw-border-opacity))!important}.border-pink-500{--tw-border-opacity: 1 !important;border-color:rgb(236 72 153 / var(--tw-border-opacity))!important}.border-purple-500{--tw-border-opacity: 1 !important;border-color:rgb(168 85 247 / var(--tw-border-opacity))!important}.border-red-500{--tw-border-opacity: 1 !important;border-color:rgb(239 68 68 / var(--tw-border-opacity))!important}.border-success\/15{border-color:hsl(var(--success) / .15)!important}.border-transparent{border-color:transparent!important}.border-warning\/15{border-color:hsl(var(--warning) / .15)!important}.border-white{--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity))!important}.border-yellow-500{--tw-border-opacity: 1 !important;border-color:rgb(234 179 8 / var(--tw-border-opacity))!important}.border-zinc-200{--tw-border-opacity: 1 !important;border-color:rgb(228 228 231 / var(--tw-border-opacity))!important}.border-zinc-400\/75{border-color:#a1a1aabf!important}.border-zinc-700{--tw-border-opacity: 1 !important;border-color:rgb(63 63 70 / var(--tw-border-opacity))!important}.border-zinc-800{--tw-border-opacity: 1 !important;border-color:rgb(39 39 42 / var(--tw-border-opacity))!important}.border-zinc-900{--tw-border-opacity: 1 !important;border-color:rgb(24 24 27 / var(--tw-border-opacity))!important}.border-zinc-950\/10{border-color:#09090b1a!important}.border-zinc-950\/5{border-color:#09090b0d!important}.border-b-zinc-950\/15{border-bottom-color:#09090b26!important}.border-l-border\/50{border-left-color:hsl(var(--border) / .5)!important}.bg-\[var\(--btn-bg\)\]{background-color:var(--btn-bg)!important}.bg-accent{background-color:hsl(var(--accent))!important}.bg-amber-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 191 36 / var(--tw-bg-opacity))!important}.bg-background{background-color:hsl(var(--background))!important}.bg-blue-500{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.bg-border{background-color:hsl(var(--border))!important}.bg-destructive{background-color:hsl(var(--destructive))!important}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)!important}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)!important}.bg-gray-300{--tw-bg-opacity: 1 !important;background-color:rgb(209 213 219 / var(--tw-bg-opacity))!important}.bg-gray-500{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.bg-green-400{--tw-bg-opacity: 1 !important;background-color:rgb(74 222 128 / var(--tw-bg-opacity))!important}.bg-green-500{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.bg-hover{background-color:hsl(var(--hover))!important}.bg-inherit{background-color:inherit!important}.bg-orange-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 146 60 / var(--tw-bg-opacity))!important}.bg-orange-500{--tw-bg-opacity: 1 !important;background-color:rgb(249 115 22 / var(--tw-bg-opacity))!important}.bg-pink-500{--tw-bg-opacity: 1 !important;background-color:rgb(236 72 153 / var(--tw-bg-opacity))!important}.bg-purple-500{--tw-bg-opacity: 1 !important;background-color:rgb(168 85 247 / var(--tw-bg-opacity))!important}.bg-red-500{--tw-bg-opacity: 1 !important;background-color:rgb(239 68 68 / var(--tw-bg-opacity))!important}.bg-red-600{--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}.bg-success{background-color:hsl(var(--success))!important}.bg-success\/10{background-color:hsl(var(--success) / .1)!important}.bg-success\/5{background-color:hsl(var(--success) / .05)!important}.bg-transparent{background-color:transparent!important}.bg-warning\/10{background-color:hsl(var(--warning) / .1)!important}.bg-warning\/5{background-color:hsl(var(--warning) / .05)!important}.bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.bg-yellow-500{--tw-bg-opacity: 1 !important;background-color:rgb(234 179 8 / var(--tw-bg-opacity))!important}.bg-yellow-600{--tw-bg-opacity: 1 !important;background-color:rgb(202 138 4 / var(--tw-bg-opacity))!important}.bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.bg-zinc-200{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.bg-zinc-700\/20{background-color:#3f3f4633!important}.bg-zinc-800{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.bg-zinc-900{--tw-bg-opacity: 1 !important;background-color:rgb(24 24 27 / var(--tw-bg-opacity))!important}.bg-zinc-950{--tw-bg-opacity: 1 !important;background-color:rgb(9 9 11 / var(--tw-bg-opacity))!important}.bg-zinc-950\/40{background-color:#09090b66!important}.bg-opacity-60{--tw-bg-opacity: .6 !important}.bg-clip-content{background-clip:content-box!important}.fill-zinc-950{fill:#09090b!important}.stroke-zinc-950{stroke:#09090b!important}.stroke-\[0\.5px\]{stroke-width:.5px!important}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.p-0{padding:0!important}.p-0\.5{padding:.125rem!important}.p-1{padding:.25rem!important}.p-1\.5{padding:.375rem!important}.p-12{padding:3rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.p-8{padding:2rem!important}.p-\[calc\(theme\(spacing\[2\.5\]\)-var\(--border-with\,1px\)\)\]{padding:calc(.625rem - var(--border-with,1px))!important}.px-0{padding-left:0!important;padding-right:0!important}.px-0\.5{padding-left:.125rem!important;padding-right:.125rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-1\.5{padding-left:.375rem!important;padding-right:.375rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-2\.5{padding-left:.625rem!important;padding-right:.625rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-3\.5{padding-left:.875rem!important;padding-right:.875rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-7{padding-left:1.75rem!important;padding-right:1.75rem!important}.px-\[8px\]{padding-left:8px!important;padding-right:8px!important}.px-\[calc\(theme\(size\.11\)\+10px\)\]{padding-left:calc(2.75rem + 10px)!important;padding-right:calc(2.75rem + 10px)!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.py-24{padding-top:6rem!important;padding-bottom:6rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-\[5px\]{padding-top:5px!important;padding-bottom:5px!important}.py-\[calc\(theme\(spacing\[2\.5\]\)-1px\)\]{padding-top:calc(.625rem - 1px)!important;padding-bottom:calc(.625rem - 1px)!important}.py-\[calc\(theme\(spacing\[2\.5\]\)-var\(--border-with\,1px\)\)\]{padding-top:calc(.625rem - var(--border-with,1px))!important;padding-bottom:calc(.625rem - var(--border-with,1px))!important}.pb-0{padding-bottom:0!important}.pb-0\.5{padding-bottom:.125rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-px{padding-bottom:1px!important}.pe-0\.5{padding-inline-end:.125rem!important}.pe-1{padding-inline-end:.25rem!important}.pe-10{padding-inline-end:2.5rem!important}.pe-12{padding-inline-end:3rem!important}.pe-14{padding-inline-end:3.5rem!important}.pe-2{padding-inline-end:.5rem!important}.pe-4{padding-inline-end:1rem!important}.pe-8{padding-inline-end:2rem!important}.pl-3{padding-left:.75rem!important}.pl-4{padding-left:1rem!important}.pl-8{padding-left:2rem!important}.pl-px{padding-left:1px!important}.ps-1{padding-inline-start:.25rem!important}.ps-1\.5{padding-inline-start:.375rem!important}.ps-10{padding-inline-start:2.5rem!important}.ps-16{padding-inline-start:4rem!important}.ps-2{padding-inline-start:.5rem!important}.ps-2\.5{padding-inline-start:.625rem!important}.ps-6{padding-inline-start:1.5rem!important}.ps-8{padding-inline-start:2rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.pt-8{padding-top:2rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-start{text-align:start!important}.align-middle{vertical-align:middle!important}.align-text-bottom{vertical-align:text-bottom!important}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-\[0\.65rem\]{font-size:.65rem!important}.text-base\/6{font-size:1rem!important;line-height:1.5rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-sm\/6{font-size:.875rem!important;line-height:1.5rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs,.text-xs\/4{font-size:.75rem!important;line-height:1rem!important}.text-xs\/6{font-size:.75rem!important;line-height:1.5rem!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-normal{font-weight:400!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.leading-6{line-height:1.5rem!important}.leading-7{line-height:1.75rem!important}.tracking-widest{letter-spacing:.1em!important}.text-\[var\(--btn-color\)\]{color:var(--btn-color)!important}.text-accent{color:hsl(var(--accent))!important}.text-destructive{color:hsl(var(--destructive))!important}.text-emerald-600{--tw-text-opacity: 1 !important;color:rgb(5 150 105 / var(--tw-text-opacity))!important}.text-foreground{color:hsl(var(--foreground))!important}.text-gray-300{--tw-text-opacity: 1 !important;color:rgb(209 213 219 / var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important}.text-gray-800{--tw-text-opacity: 1 !important;color:rgb(31 41 55 / var(--tw-text-opacity))!important}.text-gray-900{--tw-text-opacity: 1 !important;color:rgb(17 24 39 / var(--tw-text-opacity))!important}.text-muted{color:hsl(var(--muted))!important}.text-muted\/45{color:hsl(var(--muted) / .45)!important}.text-muted\/50{color:hsl(var(--muted) / .5)!important}.text-muted\/75{color:hsl(var(--muted) / .75)!important}.text-purple-500{--tw-text-opacity: 1 !important;color:rgb(168 85 247 / var(--tw-text-opacity))!important}.text-red-500{--tw-text-opacity: 1 !important;color:rgb(239 68 68 / var(--tw-text-opacity))!important}.text-red-600{--tw-text-opacity: 1 !important;color:rgb(220 38 38 / var(--tw-text-opacity))!important}.text-sky-500{--tw-text-opacity: 1 !important;color:rgb(14 165 233 / var(--tw-text-opacity))!important}.text-slate-400{--tw-text-opacity: 1 !important;color:rgb(148 163 184 / var(--tw-text-opacity))!important}.text-success{color:hsl(var(--success))!important}.text-warning{color:hsl(var(--warning))!important}.text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.text-white\/75{color:#ffffffbf!important}.text-zinc-300{--tw-text-opacity: 1 !important;color:rgb(212 212 216 / var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.underline-offset-2{text-underline-offset:2px!important}.underline-offset-4{text-underline-offset:4px!important}.caret-transparent{caret-color:transparent!important}.opacity-0{opacity:0!important}.opacity-100{opacity:1!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-none{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.outline-none{outline:2px solid transparent!important;outline-offset:2px!important}.outline{outline-style:solid!important}.outline-0{outline-width:0px!important}.outline-1{outline-width:1px!important}.outline-2{outline-width:2px!important}.-outline-offset-1{outline-offset:-1px!important}.-outline-offset-2{outline-offset:-2px!important}.outline-offset-0{outline-offset:0px!important}.outline-offset-1{outline-offset:1px!important}.outline-black{outline-color:#000!important}.outline-black\/20{outline-color:#0003!important}.outline-black\/5{outline-color:#0000000d!important}.outline-gray-300{outline-color:#d1d5db!important}.outline-transparent{outline-color:transparent!important}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-inset{--tw-ring-inset: inset !important}.ring-accent{--tw-ring-color: hsl(var(--accent)) !important}.ring-background{--tw-ring-color: hsl(var(--background)) !important}.ring-gray-300{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)) !important}.ring-zinc-950\/10{--tw-ring-color: rgb(9 9 11 / .1) !important}.ring-offset-0{--tw-ring-offset-width: 0px !important}.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)!important}.backdrop-blur-md{--tw-backdrop-blur: blur(12px) !important;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px) !important;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition-\[background-color\]{transition-property:background-color!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition-all{transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.duration-0{transition-duration:0s!important}.duration-1000{transition-duration:1s!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter!important;animation-duration:.15s!important;--tw-enter-opacity: initial !important;--tw-enter-scale: initial !important;--tw-enter-rotate: initial !important;--tw-enter-translate-x: initial !important;--tw-enter-translate-y: initial !important}.slide-in-from-left{--tw-enter-translate-x: -100% !important}.slide-in-from-right{--tw-enter-translate-x: 100% !important}.slide-in-from-top{--tw-enter-translate-y: -100% !important}.slide-out-to-right-full{--tw-exit-translate-x: 100% !important}.duration-0{animation-duration:0s!important}.duration-1000{animation-duration:1s!important}.duration-200{animation-duration:.2s!important}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)!important}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)!important}.running{animation-play-state:running!important}.repeat-infinite{animation-iteration-count:infinite!important}.\@container{container-type:inline-size!important}.\[--border-with\:0px\]{--border-with: 0px !important}.\[--btn-bg-hover\:theme\(colors\.accent\/90\%\)\]{--btn-bg-hover: hsl(var(--accent) / 90%) !important}.\[--btn-bg-hover\:theme\(colors\.destructive\/90\%\)\]{--btn-bg-hover: hsl(var(--destructive) / 90%) !important}.\[--btn-bg-hover\:theme\(colors\.success\/90\%\)\]{--btn-bg-hover: hsl(var(--success) / 90%) !important}.\[--btn-bg\:theme\(colors\.accent\)\]{--btn-bg: hsl(var(--accent)) !important}.\[--btn-bg\:theme\(colors\.destructive\)\]{--btn-bg: hsl(var(--destructive)) !important}.\[--btn-bg\:theme\(colors\.success\)\]{--btn-bg: hsl(var(--success)) !important}.\[--btn-color\:theme\(colors\.accent\)\]{--btn-color: hsl(var(--accent)) !important}.\[--btn-color\:theme\(colors\.destructive\)\]{--btn-color: hsl(var(--destructive)) !important}.\[--btn-color\:theme\(colors\.foreground\)\]{--btn-color: hsl(var(--foreground)) !important}.\[--btn-color\:theme\(colors\.success\)\]{--btn-color: hsl(var(--success)) !important}.\[--tw-enter-translate-x\:calc\(-16rem-100\%\)\]{--tw-enter-translate-x: calc(-16rem - 100%) !important}.\[--visual-viewport-vertical-padding\:16px\]{--visual-viewport-vertical-padding: 16px !important}.\[--visual-viewport-vertical-padding\:32px\]{--visual-viewport-vertical-padding: 32px !important}.placeholder\:text-muted::-moz-placeholder{color:hsl(var(--muted))!important}.placeholder\:text-muted::placeholder{color:hsl(var(--muted))!important}.before\:absolute:before{content:var(--tw-content)!important;position:absolute!important}.before\:inset-x-0:before{content:var(--tw-content)!important;left:0!important;right:0!important}.before\:inset-y-0:before{content:var(--tw-content)!important;top:0!important;bottom:0!important}.before\:-bottom-2:before{content:var(--tw-content)!important;bottom:-.5rem!important}.before\:bottom-\[-1\.5px\]:before{content:var(--tw-content)!important;bottom:-1.5px!important}.before\:left-\[8px\]:before{content:var(--tw-content)!important;left:8px!important}.before\:mb-4:before{content:var(--tw-content)!important;margin-bottom:1rem!important}.before\:me-4:before{content:var(--tw-content)!important;margin-inline-end:1rem!important}.before\:block:before{content:var(--tw-content)!important;display:block!important}.before\:w-\[calc\(100\%-16px\)\]:before{content:var(--tw-content)!important;width:calc(100% - 16px)!important}.before\:w-full:before{content:var(--tw-content)!important;width:100%!important}.before\:flex-1:before{content:var(--tw-content)!important;flex:1 1 0%!important}.before\:border-b-2:before{content:var(--tw-content)!important;border-bottom-width:2px!important}.before\:border-l:before{content:var(--tw-content)!important;border-left-width:1px!important}.before\:border-t:before{content:var(--tw-content)!important;border-top-width:1px!important}.before\:border-accent:before{content:var(--tw-content)!important;border-color:hsl(var(--accent))!important}.before\:border-border\/35:before{content:var(--tw-content)!important;border-color:hsl(var(--border) / .35)!important}.before\:border-border\/75:before{content:var(--tw-content)!important;border-color:hsl(var(--border) / .75)!important}.before\:bg-accent:before{content:var(--tw-content)!important;background-color:hsl(var(--accent))!important}.before\:leading-\[0\.25rem\]:before{content:var(--tw-content)!important;line-height:.25rem!important}.before\:opacity-0:before{content:var(--tw-content)!important;opacity:0!important}.before\:content-\[\'\'\]:before{--tw-content: "" !important;content:var(--tw-content)!important}.before\:content-\[\'\.\'\]:before{--tw-content: "." !important;content:var(--tw-content)!important}.after\:pointer-events-none:after{content:var(--tw-content)!important;pointer-events:none!important}.after\:absolute:after{content:var(--tw-content)!important;position:absolute!important}.after\:bottom-\[55\%\]:after{content:var(--tw-content)!important;bottom:55%!important}.after\:end-2\.5:after{content:var(--tw-content)!important;inset-inline-end:.625rem!important}.after\:ms-0\.5:after{content:var(--tw-content)!important;margin-inline-start:.125rem!important}.after\:ms-4:after{content:var(--tw-content)!important;margin-inline-start:1rem!important}.after\:mt-4:after{content:var(--tw-content)!important;margin-top:1rem!important}.after\:size-\[9px\]:after{content:var(--tw-content)!important;width:9px!important;height:9px!important}.after\:flex-1:after{content:var(--tw-content)!important;flex:1 1 0%!important}.after\:-translate-x-1\/2:after{content:var(--tw-content)!important;--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:translate-y-1\/2:after{content:var(--tw-content)!important;--tw-translate-y: 50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:rotate-45:after{content:var(--tw-content)!important;--tw-rotate: 45deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:border-b-\[1\.5px\]:after{content:var(--tw-content)!important;border-bottom-width:1.5px!important}.after\:border-r:after{content:var(--tw-content)!important;border-right-width:1px!important}.after\:border-r-\[1\.5px\]:after{content:var(--tw-content)!important;border-right-width:1.5px!important}.after\:border-t:after{content:var(--tw-content)!important;border-top-width:1px!important}.after\:border-border\/35:after{content:var(--tw-content)!important;border-color:hsl(var(--border) / .35)!important}.after\:border-border\/75:after{content:var(--tw-content)!important;border-color:hsl(var(--border) / .75)!important}.after\:border-muted:after{content:var(--tw-content)!important;border-color:hsl(var(--muted))!important}.after\:text-destructive:after{content:var(--tw-content)!important;color:hsl(var(--destructive))!important}.after\:content-\[\'\'\]:after{--tw-content: "" !important;content:var(--tw-content)!important}.after\:content-\[\'\*\'\]:after{--tw-content: "*" !important;content:var(--tw-content)!important}.first\:rounded-s-lg:first-child{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}.first\:border-s:first-child{border-inline-start-width:1px!important}.last\:rounded-e-lg:last-child{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.last\:border-e:last-child{border-inline-end-width:1px!important}.group\/row:last-child .group-last\/row\:border-b-0{border-bottom-width:0px!important}.has-\[\[data-ui\=item\]_\[data-ui\=icon\]\]\:min-w-\[max\(200px\,var\(--trigger-width\)\)\]:has([data-ui=item] [data-ui=icon]){min-width:max(200px,var(--trigger-width))!important}.has-\[\[data-ui\=item\]_kbd\]\:min-w-\[max\(176px\,var\(--trigger-width\)\)\]:has([data-ui=item] kbd){min-width:max(176px,var(--trigger-width))!important}.has-\[\[role\=dialog\]\]\:rounded-b-none:has([role=dialog]){border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.has-\[\[role\=dialog\]\]\:rounded-t-xl:has([role=dialog]){border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.has-\[input\[data-focused\=true\]\]\:border-blue-500:has(input[data-focused=true]){--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.has-\[input\[data-invalid\=true\]\[data-focused\=true\]\]\:border-blue-500:has(input[data-invalid=true][data-focused=true]){--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.has-\[input\[data-invalid\=true\]\]\:border-destructive:has(input[data-invalid=true]){border-color:hsl(var(--destructive))!important}.has-\[header\]\:px-2:has(header){padding-left:.5rem!important;padding-right:.5rem!important}.has-\[header\]\:pt-0:has(header){padding-top:0!important}.has-\[select\:disabled\]\:opacity-50:has(select:disabled){opacity:.5!important}.has-\[input\[data-focused\=true\]\]\:ring-1:has(input[data-focused=true]){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.has-\[input\[data-focused\=true\]\]\:ring-blue-500:has(input[data-focused=true]){--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.group[aria-expanded=true] .group-aria-\[expanded\=true\]\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:flex-row{flex-direction:row!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:flex-wrap{flex-wrap:wrap!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:text-nowrap{text-wrap:nowrap!important}.data-\[position\=left\]\:flex-row-reverse[data-position=left]{flex-direction:row-reverse!important}.data-\[position\=left\]\:justify-between[data-position=left]{justify-content:space-between!important}.data-\[invalid\]\:border-destructive[data-invalid]{border-color:hsl(var(--destructive))!important}.data-\[placeholder\]\:italic[data-placeholder]{font-style:italic!important}.data-\[pending\]\:text-transparent[data-pending]{color:transparent!important}.data-\[placeholder\]\:text-muted[data-placeholder]{color:hsl(var(--muted))!important}.data-\[pending\]\:opacity-75[data-pending]{opacity:.75!important}.group[data-pending] .group-data-\[pending\]\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.group[data-has-submenu] .group-data-\[has-submenu\]\:inline-block{display:inline-block!important}.group[data-pending] .group-data-\[pending\]\:flex{display:flex!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:flex-row{flex-direction:row!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:flex-wrap{flex-wrap:wrap!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:text-nowrap{text-wrap:nowrap!important}.group[data-variant=solid] .group-data-\[variant\=solid\]\:text-zinc-300{--tw-text-opacity: 1 !important;color:rgb(212 212 216 / var(--tw-text-opacity))!important}.peer[data-focused=true]~.peer-data-\[focused\=true\]\:flex{display:flex!important}.peer[data-focused=true]~.peer-data-\[focused\=true\]\:hidden{display:none!important}.group[data-placement=left] .group-placement-left\:-rotate-90{--tw-rotate: -90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-placement=right] .group-placement-right\:rotate-90{--tw-rotate: 90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-placement=bottom] .group-placement-bottom\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.type-literal\:px-0[data-type=literal]{padding-left:0!important;padding-right:0!important}.orientation-horizontal\:h-7[data-orientation=horizontal]{height:1.75rem!important}.orientation-horizontal\:min-w-64[data-orientation=horizontal]{min-width:16rem!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:top-\[50\%\]{top:50%!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:h-1{height:.25rem!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:w-full{width:100%!important}.orientation-vertical\:h-44[data-orientation=vertical]{height:11rem!important}.orientation-vertical\:w-7[data-orientation=vertical]{width:1.75rem!important}.orientation-vertical\:items-center[data-orientation=vertical]{align-items:center!important}.group[data-orientation=vertical] .group-orientation-vertical\:left-\[50\%\]{left:50%!important}.group[data-orientation=vertical] .group-orientation-vertical\:h-full{height:100%!important}.group[data-orientation=vertical] .group-orientation-vertical\:w-\[6px\]{width:6px!important}.group[data-orientation=vertical] .group-orientation-vertical\:translate-x-\[-50\%\]{--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-orientation=vertical] .group-orientation-vertical\:translate-y-\[-50\%\]{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.has-submenu\:pe-0[data-has-submenu]{padding-inline-end:0px!important}.group:where([data-rac])[data-open] .group-open\:mb-0{margin-bottom:0!important}.group:where([data-rac])[data-open] .group-open\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where([data-rac])[data-open] .group-open\:text-foreground{color:hsl(var(--foreground))!important}.group:where(:not([data-rac]))[open] .group-open\:mb-0{margin-bottom:0!important}.group:where(:not([data-rac]))[open] .group-open\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where(:not([data-rac]))[open] .group-open\:text-foreground{color:hsl(var(--foreground))!important}.entering\:duration-0[data-entering]{transition-duration:0s!important}.entering\:duration-200[data-entering]{transition-duration:.2s!important}.entering\:duration-300[data-entering]{transition-duration:.3s!important}.entering\:ease-out[data-entering]{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.entering\:animate-in[data-entering]{animation-name:enter!important;animation-duration:.15s!important;--tw-enter-opacity: initial !important;--tw-enter-scale: initial !important;--tw-enter-rotate: initial !important;--tw-enter-translate-x: initial !important;--tw-enter-translate-y: initial !important}.entering\:fade-in[data-entering]{--tw-enter-opacity: 0 !important}.entering\:zoom-in-95[data-entering]{--tw-enter-scale: .95 !important}.entering\:duration-0[data-entering]{animation-duration:0s!important}.entering\:duration-200[data-entering]{animation-duration:.2s!important}.entering\:duration-300[data-entering]{animation-duration:.3s!important}.entering\:ease-out[data-entering]{animation-timing-function:cubic-bezier(0,0,.2,1)!important}.has-\[\[role\=dialog\]\]\:entering\:zoom-in-100[data-entering]:has([role=dialog]){--tw-enter-scale: 1 !important}.has-\[\[role\=dialog\]\]\:entering\:slide-in-from-bottom[data-entering]:has([role=dialog]){--tw-enter-translate-y: 100% !important}.data-\[replacement\=left\]\:entering\:slide-in-from-left[data-entering][data-replacement=left]{--tw-enter-translate-x: -100% !important}.data-\[replacement\=right\]\:entering\:slide-in-from-right[data-entering][data-replacement=right]{--tw-enter-translate-x: 100% !important}.entering\:placement-left\:slide-in-from-right-1[data-placement=left][data-entering]{--tw-enter-translate-x: .25rem !important}.entering\:placement-right\:slide-in-from-left-1[data-placement=right][data-entering]{--tw-enter-translate-x: -.25rem !important}.entering\:placement-top\:slide-in-from-bottom-1[data-placement=top][data-entering]{--tw-enter-translate-y: .25rem !important}.entering\:placement-bottom\:slide-in-from-top-1[data-placement=bottom][data-entering]{--tw-enter-translate-y: -.25rem !important}.exiting\:duration-0[data-exiting]{transition-duration:0s!important}.exiting\:duration-200[data-exiting]{transition-duration:.2s!important}.exiting\:ease-in[data-exiting]{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.exiting\:animate-out[data-exiting]{animation-name:exit!important;animation-duration:.15s!important;--tw-exit-opacity: initial !important;--tw-exit-scale: initial !important;--tw-exit-rotate: initial !important;--tw-exit-translate-x: initial !important;--tw-exit-translate-y: initial !important}.exiting\:fade-out[data-exiting]{--tw-exit-opacity: 0 !important}.exiting\:zoom-out-95[data-exiting]{--tw-exit-scale: .95 !important}.exiting\:duration-0[data-exiting]{animation-duration:0s!important}.exiting\:duration-200[data-exiting]{animation-duration:.2s!important}.exiting\:ease-in[data-exiting]{animation-timing-function:cubic-bezier(.4,0,1,1)!important}.has-\[\[role\=dialog\]\]\:exiting\:zoom-out-100[data-exiting]:has([role=dialog]){--tw-exit-scale: 1 !important}.has-\[\[role\=dialog\]\]\:exiting\:slide-out-to-bottom[data-exiting]:has([role=dialog]){--tw-exit-translate-y: 100% !important}.data-\[replacement\=left\]\:exiting\:slide-out-to-left[data-exiting][data-replacement=left]{--tw-exit-translate-x: -100% !important}.data-\[replacement\=right\]\:exiting\:slide-out-to-right[data-exiting][data-replacement=right]{--tw-exit-translate-x: 100% !important}.exiting\:placement-left\:slide-out-to-right-1[data-placement=left][data-exiting]{--tw-exit-translate-x: .25rem !important}.exiting\:placement-right\:slide-out-to-left-1[data-placement=right][data-exiting]{--tw-exit-translate-x: -.25rem !important}.exiting\:placement-top\:slide-out-to-bottom-1[data-placement=top][data-exiting]{--tw-exit-translate-y: .25rem !important}.exiting\:placement-bottom\:slide-out-to-top-1[data-placement=bottom][data-exiting]{--tw-exit-translate-y: -.25rem !important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:border{border-width:1px!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:border-accent{border-color:hsl(var(--accent))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:bg-accent{background-color:hsl(var(--accent))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:border{border-width:1px!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:border-accent{border-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:bg-accent{background-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.unavailable\:text-destructive[data-unavailable]{color:hsl(var(--destructive))!important}.unavailable\:line-through[data-unavailable]{text-decoration-line:line-through!important}.unavailable\:decoration-destructive[data-unavailable]{text-decoration-color:hsl(var(--destructive))!important}.group[data-unavailable] .group-unavailable\:text-destructive{color:hsl(var(--destructive))!important}.group[data-unavailable] .group-unavailable\:line-through{text-decoration-line:line-through!important}.group[data-unavailable] .group-unavailable\:decoration-destructive{text-decoration-color:hsl(var(--destructive))!important}.invalid\:border-destructive:where([data-rac])[data-invalid]{border-color:hsl(var(--destructive))!important}.invalid\:border-destructive:where(:not([data-rac])):invalid{border-color:hsl(var(--destructive))!important}.group:where([data-rac])[data-invalid] .group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where(:not([data-rac])):invalid .group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where([data-rac])[data-empty] .group-empty\:invisible{visibility:hidden!important}.group:where(:not([data-rac])):empty .group-empty\:invisible{visibility:hidden!important}.focus-within\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:ring-0:where([data-rac])[data-focus-within]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-1:where([data-rac])[data-focus-within]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-inset:where([data-rac])[data-focus-within]{--tw-ring-inset: inset !important}.focus-within\:ring-blue-500:where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-within\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-within\:group-invalid\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-within\:group-invalid\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:ring-0:where(:not([data-rac])):focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-1:where(:not([data-rac])):focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-inset:where(:not([data-rac])):focus-within{--tw-ring-inset: inset !important}.focus-within\:ring-blue-500:where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-within\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-within\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-within\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-focus-within] .group-focus-within\:border-red-400{--tw-border-opacity: 1 !important;border-color:rgb(248 113 113 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):focus-within .group-focus-within\:border-red-400{--tw-border-opacity: 1 !important;border-color:rgb(248 113 113 / var(--tw-border-opacity))!important}.hover\:border:where([data-rac])[data-hovered]{border-width:1px!important}.hover\:border-border:where([data-rac])[data-hovered]{border-color:hsl(var(--border))!important}.hover\:bg-\[var\(--btn-bg-hover\)\]:where([data-rac])[data-hovered]{background-color:var(--btn-bg-hover)!important}.hover\:bg-black\/10:where([data-rac])[data-hovered]{background-color:#0000001a!important}.hover\:bg-gray-50:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(249 250 251 / var(--tw-bg-opacity))!important}.hover\:bg-transparent:where([data-rac])[data-hovered]{background-color:transparent!important}.hover\:bg-zinc-100:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-200:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-50:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.hover\:text-foreground:where([data-rac])[data-hovered]{color:hsl(var(--foreground))!important}.hover\:underline:where([data-rac])[data-hovered]{text-decoration-line:underline!important}.hover\:no-underline:where([data-rac])[data-hovered]{text-decoration-line:none!important}.hover\:shadow-md:where([data-rac])[data-hovered]{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:ring-gray-400:where([data-rac])[data-hovered]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)) !important}.hover\:after\:border-foreground:where([data-rac])[data-hovered]:after{content:var(--tw-content)!important;border-color:hsl(var(--foreground))!important}.hover\:border:where(:not([data-rac])):hover{border-width:1px!important}.hover\:border-border:where(:not([data-rac])):hover{border-color:hsl(var(--border))!important}.hover\:bg-\[var\(--btn-bg-hover\)\]:where(:not([data-rac])):hover{background-color:var(--btn-bg-hover)!important}.hover\:bg-black\/10:where(:not([data-rac])):hover{background-color:#0000001a!important}.hover\:bg-gray-50:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(249 250 251 / var(--tw-bg-opacity))!important}.hover\:bg-transparent:where(:not([data-rac])):hover{background-color:transparent!important}.hover\:bg-zinc-100:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-200:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-50:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.hover\:text-foreground:where(:not([data-rac])):hover{color:hsl(var(--foreground))!important}.hover\:underline:where(:not([data-rac])):hover{text-decoration-line:underline!important}.hover\:no-underline:where(:not([data-rac])):hover{text-decoration-line:none!important}.hover\:shadow-md:where(:not([data-rac])):hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:ring-gray-400:where(:not([data-rac])):hover{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)) !important}.hover\:after\:border-foreground:where(:not([data-rac])):hover:after{content:var(--tw-content)!important;border-color:hsl(var(--foreground))!important}.group:where([data-rac])[data-hovered] .group-hover\:scale-110{--tw-scale-x: 1.1 !important;--tw-scale-y: 1.1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where([data-rac])[data-hovered] .group-hover\:rounded-lg{border-radius:.5rem!important}.group:where([data-rac])[data-hovered] .group-hover\:bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-hovered] .group-hover\:text-foreground{color:hsl(var(--foreground))!important}.group:where(:not([data-rac])):hover .group-hover\:scale-110{--tw-scale-x: 1.1 !important;--tw-scale-y: 1.1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where(:not([data-rac])):hover .group-hover\:rounded-lg{border-radius:.5rem!important}.group:where(:not([data-rac])):hover .group-hover\:bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):hover .group-hover\:text-foreground{color:hsl(var(--foreground))!important}.focus\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-border:where([data-rac])[data-focused]{border-color:hsl(var(--border))!important}.focus\:bg-accent:where([data-rac])[data-focused]{background-color:hsl(var(--accent))!important}.focus\:bg-zinc-100:where([data-rac])[data-focused]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.focus\:text-white:where([data-rac])[data-focused]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:ring-0:where([data-rac])[data-focused]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-1:where([data-rac])[data-focused]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-inset:where([data-rac])[data-focused]{--tw-ring-inset: inset !important}.focus\:ring-blue-500:where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus\:data-\[placeholder\]\:text-white[data-placeholder]:where([data-rac])[data-focused]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus\:group-invalid\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus\:group-invalid\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-border:where(:not([data-rac])):focus{border-color:hsl(var(--border))!important}.focus\:bg-accent:where(:not([data-rac])):focus{background-color:hsl(var(--accent))!important}.focus\:bg-zinc-100:where(:not([data-rac])):focus{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.focus\:text-white:where(:not([data-rac])):focus{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:ring-0:where(:not([data-rac])):focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-1:where(:not([data-rac])):focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-inset:where(:not([data-rac])):focus{--tw-ring-inset: inset !important}.focus\:ring-blue-500:where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus\:data-\[placeholder\]\:text-white[data-placeholder]:where(:not([data-rac])):focus{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus\:group-invalid\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus\:group-invalid\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:rounded:where([data-rac])[data-focus-visible]{border-radius:.25rem!important}.focus-visible\:rounded-t-xl:where([data-rac])[data-focus-visible]{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.focus-visible\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:outline-none:where([data-rac])[data-focus-visible]{outline:2px solid transparent!important;outline-offset:2px!important}.focus-visible\:outline:where([data-rac])[data-focus-visible]{outline-style:solid!important}.focus-visible\:outline-0:where([data-rac])[data-focus-visible]{outline-width:0px!important}.focus-visible\:outline-2:where([data-rac])[data-focus-visible]{outline-width:2px!important}.focus-visible\:-outline-offset-1:where([data-rac])[data-focus-visible]{outline-offset:-1px!important}.focus-visible\:-outline-offset-2:where([data-rac])[data-focus-visible]{outline-offset:-2px!important}.focus-visible\:outline-offset-1:where([data-rac])[data-focus-visible]{outline-offset:1px!important}.focus-visible\:outline-offset-2:where([data-rac])[data-focus-visible]{outline-offset:2px!important}.focus-visible\:outline-blue-500:where([data-rac])[data-focus-visible]{outline-color:#3b82f6!important}.focus-visible\:ring-1:where([data-rac])[data-focus-visible]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-2:where([data-rac])[data-focus-visible]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-inset:where([data-rac])[data-focus-visible]{--tw-ring-inset: inset !important}.focus-visible\:ring-blue-500:where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-visible\:ring-offset-0:where([data-rac])[data-focus-visible]{--tw-ring-offset-width: 0px !important}.group[data-readonly] .focus-visible\:group-data-\[readonly\]\:outline-blue-300:where([data-rac])[data-focus-visible]{outline-color:#93c5fd!important}.focus-visible\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-visible\:group-invalid\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-visible\:group-invalid\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:rounded:where(:not([data-rac])):focus-visible{border-radius:.25rem!important}.focus-visible\:rounded-t-xl:where(:not([data-rac])):focus-visible{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.focus-visible\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:outline-none:where(:not([data-rac])):focus-visible{outline:2px solid transparent!important;outline-offset:2px!important}.focus-visible\:outline:where(:not([data-rac])):focus-visible{outline-style:solid!important}.focus-visible\:outline-0:where(:not([data-rac])):focus-visible{outline-width:0px!important}.focus-visible\:outline-2:where(:not([data-rac])):focus-visible{outline-width:2px!important}.focus-visible\:-outline-offset-1:where(:not([data-rac])):focus-visible{outline-offset:-1px!important}.focus-visible\:-outline-offset-2:where(:not([data-rac])):focus-visible{outline-offset:-2px!important}.focus-visible\:outline-offset-1:where(:not([data-rac])):focus-visible{outline-offset:1px!important}.focus-visible\:outline-offset-2:where(:not([data-rac])):focus-visible{outline-offset:2px!important}.focus-visible\:outline-blue-500:where(:not([data-rac])):focus-visible{outline-color:#3b82f6!important}.focus-visible\:ring-1:where(:not([data-rac])):focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-2:where(:not([data-rac])):focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-inset:where(:not([data-rac])):focus-visible{--tw-ring-inset: inset !important}.focus-visible\:ring-blue-500:where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-visible\:ring-offset-0:where(:not([data-rac])):focus-visible{--tw-ring-offset-width: 0px !important}.group[data-readonly] .focus-visible\:group-data-\[readonly\]\:outline-blue-300:where(:not([data-rac])):focus-visible{outline-color:#93c5fd!important}.focus-visible\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-visible\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-visible\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:rounded-lg{border-radius:.5rem!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline{outline-style:solid!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline{outline-style:solid!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-2{outline-width:2px!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-2{outline-width:2px!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-offset-2{outline-offset:2px!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-offset-2{outline-offset:2px!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-blue-500{outline-color:#3b82f6!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-blue-500{outline-color:#3b82f6!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:rounded-lg{border-radius:.5rem!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline{outline-style:solid!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline{outline-style:solid!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-2{outline-width:2px!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-2{outline-width:2px!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-offset-2{outline-offset:2px!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-offset-2{outline-offset:2px!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-blue-500{outline-color:#3b82f6!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-blue-500{outline-color:#3b82f6!important}.group\/control:where([data-rac])[data-focus-visible] .group[data-readonly] .group-focus-visible\/control\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group:where([data-rac])[data-focus-visible][data-readonly] .group-focus-visible\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group\/control:where(:not([data-rac])):focus-visible .group[data-readonly] .group-focus-visible\/control\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group:where(:not([data-rac])):focus-visible[data-readonly] .group-focus-visible\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.pressed\:scale-\[0\.97\][data-pressed]{--tw-scale-x: .97 !important;--tw-scale-y: .97 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.pressed\:bg-\[var\(--btn-bg-hover\)\][data-pressed]{background-color:var(--btn-bg-hover)!important}.pressed\:bg-accent\/90[data-pressed]{background-color:hsl(var(--accent) / .9)!important}.pressed\:bg-black\/20[data-pressed]{background-color:#0003!important}.pressed\:bg-transparent[data-pressed]{background-color:transparent!important}.pressed\:bg-zinc-50[data-pressed]{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.pressed\:text-white[data-pressed]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.pressed\:opacity-75[data-pressed]{opacity:.75!important}.group[data-ui=button-group] .group-data-\[ui\=button-group\]\:pressed\:scale-100[data-pressed]{--tw-scale-x: 1 !important;--tw-scale-y: 1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-ui=button-group] .group-data-\[ui\=button-group\]\:pressed\:opacity-100[data-pressed]{opacity:1!important}.group[data-pressed] .group-pressed\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.selected\:z-20[data-selected]{z-index:20!important}.selected\:rounded-\[calc\(theme\(borderRadius\.lg\)-2px\)\][data-selected]{border-radius:calc(.5rem - 2px)!important}.selected\:border[data-selected]{border-width:1px!important}.selected\:border-accent[data-selected]{border-color:hsl(var(--accent))!important}.selected\:border-destructive[data-selected]{border-color:hsl(var(--destructive))!important}.selected\:border-success[data-selected]{border-color:hsl(var(--success))!important}.selected\:border-warning[data-selected]{border-color:hsl(var(--warning))!important}.selected\:bg-accent[data-selected]{background-color:hsl(var(--accent))!important}.selected\:bg-accent\/5[data-selected]{background-color:hsl(var(--accent) / .05)!important}.selected\:bg-accent\/\[0\.085\][data-selected]{background-color:hsl(var(--accent) / .085)!important}.selected\:bg-background[data-selected]{background-color:hsl(var(--background))!important}.selected\:bg-destructive[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:bg-success[data-selected]{background-color:hsl(var(--success))!important}.selected\:bg-warning[data-selected]{background-color:hsl(var(--warning))!important}.selected\:text-foreground[data-selected]{color:hsl(var(--foreground))!important}.selected\:text-white[data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selected\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\][data-selected]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.selected\:shadow-sm[data-selected]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.selected\:outline-0[data-selected]{outline-width:0px!important}.before\:selected\:left-\[-1\.5px\][data-selected]:before{content:var(--tw-content)!important;left:-1.5px!important}.selected\:before\:h-\[2px\][data-selected]:before{content:var(--tw-content)!important;height:2px!important}.before\:selected\:w-\[2px\][data-selected]:before{content:var(--tw-content)!important;width:2px!important}.before\:selected\:bg-accent[data-selected]:before{content:var(--tw-content)!important;background-color:hsl(var(--accent))!important}.selected\:invalid\:border-destructive:where([data-rac])[data-invalid][data-selected]{border-color:hsl(var(--destructive))!important}.invalid\:selected\:bg-destructive\/15[data-selected]:where([data-rac])[data-invalid]{background-color:hsl(var(--destructive) / .15)!important}.selected\:invalid\:bg-destructive:where([data-rac])[data-invalid][data-selected]{background-color:hsl(var(--destructive))!important}.selected\:invalid\:text-white:where([data-rac])[data-invalid][data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selected\:invalid\:border-destructive:where(:not([data-rac])):invalid[data-selected]{border-color:hsl(var(--destructive))!important}.invalid\:selected\:bg-destructive\/15[data-selected]:where(:not([data-rac])):invalid{background-color:hsl(var(--destructive) / .15)!important}.selected\:invalid\:bg-destructive:where(:not([data-rac])):invalid[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:invalid\:text-white:where(:not([data-rac])):invalid[data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.hover\:selected\:bg-zinc-100[data-selected]:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:selected\:bg-zinc-100[data-selected]:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group[data-selected] .group-selected\:visible{visibility:visible!important}.group[data-selected] .group-selected\:flex{display:flex!important}.group[data-selected] .group-selected\:size-1\.5{width:.375rem!important;height:.375rem!important}.group\/control[data-selected] .group-selected\/control\:translate-x-\[78\%\]{--tw-translate-x: 78% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-selected] .group-selected\:border{border-width:1px!important}.group\/control[data-selected] .group-selected\/control\:border-accent,.group[data-selected] .group-selected\:border-accent{border-color:hsl(var(--accent))!important}.group\/control[data-selected] .group-selected\/control\:bg-accent,.group[data-selected] .group-selected\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected] .group-selected\:bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.group[data-selected] .group-selected\:font-semibold{font-weight:600!important}.group[data-selected] .group-selected\:text-foreground{color:hsl(var(--foreground))!important}.group\/control[data-selected] .group-selected\/control\:shadow-\[inset_0_0_0_1px_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 0 0 1px rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected] .group-selected\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected]:where([data-rac])[data-hovered] .group-selected\:group-hover\:bg-accent\/15{background-color:hsl(var(--accent) / .15)!important}.group[data-selected]:where(:not([data-rac])):hover .group-selected\:group-hover\:bg-accent\/15{background-color:hsl(var(--accent) / .15)!important}.group[data-selected][data-pressed] .group-selected\:group-pressed\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-pressed] .group-selected\:group-pressed\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selection-start\:rounded-s-lg[data-selection-start]{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:rounded-lg{border-radius:.5rem!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:border{border-width:1px!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:border-accent{border-color:hsl(var(--accent))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-hovered] .group-selected\:group-selection-start\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):hover .group-selected\:group-selection-start\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.selection-end\:rounded-e-lg[data-selection-end]{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:rounded-lg{border-radius:.5rem!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:border{border-width:1px!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:border-accent{border-color:hsl(var(--accent))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-hovered] .group-selected\:group-selection-end\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):hover .group-selected\:group-selection-end\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.dragging\:border-8[data-dragging]{border-width:8px!important}.dragging\:border-accent[data-dragging]{border-color:hsl(var(--accent))!important}.drop-target\:border-solid[data-drop-target]{border-style:solid!important}.drop-target\:bg-accent\/20[data-drop-target]{background-color:hsl(var(--accent) / .2)!important}.drop-target\:outline[data-drop-target]{outline-style:solid!important}.drop-target\:outline-2[data-drop-target]{outline-width:2px!important}.drop-target\:outline-offset-2[data-drop-target]{outline-offset:2px!important}.drop-target\:outline-blue-500[data-drop-target]{outline-color:#3b82f6!important}.group[data-readonly] .drop-target\:group-data-\[readonly\]\:outline-blue-300[data-drop-target]{outline-color:#93c5fd!important}.resizing\:w-\[2px\][data-resizing]{width:2px!important}.resizing\:bg-accent[data-resizing]{background-color:hsl(var(--accent))!important}.resizing\:pl-\[7px\][data-resizing]{padding-left:7px!important}.disabled\:cursor-default:where([data-rac])[data-disabled]{cursor:default!important}.disabled\:cursor-not-allowed:where([data-rac])[data-disabled]{cursor:not-allowed!important}.disabled\:text-muted:where([data-rac])[data-disabled]{color:hsl(var(--muted))!important}.disabled\:no-underline:where([data-rac])[data-disabled]{text-decoration-line:none!important}.disabled\:opacity-100:where([data-rac])[data-disabled]{opacity:1!important}.disabled\:opacity-50:where([data-rac])[data-disabled]{opacity:.5!important}.disabled\:cursor-default:where(:not([data-rac])):disabled{cursor:default!important}.disabled\:cursor-not-allowed:where(:not([data-rac])):disabled{cursor:not-allowed!important}.disabled\:text-muted:where(:not([data-rac])):disabled{color:hsl(var(--muted))!important}.disabled\:no-underline:where(:not([data-rac])):disabled{text-decoration-line:none!important}.disabled\:opacity-100:where(:not([data-rac])):disabled{opacity:1!important}.disabled\:opacity-50:where(:not([data-rac])):disabled{opacity:.5!important}.group\/control:where([data-rac])[data-disabled] .group-disabled\/control\:bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-disabled] .group-disabled\:opacity-50{opacity:.5!important}.group\/control:where(:not([data-rac])):disabled .group-disabled\/control\:bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):disabled .group-disabled\:opacity-50{opacity:.5!important}@container (min-width: 28rem){.\@md\:max-w-40{max-width:10rem!important}}@container (min-width: 32px){.\@\[32px\]\:w-2\/5{width:40%!important}}@container (min-width: 40px){.\@\[40px\]\:w-1\/3{width:33.333333%!important}}@container (min-width: 64px){.\@\[64px\]\:w-1\/4{width:25%!important}}@container (min-width: 128px){.\@\[128px\]\:w-1\/5{width:20%!important}}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2!important}.sm\:col-span-3{grid-column:span 3 / span 3!important}.sm\:col-span-4{grid-column:span 4 / span 4!important}.sm\:col-span-5{grid-column:span 5 / span 5!important}.sm\:me-auto{margin-inline-end:auto!important}.sm\:block{display:block!important}.sm\:flex{display:flex!important}.sm\:hidden{display:none!important}.sm\:size-3\.5{width:.875rem!important;height:.875rem!important}.sm\:size-4{width:1rem!important;height:1rem!important}.sm\:size-5{width:1.25rem!important;height:1.25rem!important}.sm\:size-7{width:1.75rem!important;height:1.75rem!important}.sm\:h-7{height:1.75rem!important}.sm\:w-72{width:18rem!important}.sm\:w-80{width:20rem!important}.sm\:w-96{width:24rem!important}.sm\:min-w-72{min-width:18rem!important}.sm\:min-w-96{min-width:24rem!important}.sm\:max-w-2xl{max-width:42rem!important}.sm\:max-w-3xl{max-width:48rem!important}.sm\:max-w-4xl{max-width:56rem!important}.sm\:max-w-5xl{max-width:64rem!important}.sm\:max-w-lg{max-width:32rem!important}.sm\:max-w-md{max-width:28rem!important}.sm\:max-w-sm{max-width:24rem!important}.sm\:max-w-xl{max-width:36rem!important}.sm\:max-w-xs{max-width:20rem!important}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}.sm\:grid-cols-\[1fr_16px_1fr_36px\]{grid-template-columns:1fr 16px 1fr 36px!important}.sm\:grid-cols-\[1fr_calc\(theme\(size\.4\)\+20px\)\]{grid-template-columns:1fr calc(1rem + 20px)!important}.sm\:grid-cols-\[36px_1fr_minmax\(36px\,max-content\)_minmax\(36px\,max-content\)\]{grid-template-columns:36px 1fr minmax(36px,max-content) minmax(36px,max-content)!important}.sm\:grid-cols-\[calc\(theme\(size\.4\)\+20px\)_1fr_calc\(theme\(size\.4\)\+20px\)\]{grid-template-columns:calc(1rem + 20px) 1fr calc(1rem + 20px)!important}.sm\:flex-row{flex-direction:row!important}.sm\:gap-0{gap:0px!important}.sm\:self-start{align-self:flex-start!important}.sm\:p-12{padding:3rem!important}.sm\:p-\[calc\(theme\(spacing\[1\.5\]\)-var\(--border-with\,1px\)\)\]{padding:calc(.375rem - var(--border-with,1px))!important}.sm\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.sm\:px-\[calc\(theme\(size\.9\)\+10px\)\]{padding-left:calc(2.25rem + 10px)!important;padding-right:calc(2.25rem + 10px)!important}.sm\:py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.sm\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.sm\:py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.sm\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}.sm\:py-\[calc\(theme\(spacing\[1\.5\]\)-1px\)\]{padding-top:calc(.375rem - 1px)!important;padding-bottom:calc(.375rem - 1px)!important}.sm\:py-\[calc\(theme\(spacing\[1\.5\]\)-var\(--border-with\,1px\)\)\]{padding-top:calc(.375rem - var(--border-with,1px))!important;padding-bottom:calc(.375rem - var(--border-with,1px))!important}.sm\:pe-1{padding-inline-end:.25rem!important}.sm\:pe-9{padding-inline-end:2.25rem!important}.sm\:ps-14{padding-inline-start:3.5rem!important}.sm\:ps-8{padding-inline-start:2rem!important}.sm\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.sm\:text-sm\/6{font-size:.875rem!important;line-height:1.5rem!important}.sm\:text-xs{font-size:.75rem!important;line-height:1rem!important}.sm\:text-xs\/6{font-size:.75rem!important;line-height:1.5rem!important}.sm\:leading-4{line-height:1rem!important}.sm\:leading-5{line-height:1.25rem!important}.after\:sm\:size-\[7\.5px\]:after{content:var(--tw-content)!important;width:7.5px!important;height:7.5px!important}.sm\:has-\[\[role\=alertdialog\]\]\:max-w-md:has([role=alertdialog]){max-width:28rem!important}.sm\:has-\[\[role\=dialog\]\]\:max-w-lg:has([role=dialog]){max-width:32rem!important}.sm\:has-\[\[role\=dialog\]\]\:rounded-xl:has([role=dialog]){border-radius:.75rem!important}.sm\:has-\[\[role\=dialog\]\]\:entering\:zoom-in-95[data-entering]:has([role=dialog]){--tw-enter-scale: .95 !important}.sm\:has-\[\[role\=dialog\]\]\:entering\:slide-in-from-bottom-0[data-entering]:has([role=dialog]){--tw-enter-translate-y: 0px !important}.sm\:has-\[\[role\=dialog\]\]\:exiting\:zoom-out-95[data-exiting]:has([role=dialog]){--tw-exit-scale: .95 !important}.sm\:has-\[\[role\=dialog\]\]\:exiting\:slide-out-to-bottom-0[data-exiting]:has([role=dialog]){--tw-exit-translate-y: 0px !important}}@media (min-width: 768px){.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:flex-row{flex-direction:row!important}.md\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width: 1024px){.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:p-10{padding:2.5rem!important}.lg\:p-8{padding:2rem!important}.lg\:px-8{padding-left:2rem!important;padding-right:2rem!important}}.ltr\:ms-1:where([dir=ltr],[dir=ltr] *){margin-inline-start:.25rem!important}.rtl\:space-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 1 !important}.rtl\:after\:translate-x-1\.5:where([dir=rtl],[dir=rtl] *):after{content:var(--tw-content)!important;--tw-translate-x: .375rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group\/control[data-selected] .group-selected\/control\:rtl\:-translate-x-\[78\%\]:where([dir=rtl],[dir=rtl] *){--tw-translate-x: -78% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (prefers-color-scheme: dark){.dark\:border{border-width:1px!important}.dark\:border-0{border-width:0px!important}.dark\:border-\[1\.5px\]{border-width:1.5px!important}.dark\:border-none{border-style:none!important}.dark\:border-destructive\/40{border-color:hsl(var(--destructive) / .4)!important}.dark\:border-success\/40{border-color:hsl(var(--success) / .4)!important}.dark\:border-warning\/40{border-color:hsl(var(--warning) / .4)!important}.dark\:border-white\/10{border-color:#ffffff1a!important}.dark\:border-white\/15{border-color:#ffffff26!important}.dark\:border-zinc-600{--tw-border-opacity: 1 !important;border-color:rgb(82 82 91 / var(--tw-border-opacity))!important}.dark\:border-zinc-600\/30{border-color:#52525b4d!important}.dark\:border-b-border{border-bottom-color:hsl(var(--border))!important}.dark\:border-b-white\/20{border-bottom-color:#fff3!important}.dark\:border-r-border{border-right-color:hsl(var(--border))!important}.dark\:border-t-border{border-top-color:hsl(var(--border))!important}.dark\:bg-background{background-color:hsl(var(--background))!important}.dark\:bg-destructive\/35{background-color:hsl(var(--destructive) / .35)!important}.dark\:bg-success\/35{background-color:hsl(var(--success) / .35)!important}.dark\:bg-transparent{background-color:transparent!important}.dark\:bg-warning\/35{background-color:hsl(var(--warning) / .35)!important}.dark\:bg-zinc-300{--tw-bg-opacity: 1 !important;background-color:rgb(212 212 216 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-600\/45{background-color:#52525b73!important}.dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-800{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-900{--tw-bg-opacity: 1 !important;background-color:rgb(24 24 27 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-950\/50{background-color:#09090b80!important}.dark\:text-gray-400{--tw-text-opacity: 1 !important;color:rgb(156 163 175 / var(--tw-text-opacity))!important}.dark\:shadow-none{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.dark\:outline-white\/20{outline-color:#fff3!important}.dark\:ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.dark\:ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.dark\:ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1) !important}.dark\:ring-white\/15{--tw-ring-color: rgb(255 255 255 / .15) !important}.dark\:ring-zinc-700{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(63 63 70 / var(--tw-ring-opacity)) !important}.dark\:ring-zinc-800{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(39 39 42 / var(--tw-ring-opacity)) !important}.dark\:\[--border-with\:0px\]{--border-with: 0px !important}.dark\:data-\[placeholder\]\:text-white[data-placeholder]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:dark\:border-0{border-width:0px!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:dark\:border-0{border-width:0px!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group:where([data-rac])[data-invalid] .group-invalid\:dark\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where(:not([data-rac])):invalid .group-invalid\:dark\:border-destructive{border-color:hsl(var(--destructive))!important}.dark\:hover\:bg-white\/10:where([data-rac])[data-hovered]{background-color:#ffffff1a!important}.dark\:hover\:bg-zinc-700:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-zinc-800:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-white\/10:where(:not([data-rac])):hover{background-color:#ffffff1a!important}.dark\:hover\:bg-zinc-700:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-zinc-800:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-hovered] .dark\:group-hover\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):hover .dark\:group-hover\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.focus\:dark\:bg-zinc-700:where([data-rac])[data-focused]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.focus\:dark\:bg-zinc-700:where(:not([data-rac])):focus{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:pressed\:bg-white\/20[data-pressed]{background-color:#fff3!important}.dark\:pressed\:bg-zinc-800[data-pressed]{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.selected\:dark\:border-0[data-selected]{border-width:0px!important}.dark\:selected\:bg-accent\/35[data-selected]{background-color:hsl(var(--accent) / .35)!important}.dark\:selected\:bg-accent\/40[data-selected]{background-color:hsl(var(--accent) / .4)!important}.dark\:selected\:bg-zinc-600[data-selected]{--tw-bg-opacity: 1 !important;background-color:rgb(82 82 91 / var(--tw-bg-opacity))!important}.selected\:dark\:bg-destructive[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:dark\:bg-success[data-selected]{background-color:hsl(var(--success))!important}.selected\:dark\:bg-warning[data-selected]{background-color:hsl(var(--warning))!important}.dark\:invalid\:selected\:bg-destructive\/30[data-selected]:where([data-rac])[data-invalid]{background-color:hsl(var(--destructive) / .3)!important}.dark\:invalid\:selected\:bg-destructive\/30[data-selected]:where(:not([data-rac])):invalid{background-color:hsl(var(--destructive) / .3)!important}.dark\:hover\:selected\:bg-zinc-700[data-selected]:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:selected\:bg-zinc-700[data-selected]:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group\/control[data-selected] .group-selected\/control\:dark\:border-0,.group[data-selected] .group-selected\:dark\:border-0{border-width:0px!important}.group[data-selected] .group-selected\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group\/control[data-selected] .group-selected\/control\:dark\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected]:where([data-rac])[data-hovered] .group-selected\:dark\:group-hover\:bg-accent\/50{background-color:hsl(var(--accent) / .5)!important}.group[data-selected]:where(:not([data-rac])):hover .group-selected\:dark\:group-hover\:bg-accent\/50{background-color:hsl(var(--accent) / .5)!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:dark\:border-0{border-width:0px!important}.group[data-selected][data-selection-start]:where([data-rac])[data-hovered] .group-selected\:group-selection-start\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):hover .group-selected\:group-selection-start\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:dark\:border-0{border-width:0px!important}.group[data-selected][data-selection-end]:where([data-rac])[data-hovered] .group-selected\:group-selection-end\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):hover .group-selected\:group-selection-end\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.drop-target\:dark\:bg-accent\/75[data-drop-target]{background-color:hsl(var(--accent) / .75)!important}.group\/control:where([data-rac])[data-disabled] .group-disabled\/control\:dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group\/control:where(:not([data-rac])):disabled .group-disabled\/control\:dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}}@media (forced-colors: active){.forced-colors\:bg-\[ButtonBorder\]{background-color:ButtonBorder!important}.forced-colors\:resizing\:bg-\[Highlight\][data-resizing]{background-color:Highlight!important}}.\[\&\.border\]\:hover\:no-underline:where([data-rac])[data-hovered].border{text-decoration-line:none!important}.\[\&\.border\]\:hover\:no-underline:where(:not([data-rac])):hover.border{text-decoration-line:none!important}.\[\&\.rounded-full\>img\]\:rounded-full.rounded-full>img{border-radius:9999px!important}.\[\&\.rounded-full\>svg\]\:rounded-full.rounded-full>svg{border-radius:9999px!important}.\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none!important}.\[\&\:first-child\]\:-mt-\[1px\]:first-child{margin-top:-1px!important}.\[\&\:focus-within\]\:z-20:focus-within{z-index:20!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.\[\&\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:has\(\[data-ui\=description\]\)\:not\(\[class\*\=gap-y\]\)\]\:gap-y-4:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:has([data-ui=description]):not([class*=gap-y]){row-gap:1rem!important}.\[\&\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-\]\)\]\:gap-y-3:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-]){row-gap:.75rem!important}.\[\&\:has\(\>\[data-ui\=text-field\]\)\]\:rounded-lg:has(>[data-ui=text-field]){border-radius:.5rem!important}.\[\&\:has\(\>\[data-ui\=text-field\]\)\]\:shadow-sm:has(>[data-ui=text-field]){--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\:has\(\[data-disabled\=true\]\)\]\:opacity-50:has([data-disabled=true]){opacity:.5!important}.\[\&\:has\(\[data-replacement\=right\]\)\]\:justify-end:has([data-replacement=right]){justify-content:flex-end!important}.\[\&\:has\(\[data-ui\=box\]\+\[data-ui\=errorMessage\]\)_\[data-ui\=errorMessage\]\]\:mt-2:has([data-ui=box]+[data-ui=errorMessage]) [data-ui=errorMessage]{margin-top:.5rem!important}.\[\&\:has\(\[data-ui\=description\]\+\[data-ui\=errorMessage\]\)_\[data-ui\=errorMessage\]\]\:mt-1:has([data-ui=description]+[data-ui=errorMessage]) [data-ui=errorMessage]{margin-top:.25rem!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=icon\]\]\:col-start-1:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=icon]{grid-column-start:1!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-start-2:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=label]{grid-column-start:2!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-start-2:has([data-ui=icon]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=description]{grid-column-start:2!important}.\[\&\:has\(\[data-ui\=icon\]\+input\)\>input\]\:ps-10:has([data-ui=icon]+input)>input{padding-inline-start:2.5rem!important}@media (min-width: 640px){.sm\:\[\&\:has\(\[data-ui\=icon\]\+input\)\>input\]\:ps-8:has([data-ui=icon]+input)>input{padding-inline-start:2rem!important}}.\[\&\:has\(\[data-ui\=item\]\>\[data-ui\=icon\]\+\[data-ui\=label\]\)_header\]\:px-4:has([data-ui=item]>[data-ui=icon]+[data-ui=label]) header{padding-left:1rem!important;padding-right:1rem!important}.\[\&\:has\(\[data-ui\=kbd\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-end-\[-2\]:has([data-ui=kbd]) [data-ui=item]>[data-ui=description]{grid-column-end:-2!important}.\[\&\:has\(\[data-ui\=kbd\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-end-\[-2\]:has([data-ui=kbd]) [data-ui=item]>[data-ui=label]{grid-column-end:-2!important}.\[\&\:has\(\[role\=dialog\]\)\]\:items-end:has([role=dialog]){align-items:flex-end!important}.\[\&\:has\(\[role\=dialog\]\)\]\:px-0:has([role=dialog]){padding-left:0!important;padding-right:0!important}.\[\&\:has\(\[role\=dialog\]\)\]\:pb-0:has([role=dialog]){padding-bottom:0!important}.\[\&\:has\(\[role\=dialog\]\)\]\:pt-4:has([role=dialog]){padding-top:1rem!important}.\[\&\:has\(\[role\=dialog\]\)\]\:\[--visual-viewport-vertical-padding\:16px\]:has([role=dialog]){--visual-viewport-vertical-padding: 16px !important}@media (min-width: 640px){.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:items-center:has([role=dialog]){align-items:center!important}.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:p-4:has([role=dialog]){padding:1rem!important}.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:\[--visual-viewport-vertical-padding\:32px\]:has([role=dialog]){--visual-viewport-vertical-padding: 32px !important}}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-start-2:has([role=img]+[data-ui=label]) [data-ui=item]>[data-ui=label]{grid-column-start:2!important}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-start-2:has([role=img]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=description]{grid-column-start:2!important}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:leading-5:has([role=img]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=label]{line-height:1.25rem!important}.\[\&\:has\(\[role\=menuitemradio\]\)_header\]\:ps-8:has([role=menuitemradio]) header{padding-inline-start:2rem!important}.\[\&\:has\(\[role\=menuitemradio\]\>\[data-ui\=item\]\>\[data-ui\=icon\]\+\[data-ui\=label\]\)_header\]\:ps-9:has([role=menuitemradio]>[data-ui=item]>[data-ui=icon]+[data-ui=label]) header{padding-inline-start:2.25rem!important}.\[\&\:has\(_input\[data-disabled\=true\]\)\]\:border-border\/50:has(input[data-disabled=true]){border-color:hsl(var(--border) / .5)!important}.\[\&\:hover\]\:z-20:hover{z-index:20!important}.\[\&\:not\(\:first-child\)\]\:my-1\.5:not(:first-child){margin-top:.375rem!important;margin-bottom:.375rem!important}.\[\&\:not\(\:first-child\)\]\:border-t:not(:first-child){border-top-width:1px!important}.\[\&\:not\(\:first-child\)\]\:border-t-border\/40:not(:first-child){border-top-color:hsl(var(--border) / .4)!important}.\[\&\:not\(\:has\(\[data-ui\=description\]\+\[data-ui\=box\]\)\)\>\[data-ui\=box\]\]\:mt-3:not(:has([data-ui=description]+[data-ui=box]))>[data-ui=box]{margin-top:.75rem!important}.\[\&\:not\(\:hover\)\]\:decoration-muted:not(:hover){text-decoration-color:hsl(var(--muted))!important}.\[\&\:not\(\:last-child\)\]\:-me-1:not(:last-child){margin-inline-end:-.25rem!important}.\[\&\:not\(\:last-child\)\]\:mb-0\.5:not(:last-child){margin-bottom:.125rem!important}.\[\&\:not\(\[data-selected\]\)\]\:text-muted:not([data-selected]){color:hsl(var(--muted))!important}.\[\&\:not\(\[data-selected\]\)\]\:hover\:text-foreground:where([data-rac])[data-hovered]:not([data-selected]){color:hsl(var(--foreground))!important}.\[\&\:not\(\[data-selected\]\)\]\:hover\:text-foreground:where(:not([data-rac])):hover:not([data-selected]){color:hsl(var(--foreground))!important}.\[\&\>\*\:has\(\+\[data-ui\=select-value\]\)\>svg\]\:size-4>*:has(+[data-ui=select-value])>svg{width:1rem!important;height:1rem!important}.\[\&\>\*\:has\(\+\[data-ui\=select-value\]\)\>svg\]\:text-muted>*:has(+[data-ui=select-value])>svg{color:hsl(var(--muted))!important}.\[\&\>\:is\(input\,\[data-ui\=control\]\)\+\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\]\:mt-2>:is(input,[data-ui=control])+[data-ui=description]:not([class*=mt-]){margin-top:.5rem!important}.\[\&\>\:is\(input\,textarea\,\[data-ui\=control\]\)\+\[data-ui\=errorMessage\]\:not\(\[class\*\=mt-\]\)\]\:mt-2>:is(input,textarea,[data-ui=control])+[data-ui=errorMessage]:not([class*=mt-]){margin-top:.5rem!important}.\[\&\>\:not\(input\)\]\:text-muted>:not(input){color:hsl(var(--muted))!important}.\[\&\>\:not\(input\)\]\:opacity-50>:not(input){opacity:.5!important}.\[\&\>\[data-ui\=clear\]\:last-of-type\]\:-col-end-1>[data-ui=clear]:last-of-type{grid-column-end:-1!important}.\[\&\>\[data-ui\=clear\]\:last-of-type\]\:place-self-center>[data-ui=clear]:last-of-type{place-self:center!important}.\[\&\>\[data-ui\=clear\]\]\:-col-end-2>[data-ui=clear]{grid-column-end:-2!important}.\[\&\>\[data-ui\=clear\]\]\:row-start-1>[data-ui=clear]{grid-row-start:1!important}.\[\&\>\[data-ui\=clear\]\]\:justify-self-end>[data-ui=clear]{justify-self:end!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:z-10>[data-ui=icon]:has(+input){z-index:10!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:col-start-1>[data-ui=icon]:has(+input){grid-column-start:1!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:row-start-1>[data-ui=icon]:has(+input){grid-row-start:1!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:size-5>[data-ui=icon]:has(+input){width:1.25rem!important;height:1.25rem!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:place-self-center>[data-ui=icon]:has(+input){place-self:center!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:text-muted>[data-ui=icon]:has(+input){color:hsl(var(--muted))!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:size-4>[data-ui=icon]:has(+input){width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4>[data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-\[1\.125rem\]>[data-ui=icon]:not([class*=size-]){width:1.125rem!important;height:1.125rem!important}.\[\&\>\[data-ui\=icon\]\]\:size-5>[data-ui=icon]{width:1.25rem!important;height:1.25rem!important}.\[\&\>\[data-ui\=icon\]\]\:text-muted\/65>[data-ui=icon]{color:hsl(var(--muted) / .65)!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=icon\]\]\:size-4>[data-ui=icon]{width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=item\]\]\:flex>[data-ui=item]{display:flex!important}.\[\&\>\[data-ui\=item\]\]\:items-center>[data-ui=item]{align-items:center!important}.\[\&\>\[data-ui\=item\]\]\:gap-x-2>[data-ui=item]{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.\[\&\>\[data-ui\=item\]_\[data-ui\=description\]\]\:sr-only>[data-ui=item] [data-ui=description]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=item\]_\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-5>[data-ui=item] [data-ui=icon]:not([class*=size-]){width:1.25rem!important;height:1.25rem!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=item\]_\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4>[data-ui=item] [data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=item\]_\[role\=img\]\]\:size-6>[data-ui=item] [role=img]{width:1.5rem!important;height:1.5rem!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=item\]_\[role\=img\]\]\:size-5>[data-ui=item] [role=img]{width:1.25rem!important;height:1.25rem!important}}.\[\&\>\[data-ui\=label\]\:first-of-type\:not\(\[class\*\=mb\]\)\]\:mb-2>[data-ui=label]:first-of-type:not([class*=mb]){margin-bottom:.5rem!important}.\[\&\>\[data-ui\=native-select-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-blue-500>[data-ui=native-select-field]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=native-select-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-none>[data-ui=native-select-field]:focus-within+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=native-select-field\]\:last-child_select\]\:text-center>[data-ui=native-select-field]:last-child select{text-align:center!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:first-child\)_select\]\:rounded-s-none>[data-ui=native-select-field]:not(:first-child) select{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:first-child\)_select\]\:border-s-0>[data-ui=native-select-field]:not(:first-child) select{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:last-child\)_select\]\:rounded-e-none>[data-ui=native-select-field]:not(:last-child) select{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:last-child\)_select\]\:border-e-0>[data-ui=native-select-field]:not(:last-child) select{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=native-select-field\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=native-select-field]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=native-select-field\]_select\]\:min-w-max>[data-ui=native-select-field] select{min-width:-moz-max-content!important;min-width:max-content!important}.\[\&\>\[data-ui\=native-select-field\]_select\]\:ps-3\.5>[data-ui=native-select-field] select{padding-inline-start:.875rem!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:rounded-s-none>[data-ui=select]:not(:first-child) button{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:border-s-0>[data-ui=select]:not(:first-child) button{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:text-end>[data-ui=select]:not(:first-child) button{text-align:end!important}.\[\&\>\[data-ui\=select\]\:not\(\:has\(\+\[aria-hidden\]\:last-child\)\)_button\]\:rounded-e-none>[data-ui=select]:not(:has(+[aria-hidden]:last-child)) button{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:has\(\+\[aria-hidden\]\:last-child\)\)_button\]\:border-e-0>[data-ui=select]:not(:has(+[aria-hidden]:last-child)) button{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=select\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=select]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=select\]\[data-focus-visible\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:\!bg-blue-500>[data-ui=select][data-focus-visible]+[aria-hidden]+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=select\]\[data-focus-visible\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:bg-none>[data-ui=select][data-focus-visible]+[aria-hidden]+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=select\]\[data-invalid\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:bg-destructive>[data-ui=select][data-invalid]+[aria-hidden]+[data-ui=separator]{background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=select\]\]\:w-max>[data-ui=select]{width:-moz-max-content!important;width:max-content!important}.\[\&\>\[data-ui\=select\]\]\:min-w-max>[data-ui=select]{min-width:-moz-max-content!important;min-width:max-content!important}.\[\&\>\[data-ui\=select\]_button\]\:ps-3\.5>[data-ui=select] button{padding-inline-start:.875rem!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=native-select-field\]\:focus-within\)\]\:bg-blue-500>[data-ui=separator]:has(+[data-ui=native-select-field]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=native-select-field\]\:focus-within\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=native-select-field]:focus-within){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-focus-visible\]\)\]\:\!bg-blue-500>[data-ui=separator]:has(+[data-ui=select][data-focus-visible]){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-focus-visible\]\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=select][data-focus-visible]){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-invalid\]\)\]\:bg-destructive>[data-ui=separator]:has(+[data-ui=select][data-invalid]){background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\:focus-within\)\]\:\!bg-blue-500>[data-ui=separator]:has(+[data-ui=text-field]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\:focus-within\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=text-field]:focus-within){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\[data-invalid\]\:not\(\:focus-within\)\)\]\:bg-destructive>[data-ui=separator]:has(+[data-ui=text-field][data-invalid]:not(:focus-within)){background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\[data-readonly\]\:focus-within\)\]\:\!bg-blue-300>[data-ui=separator]:has(+[data-ui=text-field][data-readonly]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(147 197 253 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\]\:bg-border>[data-ui=separator]{background-color:hsl(var(--border))!important}.\[\&\>\[data-ui\=separator\]\]\:bg-\[linear-gradient\(to_bottom\,_theme\(colors\.border\)_1px\,_transparent_1px\,_transparent_calc\(100\%_-_1px\)\,_theme\(colors\.border\)_calc\(100\%_-_1px\)\)\]>[data-ui=separator]{background-image:linear-gradient(to bottom,hsl(var(--border)) 1px,transparent 1px,transparent calc(100% - 1px),hsl(var(--border)) calc(100% - 1px))!important}.\[\&\>\[data-ui\=text-field\]\:focus-within\+\[data-ui\=separator\]\]\:\!bg-blue-500>[data-ui=text-field]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=text-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-none>[data-ui=text-field]:focus-within+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:first-child\)_input\]\:rounded-s-none>[data-ui=text-field]:not(:first-child) input{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:first-child\)_input\]\:border-s-0>[data-ui=text-field]:not(:first-child) input{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:last-child\)_input\]\:rounded-e-none>[data-ui=text-field]:not(:last-child) input{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:last-child\)_input\]\:border-e-0>[data-ui=text-field]:not(:last-child) input{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=text-field\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=text-field]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=text-field\]\[data-invalid\]\:not\(\:focus-within\)\+\[data-ui\=separator\]\]\:bg-destructive>[data-ui=text-field][data-invalid]:not(:focus-within)+[data-ui=separator]{background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=text-field\]\[data-readonly\]\:focus-within\+\[data-ui\=separator\]\]\:\!bg-blue-300>[data-ui=text-field][data-readonly]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(147 197 253 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=text-field\]\]\:flex-1>[data-ui=text-field]{flex:1 1 0%!important}.\[\&\>\[data-ui\=trigger\]\]\:-col-end-1>[data-ui=trigger]{grid-column-end:-1!important}.\[\&\>\[data-ui\=trigger\]\]\:row-start-1>[data-ui=trigger]{grid-row-start:1!important}.\[\&\>\[data-ui\=trigger\]\]\:place-self-center>[data-ui=trigger]{place-self:center!important}.\[\&\>\[role\=img\]\:first-of-type\]\:-ms-2>[role=img]:first-of-type{margin-inline-start:-.5rem!important}.\[\&\>\[role\=img\]\:not\(\[class\*\=ring-4\]\)\]\:ring-2>[role=img]:not([class*=ring-4]){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.\[\&\>button\:first-of-type\]\:rounded-b-none>button:first-of-type{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.\[\&\>button\:first-of-type\]\:rounded-e-none>button:first-of-type{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>button\:last-of-type\]\:rounded-s-none>button:last-of-type{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>button\:last-of-type\]\:rounded-t-none>button:last-of-type{border-top-left-radius:0!important;border-top-right-radius:0!important}.\[\&\>button\:not\(\:first-child\)\]\:rounded-s-none>button:not(:first-child){border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>button\:not\(\:first-child\)\]\:border-s-0>button:not(:first-child){border-inline-start-width:0px!important}.\[\&\>button\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:rounded-none>button:not(:first-of-type):not(:last-of-type){border-radius:0!important}.\[\&\>button\:not\(\:first-of-type\)\]\:border-s-0>button:not(:first-of-type){border-inline-start-width:0px!important}.\[\&\>button\:not\(\:first-of-type\)\]\:border-t-0>button:not(:first-of-type){border-top-width:0px!important}.\[\&\>button\:not\(\:last-child\)\]\:rounded-e-none>button:not(:last-child){border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>button\:not\(\:last-child\)\]\:border-e-0>button:not(:last-child){border-inline-end-width:0px!important}.\[\&\>button\:not\(\:last-of-type\)\]\:border-b-0>button:not(:last-of-type){border-bottom-width:0px!important}.\[\&\>button\:not\(\:last-of-type\)\]\:border-e-0>button:not(:last-of-type){border-inline-end-width:0px!important}.\[\&\>button\[data-variant\=solid\]\:not\(\:first-of-type\)\]\:border-s-black\/15>button[data-variant=solid]:not(:first-of-type){border-inline-start-color:#00000026!important}@media (prefers-color-scheme: dark){.dark\:\[\&\>button\[data-variant\=solid\]\]\:border-solid>button[data-variant=solid]{border-style:solid!important}.dark\:\[\&\>button\[data-variant\=solid\]\]\:\[--border-with\:1px\]>button[data-variant=solid]{--border-with: 1px !important}}.\[\&\>button\]\:shadow-none>button{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\>img\]\:size-full>img{width:100%!important;height:100%!important}.\[\&\>img\]\:rounded-lg>img{border-radius:.5rem!important}.\[\&\>input\:focus\]\:border-0>input:focus{border-width:0px!important}.\[\&\>input\:focus\]\:ring-0>input:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.\[\&\>input\:has\(\+\[data-ui\=clear\]\:not\(\:last-of-type\)\)\]\:pe-20>input:has(+[data-ui=clear]:not(:last-of-type)){padding-inline-end:5rem!important}@media (min-width: 640px){.sm\:\[\&\>input\:has\(\+\[data-ui\=clear\]\:not\(\:last-of-type\)\)\]\:pe-16>input:has(+[data-ui=clear]:not(:last-of-type)){padding-inline-end:4rem!important}}.\[\&\>input\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:text-center>input:not(:first-of-type):not(:last-of-type){text-align:center!important}.\[\&\>input\:not\(\[class\*\=pe-\]\)\]\:pe-10>input:not([class*=pe-]){padding-inline-end:2.5rem!important}@media (min-width: 640px){.sm\:\[\&\>input\:not\(\[class\*\=pe-\]\)\]\:pe-9>input:not([class*=pe-]){padding-inline-end:2.25rem!important}}.\[\&\>input\]\:col-span-full>input{grid-column:1 / -1!important}.\[\&\>input\]\:row-start-1>input{grid-row-start:1!important}.\[\&\>input\]\:min-w-12>input{min-width:3rem!important}.\[\&\>input\]\:border-0>input{border-width:0px!important}.\[\&\>input\]\:shadow-none>input{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\>input\]\:ring-0>input{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}@media (min-width: 640px){.sm\:\[\&\>input\]\:min-w-11>input{min-width:2.75rem!important}}.\[\&\>svg\:not\(\[class\*\=size\]\)\]\:size-5>svg:not([class*=size]){width:1.25rem!important;height:1.25rem!important}.\[\&\>svg\:not\(\[class\*\=text-\]\)\]\:text-muted>svg:not([class*=text-]){color:hsl(var(--muted))!important}.\[\&\>svg\]\:size-full>svg{width:100%!important;height:100%!important}.\[\&\>svg\]\:h-auto>svg{height:auto!important}.\[\&\>svg\]\:min-w-12>svg{min-width:3rem!important}.\[\&\>svg\]\:max-w-full>svg{max-width:100%!important}.\[\&\>svg\]\:rounded-lg>svg{border-radius:.5rem!important}.\[\&\>textarea\+\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\]\:mt-0\.5>textarea+[data-ui=description]:not([class*=mt-]){margin-top:.125rem!important}.\[\&\[data-orientation\=horizontal\]\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-x-\]\)\]\:gap-x-4[data-orientation=horizontal]:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-x-]){-moz-column-gap:1rem!important;column-gap:1rem!important}.\[\&\[data-orientation\=horizontal\]\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-y-\]\)\]\:gap-y-2[data-orientation=horizontal]:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-y-]){row-gap:.5rem!important}.\[\&\[data-selection-mode\]\]\:px-2[data-selection-mode]{padding-left:.5rem!important;padding-right:.5rem!important}.focus-within\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-within\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mb-\]\)\:has\(\+\:is\(input\,textarea\,\[data-ui\=control\]\)\)\]\:mb-3 [data-ui=description]:not([class*=mb-]):has(+:is(input,textarea,[data-ui=control])){margin-bottom:.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\:has\(\+\[data-ui\=box\]\)\]\:mb-4 [data-ui=description]:not([class*=mt-]):has(+[data-ui=box]){margin-bottom:1rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\:has\(\+\[data-ui\=box\]\)\]\:mt-1 [data-ui=description]:not([class*=mt-]):has(+[data-ui=box]){margin-top:.25rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=pe-\]\)\]\:has-\[label\[data-position\=left\]\]\:pe-7:has(label[data-position=left]) [data-ui=description]:not([class*=pe-]){padding-inline-end:1.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=pe-\]\)\]\:has-\[label\[data-position\=left\]\]\:pe-\[calc\(theme\(width\.8\)\+16px\)\]:has(label[data-position=left]) [data-ui=description]:not([class*=pe-]){padding-inline-end:calc(2rem + 16px)!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=ps-\]\)\]\:has-\[label\[data-position\=right\]\]\:ps-7:has(label[data-position=right]) [data-ui=description]:not([class*=ps-]){padding-inline-start:1.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=ps-\]\)\]\:has-\[label\[data-position\=right\]\]\:ps-\[calc\(theme\(width\.8\)\+12px\)\]:has(label[data-position=right]) [data-ui=description]:not([class*=ps-]){padding-inline-start:calc(2rem + 12px)!important}.\[\&_\[data-ui\=description\]\]\:has-\[label\[data-disabled\]\]\:opacity-50:has(label[data-disabled]) [data-ui=description]{opacity:.5!important}.\[\&_\[data-ui\=item\]\:has\(\[data-ui\=label\]\)\]\:grid-cols-\[16px_1fr_minmax\(50px\,max-content\)\] [data-ui=item]:has([data-ui=label]){grid-template-columns:16px 1fr minmax(50px,max-content)!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-span-full [data-ui=item]>[data-ui=description]{grid-column:1 / -1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=icon\]\:has\(\+\[data-ui\=label\]\)\:not\(\[class\*\=size-\]\)\]\:size-4 [data-ui=item]>[data-ui=icon]:has(+[data-ui=label]):not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=icon\]\:not\(\[class\*\=text-\]\)\]\:text-muted [data-ui=item]>[data-ui=icon]:not([class*=text-]){color:hsl(var(--muted))!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:col-span-1 [data-ui=item]>[data-ui=kbd]{grid-column:span 1 / span 1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:col-start-3 [data-ui=item]>[data-ui=kbd]{grid-column-start:3!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:row-start-1 [data-ui=item]>[data-ui=kbd]{grid-row-start:1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:justify-self-end [data-ui=item]>[data-ui=kbd]{justify-self:end!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-span-full [data-ui=item]>[data-ui=label]{grid-column:1 / -1!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\)\]\:size-5 [data-ui=item]>[role=img]:has(+[data-ui=label]){width:1.25rem!important;height:1.25rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:row-start-1 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){grid-row-start:1!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:row-end-3 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){grid-row-end:3!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:mt-0\.5 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){margin-top:.125rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:size-7 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){width:1.75rem!important;height:1.75rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:self-start [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){align-self:flex-start!important}.\[\&_\[data-ui\=item\]\[data-destructive\]\>\[data-ui\=icon\]\]\:text-destructive\/75 [data-ui=item][data-destructive]>[data-ui=icon]{color:hsl(var(--destructive) / .75)!important}.\[\&_\[data-ui\=item\]\[data-destructive\]\>\[data-ui\=kbd\]\]\:text-destructive [data-ui=item][data-destructive]>[data-ui=kbd]{color:hsl(var(--destructive))!important}.\[\&_\[data-ui\=item\]\]\:grid [data-ui=item]{display:grid!important}.\[\&_\[data-ui\=item\]\]\:flex-1 [data-ui=item]{flex:1 1 0%!important}.\[\&_\[data-ui\=item\]\]\:grid-cols-\[minmax\(16px\,max-content\)_1fr\] [data-ui=item]{grid-template-columns:minmax(16px,max-content) 1fr!important}.\[\&_\[data-ui\=item\]\]\:items-center [data-ui=item]{align-items:center!important}.\[\&_\[data-ui\=item\]\]\:gap-x-2 [data-ui=item]{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.\[\&_\[data-ui\=label\]\:not\(\[class\*\=mb-\]\)\:has\(\+\:is\(input\,textarea\,\[data-ui\=control\]\)\)\]\:mb-2 [data-ui=label]:not([class*=mb-]):has(+:is(input,textarea,[data-ui=control])){margin-bottom:.5rem!important}.\[\&_\[data-ui\=label\]\:not\(\[class\*\=mb-\]\)\]\:mb-1 [data-ui=label]:not([class*=mb-]){margin-bottom:.25rem!important}.\[\&_\[slot\=radio\]\]\:mt-1\.5 [slot=radio]{margin-top:.375rem!important}.\[\&_button\[data-variant\=outline\]\]\:border-border button[data-variant=outline]{border-color:hsl(var(--border))!important}.\[\&_button\]\:shadow-none button{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_header\]\:px-3 header{padding-left:.75rem!important;padding-right:.75rem!important}.\[\&_input\]\:shadow-none input{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_label\]\:has-\[\[data-position\=left\]\]\:justify-between:has([data-position=left]) label{justify-content:space-between!important}.\[\&_label\]\:has-\[\[data-ui\=description\]\]\:font-medium:has([data-ui=description]) label{font-weight:500!important}.\[\&_select\]\:shadow-none select{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem!important;height:.75rem!important}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-5 svg:not([class*=size-]){width:1.25rem!important;height:1.25rem!important}@media (min-width: 640px){.sm\:\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-4 svg:not([class*=size-]){width:1rem!important;height:1rem!important}}.\[\&_svg\]\:m-0\.5 svg{margin:.125rem!important}@media (min-width: 640px){.sm\:\[\&_svg\]\:m-1 svg{margin:.25rem!important}}.\[\&_td\]\:px-0 td{padding-left:0!important;padding-right:0!important}.justify-start .\[\.justify-start_\&\]\:ms-auto{margin-inline-start:auto!important}.rounded-full .\[\.rounded-full_\&\]\:translate-x-\[35\%\]{--tw-translate-x: 35% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rounded-full .\[\.rounded-full_\&\]\:translate-y-\[5\%\]{--tw-translate-y: 5% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@container (min-width: 40px){.rounded-full .\@\[40px\]\:\[\.rounded-full_\&\]\:translate-x-\[15\%\]{--tw-translate-x: 15% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}@container (min-width: 64px){.rounded-full .\@\[64px\]\:\[\.rounded-full_\&\]\:-translate-x-\[5\%\]{--tw-translate-x: -5% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rounded-full .\@\[64px\]\:\[\.rounded-full_\&\]\:-translate-y-\[10\%\]{--tw-translate-y: -10% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}@container (min-width: 128px){.rounded-full .\@\[128px\]\:\[\.rounded-full_\&\]\:translate-x-\[-20\%\]{--tw-translate-x: -20% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}.rounded-full .rtl\:\[\.rounded-full_\&\]\:translate-y-\[45\%\]:where([dir=rtl],[dir=rtl] *){--tw-translate-y: 45% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (pointer:fine){.\[\@media\(pointer\:fine\)\]\:hidden{display:none!important}}[data-ui=select-value] .\[\[data-ui\=select-value\]_\&\]\:hidden{display:none!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:z-10>[data-ui=addon]:first-child{z-index:10!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:col-start-1>[data-ui=addon]:first-child{grid-column-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:row-start-1>[data-ui=addon]:first-child{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:last-child\]\:-col-end-1>[data-ui=addon]:last-child{grid-column-end:-1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:last-child\]\:row-start-1>[data-ui=addon]:last-child{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:not\(\:first-child\)\]\:border-s-0>[data-ui=addon]:not(:first-child){border-inline-start-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:not\(\:last-child\)\]\:border-e-0>[data-ui=addon]:not(:last-child){border-inline-end-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\]\:border-0>[data-ui=addon]{border-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\:not\(\[class\*\=ps-\]\)\]\:ps-10>input:not(:first-child):not([class*=ps-]){padding-inline-start:2.5rem!important}@media (min-width: 640px){[data-ui=text-field] .sm\:\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\:not\(\[class\*\=ps-\]\)\]\:ps-8>input:not(:first-child):not([class*=ps-]){padding-inline-start:2rem!important}}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\]\:rounded-s-none>input:not(:first-child){border-start-start-radius:0px!important;border-end-start-radius:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\:not\(\[class\*\=pe-\]\)\]\:pe-10>input:not(:last-child):not([class*=pe-]){padding-inline-end:2.5rem!important}@media (min-width: 640px){[data-ui=text-field] .sm\:\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\:not\(\[class\*\=pe-\]\)\]\:pe-8>input:not(:last-child):not([class*=pe-]){padding-inline-end:2rem!important}}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\]\:rounded-e-none>input:not(:last-child){border-start-end-radius:0px!important;border-end-end-radius:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\]\:col-span-full>input{grid-column:1 / -1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\]\:row-start-1>input{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&_\]\:grid{display:grid!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&_\]\:grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto!important}[data-variant=outline]:not(:hover) .\[\[data-variant\=outline\]\:not\(\:hover\)_\&\]\:text-muted{color:hsl(var(--muted))!important}td:first-child .\[td\:first-child_\&\]\:rounded-s-lg{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}td:last-child .\[td\:last-child_\&\]\:rounded-e-lg{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.zinc-theme{--accent: 24 9.8% 10%}.dark .zinc-theme{--accent: 240 5% 34%}.blue-theme,.dark .blue-theme{--accent: 221 83% 53%}.indigo-theme,.dark .indigo-theme{--accent: 243 75% 59%}.violet-theme,.dark .violet-theme{--accent: 262 83% 58%}.purple-theme,.dark .purple-theme{--accent: 271 81% 56%}.fuchsia-theme,.dark .fuchsia-theme{--accent: 293 69% 49%}.light{--zinc: #27272a;--gray: #424448;--red: #991b1b;--orange: #9a3412;--amber:#92400e;--yellow: #854d0e;--brown: #51412f;--auburn:#5d3937;--lime: #3f6212;--green: #166534;--emerald:#065f46;--teal:#115e59;--cyan: #155e75;--sky: #075985;--blue:#1e40af;--indigo: #3730a3;--violet: #5b21b6;--purple:#6b21a8;--fuchsia:#86198f;--pink: #9d174d;--rose:#9f1239}.dark{--zinc: #3f3f46;--gray:#5c6570;--red: #dc2626;--orange: #ea580c;--amber:#d97706;--yellow: #ca8a04;--brown: #755f43;--auburn:#8a5551;--lime: #65a30d;--green: #16a34a;--emerald:#059669;--teal:#0d9488;--cyan: #0891b2;--sky: #0284c7;--blue:#2563eb;--indigo: #4f46e5;--violet: #7c3aed;--purple:#9333ea;--fuchsia:#c026d3;--pink: #db2777;--rose:#e11d48}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgb(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgb(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.monaco-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif;--monaco-monospace-font: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace}.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;top:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%)}.monaco-editor,.monaco-diff-editor .synthetic-focus,.monaco-diff-editor [tabindex="0"]:focus,.monaco-diff-editor [tabindex="-1"]:focus,.monaco-diff-editor button:focus,.monaco-diff-editor input[type=button]:focus,.monaco-diff-editor input[type=checkbox]:focus,.monaco-diff-editor input[type=search]:focus,.monaco-diff-editor input[type=text]:focus,.monaco-diff-editor select:focus,.monaco-diff-editor textarea:focus{outline-width:1px;outline-style:solid;outline-offset:-1px;outline-color:var(--vscode-focusBorder);opacity:1}.monaco-workbench .workbench-hover{position:relative;font-size:13px;line-height:19px;z-index:40;overflow:hidden;max-width:700px;background:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground);box-shadow:0 2px 8px var(--vscode-widget-shadow)}.monaco-workbench .workbench-hover hr{border-bottom:none}.monaco-workbench .workbench-hover:not(.skip-fade-in){animation:fadein .1s linear}.monaco-workbench .workbench-hover.compact{font-size:12px}.monaco-workbench .workbench-hover.compact .hover-contents{padding:2px 8px}.monaco-workbench .workbench-hover-container.locked .workbench-hover{outline:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .workbench-hover-container.locked .workbench-hover:focus,.monaco-workbench .workbench-hover-lock:focus{outline:1px solid var(--vscode-focusBorder)}.monaco-workbench .workbench-hover-container.locked .workbench-hover-lock:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-workbench .workbench-hover-pointer{position:absolute;z-index:41;pointer-events:none}.monaco-workbench .workbench-hover-pointer:after{content:"";position:absolute;width:5px;height:5px;background-color:var(--vscode-editorHoverWidget-background);border-right:1px solid var(--vscode-editorHoverWidget-border);border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .locked .workbench-hover-pointer:after{width:4px;height:4px;border-right-width:2px;border-bottom-width:2px}.monaco-workbench .workbench-hover-pointer.left{left:-3px}.monaco-workbench .workbench-hover-pointer.right{right:3px}.monaco-workbench .workbench-hover-pointer.top{top:-3px}.monaco-workbench .workbench-hover-pointer.bottom{bottom:3px}.monaco-workbench .workbench-hover-pointer.left:after{transform:rotate(135deg)}.monaco-workbench .workbench-hover-pointer.right:after{transform:rotate(315deg)}.monaco-workbench .workbench-hover-pointer.top:after{transform:rotate(225deg)}.monaco-workbench .workbench-hover-pointer.bottom:after{transform:rotate(45deg)}.monaco-workbench .workbench-hover a{color:var(--vscode-textLink-foreground)}.monaco-workbench .workbench-hover a:focus{outline:1px solid;outline-offset:-1px;text-decoration:underline;outline-color:var(--vscode-focusBorder)}.monaco-workbench .workbench-hover a:hover,.monaco-workbench .workbench-hover a:active{color:var(--vscode-textLink-activeForeground)}.monaco-workbench .workbench-hover code{background:var(--vscode-textCodeBlock-background)}.monaco-workbench .workbench-hover .hover-row .actions{background:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-workbench .workbench-hover.right-aligned{left:1px}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions{flex-direction:row-reverse}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions .action-container{margin-right:0;margin-left:16px}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{position:absolute;display:none}.monaco-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.scrollbar>.slider{background:var(--vscode-scrollbarSlider-background)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-scrollable-element>.scrollbar>.slider.active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-hover{cursor:default;position:absolute;overflow:hidden;-moz-user-select:text;user-select:text;-webkit-user-select:text;box-sizing:border-box;animation:fadein .1s linear;line-height:1.5em;white-space:var(--vscode-hover-whiteSpace, normal)}.monaco-hover.hidden{display:none}.monaco-hover a:hover:not(.disabled){cursor:pointer}.monaco-hover .hover-contents:not(.html-hover-contents){padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){max-width:var(--vscode-hover-maxWidth, 500px);word-wrap:break-word}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover p,.monaco-hover .code,.monaco-hover ul,.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{margin:8px 0}.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{line-height:1.1}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0px;border-right:0px;margin:4px -8px -4px;height:1px}.monaco-hover p:first-child,.monaco-hover .code:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover p:last-child,.monaco-hover .code:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ul,.monaco-hover ol{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:var(--vscode-hover-sourceWhiteSpace, pre-wrap)}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .info{font-style:italic;padding:0 8px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px;width:100%}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .hover-row.status-bar .actions .action-container a{color:var(--vscode-textLink-foreground);-webkit-text-decoration:var(--text-link-decoration);text-decoration:var(--text-link-decoration)}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link:hover,.monaco-hover .hover-contents a.code-link{color:inherit}.monaco-hover .hover-contents a.code-link:before{content:"("}.monaco-hover .hover-contents a.code-link:after{content:")"}.monaco-hover .hover-contents a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-foreground)}.monaco-hover .hover-contents a.code-link>span:hover{color:var(--vscode-textLink-activeForeground)}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span{margin-bottom:4px;display:inline-block}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span.codicon{margin-bottom:2px}.monaco-hover-content .action-container a{-webkit-user-select:none;-moz-user-select:none;user-select:none}.monaco-hover-content .action-container.disabled{pointer-events:none;opacity:.4;cursor:default}.monaco-editor .rendered-markdown kbd{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-style:solid;border-width:1px;border-radius:3px;border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);vertical-align:middle;padding:1px 3px}.rendered-markdown li:has(input[type=checkbox]){list-style-type:none}.monaco-aria-container{position:absolute;left:-999em}.context-view{position:absolute}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;color:inherit}.monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list .monaco-scrollable-element>.scrollbar.vertical,.monaco-pane-view>.monaco-split-view2.vertical>.monaco-scrollable-element>.scrollbar.vertical{z-index:14}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-single,.monaco-list.selection-multiple{outline:0!important}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em;text-align:center;white-space:normal;opacity:.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-select-box-dropdown-padding{--dropdown-padding-top: 1px;--dropdown-padding-bottom: 1px}.hc-black .monaco-select-box-dropdown-padding,.hc-light .monaco-select-box-dropdown-padding{--dropdown-padding-top: 3px;--dropdown-padding-bottom: 4px}.monaco-select-box-dropdown-container{display:none;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown *{margin:0}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown a:focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown code{line-height:15px;font-family:var(--monaco-monospace-font)}.monaco-select-box-dropdown-container.visible{display:flex;flex-direction:column;text-align:left;width:1px;overflow:hidden;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container{flex:0 0 auto;align-self:flex-start;padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom);padding-left:1px;padding-right:1px;width:100%;overflow:hidden;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane{padding:5px}.hc-black .monaco-select-box-dropdown-container>.select-box-dropdown-list-container{padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom)}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row{cursor:pointer}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-text{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-detail{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left;opacity:.7}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-decorator-right{text-overflow:ellipsis;overflow:hidden;padding-right:10px;white-space:nowrap;float:right}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.visually-hidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control{flex:1 1 auto;align-self:flex-start;opacity:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div{overflow:hidden;max-height:0px}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div>.option-text-width-control{padding-left:4px;padding-right:8px;white-space:nowrap}.monaco-select-box{width:100%;cursor:pointer;border-radius:2px}.monaco-select-box-dropdown-container{font-size:13px;font-weight:400;text-transform:none}.monaco-action-bar .action-item.select-container{cursor:default}.monaco-action-bar .action-item .monaco-select-box{cursor:pointer;min-width:100px;min-height:18px;padding:2px 23px 2px 8px}.mac .monaco-action-bar .action-item .monaco-select-box{font-size:11px;border-radius:5px}.monaco-action-bar{white-space:nowrap;height:100%}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;height:100%;width:100%;align-items:center}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{display:block;align-items:center;justify-content:center;cursor:pointer;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .icon,.monaco-action-bar .action-item .codicon{display:block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center;width:16px;height:16px}.monaco-action-bar .action-label{display:flex;font-size:11px;padding:3px;border-radius:5px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label:before,.monaco-action-bar .action-item.disabled .action-label:hover{color:var(--vscode-disabledForeground)}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.monaco-action-bar .action-item .action-label.separator{width:1px;height:16px;margin:5px 4px!important;cursor:default;min-width:1px;padding:0;background-color:#bbb}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator{display:flex;align-items:center;cursor:default}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div{width:1px}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-dropdown-with-primary{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-primary>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.monaco-action-bar .action-item.menu-entry .action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-action-bar .action-item.menu-entry.text-only .action-label{color:var(--vscode-descriptionForeground);overflow:hidden;border-radius:2px}.monaco-action-bar .action-item.menu-entry.text-only.use-comma:not(:last-of-type) .action-label:after{content:", "}.monaco-action-bar .action-item.menu-entry.text-only+.action-item:not(.text-only)>.monaco-dropdown .action-label{color:var(--vscode-descriptionForeground)}.monaco-dropdown-with-default{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-default>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-default>.action-container.menu-entry>.action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight{color:#9dddff}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.hc-light .quick-input-widget .monaco-highlighted-label .highlight{color:#0f4a85}.monaco-keybinding>.monaco-keybinding-key{background-color:#ddd6;border:solid 1px rgba(204,204,204,.4);border-bottom-color:#bbb6;box-shadow:inset 0 -1px #bbb6;color:#555}.hc-black .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px rgb(111,195,223);box-shadow:none;color:#fff}.hc-light .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px #0F4A85;box-shadow:none;color:#292929}.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:#8080802b;border:solid 1px rgba(51,51,51,.6);border-bottom-color:#4449;box-shadow:inset 0 -1px #4449;color:#ccc}.monaco-custom-toggle{margin-left:2px;float:left;cursor:pointer;overflow:hidden;width:20px;height:20px;border-radius:3px;border:1px solid transparent;padding:1px;box-sizing:border-box;-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-custom-toggle:hover{background-color:var(--vscode-inputOption-hoverBackground)}.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{border:1px dashed var(--vscode-focusBorder)}.hc-black .monaco-custom-toggle,.hc-light .monaco-custom-toggle,.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{background:none}.monaco-custom-toggle.monaco-checkbox{height:18px;width:18px;border:1px solid transparent;border-radius:3px;margin-right:9px;margin-left:0;padding:0;opacity:1;background-size:16px!important}.monaco-action-bar .checkbox-action-item{display:flex;align-items:center;border-radius:2px;padding-right:2px}.monaco-action-bar .checkbox-action-item:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-action-bar .checkbox-action-item>.monaco-custom-toggle.monaco-checkbox{margin-right:4px}.monaco-action-bar .checkbox-action-item>.checkbox-label{font-size:12px}.monaco-custom-toggle.monaco-checkbox:not(.checked):before{visibility:hidden}.quick-input-widget{position:absolute;width:600px;z-index:2550;left:50%;margin-left:-300px;-webkit-app-region:no-drag;border-radius:6px}.quick-input-titlebar{display:flex;align-items:center;border-top-right-radius:5px;border-top-left-radius:5px}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-inline-action-bar{margin:2px 0 0 5px}.quick-input-title{padding:3px 0;text-align:center;text-overflow:ellipsis;overflow:hidden}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-right-action-bar>.actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:center;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px 6px 6px 11px}.quick-input-header .quick-input-description{margin:4px 2px;flex:1}.quick-input-header{display:flex;padding:8px 6px 2px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;min-width:0;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:25px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px;overflow-wrap:break-word}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-message a{color:inherit}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-list{line-height:22px}.quick-input-widget.hidden-input .quick-input-list{margin-top:4px;padding-bottom:4px}.quick-input-list .monaco-list{overflow:hidden;max-height:440px;padding-bottom:5px}.quick-input-list .monaco-scrollable-element{padding:0 5px}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row{border-radius:3px}.quick-input-list .monaco-list-row[data-index="0"] .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-icon{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;display:flex;align-items:center;justify-content:center}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:text-bottom}.quick-input-list .quick-input-list-rows .monaco-highlighted-label>span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-list .monaco-list-row .monaco-highlighted-label .highlight{font-weight:700;background-color:unset;color:var(--vscode-list-highlightForeground)!important}.quick-input-list .monaco-list .monaco-list-row.focused .monaco-highlighted-label .highlight{color:var(--vscode-list-focusHighlightForeground)!important}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:2px}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px;margin-right:4px}.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry.focus-inside .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.passive-focused .quick-input-list-entry-action-bar .action-label{display:flex}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator{color:inherit}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key{background:none}.quick-input-list .quick-input-list-separator-as-item{padding:4px 6px;font-size:12px}.quick-input-list .quick-input-list-separator-as-item .label-name{font-weight:600}.quick-input-list .quick-input-list-separator-as-item .label-description{opacity:1!important}.quick-input-list .monaco-tree-sticky-row .quick-input-list-entry.quick-input-list-separator-as-item.quick-input-list-separator-border{border-top-style:none}.quick-input-list .monaco-tree-sticky-row{padding:0 5px}.quick-input-list .monaco-tl-twistie{display:none!important}.monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;border-radius:2px;text-align:center;cursor:pointer;justify-content:center;align-items:center;border:1px solid var(--vscode-button-border, transparent);line-height:18px}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled:focus,.monaco-button.disabled{opacity:.4!important;cursor:default}.monaco-text-button .codicon{margin:0 .2em;color:inherit!important}.monaco-text-button.monaco-text-button-with-short-label{flex-direction:row;flex-wrap:wrap;padding:0 4px;overflow:hidden;height:28px}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label{flex-basis:100%}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{flex-grow:1;width:0;overflow:hidden}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label,.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{display:flex;justify-content:center;align-items:center;font-weight:400;font-style:inherit;padding:4px 0}.monaco-button-dropdown{display:flex;cursor:pointer}.monaco-button-dropdown.disabled{cursor:default}.monaco-button-dropdown>.monaco-button:focus{outline-offset:-1px!important}.monaco-button-dropdown.disabled>.monaco-button.disabled,.monaco-button-dropdown.disabled>.monaco-button.disabled:focus,.monaco-button-dropdown.disabled>.monaco-button-dropdown-separator{opacity:.4!important}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-right-width:0!important}.monaco-button-dropdown .monaco-button-dropdown-separator{padding:4px 0;cursor:default}.monaco-button-dropdown .monaco-button-dropdown-separator>div{height:100%;width:1px}.monaco-button-dropdown>.monaco-button.monaco-dropdown-button{border:1px solid var(--vscode-button-border, transparent);border-left-width:0!important;border-radius:0 2px 2px 0;display:flex;align-items:center}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-radius:2px 0 0 2px}.monaco-description-button{display:flex;flex-direction:column;align-items:center;margin:4px 5px}.monaco-description-button .monaco-button-description{font-style:italic;font-size:11px;padding:4px 20px}.monaco-description-button .monaco-button-label,.monaco-description-button .monaco-button-description{display:flex;justify-content:center;align-items:center}.monaco-description-button .monaco-button-label>.codicon,.monaco-description-button .monaco-button-description>.codicon{margin:0 .2em;color:inherit!important}.monaco-button.default-colors,.monaco-button-dropdown.default-colors>.monaco-button{color:var(--vscode-button-foreground);background-color:var(--vscode-button-background)}.monaco-button.default-colors:hover,.monaco-button-dropdown.default-colors>.monaco-button:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-button.default-colors.secondary,.monaco-button-dropdown.default-colors>.monaco-button.secondary{color:var(--vscode-button-secondaryForeground);background-color:var(--vscode-button-secondaryBackground)}.monaco-button.default-colors.secondary:hover,.monaco-button-dropdown.default-colors>.monaco-button.secondary:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator{background-color:var(--vscode-button-background);border-top:1px solid var(--vscode-button-border);border-bottom:1px solid var(--vscode-button-border)}.monaco-button-dropdown.default-colors .monaco-button.secondary+.monaco-button-dropdown-separator{background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator>div{background-color:var(--vscode-button-separator)}.monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:400;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}.monaco-progress-container{width:100%;height:2px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:2px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;transform:translateZ(0);animation-timing-function:linear}.monaco-progress-container.infinite.infinite-long-running .progress-bit{animation-timing-function:steps(100)}@keyframes progress{0%{transform:translate(0) scaleX(1)}50%{transform:translate(2500%) scaleX(3)}to{transform:translate(4900%) scaleX(1)}}.monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;border-radius:2px;font-size:inherit}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px 6px}.monaco-inputbox>.ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox>.ibwrapper>.input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;scrollbar-width:none;outline:none}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}.monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.vs .monaco-findInput.disabled{background-color:#e1e1e1}.vs-dark .monaco-findInput.disabled{background-color:#333}.monaco-findInput.highlight-0 .controls,.hc-light .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 .1s linear 0s}.monaco-findInput.highlight-1 .controls,.hc-light .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 .1s linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 .1s linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 .1s linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:#fdff00cc}to{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:#fdff00cc}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:#ffffff70}to{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:#ffffff70}99%{background:transparent}}:root{--vscode-sash-size: 4px;--vscode-sash-hover-size: 4px}.monaco-sash{position:absolute;z-index:35;touch-action:none}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;top:0;width:var(--vscode-sash-size);height:100%}.monaco-sash.horizontal{cursor:ns-resize;left:0;width:100%;height:var(--vscode-sash-size)}.monaco-sash:not(.disabled)>.orthogonal-drag-handle{content:" ";height:calc(var(--vscode-sash-size) * 2);width:calc(var(--vscode-sash-size) * 2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size) * -.5);top:calc(var(--vscode-sash-size) * -1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{left:calc(var(--vscode-sash-size) * -.5);bottom:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{top:calc(var(--vscode-sash-size) * -.5);left:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{top:calc(var(--vscode-sash-size) * -.5);right:calc(var(--vscode-sash-size) * -1)}.monaco-sash:before{content:"";pointer-events:none;position:absolute;width:100%;height:100%;background:transparent}.monaco-workbench:not(.reduce-motion) .monaco-sash:before{transition:background-color .1s ease-out}.monaco-sash.hover:before,.monaco-sash.active:before{background:var(--vscode-sash-hoverBorder)}.monaco-sash.vertical:before{width:var(--vscode-sash-hover-size);left:calc(50% - (var(--vscode-sash-hover-size) / 2))}.monaco-sash.horizontal:before{height:var(--vscode-sash-hover-size);top:calc(50% - (var(--vscode-sash-hover-size) / 2))}.pointer-events-disabled{pointer-events:none!important}.monaco-sash.debug{background:#0ff}.monaco-sash.debug.disabled{background:#0ff3}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2>.sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:initial}.monaco-split-view2>.monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{white-space:initial;position:absolute}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{content:" ";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:1px;width:100%}.monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap;overflow:hidden}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{width:100%;height:100%;font-weight:700;overflow:hidden;text-overflow:ellipsis}.monaco-table-th,.monaco-table-td{box-sizing:border-box;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{content:"";position:absolute;left:calc(var(--vscode-sash-size) / 2);width:0;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2,.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{transition:border-color .2s ease-out}.monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-row.disabled{cursor:default}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-twistie,.monaco-tl-contents{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;transform:translate(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie:before{border-radius:20px}.monaco-tl-twistie.collapsed:before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading:before{animation:codicon-spin 1.25s steps(30) infinite}.monaco-tree-type-filter{position:absolute;top:0;display:flex;padding:3px;max-width:200px;z-index:100;margin:0 6px;border:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px}.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter{transition:top .3s}.monaco-tree-type-filter.disabled{top:-40px!important}.monaco-tree-type-filter-grab{display:flex!important;align-items:center;justify-content:center;cursor:grab;margin-right:2px}.monaco-tree-type-filter-grab.grabbing{cursor:grabbing}.monaco-tree-type-filter-input{flex:1}.monaco-tree-type-filter-input .monaco-inputbox{height:23px}.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.input,.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.mirror{padding:2px 4px}.monaco-tree-type-filter-input .monaco-findInput>.controls{top:2px}.monaco-tree-type-filter-actionbar{margin-left:4px}.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label{padding:2px}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container{position:absolute;top:0;left:0;width:100%;height:0;z-index:13;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row.monaco-list-row{position:absolute;width:100%;opacity:1!important;overflow:hidden;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row:hover{background-color:var(--vscode-list-hoverBackground)!important;cursor:pointer}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty,.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty .monaco-tree-sticky-container-shadow{display:none}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow{position:absolute;bottom:-3px;left:0;height:0px;width:100%}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container[tabindex="0"]:focus{outline:none}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label:before{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label-iconpath{width:16px;height:16px;padding-left:2px;margin-top:2px;display:flex}.monaco-icon-label-container.disabled{color:var(--vscode-disabledForeground)}.monaco-icon-label>.monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix{opacity:.7;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.7;margin-left:.5em;font-size:.9em;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:.66}.monaco-icon-label.italic:after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{text-decoration:line-through}.monaco-icon-label:after{opacity:.75;font-size:90%;font-weight:600;margin:auto 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label:after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{display:inline-block;border-style:solid;border-width:1px;border-radius:3px;vertical-align:middle;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{position:relative;overflow:visible;-webkit-text-size-adjust:100%;color:var(--vscode-editor-foreground);background-color:var(--vscode-editor-background);overflow-wrap:initial}.monaco-editor-background{background-color:var(--vscode-editor-background)}.monaco-editor .rangeHighlight{background-color:var(--vscode-editor-rangeHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-rangeHighlightBorder)}.monaco-editor.hc-black .rangeHighlight,.monaco-editor.hc-light .rangeHighlight{border-style:dotted}.monaco-editor .symbolHighlight{background-color:var(--vscode-editor-symbolHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-symbolHighlightBorder)}.monaco-editor.hc-black .symbolHighlight,.monaco-editor.hc-light .symbolHighlight{border-style:dotted}.monaco-editor .overflow-guard{position:relative;overflow:hidden}.monaco-editor .view-overlays{position:absolute;top:0}.monaco-editor .view-overlays>div,.monaco-editor .margin-view-overlays>div{position:absolute;width:100%}.monaco-editor .squiggly-error{border-bottom:4px double var(--vscode-editorError-border)}.monaco-editor .squiggly-error:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorError-background)}.monaco-editor .squiggly-warning{border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .squiggly-warning:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorWarning-background)}.monaco-editor .squiggly-info{border-bottom:4px double var(--vscode-editorInfo-border)}.monaco-editor .squiggly-info:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorInfo-background)}.monaco-editor .squiggly-hint{border-bottom:2px dotted var(--vscode-editorHint-border)}.monaco-editor.showUnused .squiggly-unnecessary{border-bottom:2px dashed var(--vscode-editorUnnecessaryCode-border)}.monaco-editor.showDeprecated .squiggly-inline-deprecated{text-decoration:line-through;text-decoration-color:var(--vscode-editor-foreground, inherit)}.monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:none!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent;z-index:-10}.monaco-editor .inputarea.ime-input{z-index:10;caret-color:var(--vscode-editorCursor-foreground);color:var(--vscode-editor-foreground)}.monaco-editor .margin-view-overlays .line-numbers{bottom:0;font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor .line-numbers{color:var(--vscode-editorLineNumber-foreground)}.monaco-editor .line-numbers.active-line-number{color:var(--vscode-editorLineNumber-activeForeground)}.monaco-editor .margin{background-color:var(--vscode-editorGutter-background)}.monaco-mouse-cursor-text{cursor:text}.monaco-editor .blockDecorations-container{position:absolute;top:0;pointer-events:none}.monaco-editor .blockDecorations-block{position:absolute;box-sizing:border-box}.monaco-editor .view-overlays .current-line,.monaco-editor .margin-view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box;height:100%}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute;height:100%}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .glyph-margin-widgets .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.monaco-editor .lines-content .core-guide{position:absolute;box-sizing:border-box;height:100%}.mtkcontrol{color:#fff!important;background:#960000!important}.mtkoverflow{background-color:var(--vscode-button-background, var(--vscode-editor-background));color:var(--vscode-button-foreground, var(--vscode-editor-foreground));border-width:1px;border-style:solid;border-color:var(--vscode-contrastBorder);border-radius:2px;padding:4px;cursor:pointer}.mtkoverflow:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-editor.mac .lines-content:hover,.monaco-editor.mac .view-line:hover,.monaco-editor.mac .view-lines:hover{-moz-user-select:text;user-select:text;-webkit-user-select:text;-ms-user-select:text}.monaco-editor.enable-user-select{-moz-user-select:initial;user-select:initial;-webkit-user-select:initial}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .lines-content>.view-lines>.view-line>span{top:0;bottom:0;position:absolute}.monaco-editor .mtkw{color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .mtkz{display:inline-block;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .lines-decorations{position:absolute;top:0;background:#fff}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}.monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover:hover .minimap-slider,.monaco-editor .minimap.slider-mouseover .minimap-slider.active{opacity:1}.monaco-editor .minimap-slider .minimap-slider-horizontal{background:var(--vscode-minimapSlider-background)}.monaco-editor .minimap-slider:hover .minimap-slider-horizontal{background:var(--vscode-minimapSlider-hoverBackground)}.monaco-editor .minimap-slider.active .minimap-slider-horizontal{background:var(--vscode-minimapSlider-activeBackground)}.monaco-editor .minimap-shadow-visible{box-shadow:var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}.minimap.autohide{opacity:0;transition:opacity .5s}.minimap.autohide:hover{opacity:1}.monaco-editor .minimap{z-index:5}.monaco-editor .overlayWidgets{position:absolute;top:0;left:0}.monaco-editor .view-ruler{position:absolute;top:0;box-shadow:1px 0 0 0 var(--vscode-editorRuler-foreground) inset}.monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.monaco-editor .selected-text{background-color:var(--vscode-editor-inactiveSelectionBackground)}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor.hc-light .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-light .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-light .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-light .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{position:absolute;overflow:hidden;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{border-bottom-width:2px;border-bottom-style:solid;background:transparent!important}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{border-bottom-width:1px;border-bottom-style:solid;background:transparent!important}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}60%,to{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}90%,to{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}80%,to{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-editor .mwh{position:absolute;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .diff-hidden-lines-widget{width:100%}.monaco-editor .diff-hidden-lines{height:0px;transform:translateY(-10px);font-size:13px;line-height:14px}.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover,.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover,.monaco-editor .diff-hidden-lines .top.dragging,.monaco-editor .diff-hidden-lines .bottom.dragging{background-color:var(--vscode-focusBorder)}.monaco-editor .diff-hidden-lines .top,.monaco-editor .diff-hidden-lines .bottom{transition:background-color .1s ease-out;height:4px;background-color:transparent;background-clip:padding-box;border-bottom:2px solid transparent;border-top:4px solid transparent}.monaco-editor.draggingUnchangedRegion.canMoveTop:not(.canMoveBottom) *,.monaco-editor .diff-hidden-lines .top.canMoveTop:not(.canMoveBottom),.monaco-editor .diff-hidden-lines .bottom.canMoveTop:not(.canMoveBottom){cursor:n-resize!important}.monaco-editor.draggingUnchangedRegion:not(.canMoveTop).canMoveBottom *,.monaco-editor .diff-hidden-lines .top:not(.canMoveTop).canMoveBottom,.monaco-editor .diff-hidden-lines .bottom:not(.canMoveTop).canMoveBottom{cursor:s-resize!important}.monaco-editor.draggingUnchangedRegion.canMoveTop.canMoveBottom *,.monaco-editor .diff-hidden-lines .top.canMoveTop.canMoveBottom,.monaco-editor .diff-hidden-lines .bottom.canMoveTop.canMoveBottom{cursor:ns-resize!important}.monaco-editor .diff-hidden-lines .top{transform:translateY(4px)}.monaco-editor .diff-hidden-lines .bottom{transform:translateY(-6px)}.monaco-editor .diff-unchanged-lines{background:var(--vscode-diffEditor-unchangedCodeBackground)}.monaco-editor .noModificationsOverlay{z-index:1;background:var(--vscode-editor-background);display:flex;justify-content:center;align-items:center}.monaco-editor .diff-hidden-lines .center{background:var(--vscode-diffEditor-unchangedRegionBackground);color:var(--vscode-diffEditor-unchangedRegionForeground);overflow:hidden;display:block;text-overflow:ellipsis;white-space:nowrap;height:24px;box-shadow:inset 0 -5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow),inset 0 5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow)}.monaco-editor .diff-hidden-lines .center span.codicon{vertical-align:middle}.monaco-editor .diff-hidden-lines .center a:hover .codicon{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .diff-hidden-lines div.breadcrumb-item{cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover{color:var(--vscode-editorLink-activeForeground)}.monaco-editor .movedOriginal,.monaco-editor .movedModified{border:2px solid var(--vscode-diffEditor-move-border)}.monaco-editor .movedOriginal.currentMove,.monaco-editor .movedModified.currentMove{border:2px solid var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path.currentMove{stroke:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path{pointer-events:visiblestroke}.monaco-diff-editor .moved-blocks-lines .arrow{fill:var(--vscode-diffEditor-move-border)}.monaco-diff-editor .moved-blocks-lines .arrow.currentMove{fill:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines .arrow-rectangle{fill:var(--vscode-editor-background)}.monaco-diff-editor .moved-blocks-lines{position:absolute;pointer-events:none}.monaco-diff-editor .moved-blocks-lines path{fill:none;stroke:var(--vscode-diffEditor-move-border);stroke-width:2}.monaco-editor .char-delete.diff-range-empty{margin-left:-1px;border-left:solid var(--vscode-diffEditor-removedTextBackground) 3px}.monaco-editor .char-insert.diff-range-empty{border-left:solid var(--vscode-diffEditor-insertedTextBackground) 3px}.monaco-editor .fold-unchanged{cursor:pointer}.monaco-diff-editor .diff-moved-code-block{display:flex;justify-content:flex-end;margin-top:-4px}.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon{width:12px;height:12px;font-size:12px}.monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs .diffOverview{background:#00000008}.monaco-diff-editor.vs-dark .diffOverview{background:#ffffff03}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar{background:#0000}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor .slider.active{background:#ababab66}.modified-in-monaco-diff-editor.hc-black .slider.active,.modified-in-monaco-diff-editor.hc-light .slider.active{background:none}.monaco-editor .insert-sign,.monaco-diff-editor .insert-sign,.monaco-editor .delete-sign,.monaco-diff-editor .delete-sign{font-size:11px!important;opacity:.7!important;display:flex!important;align-items:center}.monaco-editor.hc-black .insert-sign,.monaco-diff-editor.hc-black .insert-sign,.monaco-editor.hc-black .delete-sign,.monaco-diff-editor.hc-black .delete-sign,.monaco-editor.hc-light .insert-sign,.monaco-diff-editor.hc-light .insert-sign,.monaco-editor.hc-light .delete-sign,.monaco-diff-editor.hc-light .delete-sign{opacity:1}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .inline-added-margin-view-zone{text-align:right}.monaco-editor .arrow-revert-change{z-index:10;position:absolute}.monaco-editor .arrow-revert-change:hover{cursor:pointer}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}.monaco-editor .char-insert,.monaco-diff-editor .char-insert{background-color:var(--vscode-diffEditor-insertedTextBackground)}.monaco-editor .line-insert,.monaco-diff-editor .line-insert{background-color:var(--vscode-diffEditor-insertedLineBackground, var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .line-insert,.monaco-editor .char-insert{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-insertedTextBorder)}.monaco-editor.hc-black .line-insert,.monaco-editor.hc-light .line-insert,.monaco-editor.hc-black .char-insert,.monaco-editor.hc-light .char-insert{border-style:dashed}.monaco-editor .line-delete,.monaco-editor .char-delete{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-removedTextBorder)}.monaco-editor.hc-black .line-delete,.monaco-editor.hc-light .line-delete,.monaco-editor.hc-black .char-delete,.monaco-editor.hc-light .char-delete{border-style:dashed}.monaco-editor .inline-added-margin-view-zone,.monaco-editor .gutter-insert,.monaco-diff-editor .gutter-insert{background-color:var(--vscode-diffEditorGutter-insertedLineBackground, var(--vscode-diffEditor-insertedLineBackground), var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .char-delete,.monaco-diff-editor .char-delete,.monaco-editor .inline-deleted-text{background-color:var(--vscode-diffEditor-removedTextBackground)}.monaco-editor .inline-deleted-text{text-decoration:line-through}.monaco-editor .line-delete,.monaco-diff-editor .line-delete{background-color:var(--vscode-diffEditor-removedLineBackground, var(--vscode-diffEditor-removedTextBackground))}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .gutter-delete,.monaco-diff-editor .gutter-delete{background-color:var(--vscode-diffEditorGutter-removedLineBackground, var(--vscode-diffEditor-removedLineBackground), var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor.side-by-side .editor.modified{box-shadow:-6px 0 5px -5px var(--vscode-scrollbar-shadow);border-left:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor.side-by-side .editor.original{box-shadow:6px 0 5px -5px var(--vscode-scrollbar-shadow);border-right:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor .diffViewport{background:var(--vscode-scrollbarSlider-background)}.monaco-diff-editor .diffViewport:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-diff-editor .diffViewport:active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .diagonal-fill{background-image:linear-gradient(-45deg,var(--vscode-diffEditor-diagonalFill) 12.5%,#0000 12.5%,#0000 50%,var(--vscode-diffEditor-diagonalFill) 50%,var(--vscode-diffEditor-diagonalFill) 62.5%,#0000 62.5%,#0000 100%);background-size:8px 8px}.monaco-diff-editor .gutter{position:relative;overflow:hidden;flex-shrink:0;flex-grow:0}.monaco-diff-editor .gutter>div{position:absolute}.monaco-diff-editor .gutter .gutterItem{opacity:0;transition:opacity .7s}.monaco-diff-editor .gutter .gutterItem.showAlways{opacity:1;transition:none}.monaco-diff-editor .gutter .gutterItem.noTransition{transition:none}.monaco-diff-editor .gutter:hover .gutterItem{opacity:1;transition:opacity .1s ease-in-out}.monaco-diff-editor .gutter .gutterItem .background{position:absolute;height:100%;left:50%;width:1px;border-left:2px var(--vscode-menu-border) solid}.monaco-diff-editor .gutter .gutterItem .buttons{position:absolute;width:100%;display:flex;justify-content:center;align-items:center}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar{height:-moz-fit-content;height:fit-content}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar{line-height:1}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container{width:-moz-fit-content;width:fit-content;border-radius:4px;background:var(--vscode-editorGutter-commentRangeForeground)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item .action-label{padding:1px 2px}.monaco-diff-editor .diff-hidden-lines-compact{display:flex;height:11px}.monaco-diff-editor .diff-hidden-lines-compact .line-left,.monaco-diff-editor .diff-hidden-lines-compact .line-right{height:1px;border-top:1px solid;border-color:var(--vscode-editorCodeLens-foreground);opacity:.5;margin:auto;width:100%}.monaco-diff-editor .diff-hidden-lines-compact .line-left{width:20px}.monaco-diff-editor .diff-hidden-lines-compact .text{color:var(--vscode-editorCodeLens-foreground);text-wrap:nowrap;font-size:11px;line-height:11px;margin:0 4px}.monaco-component.diff-review{-moz-user-select:none;user-select:none;-webkit-user-select:none;z-index:99}.monaco-diff-editor .diff-review{position:absolute}.monaco-component.diff-review .diff-review-line-number{text-align:right;display:inline-block;color:var(--vscode-editorLineNumber-foreground)}.monaco-component.diff-review .diff-review-summary{padding-left:10px}.monaco-component.diff-review .diff-review-shadow{position:absolute;box-shadow:var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset}.monaco-component.diff-review .diff-review-row{white-space:pre}.monaco-component.diff-review .diff-review-table{display:table;min-width:100%}.monaco-component.diff-review .diff-review-row{display:table-row;width:100%}.monaco-component.diff-review .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-component.diff-review .diff-review-spacer>.codicon{font-size:9px!important}.monaco-component.diff-review .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px;z-index:100}.monaco-component.diff-review .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}.monaco-component.diff-review .revertButton{cursor:pointer}.monaco-toolbar{height:100%}.monaco-toolbar .toolbar-toggle-more{display:inline-block;padding:0}.monaco-component.multiDiffEditor{background:var(--vscode-multiDiffEditor-background);position:relative;height:100%;width:100%;overflow-y:hidden}.monaco-component.multiDiffEditor>div{position:absolute;top:0;left:0;height:100%;width:100%}.monaco-component.multiDiffEditor>div.placeholder{visibility:hidden}.monaco-component.multiDiffEditor>div.placeholder.visible{visibility:visible}.monaco-component.multiDiffEditor>div.placeholder{display:grid;place-items:center;place-content:center}.monaco-component.multiDiffEditor .active{--vscode-multiDiffEditor-border: var(--vscode-focusBorder)}.monaco-component.multiDiffEditor .multiDiffEntry{display:flex;flex-direction:column;flex:1;overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button{margin:0 5px;cursor:pointer}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button a{display:block}.monaco-component.multiDiffEditor .multiDiffEntry .header{z-index:1000;background:var(--vscode-editor-background)}.monaco-component.multiDiffEditor .multiDiffEntry .header:not(.collapsed) .header-content{border-bottom:1px solid var(--vscode-sideBarSectionHeader-border)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content{margin:8px 0 0;padding:4px 5px;border-top:1px solid var(--vscode-multiDiffEditor-border);display:flex;align-items:center;color:var(--vscode-foreground);background:var(--vscode-multiDiffEditor-headerBackground)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content.shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path{display:flex;flex:1;min-width:0}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title{font-size:14px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title.original{flex:1;min-width:0;text-overflow:ellipsis}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .status{font-weight:600;opacity:.75;margin:0 10px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .actions{padding:0 8px}.monaco-component.multiDiffEditor .multiDiffEntry .editorParent{flex:1;display:flex;flex-direction:column;border-bottom:1px solid var(--vscode-multiDiffEditor-border);overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .editorContainer{flex:1} +.react-flow__node{z-index:-1!important;transition:transform 1s ease}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*:where(.twp,.twp *),:before:where(.twp,.twp *),:after:where(.twp,.twp *){box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before:where(.twp,.twp *),:after:where(.twp,.twp *){--tw-content: ""}.twp{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}.twp{margin:0;line-height:inherit}hr:where(.twp,.twp *){height:0;color:inherit;border-top-width:1px}abbr:where([title]):where(.twp,.twp *){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1:where(.twp,.twp *),h2:where(.twp,.twp *),h3:where(.twp,.twp *),h4:where(.twp,.twp *),h5:where(.twp,.twp *),h6:where(.twp,.twp *){font-size:inherit;font-weight:inherit}a:where(.twp,.twp *){color:inherit;text-decoration:inherit}b:where(.twp,.twp *),strong:where(.twp,.twp *){font-weight:bolder}code:where(.twp,.twp *),kbd:where(.twp,.twp *),samp:where(.twp,.twp *),pre:where(.twp,.twp *){font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small:where(.twp,.twp *){font-size:80%}sub:where(.twp,.twp *),sup:where(.twp,.twp *){font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub:where(.twp,.twp *){bottom:-.25em}sup:where(.twp,.twp *){top:-.5em}table:where(.twp,.twp *){text-indent:0;border-color:inherit;border-collapse:collapse}button:where(.twp,.twp *),input:where(.twp,.twp *),optgroup:where(.twp,.twp *),select:where(.twp,.twp *),textarea:where(.twp,.twp *){font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button:where(.twp,.twp *),select:where(.twp,.twp *){text-transform:none}button:where(.twp,.twp *),input:where([type=button]):where(.twp,.twp *),input:where([type=reset]):where(.twp,.twp *),input:where([type=submit]):where(.twp,.twp *){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring:where(.twp,.twp *){outline:auto}:-moz-ui-invalid:where(.twp,.twp *){box-shadow:none}progress:where(.twp,.twp *){vertical-align:baseline}::-webkit-inner-spin-button:where(.twp,.twp *),::-webkit-outer-spin-button:where(.twp,.twp *){height:auto}[type=search]:where(.twp,.twp *){-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration:where(.twp,.twp *){-webkit-appearance:none}::-webkit-file-upload-button:where(.twp,.twp *){-webkit-appearance:button;font:inherit}summary:where(.twp,.twp *){display:list-item}blockquote:where(.twp,.twp *),dl:where(.twp,.twp *),dd:where(.twp,.twp *),h1:where(.twp,.twp *),h2:where(.twp,.twp *),h3:where(.twp,.twp *),h4:where(.twp,.twp *),h5:where(.twp,.twp *),h6:where(.twp,.twp *),hr:where(.twp,.twp *),figure:where(.twp,.twp *),p:where(.twp,.twp *),pre:where(.twp,.twp *){margin:0}fieldset:where(.twp,.twp *){margin:0;padding:0}legend:where(.twp,.twp *){padding:0}ol:where(.twp,.twp *),ul:where(.twp,.twp *),menu:where(.twp,.twp *){list-style:none;margin:0;padding:0}dialog:where(.twp,.twp *){padding:0}textarea:where(.twp,.twp *){resize:vertical}input::-moz-placeholder:where(.twp,.twp *),textarea::-moz-placeholder:where(.twp,.twp *){opacity:1;color:#9ca3af}input::placeholder:where(.twp,.twp *),textarea::placeholder:where(.twp,.twp *){opacity:1;color:#9ca3af}button:where(.twp,.twp *),[role=button]:where(.twp,.twp *){cursor:pointer}:disabled:where(.twp,.twp *){cursor:default}img:where(.twp,.twp *),svg:where(.twp,.twp *),video:where(.twp,.twp *),canvas:where(.twp,.twp *),audio:where(.twp,.twp *),iframe:where(.twp,.twp *),embed:where(.twp,.twp *),object:where(.twp,.twp *){display:block;vertical-align:middle}img:where(.twp,.twp *),video:where(.twp,.twp *){max-width:100%;height:auto}[hidden]:where(.twp,.twp *){display:none}:root{--background: 0 0% 100%;--foreground: 240 10% 4%;--border: 240 5% 84%;--muted: 240 4% 46%;--success: 142 72% 29%;--destructive: 0 72% 51%;--warning: 41 96% 40%}.dark{--background: 240 10% 4%;--foreground: 0 0% 98%;--border: 240 5% 26%;--muted: 240 5% 65%;--success: 142 72% 29%;--destructive: 0 72% 51%;--warning: 41 96% 40%}*,*:before,*:after{border-color:hsl(var(--border))}body{height:100%;background-color:hsl(var(--background));font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}svg{flex-shrink:0}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.sticky{position:sticky!important}.bottom-0{bottom:0!important}.bottom-6{bottom:1.5rem!important}.end-0{inset-inline-end:0px!important}.end-3{inset-inline-end:.75rem!important}.left-0{left:0!important}.left-1\/2{left:50%!important}.left-6{left:1.5rem!important}.left-full{left:100%!important}.right-0{right:0!important}.right-1{right:.25rem!important}.right-2{right:.5rem!important}.right-6{right:1.5rem!important}.top-0{top:0!important}.top-1{top:.25rem!important}.top-1\.5{top:.375rem!important}.top-1\/2{top:50%!important}.top-3{top:.75rem!important}.top-6{top:1.5rem!important}.top-\[0px\]{top:0!important}.top-\[50\%\]{top:50%!important}.isolate{isolation:isolate!important}.z-0{z-index:0!important}.z-10{z-index:10!important}.z-20{z-index:20!important}.z-50{z-index:50!important}.col-span-3{grid-column:span 3 / span 3!important}.col-span-full{grid-column:1 / -1!important}.col-start-1{grid-column-start:1!important}.col-start-2{grid-column-start:2!important}.-col-end-1{grid-column-end:-1!important}.-col-end-2{grid-column-end:-2!important}.row-start-1{grid-row-start:1!important}.-mx-\[1px\]{margin-left:-1px!important;margin-right:-1px!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.-mb-px{margin-bottom:-1px!important}.-me-2{margin-inline-end:-.5rem!important}.-ms-2{margin-inline-start:-.5rem!important}.mb-0{margin-bottom:0!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:.75rem!important}.mb-6{margin-bottom:1.5rem!important}.me-1{margin-inline-end:.25rem!important}.me-12{margin-inline-end:3rem!important}.ml-2{margin-left:.5rem!important}.ml-2\.5{margin-left:.625rem!important}.ml-7{margin-left:1.75rem!important}.ml-auto{margin-left:auto!important}.mr-1\.5{margin-right:.375rem!important}.mr-3{margin-right:.75rem!important}.mr-4{margin-right:1rem!important}.ms-1{margin-inline-start:.25rem!important}.ms-2{margin-inline-start:.5rem!important}.ms-auto{margin-inline-start:auto!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:.75rem!important}.mt-4{margin-top:1rem!important}.mt-8{margin-top:2rem!important}.mt-\[5px\]{margin-top:5px!important}.mt-auto{margin-top:auto!important}.box-content{box-sizing:content-box!important}.block{display:block!important}.inline-block{display:inline-block!important}.inline{display:inline!important}.flex{display:flex!important}.inline-flex{display:inline-flex!important}.table{display:table!important}.grid{display:grid!important}.contents{display:contents!important}.hidden{display:none!important}.aspect-square{aspect-ratio:1 / 1!important}.size-10{width:2.5rem!important;height:2.5rem!important}.size-11{width:2.75rem!important;height:2.75rem!important}.size-12{width:3rem!important;height:3rem!important}.size-14{width:3.5rem!important;height:3.5rem!important}.size-16{width:4rem!important;height:4rem!important}.size-2{width:.5rem!important;height:.5rem!important}.size-20{width:5rem!important;height:5rem!important}.size-3{width:.75rem!important;height:.75rem!important}.size-4{width:1rem!important;height:1rem!important}.size-5{width:1.25rem!important;height:1.25rem!important}.size-6{width:1.5rem!important;height:1.5rem!important}.size-8{width:2rem!important;height:2rem!important}.size-9{width:2.25rem!important;height:2.25rem!important}.size-\[1\.0625rem\]{width:1.0625rem!important;height:1.0625rem!important}.size-\[1\.125rem\]{width:1.125rem!important;height:1.125rem!important}.size-\[calc\(theme\(size\.9\)-1px\)\]{width:calc(2.25rem - 1px)!important;height:calc(2.25rem - 1px)!important}.size-\[max\(100\%\,2\.75rem\)\]{width:max(100%,2.75rem)!important;height:max(100%,2.75rem)!important}.size-full{width:100%!important;height:100%!important}.h-1\.5{height:.375rem!important}.h-12{height:3rem!important}.h-14{height:3.5rem!important}.h-2{height:.5rem!important}.h-4{height:1rem!important}.h-48{height:12rem!important}.h-5{height:1.25rem!important}.h-6{height:1.5rem!important}.h-8{height:2rem!important}.h-9{height:2.25rem!important}.h-\[--visual-viewport-height\]{height:var(--visual-viewport-height)!important}.h-\[0\.95rem\]{height:.95rem!important}.h-\[min\(85vh\,820px\)\]{height:min(85vh,820px)!important}.h-auto{height:auto!important}.h-full{height:100%!important}.h-px{height:1px!important}.h-screen{height:100vh!important}.max-h-\[280px\]{max-height:280px!important}.max-h-\[calc\(var\(--visual-viewport-height\)-var\(--visual-viewport-vertical-padding\)-var\(--dialog-header-height\,0px\)-var\(--dialog-footer-height\,0px\)\)\]{max-height:calc(var(--visual-viewport-height) - var(--visual-viewport-vertical-padding) - var(--dialog-header-height,0px) - var(--dialog-footer-height,0px))!important}.max-h-\[inherit\]{max-height:inherit!important}.max-h-full{max-height:100%!important}.min-h-9{min-height:2.25rem!important}.min-h-screen{min-height:100vh!important}.w-1\.5{width:.375rem!important}.w-1\/2{width:50%!important}.w-1\/3{width:33.333333%!important}.w-10{width:2.5rem!important}.w-12{width:3rem!important}.w-16{width:4rem!important}.w-2\/3{width:66.666667%!important}.w-2\/5{width:40%!important}.w-3\/4{width:75%!important}.w-3\/5{width:60%!important}.w-32{width:8rem!important}.w-36{width:9rem!important}.w-4{width:1rem!important}.w-5{width:1.25rem!important}.w-56{width:14rem!important}.w-64{width:16rem!important}.w-72{width:18rem!important}.w-8{width:2rem!important}.w-96{width:24rem!important}.w-\[--trigger-width\]{width:var(--trigger-width)!important}.w-\[0\.95rem\]{width:.95rem!important}.w-\[1\.5px\]{width:1.5px!important}.w-\[100px\]{width:100px!important}.w-\[180px\]{width:180px!important}.w-\[1px\]{width:1px!important}.w-\[220px\]{width:220px!important}.w-\[250px\]{width:250px!important}.w-\[350px\]{width:350px!important}.w-\[550px\]{width:550px!important}.w-\[calc\(100\%-24px\)\]{width:calc(100% - 24px)!important}.w-\[min\(85vw\,360px\)\]{width:min(85vw,360px)!important}.w-auto{width:auto!important}.w-full{width:100%!important}.w-max{width:-moz-max-content!important;width:max-content!important}.min-w-36{min-width:9rem!important}.min-w-48{min-width:12rem!important}.min-w-52{min-width:13rem!important}.min-w-56{min-width:14rem!important}.min-w-6{min-width:1.5rem!important}.min-w-60{min-width:15rem!important}.min-w-64{min-width:16rem!important}.min-w-72{min-width:18rem!important}.min-w-9{min-width:2.25rem!important}.min-w-96{min-width:24rem!important}.min-w-\[110px\]{min-width:110px!important}.min-w-\[150px\]{min-width:150px!important}.min-w-\[278px\]{min-width:278px!important}.min-w-\[max\(144px\,var\(--trigger-width\)\)\]{min-width:max(144px,var(--trigger-width))!important}.min-w-fit{min-width:-moz-fit-content!important;min-width:fit-content!important}.min-w-full{min-width:100%!important}.min-w-max{min-width:-moz-max-content!important;min-width:max-content!important}.max-w-2xl{max-width:42rem!important}.max-w-32{max-width:8rem!important}.max-w-4xl{max-width:56rem!important}.max-w-56{max-width:14rem!important}.max-w-64{max-width:16rem!important}.max-w-6xl{max-width:72rem!important}.max-w-72{max-width:18rem!important}.max-w-7xl{max-width:80rem!important}.max-w-80{max-width:20rem!important}.max-w-96{max-width:24rem!important}.max-w-fit{max-width:-moz-fit-content!important;max-width:fit-content!important}.max-w-lg{max-width:32rem!important}.max-w-md{max-width:28rem!important}.max-w-none{max-width:none!important}.max-w-prose{max-width:65ch!important}.max-w-sm{max-width:24rem!important}.flex-1{flex:1 1 0%!important}.flex-shrink-0,.shrink-0{flex-shrink:0!important}.grow{flex-grow:1!important}.border-separate{border-collapse:separate!important}.border-spacing-0{--tw-border-spacing-x: 0px !important;--tw-border-spacing-y: 0px !important;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)!important}.-translate-x-1\/2{--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-1\.5{--tw-translate-y: -.375rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.-translate-y-1\/2{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-0{--tw-translate-x: 0px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-1{--tw-translate-x: .25rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[15\%\]{--tw-translate-x: 15% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[50\%\]{--tw-translate-x: 50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-x-\[8px\]{--tw-translate-x: 8px !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-\[-50\%\]{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.translate-y-\[20\%\]{--tw-translate-y: 20% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rotate-90{--tw-rotate: 90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.animate-none{animation:none!important}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite!important}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite!important}.cursor-col-resize{cursor:col-resize!important}.cursor-default{cursor:default!important}.cursor-pointer{cursor:pointer!important}.select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.resize-y{resize:vertical!important}.resize-x{resize:horizontal!important}.resize{resize:both!important}.scroll-pt-\[2\.281rem\]{scroll-padding-top:2.281rem!important}.appearance-none{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important}.grid-flow-col{grid-auto-flow:column!important}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))!important}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))!important}.grid-cols-\[1fr_16px_1fr_36px\]{grid-template-columns:1fr 16px 1fr 36px!important}.grid-cols-\[1fr_16px_1fr_40px\]{grid-template-columns:1fr 16px 1fr 40px!important}.grid-cols-\[1fr_36px\]{grid-template-columns:1fr 36px!important}.grid-cols-\[1fr_calc\(theme\(size\.5\)\+20px\)\]{grid-template-columns:1fr calc(1.25rem + 20px)!important}.grid-cols-\[36px_1fr_minmax\(40px\,max-content\)_minmax\(40px\,max-content\)\]{grid-template-columns:36px 1fr minmax(40px,max-content) minmax(40px,max-content)!important}.grid-cols-\[auto_auto_1fr_auto_auto\]{grid-template-columns:auto auto 1fr auto auto!important}.grid-cols-\[calc\(theme\(size\.5\)\+20px\)_1fr_calc\(theme\(size\.5\)\+20px\)\]{grid-template-columns:calc(1.25rem + 20px) 1fr calc(1.25rem + 20px)!important}.grid-cols-subgrid{grid-template-columns:subgrid!important}.flex-row{flex-direction:row!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-col{flex-direction:column!important}.flex-col-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.place-content-center{place-content:center!important}.items-start{align-items:flex-start!important}.items-end{align-items:flex-end!important}.items-center{align-items:center!important}.items-stretch{align-items:stretch!important}.justify-start{justify-content:flex-start!important}.justify-end{justify-content:flex-end!important}.justify-center{justify-content:center!important}.justify-between{justify-content:space-between!important}.gap-1{gap:.25rem!important}.gap-1\.5{gap:.375rem!important}.gap-12{gap:3rem!important}.gap-2{gap:.5rem!important}.gap-2\.5{gap:.625rem!important}.gap-3{gap:.75rem!important}.gap-4{gap:1rem!important}.gap-5{gap:1.25rem!important}.gap-6{gap:1.5rem!important}.gap-x-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.gap-x-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.gap-x-2\.5{-moz-column-gap:.625rem!important;column-gap:.625rem!important}.gap-x-3{-moz-column-gap:.75rem!important;column-gap:.75rem!important}.gap-x-4{-moz-column-gap:1rem!important;column-gap:1rem!important}.gap-x-6{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.gap-x-8{-moz-column-gap:2rem!important;column-gap:2rem!important}.gap-y-0{row-gap:0px!important}.gap-y-0\.5{row-gap:.125rem!important}.gap-y-1{row-gap:.25rem!important}.gap-y-1\.5{row-gap:.375rem!important}.gap-y-4{row-gap:1rem!important}.gap-y-6{row-gap:1.5rem!important}.gap-y-8{row-gap:2rem!important}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(-.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.375rem * var(--tw-space-x-reverse))!important;margin-left:calc(.375rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(.75rem * var(--tw-space-x-reverse))!important;margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(1rem * var(--tw-space-x-reverse))!important;margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0 !important;margin-right:calc(1.5rem * var(--tw-space-x-reverse))!important;margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))!important}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.25rem * var(--tw-space-y-reverse))!important}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))!important}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(3rem * var(--tw-space-y-reverse))!important}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.5rem * var(--tw-space-y-reverse))!important}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.75rem * var(--tw-space-y-reverse))!important}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(.875rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(.875rem * var(--tw-space-y-reverse))!important}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1rem * var(--tw-space-y-reverse))!important}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))!important}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))!important}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0 !important;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)))!important;margin-bottom:calc(2rem * var(--tw-space-y-reverse))!important}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0 !important;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))!important;border-bottom-width:calc(1px * var(--tw-divide-y-reverse))!important}.place-self-center{place-self:center!important}.self-start{align-self:flex-start!important}.self-center{align-self:center!important}.self-stretch{align-self:stretch!important}.justify-self-start{justify-self:start!important}.justify-self-end{justify-self:end!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-x-auto{overflow-x:auto!important}.overflow-y-auto{overflow-y:auto!important}.truncate{overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.whitespace-nowrap{white-space:nowrap!important}.text-wrap{text-wrap:wrap!important}.text-nowrap{text-wrap:nowrap!important}.text-balance{text-wrap:balance!important}.text-pretty{text-wrap:pretty!important}.rounded{border-radius:.25rem!important}.rounded-full{border-radius:9999px!important}.rounded-lg{border-radius:.5rem!important}.rounded-md{border-radius:.375rem!important}.rounded-none{border-radius:0!important}.rounded-sm{border-radius:.125rem!important}.rounded-xl{border-radius:.75rem!important}.rounded-b-none{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-l-lg{border-top-left-radius:.5rem!important;border-bottom-left-radius:.5rem!important}.rounded-l-sm{border-top-left-radius:.125rem!important;border-bottom-left-radius:.125rem!important}.rounded-r-lg{border-top-right-radius:.5rem!important;border-bottom-right-radius:.5rem!important}.rounded-t-lg{border-top-left-radius:.5rem!important;border-top-right-radius:.5rem!important}.rounded-t-none{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-t-xl{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.rounded-tl-md{border-top-left-radius:.375rem!important}.border{border-width:1px!important}.border-0{border-width:0px!important}.border-2{border-width:2px!important}.border-\[5px\]{border-width:5px!important}.border-y{border-top-width:1px!important;border-bottom-width:1px!important}.border-b{border-bottom-width:1px!important}.border-l{border-left-width:1px!important}.border-r{border-right-width:1px!important}.border-t{border-top-width:1px!important}.border-t-0{border-top-width:0px!important}.border-solid{border-style:solid!important}.border-dashed{border-style:dashed!important}.border-dotted{border-style:dotted!important}.border-none{border-style:none!important}.border-\[var\(--btn-bg\)\]{border-color:var(--btn-bg)!important}.border-accent{border-color:hsl(var(--accent))!important}.border-background{border-color:hsl(var(--background))!important}.border-black{--tw-border-opacity: 1 !important;border-color:rgb(0 0 0 / var(--tw-border-opacity))!important}.border-blue-500{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.border-border{border-color:hsl(var(--border))!important}.border-border\/35{border-color:hsl(var(--border) / .35)!important}.border-border\/50{border-color:hsl(var(--border) / .5)!important}.border-border\/65{border-color:hsl(var(--border) / .65)!important}.border-border\/75{border-color:hsl(var(--border) / .75)!important}.border-destructive\/15{border-color:hsl(var(--destructive) / .15)!important}.border-gray-500{--tw-border-opacity: 1 !important;border-color:rgb(107 114 128 / var(--tw-border-opacity))!important}.border-green-500{--tw-border-opacity: 1 !important;border-color:rgb(34 197 94 / var(--tw-border-opacity))!important}.border-orange-500{--tw-border-opacity: 1 !important;border-color:rgb(249 115 22 / var(--tw-border-opacity))!important}.border-pink-500{--tw-border-opacity: 1 !important;border-color:rgb(236 72 153 / var(--tw-border-opacity))!important}.border-purple-500{--tw-border-opacity: 1 !important;border-color:rgb(168 85 247 / var(--tw-border-opacity))!important}.border-red-500{--tw-border-opacity: 1 !important;border-color:rgb(239 68 68 / var(--tw-border-opacity))!important}.border-success\/15{border-color:hsl(var(--success) / .15)!important}.border-transparent{border-color:transparent!important}.border-warning\/15{border-color:hsl(var(--warning) / .15)!important}.border-white{--tw-border-opacity: 1 !important;border-color:rgb(255 255 255 / var(--tw-border-opacity))!important}.border-yellow-500{--tw-border-opacity: 1 !important;border-color:rgb(234 179 8 / var(--tw-border-opacity))!important}.border-zinc-200{--tw-border-opacity: 1 !important;border-color:rgb(228 228 231 / var(--tw-border-opacity))!important}.border-zinc-400\/75{border-color:#a1a1aabf!important}.border-zinc-700{--tw-border-opacity: 1 !important;border-color:rgb(63 63 70 / var(--tw-border-opacity))!important}.border-zinc-800{--tw-border-opacity: 1 !important;border-color:rgb(39 39 42 / var(--tw-border-opacity))!important}.border-zinc-900{--tw-border-opacity: 1 !important;border-color:rgb(24 24 27 / var(--tw-border-opacity))!important}.border-zinc-950\/10{border-color:#09090b1a!important}.border-zinc-950\/5{border-color:#09090b0d!important}.border-b-zinc-950\/15{border-bottom-color:#09090b26!important}.border-l-border\/50{border-left-color:hsl(var(--border) / .5)!important}.bg-\[var\(--btn-bg\)\]{background-color:var(--btn-bg)!important}.bg-accent{background-color:hsl(var(--accent))!important}.bg-amber-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 191 36 / var(--tw-bg-opacity))!important}.bg-background{background-color:hsl(var(--background))!important}.bg-blue-500{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.bg-border{background-color:hsl(var(--border))!important}.bg-destructive{background-color:hsl(var(--destructive))!important}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)!important}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)!important}.bg-gray-300{--tw-bg-opacity: 1 !important;background-color:rgb(209 213 219 / var(--tw-bg-opacity))!important}.bg-gray-500{--tw-bg-opacity: 1 !important;background-color:rgb(107 114 128 / var(--tw-bg-opacity))!important}.bg-green-400{--tw-bg-opacity: 1 !important;background-color:rgb(74 222 128 / var(--tw-bg-opacity))!important}.bg-green-500{--tw-bg-opacity: 1 !important;background-color:rgb(34 197 94 / var(--tw-bg-opacity))!important}.bg-hover{background-color:hsl(var(--hover))!important}.bg-inherit{background-color:inherit!important}.bg-orange-400{--tw-bg-opacity: 1 !important;background-color:rgb(251 146 60 / var(--tw-bg-opacity))!important}.bg-orange-500{--tw-bg-opacity: 1 !important;background-color:rgb(249 115 22 / var(--tw-bg-opacity))!important}.bg-pink-500{--tw-bg-opacity: 1 !important;background-color:rgb(236 72 153 / var(--tw-bg-opacity))!important}.bg-purple-500{--tw-bg-opacity: 1 !important;background-color:rgb(168 85 247 / var(--tw-bg-opacity))!important}.bg-red-500{--tw-bg-opacity: 1 !important;background-color:rgb(239 68 68 / var(--tw-bg-opacity))!important}.bg-red-600{--tw-bg-opacity: 1 !important;background-color:rgb(220 38 38 / var(--tw-bg-opacity))!important}.bg-success{background-color:hsl(var(--success))!important}.bg-success\/10{background-color:hsl(var(--success) / .1)!important}.bg-success\/5{background-color:hsl(var(--success) / .05)!important}.bg-transparent{background-color:transparent!important}.bg-warning\/10{background-color:hsl(var(--warning) / .1)!important}.bg-warning\/5{background-color:hsl(var(--warning) / .05)!important}.bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.bg-yellow-500{--tw-bg-opacity: 1 !important;background-color:rgb(234 179 8 / var(--tw-bg-opacity))!important}.bg-yellow-600{--tw-bg-opacity: 1 !important;background-color:rgb(202 138 4 / var(--tw-bg-opacity))!important}.bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.bg-zinc-200{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.bg-zinc-700\/20{background-color:#3f3f4633!important}.bg-zinc-800{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.bg-zinc-900{--tw-bg-opacity: 1 !important;background-color:rgb(24 24 27 / var(--tw-bg-opacity))!important}.bg-zinc-950{--tw-bg-opacity: 1 !important;background-color:rgb(9 9 11 / var(--tw-bg-opacity))!important}.bg-zinc-950\/40{background-color:#09090b66!important}.bg-opacity-60{--tw-bg-opacity: .6 !important}.bg-clip-content{background-clip:content-box!important}.fill-zinc-950{fill:#09090b!important}.stroke-zinc-950{stroke:#09090b!important}.stroke-\[0\.5px\]{stroke-width:.5px!important}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.p-0{padding:0!important}.p-0\.5{padding:.125rem!important}.p-1{padding:.25rem!important}.p-1\.5{padding:.375rem!important}.p-12{padding:3rem!important}.p-2{padding:.5rem!important}.p-3{padding:.75rem!important}.p-4{padding:1rem!important}.p-6{padding:1.5rem!important}.p-8{padding:2rem!important}.p-\[calc\(theme\(spacing\[2\.5\]\)-var\(--border-with\,1px\)\)\]{padding:calc(.625rem - var(--border-with,1px))!important}.px-0{padding-left:0!important;padding-right:0!important}.px-0\.5{padding-left:.125rem!important;padding-right:.125rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-1\.5{padding-left:.375rem!important;padding-right:.375rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-2\.5{padding-left:.625rem!important;padding-right:.625rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.px-3\.5{padding-left:.875rem!important;padding-right:.875rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.px-5{padding-left:1.25rem!important;padding-right:1.25rem!important}.px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-7{padding-left:1.75rem!important;padding-right:1.75rem!important}.px-\[8px\]{padding-left:8px!important;padding-right:8px!important}.px-\[calc\(theme\(size\.11\)\+10px\)\]{padding-left:calc(2.75rem + 10px)!important;padding-right:calc(2.75rem + 10px)!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.py-12{padding-top:3rem!important;padding-bottom:3rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.py-24{padding-top:6rem!important;padding-bottom:6rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.py-6{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-\[5px\]{padding-top:5px!important;padding-bottom:5px!important}.py-\[calc\(theme\(spacing\[2\.5\]\)-1px\)\]{padding-top:calc(.625rem - 1px)!important;padding-bottom:calc(.625rem - 1px)!important}.py-\[calc\(theme\(spacing\[2\.5\]\)-var\(--border-with\,1px\)\)\]{padding-top:calc(.625rem - var(--border-with,1px))!important;padding-bottom:calc(.625rem - var(--border-with,1px))!important}.pb-0{padding-bottom:0!important}.pb-0\.5{padding-bottom:.125rem!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:.75rem!important}.pb-4{padding-bottom:1rem!important}.pb-6{padding-bottom:1.5rem!important}.pb-px{padding-bottom:1px!important}.pe-0\.5{padding-inline-end:.125rem!important}.pe-1{padding-inline-end:.25rem!important}.pe-10{padding-inline-end:2.5rem!important}.pe-12{padding-inline-end:3rem!important}.pe-14{padding-inline-end:3.5rem!important}.pe-2{padding-inline-end:.5rem!important}.pe-4{padding-inline-end:1rem!important}.pe-8{padding-inline-end:2rem!important}.pl-3{padding-left:.75rem!important}.pl-4{padding-left:1rem!important}.pl-8{padding-left:2rem!important}.pl-px{padding-left:1px!important}.pr-1{padding-right:.25rem!important}.ps-1{padding-inline-start:.25rem!important}.ps-1\.5{padding-inline-start:.375rem!important}.ps-10{padding-inline-start:2.5rem!important}.ps-16{padding-inline-start:4rem!important}.ps-2{padding-inline-start:.5rem!important}.ps-2\.5{padding-inline-start:.625rem!important}.ps-6{padding-inline-start:1.5rem!important}.ps-8{padding-inline-start:2rem!important}.pt-2{padding-top:.5rem!important}.pt-4{padding-top:1rem!important}.pt-6{padding-top:1.5rem!important}.pt-8{padding-top:2rem!important}.text-left{text-align:left!important}.text-center{text-align:center!important}.text-right{text-align:right!important}.text-start{text-align:start!important}.align-middle{vertical-align:middle!important}.align-text-bottom{vertical-align:text-bottom!important}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"!important}.text-2xl{font-size:1.5rem!important;line-height:2rem!important}.text-3xl{font-size:1.875rem!important;line-height:2.25rem!important}.text-\[0\.65rem\]{font-size:.65rem!important}.text-base,.text-base\/6{font-size:1rem!important;line-height:1.5rem!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.text-sm\/6{font-size:.875rem!important;line-height:1.5rem!important}.text-xl{font-size:1.25rem!important;line-height:1.75rem!important}.text-xs,.text-xs\/4{font-size:.75rem!important;line-height:1rem!important}.text-xs\/6{font-size:.75rem!important;line-height:1.5rem!important}.font-bold{font-weight:700!important}.font-medium{font-weight:500!important}.font-normal{font-weight:400!important}.font-semibold{font-weight:600!important}.uppercase{text-transform:uppercase!important}.leading-6{line-height:1.5rem!important}.leading-7{line-height:1.75rem!important}.tracking-widest{letter-spacing:.1em!important}.text-\[var\(--btn-color\)\]{color:var(--btn-color)!important}.text-accent{color:hsl(var(--accent))!important}.text-destructive{color:hsl(var(--destructive))!important}.text-emerald-600{--tw-text-opacity: 1 !important;color:rgb(5 150 105 / var(--tw-text-opacity))!important}.text-foreground{color:hsl(var(--foreground))!important}.text-gray-300{--tw-text-opacity: 1 !important;color:rgb(209 213 219 / var(--tw-text-opacity))!important}.text-gray-500{--tw-text-opacity: 1 !important;color:rgb(107 114 128 / var(--tw-text-opacity))!important}.text-gray-800{--tw-text-opacity: 1 !important;color:rgb(31 41 55 / var(--tw-text-opacity))!important}.text-gray-900{--tw-text-opacity: 1 !important;color:rgb(17 24 39 / var(--tw-text-opacity))!important}.text-muted{color:hsl(var(--muted))!important}.text-muted\/45{color:hsl(var(--muted) / .45)!important}.text-muted\/50{color:hsl(var(--muted) / .5)!important}.text-muted\/75{color:hsl(var(--muted) / .75)!important}.text-purple-500{--tw-text-opacity: 1 !important;color:rgb(168 85 247 / var(--tw-text-opacity))!important}.text-red-500{--tw-text-opacity: 1 !important;color:rgb(239 68 68 / var(--tw-text-opacity))!important}.text-red-600{--tw-text-opacity: 1 !important;color:rgb(220 38 38 / var(--tw-text-opacity))!important}.text-sky-500{--tw-text-opacity: 1 !important;color:rgb(14 165 233 / var(--tw-text-opacity))!important}.text-slate-400{--tw-text-opacity: 1 !important;color:rgb(148 163 184 / var(--tw-text-opacity))!important}.text-success{color:hsl(var(--success))!important}.text-warning{color:hsl(var(--warning))!important}.text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.text-white\/75{color:#ffffffbf!important}.text-zinc-300{--tw-text-opacity: 1 !important;color:rgb(212 212 216 / var(--tw-text-opacity))!important}.underline{text-decoration-line:underline!important}.underline-offset-2{text-underline-offset:2px!important}.underline-offset-4{text-underline-offset:4px!important}.caret-transparent{caret-color:transparent!important}.opacity-0{opacity:0!important}.opacity-100{opacity:1!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-none{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.outline-none{outline:2px solid transparent!important;outline-offset:2px!important}.outline{outline-style:solid!important}.outline-0{outline-width:0px!important}.outline-1{outline-width:1px!important}.outline-2{outline-width:2px!important}.-outline-offset-1{outline-offset:-1px!important}.-outline-offset-2{outline-offset:-2px!important}.outline-offset-0{outline-offset:0px!important}.outline-offset-1{outline-offset:1px!important}.outline-black{outline-color:#000!important}.outline-black\/20{outline-color:#0003!important}.outline-black\/5{outline-color:#0000000d!important}.outline-gray-300{outline-color:#d1d5db!important}.outline-transparent{outline-color:transparent!important}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-4{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.ring-inset{--tw-ring-inset: inset !important}.ring-accent{--tw-ring-color: hsl(var(--accent)) !important}.ring-background{--tw-ring-color: hsl(var(--background)) !important}.ring-gray-300{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity)) !important}.ring-zinc-950\/10{--tw-ring-color: rgb(9 9 11 / .1) !important}.ring-offset-0{--tw-ring-offset-width: 0px !important}.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)!important}.backdrop-blur-md{--tw-backdrop-blur: blur(12px) !important;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px) !important;-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important;backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)!important}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition-\[background-color\]{transition-property:background-color!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.transition-all{transition-property:all!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important;transition-duration:.15s!important}.duration-0{transition-duration:0s!important}.duration-1000{transition-duration:1s!important}.duration-200{transition-duration:.2s!important}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)!important}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter!important;animation-duration:.15s!important;--tw-enter-opacity: initial !important;--tw-enter-scale: initial !important;--tw-enter-rotate: initial !important;--tw-enter-translate-x: initial !important;--tw-enter-translate-y: initial !important}.slide-in-from-left{--tw-enter-translate-x: -100% !important}.slide-in-from-right{--tw-enter-translate-x: 100% !important}.slide-in-from-top{--tw-enter-translate-y: -100% !important}.slide-out-to-right-full{--tw-exit-translate-x: 100% !important}.duration-0{animation-duration:0s!important}.duration-1000{animation-duration:1s!important}.duration-200{animation-duration:.2s!important}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)!important}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)!important}.running{animation-play-state:running!important}.repeat-infinite{animation-iteration-count:infinite!important}.\@container{container-type:inline-size!important}.\[--border-with\:0px\]{--border-with: 0px !important}.\[--btn-bg-hover\:theme\(colors\.accent\/90\%\)\]{--btn-bg-hover: hsl(var(--accent) / 90%) !important}.\[--btn-bg-hover\:theme\(colors\.destructive\/90\%\)\]{--btn-bg-hover: hsl(var(--destructive) / 90%) !important}.\[--btn-bg-hover\:theme\(colors\.success\/90\%\)\]{--btn-bg-hover: hsl(var(--success) / 90%) !important}.\[--btn-bg\:theme\(colors\.accent\)\]{--btn-bg: hsl(var(--accent)) !important}.\[--btn-bg\:theme\(colors\.destructive\)\]{--btn-bg: hsl(var(--destructive)) !important}.\[--btn-bg\:theme\(colors\.success\)\]{--btn-bg: hsl(var(--success)) !important}.\[--btn-color\:theme\(colors\.accent\)\]{--btn-color: hsl(var(--accent)) !important}.\[--btn-color\:theme\(colors\.destructive\)\]{--btn-color: hsl(var(--destructive)) !important}.\[--btn-color\:theme\(colors\.foreground\)\]{--btn-color: hsl(var(--foreground)) !important}.\[--btn-color\:theme\(colors\.success\)\]{--btn-color: hsl(var(--success)) !important}.\[--tw-enter-translate-x\:calc\(-16rem-100\%\)\]{--tw-enter-translate-x: calc(-16rem - 100%) !important}.\[--visual-viewport-vertical-padding\:16px\]{--visual-viewport-vertical-padding: 16px !important}.\[--visual-viewport-vertical-padding\:32px\]{--visual-viewport-vertical-padding: 32px !important}.placeholder\:text-muted::-moz-placeholder{color:hsl(var(--muted))!important}.placeholder\:text-muted::placeholder{color:hsl(var(--muted))!important}.before\:absolute:before{content:var(--tw-content)!important;position:absolute!important}.before\:inset-x-0:before{content:var(--tw-content)!important;left:0!important;right:0!important}.before\:inset-y-0:before{content:var(--tw-content)!important;top:0!important;bottom:0!important}.before\:-bottom-2:before{content:var(--tw-content)!important;bottom:-.5rem!important}.before\:bottom-\[-1\.5px\]:before{content:var(--tw-content)!important;bottom:-1.5px!important}.before\:left-\[8px\]:before{content:var(--tw-content)!important;left:8px!important}.before\:mb-4:before{content:var(--tw-content)!important;margin-bottom:1rem!important}.before\:me-4:before{content:var(--tw-content)!important;margin-inline-end:1rem!important}.before\:block:before{content:var(--tw-content)!important;display:block!important}.before\:w-\[calc\(100\%-16px\)\]:before{content:var(--tw-content)!important;width:calc(100% - 16px)!important}.before\:w-full:before{content:var(--tw-content)!important;width:100%!important}.before\:flex-1:before{content:var(--tw-content)!important;flex:1 1 0%!important}.before\:border-b-2:before{content:var(--tw-content)!important;border-bottom-width:2px!important}.before\:border-l:before{content:var(--tw-content)!important;border-left-width:1px!important}.before\:border-t:before{content:var(--tw-content)!important;border-top-width:1px!important}.before\:border-accent:before{content:var(--tw-content)!important;border-color:hsl(var(--accent))!important}.before\:border-border\/35:before{content:var(--tw-content)!important;border-color:hsl(var(--border) / .35)!important}.before\:border-border\/75:before{content:var(--tw-content)!important;border-color:hsl(var(--border) / .75)!important}.before\:bg-accent:before{content:var(--tw-content)!important;background-color:hsl(var(--accent))!important}.before\:leading-\[0\.25rem\]:before{content:var(--tw-content)!important;line-height:.25rem!important}.before\:opacity-0:before{content:var(--tw-content)!important;opacity:0!important}.before\:content-\[\'\'\]:before{--tw-content: "" !important;content:var(--tw-content)!important}.before\:content-\[\'\.\'\]:before{--tw-content: "." !important;content:var(--tw-content)!important}.after\:pointer-events-none:after{content:var(--tw-content)!important;pointer-events:none!important}.after\:absolute:after{content:var(--tw-content)!important;position:absolute!important}.after\:bottom-\[55\%\]:after{content:var(--tw-content)!important;bottom:55%!important}.after\:end-2\.5:after{content:var(--tw-content)!important;inset-inline-end:.625rem!important}.after\:ms-0\.5:after{content:var(--tw-content)!important;margin-inline-start:.125rem!important}.after\:ms-4:after{content:var(--tw-content)!important;margin-inline-start:1rem!important}.after\:mt-4:after{content:var(--tw-content)!important;margin-top:1rem!important}.after\:size-\[9px\]:after{content:var(--tw-content)!important;width:9px!important;height:9px!important}.after\:flex-1:after{content:var(--tw-content)!important;flex:1 1 0%!important}.after\:-translate-x-1\/2:after{content:var(--tw-content)!important;--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:translate-y-1\/2:after{content:var(--tw-content)!important;--tw-translate-y: 50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:rotate-45:after{content:var(--tw-content)!important;--tw-rotate: 45deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.after\:border-b-\[1\.5px\]:after{content:var(--tw-content)!important;border-bottom-width:1.5px!important}.after\:border-r:after{content:var(--tw-content)!important;border-right-width:1px!important}.after\:border-r-\[1\.5px\]:after{content:var(--tw-content)!important;border-right-width:1.5px!important}.after\:border-t:after{content:var(--tw-content)!important;border-top-width:1px!important}.after\:border-border\/35:after{content:var(--tw-content)!important;border-color:hsl(var(--border) / .35)!important}.after\:border-border\/75:after{content:var(--tw-content)!important;border-color:hsl(var(--border) / .75)!important}.after\:border-muted:after{content:var(--tw-content)!important;border-color:hsl(var(--muted))!important}.after\:text-destructive:after{content:var(--tw-content)!important;color:hsl(var(--destructive))!important}.after\:content-\[\'\'\]:after{--tw-content: "" !important;content:var(--tw-content)!important}.after\:content-\[\'\*\'\]:after{--tw-content: "*" !important;content:var(--tw-content)!important}.first\:rounded-s-lg:first-child{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}.first\:border-s:first-child{border-inline-start-width:1px!important}.last\:rounded-e-lg:last-child{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.last\:border-e:last-child{border-inline-end-width:1px!important}.group\/row:last-child .group-last\/row\:border-b-0{border-bottom-width:0px!important}.has-\[\[data-ui\=item\]_\[data-ui\=icon\]\]\:min-w-\[max\(200px\,var\(--trigger-width\)\)\]:has([data-ui=item] [data-ui=icon]){min-width:max(200px,var(--trigger-width))!important}.has-\[\[data-ui\=item\]_kbd\]\:min-w-\[max\(176px\,var\(--trigger-width\)\)\]:has([data-ui=item] kbd){min-width:max(176px,var(--trigger-width))!important}.has-\[\[role\=dialog\]\]\:rounded-b-none:has([role=dialog]){border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.has-\[\[role\=dialog\]\]\:rounded-t-xl:has([role=dialog]){border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.has-\[input\[data-focused\=true\]\]\:border-blue-500:has(input[data-focused=true]){--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.has-\[input\[data-invalid\=true\]\[data-focused\=true\]\]\:border-blue-500:has(input[data-invalid=true][data-focused=true]){--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.has-\[input\[data-invalid\=true\]\]\:border-destructive:has(input[data-invalid=true]){border-color:hsl(var(--destructive))!important}.has-\[header\]\:px-2:has(header){padding-left:.5rem!important;padding-right:.5rem!important}.has-\[header\]\:pt-0:has(header){padding-top:0!important}.has-\[select\:disabled\]\:opacity-50:has(select:disabled){opacity:.5!important}.has-\[input\[data-focused\=true\]\]\:ring-1:has(input[data-focused=true]){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.has-\[input\[data-focused\=true\]\]\:ring-blue-500:has(input[data-focused=true]){--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.group[aria-expanded=true] .group-aria-\[expanded\=true\]\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:flex-row{flex-direction:row!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:flex-wrap{flex-wrap:wrap!important}.group[aria-orientation=horizontal] .group-aria-\[orientation\=horizontal\]\:text-nowrap{text-wrap:nowrap!important}.data-\[position\=left\]\:flex-row-reverse[data-position=left]{flex-direction:row-reverse!important}.data-\[position\=left\]\:justify-between[data-position=left]{justify-content:space-between!important}.data-\[invalid\]\:border-destructive[data-invalid]{border-color:hsl(var(--destructive))!important}.data-\[placeholder\]\:italic[data-placeholder]{font-style:italic!important}.data-\[pending\]\:text-transparent[data-pending]{color:transparent!important}.data-\[placeholder\]\:text-muted[data-placeholder]{color:hsl(var(--muted))!important}.data-\[pending\]\:opacity-75[data-pending]{opacity:.75!important}.group[data-pending] .group-data-\[pending\]\:sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.group[data-has-submenu] .group-data-\[has-submenu\]\:inline-block{display:inline-block!important}.group[data-pending] .group-data-\[pending\]\:flex{display:flex!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:flex-row{flex-direction:row!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:flex-wrap{flex-wrap:wrap!important}.group[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\:text-nowrap{text-wrap:nowrap!important}.group[data-variant=solid] .group-data-\[variant\=solid\]\:text-zinc-300{--tw-text-opacity: 1 !important;color:rgb(212 212 216 / var(--tw-text-opacity))!important}.peer[data-focused=true]~.peer-data-\[focused\=true\]\:flex{display:flex!important}.peer[data-focused=true]~.peer-data-\[focused\=true\]\:hidden{display:none!important}.group[data-placement=left] .group-placement-left\:-rotate-90{--tw-rotate: -90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-placement=right] .group-placement-right\:rotate-90{--tw-rotate: 90deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-placement=bottom] .group-placement-bottom\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.type-literal\:px-0[data-type=literal]{padding-left:0!important;padding-right:0!important}.orientation-horizontal\:h-7[data-orientation=horizontal]{height:1.75rem!important}.orientation-horizontal\:min-w-64[data-orientation=horizontal]{min-width:16rem!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:top-\[50\%\]{top:50%!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:h-1{height:.25rem!important}.group[data-orientation=horizontal] .group-orientation-horizontal\:w-full{width:100%!important}.orientation-vertical\:h-44[data-orientation=vertical]{height:11rem!important}.orientation-vertical\:w-7[data-orientation=vertical]{width:1.75rem!important}.orientation-vertical\:items-center[data-orientation=vertical]{align-items:center!important}.group[data-orientation=vertical] .group-orientation-vertical\:left-\[50\%\]{left:50%!important}.group[data-orientation=vertical] .group-orientation-vertical\:h-full{height:100%!important}.group[data-orientation=vertical] .group-orientation-vertical\:w-\[6px\]{width:6px!important}.group[data-orientation=vertical] .group-orientation-vertical\:translate-x-\[-50\%\]{--tw-translate-x: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-orientation=vertical] .group-orientation-vertical\:translate-y-\[-50\%\]{--tw-translate-y: -50% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.has-submenu\:pe-0[data-has-submenu]{padding-inline-end:0px!important}.group:where([data-rac])[data-open] .group-open\:mb-0{margin-bottom:0!important}.group:where([data-rac])[data-open] .group-open\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where([data-rac])[data-open] .group-open\:text-foreground{color:hsl(var(--foreground))!important}.group:where(:not([data-rac]))[open] .group-open\:mb-0{margin-bottom:0!important}.group:where(:not([data-rac]))[open] .group-open\:rotate-180{--tw-rotate: 180deg !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where(:not([data-rac]))[open] .group-open\:text-foreground{color:hsl(var(--foreground))!important}.entering\:duration-0[data-entering]{transition-duration:0s!important}.entering\:duration-200[data-entering]{transition-duration:.2s!important}.entering\:duration-300[data-entering]{transition-duration:.3s!important}.entering\:ease-out[data-entering]{transition-timing-function:cubic-bezier(0,0,.2,1)!important}.entering\:animate-in[data-entering]{animation-name:enter!important;animation-duration:.15s!important;--tw-enter-opacity: initial !important;--tw-enter-scale: initial !important;--tw-enter-rotate: initial !important;--tw-enter-translate-x: initial !important;--tw-enter-translate-y: initial !important}.entering\:fade-in[data-entering]{--tw-enter-opacity: 0 !important}.entering\:zoom-in-95[data-entering]{--tw-enter-scale: .95 !important}.entering\:duration-0[data-entering]{animation-duration:0s!important}.entering\:duration-200[data-entering]{animation-duration:.2s!important}.entering\:duration-300[data-entering]{animation-duration:.3s!important}.entering\:ease-out[data-entering]{animation-timing-function:cubic-bezier(0,0,.2,1)!important}.has-\[\[role\=dialog\]\]\:entering\:zoom-in-100[data-entering]:has([role=dialog]){--tw-enter-scale: 1 !important}.has-\[\[role\=dialog\]\]\:entering\:slide-in-from-bottom[data-entering]:has([role=dialog]){--tw-enter-translate-y: 100% !important}.data-\[replacement\=left\]\:entering\:slide-in-from-left[data-entering][data-replacement=left]{--tw-enter-translate-x: -100% !important}.data-\[replacement\=right\]\:entering\:slide-in-from-right[data-entering][data-replacement=right]{--tw-enter-translate-x: 100% !important}.entering\:placement-left\:slide-in-from-right-1[data-placement=left][data-entering]{--tw-enter-translate-x: .25rem !important}.entering\:placement-right\:slide-in-from-left-1[data-placement=right][data-entering]{--tw-enter-translate-x: -.25rem !important}.entering\:placement-top\:slide-in-from-bottom-1[data-placement=top][data-entering]{--tw-enter-translate-y: .25rem !important}.entering\:placement-bottom\:slide-in-from-top-1[data-placement=bottom][data-entering]{--tw-enter-translate-y: -.25rem !important}.exiting\:duration-0[data-exiting]{transition-duration:0s!important}.exiting\:duration-200[data-exiting]{transition-duration:.2s!important}.exiting\:ease-in[data-exiting]{transition-timing-function:cubic-bezier(.4,0,1,1)!important}.exiting\:animate-out[data-exiting]{animation-name:exit!important;animation-duration:.15s!important;--tw-exit-opacity: initial !important;--tw-exit-scale: initial !important;--tw-exit-rotate: initial !important;--tw-exit-translate-x: initial !important;--tw-exit-translate-y: initial !important}.exiting\:fade-out[data-exiting]{--tw-exit-opacity: 0 !important}.exiting\:zoom-out-95[data-exiting]{--tw-exit-scale: .95 !important}.exiting\:duration-0[data-exiting]{animation-duration:0s!important}.exiting\:duration-200[data-exiting]{animation-duration:.2s!important}.exiting\:ease-in[data-exiting]{animation-timing-function:cubic-bezier(.4,0,1,1)!important}.has-\[\[role\=dialog\]\]\:exiting\:zoom-out-100[data-exiting]:has([role=dialog]){--tw-exit-scale: 1 !important}.has-\[\[role\=dialog\]\]\:exiting\:slide-out-to-bottom[data-exiting]:has([role=dialog]){--tw-exit-translate-y: 100% !important}.data-\[replacement\=left\]\:exiting\:slide-out-to-left[data-exiting][data-replacement=left]{--tw-exit-translate-x: -100% !important}.data-\[replacement\=right\]\:exiting\:slide-out-to-right[data-exiting][data-replacement=right]{--tw-exit-translate-x: 100% !important}.exiting\:placement-left\:slide-out-to-right-1[data-placement=left][data-exiting]{--tw-exit-translate-x: .25rem !important}.exiting\:placement-right\:slide-out-to-left-1[data-placement=right][data-exiting]{--tw-exit-translate-x: -.25rem !important}.exiting\:placement-top\:slide-out-to-bottom-1[data-placement=top][data-exiting]{--tw-exit-translate-y: .25rem !important}.exiting\:placement-bottom\:slide-out-to-top-1[data-placement=bottom][data-exiting]{--tw-exit-translate-y: -.25rem !important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:border{border-width:1px!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:border-accent{border-color:hsl(var(--accent))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:bg-accent{background-color:hsl(var(--accent))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:border{border-width:1px!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:border-accent{border-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:bg-accent{background-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.unavailable\:text-destructive[data-unavailable]{color:hsl(var(--destructive))!important}.unavailable\:line-through[data-unavailable]{text-decoration-line:line-through!important}.unavailable\:decoration-destructive[data-unavailable]{text-decoration-color:hsl(var(--destructive))!important}.group[data-unavailable] .group-unavailable\:text-destructive{color:hsl(var(--destructive))!important}.group[data-unavailable] .group-unavailable\:line-through{text-decoration-line:line-through!important}.group[data-unavailable] .group-unavailable\:decoration-destructive{text-decoration-color:hsl(var(--destructive))!important}.invalid\:border-destructive:where([data-rac])[data-invalid]{border-color:hsl(var(--destructive))!important}.invalid\:border-destructive:where(:not([data-rac])):invalid{border-color:hsl(var(--destructive))!important}.group:where([data-rac])[data-invalid] .group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where(:not([data-rac])):invalid .group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where([data-rac])[data-empty] .group-empty\:invisible{visibility:hidden!important}.group:where(:not([data-rac])):empty .group-empty\:invisible{visibility:hidden!important}.focus-within\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:ring-0:where([data-rac])[data-focus-within]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-1:where([data-rac])[data-focus-within]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-inset:where([data-rac])[data-focus-within]{--tw-ring-inset: inset !important}.focus-within\:ring-blue-500:where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-within\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-within\:group-invalid\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-within\:group-invalid\:border-blue-500:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:ring-0:where(:not([data-rac])):focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-1:where(:not([data-rac])):focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-within\:ring-inset:where(:not([data-rac])):focus-within{--tw-ring-inset: inset !important}.focus-within\:ring-blue-500:where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-within\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-within\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-within\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-within\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-focus-within] .group-focus-within\:border-red-400{--tw-border-opacity: 1 !important;border-color:rgb(248 113 113 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):focus-within .group-focus-within\:border-red-400{--tw-border-opacity: 1 !important;border-color:rgb(248 113 113 / var(--tw-border-opacity))!important}.hover\:border:where([data-rac])[data-hovered]{border-width:1px!important}.hover\:border-border:where([data-rac])[data-hovered]{border-color:hsl(var(--border))!important}.hover\:bg-\[var\(--btn-bg-hover\)\]:where([data-rac])[data-hovered]{background-color:var(--btn-bg-hover)!important}.hover\:bg-black\/10:where([data-rac])[data-hovered]{background-color:#0000001a!important}.hover\:bg-gray-50:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(249 250 251 / var(--tw-bg-opacity))!important}.hover\:bg-transparent:where([data-rac])[data-hovered]{background-color:transparent!important}.hover\:bg-zinc-100:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-200:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-50:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.hover\:text-foreground:where([data-rac])[data-hovered]{color:hsl(var(--foreground))!important}.hover\:underline:where([data-rac])[data-hovered]{text-decoration-line:underline!important}.hover\:no-underline:where([data-rac])[data-hovered]{text-decoration-line:none!important}.hover\:shadow-md:where([data-rac])[data-hovered]{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:ring-gray-400:where([data-rac])[data-hovered]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)) !important}.hover\:after\:border-foreground:where([data-rac])[data-hovered]:after{content:var(--tw-content)!important;border-color:hsl(var(--foreground))!important}.hover\:border:where(:not([data-rac])):hover{border-width:1px!important}.hover\:border-border:where(:not([data-rac])):hover{border-color:hsl(var(--border))!important}.hover\:bg-\[var\(--btn-bg-hover\)\]:where(:not([data-rac])):hover{background-color:var(--btn-bg-hover)!important}.hover\:bg-black\/10:where(:not([data-rac])):hover{background-color:#0000001a!important}.hover\:bg-gray-50:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(249 250 251 / var(--tw-bg-opacity))!important}.hover\:bg-transparent:where(:not([data-rac])):hover{background-color:transparent!important}.hover\:bg-zinc-100:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-200:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(228 228 231 / var(--tw-bg-opacity))!important}.hover\:bg-zinc-50:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.hover\:text-foreground:where(:not([data-rac])):hover{color:hsl(var(--foreground))!important}.hover\:underline:where(:not([data-rac])):hover{text-decoration-line:underline!important}.hover\:no-underline:where(:not([data-rac])):hover{text-decoration-line:none!important}.hover\:shadow-md:where(:not([data-rac])):hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1) !important;--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:ring-gray-400:where(:not([data-rac])):hover{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(156 163 175 / var(--tw-ring-opacity)) !important}.hover\:after\:border-foreground:where(:not([data-rac])):hover:after{content:var(--tw-content)!important;border-color:hsl(var(--foreground))!important}.group:where([data-rac])[data-hovered] .group-hover\:scale-110{--tw-scale-x: 1.1 !important;--tw-scale-y: 1.1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where([data-rac])[data-hovered] .group-hover\:rounded-lg{border-radius:.5rem!important}.group:where([data-rac])[data-hovered] .group-hover\:bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-hovered] .group-hover\:text-foreground{color:hsl(var(--foreground))!important}.group:where(:not([data-rac])):hover .group-hover\:scale-110{--tw-scale-x: 1.1 !important;--tw-scale-y: 1.1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group:where(:not([data-rac])):hover .group-hover\:rounded-lg{border-radius:.5rem!important}.group:where(:not([data-rac])):hover .group-hover\:bg-zinc-100{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):hover .group-hover\:text-foreground{color:hsl(var(--foreground))!important}.focus\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-border:where([data-rac])[data-focused]{border-color:hsl(var(--border))!important}.focus\:bg-accent:where([data-rac])[data-focused]{background-color:hsl(var(--accent))!important}.focus\:bg-zinc-100:where([data-rac])[data-focused]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.focus\:text-white:where([data-rac])[data-focused]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:ring-0:where([data-rac])[data-focused]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-1:where([data-rac])[data-focused]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-inset:where([data-rac])[data-focused]{--tw-ring-inset: inset !important}.focus\:ring-blue-500:where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus\:data-\[placeholder\]\:text-white[data-placeholder]:where([data-rac])[data-focused]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus\:group-invalid\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus\:group-invalid\:border-blue-500:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:border-border:where(:not([data-rac])):focus{border-color:hsl(var(--border))!important}.focus\:bg-accent:where(:not([data-rac])):focus{background-color:hsl(var(--accent))!important}.focus\:bg-zinc-100:where(:not([data-rac])):focus{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.focus\:text-white:where(:not([data-rac])):focus{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:ring-0:where(:not([data-rac])):focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-1:where(:not([data-rac])):focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus\:ring-inset:where(:not([data-rac])):focus{--tw-ring-inset: inset !important}.focus\:ring-blue-500:where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus\:data-\[placeholder\]\:text-white[data-placeholder]:where(:not([data-rac])):focus{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.focus\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus\:group-invalid\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus\:group-invalid\:border-blue-500:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:rounded:where([data-rac])[data-focus-visible]{border-radius:.25rem!important}.focus-visible\:rounded-t-xl:where([data-rac])[data-focus-visible]{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.focus-visible\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:outline-none:where([data-rac])[data-focus-visible]{outline:2px solid transparent!important;outline-offset:2px!important}.focus-visible\:outline:where([data-rac])[data-focus-visible]{outline-style:solid!important}.focus-visible\:outline-0:where([data-rac])[data-focus-visible]{outline-width:0px!important}.focus-visible\:outline-2:where([data-rac])[data-focus-visible]{outline-width:2px!important}.focus-visible\:-outline-offset-1:where([data-rac])[data-focus-visible]{outline-offset:-1px!important}.focus-visible\:-outline-offset-2:where([data-rac])[data-focus-visible]{outline-offset:-2px!important}.focus-visible\:outline-offset-1:where([data-rac])[data-focus-visible]{outline-offset:1px!important}.focus-visible\:outline-offset-2:where([data-rac])[data-focus-visible]{outline-offset:2px!important}.focus-visible\:outline-blue-500:where([data-rac])[data-focus-visible]{outline-color:#3b82f6!important}.focus-visible\:ring-1:where([data-rac])[data-focus-visible]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-2:where([data-rac])[data-focus-visible]{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-inset:where([data-rac])[data-focus-visible]{--tw-ring-inset: inset !important}.focus-visible\:ring-blue-500:where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-visible\:ring-offset-0:where([data-rac])[data-focus-visible]{--tw-ring-offset-width: 0px !important}.group[data-readonly] .focus-visible\:group-data-\[readonly\]\:outline-blue-300:where([data-rac])[data-focus-visible]{outline-color:#93c5fd!important}.focus-visible\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-visible\:group-invalid\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-visible\:group-invalid\:border-blue-500:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:rounded:where(:not([data-rac])):focus-visible{border-radius:.25rem!important}.focus-visible\:rounded-t-xl:where(:not([data-rac])):focus-visible{border-top-left-radius:.75rem!important;border-top-right-radius:.75rem!important}.focus-visible\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:outline-none:where(:not([data-rac])):focus-visible{outline:2px solid transparent!important;outline-offset:2px!important}.focus-visible\:outline:where(:not([data-rac])):focus-visible{outline-style:solid!important}.focus-visible\:outline-0:where(:not([data-rac])):focus-visible{outline-width:0px!important}.focus-visible\:outline-2:where(:not([data-rac])):focus-visible{outline-width:2px!important}.focus-visible\:-outline-offset-1:where(:not([data-rac])):focus-visible{outline-offset:-1px!important}.focus-visible\:-outline-offset-2:where(:not([data-rac])):focus-visible{outline-offset:-2px!important}.focus-visible\:outline-offset-1:where(:not([data-rac])):focus-visible{outline-offset:1px!important}.focus-visible\:outline-offset-2:where(:not([data-rac])):focus-visible{outline-offset:2px!important}.focus-visible\:outline-blue-500:where(:not([data-rac])):focus-visible{outline-color:#3b82f6!important}.focus-visible\:ring-1:where(:not([data-rac])):focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-2:where(:not([data-rac])):focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.focus-visible\:ring-inset:where(:not([data-rac])):focus-visible{--tw-ring-inset: inset !important}.focus-visible\:ring-blue-500:where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)) !important}.focus-visible\:ring-offset-0:where(:not([data-rac])):focus-visible{--tw-ring-offset-width: 0px !important}.group[data-readonly] .focus-visible\:group-data-\[readonly\]\:outline-blue-300:where(:not([data-rac])):focus-visible{outline-color:#93c5fd!important}.focus-visible\:invalid\:border-blue-500:where([data-rac])[data-invalid]:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.focus-visible\:invalid\:border-blue-500:where(:not([data-rac])):invalid:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-invalid] .focus-visible\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where(:not([data-rac])):invalid .focus-visible\:group-invalid\:border-blue-500:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(59 130 246 / var(--tw-border-opacity))!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:rounded-lg{border-radius:.5rem!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline{outline-style:solid!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline{outline-style:solid!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-2{outline-width:2px!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-2{outline-width:2px!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-offset-2{outline-offset:2px!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-offset-2{outline-offset:2px!important}.group\/control:where([data-rac])[data-focus-visible] .group-focus-visible\/control\:outline-blue-500{outline-color:#3b82f6!important}.group:where([data-rac])[data-focus-visible] .group-focus-visible\:outline-blue-500{outline-color:#3b82f6!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:rounded-lg{border-radius:.5rem!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline{outline-style:solid!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline{outline-style:solid!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-2{outline-width:2px!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-2{outline-width:2px!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-offset-2{outline-offset:2px!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-offset-2{outline-offset:2px!important}.group\/control:where(:not([data-rac])):focus-visible .group-focus-visible\/control\:outline-blue-500{outline-color:#3b82f6!important}.group:where(:not([data-rac])):focus-visible .group-focus-visible\:outline-blue-500{outline-color:#3b82f6!important}.group\/control:where([data-rac])[data-focus-visible] .group[data-readonly] .group-focus-visible\/control\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group:where([data-rac])[data-focus-visible][data-readonly] .group-focus-visible\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group\/control:where(:not([data-rac])):focus-visible .group[data-readonly] .group-focus-visible\/control\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.group:where(:not([data-rac])):focus-visible[data-readonly] .group-focus-visible\:group-data-\[readonly\]\:outline-blue-300{outline-color:#93c5fd!important}.pressed\:scale-\[0\.97\][data-pressed]{--tw-scale-x: .97 !important;--tw-scale-y: .97 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.pressed\:bg-\[var\(--btn-bg-hover\)\][data-pressed]{background-color:var(--btn-bg-hover)!important}.pressed\:bg-accent\/90[data-pressed]{background-color:hsl(var(--accent) / .9)!important}.pressed\:bg-black\/20[data-pressed]{background-color:#0003!important}.pressed\:bg-transparent[data-pressed]{background-color:transparent!important}.pressed\:bg-zinc-50[data-pressed]{--tw-bg-opacity: 1 !important;background-color:rgb(250 250 250 / var(--tw-bg-opacity))!important}.pressed\:text-white[data-pressed]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.pressed\:opacity-75[data-pressed]{opacity:.75!important}.group[data-ui=button-group] .group-data-\[ui\=button-group\]\:pressed\:scale-100[data-pressed]{--tw-scale-x: 1 !important;--tw-scale-y: 1 !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-ui=button-group] .group-data-\[ui\=button-group\]\:pressed\:opacity-100[data-pressed]{opacity:1!important}.group[data-pressed] .group-pressed\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.selected\:z-20[data-selected]{z-index:20!important}.selected\:rounded-\[calc\(theme\(borderRadius\.lg\)-2px\)\][data-selected]{border-radius:calc(.5rem - 2px)!important}.selected\:border[data-selected]{border-width:1px!important}.selected\:border-accent[data-selected]{border-color:hsl(var(--accent))!important}.selected\:border-destructive[data-selected]{border-color:hsl(var(--destructive))!important}.selected\:border-success[data-selected]{border-color:hsl(var(--success))!important}.selected\:border-warning[data-selected]{border-color:hsl(var(--warning))!important}.selected\:bg-accent[data-selected]{background-color:hsl(var(--accent))!important}.selected\:bg-accent\/5[data-selected]{background-color:hsl(var(--accent) / .05)!important}.selected\:bg-accent\/\[0\.085\][data-selected]{background-color:hsl(var(--accent) / .085)!important}.selected\:bg-background[data-selected]{background-color:hsl(var(--background))!important}.selected\:bg-destructive[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:bg-success[data-selected]{background-color:hsl(var(--success))!important}.selected\:bg-warning[data-selected]{background-color:hsl(var(--warning))!important}.selected\:text-foreground[data-selected]{color:hsl(var(--foreground))!important}.selected\:text-white[data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selected\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\][data-selected]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.selected\:shadow-sm[data-selected]{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.selected\:outline-0[data-selected]{outline-width:0px!important}.before\:selected\:left-\[-1\.5px\][data-selected]:before{content:var(--tw-content)!important;left:-1.5px!important}.selected\:before\:h-\[2px\][data-selected]:before{content:var(--tw-content)!important;height:2px!important}.before\:selected\:w-\[2px\][data-selected]:before{content:var(--tw-content)!important;width:2px!important}.before\:selected\:bg-accent[data-selected]:before{content:var(--tw-content)!important;background-color:hsl(var(--accent))!important}.selected\:invalid\:border-destructive:where([data-rac])[data-invalid][data-selected]{border-color:hsl(var(--destructive))!important}.invalid\:selected\:bg-destructive\/15[data-selected]:where([data-rac])[data-invalid]{background-color:hsl(var(--destructive) / .15)!important}.selected\:invalid\:bg-destructive:where([data-rac])[data-invalid][data-selected]{background-color:hsl(var(--destructive))!important}.selected\:invalid\:text-white:where([data-rac])[data-invalid][data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selected\:invalid\:border-destructive:where(:not([data-rac])):invalid[data-selected]{border-color:hsl(var(--destructive))!important}.invalid\:selected\:bg-destructive\/15[data-selected]:where(:not([data-rac])):invalid{background-color:hsl(var(--destructive) / .15)!important}.selected\:invalid\:bg-destructive:where(:not([data-rac])):invalid[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:invalid\:text-white:where(:not([data-rac])):invalid[data-selected]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.hover\:selected\:bg-zinc-100[data-selected]:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.hover\:selected\:bg-zinc-100[data-selected]:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(244 244 245 / var(--tw-bg-opacity))!important}.group[data-selected] .group-selected\:visible{visibility:visible!important}.group[data-selected] .group-selected\:flex{display:flex!important}.group[data-selected] .group-selected\:size-1\.5{width:.375rem!important;height:.375rem!important}.group\/control[data-selected] .group-selected\/control\:translate-x-\[78\%\]{--tw-translate-x: 78% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group[data-selected] .group-selected\:border{border-width:1px!important}.group\/control[data-selected] .group-selected\/control\:border-accent,.group[data-selected] .group-selected\:border-accent{border-color:hsl(var(--accent))!important}.group\/control[data-selected] .group-selected\/control\:bg-accent,.group[data-selected] .group-selected\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected] .group-selected\:bg-white{--tw-bg-opacity: 1 !important;background-color:rgb(255 255 255 / var(--tw-bg-opacity))!important}.group[data-selected] .group-selected\:font-semibold{font-weight:600!important}.group[data-selected] .group-selected\:text-foreground{color:hsl(var(--foreground))!important}.group\/control[data-selected] .group-selected\/control\:shadow-\[inset_0_0_0_1px_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 0 0 1px rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 0 0 1px var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected] .group-selected\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected]:where([data-rac])[data-hovered] .group-selected\:group-hover\:bg-accent\/15{background-color:hsl(var(--accent) / .15)!important}.group[data-selected]:where(:not([data-rac])):hover .group-selected\:group-hover\:bg-accent\/15{background-color:hsl(var(--accent) / .15)!important}.group[data-selected][data-pressed] .group-selected\:group-pressed\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-pressed] .group-selected\:group-pressed\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.selection-start\:rounded-s-lg[data-selection-start]{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:rounded-lg{border-radius:.5rem!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:border{border-width:1px!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:border-accent{border-color:hsl(var(--accent))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-invalid] .group-selected\:group-selection-start\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):invalid .group-selected\:group-selection-start\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-start]:where([data-rac])[data-hovered] .group-selected\:group-selection-start\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):hover .group-selected\:group-selection-start\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.selection-end\:rounded-e-lg[data-selection-end]{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:rounded-lg{border-radius:.5rem!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:border{border-width:1px!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:border-accent{border-color:hsl(var(--accent))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:shadow-\[inset_0_1px_0_0_rgba\(255\,255\,255\,0\.1\)\]{--tw-shadow: inset 0 1px 0 0 rgba(255,255,255,.1) !important;--tw-shadow-colored: inset 0 1px 0 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-invalid] .group-selected\:group-selection-end\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:border-destructive{border-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:bg-destructive{background-color:hsl(var(--destructive))!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):invalid .group-selected\:group-selection-end\:group-invalid\:text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group[data-selected][data-selection-end]:where([data-rac])[data-hovered] .group-selected\:group-selection-end\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):hover .group-selected\:group-selection-end\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.dragging\:border-8[data-dragging]{border-width:8px!important}.dragging\:border-accent[data-dragging]{border-color:hsl(var(--accent))!important}.drop-target\:border-solid[data-drop-target]{border-style:solid!important}.drop-target\:bg-accent\/20[data-drop-target]{background-color:hsl(var(--accent) / .2)!important}.drop-target\:outline[data-drop-target]{outline-style:solid!important}.drop-target\:outline-2[data-drop-target]{outline-width:2px!important}.drop-target\:outline-offset-2[data-drop-target]{outline-offset:2px!important}.drop-target\:outline-blue-500[data-drop-target]{outline-color:#3b82f6!important}.group[data-readonly] .drop-target\:group-data-\[readonly\]\:outline-blue-300[data-drop-target]{outline-color:#93c5fd!important}.resizing\:w-\[2px\][data-resizing]{width:2px!important}.resizing\:bg-accent[data-resizing]{background-color:hsl(var(--accent))!important}.resizing\:pl-\[7px\][data-resizing]{padding-left:7px!important}.disabled\:cursor-default:where([data-rac])[data-disabled]{cursor:default!important}.disabled\:cursor-not-allowed:where([data-rac])[data-disabled]{cursor:not-allowed!important}.disabled\:text-muted:where([data-rac])[data-disabled]{color:hsl(var(--muted))!important}.disabled\:no-underline:where([data-rac])[data-disabled]{text-decoration-line:none!important}.disabled\:opacity-100:where([data-rac])[data-disabled]{opacity:1!important}.disabled\:opacity-50:where([data-rac])[data-disabled]{opacity:.5!important}.disabled\:cursor-default:where(:not([data-rac])):disabled{cursor:default!important}.disabled\:cursor-not-allowed:where(:not([data-rac])):disabled{cursor:not-allowed!important}.disabled\:text-muted:where(:not([data-rac])):disabled{color:hsl(var(--muted))!important}.disabled\:no-underline:where(:not([data-rac])):disabled{text-decoration-line:none!important}.disabled\:opacity-100:where(:not([data-rac])):disabled{opacity:1!important}.disabled\:opacity-50:where(:not([data-rac])):disabled{opacity:.5!important}.group\/control:where([data-rac])[data-disabled] .group-disabled\/control\:bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-disabled] .group-disabled\:opacity-50{opacity:.5!important}.group\/control:where(:not([data-rac])):disabled .group-disabled\/control\:bg-gray-200{--tw-bg-opacity: 1 !important;background-color:rgb(229 231 235 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):disabled .group-disabled\:opacity-50{opacity:.5!important}@container (min-width: 28rem){.\@md\:max-w-40{max-width:10rem!important}}@container (min-width: 32px){.\@\[32px\]\:w-2\/5{width:40%!important}}@container (min-width: 40px){.\@\[40px\]\:w-1\/3{width:33.333333%!important}}@container (min-width: 64px){.\@\[64px\]\:w-1\/4{width:25%!important}}@container (min-width: 128px){.\@\[128px\]\:w-1\/5{width:20%!important}}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2!important}.sm\:col-span-3{grid-column:span 3 / span 3!important}.sm\:col-span-4{grid-column:span 4 / span 4!important}.sm\:col-span-5{grid-column:span 5 / span 5!important}.sm\:me-auto{margin-inline-end:auto!important}.sm\:block{display:block!important}.sm\:flex{display:flex!important}.sm\:hidden{display:none!important}.sm\:size-3\.5{width:.875rem!important;height:.875rem!important}.sm\:size-4{width:1rem!important;height:1rem!important}.sm\:size-5{width:1.25rem!important;height:1.25rem!important}.sm\:size-7{width:1.75rem!important;height:1.75rem!important}.sm\:h-7{height:1.75rem!important}.sm\:w-72{width:18rem!important}.sm\:w-80{width:20rem!important}.sm\:w-96{width:24rem!important}.sm\:min-w-72{min-width:18rem!important}.sm\:min-w-96{min-width:24rem!important}.sm\:max-w-2xl{max-width:42rem!important}.sm\:max-w-3xl{max-width:48rem!important}.sm\:max-w-4xl{max-width:56rem!important}.sm\:max-w-5xl{max-width:64rem!important}.sm\:max-w-lg{max-width:32rem!important}.sm\:max-w-md{max-width:28rem!important}.sm\:max-w-sm{max-width:24rem!important}.sm\:max-w-xl{max-width:36rem!important}.sm\:max-w-xs{max-width:20rem!important}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))!important}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))!important}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))!important}.sm\:grid-cols-\[1fr_16px_1fr_36px\]{grid-template-columns:1fr 16px 1fr 36px!important}.sm\:grid-cols-\[1fr_calc\(theme\(size\.4\)\+20px\)\]{grid-template-columns:1fr calc(1rem + 20px)!important}.sm\:grid-cols-\[36px_1fr_minmax\(36px\,max-content\)_minmax\(36px\,max-content\)\]{grid-template-columns:36px 1fr minmax(36px,max-content) minmax(36px,max-content)!important}.sm\:grid-cols-\[calc\(theme\(size\.4\)\+20px\)_1fr_calc\(theme\(size\.4\)\+20px\)\]{grid-template-columns:calc(1rem + 20px) 1fr calc(1rem + 20px)!important}.sm\:flex-row{flex-direction:row!important}.sm\:gap-0{gap:0px!important}.sm\:self-start{align-self:flex-start!important}.sm\:p-12{padding:3rem!important}.sm\:p-\[calc\(theme\(spacing\[1\.5\]\)-var\(--border-with\,1px\)\)\]{padding:calc(.375rem - var(--border-with,1px))!important}.sm\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}.sm\:px-\[calc\(theme\(size\.9\)\+10px\)\]{padding-left:calc(2.25rem + 10px)!important;padding-right:calc(2.25rem + 10px)!important}.sm\:py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.sm\:py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.sm\:py-2\.5{padding-top:.625rem!important;padding-bottom:.625rem!important}.sm\:py-32{padding-top:8rem!important;padding-bottom:8rem!important}.sm\:py-\[calc\(theme\(spacing\[1\.5\]\)-1px\)\]{padding-top:calc(.375rem - 1px)!important;padding-bottom:calc(.375rem - 1px)!important}.sm\:py-\[calc\(theme\(spacing\[1\.5\]\)-var\(--border-with\,1px\)\)\]{padding-top:calc(.375rem - var(--border-with,1px))!important;padding-bottom:calc(.375rem - var(--border-with,1px))!important}.sm\:pe-1{padding-inline-end:.25rem!important}.sm\:pe-9{padding-inline-end:2.25rem!important}.sm\:ps-14{padding-inline-start:3.5rem!important}.sm\:ps-8{padding-inline-start:2rem!important}.sm\:text-lg{font-size:1.125rem!important;line-height:1.75rem!important}.sm\:text-sm\/6{font-size:.875rem!important;line-height:1.5rem!important}.sm\:text-xs{font-size:.75rem!important;line-height:1rem!important}.sm\:text-xs\/6{font-size:.75rem!important;line-height:1.5rem!important}.sm\:leading-4{line-height:1rem!important}.sm\:leading-5{line-height:1.25rem!important}.after\:sm\:size-\[7\.5px\]:after{content:var(--tw-content)!important;width:7.5px!important;height:7.5px!important}.sm\:has-\[\[role\=alertdialog\]\]\:max-w-md:has([role=alertdialog]){max-width:28rem!important}.sm\:has-\[\[role\=dialog\]\]\:max-w-lg:has([role=dialog]){max-width:32rem!important}.sm\:has-\[\[role\=dialog\]\]\:rounded-xl:has([role=dialog]){border-radius:.75rem!important}.sm\:has-\[\[role\=dialog\]\]\:entering\:zoom-in-95[data-entering]:has([role=dialog]){--tw-enter-scale: .95 !important}.sm\:has-\[\[role\=dialog\]\]\:entering\:slide-in-from-bottom-0[data-entering]:has([role=dialog]){--tw-enter-translate-y: 0px !important}.sm\:has-\[\[role\=dialog\]\]\:exiting\:zoom-out-95[data-exiting]:has([role=dialog]){--tw-exit-scale: .95 !important}.sm\:has-\[\[role\=dialog\]\]\:exiting\:slide-out-to-bottom-0[data-exiting]:has([role=dialog]){--tw-exit-translate-y: 0px !important}}@media (min-width: 768px){.md\:flex{display:flex!important}.md\:hidden{display:none!important}.md\:flex-row{flex-direction:row!important}.md\:px-6{padding-left:1.5rem!important;padding-right:1.5rem!important}}@media (min-width: 1024px){.lg\:flex{display:flex!important}.lg\:hidden{display:none!important}.lg\:p-10{padding:2.5rem!important}.lg\:p-8{padding:2rem!important}.lg\:px-8{padding-left:2rem!important;padding-right:2rem!important}}.ltr\:ms-1:where([dir=ltr],[dir=ltr] *){margin-inline-start:.25rem!important}.rtl\:space-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 1 !important}.rtl\:after\:translate-x-1\.5:where([dir=rtl],[dir=rtl] *):after{content:var(--tw-content)!important;--tw-translate-x: .375rem !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.group\/control[data-selected] .group-selected\/control\:rtl\:-translate-x-\[78\%\]:where([dir=rtl],[dir=rtl] *){--tw-translate-x: -78% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (prefers-color-scheme: dark){.dark\:border{border-width:1px!important}.dark\:border-0{border-width:0px!important}.dark\:border-\[1\.5px\]{border-width:1.5px!important}.dark\:border-none{border-style:none!important}.dark\:border-destructive\/40{border-color:hsl(var(--destructive) / .4)!important}.dark\:border-success\/40{border-color:hsl(var(--success) / .4)!important}.dark\:border-warning\/40{border-color:hsl(var(--warning) / .4)!important}.dark\:border-white\/10{border-color:#ffffff1a!important}.dark\:border-white\/15{border-color:#ffffff26!important}.dark\:border-zinc-600{--tw-border-opacity: 1 !important;border-color:rgb(82 82 91 / var(--tw-border-opacity))!important}.dark\:border-zinc-600\/30{border-color:#52525b4d!important}.dark\:border-b-border{border-bottom-color:hsl(var(--border))!important}.dark\:border-b-white\/20{border-bottom-color:#fff3!important}.dark\:border-r-border{border-right-color:hsl(var(--border))!important}.dark\:border-t-border{border-top-color:hsl(var(--border))!important}.dark\:bg-background{background-color:hsl(var(--background))!important}.dark\:bg-destructive\/35{background-color:hsl(var(--destructive) / .35)!important}.dark\:bg-success\/35{background-color:hsl(var(--success) / .35)!important}.dark\:bg-transparent{background-color:transparent!important}.dark\:bg-warning\/35{background-color:hsl(var(--warning) / .35)!important}.dark\:bg-zinc-300{--tw-bg-opacity: 1 !important;background-color:rgb(212 212 216 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-600\/45{background-color:#52525b73!important}.dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-800{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-900{--tw-bg-opacity: 1 !important;background-color:rgb(24 24 27 / var(--tw-bg-opacity))!important}.dark\:bg-zinc-950\/50{background-color:#09090b80!important}.dark\:text-gray-400{--tw-text-opacity: 1 !important;color:rgb(156 163 175 / var(--tw-text-opacity))!important}.dark\:shadow-none{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.dark\:outline-white\/20{outline-color:#fff3!important}.dark\:ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.dark\:ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.dark\:ring-white\/10{--tw-ring-color: rgb(255 255 255 / .1) !important}.dark\:ring-white\/15{--tw-ring-color: rgb(255 255 255 / .15) !important}.dark\:ring-zinc-700{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(63 63 70 / var(--tw-ring-opacity)) !important}.dark\:ring-zinc-800{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(39 39 42 / var(--tw-ring-opacity)) !important}.dark\:\[--border-with\:0px\]{--border-with: 0px !important}.dark\:data-\[placeholder\]\:text-white[data-placeholder]{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:dark\:border-0{border-width:0px!important}.group:where([data-rac])[data-indeterminate] .group-indeterminate\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:dark\:border-0{border-width:0px!important}.group:where(:not([data-rac])):indeterminate .group-indeterminate\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group:where([data-rac])[data-invalid] .group-invalid\:dark\:border-destructive{border-color:hsl(var(--destructive))!important}.group:where(:not([data-rac])):invalid .group-invalid\:dark\:border-destructive{border-color:hsl(var(--destructive))!important}.dark\:hover\:bg-white\/10:where([data-rac])[data-hovered]{background-color:#ffffff1a!important}.dark\:hover\:bg-zinc-700:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-zinc-800:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-white\/10:where(:not([data-rac])):hover{background-color:#ffffff1a!important}.dark\:hover\:bg-zinc-700:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:bg-zinc-800:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.group:where([data-rac])[data-hovered] .dark\:group-hover\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group:where(:not([data-rac])):hover .dark\:group-hover\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.focus\:dark\:bg-zinc-700:where([data-rac])[data-focused]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.focus\:dark\:bg-zinc-700:where(:not([data-rac])):focus{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:pressed\:bg-white\/20[data-pressed]{background-color:#fff3!important}.dark\:pressed\:bg-zinc-800[data-pressed]{--tw-bg-opacity: 1 !important;background-color:rgb(39 39 42 / var(--tw-bg-opacity))!important}.selected\:dark\:border-0[data-selected]{border-width:0px!important}.dark\:selected\:bg-accent\/35[data-selected]{background-color:hsl(var(--accent) / .35)!important}.dark\:selected\:bg-accent\/40[data-selected]{background-color:hsl(var(--accent) / .4)!important}.dark\:selected\:bg-zinc-600[data-selected]{--tw-bg-opacity: 1 !important;background-color:rgb(82 82 91 / var(--tw-bg-opacity))!important}.selected\:dark\:bg-destructive[data-selected]{background-color:hsl(var(--destructive))!important}.selected\:dark\:bg-success[data-selected]{background-color:hsl(var(--success))!important}.selected\:dark\:bg-warning[data-selected]{background-color:hsl(var(--warning))!important}.dark\:invalid\:selected\:bg-destructive\/30[data-selected]:where([data-rac])[data-invalid]{background-color:hsl(var(--destructive) / .3)!important}.dark\:invalid\:selected\:bg-destructive\/30[data-selected]:where(:not([data-rac])):invalid{background-color:hsl(var(--destructive) / .3)!important}.dark\:hover\:selected\:bg-zinc-700[data-selected]:where([data-rac])[data-hovered]{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.dark\:hover\:selected\:bg-zinc-700[data-selected]:where(:not([data-rac])):hover{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group\/control[data-selected] .group-selected\/control\:dark\:border-0,.group[data-selected] .group-selected\:dark\:border-0{border-width:0px!important}.group[data-selected] .group-selected\:dark\:border-accent{border-color:hsl(var(--accent))!important}.group\/control[data-selected] .group-selected\/control\:dark\:bg-accent{background-color:hsl(var(--accent))!important}.group[data-selected]:where([data-rac])[data-hovered] .group-selected\:dark\:group-hover\:bg-accent\/50{background-color:hsl(var(--accent) / .5)!important}.group[data-selected]:where(:not([data-rac])):hover .group-selected\:dark\:group-hover\:bg-accent\/50{background-color:hsl(var(--accent) / .5)!important}.group[data-selected][data-selection-start] .group-selected\:group-selection-start\:dark\:border-0{border-width:0px!important}.group[data-selected][data-selection-start]:where([data-rac])[data-hovered] .group-selected\:group-selection-start\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-start]:where(:not([data-rac])):hover .group-selected\:group-selection-start\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end] .group-selected\:group-selection-end\:dark\:border-0{border-width:0px!important}.group[data-selected][data-selection-end]:where([data-rac])[data-hovered] .group-selected\:group-selection-end\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.group[data-selected][data-selection-end]:where(:not([data-rac])):hover .group-selected\:group-selection-end\:dark\:group-hover\:bg-accent\/90{background-color:hsl(var(--accent) / .9)!important}.drop-target\:dark\:bg-accent\/75[data-drop-target]{background-color:hsl(var(--accent) / .75)!important}.group\/control:where([data-rac])[data-disabled] .group-disabled\/control\:dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}.group\/control:where(:not([data-rac])):disabled .group-disabled\/control\:dark\:bg-zinc-700{--tw-bg-opacity: 1 !important;background-color:rgb(63 63 70 / var(--tw-bg-opacity))!important}}@media (forced-colors: active){.forced-colors\:bg-\[ButtonBorder\]{background-color:ButtonBorder!important}.forced-colors\:resizing\:bg-\[Highlight\][data-resizing]{background-color:Highlight!important}}.\[\&\.border\]\:hover\:no-underline:where([data-rac])[data-hovered].border{text-decoration-line:none!important}.\[\&\.border\]\:hover\:no-underline:where(:not([data-rac])):hover.border{text-decoration-line:none!important}.\[\&\.rounded-full\>img\]\:rounded-full.rounded-full>img{border-radius:9999px!important}.\[\&\.rounded-full\>svg\]\:rounded-full.rounded-full>svg{border-radius:9999px!important}.\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none!important}.\[\&\:first-child\]\:-mt-\[1px\]:first-child{margin-top:-1px!important}.\[\&\:focus-within\]\:z-20:focus-within{z-index:20!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:border-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\:has\(\:is\(\[readonly\]\,\[aria-readonly\]\)\)\]\:ring-blue-300:has(:is([readonly],[aria-readonly])):where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.\[\&\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:has\(\[data-ui\=description\]\)\:not\(\[class\*\=gap-y\]\)\]\:gap-y-4:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:has([data-ui=description]):not([class*=gap-y]){row-gap:1rem!important}.\[\&\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-\]\)\]\:gap-y-3:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-]){row-gap:.75rem!important}.\[\&\:has\(\>\[data-ui\=text-field\]\)\]\:rounded-lg:has(>[data-ui=text-field]){border-radius:.5rem!important}.\[\&\:has\(\>\[data-ui\=text-field\]\)\]\:shadow-sm:has(>[data-ui=text-field]){--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05) !important;--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color) !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\:has\(\[data-disabled\=true\]\)\]\:opacity-50:has([data-disabled=true]){opacity:.5!important}.\[\&\:has\(\[data-replacement\=right\]\)\]\:justify-end:has([data-replacement=right]){justify-content:flex-end!important}.\[\&\:has\(\[data-ui\=box\]\+\[data-ui\=errorMessage\]\)_\[data-ui\=errorMessage\]\]\:mt-2:has([data-ui=box]+[data-ui=errorMessage]) [data-ui=errorMessage]{margin-top:.5rem!important}.\[\&\:has\(\[data-ui\=description\]\+\[data-ui\=errorMessage\]\)_\[data-ui\=errorMessage\]\]\:mt-1:has([data-ui=description]+[data-ui=errorMessage]) [data-ui=errorMessage]{margin-top:.25rem!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=icon\]\]\:col-start-1:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=icon]{grid-column-start:1!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-start-2:has([data-ui=icon]+[data-ui=label]) [data-ui=item]>[data-ui=label]{grid-column-start:2!important}.\[\&\:has\(\[data-ui\=icon\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-start-2:has([data-ui=icon]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=description]{grid-column-start:2!important}.\[\&\:has\(\[data-ui\=icon\]\+input\)\>input\]\:ps-10:has([data-ui=icon]+input)>input{padding-inline-start:2.5rem!important}@media (min-width: 640px){.sm\:\[\&\:has\(\[data-ui\=icon\]\+input\)\>input\]\:ps-8:has([data-ui=icon]+input)>input{padding-inline-start:2rem!important}}.\[\&\:has\(\[data-ui\=item\]\>\[data-ui\=icon\]\+\[data-ui\=label\]\)_header\]\:px-4:has([data-ui=item]>[data-ui=icon]+[data-ui=label]) header{padding-left:1rem!important;padding-right:1rem!important}.\[\&\:has\(\[data-ui\=kbd\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-end-\[-2\]:has([data-ui=kbd]) [data-ui=item]>[data-ui=description]{grid-column-end:-2!important}.\[\&\:has\(\[data-ui\=kbd\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-end-\[-2\]:has([data-ui=kbd]) [data-ui=item]>[data-ui=label]{grid-column-end:-2!important}.\[\&\:has\(\[role\=dialog\]\)\]\:items-end:has([role=dialog]){align-items:flex-end!important}.\[\&\:has\(\[role\=dialog\]\)\]\:px-0:has([role=dialog]){padding-left:0!important;padding-right:0!important}.\[\&\:has\(\[role\=dialog\]\)\]\:pb-0:has([role=dialog]){padding-bottom:0!important}.\[\&\:has\(\[role\=dialog\]\)\]\:pt-4:has([role=dialog]){padding-top:1rem!important}.\[\&\:has\(\[role\=dialog\]\)\]\:\[--visual-viewport-vertical-padding\:16px\]:has([role=dialog]){--visual-viewport-vertical-padding: 16px !important}@media (min-width: 640px){.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:items-center:has([role=dialog]){align-items:center!important}.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:p-4:has([role=dialog]){padding:1rem!important}.sm\:\[\&\:has\(\[role\=dialog\]\)\]\:\[--visual-viewport-vertical-padding\:32px\]:has([role=dialog]){--visual-viewport-vertical-padding: 32px !important}}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-start-2:has([role=img]+[data-ui=label]) [data-ui=item]>[data-ui=label]{grid-column-start:2!important}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-start-2:has([role=img]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=description]{grid-column-start:2!important}.\[\&\:has\(\[role\=img\]\+\[data-ui\=label\]\+\[data-ui\=description\]\)_\[data-ui\=item\]\>\[data-ui\=label\]\]\:leading-5:has([role=img]+[data-ui=label]+[data-ui=description]) [data-ui=item]>[data-ui=label]{line-height:1.25rem!important}.\[\&\:has\(\[role\=menuitemradio\]\)_header\]\:ps-8:has([role=menuitemradio]) header{padding-inline-start:2rem!important}.\[\&\:has\(\[role\=menuitemradio\]\>\[data-ui\=item\]\>\[data-ui\=icon\]\+\[data-ui\=label\]\)_header\]\:ps-9:has([role=menuitemradio]>[data-ui=item]>[data-ui=icon]+[data-ui=label]) header{padding-inline-start:2.25rem!important}.\[\&\:has\(_input\[data-disabled\=true\]\)\]\:border-border\/50:has(input[data-disabled=true]){border-color:hsl(var(--border) / .5)!important}.\[\&\:hover\]\:z-20:hover{z-index:20!important}.\[\&\:not\(\:first-child\)\]\:my-1\.5:not(:first-child){margin-top:.375rem!important;margin-bottom:.375rem!important}.\[\&\:not\(\:first-child\)\]\:border-t:not(:first-child){border-top-width:1px!important}.\[\&\:not\(\:first-child\)\]\:border-t-border\/40:not(:first-child){border-top-color:hsl(var(--border) / .4)!important}.\[\&\:not\(\:has\(\[data-ui\=description\]\+\[data-ui\=box\]\)\)\>\[data-ui\=box\]\]\:mt-3:not(:has([data-ui=description]+[data-ui=box]))>[data-ui=box]{margin-top:.75rem!important}.\[\&\:not\(\:hover\)\]\:decoration-muted:not(:hover){text-decoration-color:hsl(var(--muted))!important}.\[\&\:not\(\:last-child\)\]\:-me-1:not(:last-child){margin-inline-end:-.25rem!important}.\[\&\:not\(\:last-child\)\]\:mb-0\.5:not(:last-child){margin-bottom:.125rem!important}.\[\&\:not\(\[data-selected\]\)\]\:text-muted:not([data-selected]){color:hsl(var(--muted))!important}.\[\&\:not\(\[data-selected\]\)\]\:hover\:text-foreground:where([data-rac])[data-hovered]:not([data-selected]){color:hsl(var(--foreground))!important}.\[\&\:not\(\[data-selected\]\)\]\:hover\:text-foreground:where(:not([data-rac])):hover:not([data-selected]){color:hsl(var(--foreground))!important}.\[\&\>\*\:has\(\+\[data-ui\=select-value\]\)\>svg\]\:size-4>*:has(+[data-ui=select-value])>svg{width:1rem!important;height:1rem!important}.\[\&\>\*\:has\(\+\[data-ui\=select-value\]\)\>svg\]\:text-muted>*:has(+[data-ui=select-value])>svg{color:hsl(var(--muted))!important}.\[\&\>\:is\(input\,\[data-ui\=control\]\)\+\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\]\:mt-2>:is(input,[data-ui=control])+[data-ui=description]:not([class*=mt-]){margin-top:.5rem!important}.\[\&\>\:is\(input\,textarea\,\[data-ui\=control\]\)\+\[data-ui\=errorMessage\]\:not\(\[class\*\=mt-\]\)\]\:mt-2>:is(input,textarea,[data-ui=control])+[data-ui=errorMessage]:not([class*=mt-]){margin-top:.5rem!important}.\[\&\>\:not\(input\)\]\:text-muted>:not(input){color:hsl(var(--muted))!important}.\[\&\>\:not\(input\)\]\:opacity-50>:not(input){opacity:.5!important}.\[\&\>\[data-ui\=clear\]\:last-of-type\]\:-col-end-1>[data-ui=clear]:last-of-type{grid-column-end:-1!important}.\[\&\>\[data-ui\=clear\]\:last-of-type\]\:place-self-center>[data-ui=clear]:last-of-type{place-self:center!important}.\[\&\>\[data-ui\=clear\]\]\:-col-end-2>[data-ui=clear]{grid-column-end:-2!important}.\[\&\>\[data-ui\=clear\]\]\:row-start-1>[data-ui=clear]{grid-row-start:1!important}.\[\&\>\[data-ui\=clear\]\]\:justify-self-end>[data-ui=clear]{justify-self:end!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:z-10>[data-ui=icon]:has(+input){z-index:10!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:col-start-1>[data-ui=icon]:has(+input){grid-column-start:1!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:row-start-1>[data-ui=icon]:has(+input){grid-row-start:1!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:size-5>[data-ui=icon]:has(+input){width:1.25rem!important;height:1.25rem!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:place-self-center>[data-ui=icon]:has(+input){place-self:center!important}.\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:text-muted>[data-ui=icon]:has(+input){color:hsl(var(--muted))!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=icon\]\:has\(\+input\)\]\:size-4>[data-ui=icon]:has(+input){width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4>[data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&\>\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-\[1\.125rem\]>[data-ui=icon]:not([class*=size-]){width:1.125rem!important;height:1.125rem!important}.\[\&\>\[data-ui\=icon\]\]\:size-5>[data-ui=icon]{width:1.25rem!important;height:1.25rem!important}.\[\&\>\[data-ui\=icon\]\]\:text-muted\/65>[data-ui=icon]{color:hsl(var(--muted) / .65)!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=icon\]\]\:size-4>[data-ui=icon]{width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=item\]\]\:flex>[data-ui=item]{display:flex!important}.\[\&\>\[data-ui\=item\]\]\:items-center>[data-ui=item]{align-items:center!important}.\[\&\>\[data-ui\=item\]\]\:gap-x-2>[data-ui=item]{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.\[\&\>\[data-ui\=item\]_\[data-ui\=description\]\]\:sr-only>[data-ui=item] [data-ui=description]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=item\]_\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-5>[data-ui=item] [data-ui=icon]:not([class*=size-]){width:1.25rem!important;height:1.25rem!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=item\]_\[data-ui\=icon\]\:not\(\[class\*\=size-\]\)\]\:size-4>[data-ui=item] [data-ui=icon]:not([class*=size-]){width:1rem!important;height:1rem!important}}.\[\&\>\[data-ui\=item\]_\[role\=img\]\]\:size-6>[data-ui=item] [role=img]{width:1.5rem!important;height:1.5rem!important}@media (min-width: 640px){.sm\:\[\&\>\[data-ui\=item\]_\[role\=img\]\]\:size-5>[data-ui=item] [role=img]{width:1.25rem!important;height:1.25rem!important}}.\[\&\>\[data-ui\=label\]\:first-of-type\:not\(\[class\*\=mb\]\)\]\:mb-2>[data-ui=label]:first-of-type:not([class*=mb]){margin-bottom:.5rem!important}.\[\&\>\[data-ui\=native-select-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-blue-500>[data-ui=native-select-field]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=native-select-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-none>[data-ui=native-select-field]:focus-within+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=native-select-field\]\:last-child_select\]\:text-center>[data-ui=native-select-field]:last-child select{text-align:center!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:first-child\)_select\]\:rounded-s-none>[data-ui=native-select-field]:not(:first-child) select{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:first-child\)_select\]\:border-s-0>[data-ui=native-select-field]:not(:first-child) select{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:last-child\)_select\]\:rounded-e-none>[data-ui=native-select-field]:not(:last-child) select{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=native-select-field\]\:not\(\:last-child\)_select\]\:border-e-0>[data-ui=native-select-field]:not(:last-child) select{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=native-select-field\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=native-select-field]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=native-select-field\]_select\]\:min-w-max>[data-ui=native-select-field] select{min-width:-moz-max-content!important;min-width:max-content!important}.\[\&\>\[data-ui\=native-select-field\]_select\]\:ps-3\.5>[data-ui=native-select-field] select{padding-inline-start:.875rem!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:rounded-s-none>[data-ui=select]:not(:first-child) button{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:border-s-0>[data-ui=select]:not(:first-child) button{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:first-child\)_button\]\:text-end>[data-ui=select]:not(:first-child) button{text-align:end!important}.\[\&\>\[data-ui\=select\]\:not\(\:has\(\+\[aria-hidden\]\:last-child\)\)_button\]\:rounded-e-none>[data-ui=select]:not(:has(+[aria-hidden]:last-child)) button{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=select\]\:not\(\:has\(\+\[aria-hidden\]\:last-child\)\)_button\]\:border-e-0>[data-ui=select]:not(:has(+[aria-hidden]:last-child)) button{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=select\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=select]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=select\]\[data-focus-visible\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:\!bg-blue-500>[data-ui=select][data-focus-visible]+[aria-hidden]+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=select\]\[data-focus-visible\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:bg-none>[data-ui=select][data-focus-visible]+[aria-hidden]+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=select\]\[data-invalid\]\+\[aria-hidden\]\+\[data-ui\=separator\]\]\:bg-destructive>[data-ui=select][data-invalid]+[aria-hidden]+[data-ui=separator]{background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=select\]\]\:w-max>[data-ui=select]{width:-moz-max-content!important;width:max-content!important}.\[\&\>\[data-ui\=select\]\]\:min-w-max>[data-ui=select]{min-width:-moz-max-content!important;min-width:max-content!important}.\[\&\>\[data-ui\=select\]_button\]\:ps-3\.5>[data-ui=select] button{padding-inline-start:.875rem!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=native-select-field\]\:focus-within\)\]\:bg-blue-500>[data-ui=separator]:has(+[data-ui=native-select-field]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=native-select-field\]\:focus-within\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=native-select-field]:focus-within){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-focus-visible\]\)\]\:\!bg-blue-500>[data-ui=separator]:has(+[data-ui=select][data-focus-visible]){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-focus-visible\]\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=select][data-focus-visible]){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=select\]\[data-invalid\]\)\]\:bg-destructive>[data-ui=separator]:has(+[data-ui=select][data-invalid]){background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\:focus-within\)\]\:\!bg-blue-500>[data-ui=separator]:has(+[data-ui=text-field]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\:focus-within\)\]\:bg-none>[data-ui=separator]:has(+[data-ui=text-field]:focus-within){background-image:none!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\[data-invalid\]\:not\(\:focus-within\)\)\]\:bg-destructive>[data-ui=separator]:has(+[data-ui=text-field][data-invalid]:not(:focus-within)){background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=separator\]\:has\(\+\[data-ui\=text-field\]\[data-readonly\]\:focus-within\)\]\:\!bg-blue-300>[data-ui=separator]:has(+[data-ui=text-field][data-readonly]:focus-within){--tw-bg-opacity: 1 !important;background-color:rgb(147 197 253 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=separator\]\]\:bg-border>[data-ui=separator]{background-color:hsl(var(--border))!important}.\[\&\>\[data-ui\=separator\]\]\:bg-\[linear-gradient\(to_bottom\,_theme\(colors\.border\)_1px\,_transparent_1px\,_transparent_calc\(100\%_-_1px\)\,_theme\(colors\.border\)_calc\(100\%_-_1px\)\)\]>[data-ui=separator]{background-image:linear-gradient(to bottom,hsl(var(--border)) 1px,transparent 1px,transparent calc(100% - 1px),hsl(var(--border)) calc(100% - 1px))!important}.\[\&\>\[data-ui\=text-field\]\:focus-within\+\[data-ui\=separator\]\]\:\!bg-blue-500>[data-ui=text-field]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(59 130 246 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=text-field\]\:focus-within\+\[data-ui\=separator\]\]\:bg-none>[data-ui=text-field]:focus-within+[data-ui=separator]{background-image:none!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:first-child\)_input\]\:rounded-s-none>[data-ui=text-field]:not(:first-child) input{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:first-child\)_input\]\:border-s-0>[data-ui=text-field]:not(:first-child) input{border-inline-start-width:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:last-child\)_input\]\:rounded-e-none>[data-ui=text-field]:not(:last-child) input{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>\[data-ui\=text-field\]\:not\(\:last-child\)_input\]\:border-e-0>[data-ui=text-field]:not(:last-child) input{border-inline-end-width:0px!important}.\[\&\>\[data-ui\=text-field\]\>\[data-ui\=label\]\]\:sr-only>[data-ui=text-field]>[data-ui=label]{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border-width:0!important}.\[\&\>\[data-ui\=text-field\]\[data-invalid\]\:not\(\:focus-within\)\+\[data-ui\=separator\]\]\:bg-destructive>[data-ui=text-field][data-invalid]:not(:focus-within)+[data-ui=separator]{background-color:hsl(var(--destructive))!important}.\[\&\>\[data-ui\=text-field\]\[data-readonly\]\:focus-within\+\[data-ui\=separator\]\]\:\!bg-blue-300>[data-ui=text-field][data-readonly]:focus-within+[data-ui=separator]{--tw-bg-opacity: 1 !important;background-color:rgb(147 197 253 / var(--tw-bg-opacity))!important}.\[\&\>\[data-ui\=text-field\]\]\:flex-1>[data-ui=text-field]{flex:1 1 0%!important}.\[\&\>\[data-ui\=trigger\]\]\:-col-end-1>[data-ui=trigger]{grid-column-end:-1!important}.\[\&\>\[data-ui\=trigger\]\]\:row-start-1>[data-ui=trigger]{grid-row-start:1!important}.\[\&\>\[data-ui\=trigger\]\]\:place-self-center>[data-ui=trigger]{place-self:center!important}.\[\&\>\[role\=img\]\:first-of-type\]\:-ms-2>[role=img]:first-of-type{margin-inline-start:-.5rem!important}.\[\&\>\[role\=img\]\:not\(\[class\*\=ring-4\]\)\]\:ring-2>[role=img]:not([class*=ring-4]){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.\[\&\>button\:first-of-type\]\:rounded-b-none>button:first-of-type{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.\[\&\>button\:first-of-type\]\:rounded-e-none>button:first-of-type{border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>button\:last-of-type\]\:rounded-s-none>button:last-of-type{border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>button\:last-of-type\]\:rounded-t-none>button:last-of-type{border-top-left-radius:0!important;border-top-right-radius:0!important}.\[\&\>button\:not\(\:first-child\)\]\:rounded-s-none>button:not(:first-child){border-start-start-radius:0px!important;border-end-start-radius:0px!important}.\[\&\>button\:not\(\:first-child\)\]\:border-s-0>button:not(:first-child){border-inline-start-width:0px!important}.\[\&\>button\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:rounded-none>button:not(:first-of-type):not(:last-of-type){border-radius:0!important}.\[\&\>button\:not\(\:first-of-type\)\]\:border-s-0>button:not(:first-of-type){border-inline-start-width:0px!important}.\[\&\>button\:not\(\:first-of-type\)\]\:border-t-0>button:not(:first-of-type){border-top-width:0px!important}.\[\&\>button\:not\(\:last-child\)\]\:rounded-e-none>button:not(:last-child){border-start-end-radius:0px!important;border-end-end-radius:0px!important}.\[\&\>button\:not\(\:last-child\)\]\:border-e-0>button:not(:last-child){border-inline-end-width:0px!important}.\[\&\>button\:not\(\:last-of-type\)\]\:border-b-0>button:not(:last-of-type){border-bottom-width:0px!important}.\[\&\>button\:not\(\:last-of-type\)\]\:border-e-0>button:not(:last-of-type){border-inline-end-width:0px!important}.\[\&\>button\[data-variant\=solid\]\:not\(\:first-of-type\)\]\:border-s-black\/15>button[data-variant=solid]:not(:first-of-type){border-inline-start-color:#00000026!important}@media (prefers-color-scheme: dark){.dark\:\[\&\>button\[data-variant\=solid\]\]\:border-solid>button[data-variant=solid]{border-style:solid!important}.dark\:\[\&\>button\[data-variant\=solid\]\]\:\[--border-with\:1px\]>button[data-variant=solid]{--border-with: 1px !important}}.\[\&\>button\]\:shadow-none>button{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\>img\]\:size-full>img{width:100%!important;height:100%!important}.\[\&\>img\]\:rounded-lg>img{border-radius:.5rem!important}.\[\&\>input\:focus\]\:border-0>input:focus{border-width:0px!important}.\[\&\>input\:focus\]\:ring-0>input:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}.\[\&\>input\:has\(\+\[data-ui\=clear\]\:not\(\:last-of-type\)\)\]\:pe-20>input:has(+[data-ui=clear]:not(:last-of-type)){padding-inline-end:5rem!important}@media (min-width: 640px){.sm\:\[\&\>input\:has\(\+\[data-ui\=clear\]\:not\(\:last-of-type\)\)\]\:pe-16>input:has(+[data-ui=clear]:not(:last-of-type)){padding-inline-end:4rem!important}}.\[\&\>input\:not\(\:first-of-type\)\:not\(\:last-of-type\)\]\:text-center>input:not(:first-of-type):not(:last-of-type){text-align:center!important}.\[\&\>input\:not\(\[class\*\=pe-\]\)\]\:pe-10>input:not([class*=pe-]){padding-inline-end:2.5rem!important}@media (min-width: 640px){.sm\:\[\&\>input\:not\(\[class\*\=pe-\]\)\]\:pe-9>input:not([class*=pe-]){padding-inline-end:2.25rem!important}}.\[\&\>input\]\:col-span-full>input{grid-column:1 / -1!important}.\[\&\>input\]\:row-start-1>input{grid-row-start:1!important}.\[\&\>input\]\:min-w-12>input{min-width:3rem!important}.\[\&\>input\]\:border-0>input{border-width:0px!important}.\[\&\>input\]\:shadow-none>input{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&\>input\]\:ring-0>input{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color) !important;--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color) !important;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)!important}@media (min-width: 640px){.sm\:\[\&\>input\]\:min-w-11>input{min-width:2.75rem!important}}.\[\&\>svg\:not\(\[class\*\=size\]\)\]\:size-5>svg:not([class*=size]){width:1.25rem!important;height:1.25rem!important}.\[\&\>svg\:not\(\[class\*\=text-\]\)\]\:text-muted>svg:not([class*=text-]){color:hsl(var(--muted))!important}.\[\&\>svg\]\:size-full>svg{width:100%!important;height:100%!important}.\[\&\>svg\]\:h-auto>svg{height:auto!important}.\[\&\>svg\]\:min-w-12>svg{min-width:3rem!important}.\[\&\>svg\]\:max-w-full>svg{max-width:100%!important}.\[\&\>svg\]\:rounded-lg>svg{border-radius:.5rem!important}.\[\&\>textarea\+\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\]\:mt-0\.5>textarea+[data-ui=description]:not([class*=mt-]){margin-top:.125rem!important}.\[\&\[data-orientation\=horizontal\]\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-x-\]\)\]\:gap-x-4[data-orientation=horizontal]:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-x-]){-moz-column-gap:1rem!important;column-gap:1rem!important}.\[\&\[data-orientation\=horizontal\]\:has\(\:is\(\[type\=checkbox\]\,\[type\=radio\]\,\[role\=switch\]\)\)_\[data-ui\=box\]\:not\(\[class\*\=gap-y-\]\)\]\:gap-y-2[data-orientation=horizontal]:has(:is([type=checkbox],[type=radio],[role=switch])) [data-ui=box]:not([class*=gap-y-]){row-gap:.5rem!important}.\[\&\[data-selection-mode\]\]\:px-2[data-selection-mode]{padding-left:.5rem!important;padding-right:.5rem!important}.focus-within\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focus-within]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focus-within]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-within\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus-within{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-within\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus-within{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focused]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focused]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where([data-rac])[data-focus-visible]{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where([data-rac])[data-focus-visible]{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.focus-visible\:\[\&\[readonly\]\]\:border-blue-300[readonly]:where(:not([data-rac])):focus-visible{--tw-border-opacity: 1 !important;border-color:rgb(147 197 253 / var(--tw-border-opacity))!important}.focus-visible\:\[\&\[readonly\]\]\:ring-blue-300[readonly]:where(:not([data-rac])):focus-visible{--tw-ring-opacity: 1 !important;--tw-ring-color: rgb(147 197 253 / var(--tw-ring-opacity)) !important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mb-\]\)\:has\(\+\:is\(input\,textarea\,\[data-ui\=control\]\)\)\]\:mb-3 [data-ui=description]:not([class*=mb-]):has(+:is(input,textarea,[data-ui=control])){margin-bottom:.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\:has\(\+\[data-ui\=box\]\)\]\:mb-4 [data-ui=description]:not([class*=mt-]):has(+[data-ui=box]){margin-bottom:1rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=mt-\]\)\:has\(\+\[data-ui\=box\]\)\]\:mt-1 [data-ui=description]:not([class*=mt-]):has(+[data-ui=box]){margin-top:.25rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=pe-\]\)\]\:has-\[label\[data-position\=left\]\]\:pe-7:has(label[data-position=left]) [data-ui=description]:not([class*=pe-]){padding-inline-end:1.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=pe-\]\)\]\:has-\[label\[data-position\=left\]\]\:pe-\[calc\(theme\(width\.8\)\+16px\)\]:has(label[data-position=left]) [data-ui=description]:not([class*=pe-]){padding-inline-end:calc(2rem + 16px)!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=ps-\]\)\]\:has-\[label\[data-position\=right\]\]\:ps-7:has(label[data-position=right]) [data-ui=description]:not([class*=ps-]){padding-inline-start:1.75rem!important}.\[\&_\[data-ui\=description\]\:not\(\[class\*\=ps-\]\)\]\:has-\[label\[data-position\=right\]\]\:ps-\[calc\(theme\(width\.8\)\+12px\)\]:has(label[data-position=right]) [data-ui=description]:not([class*=ps-]){padding-inline-start:calc(2rem + 12px)!important}.\[\&_\[data-ui\=description\]\]\:has-\[label\[data-disabled\]\]\:opacity-50:has(label[data-disabled]) [data-ui=description]{opacity:.5!important}.\[\&_\[data-ui\=item\]\:has\(\[data-ui\=label\]\)\]\:grid-cols-\[16px_1fr_minmax\(50px\,max-content\)\] [data-ui=item]:has([data-ui=label]){grid-template-columns:16px 1fr minmax(50px,max-content)!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=description\]\]\:col-span-full [data-ui=item]>[data-ui=description]{grid-column:1 / -1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=icon\]\:has\(\+\[data-ui\=label\]\)\:not\(\[class\*\=size-\]\)\]\:size-4 [data-ui=item]>[data-ui=icon]:has(+[data-ui=label]):not([class*=size-]){width:1rem!important;height:1rem!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=icon\]\:not\(\[class\*\=text-\]\)\]\:text-muted [data-ui=item]>[data-ui=icon]:not([class*=text-]){color:hsl(var(--muted))!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:col-span-1 [data-ui=item]>[data-ui=kbd]{grid-column:span 1 / span 1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:col-start-3 [data-ui=item]>[data-ui=kbd]{grid-column-start:3!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:row-start-1 [data-ui=item]>[data-ui=kbd]{grid-row-start:1!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=kbd\]\]\:justify-self-end [data-ui=item]>[data-ui=kbd]{justify-self:end!important}.\[\&_\[data-ui\=item\]\>\[data-ui\=label\]\]\:col-span-full [data-ui=item]>[data-ui=label]{grid-column:1 / -1!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\)\]\:size-5 [data-ui=item]>[role=img]:has(+[data-ui=label]){width:1.25rem!important;height:1.25rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:row-start-1 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){grid-row-start:1!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:row-end-3 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){grid-row-end:3!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:mt-0\.5 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){margin-top:.125rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:size-7 [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){width:1.75rem!important;height:1.75rem!important}.\[\&_\[data-ui\=item\]\>\[role\=img\]\:has\(\+\[data-ui\=label\]\+\[data-ui\=description\]\)\]\:self-start [data-ui=item]>[role=img]:has(+[data-ui=label]+[data-ui=description]){align-self:flex-start!important}.\[\&_\[data-ui\=item\]\[data-destructive\]\>\[data-ui\=icon\]\]\:text-destructive\/75 [data-ui=item][data-destructive]>[data-ui=icon]{color:hsl(var(--destructive) / .75)!important}.\[\&_\[data-ui\=item\]\[data-destructive\]\>\[data-ui\=kbd\]\]\:text-destructive [data-ui=item][data-destructive]>[data-ui=kbd]{color:hsl(var(--destructive))!important}.\[\&_\[data-ui\=item\]\]\:grid [data-ui=item]{display:grid!important}.\[\&_\[data-ui\=item\]\]\:flex-1 [data-ui=item]{flex:1 1 0%!important}.\[\&_\[data-ui\=item\]\]\:grid-cols-\[minmax\(16px\,max-content\)_1fr\] [data-ui=item]{grid-template-columns:minmax(16px,max-content) 1fr!important}.\[\&_\[data-ui\=item\]\]\:items-center [data-ui=item]{align-items:center!important}.\[\&_\[data-ui\=item\]\]\:gap-x-2 [data-ui=item]{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.\[\&_\[data-ui\=label\]\:not\(\[class\*\=mb-\]\)\:has\(\+\:is\(input\,textarea\,\[data-ui\=control\]\)\)\]\:mb-2 [data-ui=label]:not([class*=mb-]):has(+:is(input,textarea,[data-ui=control])){margin-bottom:.5rem!important}.\[\&_\[data-ui\=label\]\:not\(\[class\*\=mb-\]\)\]\:mb-1 [data-ui=label]:not([class*=mb-]){margin-bottom:.25rem!important}.\[\&_\[slot\=radio\]\]\:mt-1\.5 [slot=radio]{margin-top:.375rem!important}.\[\&_button\[data-variant\=outline\]\]\:border-border button[data-variant=outline]{border-color:hsl(var(--border))!important}.\[\&_button\]\:shadow-none button{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_header\]\:px-3 header{padding-left:.75rem!important;padding-right:.75rem!important}.\[\&_input\]\:shadow-none input{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_label\]\:has-\[\[data-position\=left\]\]\:justify-between:has([data-position=left]) label{justify-content:space-between!important}.\[\&_label\]\:has-\[\[data-ui\=description\]\]\:font-medium:has([data-ui=description]) label{font-weight:500!important}.\[\&_select\]\:shadow-none select{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem!important;height:.75rem!important}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-5 svg:not([class*=size-]){width:1.25rem!important;height:1.25rem!important}@media (min-width: 640px){.sm\:\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-4 svg:not([class*=size-]){width:1rem!important;height:1rem!important}}.\[\&_svg\]\:m-0\.5 svg{margin:.125rem!important}@media (min-width: 640px){.sm\:\[\&_svg\]\:m-1 svg{margin:.25rem!important}}.\[\&_td\]\:px-0 td{padding-left:0!important;padding-right:0!important}.justify-start .\[\.justify-start_\&\]\:ms-auto{margin-inline-start:auto!important}.rounded-full .\[\.rounded-full_\&\]\:translate-x-\[35\%\]{--tw-translate-x: 35% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rounded-full .\[\.rounded-full_\&\]\:translate-y-\[5\%\]{--tw-translate-y: 5% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@container (min-width: 40px){.rounded-full .\@\[40px\]\:\[\.rounded-full_\&\]\:translate-x-\[15\%\]{--tw-translate-x: 15% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}@container (min-width: 64px){.rounded-full .\@\[64px\]\:\[\.rounded-full_\&\]\:-translate-x-\[5\%\]{--tw-translate-x: -5% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}.rounded-full .\@\[64px\]\:\[\.rounded-full_\&\]\:-translate-y-\[10\%\]{--tw-translate-y: -10% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}@container (min-width: 128px){.rounded-full .\@\[128px\]\:\[\.rounded-full_\&\]\:translate-x-\[-20\%\]{--tw-translate-x: -20% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}}.rounded-full .rtl\:\[\.rounded-full_\&\]\:translate-y-\[45\%\]:where([dir=rtl],[dir=rtl] *){--tw-translate-y: 45% !important;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}@media (pointer:fine){.\[\@media\(pointer\:fine\)\]\:hidden{display:none!important}}[data-ui=select-value] .\[\[data-ui\=select-value\]_\&\]\:hidden{display:none!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:z-10>[data-ui=addon]:first-child{z-index:10!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:col-start-1>[data-ui=addon]:first-child{grid-column-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:first-child\]\:row-start-1>[data-ui=addon]:first-child{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:last-child\]\:-col-end-1>[data-ui=addon]:last-child{grid-column-end:-1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:last-child\]\:row-start-1>[data-ui=addon]:last-child{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:not\(\:first-child\)\]\:border-s-0>[data-ui=addon]:not(:first-child){border-inline-start-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\:not\(\:last-child\)\]\:border-e-0>[data-ui=addon]:not(:last-child){border-inline-end-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>\[data-ui\=addon\]\]\:border-0>[data-ui=addon]{border-width:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\:not\(\[class\*\=ps-\]\)\]\:ps-10>input:not(:first-child):not([class*=ps-]){padding-inline-start:2.5rem!important}@media (min-width: 640px){[data-ui=text-field] .sm\:\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\:not\(\[class\*\=ps-\]\)\]\:ps-8>input:not(:first-child):not([class*=ps-]){padding-inline-start:2rem!important}}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:first-child\)\]\:rounded-s-none>input:not(:first-child){border-start-start-radius:0px!important;border-end-start-radius:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\:not\(\[class\*\=pe-\]\)\]\:pe-10>input:not(:last-child):not([class*=pe-]){padding-inline-end:2.5rem!important}@media (min-width: 640px){[data-ui=text-field] .sm\:\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\:not\(\[class\*\=pe-\]\)\]\:pe-8>input:not(:last-child):not([class*=pe-]){padding-inline-end:2rem!important}}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\:not\(\:last-child\)\]\:rounded-e-none>input:not(:last-child){border-start-end-radius:0px!important;border-end-end-radius:0px!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\]\:col-span-full>input{grid-column:1 / -1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&\>input\]\:row-start-1>input{grid-row-start:1!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&_\]\:grid{display:grid!important}[data-ui=text-field] .\[\[data-ui\=text-field\]_\&_\]\:grid-cols-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto!important}[data-variant=outline]:not(:hover) .\[\[data-variant\=outline\]\:not\(\:hover\)_\&\]\:text-muted{color:hsl(var(--muted))!important}td:first-child .\[td\:first-child_\&\]\:rounded-s-lg{border-start-start-radius:.5rem!important;border-end-start-radius:.5rem!important}td:last-child .\[td\:last-child_\&\]\:rounded-e-lg{border-start-end-radius:.5rem!important;border-end-end-radius:.5rem!important}.zinc-theme{--accent: 24 9.8% 10%}.dark .zinc-theme{--accent: 240 5% 34%}.blue-theme,.dark .blue-theme{--accent: 221 83% 53%}.indigo-theme,.dark .indigo-theme{--accent: 243 75% 59%}.violet-theme,.dark .violet-theme{--accent: 262 83% 58%}.purple-theme,.dark .purple-theme{--accent: 271 81% 56%}.fuchsia-theme,.dark .fuchsia-theme{--accent: 293 69% 49%}.light{--zinc: #27272a;--gray: #424448;--red: #991b1b;--orange: #9a3412;--amber:#92400e;--yellow: #854d0e;--brown: #51412f;--auburn:#5d3937;--lime: #3f6212;--green: #166534;--emerald:#065f46;--teal:#115e59;--cyan: #155e75;--sky: #075985;--blue:#1e40af;--indigo: #3730a3;--violet: #5b21b6;--purple:#6b21a8;--fuchsia:#86198f;--pink: #9d174d;--rose:#9f1239}.dark{--zinc: #3f3f46;--gray:#5c6570;--red: #dc2626;--orange: #ea580c;--amber:#d97706;--yellow: #ca8a04;--brown: #755f43;--auburn:#8a5551;--lime: #65a30d;--green: #16a34a;--emerald:#059669;--teal:#0d9488;--cyan: #0891b2;--sky: #0284c7;--blue:#2563eb;--indigo: #4f46e5;--violet: #7c3aed;--purple:#9333ea;--fuchsia:#c026d3;--pink: #db2777;--rose:#e11d48}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgb(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgb(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color, var(--xy-background-color-props, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.center{left:50%;transform:translate(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:4px;height:4px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));transform:translate(-50%,-50%)}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}.monaco-editor{font-family:-apple-system,BlinkMacSystemFont,Segoe WPC,Segoe UI,HelveticaNeue-Light,system-ui,Ubuntu,Droid Sans,sans-serif;--monaco-monospace-font: "SF Mono", Monaco, Menlo, Consolas, "Ubuntu Mono", "Liberation Mono", "DejaVu Sans Mono", "Courier New", monospace}.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,.monaco-editor.hc-light .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;top:0;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%)}.monaco-editor,.monaco-diff-editor .synthetic-focus,.monaco-diff-editor [tabindex="0"]:focus,.monaco-diff-editor [tabindex="-1"]:focus,.monaco-diff-editor button:focus,.monaco-diff-editor input[type=button]:focus,.monaco-diff-editor input[type=checkbox]:focus,.monaco-diff-editor input[type=search]:focus,.monaco-diff-editor input[type=text]:focus,.monaco-diff-editor select:focus,.monaco-diff-editor textarea:focus{outline-width:1px;outline-style:solid;outline-offset:-1px;outline-color:var(--vscode-focusBorder);opacity:1}.monaco-workbench .workbench-hover{position:relative;font-size:13px;line-height:19px;z-index:40;overflow:hidden;max-width:700px;background:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:3px;color:var(--vscode-editorHoverWidget-foreground);box-shadow:0 2px 8px var(--vscode-widget-shadow)}.monaco-workbench .workbench-hover hr{border-bottom:none}.monaco-workbench .workbench-hover:not(.skip-fade-in){animation:fadein .1s linear}.monaco-workbench .workbench-hover.compact{font-size:12px}.monaco-workbench .workbench-hover.compact .hover-contents{padding:2px 8px}.monaco-workbench .workbench-hover-container.locked .workbench-hover{outline:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .workbench-hover-container.locked .workbench-hover:focus,.monaco-workbench .workbench-hover-lock:focus{outline:1px solid var(--vscode-focusBorder)}.monaco-workbench .workbench-hover-container.locked .workbench-hover-lock:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-workbench .workbench-hover-pointer{position:absolute;z-index:41;pointer-events:none}.monaco-workbench .workbench-hover-pointer:after{content:"";position:absolute;width:5px;height:5px;background-color:var(--vscode-editorHoverWidget-background);border-right:1px solid var(--vscode-editorHoverWidget-border);border-bottom:1px solid var(--vscode-editorHoverWidget-border)}.monaco-workbench .locked .workbench-hover-pointer:after{width:4px;height:4px;border-right-width:2px;border-bottom-width:2px}.monaco-workbench .workbench-hover-pointer.left{left:-3px}.monaco-workbench .workbench-hover-pointer.right{right:3px}.monaco-workbench .workbench-hover-pointer.top{top:-3px}.monaco-workbench .workbench-hover-pointer.bottom{bottom:3px}.monaco-workbench .workbench-hover-pointer.left:after{transform:rotate(135deg)}.monaco-workbench .workbench-hover-pointer.right:after{transform:rotate(315deg)}.monaco-workbench .workbench-hover-pointer.top:after{transform:rotate(225deg)}.monaco-workbench .workbench-hover-pointer.bottom:after{transform:rotate(45deg)}.monaco-workbench .workbench-hover a{color:var(--vscode-textLink-foreground)}.monaco-workbench .workbench-hover a:focus{outline:1px solid;outline-offset:-1px;text-decoration:underline;outline-color:var(--vscode-focusBorder)}.monaco-workbench .workbench-hover a:hover,.monaco-workbench .workbench-hover a:active{color:var(--vscode-textLink-activeForeground)}.monaco-workbench .workbench-hover code{background:var(--vscode-textCodeBlock-background)}.monaco-workbench .workbench-hover .hover-row .actions{background:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-workbench .workbench-hover.right-aligned{left:1px}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions{flex-direction:row-reverse}.monaco-workbench .workbench-hover.right-aligned .hover-row.status-bar .actions .action-container{margin-right:0;margin-left:16px}.monaco-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.monaco-scrollable-element>.invisible{opacity:0;pointer-events:none}.monaco-scrollable-element>.invisible.fade{transition:opacity .8s linear}.monaco-scrollable-element>.shadow{position:absolute;display:none}.monaco-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow) 6px 0 6px -6px inset}.monaco-scrollable-element>.scrollbar>.slider{background:var(--vscode-scrollbarSlider-background)}.monaco-scrollable-element>.scrollbar>.slider:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-scrollable-element>.scrollbar>.slider.active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-hover{cursor:default;position:absolute;overflow:hidden;-moz-user-select:text;user-select:text;-webkit-user-select:text;box-sizing:border-box;animation:fadein .1s linear;line-height:1.5em;white-space:var(--vscode-hover-whiteSpace, normal)}.monaco-hover.hidden{display:none}.monaco-hover a:hover:not(.disabled){cursor:pointer}.monaco-hover .hover-contents:not(.html-hover-contents){padding:4px 8px}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents){max-width:var(--vscode-hover-maxWidth, 500px);word-wrap:break-word}.monaco-hover .markdown-hover>.hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover p,.monaco-hover .code,.monaco-hover ul,.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{margin:8px 0}.monaco-hover h1,.monaco-hover h2,.monaco-hover h3,.monaco-hover h4,.monaco-hover h5,.monaco-hover h6{line-height:1.1}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0px;border-right:0px;margin:4px -8px -4px;height:1px}.monaco-hover p:first-child,.monaco-hover .code:first-child,.monaco-hover ul:first-child{margin-top:0}.monaco-hover p:last-child,.monaco-hover .code:last-child,.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ul,.monaco-hover ol{padding-left:20px}.monaco-hover li>p{margin-bottom:0}.monaco-hover li>ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 .4em}.monaco-hover .monaco-tokenized-source{white-space:var(--vscode-hover-sourceWhiteSpace, pre-wrap)}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .info{font-style:italic;padding:0 8px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0 8px;width:100%}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .hover-row.status-bar .actions .action-container a{color:var(--vscode-textLink-foreground);-webkit-text-decoration:var(--text-link-decoration);text-decoration:var(--text-link-decoration)}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link:hover,.monaco-hover .hover-contents a.code-link{color:inherit}.monaco-hover .hover-contents a.code-link:before{content:"("}.monaco-hover .hover-contents a.code-link:after{content:")"}.monaco-hover .hover-contents a.code-link>span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under;color:var(--vscode-textLink-foreground)}.monaco-hover .hover-contents a.code-link>span:hover{color:var(--vscode-textLink-activeForeground)}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span{margin-bottom:4px;display:inline-block}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents):not(.html-hover-contents) span.codicon{margin-bottom:2px}.monaco-hover-content .action-container a{-webkit-user-select:none;-moz-user-select:none;user-select:none}.monaco-hover-content .action-container.disabled{pointer-events:none;opacity:.4;cursor:default}.monaco-editor .rendered-markdown kbd{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-style:solid;border-width:1px;border-radius:3px;border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);vertical-align:middle;padding:1px 3px}.rendered-markdown li:has(input[type=checkbox]){list-style-type:none}.monaco-aria-container{position:absolute;left:-999em}.context-view{position:absolute}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;color:inherit}.monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-list>.monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list .monaco-scrollable-element>.scrollbar.vertical,.monaco-pane-view>.monaco-split-view2.vertical>.monaco-scrollable-element>.scrollbar.vertical{z-index:14}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,.monaco-list.selection-single,.monaco-list.selection-multiple{outline:0!important}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em;text-align:center;white-space:normal;opacity:.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-select-box-dropdown-padding{--dropdown-padding-top: 1px;--dropdown-padding-bottom: 1px}.hc-black .monaco-select-box-dropdown-padding,.hc-light .monaco-select-box-dropdown-padding{--dropdown-padding-top: 3px;--dropdown-padding-bottom: 4px}.monaco-select-box-dropdown-container{display:none;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown *{margin:0}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown a:focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-select-box-dropdown-container>.select-box-details-pane>.select-box-description-markdown code{line-height:15px;font-family:var(--monaco-monospace-font)}.monaco-select-box-dropdown-container.visible{display:flex;flex-direction:column;text-align:left;width:1px;overflow:hidden;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container{flex:0 0 auto;align-self:flex-start;padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom);padding-left:1px;padding-right:1px;width:100%;overflow:hidden;box-sizing:border-box}.monaco-select-box-dropdown-container>.select-box-details-pane{padding:5px}.hc-black .monaco-select-box-dropdown-container>.select-box-dropdown-list-container{padding-top:var(--dropdown-padding-top);padding-bottom:var(--dropdown-padding-bottom)}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row{cursor:pointer}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-text{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-detail{text-overflow:ellipsis;overflow:hidden;padding-left:3.5px;white-space:nowrap;float:left;opacity:.7}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.option-decorator-right{text-overflow:ellipsis;overflow:hidden;padding-right:10px;white-space:nowrap;float:right}.monaco-select-box-dropdown-container>.select-box-dropdown-list-container .monaco-list .monaco-list-row>.visually-hidden{position:absolute;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control{flex:1 1 auto;align-self:flex-start;opacity:0}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div{overflow:hidden;max-height:0px}.monaco-select-box-dropdown-container>.select-box-dropdown-container-width-control>.width-control-div>.option-text-width-control{padding-left:4px;padding-right:8px;white-space:nowrap}.monaco-select-box{width:100%;cursor:pointer;border-radius:2px}.monaco-select-box-dropdown-container{font-size:13px;font-weight:400;text-transform:none}.monaco-action-bar .action-item.select-container{cursor:default}.monaco-action-bar .action-item .monaco-select-box{cursor:pointer;min-width:100px;min-height:18px;padding:2px 23px 2px 8px}.mac .monaco-action-bar .action-item .monaco-select-box{font-size:11px;border-radius:5px}.monaco-action-bar{white-space:nowrap;height:100%}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;height:100%;width:100%;align-items:center}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{display:block;align-items:center;justify-content:center;cursor:pointer;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .icon,.monaco-action-bar .action-item .codicon{display:block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center;width:16px;height:16px}.monaco-action-bar .action-label{display:flex;font-size:11px;padding:3px;border-radius:5px}.monaco-action-bar .action-item.disabled .action-label,.monaco-action-bar .action-item.disabled .action-label:before,.monaco-action-bar .action-item.disabled .action-label:hover{color:var(--vscode-disabledForeground)}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.monaco-action-bar .action-item .action-label.separator{width:1px;height:16px;margin:5px 4px!important;cursor:default;min-width:1px;padding:0;background-color:#bbb}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator{display:flex;align-items:center;cursor:default}.monaco-action-bar .action-item.action-dropdown-item>.action-dropdown-item-separator>div{width:1px}.monaco-dropdown{height:100%;padding:0}.monaco-dropdown>.dropdown-label{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center}.monaco-dropdown>.dropdown-label>.action-label.disabled{cursor:default}.monaco-dropdown-with-primary{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-primary>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-primary>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.monaco-action-bar .action-item.menu-entry .action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-action-bar .action-item.menu-entry.text-only .action-label{color:var(--vscode-descriptionForeground);overflow:hidden;border-radius:2px}.monaco-action-bar .action-item.menu-entry.text-only.use-comma:not(:last-of-type) .action-label:after{content:", "}.monaco-action-bar .action-item.menu-entry.text-only+.action-item:not(.text-only)>.monaco-dropdown .action-label{color:var(--vscode-descriptionForeground)}.monaco-dropdown-with-default{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-default>.action-container>.action-label{margin-right:0}.monaco-dropdown-with-default>.action-container.menu-entry>.action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-dropdown-with-default:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label .codicon[class*=codicon-]{font-size:12px;padding-left:0;padding-right:0;line-height:16px;margin-left:-3px}.monaco-dropdown-with-default>.dropdown-action-container>.monaco-dropdown>.dropdown-label>.action-label{display:block;background-size:16px;background-position:center center;background-repeat:no-repeat}.quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight{color:#0066bf}.vs .quick-input-widget .monaco-list-row.focused .monaco-highlighted-label .highlight{color:#9dddff}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#f38518}.hc-light .quick-input-widget .monaco-highlighted-label .highlight{color:#0f4a85}.monaco-keybinding>.monaco-keybinding-key{background-color:#ddd6;border:solid 1px rgba(204,204,204,.4);border-bottom-color:#bbb6;box-shadow:inset 0 -1px #bbb6;color:#555}.hc-black .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px rgb(111,195,223);box-shadow:none;color:#fff}.hc-light .monaco-keybinding>.monaco-keybinding-key{background-color:transparent;border:solid 1px #0F4A85;box-shadow:none;color:#292929}.vs-dark .monaco-keybinding>.monaco-keybinding-key{background-color:#8080802b;border:solid 1px rgba(51,51,51,.6);border-bottom-color:#4449;box-shadow:inset 0 -1px #4449;color:#ccc}.monaco-custom-toggle{margin-left:2px;float:left;cursor:pointer;overflow:hidden;width:20px;height:20px;border-radius:3px;border:1px solid transparent;padding:1px;box-sizing:border-box;-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-custom-toggle:hover{background-color:var(--vscode-inputOption-hoverBackground)}.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{border:1px dashed var(--vscode-focusBorder)}.hc-black .monaco-custom-toggle,.hc-light .monaco-custom-toggle,.hc-black .monaco-custom-toggle:hover,.hc-light .monaco-custom-toggle:hover{background:none}.monaco-custom-toggle.monaco-checkbox{height:18px;width:18px;border:1px solid transparent;border-radius:3px;margin-right:9px;margin-left:0;padding:0;opacity:1;background-size:16px!important}.monaco-action-bar .checkbox-action-item{display:flex;align-items:center;border-radius:2px;padding-right:2px}.monaco-action-bar .checkbox-action-item:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-action-bar .checkbox-action-item>.monaco-custom-toggle.monaco-checkbox{margin-right:4px}.monaco-action-bar .checkbox-action-item>.checkbox-label{font-size:12px}.monaco-custom-toggle.monaco-checkbox:not(.checked):before{visibility:hidden}.quick-input-widget{position:absolute;width:600px;z-index:2550;left:50%;margin-left:-300px;-webkit-app-region:no-drag;border-radius:6px}.quick-input-titlebar{display:flex;align-items:center;border-top-right-radius:5px;border-top-left-radius:5px}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-inline-action-bar{margin:2px 0 0 5px}.quick-input-title{padding:3px 0;text-align:center;text-overflow:ellipsis;overflow:hidden}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-right-action-bar>.actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:center;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px 6px 6px 11px}.quick-input-header .quick-input-description{margin:4px 2px;flex:1}.quick-input-header{display:flex;padding:8px 6px 2px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;min-width:0;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:25px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px;overflow-wrap:break-word}.quick-input-message>.codicon{margin:0 .2em;vertical-align:text-bottom}.quick-input-message a{color:inherit}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-list{line-height:22px}.quick-input-widget.hidden-input .quick-input-list{margin-top:4px;padding-bottom:4px}.quick-input-list .monaco-list{overflow:hidden;max-height:440px;padding-bottom:5px}.quick-input-list .monaco-scrollable-element{padding:0 5px}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row{border-radius:3px}.quick-input-list .monaco-list-row[data-index="0"] .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-icon{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;display:flex;align-items:center;justify-content:center}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows>.quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label,.quick-input-list .quick-input-list-rows>.quick-input-list-row .monaco-icon-label .monaco-icon-label-container>.monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows>.quick-input-list-row .codicon[class*=codicon-]{vertical-align:text-bottom}.quick-input-list .quick-input-list-rows .monaco-highlighted-label>span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-list .monaco-list-row .monaco-highlighted-label .highlight{font-weight:700;background-color:unset;color:var(--vscode-list-highlightForeground)!important}.quick-input-list .monaco-list .monaco-list-row.focused .monaco-highlighted-label .highlight{color:var(--vscode-list-focusHighlightForeground)!important}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:4px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:2px}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px;margin-right:4px}.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label,.quick-input-list .quick-input-list-entry.focus-inside .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label,.quick-input-list .monaco-list-row.passive-focused .quick-input-list-entry-action-bar .action-label{display:flex}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key,.quick-input-list .monaco-list-row.focused .quick-input-list-entry .quick-input-list-separator{color:inherit}.quick-input-list .monaco-list-row.focused .monaco-keybinding-key{background:none}.quick-input-list .quick-input-list-separator-as-item{padding:4px 6px;font-size:12px}.quick-input-list .quick-input-list-separator-as-item .label-name{font-weight:600}.quick-input-list .quick-input-list-separator-as-item .label-description{opacity:1!important}.quick-input-list .monaco-tree-sticky-row .quick-input-list-entry.quick-input-list-separator-as-item.quick-input-list-separator-border{border-top-style:none}.quick-input-list .monaco-tree-sticky-row{padding:0 5px}.quick-input-list .monaco-tl-twistie{display:none!important}.monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;border-radius:2px;text-align:center;cursor:pointer;justify-content:center;align-items:center;border:1px solid var(--vscode-button-border, transparent);line-height:18px}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled:focus,.monaco-button.disabled{opacity:.4!important;cursor:default}.monaco-text-button .codicon{margin:0 .2em;color:inherit!important}.monaco-text-button.monaco-text-button-with-short-label{flex-direction:row;flex-wrap:wrap;padding:0 4px;overflow:hidden;height:28px}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label{flex-basis:100%}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{flex-grow:1;width:0;overflow:hidden}.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label,.monaco-text-button.monaco-text-button-with-short-label>.monaco-button-label-short{display:flex;justify-content:center;align-items:center;font-weight:400;font-style:inherit;padding:4px 0}.monaco-button-dropdown{display:flex;cursor:pointer}.monaco-button-dropdown.disabled{cursor:default}.monaco-button-dropdown>.monaco-button:focus{outline-offset:-1px!important}.monaco-button-dropdown.disabled>.monaco-button.disabled,.monaco-button-dropdown.disabled>.monaco-button.disabled:focus,.monaco-button-dropdown.disabled>.monaco-button-dropdown-separator{opacity:.4!important}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-right-width:0!important}.monaco-button-dropdown .monaco-button-dropdown-separator{padding:4px 0;cursor:default}.monaco-button-dropdown .monaco-button-dropdown-separator>div{height:100%;width:1px}.monaco-button-dropdown>.monaco-button.monaco-dropdown-button{border:1px solid var(--vscode-button-border, transparent);border-left-width:0!important;border-radius:0 2px 2px 0;display:flex;align-items:center}.monaco-button-dropdown>.monaco-button.monaco-text-button{border-radius:2px 0 0 2px}.monaco-description-button{display:flex;flex-direction:column;align-items:center;margin:4px 5px}.monaco-description-button .monaco-button-description{font-style:italic;font-size:11px;padding:4px 20px}.monaco-description-button .monaco-button-label,.monaco-description-button .monaco-button-description{display:flex;justify-content:center;align-items:center}.monaco-description-button .monaco-button-label>.codicon,.monaco-description-button .monaco-button-description>.codicon{margin:0 .2em;color:inherit!important}.monaco-button.default-colors,.monaco-button-dropdown.default-colors>.monaco-button{color:var(--vscode-button-foreground);background-color:var(--vscode-button-background)}.monaco-button.default-colors:hover,.monaco-button-dropdown.default-colors>.monaco-button:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-button.default-colors.secondary,.monaco-button-dropdown.default-colors>.monaco-button.secondary{color:var(--vscode-button-secondaryForeground);background-color:var(--vscode-button-secondaryBackground)}.monaco-button.default-colors.secondary:hover,.monaco-button-dropdown.default-colors>.monaco-button.secondary:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator{background-color:var(--vscode-button-background);border-top:1px solid var(--vscode-button-border);border-bottom:1px solid var(--vscode-button-border)}.monaco-button-dropdown.default-colors .monaco-button.secondary+.monaco-button-dropdown-separator{background-color:var(--vscode-button-secondaryBackground)}.monaco-button-dropdown.default-colors .monaco-button-dropdown-separator>div{background-color:var(--vscode-button-separator)}.monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:400;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}.monaco-progress-container{width:100%;height:2px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:2px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width .1s linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;transform:translateZ(0);animation-timing-function:linear}.monaco-progress-container.infinite.infinite-long-running .progress-bit{animation-timing-function:steps(100)}@keyframes progress{0%{transform:translate(0) scaleX(1)}50%{transform:translate(2500%) scaleX(3)}to{transform:translate(4900%) scaleX(1)}}.monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;border-radius:2px;font-size:inherit}.monaco-inputbox>.ibwrapper>.input,.monaco-inputbox>.ibwrapper>.mirror{padding:4px 6px}.monaco-inputbox>.ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox>.ibwrapper>.input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox>.ibwrapper>input{text-overflow:ellipsis}.monaco-inputbox>.ibwrapper>textarea.input{display:block;scrollbar-width:none;outline:none}.monaco-inputbox>.ibwrapper>textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox>.ibwrapper>textarea.input.empty{white-space:nowrap}.monaco-inputbox>.ibwrapper>.mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}.monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.vs .monaco-findInput.disabled{background-color:#e1e1e1}.vs-dark .monaco-findInput.disabled{background-color:#333}.monaco-findInput.highlight-0 .controls,.hc-light .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 .1s linear 0s}.monaco-findInput.highlight-1 .controls,.hc-light .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 .1s linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 .1s linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 .1s linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:#fdff00cc}to{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:#fdff00cc}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:#ffffff70}to{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:#ffffff70}99%{background:transparent}}:root{--vscode-sash-size: 4px;--vscode-sash-hover-size: 4px}.monaco-sash{position:absolute;z-index:35;touch-action:none}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;top:0;width:var(--vscode-sash-size);height:100%}.monaco-sash.horizontal{cursor:ns-resize;left:0;width:100%;height:var(--vscode-sash-size)}.monaco-sash:not(.disabled)>.orthogonal-drag-handle{content:" ";height:calc(var(--vscode-sash-size) * 2);width:calc(var(--vscode-sash-size) * 2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.start,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)>.orthogonal-drag-handle.end,.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)>.orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical>.orthogonal-drag-handle.start{left:calc(var(--vscode-sash-size) * -.5);top:calc(var(--vscode-sash-size) * -1)}.monaco-sash.vertical>.orthogonal-drag-handle.end{left:calc(var(--vscode-sash-size) * -.5);bottom:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.start{top:calc(var(--vscode-sash-size) * -.5);left:calc(var(--vscode-sash-size) * -1)}.monaco-sash.horizontal>.orthogonal-drag-handle.end{top:calc(var(--vscode-sash-size) * -.5);right:calc(var(--vscode-sash-size) * -1)}.monaco-sash:before{content:"";pointer-events:none;position:absolute;width:100%;height:100%;background:transparent}.monaco-workbench:not(.reduce-motion) .monaco-sash:before{transition:background-color .1s ease-out}.monaco-sash.hover:before,.monaco-sash.active:before{background:var(--vscode-sash-hoverBorder)}.monaco-sash.vertical:before{width:var(--vscode-sash-hover-size);left:calc(50% - (var(--vscode-sash-hover-size) / 2))}.monaco-sash.horizontal:before{height:var(--vscode-sash-hover-size);top:calc(50% - (var(--vscode-sash-hover-size) / 2))}.pointer-events-disabled{pointer-events:none!important}.monaco-sash.debug{background:#0ff}.monaco-sash.debug.disabled{background:#0ff3}.monaco-sash.debug:not(.disabled)>.orthogonal-drag-handle{background:red}.monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2>.sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2>.sash-container>.monaco-sash{pointer-events:initial}.monaco-split-view2>.monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2>.monaco-scrollable-element>.split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view{white-space:initial;position:absolute}.monaco-split-view2>.monaco-scrollable-element>.split-view-container>.split-view-view:not(.visible){display:none}.monaco-split-view2.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view{width:100%}.monaco-split-view2.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view{height:100%}.monaco-split-view2.separator-border>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{content:" ";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical>.monaco-scrollable-element>.split-view-container>.split-view-view:not(:first-child):before{height:1px;width:100%}.monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap;overflow:hidden}.monaco-table>.monaco-split-view2{border-bottom:1px solid transparent}.monaco-table>.monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{width:100%;height:100%;font-weight:700;overflow:hidden;text-overflow:ellipsis}.monaco-table-th,.monaco-table-td{box-sizing:border-box;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{content:"";position:absolute;left:calc(var(--vscode-sash-size) / 2);width:0;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2,.monaco-workbench:not(.reduce-motion) .monaco-table>.monaco-split-view2 .monaco-sash.vertical:before{transition:border-color .2s ease-out}.monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-row.disabled{cursor:default}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent>.indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-workbench:not(.reduce-motion) .monaco-tl-indent>.indent-guide{transition:border-color .1s linear}.monaco-tl-twistie,.monaco-tl-contents{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;transform:translate(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie:before{border-radius:20px}.monaco-tl-twistie.collapsed:before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading:before{animation:codicon-spin 1.25s steps(30) infinite}.monaco-tree-type-filter{position:absolute;top:0;display:flex;padding:3px;max-width:200px;z-index:100;margin:0 6px;border:1px solid var(--vscode-widget-border);border-bottom-left-radius:4px;border-bottom-right-radius:4px}.monaco-workbench:not(.reduce-motion) .monaco-tree-type-filter{transition:top .3s}.monaco-tree-type-filter.disabled{top:-40px!important}.monaco-tree-type-filter-grab{display:flex!important;align-items:center;justify-content:center;cursor:grab;margin-right:2px}.monaco-tree-type-filter-grab.grabbing{cursor:grabbing}.monaco-tree-type-filter-input{flex:1}.monaco-tree-type-filter-input .monaco-inputbox{height:23px}.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.input,.monaco-tree-type-filter-input .monaco-inputbox>.ibwrapper>.mirror{padding:2px 4px}.monaco-tree-type-filter-input .monaco-findInput>.controls{top:2px}.monaco-tree-type-filter-actionbar{margin-left:4px}.monaco-tree-type-filter-actionbar .monaco-action-bar .action-label{padding:2px}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container{position:absolute;top:0;left:0;width:100%;height:0;z-index:13;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row.monaco-list-row{position:absolute;width:100%;opacity:1!important;overflow:hidden;background-color:var(--vscode-sideBar-background)}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row:hover{background-color:var(--vscode-list-hoverBackground)!important;cursor:pointer}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty,.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container.empty .monaco-tree-sticky-container-shadow{display:none}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow{position:absolute;bottom:-3px;left:0;height:0px;width:100%}.monaco-list .monaco-scrollable-element .monaco-tree-sticky-container[tabindex="0"]:focus{outline:none}.monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label:before{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label-iconpath{width:16px;height:16px;padding-left:2px;margin-top:2px;display:flex}.monaco-icon-label-container.disabled{color:var(--vscode-disabledForeground)}.monaco-icon-label>.monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name{color:inherit;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-name-container>.label-name>.label-separator{margin:0 2px;opacity:.5}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-suffix-container>.label-suffix{opacity:.7;white-space:pre}.monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.7;margin-left:.5em;font-size:.9em;white-space:pre}.monaco-icon-label.nowrap>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{white-space:nowrap}.vs .monaco-icon-label>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{opacity:.95}.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.italic>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:.66}.monaco-icon-label.italic:after{font-style:italic}.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-name-container>.label-name,.monaco-icon-label.strikethrough>.monaco-icon-label-container>.monaco-icon-description-container>.label-description{text-decoration:line-through}.monaco-icon-label:after{opacity:.75;font-size:90%;font-weight:600;margin:auto 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label,.monaco-list:focus .selected .monaco-icon-label:after{color:inherit!important}.monaco-list-row.focused.selected .label-description,.monaco-list-row.selected .label-description{opacity:.8}.monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding>.monaco-keybinding-key{display:inline-block;border-style:solid;border-width:1px;border-radius:3px;vertical-align:middle;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding>.monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding>.monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding>.monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding>.monaco-keybinding-key-chord-separator{width:6px}::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{position:relative;overflow:visible;-webkit-text-size-adjust:100%;color:var(--vscode-editor-foreground);background-color:var(--vscode-editor-background);overflow-wrap:initial}.monaco-editor-background{background-color:var(--vscode-editor-background)}.monaco-editor .rangeHighlight{background-color:var(--vscode-editor-rangeHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-rangeHighlightBorder)}.monaco-editor.hc-black .rangeHighlight,.monaco-editor.hc-light .rangeHighlight{border-style:dotted}.monaco-editor .symbolHighlight{background-color:var(--vscode-editor-symbolHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-symbolHighlightBorder)}.monaco-editor.hc-black .symbolHighlight,.monaco-editor.hc-light .symbolHighlight{border-style:dotted}.monaco-editor .overflow-guard{position:relative;overflow:hidden}.monaco-editor .view-overlays{position:absolute;top:0}.monaco-editor .view-overlays>div,.monaco-editor .margin-view-overlays>div{position:absolute;width:100%}.monaco-editor .squiggly-error{border-bottom:4px double var(--vscode-editorError-border)}.monaco-editor .squiggly-error:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorError-background)}.monaco-editor .squiggly-warning{border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .squiggly-warning:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorWarning-background)}.monaco-editor .squiggly-info{border-bottom:4px double var(--vscode-editorInfo-border)}.monaco-editor .squiggly-info:before{display:block;content:"";width:100%;height:100%;background:var(--vscode-editorInfo-background)}.monaco-editor .squiggly-hint{border-bottom:2px dotted var(--vscode-editorHint-border)}.monaco-editor.showUnused .squiggly-unnecessary{border-bottom:2px dashed var(--vscode-editorUnnecessaryCode-border)}.monaco-editor.showDeprecated .squiggly-inline-deprecated{text-decoration:line-through;text-decoration-color:var(--vscode-editor-foreground, inherit)}.monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:none!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent;z-index:-10}.monaco-editor .inputarea.ime-input{z-index:10;caret-color:var(--vscode-editorCursor-foreground);color:var(--vscode-editor-foreground)}.monaco-editor .margin-view-overlays .line-numbers{bottom:0;font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}.monaco-editor .line-numbers{color:var(--vscode-editorLineNumber-foreground)}.monaco-editor .line-numbers.active-line-number{color:var(--vscode-editorLineNumber-activeForeground)}.monaco-editor .margin{background-color:var(--vscode-editorGutter-background)}.monaco-mouse-cursor-text{cursor:text}.monaco-editor .blockDecorations-container{position:absolute;top:0;pointer-events:none}.monaco-editor .blockDecorations-block{position:absolute;box-sizing:border-box}.monaco-editor .view-overlays .current-line,.monaco-editor .margin-view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box;height:100%}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}.monaco-editor .lines-content .cdr{position:absolute;height:100%}.monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .glyph-margin-widgets .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}.monaco-editor .glyph-margin-widgets .cgmr.codicon-modifier-spin:before{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.monaco-editor .lines-content .core-guide{position:absolute;box-sizing:border-box;height:100%}.mtkcontrol{color:#fff!important;background:#960000!important}.mtkoverflow{background-color:var(--vscode-button-background, var(--vscode-editor-background));color:var(--vscode-button-foreground, var(--vscode-editor-foreground));border-width:1px;border-style:solid;border-color:var(--vscode-contrastBorder);border-radius:2px;padding:4px;cursor:pointer}.mtkoverflow:hover{background-color:var(--vscode-button-hoverBackground)}.monaco-editor.no-user-select .lines-content,.monaco-editor.no-user-select .view-line,.monaco-editor.no-user-select .view-lines{-moz-user-select:none;user-select:none;-webkit-user-select:none}.monaco-editor.mac .lines-content:hover,.monaco-editor.mac .view-line:hover,.monaco-editor.mac .view-lines:hover{-moz-user-select:text;user-select:text;-webkit-user-select:text;-ms-user-select:text}.monaco-editor.enable-user-select{-moz-user-select:initial;user-select:initial;-webkit-user-select:initial}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .lines-content>.view-lines>.view-line>span{top:0;bottom:0;position:absolute}.monaco-editor .mtkw{color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .mtkz{display:inline-block;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .lines-decorations{position:absolute;top:0;background:#fff}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}.monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}.monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity .1s linear}.monaco-editor .minimap.slider-mouseover:hover .minimap-slider,.monaco-editor .minimap.slider-mouseover .minimap-slider.active{opacity:1}.monaco-editor .minimap-slider .minimap-slider-horizontal{background:var(--vscode-minimapSlider-background)}.monaco-editor .minimap-slider:hover .minimap-slider-horizontal{background:var(--vscode-minimapSlider-hoverBackground)}.monaco-editor .minimap-slider.active .minimap-slider-horizontal{background:var(--vscode-minimapSlider-activeBackground)}.monaco-editor .minimap-shadow-visible{box-shadow:var(--vscode-scrollbar-shadow) -6px 0 6px -6px inset}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}.minimap.autohide{opacity:0;transition:opacity .5s}.minimap.autohide:hover{opacity:1}.monaco-editor .minimap{z-index:5}.monaco-editor .overlayWidgets{position:absolute;top:0;left:0}.monaco-editor .view-ruler{position:absolute;top:0;box-shadow:1px 0 0 0 var(--vscode-editorRuler-foreground) inset}.monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px;box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px inset}.monaco-editor .lines-content .cslr{position:absolute}.monaco-editor .focused .selected-text{background-color:var(--vscode-editor-selectionBackground)}.monaco-editor .selected-text{background-color:var(--vscode-editor-inactiveSelectionBackground)}.monaco-editor .top-left-radius{border-top-left-radius:3px}.monaco-editor .bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor .top-right-radius{border-top-right-radius:3px}.monaco-editor .bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor.hc-light .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-light .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-light .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-light .bottom-right-radius{border-bottom-right-radius:0}.monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer>.cursor{position:absolute;overflow:hidden;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-smooth-caret-animation>.cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style>.cursor{background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style>.cursor{border-bottom-width:2px;border-bottom-style:solid;background:transparent!important}.monaco-editor .cursors-layer.cursor-underline-thin-style>.cursor{border-bottom-width:1px;border-bottom-style:solid;background:transparent!important}@keyframes monaco-cursor-smooth{0%,20%{opacity:1}60%,to{opacity:0}}@keyframes monaco-cursor-phase{0%,20%{opacity:1}90%,to{opacity:0}}@keyframes monaco-cursor-expand{0%,20%{transform:scaleY(1)}80%,to{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth .5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase .5s ease-in-out 0s 20 alternate}.cursor-expand>.cursor{animation:monaco-cursor-expand .5s ease-in-out 0s 20 alternate}.monaco-editor .mwh{position:absolute;color:var(--vscode-editorWhitespace-foreground)!important}.monaco-editor .diff-hidden-lines-widget{width:100%}.monaco-editor .diff-hidden-lines{height:0px;transform:translateY(-10px);font-size:13px;line-height:14px}.monaco-editor .diff-hidden-lines:not(.dragging) .top:hover,.monaco-editor .diff-hidden-lines:not(.dragging) .bottom:hover,.monaco-editor .diff-hidden-lines .top.dragging,.monaco-editor .diff-hidden-lines .bottom.dragging{background-color:var(--vscode-focusBorder)}.monaco-editor .diff-hidden-lines .top,.monaco-editor .diff-hidden-lines .bottom{transition:background-color .1s ease-out;height:4px;background-color:transparent;background-clip:padding-box;border-bottom:2px solid transparent;border-top:4px solid transparent}.monaco-editor.draggingUnchangedRegion.canMoveTop:not(.canMoveBottom) *,.monaco-editor .diff-hidden-lines .top.canMoveTop:not(.canMoveBottom),.monaco-editor .diff-hidden-lines .bottom.canMoveTop:not(.canMoveBottom){cursor:n-resize!important}.monaco-editor.draggingUnchangedRegion:not(.canMoveTop).canMoveBottom *,.monaco-editor .diff-hidden-lines .top:not(.canMoveTop).canMoveBottom,.monaco-editor .diff-hidden-lines .bottom:not(.canMoveTop).canMoveBottom{cursor:s-resize!important}.monaco-editor.draggingUnchangedRegion.canMoveTop.canMoveBottom *,.monaco-editor .diff-hidden-lines .top.canMoveTop.canMoveBottom,.monaco-editor .diff-hidden-lines .bottom.canMoveTop.canMoveBottom{cursor:ns-resize!important}.monaco-editor .diff-hidden-lines .top{transform:translateY(4px)}.monaco-editor .diff-hidden-lines .bottom{transform:translateY(-6px)}.monaco-editor .diff-unchanged-lines{background:var(--vscode-diffEditor-unchangedCodeBackground)}.monaco-editor .noModificationsOverlay{z-index:1;background:var(--vscode-editor-background);display:flex;justify-content:center;align-items:center}.monaco-editor .diff-hidden-lines .center{background:var(--vscode-diffEditor-unchangedRegionBackground);color:var(--vscode-diffEditor-unchangedRegionForeground);overflow:hidden;display:block;text-overflow:ellipsis;white-space:nowrap;height:24px;box-shadow:inset 0 -5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow),inset 0 5px 5px -7px var(--vscode-diffEditor-unchangedRegionShadow)}.monaco-editor .diff-hidden-lines .center span.codicon{vertical-align:middle}.monaco-editor .diff-hidden-lines .center a:hover .codicon{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .diff-hidden-lines div.breadcrumb-item{cursor:pointer}.monaco-editor .diff-hidden-lines div.breadcrumb-item:hover{color:var(--vscode-editorLink-activeForeground)}.monaco-editor .movedOriginal,.monaco-editor .movedModified{border:2px solid var(--vscode-diffEditor-move-border)}.monaco-editor .movedOriginal.currentMove,.monaco-editor .movedModified.currentMove{border:2px solid var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path.currentMove{stroke:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines path{pointer-events:visiblestroke}.monaco-diff-editor .moved-blocks-lines .arrow{fill:var(--vscode-diffEditor-move-border)}.monaco-diff-editor .moved-blocks-lines .arrow.currentMove{fill:var(--vscode-diffEditor-moveActive-border)}.monaco-diff-editor .moved-blocks-lines .arrow-rectangle{fill:var(--vscode-editor-background)}.monaco-diff-editor .moved-blocks-lines{position:absolute;pointer-events:none}.monaco-diff-editor .moved-blocks-lines path{fill:none;stroke:var(--vscode-diffEditor-move-border);stroke-width:2}.monaco-editor .char-delete.diff-range-empty{margin-left:-1px;border-left:solid var(--vscode-diffEditor-removedTextBackground) 3px}.monaco-editor .char-insert.diff-range-empty{border-left:solid var(--vscode-diffEditor-insertedTextBackground) 3px}.monaco-editor .fold-unchanged{cursor:pointer}.monaco-diff-editor .diff-moved-code-block{display:flex;justify-content:flex-end;margin-top:-4px}.monaco-diff-editor .diff-moved-code-block .action-bar .action-label.codicon{width:12px;height:12px;font-size:12px}.monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs .diffOverview{background:#00000008}.monaco-diff-editor.vs-dark .diffOverview{background:#ffffff03}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark .scrollbar{background:#0000}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black .scrollbar,.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-light .scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor .slider.active{background:#ababab66}.modified-in-monaco-diff-editor.hc-black .slider.active,.modified-in-monaco-diff-editor.hc-light .slider.active{background:none}.monaco-editor .insert-sign,.monaco-diff-editor .insert-sign,.monaco-editor .delete-sign,.monaco-diff-editor .delete-sign{font-size:11px!important;opacity:.7!important;display:flex!important;align-items:center}.monaco-editor.hc-black .insert-sign,.monaco-diff-editor.hc-black .insert-sign,.monaco-editor.hc-black .delete-sign,.monaco-diff-editor.hc-black .delete-sign,.monaco-editor.hc-light .insert-sign,.monaco-diff-editor.hc-light .insert-sign,.monaco-editor.hc-light .delete-sign,.monaco-diff-editor.hc-light .delete-sign{opacity:1}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .inline-added-margin-view-zone{text-align:right}.monaco-editor .arrow-revert-change{z-index:10;position:absolute}.monaco-editor .arrow-revert-change:hover{cursor:pointer}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}.monaco-editor .char-insert,.monaco-diff-editor .char-insert{background-color:var(--vscode-diffEditor-insertedTextBackground)}.monaco-editor .line-insert,.monaco-diff-editor .line-insert{background-color:var(--vscode-diffEditor-insertedLineBackground, var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .line-insert,.monaco-editor .char-insert{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-insertedTextBorder)}.monaco-editor.hc-black .line-insert,.monaco-editor.hc-light .line-insert,.monaco-editor.hc-black .char-insert,.monaco-editor.hc-light .char-insert{border-style:dashed}.monaco-editor .line-delete,.monaco-editor .char-delete{box-sizing:border-box;border:1px solid var(--vscode-diffEditor-removedTextBorder)}.monaco-editor.hc-black .line-delete,.monaco-editor.hc-light .line-delete,.monaco-editor.hc-black .char-delete,.monaco-editor.hc-light .char-delete{border-style:dashed}.monaco-editor .inline-added-margin-view-zone,.monaco-editor .gutter-insert,.monaco-diff-editor .gutter-insert{background-color:var(--vscode-diffEditorGutter-insertedLineBackground, var(--vscode-diffEditor-insertedLineBackground), var(--vscode-diffEditor-insertedTextBackground))}.monaco-editor .char-delete,.monaco-diff-editor .char-delete,.monaco-editor .inline-deleted-text{background-color:var(--vscode-diffEditor-removedTextBackground)}.monaco-editor .inline-deleted-text{text-decoration:line-through}.monaco-editor .line-delete,.monaco-diff-editor .line-delete{background-color:var(--vscode-diffEditor-removedLineBackground, var(--vscode-diffEditor-removedTextBackground))}.monaco-editor .inline-deleted-margin-view-zone,.monaco-editor .gutter-delete,.monaco-diff-editor .gutter-delete{background-color:var(--vscode-diffEditorGutter-removedLineBackground, var(--vscode-diffEditor-removedLineBackground), var(--vscode-diffEditor-removedTextBackground))}.monaco-diff-editor.side-by-side .editor.modified{box-shadow:-6px 0 5px -5px var(--vscode-scrollbar-shadow);border-left:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor.side-by-side .editor.original{box-shadow:6px 0 5px -5px var(--vscode-scrollbar-shadow);border-right:1px solid var(--vscode-diffEditor-border)}.monaco-diff-editor .diffViewport{background:var(--vscode-scrollbarSlider-background)}.monaco-diff-editor .diffViewport:hover{background:var(--vscode-scrollbarSlider-hoverBackground)}.monaco-diff-editor .diffViewport:active{background:var(--vscode-scrollbarSlider-activeBackground)}.monaco-editor .diagonal-fill{background-image:linear-gradient(-45deg,var(--vscode-diffEditor-diagonalFill) 12.5%,#0000 12.5%,#0000 50%,var(--vscode-diffEditor-diagonalFill) 50%,var(--vscode-diffEditor-diagonalFill) 62.5%,#0000 62.5%,#0000 100%);background-size:8px 8px}.monaco-diff-editor .gutter{position:relative;overflow:hidden;flex-shrink:0;flex-grow:0}.monaco-diff-editor .gutter>div{position:absolute}.monaco-diff-editor .gutter .gutterItem{opacity:0;transition:opacity .7s}.monaco-diff-editor .gutter .gutterItem.showAlways{opacity:1;transition:none}.monaco-diff-editor .gutter .gutterItem.noTransition{transition:none}.monaco-diff-editor .gutter:hover .gutterItem{opacity:1;transition:opacity .1s ease-in-out}.monaco-diff-editor .gutter .gutterItem .background{position:absolute;height:100%;left:50%;width:1px;border-left:2px var(--vscode-menu-border) solid}.monaco-diff-editor .gutter .gutterItem .buttons{position:absolute;width:100%;display:flex;justify-content:center;align-items:center}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar{height:-moz-fit-content;height:fit-content}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar{line-height:1}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container{width:-moz-fit-content;width:fit-content;border-radius:4px;background:var(--vscode-editorGutter-commentRangeForeground)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item:hover{background:var(--vscode-toolbar-hoverBackground)}.monaco-diff-editor .gutter .gutterItem .buttons .monaco-toolbar .monaco-action-bar .actions-container .action-item .action-label{padding:1px 2px}.monaco-diff-editor .diff-hidden-lines-compact{display:flex;height:11px}.monaco-diff-editor .diff-hidden-lines-compact .line-left,.monaco-diff-editor .diff-hidden-lines-compact .line-right{height:1px;border-top:1px solid;border-color:var(--vscode-editorCodeLens-foreground);opacity:.5;margin:auto;width:100%}.monaco-diff-editor .diff-hidden-lines-compact .line-left{width:20px}.monaco-diff-editor .diff-hidden-lines-compact .text{color:var(--vscode-editorCodeLens-foreground);text-wrap:nowrap;font-size:11px;line-height:11px;margin:0 4px}.monaco-component.diff-review{-moz-user-select:none;user-select:none;-webkit-user-select:none;z-index:99}.monaco-diff-editor .diff-review{position:absolute}.monaco-component.diff-review .diff-review-line-number{text-align:right;display:inline-block;color:var(--vscode-editorLineNumber-foreground)}.monaco-component.diff-review .diff-review-summary{padding-left:10px}.monaco-component.diff-review .diff-review-shadow{position:absolute;box-shadow:var(--vscode-scrollbar-shadow) 0 -6px 6px -6px inset}.monaco-component.diff-review .diff-review-row{white-space:pre}.monaco-component.diff-review .diff-review-table{display:table;min-width:100%}.monaco-component.diff-review .diff-review-row{display:table-row;width:100%}.monaco-component.diff-review .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-component.diff-review .diff-review-spacer>.codicon{font-size:9px!important}.monaco-component.diff-review .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px;z-index:100}.monaco-component.diff-review .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}.monaco-component.diff-review .revertButton{cursor:pointer}.monaco-toolbar{height:100%}.monaco-toolbar .toolbar-toggle-more{display:inline-block;padding:0}.monaco-component.multiDiffEditor{background:var(--vscode-multiDiffEditor-background);position:relative;height:100%;width:100%;overflow-y:hidden}.monaco-component.multiDiffEditor>div{position:absolute;top:0;left:0;height:100%;width:100%}.monaco-component.multiDiffEditor>div.placeholder{visibility:hidden}.monaco-component.multiDiffEditor>div.placeholder.visible{visibility:visible}.monaco-component.multiDiffEditor>div.placeholder{display:grid;place-items:center;place-content:center}.monaco-component.multiDiffEditor .active{--vscode-multiDiffEditor-border: var(--vscode-focusBorder)}.monaco-component.multiDiffEditor .multiDiffEntry{display:flex;flex-direction:column;flex:1;overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button{margin:0 5px;cursor:pointer}.monaco-component.multiDiffEditor .multiDiffEntry .collapse-button a{display:block}.monaco-component.multiDiffEditor .multiDiffEntry .header{z-index:1000;background:var(--vscode-editor-background)}.monaco-component.multiDiffEditor .multiDiffEntry .header:not(.collapsed) .header-content{border-bottom:1px solid var(--vscode-sideBarSectionHeader-border)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content{margin:8px 0 0;padding:4px 5px;border-top:1px solid var(--vscode-multiDiffEditor-border);display:flex;align-items:center;color:var(--vscode-foreground);background:var(--vscode-multiDiffEditor-headerBackground)}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content.shadow{box-shadow:var(--vscode-scrollbar-shadow) 0 6px 6px -6px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path{display:flex;flex:1;min-width:0}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title{font-size:14px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .title.original{flex:1;min-width:0;text-overflow:ellipsis}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .file-path .status{font-weight:600;opacity:.75;margin:0 10px;line-height:22px}.monaco-component.multiDiffEditor .multiDiffEntry .header .header-content .actions{padding:0 8px}.monaco-component.multiDiffEditor .multiDiffEntry .editorParent{flex:1;display:flex;flex-direction:column;border-bottom:1px solid var(--vscode-multiDiffEditor-border);overflow:hidden}.monaco-component.multiDiffEditor .multiDiffEntry .editorContainer{flex:1} diff --git a/python/egglog/visualizer.js b/python/egglog/visualizer.js index 8be8ffc4..c72adaa4 100644 --- a/python/egglog/visualizer.js +++ b/python/egglog/visualizer.js @@ -45,7 +45,7 @@ function YT() { current: null }, U = { transition: null - }, w = { + }, N = { current: null, // Used to reproduce behavior of `batchedUpdates` in legacy mode. isBatchingLegacy: !1, @@ -68,13 +68,13 @@ function YT() { var Q = D.getCurrentStack; return Q && (I += Q() || ""), I; }; - var E = !1, g = !1, A = !1, J = !1, F = !1, v = { + var E = !1, T = !1, A = !1, J = !1, F = !1, g = { ReactCurrentDispatcher: k, ReactCurrentBatchConfig: U, ReactCurrentOwner: z }; - v.ReactDebugCurrentFrame = D, v.ReactCurrentActQueue = w; - function T(I) { + g.ReactDebugCurrentFrame = D, g.ReactCurrentActQueue = N; + function v(I) { { for (var Q = arguments.length, dl = new Array(Q > 1 ? Q - 1 : 0), al = 1; al < Q; al++) dl[al - 1] = arguments[al]; @@ -90,7 +90,7 @@ function YT() { } function O(I, Q, dl) { { - var al = v.ReactDebugCurrentFrame, Yl = al.getStackAddendum(); + var al = g.ReactDebugCurrentFrame, Yl = al.getStackAddendum(); Yl !== "" && (Q += "%s", dl = dl.concat([Yl])); var Ol = dl.map(function(gl) { return String(gl); @@ -186,7 +186,7 @@ function YT() { }, kl = function(I, Q) { Object.defineProperty(ml.prototype, I, { get: function() { - T("%s(...) is deprecated in plain JavaScript React classes. %s", Q[0], Q[1]); + v("%s(...) is deprecated in plain JavaScript React classes. %s", Q[0], Q[1]); } }); }; @@ -480,7 +480,7 @@ function YT() { var Tm = r(I); if (typeof Tm == "function") { var Jo = I; - Tm === Jo.entries && (zZ || T("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), zZ = !0); + Tm === Jo.entries && (zZ || v("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), zZ = !0); for (var Sy = Tm.call(Jo), Us, Ho = 0; !(Us = Sy.next()).done; ) fZ = Us.value, AZ = xZ + vZ(fZ, Ho++), dc += cu(fZ, Q, dl, AZ, Yl); } else if (Ol === "object") { @@ -592,7 +592,7 @@ function YT() { return Q.displayName; }, set: function(gl) { - Yl || (T("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.", gl), Yl = !0); + Yl || (v("Setting `displayName` on Context.Consumer has no effect. You should set it directly on the context with Context.displayName = '%s'.", gl), Yl = !0); } } }), Q.Consumer = Ol; @@ -695,7 +695,7 @@ Your code should look like: var Pu; Pu = Symbol.for("react.module.reference"); function P(I) { - return !!(typeof I == "string" || typeof I == "function" || I === i || I === a || F || I === m || I === h || I === S || J || I === V || E || g || A || typeof I == "object" && I !== null && (I.$$typeof === W || I.$$typeof === t || I.$$typeof === n || I.$$typeof === p || I.$$typeof === y || // This needs to include all possible module reference object + return !!(typeof I == "string" || typeof I == "function" || I === i || I === a || F || I === m || I === h || I === S || J || I === V || E || T || A || typeof I == "object" && I !== null && (I.$$typeof === W || I.$$typeof === t || I.$$typeof === n || I.$$typeof === p || I.$$typeof === y || // This needs to include all possible module reference object // types supported by any Flight configuration anywhere since // we don't know which Flight build this will end up being used // with. @@ -859,7 +859,7 @@ See https://reactjs.org/link/invalid-hook-call for tips about how to debug and f Ou < 0 && f("disabledDepth fell below zero. This is a bug in React. Please file an issue."); } } - var Vu = v.ReactCurrentDispatcher, Mb; + var Vu = g.ReactCurrentDispatcher, Mb; function Wd(I, Q, dl) { { if (Mb === void 0) @@ -985,7 +985,7 @@ See https://reactjs.org/link/invalid-hook-call for tips about how to debug and f } return ""; } - var Mn = {}, No = v.ReactDebugCurrentFrame; + var Mn = {}, No = g.ReactDebugCurrentFrame; function Jm(I) { if (I) { var Q = I._owner, dl = xd(I.type, I._source, Q ? Q.type : null); @@ -1140,10 +1140,10 @@ Check the top-level render call using <` + dl + ">."); var Bb = !1; function Ib(I) { var Q = rn.bind(null, I); - return Q.type = I, Bb || (Bb = !0, T("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")), Object.defineProperty(Q, "type", { + return Q.type = I, Bb || (Bb = !0, v("React.createFactory() is deprecated and will be removed in a future major release. Consider using JSX or use React.createElement() directly instead.")), Object.defineProperty(Q, "type", { enumerable: !1, get: function() { - return T("Factory.type is deprecated. Access the class directly before passing it to createFactory."), Object.defineProperty(this, "type", { + return v("Factory.type is deprecated. Access the class directly before passing it to createFactory."), Object.defineProperty(this, "type", { value: I }), I; } @@ -1164,7 +1164,7 @@ Check the top-level render call using <` + dl + ">."); } finally { if (U.transition = dl, dl === null && al._updatedFibers) { var Yl = al._updatedFibers.size; - Yl > 10 && T("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."), al._updatedFibers.clear(); + Yl > 10 && v("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table."), al._updatedFibers.clear(); } } } @@ -1187,17 +1187,17 @@ Check the top-level render call using <` + dl + ">."); function wn(I) { { var Q = Yd; - Yd++, w.current === null && (w.current = []); - var dl = w.isBatchingLegacy, al; + Yd++, N.current === null && (N.current = []); + var dl = N.isBatchingLegacy, al; try { - if (w.isBatchingLegacy = !0, al = I(), !dl && w.didScheduleLegacyUpdate) { - var Yl = w.current; - Yl !== null && (w.didScheduleLegacyUpdate = !1, vm(Yl)); + if (N.isBatchingLegacy = !0, al = I(), !dl && N.didScheduleLegacyUpdate) { + var Yl = N.current; + Yl !== null && (N.didScheduleLegacyUpdate = !1, vm(Yl)); } } catch (AZ) { throw Is(Q), AZ; } finally { - w.isBatchingLegacy = dl; + N.isBatchingLegacy = dl; } if (al !== null && typeof al == "object" && typeof al.then == "function") { var Ol = al, gl = !1, $l = { @@ -1216,11 +1216,11 @@ Check the top-level render call using <` + dl + ">."); } else { var nZ = al; if (Is(Q), Yd === 0) { - var CZ = w.current; - CZ !== null && (vm(CZ), w.current = null); + var CZ = N.current; + CZ !== null && (vm(CZ), N.current = null); var TZ = { then: function(AZ, dc) { - w.current === null ? (w.current = [], gm(nZ, AZ, dc)) : AZ(nZ); + N.current === null ? (N.current = [], gm(nZ, AZ, dc)) : AZ(nZ); } }; return TZ; @@ -1240,11 +1240,11 @@ Check the top-level render call using <` + dl + ">."); } function gm(I, Q, dl) { { - var al = w.current; + var al = N.current; if (al !== null) try { vm(al), Fn(function() { - al.length === 0 ? (w.current = null, Q(I)) : gm(I, Q, dl); + al.length === 0 ? (N.current = null, Q(I)) : gm(I, Q, dl); }); } catch (Yl) { dl(Yl); @@ -1280,7 +1280,7 @@ Check the top-level render call using <` + dl + ">."); toArray: tG, only: Ys }; - Z.Children = gn, Z.Component = ml, Z.Fragment = i, Z.Profiler = a, Z.PureComponent = el, Z.StrictMode = m, Z.Suspense = h, Z.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = v, Z.act = wn, Z.cloneElement = Jn, Z.createContext = ks, Z.createElement = zn, Z.createFactory = Hn, Z.createRef = hl, Z.forwardRef = Ms, Z.isValidElement = kZ, Z.lazy = bu, Z.memo = yl, Z.startTransition = yy, Z.unstable_act = wn, Z.useCallback = DZ, Z.useContext = Bl, Z.useDebugValue = kb, Z.useDeferredValue = Lb, Z.useEffect = dZ, Z.useId = GZ, Z.useImperativeHandle = uu, Z.useInsertionEffect = ac, Z.useLayoutEffect = JZ, Z.useMemo = xc, Z.useReducer = aZ, Z.useRef = jl, Z.useState = oZ, Z.useSyncExternalStore = Wu, Z.useTransition = Sc, Z.version = u, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); + Z.Children = gn, Z.Component = ml, Z.Fragment = i, Z.Profiler = a, Z.PureComponent = el, Z.StrictMode = m, Z.Suspense = h, Z.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = g, Z.act = wn, Z.cloneElement = Jn, Z.createContext = ks, Z.createElement = zn, Z.createFactory = Hn, Z.createRef = hl, Z.forwardRef = Ms, Z.isValidElement = kZ, Z.lazy = bu, Z.memo = yl, Z.startTransition = yy, Z.unstable_act = wn, Z.useCallback = DZ, Z.useContext = Bl, Z.useDebugValue = kb, Z.useDeferredValue = Lb, Z.useEffect = dZ, Z.useId = GZ, Z.useImperativeHandle = uu, Z.useInsertionEffect = ac, Z.useLayoutEffect = JZ, Z.useMemo = xc, Z.useReducer = aZ, Z.useRef = jl, Z.useState = oZ, Z.useSyncExternalStore = Wu, Z.useTransition = Sc, Z.version = u, typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop == "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error()); })(); }(Ya, Ya.exports)), Ya.exports; } @@ -1326,16 +1326,16 @@ function kT() { aZ.unshift("Warning: " + yl), Function.prototype.apply.call(console[P], console, aZ); } } - var U = !1, w = !1, z = !1, D = !1, C = !1, j; + var U = !1, N = !1, z = !1, D = !1, C = !1, j; j = Symbol.for("react.module.reference"); function E(P) { - return !!(typeof P == "string" || typeof P == "function" || P === s || P === i || C || P === G || P === p || P === y || D || P === t || U || w || z || typeof P == "object" && P !== null && (P.$$typeof === S || P.$$typeof === h || P.$$typeof === m || P.$$typeof === a || P.$$typeof === n || // This needs to include all possible module reference object + return !!(typeof P == "string" || typeof P == "function" || P === s || P === i || C || P === G || P === p || P === y || D || P === t || U || N || z || typeof P == "object" && P !== null && (P.$$typeof === S || P.$$typeof === h || P.$$typeof === m || P.$$typeof === a || P.$$typeof === n || // This needs to include all possible module reference object // types supported by any Flight configuration anywhere since // we don't know which Flight build this will end up being used // with. P.$$typeof === j || P.getModuleId !== void 0)); } - function g(P, yl, Kl) { + function T(P, yl, Kl) { var Bl = P.displayName; if (Bl) return Bl; @@ -1375,7 +1375,7 @@ function kT() { var Kl = P; return A(Kl._context) + ".Provider"; case n: - return g(P, P.render, "ForwardRef"); + return T(P, P.render, "ForwardRef"); case h: var Bl = P.displayName || null; return Bl !== null ? Bl : J(P.type) || "Memo"; @@ -1390,14 +1390,14 @@ function kT() { } return null; } - var F = Object.assign, v = 0, T, f, O, _, il, Zl, ol; + var F = Object.assign, g = 0, v, f, O, _, il, Zl, ol; function Wl() { } Wl.__reactDisabledLog = !0; function ml() { { - if (v === 0) { - T = console.log, f = console.info, O = console.warn, _ = console.error, il = console.group, Zl = console.groupCollapsed, ol = console.groupEnd; + if (g === 0) { + v = console.log, f = console.info, O = console.warn, _ = console.error, il = console.group, Zl = console.groupCollapsed, ol = console.groupEnd; var P = { configurable: !0, enumerable: !0, @@ -1414,12 +1414,12 @@ function kT() { groupEnd: P }); } - v++; + g++; } } function Rl() { { - if (v--, v === 0) { + if (g--, g === 0) { var P = { configurable: !0, enumerable: !0, @@ -1427,7 +1427,7 @@ function kT() { }; Object.defineProperties(console, { log: F({}, P, { - value: T + value: v }), info: F({}, P, { value: f @@ -1449,7 +1449,7 @@ function kT() { }) }); } - v < 0 && r("disabledDepth fell below zero. This is a bug in React. Please file an issue."); + g < 0 && r("disabledDepth fell below zero. This is a bug in React. Please file an issue."); } } var kl = x.ReactCurrentDispatcher, zl; @@ -1960,36 +1960,36 @@ function MT() { return r.now() - k; }; } - var U = 1073741823, w = -1, z = 250, D = 5e3, C = 1e4, j = U, E = [], g = [], A = 1, J = null, F = S, v = !1, T = !1, f = !1, O = typeof setTimeout == "function" ? setTimeout : null, _ = typeof clearTimeout == "function" ? clearTimeout : null, il = typeof setImmediate < "u" ? setImmediate : null; + var U = 1073741823, N = -1, z = 250, D = 5e3, C = 1e4, j = U, E = [], T = [], A = 1, J = null, F = S, g = !1, v = !1, f = !1, O = typeof setTimeout == "function" ? setTimeout : null, _ = typeof clearTimeout == "function" ? clearTimeout : null, il = typeof setImmediate < "u" ? setImmediate : null; typeof navigator < "u" && navigator.scheduling !== void 0 && navigator.scheduling.isInputPending !== void 0 && navigator.scheduling.isInputPending.bind(navigator.scheduling); function Zl(Il) { - for (var El = i(g); El !== null; ) { + for (var El = i(T); El !== null; ) { if (El.callback === null) - m(g); + m(T); else if (El.startTime <= Il) - m(g), El.sortIndex = El.expirationTime, G(E, El); + m(T), El.sortIndex = El.expirationTime, G(E, El); else return; - El = i(g); + El = i(T); } } function ol(Il) { - if (f = !1, Zl(Il), !T) + if (f = !1, Zl(Il), !v) if (i(E) !== null) - T = !0, Vc(Wl); + v = !0, Vc(Wl); else { - var El = i(g); + var El = i(T); El !== null && BZ(ol, El.startTime - Il); } } function Wl(Il, El) { - T = !1, f && (f = !1, Rb()), v = !0; + v = !1, f && (f = !1, Rb()), g = !0; var sZ = F; try { var YZ; if (!u) return ml(Il, El); } finally { - J = null, F = sZ, v = !1; + J = null, F = sZ, g = !1; } } function ml(Il, El) { @@ -2006,7 +2006,7 @@ function MT() { } if (J !== null) return !0; - var Zc = i(g); + var Zc = i(T); return Zc !== null && BZ(ol, Zc.startTime - sZ), !1; } function Rl(Il, El) { @@ -2070,7 +2070,7 @@ function MT() { var Zc; switch (Il) { case y: - Zc = w; + Zc = N; break; case h: Zc = z; @@ -2094,12 +2094,12 @@ function MT() { expirationTime: bb, sortIndex: -1 }; - return kZ > YZ ? (zZ.sortIndex = kZ, G(g, zZ), i(E) === null && zZ === i(g) && (f ? Rb() : f = !0, BZ(ol, kZ - YZ))) : (zZ.sortIndex = bb, G(E, zZ), !T && !v && (T = !0, Vc(Wl))), zZ; + return kZ > YZ ? (zZ.sortIndex = kZ, G(T, zZ), i(E) === null && zZ === i(T) && (f ? Rb() : f = !0, BZ(ol, kZ - YZ))) : (zZ.sortIndex = bb, G(E, zZ), !v && !g && (v = !0, Vc(Wl))), zZ; } function el() { } function xl() { - !T && !v && (T = !0, Vc(Wl)); + !v && !g && (v = !0, Vc(Wl)); } function hl() { return i(E); @@ -2213,7 +2213,7 @@ function UT() { L.unshift("Warning: " + b), Function.prototype.apply.call(console[c], console, L); } } - var n = 0, p = 1, y = 2, h = 3, S = 4, t = 5, W = 6, V = 7, R = 8, x = 9, r = 10, k = 11, U = 12, w = 13, z = 14, D = 15, C = 16, j = 17, E = 18, g = 19, A = 21, J = 22, F = 23, v = 24, T = 25, f = !0, O = !1, _ = !1, il = !1, Zl = !1, ol = !0, Wl = !1, ml = !0, Rl = !0, kl = !0, zl = !0, Vl = /* @__PURE__ */ new Set(), el = {}, xl = {}; + var n = 0, p = 1, y = 2, h = 3, S = 4, t = 5, W = 6, V = 7, R = 8, x = 9, r = 10, k = 11, U = 12, N = 13, z = 14, D = 15, C = 16, j = 17, E = 18, T = 19, A = 21, J = 22, F = 23, g = 24, v = 25, f = !0, O = !1, _ = !1, il = !1, Zl = !1, ol = !0, Wl = !1, ml = !0, Rl = !0, kl = !0, zl = !0, Vl = /* @__PURE__ */ new Set(), el = {}, xl = {}; function hl(c, b) { cl(c, b), cl(c + "Capture", b); } @@ -2743,12 +2743,12 @@ function UT() { c[K] = d; return; } - var N = e.attributeName, H = e.attributeNamespace; + var w = e.attributeName, H = e.attributeNamespace; if (d === null) - c.removeAttribute(N); + c.removeAttribute(w); else { var q = e.type, $; - q === BZ || q === Rb && d === !0 ? $ = "" : (hc(d, N), $ = "" + d, e.sanitizeURL && ks($.toString())), H ? c.setAttributeNS(H, N, $) : c.setAttribute(N, $); + q === BZ || q === Rb && d === !0 ? $ = "" : (hc(d, w), $ = "" + d, e.sanitizeURL && ks($.toString())), H ? c.setAttributeNS(H, w, $) : c.setAttribute(w, $); } } } @@ -2890,18 +2890,18 @@ function UT() { if (Gl && o && typeof Gl.stack == "string") { for (var K = Gl.stack.split(` `), Y = o.stack.split(` -`), N = K.length - 1, H = Y.length - 1; N >= 1 && H >= 0 && K[N] !== Y[H]; ) +`), w = K.length - 1, H = Y.length - 1; w >= 1 && H >= 0 && K[w] !== Y[H]; ) H--; - for (; N >= 1 && H >= 0; N--, H--) - if (K[N] !== Y[H]) { - if (N !== 1 || H !== 1) + for (; w >= 1 && H >= 0; w--, H--) + if (K[w] !== Y[H]) { + if (w !== 1 || H !== 1) do - if (N--, H--, H < 0 || K[N] !== Y[H]) { + if (w--, H--, H < 0 || K[w] !== Y[H]) { var q = ` -` + K[N].replace(" at new ", " at "); +` + K[w].replace(" at new ", " at "); return c.displayName && q.includes("") && (q = q.replace("", c.displayName)), typeof c == "function" && Vd.set(c, q), q; } - while (N >= 1 && H >= 0); + while (w >= 1 && H >= 0); break; } } @@ -2956,9 +2956,9 @@ function UT() { return Mb(c.type); case C: return Mb("Lazy"); - case w: + case N: return Mb("Suspense"); - case g: + case T: return Mb("SuspenseList"); case n: case y: @@ -3050,7 +3050,7 @@ Error generating stack: ` + o.message + ` function bZ(c) { var b = c.tag, d = c.type; switch (b) { - case v: + case g: return "Cache"; case x: var o = d; @@ -3082,11 +3082,11 @@ Error generating stack: ` + o.message + ` return "Profiler"; case A: return "Scope"; - case w: + case N: return "Suspense"; - case g: - return "SuspenseList"; case T: + return "SuspenseList"; + case v: return "TracingMarker"; case p: case n: @@ -3344,8 +3344,8 @@ Check the render method of \`` + c + "`." : ""; for (var L = d, X = {}, K = 0; K < L.length; K++) X["$" + L[K]] = !0; for (var Y = 0; Y < e.length; Y++) { - var N = X.hasOwnProperty("$" + e[Y].value); - e[Y].selected !== N && (e[Y].selected = N), N && o && (e[Y].defaultSelected = !0); + var w = X.hasOwnProperty("$" + e[Y].value); + e[Y].selected !== w && (e[Y].selected = w), w && o && (e[Y].defaultSelected = !0); } } else { for (var H = Ib(Au(d)), q = null, $ = 0; $ < e.length; $++) { @@ -4341,14 +4341,14 @@ Check the render method of \`` + c + "`." : ""; return m("Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.", typeof d), hb[b] = !0, !0; if (typeof d == "number" && isNaN(d)) return m("Received NaN for the `%s` attribute. If this is expected, cast the value to a string.", b), hb[b] = !0, !0; - var Y = pb(b), N = Y !== null && Y.type === cb; + var Y = pb(b), w = Y !== null && Y.type === cb; if (fn.hasOwnProperty(e)) { var H = fn[e]; if (H !== b) return m("Invalid DOM property `%s`. Did you mean `%s`?", b, H), hb[b] = !0, !0; - } else if (!N && b !== e) + } else if (!w && b !== e) return m("React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.", b, e), hb[b] = !0, !0; - return typeof d == "boolean" && bb(b, d, Y, !1) ? (d ? m('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.', d, b, b, d, b) : m('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.', d, b, b, d, b, b, b), hb[b] = !0, !0) : N ? !0 : bb(b, d, Y, !1) ? (hb[b] = !0, !1) : ((d === "false" || d === "true") && Y !== null && Y.type === BZ && (m("Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?", d, b, d === "false" ? "The browser will interpret it as a truthy value." : 'Although this works, it will not work as expected if you pass the string "false".', b, d), hb[b] = !0), !0); + return typeof d == "boolean" && bb(b, d, Y, !1) ? (d ? m('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.', d, b, b, d, b) : m('Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.', d, b, b, d, b, b, b), hb[b] = !0, !0) : w ? !0 : bb(b, d, Y, !1) ? (hb[b] = !0, !1) : ((d === "false" || d === "true") && Y !== null && Y.type === BZ && (m("Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?", d, b, d === "false" ? "The browser will interpret it as a truthy value." : 'Although this works, it will not work as expected if you pass the string "false".', b, d), hb[b] = !0), !0); }; } var jF = function(c, b, d) { @@ -4480,9 +4480,9 @@ Check the render method of \`` + c + "`." : ""; ry = !1; } function c5(c, b, d, o, e, L, X, K, Y) { - var N = Array.prototype.slice.call(arguments, 3); + var w = Array.prototype.slice.call(arguments, 3); try { - b.apply(d, N); + b.apply(d, w); } catch (H) { this.onError(H); } @@ -4490,7 +4490,7 @@ Check the render method of \`` + c + "`." : ""; var b5 = c5; if (typeof window < "u" && typeof window.dispatchEvent == "function" && typeof document < "u" && typeof document.createEvent == "function") { var Fy = document.createElement("react"); - b5 = function(b, d, o, e, L, X, K, Y, N) { + b5 = function(b, d, o, e, L, X, K, Y, w) { if (typeof document > "u" || document === null) throw new Error("The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous."); var H = document.createEvent("Event"), q = !1, $ = !0, sl = window.event, Gl = Object.getOwnPropertyDescriptor(window, "event"); @@ -4524,8 +4524,8 @@ Check the render method of \`` + c + "`." : ""; } function dN(c, b, d, o, e, L, X, K, Y) { if (wy.apply(this, arguments), jm) { - var N = zy(); - Bn || (Bn = !0, Ny = N); + var w = zy(); + Bn || (Bn = !0, Ny = w); } } function GN() { @@ -4647,7 +4647,7 @@ Check the render method of \`` + c + "`." : ""; return b.tag === h ? d : null; } function s5(c) { - if (c.tag === w) { + if (c.tag === N) { var b = c.memoizedState; if (b === null) { var d = c.alternate; @@ -4713,30 +4713,30 @@ Check the render method of \`` + c + "`." : ""; if (o.return !== e.return) o = L, e = X; else { - for (var N = !1, H = L.child; H; ) { + for (var w = !1, H = L.child; H; ) { if (H === o) { - N = !0, o = L, e = X; + w = !0, o = L, e = X; break; } if (H === e) { - N = !0, e = L, o = X; + w = !0, e = L, o = X; break; } H = H.sibling; } - if (!N) { + if (!w) { for (H = X.child; H; ) { if (H === o) { - N = !0, o = X, e = L; + w = !0, o = X, e = L; break; } if (H === e) { - N = !0, e = X, o = L; + w = !0, e = X, o = L; break; } H = H.sibling; } - if (!N) + if (!w) throw new Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue."); } } @@ -5164,8 +5164,8 @@ Check the render method of \`` + c + "`." : ""; Y !== Sl && (o = _o(Y)); } } else { - var N = d & ~e; - N !== Sl ? o = _o(N) : L !== Sl && (o = _o(L)); + var w = d & ~e; + w !== Sl ? o = _o(w) : L !== Sl && (o = _o(L)); } if (o === Sl) return Sl; @@ -5242,8 +5242,8 @@ Check the render method of \`` + c + "`." : ""; } function _N(c, b) { for (var d = c.pendingLanes, o = c.suspendedLanes, e = c.pingedLanes, L = c.expirationTimes, X = d; X > 0; ) { - var K = gG(X), Y = 1 << K, N = L[K]; - N === jZ ? ((Y & o) === Sl || (Y & e) !== Sl) && (L[K] = qN(Y, b)) : N <= b && (c.expiredLanes |= Y), X &= ~Y; + var K = gG(X), Y = 1 << K, w = L[K]; + w === jZ ? ((Y & o) === Sl || (Y & e) !== Sl) && (L[K] = qN(Y, b)) : w <= b && (c.expiredLanes |= Y), X &= ~Y; } } function lw(c) { @@ -5314,7 +5314,7 @@ Check the render method of \`` + c + "`." : ""; function x5(c, b) { return c & b; } - function x_(c) { + function R_(c) { return c; } function dw(c, b) { @@ -5571,8 +5571,8 @@ Check the render method of \`` + c + "`." : ""; return rd = se(rd, c, b, d, o, K), !0; } case "pointerover": { - var Y = e, N = Y.pointerId; - return be.set(N, se(be.get(N) || null, c, b, d, o, Y)), !0; + var Y = e, w = Y.pointerId; + return be.set(w, se(be.get(w) || null, c, b, d, o, Y)), !0; } case "gotpointercapture": { var H = e, q = H.pointerId; @@ -5587,7 +5587,7 @@ Check the render method of \`` + c + "`." : ""; var d = NG(b); if (d !== null) { var o = d.tag; - if (o === w) { + if (o === N) { var e = s5(d); if (e !== null) { c.blockedOn = e, F5(c.priority, function() { @@ -5742,14 +5742,14 @@ Check the render method of \`` + c + "`." : ""; L = null; else { var K = X.tag; - if (K === w) { + if (K === N) { var Y = s5(X); if (Y !== null) return Y; L = null; } else if (K === h) { - var N = X.stateNode; - if (Zp(N)) + var w = X.stateNode; + if (Zp(w)) return d5(X); L = null; } else X !== L && (L = null); @@ -5908,8 +5908,8 @@ Check the render method of \`` + c + "`." : ""; var Y = c[K]; Y ? this[K] = Y(L) : this[K] = L[K]; } - var N = L.defaultPrevented != null ? L.defaultPrevented : L.returnValue === !1; - return N ? this.isDefaultPrevented = dp : this.isDefaultPrevented = T5, this.isPropagationStopped = T5, this; + var w = L.defaultPrevented != null ? L.defaultPrevented : L.returnValue === !1; + return w ? this.isDefaultPrevented = dp : this.isDefaultPrevented = T5, this.isPropagationStopped = T5, this; } return GZ(b.prototype, { preventDefault: function() { @@ -6195,8 +6195,8 @@ Check the render method of \`` + c + "`." : ""; }), X) Y.data = X; else { - var N = $5(o); - N !== null && (Y.data = N); + var w = $5(o); + w !== null && (Y.data = w); } } } @@ -6369,15 +6369,15 @@ Check the render method of \`` + c + "`." : ""; !b || !b.controlled || c.type !== "number" || $l(c, "number", c.value); } function rz(c, b, d, o, e, L, X) { - var K = d ? oi(d) : window, Y, N; - if (Kz(K) ? Y = xz : _5(K) ? Z0 ? Y = Uz : (Y = kz, N = Yz) : Mz(K) && (Y = Iz), Y) { + var K = d ? oi(d) : window, Y, w; + if (Kz(K) ? Y = xz : _5(K) ? Z0 ? Y = Uz : (Y = kz, w = Yz) : Mz(K) && (Y = Iz), Y) { var H = Y(b, d); if (H) { l0(c, H, o, e); return; } } - N && N(b, K, d), b === "focusout" && Cz(K); + w && w(b, K, d), b === "focusout" && Cz(K); } function Fz() { cl("onMouseEnter", ["mouseout", "mouseover"]), cl("onMouseLeave", ["mouseout", "mouseover"]), cl("onPointerEnter", ["pointerout", "pointerover"]), cl("onPointerLeave", ["pointerout", "pointerover"]); @@ -6385,8 +6385,8 @@ Check the render method of \`` + c + "`." : ""; function Nz(c, b, d, o, e, L, X) { var K = b === "mouseover" || b === "pointerover", Y = b === "mouseout" || b === "pointerout"; if (K && !$F(o)) { - var N = o.relatedTarget || o.fromElement; - if (N && (fG(N) || Ie(N))) + var w = o.relatedTarget || o.fromElement; + if (w && (fG(w) || Ie(w))) return; } if (!(!Y && !K)) { @@ -6477,14 +6477,14 @@ Check the render method of \`` + c + "`." : ""; return Hz(c, e, L, X, K); } function Hz(c, b, d, o, e) { - var L = 0, X = -1, K = -1, Y = 0, N = 0, H = c, q = null; + var L = 0, X = -1, K = -1, Y = 0, w = 0, H = c, q = null; l: for (; ; ) { for (var $ = null; H === b && (d === 0 || H.nodeType === rs) && (X = L + d), H === o && (e === 0 || H.nodeType === rs) && (K = L + e), H.nodeType === rs && (L += H.nodeValue.length), ($ = H.firstChild) !== null; ) q = H, H = $; for (; ; ) { if (H === c) break l; - if (q === b && ++Y === d && (X = L), q === o && ++N === e && (K = L), ($ = H.nextSibling) !== null) + if (q === b && ++Y === d && (X = L), q === o && ++w === e && (K = L), ($ = H.nextSibling) !== null) break; H = q, q = H.parentNode; } @@ -6503,12 +6503,12 @@ Check the render method of \`` + c + "`." : ""; var Y = K; K = X, X = Y; } - var N = s0(c, X), H = s0(c, K); - if (N && H) { - if (e.rangeCount === 1 && e.anchorNode === N.node && e.anchorOffset === N.offset && e.focusNode === H.node && e.focusOffset === H.offset) + var w = s0(c, X), H = s0(c, K); + if (w && H) { + if (e.rangeCount === 1 && e.anchorNode === w.node && e.anchorOffset === w.offset && e.focusNode === H.node && e.focusOffset === H.offset) return; var q = d.createRange(); - q.setStart(N.node, N.offset), e.removeAllRanges(), X > K ? (e.addRange(q), e.extend(H.node, H.offset)) : (q.setEnd(H.node, H.offset), e.addRange(q)); + q.setStart(w.node, w.offset), e.removeAllRanges(), X > K ? (e.addRange(q), e.extend(H.node, H.offset)) : (q.setEnd(H.node, H.offset), e.addRange(q)); } } } @@ -6680,7 +6680,7 @@ Check the render method of \`` + c + "`." : ""; function qz(c, b, d, o, e, L, X) { var K = L0.get(b); if (K !== void 0) { - var Y = xS, N = b; + var Y = xS, w = b; switch (b) { case "keypress": if (sp(o) === 0) @@ -6690,10 +6690,10 @@ Check the render method of \`` + c + "`." : ""; Y = _w; break; case "focusin": - N = "focus", Y = kS; + w = "focus", Y = kS; break; case "focusout": - N = "blur", Y = kS; + w = "blur", Y = kS; break; case "beforeblur": case "afterblur": @@ -6766,7 +6766,7 @@ Check the render method of \`` + c + "`." : ""; // This is a breaking change that can wait until React 18. b === "scroll", $ = cJ(d, K, o.type, H, q); if ($.length > 0) { - var sl = new Y(K, N, null, o, e); + var sl = new Y(K, w, null, o, e); c.push({ event: sl, listeners: $ @@ -6796,8 +6796,8 @@ Check the render method of \`` + c + "`." : ""; y0(c, Y, K), o = X; } else - for (var N = 0; N < b.length; N++) { - var H = b[N], q = H.instance, $ = H.currentTarget, sl = H.listener; + for (var w = 0; w < b.length; w++) { + var H = b[w], q = H.instance, $ = H.currentTarget, sl = H.listener; if (q !== o && c.isPropagationStopped()) return; y0(c, sl, $), o = q; @@ -6852,8 +6852,8 @@ Check the render method of \`` + c + "`." : ""; return; var Y = K.tag; if (Y === h || Y === S) { - var N = K.stateNode.containerInfo; - if (X0(N, X)) + var w = K.stateNode.containerInfo; + if (X0(w, X)) break; if (Y === S) for (var H = K.return; H !== null; ) { @@ -6865,8 +6865,8 @@ Check the render method of \`` + c + "`." : ""; } H = H.return; } - for (; N !== null; ) { - var sl = fG(N); + for (; w !== null; ) { + var sl = fG(w); if (sl === null) return; var Gl = sl.tag; @@ -6874,7 +6874,7 @@ Check the render method of \`` + c + "`." : ""; K = L = sl; continue l; } - N = N.parentNode; + w = w.parentNode; } } K = K.return; @@ -6893,15 +6893,15 @@ Check the render method of \`` + c + "`." : ""; }; } function cJ(c, b, d, o, e, L) { - for (var X = b !== null ? b + "Capture" : null, K = o ? X : b, Y = [], N = c, H = null; N !== null; ) { - var q = N, $ = q.stateNode, sl = q.tag; + for (var X = b !== null ? b + "Capture" : null, K = o ? X : b, Y = [], w = c, H = null; w !== null; ) { + var q = w, $ = q.stateNode, sl = q.tag; if (sl === t && $ !== null && (H = $, K !== null)) { - var Gl = Eo(N, K); - Gl != null && Y.push(te(N, Gl, H)); + var Gl = Eo(w, K); + Gl != null && Y.push(te(w, Gl, H)); } if (e) break; - N = N.return; + w = w.return; } return Y; } @@ -6909,8 +6909,8 @@ Check the render method of \`` + c + "`." : ""; for (var d = b + "Capture", o = [], e = c; e !== null; ) { var L = e, X = L.stateNode, K = L.tag; if (K === t && X !== null) { - var Y = X, N = Eo(e, d); - N != null && o.unshift(te(e, N, Y)); + var Y = X, w = Eo(e, d); + w != null && o.unshift(te(e, w, Y)); var H = Eo(e, b); H != null && o.push(te(e, H, Y)); } @@ -6944,8 +6944,8 @@ Check the render method of \`` + c + "`." : ""; } function K0(c, b, d, o, e) { for (var L = b._reactName, X = [], K = d; K !== null && K !== o; ) { - var Y = K, N = Y.alternate, H = Y.stateNode, q = Y.tag; - if (N !== null && N === o) + var Y = K, w = Y.alternate, H = Y.stateNode, q = Y.tag; + if (w !== null && w === o) break; if (q === t && H !== null) { var $ = H; @@ -7054,8 +7054,8 @@ Check the render method of \`` + c + "`." : ""; if (e = IG(c, b), !e && c !== c.toLowerCase() && m("<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.", c), c === "script") { var Y = L.createElement("div"); Y.innerHTML = "