@supersoniks/concorde 5.0.3 → 5.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/.github/workflows/ci.yml +21 -0
  2. package/.github-export-ignore +30 -0
  3. package/CONTRIBUTING.md +59 -0
  4. package/DEV.md +54 -0
  5. package/LICENSE +21 -0
  6. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  7. package/build-infos.json +1 -1
  8. package/concorde-core.bundle.js +66 -66
  9. package/concorde-core.es.js +1368 -1318
  10. package/dist/concorde-core.bundle.js +66 -66
  11. package/dist/concorde-core.es.js +1368 -1318
  12. package/docs/assets/{index-BnK6OS7w.js → index-D8MVWqY6.js} +1144 -1008
  13. package/docs/assets/index-DiD0qYvE.css +1 -0
  14. package/docs/crawl/core/components/ui/alert/alert.html +71 -101
  15. package/docs/crawl/core/components/ui/badge/badge.html +77 -106
  16. package/docs/crawl/core/components/ui/button/button.html +0 -1
  17. package/docs/crawl/core/components/ui/card/card.html +68 -112
  18. package/docs/crawl/core/components/ui/form/input/input.html +3 -3
  19. package/docs/crawl/core/components/ui/form/textarea/textarea.html +3 -3
  20. package/docs/crawl/core/components/ui/image/image.html +56 -132
  21. package/docs/crawl/core/components/ui/link/link.html +4 -4
  22. package/docs/crawl/core/components/ui/pop/pop.html +3 -79
  23. package/docs/crawl/docs/_getting-started/concorde-outside.html +3 -3
  24. package/docs/crawl/hubs/form-components.html +4 -4
  25. package/docs/index.html +5 -5
  26. package/docs/llms-full.txt +97 -281
  27. package/docs/llms.txt +8 -8
  28. package/docs/src/core/components/functional/fetch/fetch.md +0 -0
  29. package/docs/src/core/components/functional/if/if.md +0 -0
  30. package/docs/src/core/components/functional/list/list.md +0 -0
  31. package/docs/src/core/components/functional/router/router.md +0 -0
  32. package/docs/src/core/components/functional/sdui/sdui.md +0 -0
  33. package/docs/src/core/components/functional/states/states.md +0 -0
  34. package/docs/src/core/components/functional/submit/submit.md +0 -0
  35. package/docs/src/core/components/ui/alert/alert.md +72 -128
  36. package/docs/src/core/components/ui/badge/badge.md +78 -126
  37. package/docs/src/core/components/ui/button/button.md +0 -1
  38. package/docs/src/core/components/ui/captcha/captcha.md +0 -0
  39. package/docs/src/core/components/ui/card/card.md +65 -120
  40. package/docs/src/core/components/ui/form/input/input.md +1 -1
  41. package/docs/src/core/components/ui/form/radio/radio.md +0 -0
  42. package/docs/src/core/components/ui/form/select/select.md +0 -0
  43. package/docs/src/core/components/ui/form/switch/switch.md +0 -0
  44. package/docs/src/core/components/ui/form/textarea/textarea.md +1 -1
  45. package/docs/src/core/components/ui/image/image.md +53 -147
  46. package/docs/src/core/components/ui/link/link.md +2 -2
  47. package/docs/src/core/components/ui/loader/loader.md +0 -0
  48. package/docs/src/core/components/ui/menu/menu.md +0 -0
  49. package/docs/src/core/components/ui/modal/modal.md +0 -0
  50. package/docs/src/core/components/ui/pop/pop.md +1 -105
  51. package/docs/src/core/components/ui/table/table.md +0 -0
  52. package/docs/src/docs/_core-concept/subscriber.md +0 -0
  53. package/docs/src/docs/_getting-started/concorde-outside.md +3 -3
  54. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -0
  55. package/docs/src/docs/_getting-started/pubsub.md +0 -0
  56. package/docs/src/docs/_getting-started/start.md +0 -0
  57. package/docs/src/docs/search/docs-search.json +25 -655
  58. package/docs/src/tsconfig.declarations.json +22 -0
  59. package/docs/src/tsconfig.emit.json +23 -0
  60. package/docs/src/tsconfig.json +3 -45
  61. package/gitlab/job_github_mirror.sh +39 -0
  62. package/gitlab/job_tests.sh +0 -0
  63. package/package.json +1 -1
  64. package/scripts/github-export.mjs +150 -0
  65. package/scripts/post-build-docs.js +0 -0
  66. package/scripts/post-build.mjs +0 -0
  67. package/src/core/components/functional/fetch/fetch.md +0 -0
  68. package/src/core/components/functional/if/if.md +0 -0
  69. package/src/core/components/functional/list/list.demo.ts +0 -0
  70. package/src/core/components/functional/list/list.md +0 -0
  71. package/src/core/components/functional/router/router.md +0 -0
  72. package/src/core/components/functional/router/router.ts +0 -0
  73. package/src/core/components/functional/sdui/sdui.md +0 -0
  74. package/src/core/components/functional/states/states.md +0 -0
  75. package/src/core/components/functional/submit/submit.md +0 -0
  76. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  77. package/src/core/components/ui/_css/size.ts +0 -0
  78. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  79. package/src/core/components/ui/captcha/captcha.md +0 -0
  80. package/src/core/components/ui/form/radio/radio.md +0 -0
  81. package/src/core/components/ui/form/select/select.md +0 -0
  82. package/src/core/components/ui/form/switch/switch.md +0 -0
  83. package/src/core/components/ui/loader/loader.md +0 -0
  84. package/src/core/components/ui/menu/menu.md +0 -0
  85. package/src/core/components/ui/modal/modal.md +0 -0
  86. package/src/core/components/ui/table/table-caption.ts +0 -0
  87. package/src/core/components/ui/table/table.md +0 -0
  88. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
  89. package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
  90. package/src/core/mixins/Subscriber.ts +0 -0
  91. package/src/core/utils/AncestorAttributeObserver.ts +183 -70
  92. package/src/core/utils/DataBindObserver.ts +0 -0
  93. package/src/core/utils/Objects.ts +0 -0
  94. package/src/core/utils/route.ts +0 -0
  95. package/src/css.d.ts +19 -0
  96. package/src/docs/_core-concept/subscriber.md +0 -0
  97. package/src/docs/_decorators/ancestor-attribute.md +3 -2
  98. package/src/docs/_getting-started/my-first-subscriber.md +0 -0
  99. package/src/docs/_getting-started/pubsub.md +0 -0
  100. package/src/docs/_getting-started/start.md +0 -0
  101. package/src/docs/example/users.ts +0 -0
  102. package/src/docs/search/page.ts +0 -0
  103. package/src/tsconfig.declarations.json +22 -0
  104. package/src/tsconfig.emit.json +23 -0
  105. package/src/tsconfig.tsbuildinfo +1 -1
  106. package/docs/assets/index--GpD7R7a.css +0 -1
@@ -3,13 +3,14 @@ import HTML, { SearchableDomElement } from "./HTML";
3
3
  /**
4
4
  * Observateur pour `@ancestorAttribute({ dynamic: true })`.
5
5
  *
6
- * Un MutationObserver sur `document` ne voit pas les mutations dans les shadow
7
- * roots (Lit par défaut). Chaque abonnement observe donc directement les nœuds
8
- * de sa chaîne d'ancêtres (composant → parent → … → host shadow), comme
9
- * `watchScopedConfiguration` dans `api.ts`.
6
+ * ## Perf (FF / listes denses d'icônes)
7
+ * Ancien modèle : 1 MO/abonnement avec `childList` sur **toute** la chaîne +
8
+ * `reconnect()` à chaque mutation → O(n²) quand une list insert des siblings.
10
9
  *
11
- * Après un `childList` (wrapper plus proche, reparenting), la chaîne est
12
- * recalculée pour écouter les nouveaux ancêtres.
10
+ * Modèle actuel :
11
+ * 1. **MO attributs partagés** — 1 observer par `(ancêtre, attributeName)`.
12
+ * 2. **Reparent** — 1 MO `childList` partagé sur le parent direct ; on ne
13
+ * réagit que si *notre* nœud est dans added/removed (insert sibling → no-op).
13
14
  */
14
15
 
15
16
  type SyncOptions = {
@@ -22,7 +23,18 @@ type Subscription = {
22
23
  attributeName: string;
23
24
  propertyKey: string;
24
25
  syncOptions: SyncOptions;
25
- disconnectObservers: (() => void) | null;
26
+ watchedAncestors: Element[];
27
+ parentForReparent: Element | null;
28
+ };
29
+
30
+ type AttrSlot = {
31
+ observer: MutationObserver;
32
+ subscriptions: Set<Subscription>;
33
+ };
34
+
35
+ type ParentSlot = {
36
+ observer: MutationObserver;
37
+ byComponent: Map<Element, Set<Subscription>>;
26
38
  };
27
39
 
28
40
  /** Chaîne composant → ancêtres, en traversant les shadow roots. */
@@ -40,58 +52,17 @@ function walkAncestorElements(node: Node): Element[] {
40
52
  return elements;
41
53
  }
42
54
 
43
- /**
44
- * Observe attributs + enfants directs de chaque ancêtre.
45
- * Retourne une fonction de nettoyage (disconnect).
46
- */
47
- function attachAncestorChainObservers(
48
- subscription: Subscription,
49
- onMutation: () => void,
50
- ): () => void {
51
- const observers: MutationObserver[] = [];
52
- let disconnected = false;
53
- const attributeFilter = HTML.scopeAttributeNames(subscription.attributeName);
54
-
55
- const reconnect = () => {
56
- for (const observer of observers) {
57
- observer.disconnect();
58
- }
59
- observers.length = 0;
60
- if (disconnected) return;
61
-
62
- for (const element of walkAncestorElements(subscription.component)) {
63
- const observer = new MutationObserver((records) => {
64
- if (disconnected) return;
65
- if (records.some((record) => record.type === "childList")) {
66
- reconnect();
67
- }
68
- onMutation();
69
- });
70
- observer.observe(element, {
71
- attributes: true,
72
- attributeFilter,
73
- childList: true,
74
- subtree: false,
75
- });
76
- observers.push(observer);
77
- }
78
- };
79
-
80
- reconnect();
81
-
82
- return () => {
83
- disconnected = true;
84
- for (const observer of observers) {
85
- observer.disconnect();
86
- }
87
- observers.length = 0;
88
- };
55
+ function directParentElement(component: HTMLElement): Element | null {
56
+ const parent =
57
+ component.parentNode ||
58
+ ((component.getRootNode() as ShadowRoot)?.host ?? null);
59
+ return parent instanceof Element ? parent : null;
89
60
  }
90
61
 
91
62
  /**
92
63
  * Point unique de synchronisation DOM → propriété du composant.
93
64
  * N'assigne que si la valeur change (`Object.is`) pour limiter les re-renders Lit
94
- * et éviter de reboucler inutilement `observeDynamicProperty` (@bind / @subscribe).
65
+ * et éviter de reboucler inutilement `observeDynamicProperty` (@bind / `@subscribe`).
95
66
  */
96
67
  export function syncAncestorAttributeValue(
97
68
  component: object,
@@ -115,8 +86,11 @@ export default class AncestorAttributeObserver {
115
86
  private static pendingRefresh = new Set<Subscription>();
116
87
  private static animationFrameId: number | null = null;
117
88
 
89
+ private static attrSlots = new WeakMap<Element, Map<string, AttrSlot>>();
90
+ private static parentSlots = new WeakMap<Element, ParentSlot>();
91
+
118
92
  /**
119
- * Enregistre un composant en mode `{ dynamic: true }`.
93
+ * Enregistre un composant en mode `{ dynamic: true }` (attributs + reparent).
120
94
  * Le `unsubscribe` retourné doit être appelé au `disconnectedCallback`.
121
95
  */
122
96
  static subscribe(
@@ -130,32 +104,172 @@ export default class AncestorAttributeObserver {
130
104
  attributeName,
131
105
  propertyKey,
132
106
  syncOptions,
133
- disconnectObservers: null,
107
+ watchedAncestors: [],
108
+ parentForReparent: null,
134
109
  };
135
110
 
136
- subscription.disconnectObservers = attachAncestorChainObservers(
137
- subscription,
138
- () => {
139
- if (!AncestorAttributeObserver.subscriptions.has(subscription)) return;
140
- AncestorAttributeObserver.pendingRefresh.add(subscription);
141
- AncestorAttributeObserver.scheduleRefresh();
142
- },
143
- );
144
-
145
111
  AncestorAttributeObserver.subscriptions.add(subscription);
112
+ AncestorAttributeObserver.bindSubscription(subscription);
146
113
 
147
114
  return () => {
148
115
  AncestorAttributeObserver.unsubscribe(subscription);
149
116
  };
150
117
  }
151
118
 
152
- /** Coupe les observateurs et retire l'abonnement (pas de fuite après disconnect). */
119
+ private static bindSubscription(subscription: Subscription): void {
120
+ AncestorAttributeObserver.unbindWatchers(subscription);
121
+
122
+ const ancestors = walkAncestorElements(subscription.component);
123
+ subscription.watchedAncestors = ancestors;
124
+
125
+ for (const ancestor of ancestors) {
126
+ AncestorAttributeObserver.addAttrSlot(
127
+ ancestor,
128
+ subscription.attributeName,
129
+ subscription,
130
+ );
131
+ }
132
+
133
+ const parent = directParentElement(subscription.component);
134
+ subscription.parentForReparent = parent;
135
+ if (parent) {
136
+ AncestorAttributeObserver.addParentSlot(parent, subscription);
137
+ }
138
+
139
+ AncestorAttributeObserver.pendingRefresh.add(subscription);
140
+ AncestorAttributeObserver.scheduleRefresh();
141
+ }
142
+
143
+ private static unbindWatchers(subscription: Subscription): void {
144
+ for (const ancestor of subscription.watchedAncestors) {
145
+ AncestorAttributeObserver.removeAttrSlot(
146
+ ancestor,
147
+ subscription.attributeName,
148
+ subscription,
149
+ );
150
+ }
151
+ subscription.watchedAncestors = [];
152
+
153
+ if (subscription.parentForReparent) {
154
+ AncestorAttributeObserver.removeParentSlot(
155
+ subscription.parentForReparent,
156
+ subscription,
157
+ );
158
+ subscription.parentForReparent = null;
159
+ }
160
+ }
161
+
162
+ private static addAttrSlot(
163
+ element: Element,
164
+ attributeName: string,
165
+ subscription: Subscription,
166
+ ): void {
167
+ let byAttr = AncestorAttributeObserver.attrSlots.get(element);
168
+ if (!byAttr) {
169
+ byAttr = new Map();
170
+ AncestorAttributeObserver.attrSlots.set(element, byAttr);
171
+ }
172
+
173
+ let slot = byAttr.get(attributeName);
174
+ if (!slot) {
175
+ const attributeFilter = HTML.scopeAttributeNames(attributeName);
176
+ const subscriptions = new Set<Subscription>();
177
+ const observer = new MutationObserver(() => {
178
+ for (const sub of subscriptions) {
179
+ if (!AncestorAttributeObserver.subscriptions.has(sub)) continue;
180
+ AncestorAttributeObserver.pendingRefresh.add(sub);
181
+ }
182
+ AncestorAttributeObserver.scheduleRefresh();
183
+ });
184
+ observer.observe(element, {
185
+ attributes: true,
186
+ attributeFilter,
187
+ });
188
+ slot = { observer, subscriptions };
189
+ byAttr.set(attributeName, slot);
190
+ }
191
+
192
+ slot.subscriptions.add(subscription);
193
+ }
194
+
195
+ private static removeAttrSlot(
196
+ element: Element,
197
+ attributeName: string,
198
+ subscription: Subscription,
199
+ ): void {
200
+ const byAttr = AncestorAttributeObserver.attrSlots.get(element);
201
+ if (!byAttr) return;
202
+ const slot = byAttr.get(attributeName);
203
+ if (!slot) return;
204
+
205
+ slot.subscriptions.delete(subscription);
206
+ if (slot.subscriptions.size > 0) return;
207
+
208
+ slot.observer.disconnect();
209
+ byAttr.delete(attributeName);
210
+ }
211
+
212
+ private static addParentSlot(
213
+ parent: Element,
214
+ subscription: Subscription,
215
+ ): void {
216
+ let slot = AncestorAttributeObserver.parentSlots.get(parent);
217
+ if (!slot) {
218
+ const byComponent = new Map<Element, Set<Subscription>>();
219
+ const observer = new MutationObserver((records) => {
220
+ const touched = new Set<Element>();
221
+ for (const record of records) {
222
+ record.removedNodes.forEach((n) => {
223
+ if (n instanceof Element) touched.add(n);
224
+ });
225
+ record.addedNodes.forEach((n) => {
226
+ if (n instanceof Element) touched.add(n);
227
+ });
228
+ }
229
+ for (const el of touched) {
230
+ const subs = byComponent.get(el);
231
+ if (!subs) continue;
232
+ for (const sub of [...subs]) {
233
+ if (!AncestorAttributeObserver.subscriptions.has(sub)) continue;
234
+ AncestorAttributeObserver.bindSubscription(sub);
235
+ }
236
+ }
237
+ });
238
+ observer.observe(parent, { childList: true });
239
+ slot = { observer, byComponent };
240
+ AncestorAttributeObserver.parentSlots.set(parent, slot);
241
+ }
242
+
243
+ let set = slot.byComponent.get(subscription.component);
244
+ if (!set) {
245
+ set = new Set();
246
+ slot.byComponent.set(subscription.component, set);
247
+ }
248
+ set.add(subscription);
249
+ }
250
+
251
+ private static removeParentSlot(
252
+ parent: Element,
253
+ subscription: Subscription,
254
+ ): void {
255
+ const slot = AncestorAttributeObserver.parentSlots.get(parent);
256
+ if (!slot) return;
257
+
258
+ const set = slot.byComponent.get(subscription.component);
259
+ if (set) {
260
+ set.delete(subscription);
261
+ if (set.size === 0) slot.byComponent.delete(subscription.component);
262
+ }
263
+
264
+ if (slot.byComponent.size > 0) return;
265
+ slot.observer.disconnect();
266
+ AncestorAttributeObserver.parentSlots.delete(parent);
267
+ }
268
+
153
269
  private static unsubscribe(subscription: Subscription): void {
154
270
  if (!AncestorAttributeObserver.subscriptions.has(subscription)) return;
155
271
 
156
- subscription.disconnectObservers?.();
157
- subscription.disconnectObservers = null;
158
-
272
+ AncestorAttributeObserver.unbindWatchers(subscription);
159
273
  AncestorAttributeObserver.subscriptions.delete(subscription);
160
274
  AncestorAttributeObserver.pendingRefresh.delete(subscription);
161
275
 
@@ -187,7 +301,6 @@ export default class AncestorAttributeObserver {
187
301
 
188
302
  for (const subscription of subscriptions) {
189
303
  if (!AncestorAttributeObserver.subscriptions.has(subscription)) continue;
190
- if (!subscription.component.isConnected) continue;
191
304
  syncAncestorAttributeValue(
192
305
  subscription.component,
193
306
  subscription.attributeName,
File without changes
File without changes
File without changes
package/src/css.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ declare module "*.css" {
2
+ const css: import("lit").CSSResult;
3
+ export default css;
4
+ }
5
+
6
+ declare module "*.css?inline" {
7
+ const css: string;
8
+ export default css;
9
+ }
10
+
11
+ declare module "*.scss" {
12
+ const css: import("lit").CSSResult;
13
+ export default css;
14
+ }
15
+
16
+ declare module "*.scss?inline" {
17
+ const css: string;
18
+ export default css;
19
+ }
File without changes
@@ -69,8 +69,9 @@ This decorator is particularly useful for:
69
69
  - By default (`dynamic: false`), the value is read once at connect time and is not updated afterward
70
70
  - With `{ dynamic: true }`, the property stays in sync when:
71
71
  - an ancestor **changes** the attribute value
72
- - a **closer** ancestor **gains** the attribute (that value wins)
73
- - the **nearest** ancestor **loses** the attribute (falls back to the next one up, or `null`)
72
+ - a **closer** ancestor **gains** / **loses** the attribute (fallback / `null`)
73
+ - the component is **reparented** (no extra opt-in) — parent `childList` only reacts if *this* node moves
74
+ - Observers are **shared** (one per ancestor attribute / one per parent) so large lists of `sonic-icon` stay cheap on Firefox.
74
75
  - When `dynamic` is enabled, updates also propagate to `@subscribe` / `@bind` paths that depend on the decorated property (e.g. `${dataProvider}`)
75
76
 
76
77
  ### Dynamic mode
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,22 @@
1
+ {
2
+ "extends": "./tsconfig-model.json",
3
+ "compilerOptions": {
4
+ "noEmit": false,
5
+ "emitDeclarationOnly": true,
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "outDir": "../dist/types",
9
+ "rootDir": "."
10
+ },
11
+ "include": ["**/*.ts"],
12
+ "exclude": [
13
+ "node_modules/**/*",
14
+ "**/*.spec.ts",
15
+ "**/*.test.ts",
16
+ "**/*.demo.ts",
17
+ "**/*.stories.ts",
18
+ "**/*.type-test.ts",
19
+ "docs.ts",
20
+ "docs/**/*"
21
+ ]
22
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "extends": "./tsconfig-model.json",
3
+ "compilerOptions": {
4
+ "noEmit": false,
5
+ "emitDeclarationOnly": false,
6
+ "declaration": false,
7
+ "sourceMap": true,
8
+ "outDir": "../dist/js",
9
+ "rootDir": ".",
10
+ "lib": ["ES2021", "DOM", "DOM.Iterable"]
11
+ },
12
+ "include": ["**/*.ts"],
13
+ "exclude": [
14
+ "node_modules/**/*",
15
+ "**/*.spec.ts",
16
+ "**/*.test.ts",
17
+ "**/*.demo.ts",
18
+ "**/*.stories.ts",
19
+ "**/*.type-test.ts",
20
+ "docs.ts",
21
+ "docs/**/*"
22
+ ]
23
+ }
@@ -1 +1 @@
1
- {"root":["./components.ts","./concorde-loaded.ts","./dataprovider.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/endpoint.ts","./core/_types/key.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/jsonata/jsonata.spec.ts","./core/components/functional/jsonata/jsonata.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/rounded.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/_i18n/ui-aria-labels.ts","./core/components/ui/alert/alert.spec.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal-utils.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/dismissed.ts","./core/components/ui/toast/message-subscriber.ts","./core/components/ui/toast/render-content.ts","./core/components/ui/toast/toast-item.ts","./core/components/ui/toast/toast.ts","./core/components/ui/toast/types.ts","./core/components/ui/tooltip/tooltip.ts","./core/decorators/Subscriber.ts","./core/decorators/api.post.spec.ts","./core/decorators/api.spec.ts","./core/decorators/api.ts","./core/decorators/lifecycle.ts","./core/decorators/subscriber/ancestorAttribute.spec.ts","./core/decorators/subscriber/ancestorAttribute.ts","./core/decorators/subscriber/autoFill.ts","./core/decorators/subscriber/autoSubscribe.ts","./core/decorators/subscriber/bind.ts","./core/decorators/subscriber/common.ts","./core/decorators/subscriber/derive.ts","./core/decorators/subscriber/dynamicPath.spec.ts","./core/decorators/subscriber/dynamicPath.ts","./core/decorators/subscriber/dynamicPropertyWatch.spec.ts","./core/decorators/subscriber/dynamicPropertyWatch.ts","./core/decorators/subscriber/handle.disambig.spec.ts","./core/decorators/subscriber/handle.skip.spec.ts","./core/decorators/subscriber/handle.ts","./core/decorators/subscriber/onAssign.ts","./core/decorators/subscriber/publish.spec.ts","./core/decorators/subscriber/publish.ts","./core/decorators/subscriber/publisherPath.ts","./core/decorators/subscriber/subscribe.spec.ts","./core/decorators/subscriber/subscribe.ts","./core/directives/DataProvider.sub.spec.ts","./core/directives/DataProvider.ts","./core/directives/Wording.ts","./core/mixins/Fetcher.ts","./core/mixins/FormCheckable.ts","./core/mixins/FormElement.ts","./core/mixins/FormInput.ts","./core/mixins/Subscriber.ts","./core/mixins/TemplatesContainer.ts","./core/mixins/mixins.ts","./core/utils/AncestorAttributeObserver.ts","./core/utils/Arrays.ts","./core/utils/DataBindObserver.ts","./core/utils/Electron.ts","./core/utils/Format.ts","./core/utils/HTML.ts","./core/utils/LocationHandler.ts","./core/utils/Objects.ts","./core/utils/PublisherProxy.ts","./core/utils/SafariScrollGuard.ts","./core/utils/Utils.ts","./core/utils/aesCrypto.ts","./core/utils/api.spec.ts","./core/utils/api.ts","./core/utils/dataProviderKey.spec.ts","./core/utils/dataProviderKey.ts","./core/utils/derive.spec.ts","./core/utils/derive.ts","./core/utils/dismissed.ts","./core/utils/dpOptions.spec.ts","./core/utils/endpoint.spec.ts","./core/utils/endpoint.ts","./core/utils/jsonataHelpers.ts","./core/utils/jsonataRuntime.ts","./core/utils/positioning.spec.ts","./core/utils/positioning.ts","./core/utils/publisherPathKey.spec.ts","./core/utils/route.spec.ts","./core/utils/route.ts","./core/utils/url-pattern.ts","./test-utils/TestUtils.ts"],"version":"5.9.2"}
1
+ {"root":["./components.ts","./concorde-loaded.ts","./css.d.ts","./dataprovider.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/endpoint.ts","./core/_types/key.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/jsonata/jsonata.spec.ts","./core/components/functional/jsonata/jsonata.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/rounded.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/_i18n/ui-aria-labels.ts","./core/components/ui/alert/alert.spec.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal-utils.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/dismissed.ts","./core/components/ui/toast/message-subscriber.ts","./core/components/ui/toast/render-content.ts","./core/components/ui/toast/toast-item.ts","./core/components/ui/toast/toast.ts","./core/components/ui/toast/types.ts","./core/components/ui/tooltip/tooltip.ts","./core/decorators/Subscriber.ts","./core/decorators/api.post.spec.ts","./core/decorators/api.spec.ts","./core/decorators/api.ts","./core/decorators/lifecycle.ts","./core/decorators/subscriber/ancestorAttribute.spec.ts","./core/decorators/subscriber/ancestorAttribute.ts","./core/decorators/subscriber/autoFill.ts","./core/decorators/subscriber/autoSubscribe.ts","./core/decorators/subscriber/bind.ts","./core/decorators/subscriber/common.ts","./core/decorators/subscriber/derive.ts","./core/decorators/subscriber/dynamicPath.spec.ts","./core/decorators/subscriber/dynamicPath.ts","./core/decorators/subscriber/dynamicPropertyWatch.spec.ts","./core/decorators/subscriber/dynamicPropertyWatch.ts","./core/decorators/subscriber/handle.disambig.spec.ts","./core/decorators/subscriber/handle.skip.spec.ts","./core/decorators/subscriber/handle.ts","./core/decorators/subscriber/onAssign.ts","./core/decorators/subscriber/publish.spec.ts","./core/decorators/subscriber/publish.ts","./core/decorators/subscriber/publisherPath.ts","./core/decorators/subscriber/subscribe.spec.ts","./core/decorators/subscriber/subscribe.ts","./core/directives/DataProvider.sub.spec.ts","./core/directives/DataProvider.ts","./core/directives/Wording.ts","./core/mixins/Fetcher.ts","./core/mixins/FormCheckable.ts","./core/mixins/FormElement.ts","./core/mixins/FormInput.ts","./core/mixins/Subscriber.ts","./core/mixins/TemplatesContainer.ts","./core/mixins/mixins.ts","./core/utils/AncestorAttributeObserver.ts","./core/utils/Arrays.ts","./core/utils/DataBindObserver.ts","./core/utils/Electron.ts","./core/utils/Format.ts","./core/utils/HTML.ts","./core/utils/LocationHandler.ts","./core/utils/Objects.ts","./core/utils/PublisherProxy.ts","./core/utils/SafariScrollGuard.ts","./core/utils/Utils.ts","./core/utils/aesCrypto.ts","./core/utils/api.spec.ts","./core/utils/api.ts","./core/utils/dataProviderKey.spec.ts","./core/utils/dataProviderKey.ts","./core/utils/derive.spec.ts","./core/utils/derive.ts","./core/utils/dismissed.ts","./core/utils/dpOptions.spec.ts","./core/utils/endpoint.spec.ts","./core/utils/endpoint.ts","./core/utils/jsonataHelpers.ts","./core/utils/jsonataRuntime.ts","./core/utils/positioning.spec.ts","./core/utils/positioning.ts","./core/utils/publisherPathKey.spec.ts","./core/utils/route.spec.ts","./core/utils/route.ts","./core/utils/url-pattern.ts","./test-utils/TestUtils.ts"],"version":"5.9.2"}
@@ -1 +0,0 @@
1
- *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!container{width:100%!important}.container{width:100%}@media (min-width: 640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media (min-width: 768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width: 1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media (min-width: 1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media (min-width: 1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1em;margin-bottom:1em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;padding-inline-start:1.625em;margin-top:1em;margin-bottom:1em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;padding-inline-start:1.625em;margin-top:1em;margin-bottom:1em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--sc-base-content);font-weight:600;font-size:.875em;background-color:var(--sc-base-100);border-radius:calc(var(--sc-rounded) * .75);border-width:1px;border-color:var(--sc-base-200);padding:.15em .4em;font-family:var(--sc-font-family-monospace, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--sc-base-content);background-color:var(--sc-base-100);overflow-x:auto;font-weight:400;font-size:.8125rem;line-height:1.6;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:var(--sc-rounded);padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em;border-width:1px;border-style:solid;border-color:var(--sc-base-200);padding:1rem 1.25rem;font-family:var(--sc-font-family-monospace, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace)}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: var(--sc-base-content);--tw-prose-headings: var(--sc-base-900);--tw-prose-lead: var(--sc-base-content);--tw-prose-links: var(--sc-base-900);--tw-prose-bold: var(--sc-base-content);--tw-prose-counters: var(--sc-base-500);--tw-prose-bullets: var(--sc-base-300);--tw-prose-hr: var(--sc-base-200);--tw-prose-quotes: var(--sc-base-content);--tw-prose-quote-borders: var(--sc-base-200);--tw-prose-captions: var(--sc-base-500);--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: var(--sc-base-content);--tw-prose-pre-code: var(--sc-base-content);--tw-prose-pre-bg: var(--sc-base-100);--tw-prose-th-borders: var(--sc-base-300);--tw-prose-td-borders: var(--sc-base-200);--tw-prose-invert-body: var(--sc-base-300);--tw-prose-invert-headings: var(--sc-base);--tw-prose-invert-lead: var(--sc-base-400);--tw-prose-invert-links: var(--sc-base);--tw-prose-invert-bold: var(--sc-base);--tw-prose-invert-counters: var(--sc-base-400);--tw-prose-invert-bullets: var(--sc-base-600);--tw-prose-invert-hr: var(--sc-base-700);--tw-prose-invert-quotes: var(--sc-base-100);--tw-prose-invert-quote-borders: var(--sc-base-700);--tw-prose-invert-captions: var(--sc-base-400);--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: var(--sc-base);--tw-prose-invert-pre-code: var(--sc-base-300);--tw-prose-invert-pre-bg: var(--sc-base-900);--tw-prose-invert-th-borders: var(--sc-base-600);--tw-prose-invert-td-borders: var(--sc-base-700);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose{line-height:1.5}.prose :where(strong a):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:bolder}.prose :where(iframe[src*=youtu]):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--sc-rounded-md)}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.\!relative{position:relative!important}.relative{position:relative}.sticky{position:sticky}.\!left-0{left:0!important}.\!top-0{top:0!important}.-top-1{top:-.25rem}.bottom-1{bottom:.25rem}.bottom-2{bottom:.5rem}.left-0{left:0}.right-1{right:.25rem}.right-2{right:.5rem}.top-0{top:0}.top-16{top:4rem}.top-\[4\.2rem\]{top:4.2rem}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-\[3000\]{z-index:3000}.col-span-2{grid-column:span 2 / span 2}.col-span-full{grid-column:1 / -1}.m-0{margin:0}.m-2{margin:.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-20{margin-bottom:5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-40{margin-bottom:10rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-3{margin-left:.75rem}.ml-5{margin-left:1.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-9{margin-top:2.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-40{width:10rem;height:10rem}.size-\[2\.4rem\]{width:2.4rem;height:2.4rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-96{height:24rem}.h-full{height:100%}.max-h-96{max-height:24rem}.max-h-\[50vh\]{max-height:50vh}.max-h-\[calc\(100vh_-_4\.2rem\)\]{max-height:calc(100vh - 4.2rem)}.min-h-\[100vh\]{min-height:100vh}.min-h-\[5rem\]{min-height:5rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-12{width:3rem}.w-16{width:4rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-64{width:16rem}.w-\[5rem\]{width:5rem}.w-full{width:100%}.min-w-\[8rem\]{min-width:8rem}.max-w-\[29ch\]{max-width:29ch}.max-w-\[40rem\]{max-width:40rem}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-prose{max-width:70ch}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink,.shrink{flex-shrink:1}.flex-grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/2{--tw-translate-y: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[55deg\]{--tw-rotate: 55deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.resize{resize:both}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[minmax\(10rem\,15rem\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(10rem,15rem) minmax(0,1fr)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.break-all{word-break:break-all}.rounded{border-radius:var(--sc-rounded)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--sc-rounded-lg)}.rounded-md{border-radius:var(--sc-rounded-md)}.rounded-xl{border-radius:var(--sc-rounded-xl)}.border{border-width:var(--sc-border-width)}.border-0{border-width:0px}.border-b{border-bottom-width:var(--sc-border-width)}.border-b-\[\.18rem\]{border-bottom-width:.18rem}.border-t{border-top-width:var(--sc-border-width)}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-current{border-color:currentColor}.border-danger{border-color:var(--sc-danger)}.border-info{border-color:var(--sc-info)}.border-neutral-200{border-color:var(--sc-base-200)}.border-neutral-300{border-color:var(--sc-base-300)}.border-success{border-color:var(--sc-success)}.bg-info{background-color:var(--sc-info)}.bg-neutral-0{background-color:var(--sc-base)}.bg-neutral-100{background-color:var(--sc-base-100)}.bg-neutral-200{background-color:var(--sc-base-200)}.bg-neutral-50{background-color:var(--sc-base-50)}.bg-neutral-900{background-color:var(--sc-base-900)}.bg-success{background-color:var(--sc-success)}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.from-\[rgba\(0\,0\,10\,\.2\)\]{--tw-gradient-from: rgba(0,0,10,.2) var(--tw-gradient-from-position);--tw-gradient-to: rgba(0, 0, 10, 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pl-5{padding-left:1.25rem}.pl-\[\.75rem\]{padding-left:.75rem}.pt-3{padding-top:.75rem}.pt-\[20vh\]{padding-top:20vh}.text-center{text-align:center}.font-headings{font-family:var(--sc-headings-font-family, var(--sc-font-family-base, sans-serif))}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.text-4xl{font-size:2.25rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-sm{font-size:.875rem}.text-xl{font-size:1.25rem}.text-xs{font-size:.75rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-\[1\.5\]{line-height:1.5}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.text-content{color:var(--sc-base-content)}.text-contrast-content{color:var(--sc-contrast-content)}.text-danger{color:var(--sc-danger)}.text-info{color:var(--sc-info)}.text-neutral-0{color:var(--sc-base)}.text-neutral-300{color:var(--sc-base-300)}.text-neutral-400{color:var(--sc-base-400)}.text-neutral-500{color:var(--sc-base-500)}.text-neutral-600{color:var(--sc-base-600)}.text-neutral-700{color:var(--sc-base-700)}.text-neutral-900{color:var(--sc-base-900)}.text-success{color:var(--sc-success)}.underline{text-decoration-line:underline}.opacity-40{opacity:.4}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@font-face{font-family:ClashGrotesk-Variable;src:url(../fonts/ClashGrotesk-Variable.woff2) format("woff2"),url(../fonts/ClashGrotesk-Variable.woff) format("woff"),url(../fonts/ClashGrotesk-Variable.ttf) format("truetype");font-weight:200 700;font-display:swap;font-style:normal}:root{--sc-headings-font-family: "ClashGrotesk-Variable", sans-serif;--sc-font-family-base: "ClashGrotesk-Variable", sans-serif;--sc-headings-font-weight: 400;--sc-rounded: .5rem;--sc-border-width: max(2px, .18rem)}[data-concorde-theme=light]{--sc-base: #fffcf0;--sc-base-content: #111111;--sc-primary: #111111;--sc-primary-content: #fffcf0;--sc-base-50: #f4f1e6;--sc-base-100: #e9e6dc;--sc-base-200: #ceccc3;--sc-base-300: #bcbab1;--sc-base-400: #96948e;--sc-base-500: #7d7c77;--sc-base-600: #5a5956;--sc-base-700: #393937;--sc-base-800: #252524;--sc-base-900: #111111;--sc-info: #3b82f6;--sc-info-content: #ffffff;--sc-success: #10b981;--sc-success-content: #ffffff;--sc-warning: #fb923c;--sc-warning-content: #111827;--sc-danger: #dc2626;--sc-danger-content: #ffffff}[data-concorde-theme=dark]{--sc-base: #0a0a0a;--sc-base-content: #dadad9;--sc-primary: #ffef8a;--sc-primary-content: #111827;--sc-base-50: #141414;--sc-base-100: #1c1c1c;--sc-base-200: #2f2f2f;--sc-base-300: #3e3e3e;--sc-base-400: #5f5f5f;--sc-base-500: #767676;--sc-base-600: #9a9a9a;--sc-base-700: #c0c0bf;--sc-base-800: #dadad9;--sc-base-900: #f5f5f4;--sc-info: #3a85f7;--sc-info-content: #ffffff;--sc-success: #0fba7f;--sc-success-content: #ffffff;--sc-warning: #fc8f3b;--sc-warning-content: #111827;--sc-danger: #dd2528;--sc-danger-content: #ffffff}[data-concorde-theme=light],[data-concorde-theme=dark]{--sc-input-bg: var(--sc-base-100);--sc-input-border-color: var(--sc-base-100)}html{font-family:var(--sc-font-family-base, sans-serif)}h2{border-bottom:var(--sc-border-width) solid;padding-bottom:.1em}p,ul,ol{font-family:Arial,Helvetica,sans-serif}body{background:var(--sc-base);color:var(--sc-base-content)}html{scroll-behavior:smooth}.animated-text{display:block;position:relative;overflow:hidden}.animated-text span{display:block;position:absolute;width:100%;height:100%;top:0;left:0;transform:translateY(108%);animation:slideUp 4.5s cubic-bezier(.17,.67,.61,1.13) infinite}.animated-text span:nth-child(2){animation-delay:1.5s}.animated-text span:nth-child(3){animation-delay:3s}@keyframes slideUp{0%{transform:translateY(108%)}7%{transform:translateY(0)}33%{transform:translateY(0)}40%{transform:translateY(-108%)}to{transform:translateY(-108%)}}.custom-scroll{overflow:auto!important}.custom-scroll:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 2rem 2rem var(--sc-base-900)}.custom-scroll::-webkit-scrollbar{width:.5rem;height:.5rem;border:solid .15rem transparent;border-radius:var(--sc-rounded);background:transparent}.custom-scroll::-webkit-scrollbar-thumb{opacity:0;-webkit-transition:box-shadow .2s;transition:box-shadow .2s;border:solid .15rem transparent}p{text-wrap:pretty}.prose :where(code):not(:where(pre *)){box-decoration-break:clone;-webkit-box-decoration-break:clone}.hover\:bg-neutral-50:hover{background-color:var(--sc-base-50)}.prose-h1\:text-\[3\.25em\] :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:3.25em}.prose-h1\:font-normal :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:400}.prose-code\:before\:content-none :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))):before{--tw-content: none;content:var(--tw-content)}.prose-code\:after\:content-none :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))):after{--tw-content: none;content:var(--tw-content)}.prose-pre\:font-mono :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.prose-li\:my-\[\.2em\] :is(:where(li):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.2em;margin-bottom:.2em}@media (min-width: 640px){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-5xl{font-size:3rem}}@media (min-width: 1024px){.lg\:min-w-\[19rem\]{min-width:19rem}.lg\:max-w-\[19ch\]{max-width:19ch}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-20{padding-left:5rem;padding-right:5rem}.lg\:text-7xl{font-size:4.5rem}.lg\:leading-\[1\.5\]{line-height:1.5}}@media (min-width: 1280px){.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:text-8xl{font-size:6rem}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:border-neutral-600:where(.dark,.dark *){border-color:var(--sc-base-600)}.dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--sc-base-700)}.dark\:bg-neutral-300:where(.dark,.dark *){background-color:var(--sc-base-300)}.dark\:text-neutral-400:where(.dark,.dark *){color:var(--sc-base-400)}.dark\:text-neutral-600:where(.dark,.dark *){color:var(--sc-base-600)}.dark\:opacity-60:where(.dark,.dark *){opacity:.6}.\[\&\[active\]\]\:min-w-\[13rem\][active]{min-width:13rem}.\[\&\[active\]\]\:rounded-full[active]{border-radius:9999px}.\[\&\[active\]\]\:bg-danger[active]{background-color:var(--sc-danger)}.\[\&\[active\]\]\:font-black[active]{font-weight:900}.\[\&\[active\]\]\:text-danger-content[active]{color:var(--sc-danger-content)}.\[\&\[active\]\]\:text-success[active]{color:var(--sc-success)}[data-home] .\[\[data-home\]_\&\]\:hidden{display:none}