elismasilva commited on
Commit
e01363c
·
verified ·
1 Parent(s): 089beca

Upload folder using huggingface_hub

Browse files
README.md CHANGED
@@ -10,7 +10,7 @@ app_file: space.py
10
  ---
11
 
12
  # `gradio_propertysheet`
13
- <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.17%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_propertysheet"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_propertysheet'>Component GitHub Code</a></span></p>
14
 
15
  The **PropertySheet** component for Gradio allows you to automatically generate a complete and interactive settings panel from a standard Python `dataclass`. It's designed to bring the power of IDE-like property editors directly into your Gradio applications.
16
 
@@ -50,12 +50,52 @@ import os
50
  import json
51
  import gradio as gr
52
  from dataclasses import dataclass, field, asdict
53
- from typing import Literal
54
  from gradio_propertysheet import PropertySheet
55
  from gradio_htmlinjector import HTMLInjector
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  @dataclass
60
  class EffectBase:
61
  """Base class with common effect settings."""
@@ -307,6 +347,7 @@ class RenderConfig:
307
  default_factory=QuantizationSettings,
308
  metadata={"label": "Quantization Settings"}
309
  )
 
310
  tile_size: Literal[1024, 1280] = field(
311
  default=1280,
312
  metadata={
 
10
  ---
11
 
12
  # `gradio_propertysheet`
13
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.18%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_propertysheet"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_propertysheet'>Component GitHub Code</a></span></p>
14
 
15
  The **PropertySheet** component for Gradio allows you to automatically generate a complete and interactive settings panel from a standard Python `dataclass`. It's designed to bring the power of IDE-like property editors directly into your Gradio applications.
16
 
 
50
  import json
51
  import gradio as gr
52
  from dataclasses import dataclass, field, asdict
53
+ from typing import List, Literal
54
  from gradio_propertysheet import PropertySheet
55
  from gradio_htmlinjector import HTMLInjector
56
 
57
+ PAG_LAYERS = {
58
+ "down.blocks.1": "down.blocks.1",
59
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
60
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
61
+ "down.blocks.2": "down.blocks.2",
62
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
63
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
64
+ "mid": "mid",
65
+ "up.blocks.0": "up.blocks.0",
66
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
67
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
68
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
69
+ "up.blocks.1": "up.blocks.1",
70
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
71
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
72
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
73
+ }
74
 
75
  # --- 1. Dataclass Definitions ---
76
+ @dataclass
77
+ class PAGSettings:
78
+ """Defines settings for Perturbed Attention Guidance."""
79
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
80
+
81
+ pag_layers: List[str] = field(
82
+ default_factory=list, # Use default_factory for mutable types like lists
83
+ metadata={
84
+ "component": "multiselect_checkbox", # Our new custom component type
85
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
86
+ "label": "PAG Layers",
87
+ "interactive_if": {"field": "enable_pag", "value": True},
88
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
89
+ }
90
+ )
91
+ pag_scale: float = field(default=3.0, metadata={
92
+ "component": "slider",
93
+ "label": "PAG Scale",
94
+ "minimum": 0.0,
95
+ "maximum": 1.0,
96
+ "step": 0.01
97
+ })
98
+
99
  @dataclass
100
  class EffectBase:
101
  """Base class with common effect settings."""
 
347
  default_factory=QuantizationSettings,
348
  metadata={"label": "Quantization Settings"}
349
  )
350
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
351
  tile_size: Literal[1024, 1280] = field(
352
  default=1280,
353
  metadata={
app.py CHANGED
@@ -2,12 +2,52 @@ import os
2
  import json
3
  import gradio as gr
4
  from dataclasses import dataclass, field, asdict
5
- from typing import Literal
6
  from gradio_propertysheet import PropertySheet
7
  from gradio_htmlinjector import HTMLInjector
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  @dataclass
12
  class EffectBase:
13
  """Base class with common effect settings."""
@@ -259,6 +299,7 @@ class RenderConfig:
259
  default_factory=QuantizationSettings,
260
  metadata={"label": "Quantization Settings"}
261
  )
 
262
  tile_size: Literal[1024, 1280] = field(
263
  default=1280,
264
  metadata={
 
2
  import json
3
  import gradio as gr
4
  from dataclasses import dataclass, field, asdict
5
+ from typing import List, Literal
6
  from gradio_propertysheet import PropertySheet
7
  from gradio_htmlinjector import HTMLInjector
8
 
9
+ PAG_LAYERS = {
10
+ "down.blocks.1": "down.blocks.1",
11
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
12
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
13
+ "down.blocks.2": "down.blocks.2",
14
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
15
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
16
+ "mid": "mid",
17
+ "up.blocks.0": "up.blocks.0",
18
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
19
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
20
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
21
+ "up.blocks.1": "up.blocks.1",
22
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
23
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
24
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
25
+ }
26
 
27
  # --- 1. Dataclass Definitions ---
28
+ @dataclass
29
+ class PAGSettings:
30
+ """Defines settings for Perturbed Attention Guidance."""
31
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
32
+
33
+ pag_layers: List[str] = field(
34
+ default_factory=list, # Use default_factory for mutable types like lists
35
+ metadata={
36
+ "component": "multiselect_checkbox", # Our new custom component type
37
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
38
+ "label": "PAG Layers",
39
+ "interactive_if": {"field": "enable_pag", "value": True},
40
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
41
+ }
42
+ )
43
+ pag_scale: float = field(default=3.0, metadata={
44
+ "component": "slider",
45
+ "label": "PAG Scale",
46
+ "minimum": 0.0,
47
+ "maximum": 1.0,
48
+ "step": 0.01
49
+ })
50
+
51
  @dataclass
52
  class EffectBase:
53
  """Base class with common effect settings."""
 
299
  default_factory=QuantizationSettings,
300
  metadata={"label": "Quantization Settings"}
301
  )
302
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
303
  tile_size: Literal[1024, 1280] = field(
304
  default=1280,
305
  metadata={
space.py CHANGED
@@ -42,12 +42,52 @@ import os
42
  import json
43
  import gradio as gr
44
  from dataclasses import dataclass, field, asdict
45
- from typing import Literal
46
  from gradio_propertysheet import PropertySheet
47
  from gradio_htmlinjector import HTMLInjector
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  @dataclass
52
  class EffectBase:
53
  \"\"\"Base class with common effect settings.\"\"\"
@@ -299,6 +339,7 @@ class RenderConfig:
299
  default_factory=QuantizationSettings,
300
  metadata={"label": "Quantization Settings"}
301
  )
 
302
  tile_size: Literal[1024, 1280] = field(
303
  default=1280,
304
  metadata={
 
42
  import json
43
  import gradio as gr
44
  from dataclasses import dataclass, field, asdict
45
+ from typing import List, Literal
46
  from gradio_propertysheet import PropertySheet
47
  from gradio_htmlinjector import HTMLInjector
48
 
49
+ PAG_LAYERS = {
50
+ "down.blocks.1": "down.blocks.1",
51
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
52
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
53
+ "down.blocks.2": "down.blocks.2",
54
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
55
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
56
+ "mid": "mid",
57
+ "up.blocks.0": "up.blocks.0",
58
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
59
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
60
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
61
+ "up.blocks.1": "up.blocks.1",
62
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
63
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
64
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
65
+ }
66
 
67
  # --- 1. Dataclass Definitions ---
68
+ @dataclass
69
+ class PAGSettings:
70
+ \"\"\"Defines settings for Perturbed Attention Guidance.\"\"\"
71
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
72
+
73
+ pag_layers: List[str] = field(
74
+ default_factory=list, # Use default_factory for mutable types like lists
75
+ metadata={
76
+ "component": "multiselect_checkbox", # Our new custom component type
77
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
78
+ "label": "PAG Layers",
79
+ "interactive_if": {"field": "enable_pag", "value": True},
80
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
81
+ }
82
+ )
83
+ pag_scale: float = field(default=3.0, metadata={
84
+ "component": "slider",
85
+ "label": "PAG Scale",
86
+ "minimum": 0.0,
87
+ "maximum": 1.0,
88
+ "step": 0.01
89
+ })
90
+
91
  @dataclass
92
  class EffectBase:
93
  \"\"\"Base class with common effect settings.\"\"\"
 
339
  default_factory=QuantizationSettings,
340
  metadata={"label": "Quantization Settings"}
341
  )
342
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
343
  tile_size: Literal[1024, 1280] = field(
344
  default=1280,
345
  metadata={
src/README.md CHANGED
@@ -10,7 +10,7 @@ app_file: space.py
10
  ---
11
 
12
  # `gradio_propertysheet`
13
- <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.17%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_propertysheet"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_propertysheet'>Component GitHub Code</a></span></p>
14
 
15
  The **PropertySheet** component for Gradio allows you to automatically generate a complete and interactive settings panel from a standard Python `dataclass`. It's designed to bring the power of IDE-like property editors directly into your Gradio applications.
16
 
@@ -50,12 +50,52 @@ import os
50
  import json
51
  import gradio as gr
52
  from dataclasses import dataclass, field, asdict
53
- from typing import Literal
54
  from gradio_propertysheet import PropertySheet
55
  from gradio_htmlinjector import HTMLInjector
56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  @dataclass
60
  class EffectBase:
61
  """Base class with common effect settings."""
@@ -307,6 +347,7 @@ class RenderConfig:
307
  default_factory=QuantizationSettings,
308
  metadata={"label": "Quantization Settings"}
309
  )
 
310
  tile_size: Literal[1024, 1280] = field(
311
  default=1280,
312
  metadata={
 
10
  ---
11
 
12
  # `gradio_propertysheet`
13
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.18%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_propertysheet"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_propertysheet'>Component GitHub Code</a></span></p>
14
 
15
  The **PropertySheet** component for Gradio allows you to automatically generate a complete and interactive settings panel from a standard Python `dataclass`. It's designed to bring the power of IDE-like property editors directly into your Gradio applications.
16
 
 
50
  import json
51
  import gradio as gr
52
  from dataclasses import dataclass, field, asdict
53
+ from typing import List, Literal
54
  from gradio_propertysheet import PropertySheet
55
  from gradio_htmlinjector import HTMLInjector
56
 
57
+ PAG_LAYERS = {
58
+ "down.blocks.1": "down.blocks.1",
59
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
60
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
61
+ "down.blocks.2": "down.blocks.2",
62
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
63
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
64
+ "mid": "mid",
65
+ "up.blocks.0": "up.blocks.0",
66
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
67
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
68
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
69
+ "up.blocks.1": "up.blocks.1",
70
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
71
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
72
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
73
+ }
74
 
75
  # --- 1. Dataclass Definitions ---
76
+ @dataclass
77
+ class PAGSettings:
78
+ """Defines settings for Perturbed Attention Guidance."""
79
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
80
+
81
+ pag_layers: List[str] = field(
82
+ default_factory=list, # Use default_factory for mutable types like lists
83
+ metadata={
84
+ "component": "multiselect_checkbox", # Our new custom component type
85
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
86
+ "label": "PAG Layers",
87
+ "interactive_if": {"field": "enable_pag", "value": True},
88
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
89
+ }
90
+ )
91
+ pag_scale: float = field(default=3.0, metadata={
92
+ "component": "slider",
93
+ "label": "PAG Scale",
94
+ "minimum": 0.0,
95
+ "maximum": 1.0,
96
+ "step": 0.01
97
+ })
98
+
99
  @dataclass
100
  class EffectBase:
101
  """Base class with common effect settings."""
 
347
  default_factory=QuantizationSettings,
348
  metadata={"label": "Quantization Settings"}
349
  )
350
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
351
  tile_size: Literal[1024, 1280] = field(
352
  default=1280,
353
  metadata={
src/backend/gradio_propertysheet/templates/component/index.js CHANGED
The diff for this file is too large to render. See raw diff
 
src/backend/gradio_propertysheet/templates/component/style.css CHANGED
@@ -1 +1 @@
1
- .block.svelte-239wnu{position:relative;margin:0;box-shadow:var(--block-shadow);border-width:var(--block-border-width);border-color:var(--block-border-color);border-radius:var(--block-radius);background:var(--block-background-fill);width:100%;line-height:var(--line-sm)}.block.fullscreen.svelte-239wnu{border-radius:0}.auto-margin.svelte-239wnu{margin-left:auto;margin-right:auto}.block.border_focus.svelte-239wnu{border-color:var(--color-accent)}.block.border_contrast.svelte-239wnu{border-color:var(--body-text-color)}.padded.svelte-239wnu{padding:var(--block-padding)}.hidden.svelte-239wnu{display:none}.flex.svelte-239wnu{display:flex;flex-direction:column}.hide-container.svelte-239wnu:not(.fullscreen){margin:0;box-shadow:none;--block-border-width:0;background:transparent;padding:0;overflow:visible}.resize-handle.svelte-239wnu{position:absolute;bottom:0;right:0;width:10px;height:10px;fill:var(--block-border-color);cursor:nwse-resize}.fullscreen.svelte-239wnu{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000;overflow:auto}.animating.svelte-239wnu{animation:svelte-239wnu-pop-out .1s ease-out forwards}@keyframes svelte-239wnu-pop-out{0%{position:fixed;top:var(--start-top);left:var(--start-left);width:var(--start-width);height:var(--start-height);z-index:100}to{position:fixed;top:0vh;left:0vw;width:100vw;height:100vh;z-index:1000}}.placeholder.svelte-239wnu{border-radius:var(--block-radius);border-width:var(--block-border-width);border-color:var(--block-border-color);border-style:dashed}Tables */ table,tr,td,th{margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);padding:var(--spacing-xl)}.md code,.md pre{background:none;font-family:var(--font-mono);font-size:var(--text-sm);text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none}.md pre[class*=language-]::selection,.md pre[class*=language-] ::selection,.md code[class*=language-]::selection,.md code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}.md pre{padding:1em;margin:.5em 0;overflow:auto;position:relative;margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);box-shadow:none;border:none;border-radius:var(--radius-md);background:var(--code-background-fill);padding:var(--spacing-xxl);font-family:var(--font-mono);text-shadow:none;border-radius:var(--radius-sm);white-space:nowrap;display:block;white-space:pre}.md :not(pre)>code{padding:.1em;border-radius:var(--radius-xs);white-space:normal;background:var(--code-background-fill);border:1px solid var(--panel-border-color);padding:var(--spacing-xxs) var(--spacing-xs)}.md .token.comment,.md .token.prolog,.md .token.doctype,.md .token.cdata{color:#708090}.md .token.punctuation{color:#999}.md .token.namespace{opacity:.7}.md .token.property,.md .token.tag,.md .token.boolean,.md .token.number,.md .token.constant,.md .token.symbol,.md .token.deleted{color:#905}.md .token.selector,.md .token.attr-name,.md .token.string,.md .token.char,.md .token.builtin,.md .token.inserted{color:#690}.md .token.atrule,.md .token.attr-value,.md .token.keyword{color:#07a}.md .token.function,.md .token.class-name{color:#dd4a68}.md .token.regex,.md .token.important,.md .token.variable{color:#e90}.md .token.important,.md .token.bold{font-weight:700}.md .token.italic{font-style:italic}.md .token.entity{cursor:help}.dark .md .token.comment,.dark .md .token.prolog,.dark .md .token.cdata{color:#5c6370}.dark .md .token.doctype,.dark .md .token.punctuation,.dark .md .token.entity{color:#abb2bf}.dark .md .token.attr-name,.dark .md .token.class-name,.dark .md .token.boolean,.dark .md .token.constant,.dark .md .token.number,.dark .md .token.atrule{color:#d19a66}.dark .md .token.keyword{color:#c678dd}.dark .md .token.property,.dark .md .token.tag,.dark .md .token.symbol,.dark .md .token.deleted,.dark .md .token.important{color:#e06c75}.dark .md .token.selector,.dark .md .token.string,.dark .md .token.char,.dark .md .token.builtin,.dark .md .token.inserted,.dark .md .token.regex,.dark .md .token.attr-value,.dark .md .token.attr-value>.token.punctuation{color:#98c379}.dark .md .token.variable,.dark .md .token.operator,.dark .md .token.function{color:#61afef}.dark .md .token.url{color:#56b6c2}span.svelte-1m32c2s div[class*=code_wrap]{position:relative}span.svelte-1m32c2s span.katex{font-size:var(--text-lg);direction:ltr}span.svelte-1m32c2s div[class*=code_wrap]>button{z-index:1;cursor:pointer;border-bottom-left-radius:var(--radius-sm);padding:var(--spacing-md);width:25px;height:25px;position:absolute;right:0}span.svelte-1m32c2s .check{opacity:0;z-index:var(--layer-top);transition:opacity .2s;background:var(--code-background-fill);color:var(--body-text-color);position:absolute;top:var(--size-1-5);left:var(--size-1-5)}span.svelte-1m32c2s p:not(:first-child){margin-top:var(--spacing-xxl)}span.svelte-1m32c2s .md-header-anchor{margin-left:-25px;padding-right:8px;line-height:1;color:var(--body-text-color-subdued);opacity:0}span.svelte-1m32c2s h1:hover .md-header-anchor,span.svelte-1m32c2s h2:hover .md-header-anchor,span.svelte-1m32c2s h3:hover .md-header-anchor,span.svelte-1m32c2s h4:hover .md-header-anchor,span.svelte-1m32c2s h5:hover .md-header-anchor,span.svelte-1m32c2s h6:hover .md-header-anchor{opacity:1}span.md.svelte-1m32c2s .md-header-anchor>svg{color:var(--body-text-color-subdued)}span.svelte-1m32c2s table{word-break:break-word}div.svelte-17qq50w>.md.prose{font-weight:var(--block-info-text-weight);font-size:var(--block-info-text-size);line-height:var(--line-sm)}div.svelte-17qq50w>.md.prose *{color:var(--block-info-text-color)}div.svelte-17qq50w{margin-bottom:var(--spacing-md)}span.has-info.svelte-zgrq3{margin-bottom:var(--spacing-xs)}span.svelte-zgrq3:not(.has-info){margin-bottom:var(--spacing-lg)}span.svelte-zgrq3{display:inline-block;position:relative;z-index:var(--layer-4);border:solid var(--block-title-border-width) var(--block-title-border-color);border-radius:var(--block-title-radius);background:var(--block-title-background-fill);padding:var(--block-title-padding);color:var(--block-title-text-color);font-weight:var(--block-title-text-weight);font-size:var(--block-title-text-size);line-height:var(--line-sm)}span[dir=rtl].svelte-zgrq3{display:block}.hide.svelte-zgrq3{margin:0;height:0}label.svelte-13ao5pu.svelte-13ao5pu{display:inline-flex;align-items:center;z-index:var(--layer-2);box-shadow:var(--block-label-shadow);border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-left:none;border-radius:var(--block-label-radius);background:var(--block-label-background-fill);padding:var(--block-label-padding);pointer-events:none;color:var(--block-label-text-color);font-weight:var(--block-label-text-weight);font-size:var(--block-label-text-size);line-height:var(--line-sm)}.gr-group label.svelte-13ao5pu.svelte-13ao5pu{border-top-left-radius:0}label.float.svelte-13ao5pu.svelte-13ao5pu{position:absolute;top:var(--block-label-margin);left:var(--block-label-margin)}label.svelte-13ao5pu.svelte-13ao5pu:not(.float){position:static;margin-top:var(--block-label-margin);margin-left:var(--block-label-margin)}.hide.svelte-13ao5pu.svelte-13ao5pu{height:0}span.svelte-13ao5pu.svelte-13ao5pu{opacity:.8;margin-right:var(--size-2);width:calc(var(--block-label-text-size) - 1px);height:calc(var(--block-label-text-size) - 1px)}.hide-label.svelte-13ao5pu.svelte-13ao5pu{box-shadow:none;border-width:0;background:transparent;overflow:visible}label[dir=rtl].svelte-13ao5pu.svelte-13ao5pu{border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-right:none;border-bottom-left-radius:var(--block-radius);border-bottom-right-radius:var(--block-label-radius);border-top-left-radius:var(--block-label-radius)}label[dir=rtl].svelte-13ao5pu span.svelte-13ao5pu{margin-left:var(--size-2);margin-right:0}button.svelte-qgco6m{display:flex;justify-content:center;align-items:center;gap:1px;z-index:var(--layer-2);border-radius:var(--radius-xs);color:var(--block-label-text-color);border:1px solid transparent;padding:var(--spacing-xxs)}button.svelte-qgco6m:hover{background-color:var(--background-fill-secondary)}button[disabled].svelte-qgco6m{opacity:.5;box-shadow:none}button[disabled].svelte-qgco6m:hover{cursor:not-allowed}.padded.svelte-qgco6m{background:var(--bg-color)}button.svelte-qgco6m:hover,button.highlight.svelte-qgco6m{cursor:pointer;color:var(--color-accent)}.padded.svelte-qgco6m:hover{color:var(--block-label-text-color)}span.svelte-qgco6m{padding:0 1px;font-size:10px}div.svelte-qgco6m{display:flex;align-items:center;justify-content:center;transition:filter .2s ease-in-out}.x-small.svelte-qgco6m{width:10px;height:10px}.small.svelte-qgco6m{width:14px;height:14px}.medium.svelte-qgco6m{width:20px;height:20px}.large.svelte-qgco6m{width:22px;height:22px}.pending.svelte-qgco6m{animation:svelte-qgco6m-flash .5s infinite}@keyframes svelte-qgco6m-flash{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.transparent.svelte-qgco6m{background:transparent;border:none;box-shadow:none}.empty.svelte-3w3rth{display:flex;justify-content:center;align-items:center;margin-top:calc(0px - var(--size-6));height:var(--size-full)}.icon.svelte-3w3rth{opacity:.5;height:var(--size-5);color:var(--body-text-color)}.small.svelte-3w3rth{min-height:calc(var(--size-32) - 20px)}.large.svelte-3w3rth{min-height:calc(var(--size-64) - 20px)}.unpadded_box.svelte-3w3rth{margin-top:0}.small_parent.svelte-3w3rth{min-height:100%!important}.dropdown-arrow.svelte-145leq6,.dropdown-arrow.svelte-ihhdbf{fill:currentColor}.circle.svelte-ihhdbf{fill:currentColor;opacity:.1}svg.svelte-pb9pol{animation:svelte-pb9pol-spin 1.5s linear infinite}@keyframes svelte-pb9pol-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2.svelte-1xg7h5n{font-size:var(--text-xl)!important}p.svelte-1xg7h5n,h2.svelte-1xg7h5n{white-space:pre-line}.wrap.svelte-1xg7h5n{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:var(--size-60);color:var(--block-label-text-color);line-height:var(--line-md);height:100%;padding-top:var(--size-3);text-align:center;margin:auto var(--spacing-lg)}.or.svelte-1xg7h5n{color:var(--body-text-color-subdued);display:flex}.icon-wrap.svelte-1xg7h5n{width:30px;margin-bottom:var(--spacing-lg)}@media (--screen-md){.wrap.svelte-1xg7h5n{font-size:var(--text-lg)}}.hovered.svelte-1xg7h5n{color:var(--color-accent)}div.svelte-q32hvf{border-top:1px solid transparent;display:flex;max-height:100%;justify-content:center;align-items:center;gap:var(--spacing-sm);height:auto;align-items:flex-end;color:var(--block-label-text-color);flex-shrink:0}.show_border.svelte-q32hvf{border-top:1px solid var(--block-border-color);margin-top:var(--spacing-xxl);box-shadow:var(--shadow-drop)}.source-selection.svelte-15ls1gu{display:flex;align-items:center;justify-content:center;border-top:1px solid var(--border-color-primary);width:100%;margin-left:auto;margin-right:auto;height:var(--size-10)}.icon.svelte-15ls1gu{width:22px;height:22px;margin:var(--spacing-lg) var(--spacing-xs);padding:var(--spacing-xs);color:var(--neutral-400);border-radius:var(--radius-md)}.selected.svelte-15ls1gu{color:var(--color-accent)}.icon.svelte-15ls1gu:hover,.icon.svelte-15ls1gu:focus{color:var(--color-accent)}.icon-button-wrapper.svelte-109se4{display:flex;flex-direction:row;align-items:center;justify-content:center;z-index:var(--layer-3);gap:var(--spacing-sm);box-shadow:var(--shadow-drop);border:1px solid var(--border-color-primary);background:var(--block-background-fill);padding:var(--spacing-xxs)}.icon-button-wrapper.hide-top-corner.svelte-109se4{border-top:none;border-right:none;border-radius:var(--block-label-right-radius)}.icon-button-wrapper.display-top-corner.svelte-109se4{border-radius:var(--radius-sm) 0 0 var(--radius-sm);top:var(--spacing-sm);right:-1px}.icon-button-wrapper.svelte-109se4:not(.top-panel){border:1px solid var(--border-color-primary);border-radius:var(--radius-sm)}.top-panel.svelte-109se4{position:absolute;top:var(--block-label-margin);right:var(--block-label-margin);margin:0}.icon-button-wrapper.svelte-109se4 button{margin:var(--spacing-xxs);border-radius:var(--radius-xs);position:relative}.icon-button-wrapper.svelte-109se4 a.download-link:not(:last-child),.icon-button-wrapper.svelte-109se4 button:not(:last-child){margin-right:var(--spacing-xxs)}.icon-button-wrapper.svelte-109se4 a.download-link:not(:last-child):not(.no-border *):after,.icon-button-wrapper.svelte-109se4 button:not(:last-child):not(.no-border *):after{content:"";position:absolute;right:-4.5px;top:15%;height:70%;width:1px;background-color:var(--border-color-primary)}.icon-button-wrapper.svelte-109se4>*{height:100%}svg.svelte-43sxxs.svelte-43sxxs{width:var(--size-20);height:var(--size-20)}svg.svelte-43sxxs path.svelte-43sxxs{fill:var(--loader-color)}div.svelte-43sxxs.svelte-43sxxs{z-index:var(--layer-2)}.margin.svelte-43sxxs.svelte-43sxxs{margin:var(--size-4)}.wrap.svelte-17v219f.svelte-17v219f{display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:var(--layer-2);transition:opacity .1s ease-in-out;border-radius:var(--block-radius);background:var(--block-background-fill);padding:0 var(--size-6);max-height:var(--size-screen-h);overflow:hidden}.wrap.center.svelte-17v219f.svelte-17v219f{top:0;right:0;left:0}.wrap.default.svelte-17v219f.svelte-17v219f{top:0;right:0;bottom:0;left:0}.hide.svelte-17v219f.svelte-17v219f{opacity:0;pointer-events:none}.generating.svelte-17v219f.svelte-17v219f{animation:svelte-17v219f-pulseStart 1s cubic-bezier(.4,0,.6,1),svelte-17v219f-pulse 2s cubic-bezier(.4,0,.6,1) 1s infinite;border:2px solid var(--color-accent);background:transparent;z-index:var(--layer-1);pointer-events:none}.translucent.svelte-17v219f.svelte-17v219f{background:none}@keyframes svelte-17v219f-pulseStart{0%{opacity:0}to{opacity:1}}@keyframes svelte-17v219f-pulse{0%,to{opacity:1}50%{opacity:.5}}.loading.svelte-17v219f.svelte-17v219f{z-index:var(--layer-2);color:var(--body-text-color)}.eta-bar.svelte-17v219f.svelte-17v219f{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;opacity:.8;z-index:var(--layer-1);transition:10ms;background:var(--background-fill-secondary)}.progress-bar-wrap.svelte-17v219f.svelte-17v219f{border:1px solid var(--border-color-primary);background:var(--background-fill-primary);width:55.5%;height:var(--size-4)}.progress-bar.svelte-17v219f.svelte-17v219f{transform-origin:left;background-color:var(--loader-color);width:var(--size-full);height:var(--size-full)}.progress-level.svelte-17v219f.svelte-17v219f{display:flex;flex-direction:column;align-items:center;gap:1;z-index:var(--layer-2);width:var(--size-full)}.progress-level-inner.svelte-17v219f.svelte-17v219f{margin:var(--size-2) auto;color:var(--body-text-color);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text.svelte-17v219f.svelte-17v219f{position:absolute;bottom:0;right:0;z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text-center.svelte-17v219f.svelte-17v219f{display:flex;position:absolute;top:0;right:0;justify-content:center;align-items:center;transform:translateY(var(--size-6));z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono);text-align:center}.error.svelte-17v219f.svelte-17v219f{box-shadow:var(--shadow-drop);border:solid 1px var(--error-border-color);border-radius:var(--radius-full);background:var(--error-background-fill);padding-right:var(--size-4);padding-left:var(--size-4);color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font)}.minimal.svelte-17v219f.svelte-17v219f{pointer-events:none}.minimal.svelte-17v219f .progress-text.svelte-17v219f{background:var(--block-background-fill)}.border.svelte-17v219f.svelte-17v219f{border:1px solid var(--border-color-primary)}.clear-status.svelte-17v219f.svelte-17v219f{position:absolute;display:flex;top:var(--size-2);right:var(--size-2);justify-content:flex-end;gap:var(--spacing-sm);z-index:var(--layer-1)}.toast-body.svelte-1pgj5gs{display:flex;position:relative;right:0;left:0;align-items:center;margin:var(--size-6) var(--size-4);margin:auto;border-radius:var(--container-radius);overflow:hidden;pointer-events:auto}.toast-body.error.svelte-1pgj5gs{border:1px solid var(--color-red-700);background:var(--color-red-50)}.dark .toast-body.error.svelte-1pgj5gs{border:1px solid var(--color-red-500);background-color:var(--color-grey-950)}.toast-body.warning.svelte-1pgj5gs{border:1px solid var(--color-yellow-700);background:var(--color-yellow-50)}.dark .toast-body.warning.svelte-1pgj5gs{border:1px solid var(--color-yellow-500);background-color:var(--color-grey-950)}.toast-body.info.svelte-1pgj5gs{border:1px solid var(--color-grey-700);background:var (--color-grey-50)}.dark .toast-body.info.svelte-1pgj5gs{border:1px solid var(--color-grey-500);background-color:var(--color-grey-950)}.toast-body.success.svelte-1pgj5gs{border:1px solid var(--color-green-700);background:var(--color-green-50)}.dark .toast-body.success.svelte-1pgj5gs{border:1px solid var(--color-green-500);background-color:var(--color-grey-950)}.toast-title.svelte-1pgj5gs{display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-lg);line-height:var(--line-sm)}.toast-title.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-title.error.svelte-1pgj5gs{color:var(--color-red-50)}.toast-title.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-title.warning.svelte-1pgj5gs{color:var(--color-yellow-50)}.toast-title.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-title.info.svelte-1pgj5gs{color:var(--color-grey-50)}.toast-title.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-title.success.svelte-1pgj5gs{color:var(--color-green-50)}.toast-close.svelte-1pgj5gs{margin:0 var(--size-3);border-radius:var(--size-3);padding:0px var(--size-1-5);font-size:var(--size-5);line-height:var(--size-5)}.toast-close.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-close.error.svelte-1pgj5gs{color:var(--color-red-500)}.toast-close.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-close.warning.svelte-1pgj5gs{color:var(--color-yellow-500)}.toast-close.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-close.info.svelte-1pgj5gs{color:var(--color-grey-500)}.toast-close.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-close.success.svelte-1pgj5gs{color:var(--color-green-500)}.toast-text.svelte-1pgj5gs{font-size:var(--text-lg);word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.toast-text.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-text.error.svelte-1pgj5gs{color:var(--color-red-50)}.toast-text.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-text.warning.svelte-1pgj5gs{color:var(--color-yellow-50)}.toast-text.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-text.info.svelte-1pgj5gs{color:var(--color-grey-50)}.toast-text.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-text.success.svelte-1pgj5gs{color:var(--color-green-50)}.toast-details.svelte-1pgj5gs{margin:var(--size-3) var(--size-3) var(--size-3) 0;width:100%}.toast-icon.svelte-1pgj5gs{display:flex;position:absolute;position:relative;flex-shrink:0;justify-content:center;align-items:center;margin:var(--size-2);border-radius:var(--radius-full);padding:var(--size-1);padding-left:calc(var(--size-1) - 1px);width:35px;height:35px}.toast-icon.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-icon.error.svelte-1pgj5gs{color:var(--color-red-500)}.toast-icon.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-icon.warning.svelte-1pgj5gs{color:var(--color-yellow-500)}.toast-icon.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-icon.info.svelte-1pgj5gs{color:var(--color-grey-500)}.toast-icon.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-icon.success.svelte-1pgj5gs{color:var(--color-green-500)}@keyframes svelte-1pgj5gs-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.timer.svelte-1pgj5gs{position:absolute;bottom:0;left:0;transform-origin:0 0;animation:svelte-1pgj5gs-countdown 10s linear forwards;width:100%;height:var(--size-1)}.timer.error.svelte-1pgj5gs{background:var(--color-red-700)}.dark .timer.error.svelte-1pgj5gs{background:var(--color-red-500)}.timer.warning.svelte-1pgj5gs{background:var(--color-yellow-700)}.dark .timer.warning.svelte-1pgj5gs{background:var(--color-yellow-500)}.timer.info.svelte-1pgj5gs{background:var(--color-grey-700)}.dark .timer.info.svelte-1pgj5gs{background:var(--color-grey-500)}.timer.success.svelte-1pgj5gs{background:var(--color-green-700)}.dark .timer.success.svelte-1pgj5gs{background:var(--color-green-500)}.hidden.svelte-1pgj5gs{display:none}.toast-text.svelte-1pgj5gs a{text-decoration:underline}.toast-wrap.svelte-gatr8h{display:flex;position:fixed;top:var(--size-4);right:var(--size-4);flex-direction:column;align-items:end;gap:var(--size-2);z-index:var(--layer-top);width:calc(100% - var(--size-8))}@media (--screen-sm){.toast-wrap.svelte-gatr8h{width:calc(var(--size-96) + var(--size-10))}}.streaming-bar.svelte-ga0jj6{position:absolute;bottom:0;left:0;right:0;height:4px;background-color:var(--primary-600);animation:svelte-ga0jj6-countdown linear forwards;z-index:1}@keyframes svelte-ga0jj6-countdown{0%{transform:translate(0)}to{transform:translate(-100%)}}:host{display:flex;flex-direction:column;height:100%}.propertysheet-wrapper{overflow:hidden!important;display:flex;flex-direction:column;flex-grow:1;padding:var(--spacing-lg)!important}.accordion-header.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;justify-content:space-between;align-items:center;width:100%;cursor:pointer;padding:var(--block-title-padding);background:var(--block-title-background-fill);color:var(--block-title-text-color);border-width:0;flex-shrink:0}.accordion-icon.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{margin-left:auto}.content-wrapper.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{flex-grow:1;min-height:0}.container.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{overflow-y:auto;height:auto;max-height:var(--sheet-max-height, 500px);border-radius:0!important;border:1px solid var(--border-color-primary);border-top:var(--show-group-name);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);background-color:var(--background-fill-secondary)}.closed.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:none}.group-header.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--spacing-sm) var(--spacing-md);background-color:var(--input-background-fill);color:var(--body-text-color);text-align:left;cursor:pointer;font-size:var(--text-md);font-weight:var(--font-weight-bold);border:1px solid var(--border-color-primary)}.properties-grid.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:grid;grid-template-columns:1fr 2fr;gap:0;padding:0}.prop-label.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj,.prop-control.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{padding:var(--spacing-sm) var(--spacing-md);display:flex;align-items:center;border-bottom:1px solid var(--background-fill-secondary)}.prop-label.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{background-color:var(--background-fill-primary);color:var(--body-text-color);opacity:3.7;font-weight:var(--font-weight-semibold);font-size:var(--text-xs);text-align:right;justify-content:flex-end;word-break:break-word}.prop-control.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{gap:var(--spacing-sm)}.properties-grid.svelte-1eiz7kj>.svelte-1eiz7kj.svelte-1eiz7kj:nth-last-child(-n+2){border-bottom:none}.prop-control.svelte-1eiz7kj input[type=text].svelte-1eiz7kj.svelte-1eiz7kj,.prop-control.svelte-1eiz7kj input[type=password].svelte-1eiz7kj.svelte-1eiz7kj,.prop-control.svelte-1eiz7kj input[type=number].svelte-1eiz7kj.svelte-1eiz7kj{background-color:var(--input-background-fill);border:var(--input-border-width) solid var(--border-color-primary);box-shadow:var(--input-shadow);color:var(--input-text-color);font-size:var(--input-text-size);border-radius:0;width:100%;padding-top:var(--spacing-1);padding-bottom:var(--spacing-1);padding-left:var(--spacing-md);padding-right:var(--spacing-3)}.prop-control.svelte-1eiz7kj input[type=text].svelte-1eiz7kj.svelte-1eiz7kj:focus,.prop-control.svelte-1eiz7kj input[type=number].svelte-1eiz7kj.svelte-1eiz7kj:focus{box-shadow:var(--input-shadow-focus);border-color:var(--input-border-color-focus);background-color:var(--input-background-fill-focus);outline:none}.dropdown-wrapper.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{position:relative;width:100%}.dropdown-wrapper.svelte-1eiz7kj select.svelte-1eiz7kj.svelte-1eiz7kj{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-fill);border:var(--input-border-width) solid var(--border-color-primary);box-shadow:var(--input-shadow);color:var(--input-text-color);font-size:var(--input-text-size);width:100%;cursor:pointer;border-radius:0;padding-top:var(--spacing-1);padding-bottom:var(--spacing-1);padding-left:var(--spacing-md);padding-right:calc(var(--spacing-3) + 1.2em)}.dropdown-arrow-icon.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{position:absolute;top:50%;right:var(--spacing-3);transform:translateY(-50%);width:1em;height:1em;pointer-events:none;z-index:1;background-color:var(--body-text-color-subdued);-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M6 8l4 4 4-4'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M6 8l4 4 4-4'%3e%3c/svg%3e")}.dropdown-wrapper.svelte-1eiz7kj select.svelte-1eiz7kj.svelte-1eiz7kj:focus{box-shadow:var(--input-shadow-focus);border-color:var(--input-border-color-focus);background-color:var(--input-background-fill-focus);outline:none}.dropdown-wrapper.svelte-1eiz7kj select option.svelte-1eiz7kj.svelte-1eiz7kj{background:var(--input-background-fill);color:var(--body-text-color)}.prop-control.svelte-1eiz7kj input[type=checkbox].svelte-1eiz7kj.svelte-1eiz7kj{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;width:var(--size-4);height:var(--size-4);border-radius:5px!important;border:1px solid var(--checkbox-border-color);background-color:var(--checkbox-background-color);box-shadow:var(--checkbox-shadow);cursor:pointer;margin:0;transition:background-color .2s,border-color .2s}.prop-control.svelte-1eiz7kj input[type=checkbox].svelte-1eiz7kj.svelte-1eiz7kj:hover{border-color:var(--checkbox-border-color-hover);background-color:var(--checkbox-background-color-hover)}.prop-control.svelte-1eiz7kj input[type=checkbox].svelte-1eiz7kj.svelte-1eiz7kj:focus{border-color:var(--checkbox-border-color-focus);background-color:var(--checkbox-background-color-focus);outline:none}.prop-control.svelte-1eiz7kj input[type=checkbox].svelte-1eiz7kj.svelte-1eiz7kj:checked{background-color:var(--checkbox-background-color-selected);border-color:var(--checkbox-border-color-focus)}.prop-control.svelte-1eiz7kj input[type=checkbox].svelte-1eiz7kj.svelte-1eiz7kj:checked:after{content:"";position:absolute;display:block;top:50%;left:50%;width:4px;height:8px;border:solid var(--checkbox-label-text-color-selected);border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.slider-container.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;align-items:center;gap:var(--spacing-md);width:100%}.slider-container.svelte-1eiz7kj input[type=range].svelte-1eiz7kj.svelte-1eiz7kj{--slider-progress:0%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;cursor:pointer;width:100%}.slider-container.svelte-1eiz7kj input[type=range].svelte-1eiz7kj.svelte-1eiz7kj::-webkit-slider-runnable-track{height:8px;border-radius:var(--radius-lg);background:linear-gradient(to right,var(--slider-color) var(--slider-progress),var(--input-background-fill) var(--slider-progress))}.slider-container.svelte-1eiz7kj input[type=range].svelte-1eiz7kj.svelte-1eiz7kj::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin-top:-4px;background-color:#fff;border-radius:50%;height:16px;width:16px;border:1px solid var(--border-color-primary);box-shadow:var(--shadow-drop)}.slider-container.svelte-1eiz7kj input[type=range].svelte-1eiz7kj.svelte-1eiz7kj::-moz-range-track{height:8px;border-radius:var(--radius-lg);background:linear-gradient(to right,var(--slider-color) var(--slider-progress),var(--input-background-fill) var(--slider-progress))}.slider-container.svelte-1eiz7kj input[type=range].svelte-1eiz7kj.svelte-1eiz7kj::-moz-range-thumb{background-color:#fff;border-radius:50%;height:16px;width:16px;border:1px solid var(--border-color-primary);box-shadow:var(--shadow-drop)}.slider-value.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{min-width:40px;text-align:right;font-family:var(--font-mono);font-size:var(--text-xs)}.prop-label-wrapper.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-sm);width:100%}.tooltip-container.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{position:relative;display:inline-flex;align-items:center;justify-content:center}.tooltip-icon.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background-color:var(--body-text-color-subdued);color:var(--background-fill-primary);font-size:10px;font-weight:700;cursor:help;-webkit-user-select:none;user-select:none}.tooltip-text.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{visibility:hidden;width:200px;background-color:var(--body-text-color);color:var(--background-fill-primary);text-align:center;border-radius:var(--radius-md);padding:var(--spacing-md);position:absolute;z-index:50;bottom:-50%;left:100%;transform:translate(-50%);opacity:0;transition:opacity .3s}.tooltip-container.svelte-1eiz7kj:hover .tooltip-text.svelte-1eiz7kj.svelte-1eiz7kj{visibility:visible;opacity:1}.color-picker-container.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;align-items:center;gap:var(--spacing-md);width:100%}.color-picker-input.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{width:50px;height:28px;background-color:transparent;border:1px solid var(--border-color-primary);border-radius:var(--radius-sm);cursor:pointer;padding:0}.color-picker-input.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj::-webkit-color-swatch-wrapper{padding:2px}.color-picker-input.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj::-moz-padding{padding:2px}.color-picker-input.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj::-webkit-color-swatch{border:none;border-radius:var(--radius-sm)}.color-picker-input.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj::-moz-color-swatch{border:none;border-radius:var(--radius-sm)}.color-picker-value.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--body-text-color-subdued)}.prop-control.svelte-1eiz7kj input.invalid.svelte-1eiz7kj.svelte-1eiz7kj{border-color:var(--error-border-color, red)!important;box-shadow:0 0 0 1px var(--error-border-color, red)!important}.reset-button-prop.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;align-items:center;justify-content:center;background:none;border:none;border-left:1px solid var(--border-color-primary);cursor:pointer;color:var(--body-text-color-subdued);font-size:var(--text-lg);padding:0 var(--spacing-2);visibility:hidden;opacity:0;transition:opacity .15s ease-in-out,color .15s ease-in-out}.reset-button-prop.visible.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{visibility:visible;opacity:1}.reset-button-prop.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj:hover{color:var(--body-text-color);background-color:var(--background-fill-secondary-hover)}.reset-button-prop.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj:disabled{color:var(--body-text-color-subdued)!important;opacity:.5;cursor:not-allowed;background-color:transparent!important}.prop-control.svelte-1eiz7kj .disabled.svelte-1eiz7kj.svelte-1eiz7kj{opacity:.5;pointer-events:none;cursor:not-allowed}.prop-control.svelte-1eiz7kj .disabled input.svelte-1eiz7kj.svelte-1eiz7kj{cursor:not-allowed}.reset-button-prop.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj:disabled{opacity:.3;cursor:not-allowed;background-color:transparent!important}.radio-group.svelte-1eiz7kj.svelte-1eiz7kj.svelte-1eiz7kj{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);width:100%}.radio-item.svelte-1eiz7kj input[type=radio].svelte-1eiz7kj.svelte-1eiz7kj{display:none}.radio-item.svelte-1eiz7kj label.svelte-1eiz7kj.svelte-1eiz7kj{display:inline-block;padding:var(--spacing-xs) var(--spacing-md);border:1px solid var(--border-color-primary);border-radius:5px!important;background-color:var(--input-background-fill);color:var(--body-text-color);font-size:var(--text-xs);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s,border-color .2s,color .2s}.radio-group.disabled.svelte-1eiz7kj .radio-item label.svelte-1eiz7kj.svelte-1eiz7kj{cursor:not-allowed}.radio-item.svelte-1eiz7kj input[type=radio].svelte-1eiz7kj:hover+label.svelte-1eiz7kj{border-color:var(--border-color-accent-subdued);background-color:var(--background-fill-secondary-hover)}.radio-item.svelte-1eiz7kj input[type=radio].svelte-1eiz7kj:checked+label.svelte-1eiz7kj{background-color:var(--primary-500);border-color:var(--primary-500);color:#fff;font-weight:var(--font-weight-bold)}.radio-group.disabled.svelte-1eiz7kj .radio-item input[type=radio].svelte-1eiz7kj:checked+label.svelte-1eiz7kj{background-color:var(--neutral-300);border-color:var(--neutral-300);color:var(--neutral-500)}
 
1
+ .block.svelte-239wnu{position:relative;margin:0;box-shadow:var(--block-shadow);border-width:var(--block-border-width);border-color:var(--block-border-color);border-radius:var(--block-radius);background:var(--block-background-fill);width:100%;line-height:var(--line-sm)}.block.fullscreen.svelte-239wnu{border-radius:0}.auto-margin.svelte-239wnu{margin-left:auto;margin-right:auto}.block.border_focus.svelte-239wnu{border-color:var(--color-accent)}.block.border_contrast.svelte-239wnu{border-color:var(--body-text-color)}.padded.svelte-239wnu{padding:var(--block-padding)}.hidden.svelte-239wnu{display:none}.flex.svelte-239wnu{display:flex;flex-direction:column}.hide-container.svelte-239wnu:not(.fullscreen){margin:0;box-shadow:none;--block-border-width:0;background:transparent;padding:0;overflow:visible}.resize-handle.svelte-239wnu{position:absolute;bottom:0;right:0;width:10px;height:10px;fill:var(--block-border-color);cursor:nwse-resize}.fullscreen.svelte-239wnu{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000;overflow:auto}.animating.svelte-239wnu{animation:svelte-239wnu-pop-out .1s ease-out forwards}@keyframes svelte-239wnu-pop-out{0%{position:fixed;top:var(--start-top);left:var(--start-left);width:var(--start-width);height:var(--start-height);z-index:100}to{position:fixed;top:0vh;left:0vw;width:100vw;height:100vh;z-index:1000}}.placeholder.svelte-239wnu{border-radius:var(--block-radius);border-width:var(--block-border-width);border-color:var(--block-border-color);border-style:dashed}Tables */ table,tr,td,th{margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);padding:var(--spacing-xl)}.md code,.md pre{background:none;font-family:var(--font-mono);font-size:var(--text-sm);text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none}.md pre[class*=language-]::selection,.md pre[class*=language-] ::selection,.md code[class*=language-]::selection,.md code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}.md pre{padding:1em;margin:.5em 0;overflow:auto;position:relative;margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);box-shadow:none;border:none;border-radius:var(--radius-md);background:var(--code-background-fill);padding:var(--spacing-xxl);font-family:var(--font-mono);text-shadow:none;border-radius:var(--radius-sm);white-space:nowrap;display:block;white-space:pre}.md :not(pre)>code{padding:.1em;border-radius:var(--radius-xs);white-space:normal;background:var(--code-background-fill);border:1px solid var(--panel-border-color);padding:var(--spacing-xxs) var(--spacing-xs)}.md .token.comment,.md .token.prolog,.md .token.doctype,.md .token.cdata{color:#708090}.md .token.punctuation{color:#999}.md .token.namespace{opacity:.7}.md .token.property,.md .token.tag,.md .token.boolean,.md .token.number,.md .token.constant,.md .token.symbol,.md .token.deleted{color:#905}.md .token.selector,.md .token.attr-name,.md .token.string,.md .token.char,.md .token.builtin,.md .token.inserted{color:#690}.md .token.atrule,.md .token.attr-value,.md .token.keyword{color:#07a}.md .token.function,.md .token.class-name{color:#dd4a68}.md .token.regex,.md .token.important,.md .token.variable{color:#e90}.md .token.important,.md .token.bold{font-weight:700}.md .token.italic{font-style:italic}.md .token.entity{cursor:help}.dark .md .token.comment,.dark .md .token.prolog,.dark .md .token.cdata{color:#5c6370}.dark .md .token.doctype,.dark .md .token.punctuation,.dark .md .token.entity{color:#abb2bf}.dark .md .token.attr-name,.dark .md .token.class-name,.dark .md .token.boolean,.dark .md .token.constant,.dark .md .token.number,.dark .md .token.atrule{color:#d19a66}.dark .md .token.keyword{color:#c678dd}.dark .md .token.property,.dark .md .token.tag,.dark .md .token.symbol,.dark .md .token.deleted,.dark .md .token.important{color:#e06c75}.dark .md .token.selector,.dark .md .token.string,.dark .md .token.char,.dark .md .token.builtin,.dark .md .token.inserted,.dark .md .token.regex,.dark .md .token.attr-value,.dark .md .token.attr-value>.token.punctuation{color:#98c379}.dark .md .token.variable,.dark .md .token.operator,.dark .md .token.function{color:#61afef}.dark .md .token.url{color:#56b6c2}span.svelte-1m32c2s div[class*=code_wrap]{position:relative}span.svelte-1m32c2s span.katex{font-size:var(--text-lg);direction:ltr}span.svelte-1m32c2s div[class*=code_wrap]>button{z-index:1;cursor:pointer;border-bottom-left-radius:var(--radius-sm);padding:var(--spacing-md);width:25px;height:25px;position:absolute;right:0}span.svelte-1m32c2s .check{opacity:0;z-index:var(--layer-top);transition:opacity .2s;background:var(--code-background-fill);color:var(--body-text-color);position:absolute;top:var(--size-1-5);left:var(--size-1-5)}span.svelte-1m32c2s p:not(:first-child){margin-top:var(--spacing-xxl)}span.svelte-1m32c2s .md-header-anchor{margin-left:-25px;padding-right:8px;line-height:1;color:var(--body-text-color-subdued);opacity:0}span.svelte-1m32c2s h1:hover .md-header-anchor,span.svelte-1m32c2s h2:hover .md-header-anchor,span.svelte-1m32c2s h3:hover .md-header-anchor,span.svelte-1m32c2s h4:hover .md-header-anchor,span.svelte-1m32c2s h5:hover .md-header-anchor,span.svelte-1m32c2s h6:hover .md-header-anchor{opacity:1}span.md.svelte-1m32c2s .md-header-anchor>svg{color:var(--body-text-color-subdued)}span.svelte-1m32c2s table{word-break:break-word}div.svelte-17qq50w>.md.prose{font-weight:var(--block-info-text-weight);font-size:var(--block-info-text-size);line-height:var(--line-sm)}div.svelte-17qq50w>.md.prose *{color:var(--block-info-text-color)}div.svelte-17qq50w{margin-bottom:var(--spacing-md)}span.has-info.svelte-zgrq3{margin-bottom:var(--spacing-xs)}span.svelte-zgrq3:not(.has-info){margin-bottom:var(--spacing-lg)}span.svelte-zgrq3{display:inline-block;position:relative;z-index:var(--layer-4);border:solid var(--block-title-border-width) var(--block-title-border-color);border-radius:var(--block-title-radius);background:var(--block-title-background-fill);padding:var(--block-title-padding);color:var(--block-title-text-color);font-weight:var(--block-title-text-weight);font-size:var(--block-title-text-size);line-height:var(--line-sm)}span[dir=rtl].svelte-zgrq3{display:block}.hide.svelte-zgrq3{margin:0;height:0}label.svelte-13ao5pu.svelte-13ao5pu{display:inline-flex;align-items:center;z-index:var(--layer-2);box-shadow:var(--block-label-shadow);border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-left:none;border-radius:var(--block-label-radius);background:var(--block-label-background-fill);padding:var(--block-label-padding);pointer-events:none;color:var(--block-label-text-color);font-weight:var(--block-label-text-weight);font-size:var(--block-label-text-size);line-height:var(--line-sm)}.gr-group label.svelte-13ao5pu.svelte-13ao5pu{border-top-left-radius:0}label.float.svelte-13ao5pu.svelte-13ao5pu{position:absolute;top:var(--block-label-margin);left:var(--block-label-margin)}label.svelte-13ao5pu.svelte-13ao5pu:not(.float){position:static;margin-top:var(--block-label-margin);margin-left:var(--block-label-margin)}.hide.svelte-13ao5pu.svelte-13ao5pu{height:0}span.svelte-13ao5pu.svelte-13ao5pu{opacity:.8;margin-right:var(--size-2);width:calc(var(--block-label-text-size) - 1px);height:calc(var(--block-label-text-size) - 1px)}.hide-label.svelte-13ao5pu.svelte-13ao5pu{box-shadow:none;border-width:0;background:transparent;overflow:visible}label[dir=rtl].svelte-13ao5pu.svelte-13ao5pu{border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-right:none;border-bottom-left-radius:var(--block-radius);border-bottom-right-radius:var(--block-label-radius);border-top-left-radius:var(--block-label-radius)}label[dir=rtl].svelte-13ao5pu span.svelte-13ao5pu{margin-left:var(--size-2);margin-right:0}button.svelte-qgco6m{display:flex;justify-content:center;align-items:center;gap:1px;z-index:var(--layer-2);border-radius:var(--radius-xs);color:var(--block-label-text-color);border:1px solid transparent;padding:var(--spacing-xxs)}button.svelte-qgco6m:hover{background-color:var(--background-fill-secondary)}button[disabled].svelte-qgco6m{opacity:.5;box-shadow:none}button[disabled].svelte-qgco6m:hover{cursor:not-allowed}.padded.svelte-qgco6m{background:var(--bg-color)}button.svelte-qgco6m:hover,button.highlight.svelte-qgco6m{cursor:pointer;color:var(--color-accent)}.padded.svelte-qgco6m:hover{color:var(--block-label-text-color)}span.svelte-qgco6m{padding:0 1px;font-size:10px}div.svelte-qgco6m{display:flex;align-items:center;justify-content:center;transition:filter .2s ease-in-out}.x-small.svelte-qgco6m{width:10px;height:10px}.small.svelte-qgco6m{width:14px;height:14px}.medium.svelte-qgco6m{width:20px;height:20px}.large.svelte-qgco6m{width:22px;height:22px}.pending.svelte-qgco6m{animation:svelte-qgco6m-flash .5s infinite}@keyframes svelte-qgco6m-flash{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.transparent.svelte-qgco6m{background:transparent;border:none;box-shadow:none}.empty.svelte-3w3rth{display:flex;justify-content:center;align-items:center;margin-top:calc(0px - var(--size-6));height:var(--size-full)}.icon.svelte-3w3rth{opacity:.5;height:var(--size-5);color:var(--body-text-color)}.small.svelte-3w3rth{min-height:calc(var(--size-32) - 20px)}.large.svelte-3w3rth{min-height:calc(var(--size-64) - 20px)}.unpadded_box.svelte-3w3rth{margin-top:0}.small_parent.svelte-3w3rth{min-height:100%!important}.dropdown-arrow.svelte-145leq6,.dropdown-arrow.svelte-ihhdbf{fill:currentColor}.circle.svelte-ihhdbf{fill:currentColor;opacity:.1}svg.svelte-pb9pol{animation:svelte-pb9pol-spin 1.5s linear infinite}@keyframes svelte-pb9pol-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2.svelte-1xg7h5n{font-size:var(--text-xl)!important}p.svelte-1xg7h5n,h2.svelte-1xg7h5n{white-space:pre-line}.wrap.svelte-1xg7h5n{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:var(--size-60);color:var(--block-label-text-color);line-height:var(--line-md);height:100%;padding-top:var(--size-3);text-align:center;margin:auto var(--spacing-lg)}.or.svelte-1xg7h5n{color:var(--body-text-color-subdued);display:flex}.icon-wrap.svelte-1xg7h5n{width:30px;margin-bottom:var(--spacing-lg)}@media (--screen-md){.wrap.svelte-1xg7h5n{font-size:var(--text-lg)}}.hovered.svelte-1xg7h5n{color:var(--color-accent)}div.svelte-q32hvf{border-top:1px solid transparent;display:flex;max-height:100%;justify-content:center;align-items:center;gap:var(--spacing-sm);height:auto;align-items:flex-end;color:var(--block-label-text-color);flex-shrink:0}.show_border.svelte-q32hvf{border-top:1px solid var(--block-border-color);margin-top:var(--spacing-xxl);box-shadow:var(--shadow-drop)}.source-selection.svelte-15ls1gu{display:flex;align-items:center;justify-content:center;border-top:1px solid var(--border-color-primary);width:100%;margin-left:auto;margin-right:auto;height:var(--size-10)}.icon.svelte-15ls1gu{width:22px;height:22px;margin:var(--spacing-lg) var(--spacing-xs);padding:var(--spacing-xs);color:var(--neutral-400);border-radius:var(--radius-md)}.selected.svelte-15ls1gu{color:var(--color-accent)}.icon.svelte-15ls1gu:hover,.icon.svelte-15ls1gu:focus{color:var(--color-accent)}.icon-button-wrapper.svelte-109se4{display:flex;flex-direction:row;align-items:center;justify-content:center;z-index:var(--layer-3);gap:var(--spacing-sm);box-shadow:var(--shadow-drop);border:1px solid var(--border-color-primary);background:var(--block-background-fill);padding:var(--spacing-xxs)}.icon-button-wrapper.hide-top-corner.svelte-109se4{border-top:none;border-right:none;border-radius:var(--block-label-right-radius)}.icon-button-wrapper.display-top-corner.svelte-109se4{border-radius:var(--radius-sm) 0 0 var(--radius-sm);top:var(--spacing-sm);right:-1px}.icon-button-wrapper.svelte-109se4:not(.top-panel){border:1px solid var(--border-color-primary);border-radius:var(--radius-sm)}.top-panel.svelte-109se4{position:absolute;top:var(--block-label-margin);right:var(--block-label-margin);margin:0}.icon-button-wrapper.svelte-109se4 button{margin:var(--spacing-xxs);border-radius:var(--radius-xs);position:relative}.icon-button-wrapper.svelte-109se4 a.download-link:not(:last-child),.icon-button-wrapper.svelte-109se4 button:not(:last-child){margin-right:var(--spacing-xxs)}.icon-button-wrapper.svelte-109se4 a.download-link:not(:last-child):not(.no-border *):after,.icon-button-wrapper.svelte-109se4 button:not(:last-child):not(.no-border *):after{content:"";position:absolute;right:-4.5px;top:15%;height:70%;width:1px;background-color:var(--border-color-primary)}.icon-button-wrapper.svelte-109se4>*{height:100%}svg.svelte-43sxxs.svelte-43sxxs{width:var(--size-20);height:var(--size-20)}svg.svelte-43sxxs path.svelte-43sxxs{fill:var(--loader-color)}div.svelte-43sxxs.svelte-43sxxs{z-index:var(--layer-2)}.margin.svelte-43sxxs.svelte-43sxxs{margin:var(--size-4)}.wrap.svelte-17v219f.svelte-17v219f{display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:var(--layer-2);transition:opacity .1s ease-in-out;border-radius:var(--block-radius);background:var(--block-background-fill);padding:0 var(--size-6);max-height:var(--size-screen-h);overflow:hidden}.wrap.center.svelte-17v219f.svelte-17v219f{top:0;right:0;left:0}.wrap.default.svelte-17v219f.svelte-17v219f{top:0;right:0;bottom:0;left:0}.hide.svelte-17v219f.svelte-17v219f{opacity:0;pointer-events:none}.generating.svelte-17v219f.svelte-17v219f{animation:svelte-17v219f-pulseStart 1s cubic-bezier(.4,0,.6,1),svelte-17v219f-pulse 2s cubic-bezier(.4,0,.6,1) 1s infinite;border:2px solid var(--color-accent);background:transparent;z-index:var(--layer-1);pointer-events:none}.translucent.svelte-17v219f.svelte-17v219f{background:none}@keyframes svelte-17v219f-pulseStart{0%{opacity:0}to{opacity:1}}@keyframes svelte-17v219f-pulse{0%,to{opacity:1}50%{opacity:.5}}.loading.svelte-17v219f.svelte-17v219f{z-index:var(--layer-2);color:var(--body-text-color)}.eta-bar.svelte-17v219f.svelte-17v219f{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;opacity:.8;z-index:var(--layer-1);transition:10ms;background:var(--background-fill-secondary)}.progress-bar-wrap.svelte-17v219f.svelte-17v219f{border:1px solid var(--border-color-primary);background:var(--background-fill-primary);width:55.5%;height:var(--size-4)}.progress-bar.svelte-17v219f.svelte-17v219f{transform-origin:left;background-color:var(--loader-color);width:var(--size-full);height:var(--size-full)}.progress-level.svelte-17v219f.svelte-17v219f{display:flex;flex-direction:column;align-items:center;gap:1;z-index:var(--layer-2);width:var(--size-full)}.progress-level-inner.svelte-17v219f.svelte-17v219f{margin:var(--size-2) auto;color:var(--body-text-color);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text.svelte-17v219f.svelte-17v219f{position:absolute;bottom:0;right:0;z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text-center.svelte-17v219f.svelte-17v219f{display:flex;position:absolute;top:0;right:0;justify-content:center;align-items:center;transform:translateY(var(--size-6));z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono);text-align:center}.error.svelte-17v219f.svelte-17v219f{box-shadow:var(--shadow-drop);border:solid 1px var(--error-border-color);border-radius:var(--radius-full);background:var(--error-background-fill);padding-right:var(--size-4);padding-left:var(--size-4);color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font)}.minimal.svelte-17v219f.svelte-17v219f{pointer-events:none}.minimal.svelte-17v219f .progress-text.svelte-17v219f{background:var(--block-background-fill)}.border.svelte-17v219f.svelte-17v219f{border:1px solid var(--border-color-primary)}.clear-status.svelte-17v219f.svelte-17v219f{position:absolute;display:flex;top:var(--size-2);right:var(--size-2);justify-content:flex-end;gap:var(--spacing-sm);z-index:var(--layer-1)}.toast-body.svelte-1pgj5gs{display:flex;position:relative;right:0;left:0;align-items:center;margin:var(--size-6) var(--size-4);margin:auto;border-radius:var(--container-radius);overflow:hidden;pointer-events:auto}.toast-body.error.svelte-1pgj5gs{border:1px solid var(--color-red-700);background:var(--color-red-50)}.dark .toast-body.error.svelte-1pgj5gs{border:1px solid var(--color-red-500);background-color:var(--color-grey-950)}.toast-body.warning.svelte-1pgj5gs{border:1px solid var(--color-yellow-700);background:var(--color-yellow-50)}.dark .toast-body.warning.svelte-1pgj5gs{border:1px solid var(--color-yellow-500);background-color:var(--color-grey-950)}.toast-body.info.svelte-1pgj5gs{border:1px solid var(--color-grey-700);background:var (--color-grey-50)}.dark .toast-body.info.svelte-1pgj5gs{border:1px solid var(--color-grey-500);background-color:var(--color-grey-950)}.toast-body.success.svelte-1pgj5gs{border:1px solid var(--color-green-700);background:var(--color-green-50)}.dark .toast-body.success.svelte-1pgj5gs{border:1px solid var(--color-green-500);background-color:var(--color-grey-950)}.toast-title.svelte-1pgj5gs{display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-lg);line-height:var(--line-sm)}.toast-title.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-title.error.svelte-1pgj5gs{color:var(--color-red-50)}.toast-title.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-title.warning.svelte-1pgj5gs{color:var(--color-yellow-50)}.toast-title.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-title.info.svelte-1pgj5gs{color:var(--color-grey-50)}.toast-title.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-title.success.svelte-1pgj5gs{color:var(--color-green-50)}.toast-close.svelte-1pgj5gs{margin:0 var(--size-3);border-radius:var(--size-3);padding:0px var(--size-1-5);font-size:var(--size-5);line-height:var(--size-5)}.toast-close.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-close.error.svelte-1pgj5gs{color:var(--color-red-500)}.toast-close.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-close.warning.svelte-1pgj5gs{color:var(--color-yellow-500)}.toast-close.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-close.info.svelte-1pgj5gs{color:var(--color-grey-500)}.toast-close.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-close.success.svelte-1pgj5gs{color:var(--color-green-500)}.toast-text.svelte-1pgj5gs{font-size:var(--text-lg);word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.toast-text.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-text.error.svelte-1pgj5gs{color:var(--color-red-50)}.toast-text.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-text.warning.svelte-1pgj5gs{color:var(--color-yellow-50)}.toast-text.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-text.info.svelte-1pgj5gs{color:var(--color-grey-50)}.toast-text.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-text.success.svelte-1pgj5gs{color:var(--color-green-50)}.toast-details.svelte-1pgj5gs{margin:var(--size-3) var(--size-3) var(--size-3) 0;width:100%}.toast-icon.svelte-1pgj5gs{display:flex;position:absolute;position:relative;flex-shrink:0;justify-content:center;align-items:center;margin:var(--size-2);border-radius:var(--radius-full);padding:var(--size-1);padding-left:calc(var(--size-1) - 1px);width:35px;height:35px}.toast-icon.error.svelte-1pgj5gs{color:var(--color-red-700)}.dark .toast-icon.error.svelte-1pgj5gs{color:var(--color-red-500)}.toast-icon.warning.svelte-1pgj5gs{color:var(--color-yellow-700)}.dark .toast-icon.warning.svelte-1pgj5gs{color:var(--color-yellow-500)}.toast-icon.info.svelte-1pgj5gs{color:var(--color-grey-700)}.dark .toast-icon.info.svelte-1pgj5gs{color:var(--color-grey-500)}.toast-icon.success.svelte-1pgj5gs{color:var(--color-green-700)}.dark .toast-icon.success.svelte-1pgj5gs{color:var(--color-green-500)}@keyframes svelte-1pgj5gs-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.timer.svelte-1pgj5gs{position:absolute;bottom:0;left:0;transform-origin:0 0;animation:svelte-1pgj5gs-countdown 10s linear forwards;width:100%;height:var(--size-1)}.timer.error.svelte-1pgj5gs{background:var(--color-red-700)}.dark .timer.error.svelte-1pgj5gs{background:var(--color-red-500)}.timer.warning.svelte-1pgj5gs{background:var(--color-yellow-700)}.dark .timer.warning.svelte-1pgj5gs{background:var(--color-yellow-500)}.timer.info.svelte-1pgj5gs{background:var(--color-grey-700)}.dark .timer.info.svelte-1pgj5gs{background:var(--color-grey-500)}.timer.success.svelte-1pgj5gs{background:var(--color-green-700)}.dark .timer.success.svelte-1pgj5gs{background:var(--color-green-500)}.hidden.svelte-1pgj5gs{display:none}.toast-text.svelte-1pgj5gs a{text-decoration:underline}.toast-wrap.svelte-gatr8h{display:flex;position:fixed;top:var(--size-4);right:var(--size-4);flex-direction:column;align-items:end;gap:var(--size-2);z-index:var(--layer-top);width:calc(100% - var(--size-8))}@media (--screen-sm){.toast-wrap.svelte-gatr8h{width:calc(var(--size-96) + var(--size-10))}}.streaming-bar.svelte-ga0jj6{position:absolute;bottom:0;left:0;right:0;height:4px;background-color:var(--primary-600);animation:svelte-ga0jj6-countdown linear forwards;z-index:1}@keyframes svelte-ga0jj6-countdown{0%{transform:translate(0)}to{transform:translate(-100%)}}:host{display:flex;flex-direction:column;height:100%}.propertysheet-wrapper{overflow:hidden!important;display:flex;flex-direction:column;flex-grow:1;padding:var(--spacing-lg)!important}.accordion-header.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;justify-content:space-between;align-items:center;width:100%;cursor:pointer;padding:var(--block-title-padding);background:var(--block-title-background-fill);color:var(--block-title-text-color);border-width:0;flex-shrink:0}.accordion-icon.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{margin-left:auto}.content-wrapper.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{flex-grow:1;min-height:0}.container.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{overflow-y:auto;height:auto;max-height:var(--sheet-max-height, 500px);border-radius:0!important;border:1px solid var(--border-color-primary);border-top:var(--show-group-name);border-bottom-left-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg);background-color:var(--background-fill-secondary)}.closed.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:none}.group-header.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;justify-content:space-between;align-items:center;width:100%;padding:var(--spacing-sm) var(--spacing-md);background-color:var(--input-background-fill);color:var(--body-text-color);text-align:left;cursor:pointer;font-size:var(--text-md);font-weight:var(--font-weight-bold);border:1px solid var(--border-color-primary)}.properties-grid.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:grid;grid-template-columns:1fr 2fr;gap:0;padding:0}.prop-label.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d,.prop-control.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{padding:var(--spacing-sm) var(--spacing-md);display:flex;align-items:center;border-bottom:1px solid var(--background-fill-secondary)}.prop-label.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{background-color:var(--background-fill-primary);color:var(--body-text-color);opacity:3.7;font-weight:var(--font-weight-semibold);font-size:var(--text-xs);text-align:right;justify-content:flex-end;word-break:break-word}.prop-control.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{gap:var(--spacing-sm)}.properties-grid.svelte-1bp104d>.svelte-1bp104d.svelte-1bp104d:nth-last-child(-n+2){border-bottom:none}.prop-control.svelte-1bp104d input[type=text].svelte-1bp104d.svelte-1bp104d,.prop-control.svelte-1bp104d input[type=password].svelte-1bp104d.svelte-1bp104d,.prop-control.svelte-1bp104d input[type=number].svelte-1bp104d.svelte-1bp104d{background-color:var(--input-background-fill);border:var(--input-border-width) solid var(--border-color-primary);box-shadow:var(--input-shadow);color:var(--input-text-color);font-size:var(--input-text-size);border-radius:0;width:100%;padding-top:var(--spacing-1);padding-bottom:var(--spacing-1);padding-left:var(--spacing-md);padding-right:var(--spacing-3)}.prop-control.svelte-1bp104d input[type=text].svelte-1bp104d.svelte-1bp104d:focus,.prop-control.svelte-1bp104d input[type=number].svelte-1bp104d.svelte-1bp104d:focus{box-shadow:var(--input-shadow-focus);border-color:var(--input-border-color-focus);background-color:var(--input-background-fill-focus);outline:none}.dropdown-wrapper.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{position:relative;width:100%}.dropdown-wrapper.svelte-1bp104d select.svelte-1bp104d.svelte-1bp104d{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--input-background-fill);border:var(--input-border-width) solid var(--border-color-primary);box-shadow:var(--input-shadow);color:var(--input-text-color);font-size:var(--input-text-size);width:100%;cursor:pointer;border-radius:0;padding-top:var(--spacing-1);padding-bottom:var(--spacing-1);padding-left:var(--spacing-md);padding-right:calc(var(--spacing-3) + 1.2em)}.dropdown-arrow-icon.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{position:absolute;top:50%;right:var(--spacing-3);transform:translateY(-50%);width:1em;height:1em;pointer-events:none;z-index:1;background-color:var(--body-text-color-subdued);-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M6 8l4 4 4-4'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M6 8l4 4 4-4'%3e%3c/svg%3e")}.dropdown-wrapper.svelte-1bp104d select.svelte-1bp104d.svelte-1bp104d:focus{box-shadow:var(--input-shadow-focus);border-color:var(--input-border-color-focus);background-color:var(--input-background-fill-focus);outline:none}.dropdown-wrapper.svelte-1bp104d select option.svelte-1bp104d.svelte-1bp104d{background:var(--input-background-fill);color:var(--body-text-color)}.prop-control.svelte-1bp104d input[type=checkbox].svelte-1bp104d.svelte-1bp104d{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:relative;width:var(--size-4);height:var(--size-4);border-radius:5px!important;border:1px solid var(--checkbox-border-color);background-color:var(--checkbox-background-color);box-shadow:var(--checkbox-shadow);cursor:pointer;margin:0;transition:background-color .2s,border-color .2s}.prop-control.svelte-1bp104d input[type=checkbox].svelte-1bp104d.svelte-1bp104d:hover{border-color:var(--checkbox-border-color-hover);background-color:var(--checkbox-background-color-hover)}.prop-control.svelte-1bp104d input[type=checkbox].svelte-1bp104d.svelte-1bp104d:focus{border-color:var(--checkbox-border-color-focus);background-color:var(--checkbox-background-color-focus);outline:none}.prop-control.svelte-1bp104d input[type=checkbox].svelte-1bp104d.svelte-1bp104d:checked{background-color:var(--checkbox-background-color-selected);border-color:var(--checkbox-border-color-focus)}.prop-control.svelte-1bp104d input[type=checkbox].svelte-1bp104d.svelte-1bp104d:checked:after{content:"";position:absolute;display:block;top:50%;left:50%;width:4px;height:8px;border:solid var(--checkbox-label-text-color-selected);border-width:0 2px 2px 0;transform:translate(-50%,-60%) rotate(45deg)}.slider-container.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;align-items:center;gap:var(--spacing-md);width:100%}.slider-container.svelte-1bp104d input[type=range].svelte-1bp104d.svelte-1bp104d{--slider-progress:0%;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;cursor:pointer;width:100%}.slider-container.svelte-1bp104d input[type=range].svelte-1bp104d.svelte-1bp104d::-webkit-slider-runnable-track{height:8px;border-radius:var(--radius-lg);background:linear-gradient(to right,var(--slider-color) var(--slider-progress),var(--input-background-fill) var(--slider-progress))}.slider-container.svelte-1bp104d input[type=range].svelte-1bp104d.svelte-1bp104d::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin-top:-4px;background-color:#fff;border-radius:50%;height:16px;width:16px;border:1px solid var(--border-color-primary);box-shadow:var(--shadow-drop)}.slider-container.svelte-1bp104d input[type=range].svelte-1bp104d.svelte-1bp104d::-moz-range-track{height:8px;border-radius:var(--radius-lg);background:linear-gradient(to right,var(--slider-color) var(--slider-progress),var(--input-background-fill) var(--slider-progress))}.slider-container.svelte-1bp104d input[type=range].svelte-1bp104d.svelte-1bp104d::-moz-range-thumb{background-color:#fff;border-radius:50%;height:16px;width:16px;border:1px solid var(--border-color-primary);box-shadow:var(--shadow-drop)}.slider-value.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{min-width:40px;text-align:right;font-family:var(--font-mono);font-size:var(--text-xs)}.prop-label-wrapper.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;justify-content:flex-end;align-items:center;gap:var(--spacing-sm);width:100%}.tooltip-container.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{position:relative;display:inline-flex;align-items:center;justify-content:center}.tooltip-icon.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;background-color:var(--body-text-color-subdued);color:var(--background-fill-primary);font-size:10px;font-weight:700;cursor:help;-webkit-user-select:none;user-select:none}.tooltip-text.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{visibility:hidden;width:200px;background-color:var(--body-text-color);color:var(--background-fill-primary);text-align:center;border-radius:var(--radius-md);padding:var(--spacing-md);position:absolute;z-index:50;bottom:-50%;left:100%;transform:translate(-50%);opacity:0;transition:opacity .3s}.tooltip-container.svelte-1bp104d:hover .tooltip-text.svelte-1bp104d.svelte-1bp104d{visibility:visible;opacity:1}.color-picker-container.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;align-items:center;gap:var(--spacing-md);width:100%}.color-picker-input.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{width:50px;height:28px;background-color:transparent;border:1px solid var(--border-color-primary);border-radius:var(--radius-sm);cursor:pointer;padding:0}.color-picker-input.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d::-webkit-color-swatch-wrapper{padding:2px}.color-picker-input.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d::-moz-padding{padding:2px}.color-picker-input.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d::-webkit-color-swatch{border:none;border-radius:var(--radius-sm)}.color-picker-input.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d::-moz-color-swatch{border:none;border-radius:var(--radius-sm)}.color-picker-value.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--body-text-color-subdued)}.prop-control.svelte-1bp104d input.invalid.svelte-1bp104d.svelte-1bp104d{border-color:var(--error-border-color, red)!important;box-shadow:0 0 0 1px var(--error-border-color, red)!important}.reset-button-prop.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;align-items:center;justify-content:center;background:none;border:none;border-left:1px solid var(--border-color-primary);cursor:pointer;color:var(--body-text-color-subdued);font-size:var(--text-lg);padding:0 var(--spacing-2);visibility:hidden;opacity:0;transition:opacity .15s ease-in-out,color .15s ease-in-out}.reset-button-prop.visible.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{visibility:visible;opacity:1}.reset-button-prop.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d:hover{color:var(--body-text-color);background-color:var(--background-fill-secondary-hover)}.reset-button-prop.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d:disabled{color:var(--body-text-color-subdued)!important;opacity:.5;cursor:not-allowed;background-color:transparent!important}.prop-control.svelte-1bp104d .disabled.svelte-1bp104d.svelte-1bp104d{opacity:.5;pointer-events:none;cursor:not-allowed}.prop-control.svelte-1bp104d .disabled input.svelte-1bp104d.svelte-1bp104d{cursor:not-allowed}.reset-button-prop.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d:disabled{opacity:.3;cursor:not-allowed;background-color:transparent!important}.radio-group.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;flex-wrap:wrap;gap:var(--spacing-sm);width:100%}.radio-item.svelte-1bp104d input[type=radio].svelte-1bp104d.svelte-1bp104d{display:none}.radio-item.svelte-1bp104d label.svelte-1bp104d.svelte-1bp104d{display:inline-block;padding:var(--spacing-xs) var(--spacing-md);border:1px solid var(--border-color-primary);border-radius:5px!important;background-color:var(--input-background-fill);color:var(--body-text-color);font-size:var(--text-xs);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .2s,border-color .2s,color .2s}.radio-group.disabled.svelte-1bp104d .radio-item label.svelte-1bp104d.svelte-1bp104d{cursor:not-allowed}.radio-item.svelte-1bp104d input[type=radio].svelte-1bp104d:hover+label.svelte-1bp104d{border-color:var(--border-color-accent-subdued);background-color:var(--background-fill-secondary-hover)}.radio-item.svelte-1bp104d input[type=radio].svelte-1bp104d:checked+label.svelte-1bp104d{background-color:var(--primary-500);border-color:var(--primary-500);color:#fff;font-weight:var(--font-weight-bold)}.radio-group.disabled.svelte-1bp104d .radio-item input[type=radio].svelte-1bp104d:checked+label.svelte-1bp104d{background-color:var(--neutral-300);border-color:var(--neutral-300);color:var(--neutral-500)}.multiselect-group.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;flex-direction:column;gap:var(--spacing-sm);width:100%;max-height:150px;overflow-y:auto;border:1px solid var(--border-color-primary);padding:var(--spacing-sm);background-color:var(--input-background-fill)}.multiselect-item.svelte-1bp104d.svelte-1bp104d.svelte-1bp104d{display:flex;align-items:center;gap:var(--spacing-sm)}.multiselect-item.svelte-1bp104d label.svelte-1bp104d.svelte-1bp104d{font-size:var(--text-sm);color:var(--body-text-color);cursor:pointer;-webkit-user-select:none;user-select:none}.multiselect-group.disabled.svelte-1bp104d .multiselect-item label.svelte-1bp104d.svelte-1bp104d{cursor:not-allowed}
src/demo/app.py CHANGED
@@ -2,12 +2,52 @@ import os
2
  import json
3
  import gradio as gr
4
  from dataclasses import dataclass, field, asdict
5
- from typing import Literal
6
  from gradio_propertysheet import PropertySheet
7
  from gradio_htmlinjector import HTMLInjector
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  @dataclass
12
  class EffectBase:
13
  """Base class with common effect settings."""
@@ -259,6 +299,7 @@ class RenderConfig:
259
  default_factory=QuantizationSettings,
260
  metadata={"label": "Quantization Settings"}
261
  )
 
262
  tile_size: Literal[1024, 1280] = field(
263
  default=1280,
264
  metadata={
 
2
  import json
3
  import gradio as gr
4
  from dataclasses import dataclass, field, asdict
5
+ from typing import List, Literal
6
  from gradio_propertysheet import PropertySheet
7
  from gradio_htmlinjector import HTMLInjector
8
 
9
+ PAG_LAYERS = {
10
+ "down.blocks.1": "down.blocks.1",
11
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
12
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
13
+ "down.blocks.2": "down.blocks.2",
14
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
15
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
16
+ "mid": "mid",
17
+ "up.blocks.0": "up.blocks.0",
18
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
19
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
20
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
21
+ "up.blocks.1": "up.blocks.1",
22
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
23
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
24
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
25
+ }
26
 
27
  # --- 1. Dataclass Definitions ---
28
+ @dataclass
29
+ class PAGSettings:
30
+ """Defines settings for Perturbed Attention Guidance."""
31
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
32
+
33
+ pag_layers: List[str] = field(
34
+ default_factory=list, # Use default_factory for mutable types like lists
35
+ metadata={
36
+ "component": "multiselect_checkbox", # Our new custom component type
37
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
38
+ "label": "PAG Layers",
39
+ "interactive_if": {"field": "enable_pag", "value": True},
40
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
41
+ }
42
+ )
43
+ pag_scale: float = field(default=3.0, metadata={
44
+ "component": "slider",
45
+ "label": "PAG Scale",
46
+ "minimum": 0.0,
47
+ "maximum": 1.0,
48
+ "step": 0.01
49
+ })
50
+
51
  @dataclass
52
  class EffectBase:
53
  """Base class with common effect settings."""
 
299
  default_factory=QuantizationSettings,
300
  metadata={"label": "Quantization Settings"}
301
  )
302
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
303
  tile_size: Literal[1024, 1280] = field(
304
  default=1280,
305
  metadata={
src/demo/space.py CHANGED
@@ -42,12 +42,52 @@ import os
42
  import json
43
  import gradio as gr
44
  from dataclasses import dataclass, field, asdict
45
- from typing import Literal
46
  from gradio_propertysheet import PropertySheet
47
  from gradio_htmlinjector import HTMLInjector
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  # --- 1. Dataclass Definitions ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  @dataclass
52
  class EffectBase:
53
  \"\"\"Base class with common effect settings.\"\"\"
@@ -299,6 +339,7 @@ class RenderConfig:
299
  default_factory=QuantizationSettings,
300
  metadata={"label": "Quantization Settings"}
301
  )
 
302
  tile_size: Literal[1024, 1280] = field(
303
  default=1280,
304
  metadata={
 
42
  import json
43
  import gradio as gr
44
  from dataclasses import dataclass, field, asdict
45
+ from typing import List, Literal
46
  from gradio_propertysheet import PropertySheet
47
  from gradio_htmlinjector import HTMLInjector
48
 
49
+ PAG_LAYERS = {
50
+ "down.blocks.1": "down.blocks.1",
51
+ "down.blocks.1.attn.0": "down.blocks.1.attentions.0",
52
+ "down.blocks.1.attn.1": "down.blocks.1.attentions.1",
53
+ "down.blocks.2": "down.blocks.2",
54
+ "down.blocks.2.attn.0": "down.blocks.2.attentions.0",
55
+ "down.blocks.2.attn.1": "down.blocks.2.attentions.1",
56
+ "mid": "mid",
57
+ "up.blocks.0": "up.blocks.0",
58
+ "up.blocks.0.attn.0": "up.blocks.0.attentions.0",
59
+ "up.blocks.0.attn.1": "up.blocks.0.attentions.1",
60
+ "up.blocks.0.attn.2": "up.blocks.0.attentions.2",
61
+ "up.blocks.1": "up.blocks.1",
62
+ "up.blocks.1.attn.0": "up.blocks.1.attentions.0",
63
+ "up.blocks.1.attn.1": "up.blocks.1.attentions.1",
64
+ "up.blocks.1.attn.2": "up.blocks.1.attentions.2",
65
+ }
66
 
67
  # --- 1. Dataclass Definitions ---
68
+ @dataclass
69
+ class PAGSettings:
70
+ \"\"\"Defines settings for Perturbed Attention Guidance.\"\"\"
71
+ enable_pag: bool = field(default=False, metadata={"label": "Enable PAG"})
72
+
73
+ pag_layers: List[str] = field(
74
+ default_factory=list, # Use default_factory for mutable types like lists
75
+ metadata={
76
+ "component": "multiselect_checkbox", # Our new custom component type
77
+ "choices": list(PAG_LAYERS.keys()), # Provide the list of all possible options
78
+ "label": "PAG Layers",
79
+ "interactive_if": {"field": "enable_pag", "value": True},
80
+ "help": "Select the UNet layers where Perturbed Attention Guidance should be applied."
81
+ }
82
+ )
83
+ pag_scale: float = field(default=3.0, metadata={
84
+ "component": "slider",
85
+ "label": "PAG Scale",
86
+ "minimum": 0.0,
87
+ "maximum": 1.0,
88
+ "step": 0.01
89
+ })
90
+
91
  @dataclass
92
  class EffectBase:
93
  \"\"\"Base class with common effect settings.\"\"\"
 
339
  default_factory=QuantizationSettings,
340
  metadata={"label": "Quantization Settings"}
341
  )
342
+ pag_settings: PAGSettings = field(default_factory=PAGSettings, metadata={"label": "PAG Settings"})
343
  tile_size: Literal[1024, 1280] = field(
344
  default=1280,
345
  metadata={
src/frontend/Index.svelte CHANGED
@@ -229,7 +229,17 @@
229
  // Dispatch the full, updated value object to the backend.
230
  gradio.dispatch("change", value);
231
  }
232
-
 
 
 
 
 
 
 
 
 
 
233
  /**
234
  * Resets a single property to its initial value, which was stored on mount.
235
  * It dispatches the entire updated `value` object to the backend.
@@ -485,6 +495,24 @@
485
  {/each}
486
  {/if}
487
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  {/if}
489
 
490
  <!-- Reset button, visible only when the current value differs from the initial value -->
@@ -926,4 +954,32 @@
926
  border-color: var(--neutral-300);
927
  color: var(--neutral-500);
928
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
929
  </style>
 
229
  // Dispatch the full, updated value object to the backend.
230
  gradio.dispatch("change", value);
231
  }
232
+ /**
233
+ * Handles changes from a multiselect checkbox group.
234
+ * The `bind:group` directive already updated the local `prop.value` array.
235
+ * We just need to dispatch the entire component's state to the backend.
236
+ */
237
+ async function handle_multiselect_change() {
238
+ // Wait for Svelte to process the binding update.
239
+ await tick();
240
+ // Dispatch the full, updated value object to the backend.
241
+ gradio.dispatch("change", value);
242
+ }
243
  /**
244
  * Resets a single property to its initial value, which was stored on mount.
245
  * It dispatches the entire updated `value` object to the backend.
 
495
  {/each}
496
  {/if}
497
  </div>
498
+ {:else if prop.component === 'multiselect_checkbox'}
499
+ <div class="multiselect-group" class:disabled={!is_interactive}>
500
+ {#if Array.isArray(prop.choices)}
501
+ {#each prop.choices as choice}
502
+ <div class="multiselect-item">
503
+ <input
504
+ type="checkbox"
505
+ id="{prop.name}-{choice}"
506
+ value={choice}
507
+ bind:group={prop.value}
508
+ disabled={!is_interactive}
509
+ on:change={() => handle_multiselect_change()}
510
+ >
511
+ <label for="{prop.name}-{choice}">{choice}</label>
512
+ </div>
513
+ {/each}
514
+ {/if}
515
+ </div>
516
  {/if}
517
 
518
  <!-- Reset button, visible only when the current value differs from the initial value -->
 
954
  border-color: var(--neutral-300);
955
  color: var(--neutral-500);
956
  }
957
+ .multiselect-group {
958
+ display: flex;
959
+ flex-direction: column;
960
+ gap: var(--spacing-sm);
961
+ width: 100%;
962
+ max-height: 150px; /* Or a height that fits your design */
963
+ overflow-y: auto;
964
+ border: 1px solid var(--border-color-primary);
965
+ padding: var(--spacing-sm);
966
+ background-color: var(--input-background-fill);
967
+ }
968
+
969
+ .multiselect-item {
970
+ display: flex;
971
+ align-items: center;
972
+ gap: var(--spacing-sm);
973
+ }
974
+
975
+ .multiselect-item label {
976
+ font-size: var(--text-sm);
977
+ color: var(--body-text-color);
978
+ cursor: pointer;
979
+ user-select: none;
980
+ }
981
+
982
+ .multiselect-group.disabled .multiselect-item label {
983
+ cursor: not-allowed;
984
+ }
985
  </style>
src/pyproject.toml CHANGED
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
8
 
9
  [project]
10
  name = "gradio_propertysheet"
11
- version = "0.0.17"
12
  description = "Property sheet"
13
  readme = "README.md"
14
  license = "apache-2.0"
 
8
 
9
  [project]
10
  name = "gradio_propertysheet"
11
+ version = "0.0.18"
12
  description = "Property sheet"
13
  readme = "README.md"
14
  license = "apache-2.0"