@field/cascade 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +168 -0
- package/ARCHITECTURE.md +137 -0
- package/DESIGN.md +161 -0
- package/LICENSE +21 -0
- package/README.md +229 -0
- package/dist/assets/CodeEditor-DR7u0q7p.css +1 -0
- package/dist/assets/CodeEditor-DoaNEUaM.js +641 -0
- package/dist/assets/CodePanel-B0_2XJ-t.js +2 -0
- package/dist/assets/CodePanel-IT1secyI.css +1 -0
- package/dist/assets/CustomNodeDialog-026lzecD.js +1 -0
- package/dist/assets/CustomNodeDialog-JGYnWY6m.css +1 -0
- package/dist/assets/ExportDialog-DOq0flMV.css +1 -0
- package/dist/assets/ExportDialog-DWN4nhXI.js +358 -0
- package/dist/assets/ProjectSettings-BzT164Yx.js +2 -0
- package/dist/assets/ProjectSettings-DdO9xoQz.css +1 -0
- package/dist/assets/SettingsDialog-CeK7ytpY.css +1 -0
- package/dist/assets/SettingsDialog-DmHb1V0r.js +1 -0
- package/dist/assets/VersionHistoryDialog-CWNmHQ-P.css +1 -0
- package/dist/assets/VersionHistoryDialog-hH6VsXLX.js +3 -0
- package/dist/assets/abap-08VXUWAP.js +1 -0
- package/dist/assets/apex-BWPQTe0t.js +1 -0
- package/dist/assets/azcli-Bc_sGQ0U.js +1 -0
- package/dist/assets/bat-i0X4ZdIN.js +1 -0
- package/dist/assets/bicep-B5-_aFwp.js +2 -0
- package/dist/assets/cameligo-DMUM7wLl.js +1 -0
- package/dist/assets/cascade.jpg +0 -0
- package/dist/assets/clojure-Cm7r79vr.js +1 -0
- package/dist/assets/codicon-Brq4_Ui5.ttf +0 -0
- package/dist/assets/coffee-Ba7i2nA0.js +1 -0
- package/dist/assets/core-Bji4aZUU.js +965 -0
- package/dist/assets/cpp-C7h46wYY.js +1 -0
- package/dist/assets/csharp-BKxtCVv1.js +1 -0
- package/dist/assets/csp-bTuwJoIa.js +1 -0
- package/dist/assets/css-DIMkf-bt.js +3 -0
- package/dist/assets/css.worker-B3ciXF_0.js +93 -0
- package/dist/assets/cssMode-B6Z_Q1Kh.js +1 -0
- package/dist/assets/cypher-CVaqCwHa.js +1 -0
- package/dist/assets/dart-onAF5SnQ.js +1 -0
- package/dist/assets/dockerfile-DZFCIeNp.js +1 -0
- package/dist/assets/ecl-D05T4iGw.js +1 -0
- package/dist/assets/editor-1FQrmyyI.css +1 -0
- package/dist/assets/editor.api-jMoW_43X.js +847 -0
- package/dist/assets/editor.worker-q-txB4vs.js +30 -0
- package/dist/assets/elixir-6RTg0lbw.js +1 -0
- package/dist/assets/flow9-C5_-GSwl.js +1 -0
- package/dist/assets/freemarker2-DvvPV6m5.js +3 -0
- package/dist/assets/fsharp-C8Ef5oNN.js +1 -0
- package/dist/assets/geo-CXmCtzMM.js +2 -0
- package/dist/assets/go-C-y9NEjX.js +1 -0
- package/dist/assets/graphql-fmXr3nnJ.js +1 -0
- package/dist/assets/handlebars-B8rfuSIa.js +1 -0
- package/dist/assets/hcl-CpzslTdj.js +1 -0
- package/dist/assets/html-DyHm6JCp.js +1 -0
- package/dist/assets/html.worker-C93Ht9o9.js +506 -0
- package/dist/assets/htmlMode-E9XLWE5u.js +1 -0
- package/dist/assets/image-BUcQC7PG.js +2076 -0
- package/dist/assets/index-BXYXSdgh.js +224 -0
- package/dist/assets/index-CrNke7SW.css +1 -0
- package/dist/assets/index-client-DN_FvjN8.js +1 -0
- package/dist/assets/ini-sBoK_t0W.js +1 -0
- package/dist/assets/java-BEtHBSE6.js +1 -0
- package/dist/assets/javascript-C_bM5PCN.js +1 -0
- package/dist/assets/json.worker-B2V3pomh.js +62 -0
- package/dist/assets/jsonMode-BdyVS7G4.js +7 -0
- package/dist/assets/julia-Bri6UV-V.js +1 -0
- package/dist/assets/kotlin-BOotOW0E.js +1 -0
- package/dist/assets/legacy-DIu3XRwl.js +2 -0
- package/dist/assets/less-B9JPFI3C.js +2 -0
- package/dist/assets/lexon-CfSJPG6W.js +1 -0
- package/dist/assets/liquid-CDkn3spA.js +1 -0
- package/dist/assets/lspLanguageFeatures-AB5DMAsr.js +4 -0
- package/dist/assets/lua-CsQS60Ue.js +1 -0
- package/dist/assets/m3-D-oSqn_W.js +1 -0
- package/dist/assets/markdown-Cimd5fb3.js +1 -0
- package/dist/assets/mdx-BvH_NjDN.js +1 -0
- package/dist/assets/mips-CIPQ_RoX.js +1 -0
- package/dist/assets/msdax-DauUninz.js +1 -0
- package/dist/assets/mysql-SOo6toE5.js +1 -0
- package/dist/assets/nodeTypeUtils-CweA3NHd.js +1 -0
- package/dist/assets/objective-c-FvmIjYaQ.js +1 -0
- package/dist/assets/pascal-DrH0SRf2.js +1 -0
- package/dist/assets/pascaligo-D-ptJ9y-.js +1 -0
- package/dist/assets/perl-oz_6vUea.js +1 -0
- package/dist/assets/pgsql-DTj74zXo.js +1 -0
- package/dist/assets/php-nr791fC2.js +1 -0
- package/dist/assets/pla-CopQ2nXW.js +1 -0
- package/dist/assets/postiats-43DmfD33.js +1 -0
- package/dist/assets/powerquery-D3hlyOfw.js +1 -0
- package/dist/assets/powershell-DmHpPYUd.js +1 -0
- package/dist/assets/projectSettingsApi-C1WvIwfP.js +1 -0
- package/dist/assets/protobuf-C531GsRP.js +2 -0
- package/dist/assets/pug-Z5eAx3Zn.js +1 -0
- package/dist/assets/python-B7uii4fi.js +1 -0
- package/dist/assets/qsharp-DkqhCAOL.js +1 -0
- package/dist/assets/quill-DjZ69wL_.js +121 -0
- package/dist/assets/r-BwWrilGY.js +1 -0
- package/dist/assets/razor-Z48fWdJc.js +1 -0
- package/dist/assets/redis-ClamHrr6.js +1 -0
- package/dist/assets/redshift-DT7zqm-g.js +1 -0
- package/dist/assets/restructuredtext-BYgofb2h.js +1 -0
- package/dist/assets/ruby-DezsRK8O.js +1 -0
- package/dist/assets/rust-DdL9SqIa.js +1 -0
- package/dist/assets/sb-CcwsVR0C.js +1 -0
- package/dist/assets/scala-DHpiXF5c.js +1 -0
- package/dist/assets/scheme-BeGwcela.js +1 -0
- package/dist/assets/scss-gp-XZpBa.js +3 -0
- package/dist/assets/shell-CC2rA5mh.js +1 -0
- package/dist/assets/solidity-BEEn4gHE.js +1 -0
- package/dist/assets/sophia-CRfGWb83.js +1 -0
- package/dist/assets/sparql-D_Lu-MrJ.js +1 -0
- package/dist/assets/sql-NEE52Syq.js +1 -0
- package/dist/assets/st-DbInun42.js +1 -0
- package/dist/assets/swift-Bxkupp3x.js +1 -0
- package/dist/assets/systemverilog-Bz4Y3fRF.js +1 -0
- package/dist/assets/tcl-DISqw1ZD.js +1 -0
- package/dist/assets/ts.worker-D7T1-Ig5.js +67738 -0
- package/dist/assets/tsMode-BDgacVG4.js +11 -0
- package/dist/assets/twig-De2hgUGE.js +1 -0
- package/dist/assets/typescript-Derb6Oqa.js +1 -0
- package/dist/assets/typespec-B8J7ngcE.js +1 -0
- package/dist/assets/vb-DV3o63ZY.js +1 -0
- package/dist/assets/wgsl-DpFanUEy.js +298 -0
- package/dist/assets/workers-BtoMX_pm.js +1 -0
- package/dist/assets/xml-B1CaFSrG.js +1 -0
- package/dist/assets/yaml-HmIeA0KH.js +1 -0
- package/dist/cli/index.js +11377 -0
- package/dist/cli/index.js.map +7 -0
- package/dist/cli/runtime/io.ts +445 -0
- package/dist/cli/runtime/net.ts +19 -0
- package/dist/cli/runtime/shell.ts +46 -0
- package/dist/cli/runtime/stage.ts +132 -0
- package/dist/contracts/capabilities.d.ts +109 -0
- package/dist/contracts/capabilities.d.ts.map +1 -0
- package/dist/contracts/capabilities.js +11 -0
- package/dist/contracts/capabilities.js.map +1 -0
- package/dist/contracts/color.d.ts +67 -0
- package/dist/contracts/color.d.ts.map +1 -0
- package/dist/contracts/color.js +83 -0
- package/dist/contracts/color.js.map +1 -0
- package/dist/contracts/definition.d.ts +118 -0
- package/dist/contracts/definition.d.ts.map +1 -0
- package/dist/contracts/definition.js +2 -0
- package/dist/contracts/definition.js.map +1 -0
- package/dist/contracts/document.d.ts +50 -0
- package/dist/contracts/document.d.ts.map +1 -0
- package/dist/contracts/document.js +2 -0
- package/dist/contracts/document.js.map +1 -0
- package/dist/contracts/geometry.d.ts +301 -0
- package/dist/contracts/geometry.d.ts.map +1 -0
- package/dist/contracts/geometry.js +604 -0
- package/dist/contracts/geometry.js.map +1 -0
- package/dist/contracts/index.d.ts +8 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +8 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/schema.d.ts +6 -0
- package/dist/contracts/schema.d.ts.map +1 -0
- package/dist/contracts/schema.js +85 -0
- package/dist/contracts/schema.js.map +1 -0
- package/dist/contracts/validate.d.ts +13 -0
- package/dist/contracts/validate.d.ts.map +1 -0
- package/dist/contracts/validate.js +202 -0
- package/dist/contracts/validate.js.map +1 -0
- package/dist/contracts/values.d.ts +100 -0
- package/dist/contracts/values.d.ts.map +1 -0
- package/dist/contracts/values.js +59 -0
- package/dist/contracts/values.js.map +1 -0
- package/dist/graphs/default-orig.cascade +128 -0
- package/dist/graphs/default.cascade +21 -0
- package/dist/index.html +19 -0
- package/dist/runtime/browser.d.ts +3 -0
- package/dist/runtime/browser.d.ts.map +1 -0
- package/dist/runtime/browser.js +12 -0
- package/dist/runtime/browser.js.map +1 -0
- package/dist/runtime/builtins/core/index.d.ts +9 -0
- package/dist/runtime/builtins/core/index.d.ts.map +1 -0
- package/dist/runtime/builtins/core/index.js +21 -0
- package/dist/runtime/builtins/core/index.js.map +1 -0
- package/dist/runtime/builtins/core/random.d.ts +66 -0
- package/dist/runtime/builtins/core/random.d.ts.map +1 -0
- package/dist/runtime/builtins/core/random.js +46 -0
- package/dist/runtime/builtins/core/random.js.map +1 -0
- package/dist/runtime/builtins/core/remap.d.ts +105 -0
- package/dist/runtime/builtins/core/remap.d.ts.map +1 -0
- package/dist/runtime/builtins/core/remap.js +43 -0
- package/dist/runtime/builtins/core/remap.js.map +1 -0
- package/dist/runtime/builtins/core/routing.d.ts +117 -0
- package/dist/runtime/builtins/core/routing.d.ts.map +1 -0
- package/dist/runtime/builtins/core/routing.js +114 -0
- package/dist/runtime/builtins/core/routing.js.map +1 -0
- package/dist/runtime/builtins/core/structural.d.ts +86 -0
- package/dist/runtime/builtins/core/structural.d.ts.map +1 -0
- package/dist/runtime/builtins/core/structural.js +63 -0
- package/dist/runtime/builtins/core/structural.js.map +1 -0
- package/dist/runtime/builtins/geo/copyToPoints.d.ts +58 -0
- package/dist/runtime/builtins/geo/copyToPoints.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/copyToPoints.js +35 -0
- package/dist/runtime/builtins/geo/copyToPoints.js.map +1 -0
- package/dist/runtime/builtins/geo/definitions.d.ts +526 -0
- package/dist/runtime/builtins/geo/definitions.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/definitions.js +182 -0
- package/dist/runtime/builtins/geo/definitions.js.map +1 -0
- package/dist/runtime/builtins/geo/generators.d.ts +94 -0
- package/dist/runtime/builtins/geo/generators.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/generators.js +41 -0
- package/dist/runtime/builtins/geo/generators.js.map +1 -0
- package/dist/runtime/builtins/geo/index.d.ts +23 -0
- package/dist/runtime/builtins/geo/index.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/index.js +35 -0
- package/dist/runtime/builtins/geo/index.js.map +1 -0
- package/dist/runtime/builtins/geo/merge.d.ts +40 -0
- package/dist/runtime/builtins/geo/merge.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/merge.js +24 -0
- package/dist/runtime/builtins/geo/merge.js.map +1 -0
- package/dist/runtime/builtins/geo/namespace.d.ts +15 -0
- package/dist/runtime/builtins/geo/namespace.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/namespace.js +17 -0
- package/dist/runtime/builtins/geo/namespace.js.map +1 -0
- package/dist/runtime/builtins/geo/svgExport.d.ts +130 -0
- package/dist/runtime/builtins/geo/svgExport.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/svgExport.js +50 -0
- package/dist/runtime/builtins/geo/svgExport.js.map +1 -0
- package/dist/runtime/builtins/geo/transform.d.ts +60 -0
- package/dist/runtime/builtins/geo/transform.d.ts.map +1 -0
- package/dist/runtime/builtins/geo/transform.js +32 -0
- package/dist/runtime/builtins/geo/transform.js.map +1 -0
- package/dist/runtime/builtins/index.d.ts +9 -0
- package/dist/runtime/builtins/index.d.ts.map +1 -0
- package/dist/runtime/builtins/index.js +16 -0
- package/dist/runtime/builtins/index.js.map +1 -0
- package/dist/runtime/definition/architecture.d.ts +8 -0
- package/dist/runtime/definition/architecture.d.ts.map +1 -0
- package/dist/runtime/definition/architecture.js +112 -0
- package/dist/runtime/definition/architecture.js.map +1 -0
- package/dist/runtime/definition/extract.d.ts +12 -0
- package/dist/runtime/definition/extract.d.ts.map +1 -0
- package/dist/runtime/definition/extract.js +151 -0
- package/dist/runtime/definition/extract.js.map +1 -0
- package/dist/runtime/error.d.ts +8 -0
- package/dist/runtime/error.d.ts.map +1 -0
- package/dist/runtime/error.js +11 -0
- package/dist/runtime/error.js.map +1 -0
- package/dist/runtime/geometry/attributes.d.ts +65 -0
- package/dist/runtime/geometry/attributes.d.ts.map +1 -0
- package/dist/runtime/geometry/attributes.js +201 -0
- package/dist/runtime/geometry/attributes.js.map +1 -0
- package/dist/runtime/geometry/builder.d.ts +57 -0
- package/dist/runtime/geometry/builder.d.ts.map +1 -0
- package/dist/runtime/geometry/builder.js +153 -0
- package/dist/runtime/geometry/builder.js.map +1 -0
- package/dist/runtime/geometry/copy.d.ts +36 -0
- package/dist/runtime/geometry/copy.d.ts.map +1 -0
- package/dist/runtime/geometry/copy.js +68 -0
- package/dist/runtime/geometry/copy.js.map +1 -0
- package/dist/runtime/geometry/generate.d.ts +43 -0
- package/dist/runtime/geometry/generate.d.ts.map +1 -0
- package/dist/runtime/geometry/generate.js +76 -0
- package/dist/runtime/geometry/generate.js.map +1 -0
- package/dist/runtime/geometry/groups.d.ts +18 -0
- package/dist/runtime/geometry/groups.d.ts.map +1 -0
- package/dist/runtime/geometry/groups.js +69 -0
- package/dist/runtime/geometry/groups.js.map +1 -0
- package/dist/runtime/geometry/index.d.ts +23 -0
- package/dist/runtime/geometry/index.d.ts.map +1 -0
- package/dist/runtime/geometry/index.js +23 -0
- package/dist/runtime/geometry/index.js.map +1 -0
- package/dist/runtime/geometry/matrix.d.ts +26 -0
- package/dist/runtime/geometry/matrix.d.ts.map +1 -0
- package/dist/runtime/geometry/matrix.js +27 -0
- package/dist/runtime/geometry/matrix.js.map +1 -0
- package/dist/runtime/geometry/merge.d.ts +33 -0
- package/dist/runtime/geometry/merge.d.ts.map +1 -0
- package/dist/runtime/geometry/merge.js +185 -0
- package/dist/runtime/geometry/merge.js.map +1 -0
- package/dist/runtime/geometry/primitives.d.ts +41 -0
- package/dist/runtime/geometry/primitives.d.ts.map +1 -0
- package/dist/runtime/geometry/primitives.js +131 -0
- package/dist/runtime/geometry/primitives.js.map +1 -0
- package/dist/runtime/geometry/promote.d.ts +44 -0
- package/dist/runtime/geometry/promote.d.ts.map +1 -0
- package/dist/runtime/geometry/promote.js +203 -0
- package/dist/runtime/geometry/promote.js.map +1 -0
- package/dist/runtime/geometry/resample.d.ts +29 -0
- package/dist/runtime/geometry/resample.d.ts.map +1 -0
- package/dist/runtime/geometry/resample.js +165 -0
- package/dist/runtime/geometry/resample.js.map +1 -0
- package/dist/runtime/geometry/svg.d.ts +91 -0
- package/dist/runtime/geometry/svg.d.ts.map +1 -0
- package/dist/runtime/geometry/svg.js +216 -0
- package/dist/runtime/geometry/svg.js.map +1 -0
- package/dist/runtime/geometry/transform.d.ts +18 -0
- package/dist/runtime/geometry/transform.d.ts.map +1 -0
- package/dist/runtime/geometry/transform.js +56 -0
- package/dist/runtime/geometry/transform.js.map +1 -0
- package/dist/runtime/index.d.ts +5 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +4 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/node.d.ts +4 -0
- package/dist/runtime/node.d.ts.map +1 -0
- package/dist/runtime/node.js +12 -0
- package/dist/runtime/node.js.map +1 -0
- package/dist/runtime/runtime.d.ts +3 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +1198 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/types.d.ts +241 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/shell.d.ts +8 -0
- package/dist/shell.js +54 -0
- package/dist/shell.js.map +7 -0
- package/dist/stage.d.ts +7 -0
- package/dist/stage.js +84 -0
- package/dist/stage.js.map +7 -0
- package/dist/studio/panel.d.ts +48 -0
- package/doc/PROJECT_AUTHORING.md +360 -0
- package/package.json +126 -0
package/README.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Cascade
|
|
2
|
+
|
|
3
|
+
Cascade is a TypeScript node-graph runtime and optional visual workspace for generative design. It is built for projects that move between interactive web work, WebGL, print, motion, sound, Python, and external services without rebuilding the surrounding application infrastructure each time.
|
|
4
|
+
|
|
5
|
+
Created by Marcus Wendt at [FIELD.IO](https://www.field.io).
|
|
6
|
+
|
|
7
|
+
## What Cascade provides
|
|
8
|
+
|
|
9
|
+
- A typed, inspectable graph model with lazy execution and explicit triggers.
|
|
10
|
+
- Deterministic custom-node definitions that tools can inspect without running user code.
|
|
11
|
+
- The same runtime in Studio, a Node service, or a UI-free browser application.
|
|
12
|
+
- Project-native `.cascade` files, assets, presets, and Git-backed version history.
|
|
13
|
+
- Nested subnets with persistent hierarchy.
|
|
14
|
+
- Explicit browser and server capabilities for WebGL, files, media, Python, and allowlisted shell commands.
|
|
15
|
+
- A Svelte Studio with an infinite canvas, Inspector, Viewer, and project workbench.
|
|
16
|
+
|
|
17
|
+
Cascade separates the generative algorithm from the platform. Custom nodes describe stages of a pipeline; the runtime schedules and validates them; hosts supply environment-specific capabilities; Studio is only one possible frontend.
|
|
18
|
+
|
|
19
|
+
## Develop Cascade
|
|
20
|
+
|
|
21
|
+
Cascade development requires Node.js 22.13 or newer. The repository uses
|
|
22
|
+
TypeScript 6 and intentionally does not target the TypeScript 7 preview.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install
|
|
26
|
+
npm run dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Open `http://localhost:5173`.
|
|
30
|
+
|
|
31
|
+
Useful checks:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm run check
|
|
35
|
+
npm run test:run
|
|
36
|
+
npm --prefix server run build
|
|
37
|
+
npm run build
|
|
38
|
+
npm run build:cli
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Create a project
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cascade new my-artwork
|
|
45
|
+
cd ~/Documents/Cascade/my-artwork
|
|
46
|
+
cascade .
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Studio binds to loopback by default. To use a Cascade workstation over a
|
|
50
|
+
trusted VPN or LAN, opt into the bind address and exact browser hostname:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cascade . --host KURO --port 3030
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Then open `http://KURO:3030`. Cascade uses a specific non-loopback `--host` as
|
|
57
|
+
both the bind target and allowed browser hostname. Use repeatable
|
|
58
|
+
`--trusted-host` only when the bind address and browser hostname differ.
|
|
59
|
+
Wildcard remote binds, unknown options, and invalid ports fail immediately.
|
|
60
|
+
|
|
61
|
+
A project is an ordinary directory or Git repository:
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
my-artwork/
|
|
65
|
+
├── cascade.json # optional host policy and settings
|
|
66
|
+
├── index.cascade # default graph
|
|
67
|
+
├── nodes/
|
|
68
|
+
│ └── Multiply/
|
|
69
|
+
│ └── index.ts # project.Multiply
|
|
70
|
+
├── assets/
|
|
71
|
+
├── package.json
|
|
72
|
+
└── tsconfig.json
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Run or validate a graph without Studio:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
cascade validate index.cascade
|
|
79
|
+
cascade run index.cascade
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
See [Project authoring](doc/PROJECT_AUTHORING.md) for project layout, nodes, `.cascade` files, capabilities, and headless embedding.
|
|
83
|
+
|
|
84
|
+
Projects may also provide trusted, dockable Studio panels as plain TypeScript modules under `panels/`. These extensions remain outside graph documents and are never loaded by headless execution.
|
|
85
|
+
|
|
86
|
+
## Deterministic custom nodes
|
|
87
|
+
|
|
88
|
+
A node exports a literal interface and a typed computation:
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import type { NodeDefinition, NodeExecutionContext } from 'cascade/contracts';
|
|
92
|
+
|
|
93
|
+
export const definition = {
|
|
94
|
+
apiVersion: 1,
|
|
95
|
+
label: 'Multiply',
|
|
96
|
+
runsOn: 'portable',
|
|
97
|
+
inputs: {
|
|
98
|
+
value: { kind: 'data', type: 'float', default: 0 },
|
|
99
|
+
factor: { kind: 'data', type: 'float', default: 2 }
|
|
100
|
+
},
|
|
101
|
+
outputs: {
|
|
102
|
+
result: { kind: 'data', type: 'float' }
|
|
103
|
+
}
|
|
104
|
+
} as const satisfies NodeDefinition;
|
|
105
|
+
|
|
106
|
+
export function execute(context: NodeExecutionContext<typeof definition>) {
|
|
107
|
+
context.outputs.result.set(context.inputs.value * context.inputs.factor);
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Cascade extracts `definition` from the TypeScript syntax tree. It does not import the module or run setup code to discover ports. This makes node interfaces deterministic for the compiler, Studio, CI, and code agents.
|
|
112
|
+
|
|
113
|
+
`cascade check` also enforces the deterministic node boundary: no module-level runtime state, ambient globals or storage, top-level effects, dynamic imports, or imports from sibling node implementations. Project data belongs on typed wires. Props configure behavior, and declared capabilities provide the small set of host services a node is allowed to use. Caches may accelerate a wired computation, but cannot act as an unwired input.
|
|
114
|
+
|
|
115
|
+
Every node declares where it runs:
|
|
116
|
+
|
|
117
|
+
- `portable` — usable by Node and browser hosts.
|
|
118
|
+
- `browser` — browser-only values or WebGL.
|
|
119
|
+
- `server` — filesystem, Python, shell, or other backend work.
|
|
120
|
+
|
|
121
|
+
Capabilities are declared in the definition and injected by the host. User node modules are trusted project code, not a security sandbox.
|
|
122
|
+
|
|
123
|
+
A portable node may have equivalent browser and server executors behind the
|
|
124
|
+
same static definition. The runtime asks the registration for the concrete
|
|
125
|
+
host's executor, so the graph stays portable and contains no backend selector.
|
|
126
|
+
This is the intended pattern for media transforms such as crop or resize; use
|
|
127
|
+
shared parity tests to keep their outputs and metadata aligned.
|
|
128
|
+
|
|
129
|
+
Existing dynamic nodes continue through Cascade's current Studio/CLI compatibility engine while projects migrate. The headless runtime accepts deterministic definitions only; malformed definitions never fall back to dynamic execution.
|
|
130
|
+
|
|
131
|
+
Provider integrations are project code, not Cascade infrastructure. A project
|
|
132
|
+
can call a remote service from a Studio/browser node, invoke Python or an
|
|
133
|
+
allowlisted executable on the server, or provide a capability from an embedding
|
|
134
|
+
host. Results cross the graph as ordinary typed values such as `ImageRef` and
|
|
135
|
+
`AssetRef`. See [Project authoring](doc/PROJECT_AUTHORING.md#integrate-external-services-and-ai).
|
|
136
|
+
|
|
137
|
+
## Headless runtime
|
|
138
|
+
|
|
139
|
+
Applications can use the graph engine without loading Svelte or Studio:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
import { createRuntime } from 'cascade/runtime';
|
|
143
|
+
import { createNodeRuntimeHost } from 'cascade/runtime/node';
|
|
144
|
+
|
|
145
|
+
const host = createNodeRuntimeHost({ modules, assets });
|
|
146
|
+
const runtime = createRuntime({ host });
|
|
147
|
+
const graph = await runtime.load(document);
|
|
148
|
+
|
|
149
|
+
await graph.setGraphInput('value', 21);
|
|
150
|
+
await graph.run({
|
|
151
|
+
target: { kind: 'output', nodeId: 'graph-output', outputName: 'output' }
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
console.log(graph.getGraphOutput('result')); // 42
|
|
155
|
+
await graph.dispose();
|
|
156
|
+
await runtime.dispose();
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Here `graph-input` and `graph-output` are typed `cascade.core.Input` and
|
|
160
|
+
`cascade.core.Output` nodes named `value` and `result`. They give an
|
|
161
|
+
embedded application a stable public boundary instead of requiring it to know
|
|
162
|
+
internal node IDs.
|
|
163
|
+
|
|
164
|
+
The runtime natively provides `Subnet`, `Input`, `Output`, `Switch`, `Merge`,
|
|
165
|
+
`Select`, seeded `Random`, and scalar `Remap`. These reserved core modules need
|
|
166
|
+
no project registration and run identically in Node and browser hosts. The
|
|
167
|
+
runtime also supports inspection, presets, triggers, targeted or full runs,
|
|
168
|
+
cancellation, event subscriptions, output retrieval, and disposal. Hosts
|
|
169
|
+
decide which capabilities exist; Cascade never silently moves a stage between
|
|
170
|
+
browser and server.
|
|
171
|
+
|
|
172
|
+
The same registration path exposes the initial `cascade.geo.*` library in
|
|
173
|
+
Studio and headless hosts: `Rectangle`, `Circle`, `Transform`, `Merge`,
|
|
174
|
+
`CopyToPoints`, and `SvgExport`. Their definitions, ports, and executors are
|
|
175
|
+
owned by the runtime; Studio adapts those definitions instead of maintaining a
|
|
176
|
+
second set of node algorithms.
|
|
177
|
+
|
|
178
|
+
## Repository map
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
packages/contracts/ dependency-free public types and schemas
|
|
182
|
+
packages/runtime/ environment-neutral graph runtime and adapters
|
|
183
|
+
src/editor/ optional Svelte Studio
|
|
184
|
+
src/nodes/ current built-in and legacy node implementation
|
|
185
|
+
src/engine/ current compatibility services
|
|
186
|
+
server/ project-scoped Node host and transports
|
|
187
|
+
scripts/ package build and release verification tooling
|
|
188
|
+
tests/ behavior, workflow, security, and performance tests
|
|
189
|
+
spec/ accepted feature specifications
|
|
190
|
+
doc/ authoring guides and implementation plans
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The root `cascade` package is the distribution and CLI owner. The two internal workspaces define architectural boundaries; they are not independently published until independent versioning or external consumption requires it.
|
|
194
|
+
|
|
195
|
+
Studio builds with Vite 8 and the Svelte plugin 7. It uses Dockview 8 through
|
|
196
|
+
the public `dockview` package. Monaco and its native editor/TypeScript workers
|
|
197
|
+
load only when a code panel opens. All rendered Markdown passes through one
|
|
198
|
+
Marked and DOMPurify boundary before entering the DOM.
|
|
199
|
+
|
|
200
|
+
## Subnets and `.cascade` files
|
|
201
|
+
|
|
202
|
+
Graph documents keep a flat list of nodes and annotations. Nested elements carry a `parent` ID, and their positions are relative to that subnet. IDs remain globally unique, so connections keep the same endpoint format across hierarchy levels.
|
|
203
|
+
|
|
204
|
+
Existing files without `parent` fields remain root-level graphs. Invalid parent references warn and fall back to the root rather than dropping authored elements.
|
|
205
|
+
|
|
206
|
+
## Security
|
|
207
|
+
|
|
208
|
+
Shell execution is server-only and allowlisted in the project’s `cascade.json`. Cascade passes a fixed executable and argument array to `spawn(..., { shell: false })`; it does not accept shell command strings or interpolation. Working directories are project-confined, input/output is bounded, dangerous request-time environment overrides are rejected, and cancellation terminates the process tree. Commands inherit the server environment, then apply project-configured and explicitly allowed request overrides.
|
|
209
|
+
|
|
210
|
+
Every project API requires an exact allowed Host. Present, hostile or null
|
|
211
|
+
Origins are rejected; same-origin requests may omit `Origin`, as browsers do
|
|
212
|
+
for ordinary GETs. Cascade never enables wildcard CORS for project data.
|
|
213
|
+
Filesystem paths are checked lexically and through real paths. The one explicit
|
|
214
|
+
secondary root is a project-owned `shared/` link used to discover reusable
|
|
215
|
+
panels.
|
|
216
|
+
|
|
217
|
+
Browser shell and process routes additionally require process-lifetime
|
|
218
|
+
capability tokens. They are available on loopback, or in an explicitly enabled
|
|
219
|
+
trusted-host session; an untrusted remote bind does not expose them.
|
|
220
|
+
|
|
221
|
+
## More documentation
|
|
222
|
+
|
|
223
|
+
- [Agent guide](AGENTS.md)
|
|
224
|
+
- [Project authoring](doc/PROJECT_AUTHORING.md)
|
|
225
|
+
- [Design source of truth](DESIGN.md)
|
|
226
|
+
- [Architecture](ARCHITECTURE.md)
|
|
227
|
+
- [Subnet and shell specification](spec/CASCADE_SUBNET_AND_SHELL_SPEC.md)
|
|
228
|
+
|
|
229
|
+
Inspired by Nodes.io, SideFX Houdini, TouchDesigner, Maya, Cinder, openFrameworks, and Processing.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.monaco-editor .selection-anchor{background-color:#007acc;width:2px!important}.monaco-editor .bracket-match{box-sizing:border-box;background-color:var(--vscode-editorBracketMatch-background);border:1px solid var(--vscode-editorBracketMatch-border)}.inline-editor-progress-decoration{width:1em;height:1em;display:inline-block}.inline-progress-widget{justify-content:center;align-items:center;display:flex!important}.inline-progress-widget .icon{font-size:80%!important}.inline-progress-widget:hover .icon{animation:none;font-size:90%!important}.inline-progress-widget:hover .icon:before{content:var(--vscode-icon-x-content);font-family:var(--vscode-icon-x-font-family)}.monaco-editor .monaco-editor-overlaymessage{z-index:10000;padding-bottom:8px}.monaco-editor .monaco-editor-overlaymessage.below{z-index:10000;padding-top:8px;padding-bottom:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:.15s ease-out fadeIn}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:.1s ease-out fadeOut}.monaco-editor .monaco-editor-overlaymessage .message{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-inputValidation-infoBorder);border-radius:3px;padding:2px 4px}.monaco-editor .monaco-editor-overlaymessage .message p{margin-block:0}.monaco-editor .monaco-editor-overlaymessage .message a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-editor-overlaymessage .message a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor.hc-black .monaco-editor-overlaymessage .message,.monaco-editor.hc-light .monaco-editor-overlaymessage .message{border-width:2px}.monaco-editor .monaco-editor-overlaymessage .anchor{z-index:1000;border:8px solid #0000;position:absolute;left:2px;width:0!important;height:0!important}.monaco-editor .monaco-editor-overlaymessage .anchor.top{border-bottom-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage .anchor.below{border-top-color:var(--vscode-inputValidation-infoBorder)}.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top,.monaco-editor .monaco-editor-overlaymessage.below .anchor.below{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}.action-widget{z-index:40;border-radius:var(--vscode-cornerRadius-large);background-color:var(--vscode-menu-background);width:100%;min-width:100px;max-width:80vw;color:var(--vscode-menu-foreground);box-shadow:var(--vscode-shadow-lg);padding:4px;font-size:13px;display:block;border:1px solid var(--vscode-editorHoverWidget-border)!important}.context-view-block{cursor:initial;z-index:-1;width:100%;height:100%;position:fixed;top:0;left:0}.context-view-pointerBlock{cursor:initial;z-index:2;width:100%;height:100%;position:fixed;top:0;left:0}.action-widget .monaco-list{-webkit-user-select:none;user-select:none;border:0!important}.action-widget .monaco-list:focus:before{outline:0!important}.action-widget .monaco-list .monaco-scrollable-element{overflow:visible}.action-widget .monaco-list .monaco-list-row{white-space:nowrap;cursor:pointer;touch-action:none;border-radius:var(--vscode-cornerRadius-medium);padding:0 12px 0 6px}.action-widget .monaco-list .monaco-list-row.action.focused:not(.option-disabled){color:var(--vscode-list-hoverForeground);outline:1px solid var(--vscode-menu-selectionBorder,transparent);outline-offset:-2px;background-color:var(--vscode-list-hoverBackground)!important}.action-widget .monaco-list-row.group-header{font-size:11px;font-weight:500;color:var(--vscode-descriptionForeground)!important}.action-widget .monaco-list-row.group-header:not(:first-of-type){margin-top:2px}.action-widget .monaco-scrollable-element .monaco-list-rows .monaco-list-row.separator{border-top:1px solid var(--vscode-editorHoverWidget-border);color:var(--vscode-descriptionForeground);cursor:default;-webkit-user-select:none;user-select:none;pointer-events:none;border-radius:0;width:100%;margin:4px 0;font-size:12px}.action-widget .monaco-scrollable-element .monaco-list-rows .monaco-list-row.separator:hover,.action-widget .monaco-scrollable-element .monaco-list-rows .monaco-list-row.separator.focused{border-radius:0;outline:0 solid;background-color:#0000!important}.action-widget .monaco-list-row.separator:first-of-type{border-top:none;margin-top:0}.action-widget .monaco-list-row.separator>span:not(:empty){align-items:center;height:100%;padding-left:10px;display:flex}.action-widget .monaco-list .group-header,.action-widget .monaco-list .option-disabled,.action-widget .monaco-list .option-disabled:before,.action-widget .monaco-list .option-disabled .focused,.action-widget .monaco-list .option-disabled .focused:before{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;cursor:default!important;background-color:#0000!important;outline:0 solid!important}.action-widget .monaco-list-row.action{align-items:center;gap:6px;display:flex}.action-widget .monaco-list-row.action .codicon{font-size:12px}.action-widget .monaco-list-row.action .action-list-item-toolbar .codicon{font-size:16px}.action-widget .actionList.compact-icons .monaco-list-row.action .codicon{font-size:var(--vscode-codiconFontSize-compact,12px)}.action-widget .actionList.compact-icons .monaco-list-row.action .action-list-item-toolbar .codicon,.action-widget .actionList.compact-icons .monaco-list-row.action .action-list-submenu-indicator.codicon{font-size:var(--vscode-codiconFontSize,16px)}.action-widget .monaco-list-row.action.option-disabled,.action-widget .monaco-list:focus .monaco-list-row.focused.action.option-disabled,.action-widget .monaco-list-row.action.option-disabled .codicon,.action-widget .monaco-list:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused).option-disabled{color:var(--vscode-disabledForeground)}.action-widget .monaco-list-row.action:not(.option-disabled) .codicon{color:inherit}.action-widget .monaco-list-row.action .title{text-overflow:ellipsis;flex:1;overflow:hidden}.action-widget .monaco-list-row.action .detail{width:100%;color:var(--vscode-descriptionForeground);opacity:.8;text-overflow:ellipsis;white-space:nowrap;order:99;padding-left:18px;font-size:11px;line-height:14px;overflow:hidden}.action-widget .monaco-list-row.action .action-item-badge{background-color:var(--vscode-badge-background);color:var(--vscode-badge-foreground);border-radius:10px;flex-shrink:0;padding:0 6px;font-size:11px;line-height:18px}.action-widget .monaco-list-row.action .monaco-keybinding>.monaco-keybinding-key{background-color:var(--vscode-keybindingLabel-background);color:var(--vscode-keybindingLabel-foreground);border-style:solid;border-width:1px;border-color:var(--vscode-keybindingLabel-border);border-bottom-color:var(--vscode-keybindingLabel-bottomBorder);box-shadow:inset 0 -1px 0 var(--vscode-widget-shadow);border-radius:3px}.action-widget .action-widget-action-bar{background-color:var(--vscode-menu-background);border-top:1px solid var(--vscode-editorHoverWidget-border);margin-top:4px}.action-widget .action-widget-action-bar:before{content:"";width:100%;display:block}.action-widget .action-widget-action-bar .actions-container{width:auto;padding:2px 8px 0 26px}.action-widget-action-bar .action-label{color:var(--vscode-textLink-activeForeground);pointer-events:all;padding:0;font-size:12px;line-height:22px}.action-widget-action-bar .action-item{pointer-events:none;margin-right:16px}.action-widget-action-bar .action-label:hover{background-color:#0000!important}.monaco-action-bar .actions-container.highlight-toggled .action-label.checked{background:var(--vscode-actionBar-toggledBackground)!important}.action-widget .monaco-list .monaco-list-row .description{color:var(--vscode-descriptionForeground);margin-left:.5em;font-size:12px}.action-widget .monaco-list .monaco-list-row .description a{color:var(--vscode-textLink-foreground)}.action-widget .monaco-list .monaco-list-row .description a:hover,.action-widget .monaco-list .monaco-list-row .description a:active{color:var(--vscode-textLink-activeForeground)}.action-widget .monaco-list-row.action .group-title{color:var(--vscode-descriptionForeground);flex-shrink:0;margin-left:.5em;margin-right:6px;font-size:12px}.action-widget .monaco-list .monaco-list-row.action{&:has(.detail:not([style*="display: none"])){flex-wrap:wrap;align-content:center;padding-right:6px;& .title{line-height:14px}}}.action-widget .inline-description .monaco-list-row.action{gap:0;& .title{flex:0 auto;min-width:0;margin-left:6px}& .description{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}& .group-title{margin-left:auto}& .action-list-item-toolbar{margin-left:4px;margin-right:10px}& .action-list-submenu-indicator{margin-left:auto;margin-right:10px}}.action-widget .monaco-list-row.action .action-list-item-toolbar{display:none}.action-widget .monaco-list-row.focused.action.has-toolbar .action-list-item-toolbar,.action-widget .monaco-list-row:hover.action.has-toolbar .action-list-item-toolbar{display:flex}.action-widget .monaco-list-row .action-list-item-toolbar .monaco-action-bar:not(.vertical) .action-label:not(.disabled):hover{background-color:var(--vscode-toolbar-hoverBackground)}.action-widget-delegate-label{align-items:center;gap:4px;font-size:12px;display:flex}.action-widget .action-list-filter{padding:2px 2px 4px}.action-widget .action-list-filter-row{align-items:center;gap:4px;padding-right:10px;display:flex}.action-widget .action-list-filter:first-child{border-bottom:none}.action-widget .action-list-filter:last-child{border-top:1px solid var(--vscode-editorHoverWidget-border)}.action-widget .action-list-filter-input{box-sizing:border-box;border:1px solid var(--vscode-input-border,transparent);background-color:var(--vscode-input-background);width:100%;color:var(--vscode-input-foreground);border-radius:3px;outline:none;flex:1;padding:4px 8px}.action-widget .action-list-filter-input:focus{border-color:var(--vscode-focusBorder)}.action-widget .action-list-filter-input::placeholder{color:var(--vscode-input-placeholderForeground)}.action-widget .action-list-filter-actions .action-label{border-radius:3px;padding:3px}.action-widget .action-list-filter-actions .action-label:hover{background-color:var(--vscode-toolbar-hoverBackground)}.action-widget .action-list-filter-label{color:var(--vscode-descriptionForeground);flex-shrink:0;margin-right:2px;font-size:12px}.action-widget .action-list-footer{color:var(--vscode-descriptionForeground);border-top:1px solid var(--vscode-editorHoverWidget-border);margin-top:4px;padding:4px 10px 2px 6px;font-size:11px}.action-widget .action-list-header{color:var(--vscode-foreground);background-color:var(--vscode-chat-requestBubbleBackground);border-radius:var(--vscode-cornerRadius-medium);align-items:flex-start;gap:6px;margin-bottom:2px;padding:6px 12px 6px 6px;font-size:12px;line-height:16px;display:flex}.action-widget:has(.action-list-header){min-width:160px}.action-widget .action-list-header .action-list-header-icon{text-align:center;width:12px;color:var(--vscode-descriptionForeground);flex-shrink:0;line-height:16px;font-size:12px!important}.action-widget .action-list-header .action-list-header-text{flex:1;font-size:11px}.action-widget .actionList{position:relative}.action-widget .action-list-submenu-indicator{border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.action-widget .action-list-submenu-indicator.has-submenu{opacity:.6}.action-widget .monaco-list-row.action .action-list-submenu-indicator.codicon{font-size:16px;display:flex}.action-list-submenu-panel{background-color:var(--vscode-menu-background);color:var(--vscode-menu-foreground);border:1px solid var(--vscode-menu-border,var(--vscode-editorHoverWidget-border));box-shadow:0 2px 8px var(--vscode-widget-shadow);z-index:50;border-radius:5px;outline:none;width:max-content}.action-list-submenu-hover-header{word-wrap:break-word;-webkit-user-select:text;user-select:text;max-width:300px;padding:4px 8px;font-size:12px;line-height:1.4em}.action-list-submenu-hover-header a{color:var(--vscode-textLink-foreground)}.action-list-submenu-hover-header a:hover,.action-list-submenu-hover-header a:active{color:var(--vscode-textLink-activeForeground)}.action-list-submenu-hover-header.has-submenu{border-bottom:1px solid var(--vscode-menu-separatorBackground,var(--vscode-editorWidget-border))}.action-list-submenu-hover-header>p{margin-left:0;margin-right:0}.action-list-submenu-hover-header>p:first-child{margin-top:0}.action-list-submenu-hover-header>p:last-child{margin-bottom:0}.post-edit-widget{box-shadow:var(--vscode-shadow-lg);border:1px solid var(--vscode-widget-border,transparent);color:var(--vscode-button-foreground);background-color:var(--vscode-button-background);border-radius:4px;overflow:hidden}.post-edit-widget .monaco-button{border:none;border-radius:0;padding:2px}.post-edit-widget .monaco-button:hover{background-color:var(--vscode-button-hoverBackground)!important}.post-edit-widget .monaco-button .codicon{margin:0}@font-face{font-family:codicon;font-display:block;src:url(/assets/codicon-Brq4_Ui5.ttf)format("truetype")}.codicon[class*=codicon-]{text-rendering:auto;text-align:center;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;user-select:none;font:16px/1 codicon;text-decoration:none;display:inline-block}.codicon-wrench-subaction{opacity:.5}@keyframes codicon-spin{to{transform:rotate(360deg)}}.codicon-sync.codicon-modifier-spin,.codicon-loading.codicon-modifier-spin,.codicon-gear.codicon-modifier-spin,.codicon-notebook-state-executing.codicon-modifier-spin,.codicon-loading,.codicon-tree-item-loading:before{transform-origin:50%;animation:1.5s steps(30,end) infinite codicon-spin}.codicon-modifier-disabled{opacity:.4}.monaco-editor .codicon.codicon-symbol-array,.monaco-workbench .codicon-colored.codicon.codicon-symbol-array{color:var(--vscode-symbolIcon-arrayForeground)}.monaco-editor .codicon.codicon-symbol-boolean,.monaco-workbench .codicon-colored.codicon.codicon-symbol-boolean{color:var(--vscode-symbolIcon-booleanForeground)}.monaco-editor .codicon.codicon-symbol-class,.monaco-workbench .codicon-colored.codicon.codicon-symbol-class{color:var(--vscode-symbolIcon-classForeground)}.monaco-editor .codicon.codicon-symbol-method,.monaco-workbench .codicon-colored.codicon.codicon-symbol-method{color:var(--vscode-symbolIcon-methodForeground)}.monaco-editor .codicon.codicon-symbol-color,.monaco-workbench .codicon-colored.codicon.codicon-symbol-color{color:var(--vscode-symbolIcon-colorForeground)}.monaco-editor .codicon.codicon-symbol-constant,.monaco-workbench .codicon-colored.codicon.codicon-symbol-constant{color:var(--vscode-symbolIcon-constantForeground)}.monaco-editor .codicon.codicon-symbol-constructor,.monaco-workbench .codicon-colored.codicon.codicon-symbol-constructor{color:var(--vscode-symbolIcon-constructorForeground)}.monaco-editor .codicon.codicon-symbol-value,.monaco-workbench .codicon-colored.codicon.codicon-symbol-value,.monaco-editor .codicon.codicon-symbol-enum,.monaco-workbench .codicon-colored.codicon.codicon-symbol-enum{color:var(--vscode-symbolIcon-enumeratorForeground)}.monaco-editor .codicon.codicon-symbol-enum-member,.monaco-workbench .codicon-colored.codicon.codicon-symbol-enum-member{color:var(--vscode-symbolIcon-enumeratorMemberForeground)}.monaco-editor .codicon.codicon-symbol-event,.monaco-workbench .codicon-colored.codicon.codicon-symbol-event{color:var(--vscode-symbolIcon-eventForeground)}.monaco-editor .codicon.codicon-symbol-field,.monaco-workbench .codicon-colored.codicon.codicon-symbol-field{color:var(--vscode-symbolIcon-fieldForeground)}.monaco-editor .codicon.codicon-symbol-file,.monaco-workbench .codicon-colored.codicon.codicon-symbol-file{color:var(--vscode-symbolIcon-fileForeground)}.monaco-editor .codicon.codicon-symbol-folder,.monaco-workbench .codicon-colored.codicon.codicon-symbol-folder{color:var(--vscode-symbolIcon-folderForeground)}.monaco-editor .codicon.codicon-symbol-function,.monaco-workbench .codicon-colored.codicon.codicon-symbol-function{color:var(--vscode-symbolIcon-functionForeground)}.monaco-editor .codicon.codicon-symbol-interface,.monaco-workbench .codicon-colored.codicon.codicon-symbol-interface{color:var(--vscode-symbolIcon-interfaceForeground)}.monaco-editor .codicon.codicon-symbol-key,.monaco-workbench .codicon-colored.codicon.codicon-symbol-key{color:var(--vscode-symbolIcon-keyForeground)}.monaco-editor .codicon.codicon-symbol-keyword,.monaco-workbench .codicon-colored.codicon.codicon-symbol-keyword{color:var(--vscode-symbolIcon-keywordForeground)}.monaco-editor .codicon.codicon-symbol-module,.monaco-workbench .codicon-colored.codicon.codicon-symbol-module{color:var(--vscode-symbolIcon-moduleForeground)}.monaco-editor .codicon.codicon-symbol-namespace,.monaco-workbench .codicon-colored.codicon.codicon-symbol-namespace{color:var(--vscode-symbolIcon-namespaceForeground)}.monaco-editor .codicon.codicon-symbol-null,.monaco-workbench .codicon-colored.codicon.codicon-symbol-null{color:var(--vscode-symbolIcon-nullForeground)}.monaco-editor .codicon.codicon-symbol-number,.monaco-workbench .codicon-colored.codicon.codicon-symbol-number{color:var(--vscode-symbolIcon-numberForeground)}.monaco-editor .codicon.codicon-symbol-object,.monaco-workbench .codicon-colored.codicon.codicon-symbol-object{color:var(--vscode-symbolIcon-objectForeground)}.monaco-editor .codicon.codicon-symbol-operator,.monaco-workbench .codicon-colored.codicon.codicon-symbol-operator{color:var(--vscode-symbolIcon-operatorForeground)}.monaco-editor .codicon.codicon-symbol-package,.monaco-workbench .codicon-colored.codicon.codicon-symbol-package{color:var(--vscode-symbolIcon-packageForeground)}.monaco-editor .codicon.codicon-symbol-property,.monaco-workbench .codicon-colored.codicon.codicon-symbol-property{color:var(--vscode-symbolIcon-propertyForeground)}.monaco-editor .codicon.codicon-symbol-reference,.monaco-workbench .codicon-colored.codicon.codicon-symbol-reference{color:var(--vscode-symbolIcon-referenceForeground)}.monaco-editor .codicon.codicon-symbol-snippet,.monaco-workbench .codicon-colored.codicon.codicon-symbol-snippet{color:var(--vscode-symbolIcon-snippetForeground)}.monaco-editor .codicon.codicon-symbol-string,.monaco-workbench .codicon-colored.codicon.codicon-symbol-string{color:var(--vscode-symbolIcon-stringForeground)}.monaco-editor .codicon.codicon-symbol-struct,.monaco-workbench .codicon-colored.codicon.codicon-symbol-struct{color:var(--vscode-symbolIcon-structForeground)}.monaco-editor .codicon.codicon-symbol-text,.monaco-workbench .codicon-colored.codicon.codicon-symbol-text{color:var(--vscode-symbolIcon-textForeground)}.monaco-editor .codicon.codicon-symbol-type-parameter,.monaco-workbench .codicon-colored.codicon.codicon-symbol-type-parameter{color:var(--vscode-symbolIcon-typeParameterForeground)}.monaco-editor .codicon.codicon-symbol-unit,.monaco-workbench .codicon-colored.codicon.codicon-symbol-unit{color:var(--vscode-symbolIcon-unitForeground)}.monaco-editor .codicon.codicon-symbol-variable,.monaco-workbench .codicon-colored.codicon.codicon-symbol-variable{color:var(--vscode-symbolIcon-variableForeground)}.monaco-editor .lightBulbWidget{justify-content:center;align-items:center;display:flex}.monaco-editor .lightBulbWidget:hover{cursor:pointer}.monaco-editor .lightBulbWidget.codicon-light-bulb,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle{color:var(--vscode-editorLightBulb-foreground)}.monaco-editor .lightBulbWidget.codicon-lightbulb-autofix,.monaco-editor .lightBulbWidget.codicon-lightbulb-sparkle-autofix{color:var(--vscode-editorLightBulbAutoFix-foreground,var(--vscode-editorLightBulb-foreground))}.monaco-editor .lightBulbWidget.codicon-sparkle-filled{color:var(--vscode-editorLightBulbAi-foreground,var(--vscode-icon-foreground))}.monaco-editor .lightBulbWidget:before{z-index:2;position:relative}.monaco-editor .lightBulbWidget:after{content:"";opacity:.3;z-index:1;width:100%;height:100%;display:block;position:absolute;top:0;left:0}.monaco-editor .glyph-margin-widgets .cgmr[class*=codicon-gutter-lightbulb]{cursor:pointer;display:block}.monaco-editor .glyph-margin-widgets .cgmr.codicon-gutter-lightbulb,.monaco-editor .glyph-margin-widgets .cgmr.codicon-gutter-lightbulb-sparkle{color:var(--vscode-editorLightBulb-foreground)}.monaco-editor .glyph-margin-widgets .cgmr.codicon-gutter-lightbulb-auto-fix,.monaco-editor .glyph-margin-widgets .cgmr.codicon-gutter-lightbulb-aifix-auto-fix{color:var(--vscode-editorLightBulbAutoFix-foreground,var(--vscode-editorLightBulb-foreground))}.monaco-editor .glyph-margin-widgets .cgmr.codicon-gutter-lightbulb-sparkle-filled{color:var(--vscode-editorLightBulbAi-foreground,var(--vscode-icon-foreground))}.monaco-editor .codelens-decoration{text-overflow:ellipsis;white-space:nowrap;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize);padding-right:calc(var(--vscode-editorCodeLens-fontSize)*.5);font-feature-settings:var(--vscode-editorCodeLens-fontFeatureSettings);font-family:var(--vscode-editorCodeLens-fontFamily), var(--vscode-editorCodeLens-fontFamilyDefault);align-items:center;overflow:hidden;display:inline-flex!important}.monaco-editor .codelens-decoration>span,.monaco-editor .codelens-decoration>a{-webkit-user-select:none;user-select:none;white-space:nowrap;vertical-align:sub;align-items:center;display:inline-flex}.monaco-editor .codelens-decoration>a{text-decoration:none}.monaco-editor .codelens-decoration>a:hover{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration>a:hover .codicon{color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor .codelens-decoration .codicon[class*=codicon-]{vertical-align:middle;color:var(--vscode-editorCodeLens-foreground);line-height:var(--vscode-editorCodeLens-lineHeight);font-size:var(--vscode-editorCodeLens-fontSize);color:currentColor!important}.monaco-editor .codelens-decoration>a:hover .codicon:before{cursor:pointer}@keyframes fadein{0%{opacity:0}to{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:.1s linear fadein}.monaco-editor .inlineSuggestionsHints{padding:4px;& .warningMessage p{margin:0}}.monaco-editor .inlineSuggestionsHints.withBorder{z-index:39;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.monaco-editor .inlineSuggestionsHints a,.monaco-editor .inlineSuggestionsHints a:hover{color:var(--vscode-foreground)!important}.monaco-editor .inlineSuggestionsHints .keybinding{opacity:.6;align-items:center;margin-left:4px;display:flex}.monaco-editor .inlineSuggestionsHints .keybinding .monaco-keybinding-key{padding:2px 3px;font-size:8px}.monaco-editor .inlineSuggestionsHints .availableSuggestionCount a{justify-content:center;min-width:19px;display:flex}.monaco-editor .inlineSuggestionStatusBarItemLabel{align-items:center;margin-right:2px}.monaco-editor .find-widget{z-index:35;box-sizing:border-box;height:34px;box-shadow:var(--vscode-shadow-lg);color:var(--vscode-editorWidget-foreground);border:1px solid var(--vscode-widget-border);border-radius:var(--vscode-cornerRadius-large);background-color:var(--vscode-editorWidget-background);margin-top:4px;padding:0 4px 0 9px;line-height:19px;transition:transform .2s linear;position:absolute;overflow:hidden;transform:translateY(calc(-100% - 10px))}.monaco-reduce-motion .monaco-editor .find-widget{transition:transform linear}.monaco-editor .find-widget textarea{margin:0}.monaco-editor .find-widget.hiddenEditor{display:none}.monaco-editor .find-widget.replaceToggled>.replace-part{display:flex}.monaco-editor .find-widget.visible{transform:translateY(0)}.monaco-editor .find-widget .monaco-inputbox.synthetic-focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px;outline-color:var(--vscode-focusBorder)}.monaco-editor .find-widget .monaco-inputbox .input{background-color:#0000;min-height:0}.monaco-editor .find-widget .monaco-findInput .input{font-size:13px}.monaco-editor .find-widget>.find-part,.monaco-editor .find-widget>.replace-part{margin:3px 25px 0 17px;font-size:12px;display:flex}.monaco-editor .find-widget>.find-part .monaco-inputbox,.monaco-editor .find-widget>.replace-part .monaco-inputbox{min-height:25px}.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-right:22px}.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.find-part .monaco-inputbox>.ibwrapper>.mirror,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.input,.monaco-editor .find-widget>.replace-part .monaco-inputbox>.ibwrapper>.mirror{padding-top:2px;padding-bottom:2px}.monaco-editor .find-widget>.find-part .find-actions,.monaco-editor .find-widget>.replace-part .replace-actions{align-items:center;height:25px;display:flex}.monaco-editor .find-widget .monaco-findInput{vertical-align:middle;flex:1;display:flex}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element{width:100%}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical{opacity:0}.monaco-editor .find-widget .matchesCount{flex:initial;vertical-align:middle;box-sizing:border-box;text-align:center;height:25px;margin:0 0 0 3px;padding:2px 0 0 2px;line-height:23px;display:flex}.monaco-editor .find-widget .button{flex:initial;cursor:pointer;background-position:50%;background-repeat:no-repeat;border-radius:5px;justify-content:center;align-items:center;width:16px;height:16px;margin-left:3px;padding:3px;display:flex}.monaco-editor .find-widget .codicon-find-selection{border-radius:5px;width:22px;height:22px;padding:3px}.monaco-editor .find-widget .button.left{margin:4px 0 4px 5px}.monaco-editor .find-widget .button.wide{width:auto;padding:1px 6px;top:-1px}.monaco-editor .find-widget .button.toggle{border-radius:var(--vscode-cornerRadius-small);box-sizing:border-box;width:18px;height:-webkit-fill-available;position:absolute;top:0;left:0}.monaco-editor .find-widget .button.toggle.disabled{display:none}.monaco-editor .find-widget .disabled{color:var(--vscode-disabledForeground);cursor:default}.monaco-editor .find-widget>.replace-part{display:none}.monaco-editor .find-widget>.replace-part>.monaco-findInput{vertical-align:middle;flex:none;display:flex;position:relative}.monaco-editor .find-widget>.replace-part>.monaco-findInput>.controls{position:absolute;top:3px;right:2px}.monaco-editor .find-widget.reduced-find-widget .matchesCount{display:none}.monaco-editor .find-widget.narrow-find-widget{max-width:257px!important}.monaco-editor .find-widget.collapsed-find-widget{max-width:170px!important}.monaco-editor .find-widget.collapsed-find-widget .button.previous,.monaco-editor .find-widget.collapsed-find-widget .button.next,.monaco-editor .find-widget.collapsed-find-widget .button.replace,.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,.monaco-editor .find-widget.collapsed-find-widget>.find-part .monaco-findInput .controls{display:none}.monaco-editor .find-widget.no-results .matchesCount{color:var(--vscode-errorForeground)}.monaco-editor .findMatch{animation-duration:0;background-color:var(--vscode-editor-findMatchHighlightBackground);animation-name:inherit!important}.monaco-editor .currentFindMatch{background-color:var(--vscode-editor-findMatchBackground);border:2px solid var(--vscode-editor-findMatchBorder);box-sizing:border-box;padding:1px}.monaco-editor .findScope{background-color:var(--vscode-editor-findRangeHighlightBackground)}.monaco-editor .find-widget .monaco-sash{background-color:var(--vscode-editorWidget-resizeBorder,var(--vscode-editorWidget-border));left:0!important}.monaco-editor.hc-black .find-widget .button:before{position:relative;top:1px;left:2px}.monaco-editor .find-widget .button:not(.disabled):hover,.monaco-editor .find-widget .codicon-find-selection:hover{background-color:var(--vscode-toolbar-hoverBackground)!important}.monaco-editor.currentFindMatch{background-color:var(--vscode-editor-findMatchBackground)}.monaco-editor.findScope{background-color:var(--vscode-editor-findRangeHighlightBackground)}.monaco-editor.findMatch{background-color:var(--vscode-editorWidget-background)}.monaco-editor .find-widget>.button.codicon-widget-close{position:absolute;top:5px;right:4px}.colorpicker-widget{-webkit-user-select:none;user-select:none;height:190px}.colorpicker-color-decoration,.hc-light .colorpicker-color-decoration{box-sizing:border-box;cursor:pointer;border:.1em solid #000;width:.8em;height:.8em;margin:.1em .2em 0;line-height:.8em;display:inline-block}.hc-black .colorpicker-color-decoration,.vs-dark .colorpicker-color-decoration{border:.1em solid #eee}.colorpicker-header{height:24px;image-rendering:pixelated;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=) 0 0/9px 9px;display:flex;position:relative}.colorpicker-header .picked-color{cursor:pointer;color:#fff;white-space:nowrap;flex:1;justify-content:center;align-items:center;width:240px;line-height:24px;display:flex;overflow:hidden}.colorpicker-header .picked-color .picked-color-presentation{white-space:nowrap;margin-left:5px;margin-right:5px}.colorpicker-header .picked-color .codicon{color:inherit;font-size:14px}.colorpicker-header .picked-color.light{color:#000}.colorpicker-header .original-color{width:74px;z-index:inherit;cursor:pointer}.standalone-colorpicker{color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header.standalone-colorpicker{border-bottom:none}.colorpicker-header .close-button{cursor:pointer;background-color:var(--vscode-editorHoverWidget-background);border-left:1px solid var(--vscode-editorHoverWidget-border)}.colorpicker-header .close-button-inner-div{text-align:center;width:100%;height:100%}.colorpicker-header .close-button-inner-div:hover{background-color:var(--vscode-toolbar-hoverBackground)}.colorpicker-header .close-icon{padding:3px}.colorpicker-body{padding:8px;display:flex;position:relative}.colorpicker-body .saturation-wrap{flex:1;min-width:220px;height:150px;position:relative;overflow:hidden}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{border:1px solid #fff;border-radius:100%;width:9px;height:9px;margin:-5px 0 0 -5px;position:absolute;box-shadow:0 0 2px #000c}.colorpicker-body .strip{width:25px;height:150px}.colorpicker-body .standalone-strip{width:25px;height:122px}.colorpicker-body .hue-strip{cursor:grab;background:linear-gradient(red 0%,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);margin-left:8px;position:relative}.colorpicker-body .opacity-strip{cursor:grab;image-rendering:pixelated;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=) 0 0/9px 9px;margin-left:8px;position:relative}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{box-sizing:border-box;border:1px solid #ffffffb5;width:calc(100% + 4px);height:4px;position:absolute;top:0;left:-2px;box-shadow:0 0 1px #000000d9}.colorpicker-body .strip .overlay{pointer-events:none;height:150px}.colorpicker-body .standalone-strip .standalone-overlay{pointer-events:none;height:122px}.standalone-colorpicker-body{border:1px solid #0000;border-bottom:1px solid var(--vscode-editorHoverWidget-border);display:block;overflow:hidden}.colorpicker-body .insert-button{background:var(--vscode-button-background);width:58px;height:20px;color:var(--vscode-button-foreground);cursor:pointer;border:none;border-radius:2px;padding:0;position:absolute;bottom:8px;right:8px}.colorpicker-body .insert-button:hover{background:var(--vscode-button-hoverBackground)}.monaco-editor .peekview-widget{box-shadow:var(--vscode-shadow-lg)}.monaco-editor .peekview-widget .head{box-sizing:border-box;flex-wrap:nowrap;justify-content:space-between;display:flex}.monaco-editor .peekview-widget .head .peekview-title{text-overflow:ellipsis;align-items:baseline;min-width:0;margin-left:20px;font-size:13px;display:flex;overflow:hidden}.monaco-editor .peekview-widget .head .peekview-title.clickable{cursor:pointer}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){margin-left:.5em;font-size:.9em}.monaco-editor .peekview-widget .head .peekview-title .meta{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.monaco-editor .peekview-widget .head .peekview-title .dirname,.monaco-editor .peekview-widget .head .peekview-title .filename{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty):before{content:"-";padding:0 .3em}.monaco-editor .peekview-widget .head .peekview-actions{text-align:right;flex:1;padding-right:2px}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar,.monaco-editor .peekview-widget .head .peekview-actions>.monaco-action-bar>.actions-container{height:100%}.monaco-editor .peekview-widget>.body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{align-self:center;margin-right:4px}.monaco-editor .peekview-widget .monaco-list .monaco-list-row.focused .codicon{color:inherit!important}.monaco-editor .zone-widget{z-index:10;position:absolute}.monaco-editor .zone-widget .zone-widget-container{border-top-style:solid;border-top-width:0;border-bottom-style:solid;border-bottom-width:0;position:relative}.monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-top-width:1px;border-bottom-width:1px}.monaco-editor .reference-zone-widget .inline{vertical-align:top;display:inline-block}.monaco-editor .reference-zone-widget .messages{text-align:center;width:100%;height:100%;padding:3em 0}.monaco-editor .reference-zone-widget .ref-tree{background-color:var(--vscode-peekViewResult-background);color:var(--vscode-peekViewResult-lineForeground);line-height:23px}.monaco-editor .reference-zone-widget .ref-tree .reference{text-overflow:ellipsis;overflow:hidden}.monaco-editor .reference-zone-widget .ref-tree .reference-file{width:100%;height:100%;color:var(--vscode-peekViewResult-fileForeground);display:inline-flex}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows>.monaco-list-row.selected:not(.highlighted){background-color:var(--vscode-peekViewResult-selectionBackground);color:var(--vscode-peekViewResult-selectionForeground)!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-left:auto;margin-right:12px}.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight{color:var(--vscode-peekViewResult-fileForeground)!important;background-color:var(--vscode-peekViewResult-matchHighlightBackground)!important}.monaco-editor .reference-zone-widget .preview .reference-decoration{background-color:var(--vscode-peekViewEditor-matchHighlightBackground);border:2px solid var(--vscode-peekViewEditor-matchHighlightBorder);box-sizing:border-box}.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input{background-color:var(--vscode-peekViewEditor-background)}.monaco-editor .reference-zone-widget .preview .monaco-editor .margin{background-color:var(--vscode-peekViewEditorGutter-background)}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file,.monaco-editor.hc-light .reference-zone-widget .ref-tree .reference-file{font-weight:700}.monaco-editor.hc-black .reference-zone-widget .ref-tree .referenceMatch .highlight,.monaco-editor.hc-light .reference-zone-widget .ref-tree .referenceMatch .highlight{border:1px dotted var(--vscode-contrastActiveBorder,transparent);box-sizing:border-box}.monaco-editor .hoverHighlight{background-color:var(--vscode-editor-hoverHighlightBackground)}.monaco-editor .monaco-resizable-hover{border:1px solid var(--vscode-editorHoverWidget-border);border-radius:var(--vscode-cornerRadius-large);box-sizing:content-box;background-color:var(--vscode-editorHoverWidget-background)}.monaco-editor .monaco-resizable-hover>.monaco-hover{border-radius:inherit;border:none;overflow:hidden}.monaco-editor .monaco-hover{border:1px solid var(--vscode-editorHoverWidget-border);border-radius:var(--vscode-cornerRadius-large);color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);box-shadow:var(--vscode-shadow-lg)}.monaco-editor .monaco-hover a{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-hover a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .monaco-hover .hover-row{border-radius:var(--vscode-cornerRadius-large);display:flex}.monaco-editor .monaco-hover .hover-row.hover-row-with-copy{padding-right:20px;position:relative}.monaco-editor .monaco-hover .hover-row .hover-row-contents{flex-direction:column;min-width:0;display:flex}.monaco-editor .monaco-hover .hover-row .verbosity-actions{border-right:1px solid var(--vscode-editorHoverWidget-border);width:22px;overflow-y:clip}.monaco-editor .monaco-hover .hover-row .verbosity-actions-inner{flex-direction:column;justify-content:flex-end;padding-left:5px;padding-right:5px;display:flex;position:relative}.monaco-editor .monaco-hover .hover-row .verbosity-actions-inner .codicon{cursor:pointer;font-size:11px}.monaco-editor .monaco-hover .hover-row .verbosity-actions-inner .codicon.enabled{color:var(--vscode-textLink-foreground)}.monaco-editor .monaco-hover .hover-row .verbosity-actions-inner .codicon.disabled{opacity:.6}.monaco-editor .monaco-hover .hover-row .actions{background-color:var(--vscode-editorHoverWidget-statusBarBackground)}.monaco-editor .monaco-hover code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .monaco-hover .hover-copy-button{opacity:0;border-radius:3px;justify-content:center;align-items:center;padding:2px 4px;display:flex;position:absolute;top:4px;right:4px}.monaco-editor .monaco-hover .hover-row-with-copy:hover .hover-copy-button,.monaco-editor .monaco-hover .hover-row-with-copy:focus-within .hover-copy-button{opacity:1}.monaco-editor .monaco-hover .hover-copy-button:hover{background-color:var(--vscode-toolbar-hoverBackground);cursor:pointer}.monaco-editor .monaco-hover .hover-copy-button:focus{outline:1px solid var(--vscode-focusBorder);outline-offset:-1px}.monaco-editor .monaco-hover .hover-copy-button .codicon{color:var(--vscode-foreground);font-size:16px}.monaco-editor.vs .dnd-target,.monaco-editor.hc-light .dnd-target{color:#fff;border-right:2px dotted #000}.monaco-editor.vs-dark .dnd-target{color:#51504f;border-right:2px dotted #aeafad}.monaco-editor.hc-black .dnd-target{color:#000;border-right:2px dotted #fff}.monaco-editor.mouse-default .view-lines,.monaco-editor.vs-dark.mac.mouse-default .view-lines,.monaco-editor.hc-black.mac.mouse-default .view-lines,.monaco-editor.hc-light.mac.mouse-default .view-lines{cursor:default}.monaco-editor.mouse-copy .view-lines,.monaco-editor.vs-dark.mac.mouse-copy .view-lines,.monaco-editor.hc-black.mac.mouse-copy .view-lines,.monaco-editor.hc-light.mac.mouse-copy .view-lines{cursor:copy}.monaco-editor .findOptionsWidget{background-color:var(--vscode-editorWidget-background);color:var(--vscode-editorWidget-foreground);box-shadow:var(--vscode-shadow-lg);border:2px solid var(--vscode-contrastBorder)}.monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon-folding-manual-expanded,.monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-editor .margin-view-overlays .codicon-folding-collapsed{cursor:pointer;opacity:0;justify-content:center;align-items:center;margin-left:2px;font-size:140%;transition:opacity .5s;display:flex}.monaco-reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-collapsed,.monaco-reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-manual-expanded,.monaco-reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-expanded,.monaco-reduce-motion .monaco-editor .margin-view-overlays .codicon-folding-collapsed{transition:initial}.monaco-editor .margin-view-overlays:hover .codicon,.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,.monaco-editor .margin-view-overlays .codicon.codicon-folding-manual-collapsed,.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons{opacity:1}.monaco-editor .inline-folded:after{color:var(--vscode-editor-foldPlaceholderForeground);content:"⋯";cursor:pointer;margin:.1em .2em 0;line-height:1em;display:inline}.monaco-editor .folded-background{background-color:var(--vscode-editor-foldBackground)}.monaco-editor .cldr.codicon.codicon-folding-expanded,.monaco-editor .cldr.codicon.codicon-folding-collapsed,.monaco-editor .cldr.codicon.codicon-folding-manual-expanded,.monaco-editor .cldr.codicon.codicon-folding-manual-collapsed{color:var(--vscode-editorGutter-foldingControlForeground)!important}.monaco-editor .peekview-widget .head .peekview-title .severity-icon{vertical-align:text-top;margin-right:4px;display:inline-block}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget>.stale{opacity:.6;font-style:italic}.monaco-editor .marker-widget .title{padding-right:5px;display:inline-block}.monaco-editor .marker-widget .descriptioncontainer{white-space:pre;-webkit-user-select:text;user-select:text;padding:8px 12px 0 20px;position:absolute}.monaco-editor .marker-widget .descriptioncontainer .message{flex-direction:column;display:flex}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{opacity:.6;color:inherit}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:"("}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:")"}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link>span{text-underline-position:under;color:var(--vscode-textLink-activeForeground);border-bottom:1px solid #0000;text-decoration:underline}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer;color:var(--vscode-textLink-activeForeground)}.monaco-editor .zone-widget .codicon.codicon-error,.markers-panel .marker-icon.error,.markers-panel .marker-icon .codicon.codicon-error,.text-search-provider-messages .providerMessage .codicon.codicon-error,.extensions-viewlet>.extensions .codicon.codicon-error,.extension-editor .codicon.codicon-error,.chat-attached-context-attachment .codicon.codicon-error{color:var(--vscode-problemsErrorIcon-foreground)}.monaco-editor .zone-widget .codicon.codicon-warning,.markers-panel .marker-icon.warning,.markers-panel .marker-icon .codicon.codicon-warning,.text-search-provider-messages .providerMessage .codicon.codicon-warning,.extensions-viewlet>.extensions .codicon.codicon-warning,.extension-editor .codicon.codicon-warning,.preferences-editor .codicon.codicon-warning{color:var(--vscode-problemsWarningIcon-foreground)}.monaco-editor .zone-widget .codicon.codicon-info,.markers-panel .marker-icon.info,.markers-panel .marker-icon .codicon.codicon-info,.text-search-provider-messages .providerMessage .codicon.codicon-info,.extensions-viewlet>.extensions .codicon.codicon-info,.extension-editor .codicon.codicon-info{color:var(--vscode-problemsInfoIcon-foreground)}.monaco-editor .snippet-placeholder{background-color:var(--vscode-editor-snippetTabstopHighlightBackground,transparent);outline-width:1px;outline-style:solid;outline-color:var(--vscode-editor-snippetTabstopHighlightBorder,transparent);min-width:2px}.monaco-editor .finish-snippet-placeholder{background-color:var(--vscode-editor-snippetFinalTabstopHighlightBackground,transparent);outline-width:1px;outline-style:solid;outline-color:var(--vscode-editor-snippetFinalTabstopHighlightBorder,transparent)}.monaco-editor .rename-box{z-index:100;color:inherit;box-shadow:var(--vscode-shadow-lg);border-radius:4px}.monaco-editor .rename-box.preview{padding:4px 4px 0}.monaco-editor .rename-box .rename-input-with-button{border-radius:4px;width:calc(100% - 8px);padding:3px}.monaco-editor .rename-box .rename-input{width:calc(100% - 8px);padding:0}.monaco-editor .rename-box .rename-input:focus{outline:none}.monaco-editor .rename-box .rename-suggestions-button{cursor:pointer;background-color:#0000;border:none;border-radius:5px;align-items:center;padding:3px;display:flex}.monaco-editor .rename-box .rename-suggestions-button:hover{background-color:var(--vscode-toolbar-hoverBackground)}.monaco-editor .rename-box .rename-candidate-list-container .monaco-list-row{border-radius:2px}.monaco-editor .rename-box .rename-label{opacity:.8;display:none}.monaco-editor .rename-box.preview .rename-label{display:inherit}.monaco-editor .suggest-widget{z-index:40;border-radius:var(--vscode-cornerRadius-large);width:430px;box-shadow:var(--vscode-shadow-lg);flex-direction:column;display:flex}.monaco-editor .suggest-widget.message{flex-direction:row;align-items:center}.monaco-editor .suggest-widget,.monaco-editor .suggest-details{border-style:solid;border-width:1px;border-color:var(--vscode-editorSuggestWidget-border);background-color:var(--vscode-editorSuggestWidget-background);flex:0 auto;width:100%}.monaco-editor.hc-black .suggest-widget,.monaco-editor.hc-black .suggest-details,.monaco-editor.hc-light .suggest-widget,.monaco-editor.hc-light .suggest-details{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{box-sizing:border-box;border-top:1px solid var(--vscode-editorSuggestWidget-border);flex-flow:row;justify-content:space-between;width:100%;padding:0 4px;font-size:80%;display:none;overflow:hidden}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{color:var(--vscode-editorSuggestWidgetStatus-foreground)}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label:after{content:", ";margin-right:.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{width:100%;height:100%}.monaco-editor .suggest-widget .monaco-list{-webkit-user-select:none;user-select:none;border-radius:var(--vscode-cornerRadius-large)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{-mox-box-sizing:border-box;box-sizing:border-box;white-space:nowrap;cursor:pointer;touch-action:none;background-position:2px 2px;background-repeat:no-repeat;padding-right:10px;display:flex}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused{color:var(--vscode-editorSuggestWidget-selectedForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused .codicon{color:var(--vscode-editorSuggestWidget-selectedIconForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;padding-left:2px;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{text-overflow:ellipsis;white-space:pre;justify-content:space-between;display:flex;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.focused)>.contents>.main .monaco-icon-label{color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:700}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-highlightForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main .monaco-highlighted-label .highlight{color:var(--vscode-editorSuggestWidget-focusHighlightForeground)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:before{color:inherit;opacity:1;cursor:pointer;font-size:14px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;top:6px;right:2px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{color:var(--vscode-editorSuggestWidget-foreground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{color:var(--vscode-editorSuggestWidget-selectedForeground)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{text-overflow:ellipsis;opacity:.6;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{opacity:.4;font-size:85%;line-height:initial;text-overflow:ellipsis;align-self:center;margin-left:12px;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{text-overflow:ellipsis;white-space:nowrap;margin-left:1.1em;font-size:85%;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-grow:1;flex-shrink:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{flex-shrink:4;max-width:70%;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{visibility:hidden;width:18px;height:18px;display:inline-block;position:absolute;right:10px}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label:before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{background-position:50%;background-repeat:no-repeat;background-size:80%;width:16px;height:16px;margin-left:2px;display:block}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{align-items:center;margin-right:4px;display:flex}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon,.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon:before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{border:.1em solid #000;width:.7em;height:.7em;margin:0 0 0 .3em;display:inline-block}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{cursor:default;color:var(--vscode-editorSuggestWidget-foreground);flex-direction:column;display:flex}.monaco-editor .suggest-details:focus{border-color:var(--vscode-focusBorder)}.monaco-editor .suggest-details a{color:var(--vscode-textLink-foreground)}.monaco-editor .suggest-details a:hover{color:var(--vscode-textLink-activeForeground)}.monaco-editor .suggest-details code{background-color:var(--vscode-textCodeBlock-background)}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;width:100%;height:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{text-overflow:ellipsis;opacity:.7;white-space:pre;flex:2;margin:0 24px 0 0;padding:4px 0 4px 5px;overflow:hidden}.monaco-editor .suggest-details.detail-and-doc>.monaco-scrollable-element>.body>.header>.type{padding-bottom:12px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{white-space:pre-wrap;margin:0;padding:4px 5px}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px;overflow:hidden}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{white-space:initial;min-height:calc(1rem + 8px);padding:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .monaco-tokenized-source{white-space:pre}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{white-space:pre-wrap;word-wrap:break-word}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 .4em}.monaco-editor .suggest-details ul,.monaco-editor .suggest-details ol{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}.monaco-editor .suggest-preview-additional-widget{white-space:nowrap}.monaco-editor .suggest-preview-additional-widget .content-spacer{color:#0000;white-space:pre}.monaco-editor .suggest-preview-additional-widget .button{cursor:pointer;text-underline-position:under;text-decoration:underline;display:inline-block}.monaco-editor .ghost-text-hidden{opacity:0;font-size:0}.monaco-editor .ghost-text-decoration,.monaco-editor .suggest-preview-text .ghost-text{font-style:italic}.monaco-editor .suggest-preview-text.clickable .view-line{z-index:1}.monaco-editor .ghost-text-decoration.clickable,.monaco-editor .ghost-text-decoration-preview.clickable,.monaco-editor .suggest-preview-text.clickable .ghost-text{cursor:pointer}.monaco-editor .inline-completion-text-to-replace{text-underline-position:under;text-decoration:underline}.monaco-editor .ghost-text-decoration,.monaco-editor .ghost-text-decoration-preview,.monaco-editor .suggest-preview-text .ghost-text{&.syntax-highlighted{opacity:.7}&:not(.syntax-highlighted){color:var(--vscode-editorGhostText-foreground)}background-color:var(--vscode-editorGhostText-background);border:1px solid var(--vscode-editorGhostText-border)}.monaco-editor .ghost-text-decoration.warning,.monaco-editor .ghost-text-decoration-preview.warning,.monaco-editor .suggest-preview-text .ghost-text.warning{background:var(--monaco-editor-warning-decoration) repeat-x bottom left;border-bottom:4px double var(--vscode-editorWarning-border)}.monaco-editor .ghost-text-decoration.short-text,.monaco-editor .ghost-text-decoration-preview.short-text,.monaco-editor .suggest-preview-text .ghost-text.short-text{text-decoration:underline dotted var(--vscode-editorGhostText-foreground);text-underline-position:under}.ghost-text-view-warning-widget-icon{& .codicon{color:var(--vscode-editorWarning-foreground)!important}}.monaco-editor{& .edits-fadeout-decoration{opacity:var(--animation-opacity,1);background-color:var(--vscode-inlineEdit-modifiedChangedTextBackground)}}.monaco-editor .sticky-widget{border-bottom:1px solid var(--vscode-editorStickyScroll-border);width:100%;box-shadow:var(--vscode-editorStickyScroll-shadow) 0 4px 2px -2px;z-index:4;margin-left:"0px";overflow:hidden;right:initial!important}.monaco-editor .sticky-widget .sticky-widget-line-numbers{float:left;background-color:var(--vscode-editorStickyScrollGutter-background)}.monaco-editor .sticky-widget.peek .sticky-widget-line-numbers{background-color:var(--vscode-peekViewEditorStickyScrollGutter-background)}.monaco-editor .sticky-widget .sticky-widget-lines-scrollable{width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:var(--vscode-editorStickyScroll-background);display:inline-block;position:absolute;overflow:hidden}.monaco-editor .sticky-widget.peek .sticky-widget-lines-scrollable{background-color:var(--vscode-peekViewEditorStickyScroll-background)}.monaco-editor .sticky-widget .sticky-widget-lines{background-color:inherit;position:absolute}.monaco-editor .sticky-widget .sticky-line-number,.monaco-editor .sticky-widget .sticky-line-content{color:var(--vscode-editorLineNumber-foreground);white-space:nowrap;background-color:inherit;display:inline-block;position:absolute}.monaco-editor .sticky-widget .sticky-line-number .codicon-folding-expanded,.monaco-editor .sticky-widget .sticky-line-number .codicon-folding-collapsed{float:right;transition:var(--vscode-editorStickyScroll-foldingOpacityTransition);margin-left:2px;position:absolute}.monaco-editor .sticky-widget .sticky-line-content{width:var(--vscode-editorStickyScroll-scrollableWidth);background-color:inherit;white-space:nowrap}.monaco-editor .sticky-widget .sticky-line-number-inner{text-align:right;display:inline-block}.monaco-editor .sticky-widget .sticky-line-content:hover{background-color:var(--vscode-editorStickyScrollHover-background);cursor:pointer}.monaco-editor{--inline-edit-border-radius:3px;& .inline-edits-view-indicator{z-index:34;height:20px;color:var(--vscode-inlineEdit-gutterIndicator-primaryForeground);background-color:var(--vscode-inlineEdit-gutterIndicator-background);border:1px solid var(--vscode-inlineEdit-gutterIndicator-primaryBorder);border-radius:var(--inline-edit-border-radius);opacity:0;align-items:center;margin:0 4px;padding:2px 10px 2px 2px;display:flex;&.contained{transition:opacity .2s ease-in-out .4s}&.visible{opacity:1}&.top{opacity:1;& .icon{transform:rotate(90deg)}}&.bottom{opacity:1;& .icon{transform:rotate(-90deg)}}& .icon{align-items:center;margin:0 2px;transition:transform .2s ease-in-out;display:flex;transform:none;& .codicon{color:var(--vscode-inlineEdit-gutterIndicator-primaryForeground)}}& .label{justify-content:center;width:100%;margin:0 2px;display:flex}}& .inline-edits-view .editorContainer{& .preview .monaco-editor{& .view-overlays .current-line-exact,& .current-line-margin{border:none}}& .inline-edits-view-zone.diagonal-fill{opacity:.5}}& .strike-through{text-decoration:line-through}& .inlineCompletions-line-insert{background:var(--vscode-inlineEdit-modifiedChangedLineBackground)}& .inlineCompletions-line-delete{background:var(--vscode-inlineEdit-originalChangedLineBackground)}& .inlineCompletions-char-insert{background:var(--vscode-inlineEdit-modifiedChangedTextBackground);cursor:pointer}& .inlineCompletions-char-delete{background:var(--vscode-inlineEdit-originalChangedTextBackground)}& .inlineCompletions-char-delete.diff-range-empty{border-left:solid var(--vscode-inlineEdit-originalChangedTextBackground) 3px;margin-left:-1px}& .inlineCompletions-char-insert.diff-range-empty{border-left:solid var(--vscode-inlineEdit-modifiedChangedTextBackground) 3px}& .inlineCompletions-char-delete.single-line-inline{border:1px solid var(--vscode-editorHoverWidget-border);margin:-2px 0 0 -2px}& .inlineCompletions-char-insert.single-line-inline{border-top:1px solid var(--vscode-inlineEdit-modifiedBorder);border-bottom:1px solid var(--vscode-inlineEdit-modifiedBorder)}& .inlineCompletions-char-insert.single-line-inline.start{border-top-left-radius:var(--inline-edit-border-radius);border-bottom-left-radius:var(--inline-edit-border-radius);border-left:1px solid var(--vscode-inlineEdit-modifiedBorder)}& .inlineCompletions-char-insert.single-line-inline.end{border-top-right-radius:var(--inline-edit-border-radius);border-bottom-right-radius:var(--inline-edit-border-radius);border-right:1px solid var(--vscode-inlineEdit-modifiedBorder)}& .inlineCompletions-char-delete.single-line-inline.empty,& .inlineCompletions-char-insert.single-line-inline.empty{display:none}& .inlineCompletions.strike-through{text-decoration-thickness:1px}& .inlineCompletions-modified-bubble{background:var(--vscode-inlineEdit-modifiedChangedTextBackground)}& .inlineCompletions-original-bubble{background:var(--vscode-inlineEdit-originalChangedTextBackground)}& .inlineCompletions-modified-bubble,& .inlineCompletions-original-bubble{pointer-events:none;display:inline-block}& .inline-edit.ghost-text,& .inline-edit.ghost-text-decoration,& .inline-edit.ghost-text-decoration-preview,& .inline-edit.suggest-preview-text .ghost-text{&.syntax-highlighted{opacity:1!important}font-style:normal!important}& .inline-edit.modified-background.ghost-text,& .inline-edit.modified-background.ghost-text-decoration,& .inline-edit.modified-background.ghost-text-decoration-preview,& .inline-edit.modified-background.suggest-preview-text .ghost-text{background:var(--vscode-inlineEdit-modifiedChangedTextBackground)!important;display:inline-block!important}& .inlineCompletions-original-lines{background:var(--vscode-editor-background)}& .inline-edit-jump-to-widget{& .monaco-keybinding{& .monaco-keybinding-key{padding:1px 2px 2px;font-size:11px}}}}.monaco-menu-option{color:var(--vscode-editorActionList-foreground);cursor:pointer;border-radius:3px;align-items:center;gap:4px;padding:0 4px;font-size:13px;line-height:28px;display:flex;& .monaco-keybinding-key{opacity:.7;min-width:unset;border:none;margin:0;padding:0;font-size:13px}&.active{background:var(--vscode-editorActionList-focusBackground);color:var(--vscode-editorActionList-focusForeground);outline:1px solid var(--vscode-menu-selectionBorder,transparent);outline-offset:-1px;& .monaco-keybinding-key{color:var(--vscode-editorActionList-focusForeground)}}}.inline-edits-long-distance-hint-widget .go-to-label:before{content:"";background:linear-gradient(to left, var(--vscode-editorWidget-background) 0, transparent 12px);width:12px;height:100%;position:absolute;top:0;left:-12px}.hc-black .inline-edits-long-distance-hint-widget .go-to-label:before,.hc-light .inline-edits-long-distance-hint-widget .go-to-label:before{background:var(--vscode-editorWidget-background)}.inline-edit-alternative-action-label .codicon{padding-right:4px;font-size:12px!important}.inline-edit-alternative-action-label .monaco-keybinding-key{padding:2px 3px}.inline-edit-alternative-action-label .inline-edit-alternative-action-label-separator{width:4px}.inline-edits-long-distance-hint-widget.show-file-icons .target-file .file-icon:before{vertical-align:text-bottom;background-position:50%;background-repeat:no-repeat;background-size:16px;width:16px;height:16px;display:inline-block}.monaco-editor .goto-definition-link{cursor:pointer;text-decoration:underline;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor.vs .valueSetReplacement{outline:solid 2px var(--vscode-editorBracketMatch-border)}.monaco-editor .linked-editing-decoration{background-color:var(--vscode-editor-linkedEditingBackground);min-width:1px}.monaco-editor .detected-link,.monaco-editor .detected-link-active{text-underline-position:under;text-decoration:underline}.monaco-editor .detected-link-active{cursor:pointer;color:var(--vscode-editorLink-activeForeground)!important}.monaco-editor{& .scroll-editor-on-middle-click-dot{cursor:all-scroll;z-index:1;background-color:var(--vscode-editor-foreground,white);border:1px solid var(--vscode-editor-background,black);opacity:.5;border-radius:50%;width:5px;height:5px;position:absolute;transform:translate(-50%,-50%);&.hidden{display:none}}&.scroll-editor-on-middle-click-editor *{cursor:all-scroll}}.monaco-editor .focused .selectionHighlight{background-color:var(--vscode-editor-selectionHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-selectionHighlightBorder)}.monaco-editor.hc-black .focused .selectionHighlight,.monaco-editor.hc-light .focused .selectionHighlight{border-style:dotted}.monaco-editor .wordHighlight{background-color:var(--vscode-editor-wordHighlightBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightBorder)}.monaco-editor.hc-black .wordHighlight,.monaco-editor.hc-light .wordHighlight{border-style:dotted}.monaco-editor .wordHighlightStrong{background-color:var(--vscode-editor-wordHighlightStrongBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightStrongBorder)}.monaco-editor.hc-black .wordHighlightStrong,.monaco-editor.hc-light .wordHighlightStrong{border-style:dotted}.monaco-editor .wordHighlightText{background-color:var(--vscode-editor-wordHighlightTextBackground);box-sizing:border-box;border:1px solid var(--vscode-editor-wordHighlightTextBorder)}.monaco-editor.hc-black .wordHighlightText,.monaco-editor.hc-light .wordHighlightText{border-style:dotted}.monaco-editor .parameter-hints-widget{z-index:39;cursor:default;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);border-radius:var(--vscode-cornerRadius-large);box-shadow:var(--vscode-shadow-lg);flex-direction:column;line-height:1.5em;display:flex}.hc-black .monaco-editor .parameter-hints-widget,.hc-light .monaco-editor .parameter-hints-widget{border-width:2px}.monaco-editor .parameter-hints-widget>.phwrapper{flex-direction:row;max-width:440px;display:flex}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.multiple .body:before{content:"";opacity:.5;border-left:1px solid var(--vscode-editorHoverWidget-border);height:100%;display:block;position:absolute}.monaco-editor .parameter-hints-widget p,.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .monaco-scrollable-element,.monaco-editor .parameter-hints-widget .body{flex-direction:column;flex:1;min-height:100%;display:flex}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px;position:relative}.monaco-editor .parameter-hints-widget .signature.has-docs:after{content:"";opacity:.5;border-bottom:1px solid var(--vscode-editorHoverWidget-border);width:100%;padding-top:4px;display:block;position:absolute;left:0}.monaco-editor .parameter-hints-widget .code{font-family:var(--vscode-parameterHintsWidget-editorFontFamily), var(--vscode-parameterHintsWidget-editorFontFamilyDefault)}.monaco-editor .parameter-hints-widget .docs{white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word;min-width:0;padding:0 10px 0 5px}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs a{color:var(--vscode-textLink-foreground)}.monaco-editor .parameter-hints-widget .docs a:hover{color:var(--vscode-textLink-activeForeground);cursor:pointer}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:initial;overflow-wrap:break-word;word-break:break-word;max-width:100%}.monaco-editor .parameter-hints-widget .docs code{font-family:var(--monaco-monospace-font);background-color:var(--vscode-textCodeBlock-background);border-radius:3px;padding:0 .4em}.monaco-editor .parameter-hints-widget .docs .monaco-tokenized-source,.monaco-editor .parameter-hints-widget .docs .code{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .controls{flex-direction:column;justify-content:flex-end;align-items:center;min-width:22px;display:none}.monaco-editor .parameter-hints-widget.multiple .controls{padding:0 2px;display:flex}.monaco-editor .parameter-hints-widget.multiple .button{cursor:pointer;background-repeat:no-repeat;width:16px;height:16px}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{text-align:center;height:12px;line-height:12px;font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .signature .parameter.active{color:var(--vscode-editorHoverWidget-highlightForeground);font-weight:700}.monaco-editor .parameter-hints-widget .documentation-parameter>.parameter{margin-right:.5em;font-weight:700}.monaco-editor{& .editorPlaceholder{text-overflow:ellipsis;text-wrap:nowrap;pointer-events:none;color:var(--vscode-editor-placeholder-foreground);position:absolute;top:0;overflow:hidden}}.monaco-editor .unicode-highlight{border:1px solid var(--vscode-editorUnicodeHighlight-border);background-color:var(--vscode-editorUnicodeHighlight-background);box-sizing:border-box}.editor-banner{box-sizing:border-box;cursor:default;background:var(--vscode-banner-background);width:100%;height:26px;font-size:12px;display:flex;overflow:visible}.editor-banner .icon-container{flex-shrink:0;align-items:center;padding:0 6px 0 10px;display:flex}.editor-banner .icon-container.custom-icon{background-position:50%;background-repeat:no-repeat;background-size:16px;width:16px;margin:0 6px 0 10px;padding:0}.editor-banner .message-container{text-overflow:ellipsis;white-space:nowrap;align-items:center;line-height:26px;display:flex;overflow:hidden}.editor-banner .message-container p{margin-block:0}.editor-banner .message-actions-container{flex-grow:1;flex-shrink:0;margin:0 4px;line-height:26px}.editor-banner .message-actions-container a.monaco-button{width:inherit;margin:2px 8px;padding:0 12px}.editor-banner .message-actions-container a{margin-left:12px;padding:3px;text-decoration:underline}.editor-banner .action-container{padding:0 10px 0 6px}.editor-banner{background-color:var(--vscode-banner-background)}.editor-banner,.editor-banner .action-container .codicon,.editor-banner .message-actions-container .monaco-link{color:var(--vscode-banner-foreground)}.editor-banner .icon-container .codicon{color:var(--vscode-banner-iconForeground)}.monaco-link{color:var(--vscode-textLink-foreground)}.monaco-link:hover{color:var(--vscode-textLink-activeForeground)}.floating-menu-overlay-widget{color:var(--vscode-foreground);background-color:var(--vscode-editorWidget-background);border-radius:var(--vscode-cornerRadius-medium);border:1px solid var(--vscode-contrastBorder);z-index:10;box-shadow:var(--vscode-shadow-lg);justify-content:center;align-items:center;gap:4px;padding:2px 4px;display:flex;overflow:hidden;&.single-button{background-color:#0000;border-width:0;padding:0;overflow:visible;& .action-item>.action-label,& .action-item>.action-label.codicon:not(.separator){border-radius:var(--vscode-cornerRadius-medium);height:28px;box-shadow:0 2px 8px var(--vscode-widget-shadow);line-height:28px}& .action-item>.action-label{padding:0 8px}& .action-item>.action-label.codicon:not(.separator){width:28px}}& .actions-container{gap:4px}& .action-item>.action-label{border-radius:var(--vscode-cornerRadius-small);padding:4px 6px;font-size:11px;line-height:14px}& .action-item>.action-label.codicon:not(.separator){color:var(--vscode-foreground);justify-content:center;align-items:center;width:22px;height:22px;padding:0;font-size:16px;line-height:22px;display:flex}& .action-item.primary>.action-label,& .action-item.primary>.action-label.action-label.codicon:not(.separator){background-color:var(--vscode-button-background);color:var(--vscode-button-foreground)}& .action-item.primary>.action-label:hover{background-color:var(--vscode-button-hoverBackground)!important}}.hc-black .floating-menu-overlay-widget.single-button,.hc-light .floating-menu-overlay-widget.single-button{border-style:solid;border-width:1px;border-color:var(--vscode-contrastBorder);background-color:var(--vscode-editorWidget-background);padding:0;& .action-item>.action-label,& .action-item>.action-label.codicon:not(.separator){box-shadow:none}}.monaco-editor .iPadShowKeyboard{resize:none;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjNDI0MjQyIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) 50% no-repeat;border:4px solid #f6f6f6;border-radius:4px;width:58px;min-width:0;height:36px;min-height:0;margin:0;padding:0;position:absolute;overflow:hidden}.monaco-editor.vs-dark .iPadShowKeyboard{background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjQzVDNUM1Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==) 50% no-repeat;border:4px solid #252526}.monaco-editor .tokens-inspect-widget{z-index:50;-webkit-user-select:text;user-select:text;color:var(--vscode-editorHoverWidget-foreground);background-color:var(--vscode-editorHoverWidget-background);border:1px solid var(--vscode-editorHoverWidget-border);padding:10px}.monaco-editor.hc-black .tokens-inspect-widget,.monaco-editor.hc-light .tokens-inspect-widget{border-width:2px}.monaco-editor .tokens-inspect-widget .tokens-inspect-separator{background-color:var(--vscode-editorHoverWidget-border);border:0;height:1px}.monaco-editor .tokens-inspect-widget .tm-token{font-family:var(--monaco-monospace-font)}.monaco-editor .tokens-inspect-widget .tm-token-length{float:right;font-size:60%;font-weight:400}.monaco-editor .tokens-inspect-widget .tm-metadata-table{width:100%}.monaco-editor .tokens-inspect-widget .tm-metadata-value{font-family:var(--monaco-monospace-font);text-align:right}.monaco-editor .tokens-inspect-widget .tm-token-type{font-family:var(--monaco-monospace-font)}.overlay.svelte-4zpnld{background:var(--shade-stronger);backdrop-filter:blur(4px);z-index:1000;justify-content:center;align-items:center;animation:.2s ease-out svelte-4zpnld-fadeIn;display:flex;position:fixed;inset:0}@keyframes svelte-4zpnld-fadeIn{0%{opacity:0}to{opacity:1}}.dialog.svelte-4zpnld{background:var(--surface-panel-alt);box-shadow:0 10px 40px var(--shadow);border-radius:8px;flex-direction:column;width:90%;max-width:600px;max-height:80vh;animation:.2s ease-out svelte-4zpnld-slideUp;display:flex}@keyframes svelte-4zpnld-slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.header.svelte-4zpnld{border-bottom:1px solid var(--tint);justify-content:space-between;align-items:center;padding:20px;display:flex}.header.svelte-4zpnld h2:where(.svelte-4zpnld){color:var(--text-bright);margin:0;font-size:20px;font-weight:600}.close-button.svelte-4zpnld{color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;width:32px;height:32px;padding:0;font-size:24px;transition:all .15s;display:flex}.close-button.svelte-4zpnld:hover{background:var(--tint);color:var(--text-bright)}.search-section.svelte-4zpnld{border-bottom:1px solid var(--tint);padding:20px}.search-input.svelte-4zpnld{background:var(--shade-weak);border:1px solid var(--tint);width:100%;color:var(--text-bright);box-sizing:border-box;border-radius:4px;padding:12px;font-size:14px}.search-input.svelte-4zpnld:focus{border-color:var(--accent);outline:none}.loading.svelte-4zpnld{color:var(--text-subtle);margin-top:8px;font-size:12px}.error.svelte-4zpnld{color:var(--status-error);margin-top:8px;font-size:12px}.content.svelte-4zpnld{flex:1;min-height:200px;padding:20px;overflow-y:auto}.results.svelte-4zpnld{flex-direction:column;gap:8px;display:flex}.result-item.svelte-4zpnld{background:var(--shade-weak);border:1px solid var(--tint);cursor:pointer;text-align:left;border-radius:4px;flex-direction:column;gap:4px;padding:12px;transition:all .15s;display:flex}.result-item.svelte-4zpnld:hover,.result-item.selected.svelte-4zpnld{background:var(--accent-tint);border-color:var(--accent)}.package-name.svelte-4zpnld{color:var(--text-bright);font-size:14px;font-weight:600}.package-description.svelte-4zpnld{color:var(--text-muted);font-size:12px}.package-meta.svelte-4zpnld{gap:12px;margin-top:4px;display:flex}.version.svelte-4zpnld{color:var(--text-faintest);font-size:11px}.keywords.svelte-4zpnld{color:var(--text-faintest);font-size:11px;font-style:italic}.empty-state.svelte-4zpnld{text-align:center;color:var(--text-faintest);padding:40px;font-size:14px}.popular-section.svelte-4zpnld{flex-direction:column;gap:16px;display:flex}.popular-section.svelte-4zpnld h3:where(.svelte-4zpnld){color:var(--text-bright);margin:0;font-size:16px;font-weight:600}.popular-list.svelte-4zpnld{grid-template-columns:repeat(2,1fr);gap:8px;display:grid}.popular-item.svelte-4zpnld{background:var(--shade-weak);border:1px solid var(--tint);cursor:pointer;text-align:left;border-radius:4px;flex-direction:column;gap:4px;padding:12px;transition:all .15s;display:flex}.popular-item.svelte-4zpnld:hover{background:var(--accent-tint);border-color:var(--accent)}.popular-item.svelte-4zpnld .name:where(.svelte-4zpnld){color:var(--accent);font-size:13px;font-weight:600}.popular-item.svelte-4zpnld .description:where(.svelte-4zpnld){color:var(--text-muted);font-size:11px}.footer.svelte-4zpnld{border-top:1px solid var(--tint);padding:12px 20px}.hint.svelte-4zpnld{color:var(--text-faintest);text-align:center;font-size:11px}.editor-container-wrapper.svelte-1lc6j4t{background:var(--surface-panel-alt);flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}.header-bar.svelte-1lc6j4t{background:var(--surface-raised);border-bottom:1px solid var(--border-subtle);padding:8px 12px}.header-info.svelte-1lc6j4t{flex-direction:column;gap:4px;display:flex}.module-path.svelte-1lc6j4t,.source-path.svelte-1lc6j4t{color:var(--text-secondary);align-items:center;gap:8px;font-size:13px;display:flex}.source-path.svelte-1lc6j4t{font-size:12px}.path-text.svelte-1lc6j4t{font-family:SF Mono,Monaco,monospace}.path-text.secondary.svelte-1lc6j4t{color:var(--text-subtle)}.source-badge.svelte-1lc6j4t{text-transform:uppercase;border-radius:10px;align-items:center;gap:4px;padding:2px 8px;font-size:11px;font-weight:500;display:inline-flex}.badge-stdlib.svelte-1lc6j4t{background:var(--status-warn-tint);color:var(--status-warn-alt)}.badge-embedded.svelte-1lc6j4t{background:var(--status-ok-tint);color:var(--status-ok)}.badge-project.svelte-1lc6j4t{background:var(--status-info-tint);color:var(--status-info)}.history-badge.svelte-1lc6j4t{background:var(--status-special-tint);color:var(--status-special);border-radius:10px;align-items:center;gap:4px;padding:2px 6px;font-size:11px;display:inline-flex}.status-bar.svelte-1lc6j4t{border-bottom:1px solid var(--border-subtle);padding:8px 12px}.status.svelte-1lc6j4t{color:var(--text-subtle);align-items:center;gap:6px;font-size:13px;display:flex}.status-error.svelte-1lc6j4t{color:var(--status-error-strong)}.status-success.svelte-1lc6j4t{color:var(--status-ok-bright)}.editor-container.svelte-1lc6j4t{flex:1;min-height:0}.action-bar.svelte-1lc6j4t{background:var(--surface-raised);border-top:1px solid var(--border-subtle);flex-wrap:wrap;gap:8px;padding:8px 12px;display:flex}.action-button.svelte-1lc6j4t{background:var(--tint-weak);color:var(--text-muted);border:1px solid var(--border);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:6px 12px;font-size:12px;transition:all .15s;display:inline-flex}.action-button.svelte-1lc6j4t:hover{background:var(--tint);color:var(--text-bright);border-color:var(--border-strong)}.footer.svelte-1lc6j4t{border-top:1px solid var(--border-subtle);justify-content:space-between;align-items:center;gap:8px;padding:12px;display:flex}.footer-right.svelte-1lc6j4t{gap:8px;display:flex}.package-button.svelte-1lc6j4t{background:var(--accent-tint-medium);color:var(--accent);border:1px solid var(--accent-tint-strong);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:8px 16px;font-size:13px;transition:all .15s;display:inline-flex}.package-button.svelte-1lc6j4t:hover:not(:disabled){background:var(--accent-tint-strong);border-color:var(--accent)}.package-button.svelte-1lc6j4t:disabled{opacity:.5;cursor:not-allowed}button.svelte-1lc6j4t{background:var(--accent);color:var(--text-on-accent);cursor:pointer;border:none;border-radius:4px;padding:8px 16px;font-size:14px}button.svelte-1lc6j4t:hover:not(:disabled){background:var(--accent-strong)}button.svelte-1lc6j4t:disabled{opacity:.5;cursor:not-allowed}
|