@samva/vite 0.10.0 → 0.11.1

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 (41) hide show
  1. package/AGENTS.md +8 -8
  2. package/CHANGELOG.md +50 -0
  3. package/README.md +43 -29
  4. package/dist/brand-BkXQMGgY.d.ts +52 -0
  5. package/dist/build.d.ts +1 -1
  6. package/dist/build.js +1 -1
  7. package/dist/dev.d.ts +8 -0
  8. package/dist/dev.js +8 -2
  9. package/dist/editor/assets/index-BBtWrzoS.css +2 -0
  10. package/dist/editor/assets/index-gqTrwEST.js +34 -0
  11. package/dist/editor/index.html +2 -2
  12. package/dist/editor/licenses/babel-parser.md +19 -0
  13. package/dist/editor/licenses/base-ui-react.md +21 -0
  14. package/dist/editor/licenses/base-ui-utils.md +21 -0
  15. package/dist/editor/licenses/cfworker-json-schema.md +7 -0
  16. package/dist/editor/licenses/clsx.md +9 -0
  17. package/dist/editor/licenses/effect.md +21 -0
  18. package/dist/editor/licenses/floating-ui-core.md +20 -0
  19. package/dist/editor/licenses/floating-ui-dom.md +20 -0
  20. package/dist/editor/licenses/floating-ui-react-dom.md +20 -0
  21. package/dist/editor/licenses/floating-ui-utils.md +20 -0
  22. package/dist/editor/licenses/hugeicons-core-free-icons.md +21 -0
  23. package/dist/editor/licenses/hugeicons-react.md +21 -0
  24. package/dist/editor/licenses/react-dom.md +21 -0
  25. package/dist/editor/licenses/react.md +21 -0
  26. package/dist/editor/licenses/scheduler.md +21 -0
  27. package/dist/editor/licenses/use-sync-external-store.md +21 -0
  28. package/dist/editor/licenses/zustand.md +21 -0
  29. package/dist/editor-DfdlKEeu.d.ts +48 -0
  30. package/dist/{editor-B_2rlC_U.js → editor-DnFOzVJA.js} +14 -15
  31. package/dist/index.d.ts +3 -27
  32. package/dist/index.js +1 -1
  33. package/dist/{project-Ut6wra0r.js → project-DwbOoPDk.js} +117 -374
  34. package/dist/project.d.ts +192 -2
  35. package/dist/project.js +2 -2
  36. package/dist/render.d.ts +1 -1
  37. package/dist/render.js +2 -2
  38. package/package.json +4 -4
  39. package/dist/editor/assets/index-BRnxqVXL.js +0 -34
  40. package/dist/editor/assets/index-Bv6OXYH5.css +0 -2
  41. package/dist/project-CRqjs-wV.d.ts +0 -270
package/AGENTS.md CHANGED
@@ -13,8 +13,8 @@ here: they are ordinary Git plus `samva templates publish` from `@samva/cli` (se
13
13
 
14
14
  - `@samva/vite` — `samvaEditor()`, the plugin you add to `vite.config.ts` when the defaults do not
15
15
  cover your setup. Options are typed by `SamvaEditorPluginOptions`; the README lists them.
16
- - `@samva/vite/dev` — `startDevServer({ root, dir?, port?, host?, open? })`: a Vite server with no
17
- config file, `samvaEditor()`, and defaults. It is what `samva templates dev` starts.
16
+ - `@samva/vite/dev` — `startDevServer(options)`: a Vite server with no config file,
17
+ `samvaEditor()`, and defaults. It is what `samva templates dev` starts.
18
18
  - `@samva/vite/build` — `buildTemplates(options)` and `createTemplateBuildSession(options)` for
19
19
  programmatic checks and builds. The `samva` CLI loads this module from your project, not from its
20
20
  own bundle.
@@ -61,13 +61,14 @@ what pins the compiler version your previews, checks, and builds use.
61
61
  saved elsewhere is not overwritten; reload the entry and retry.
62
62
  - **Committing or hand-editing `.samva/`.** `.samva/` holds files this package generates. It is
63
63
  gitignored, like `.next/` and `.tanstack/`, and changes inside it never recompile templates.
64
- `samva:brand` resolves live first, refreshes `.samva/brands/<slug>.json` from every live answer,
65
- and falls back to that copy, warning when it is used or was older than the live brand. The API
66
- owns the brand; a project with neither credentials nor a cached copy fails with
67
- `brand-unavailable`.
68
64
 
69
65
  ## Rules
70
66
 
67
+ - **Brand resolution belongs to the host.** Keep Samva authentication and storage in the CLI so
68
+ standalone authoring stays independent of a Samva account. Pass the host's resolver and brand
69
+ plugin through compilation, preview and rendering together; dropping the plugin changes footer
70
+ and unsubscribe behavior. Brand-resolution and editor-plugin tests enforce this boundary.
71
+
71
72
  - **Template entries are `.tsx`.** Discovery ignores every other extension, hidden folders and
72
73
  `node_modules`.
73
74
  - **Template ids and fixture keys match `TEMPLATE_NAME_PATTERN`** from `@samva/markup/template`,
@@ -92,5 +93,4 @@ what pins the compiler version your previews, checks, and builds use.
92
93
  - `samva templates dev`, or `vite` with `samvaEditor()` configured, serves the editor at the
93
94
  configured `route`; every template should appear with its fixtures, one document per channel.
94
95
  - `exportProject({ root, out })` writes browsable HTML and text for every fixture and a
95
- `catalog.json` with the asset mapping and findings, without Samva credentials unless the project
96
- imports `samva:brand` and has no cached copy.
96
+ `catalog.json` with the asset mapping and findings.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,53 @@
1
+ ## @samva/vite@0.11.1
2
+
3
+ ### The bundled editor ships its dependencies' licences
4
+
5
+ `@samva/vite`'s built editor (`dist/editor`) now includes a licence notice under `dist/editor/licenses/`
6
+ for every third-party package bundled into it, such as React, Base UI, Floating UI, zustand, Effect and
7
+ Hugeicons. A package that publishes no licence file gets a notice built from the licence its
8
+ `package.json` declares.
9
+
10
+ ## @samva/vite@0.11.0
11
+
12
+ ### The local editor draws Hugeicons and the editor's own control styling
13
+
14
+ The editor `samva templates dev` and the Vite plugin serve now draws its icons from the Hugeicons
15
+ free set (Stroke Rounded, MIT), whose licence files ship in `dist/editor/licenses`. Toggles that are
16
+ on and the source panel take the editor's own recessed styling in light and dark mode, matching the
17
+ Samva dashboard.
18
+
19
+ ### Breaking: `@samva/markup` reads brand and footer names from a brand plugin
20
+
21
+ Templates do not change: `samva:brand`, `BrandLogo`, `BrandFooter` and the unsubscribe row work as
22
+ before, because Samva's brand plugin is the default.
23
+
24
+ A host that compiles or renders templates can pass its own `BrandPlugin` as `brandPlugin` to
25
+ `compileTemplate`, `transformProject`, `projectBrandSpecifier`, `parseBrandSpecifier`,
26
+ `checkStaticProfile`, `renderIr`, `compileEmail`, `renderBrandFooter`, `renderBrandSample`,
27
+ `brandComponents`, `renderedFooterMarkers` and `withoutUnsubscribeRow`. The plugin names the brand
28
+ import, the attributes that mark the footer and its unsubscribe row, the unsubscribe link's URL
29
+ placeholder, and the attribute that marks that link as untracked.
30
+
31
+ `BrandFooter`'s unsubscribe link now carries `data-samva-no-track` instead of SES's
32
+ `ses:no-track`. A host that delivers mail through SES turns the marker into `ses:no-track` before it
33
+ sends.
34
+
35
+ `@samva/markup/brand` exports `samvaBrandPlugin` and the `BrandPlugin` type in place of
36
+ `FOOTER_ATTRIBUTE`, `UNSUBSCRIBE_ROW_ATTRIBUTE` and `UNSUBSCRIBE_URL_PLACEHOLDER`; read
37
+ `samvaBrandPlugin.footerAttribute`, `.unsubscribeRowAttribute` and `.unsubscribeUrlPlaceholder`.
38
+ `@samva/markup/compiler` no longer exports `BRAND_SPECIFIER`; read `samvaBrandPlugin.specifier`.
39
+
40
+ ### Breaking: supply brand resolution to the authoring toolchain
41
+
42
+ `@samva/vite` accepts `brandResolver` and `brandPlugin` on the editor plugin and its dev, project,
43
+ build, render and export APIs. A brand import without a resolver fails with `brand-unavailable`.
44
+ Standalone callers supply a resolver; the package does not read Samva credentials, invoke the
45
+ Samva CLI or load Samva brand snapshots. The `offline` option and Samva snapshot helpers move to
46
+ the CLI.
47
+
48
+ `samva templates dev`, `check`, `build`, `render`, `snapshot` and `export` supply the Samva resolver
49
+ and brand plugin, preserving live lookup, cached snapshots and brand diagnostics.
50
+
1
51
  ## @samva/vite@0.10.0
2
52
 
3
53
  ### Breaking: `@samva/markup` publishes 17 entries in two tiers
package/README.md CHANGED
@@ -51,12 +51,16 @@ middleware stack.
51
51
 
52
52
  ## Options
53
53
 
54
- | Option | Type | Default | Description |
55
- | -------------- | ----------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- |
56
- | `templatesDir` | `string` | `templates/` and `emails/` | The one directory to scan for `.tsx` templates, relative to the project root. Unset scans whichever exist. |
57
- | `projectRoot` | `string` | the Vite root | The folder holding `theme.css`, shared imports and `.samva/`, relative to the Vite root. Contains `templatesDir`. |
58
- | `route` | `string` | `"/"` | Absolute editor UI route; API and assets are mounted beneath it. |
59
- | `theme` | `string \| false` | `"theme.css"` | Project theme file relative to the project root, or `false` to compile without one. |
54
+ | Option | Type | Default | Description |
55
+ | ------------------- | ------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------- |
56
+ | `templatesDir` | `string` | `templates/` and `emails/` | The one directory to scan for `.tsx` templates, relative to the project root. Unset scans whichever exist. |
57
+ | `projectRoot` | `string` | the Vite root | The folder holding `theme.css`, shared imports and `.samva/`, relative to the Vite root. Contains `templatesDir`. |
58
+ | `route` | `string` | `"/"` | Absolute editor UI route; API and assets are mounted beneath it. |
59
+ | `theme` | `string \| false` | `"theme.css"` | Project theme file relative to the project root, or `false` to compile without one. |
60
+ | `brandResolver` | `BrandResolver` | unset | Host-owned brand lookup; required when a project imports a brand. |
61
+ | `brandPlugin` | `BrandPlugin` | markup default | Brand import specifier, footer and unsubscribe behavior. |
62
+ | `authenticated` | `boolean` | `false` | Whether the host supplies authenticated editor capabilities. |
63
+ | `editorAffordances` | `EditorAffordances` | unset | Host-owned publishing instructions and authentication text. |
60
64
 
61
65
  For templates in another folder of a monorepo, set `projectRoot` to a folder that contains both the
62
66
  templates and the files they import; a templates directory outside the project root is an error.
@@ -108,8 +112,8 @@ compatibility findings and inbox tests for client-specific proof.
108
112
  ## Theme, check, and publish
109
113
 
110
114
  A root `theme.css` uses Tailwind v4 `@theme` syntax and may `@import` other project `.css` files
111
- and `samva:brand`; any other import is a compile error. A change to the theme, a partial, or an
112
- imported stylesheet recompiles every template that reads it.
115
+ and a brand import recognized by the configured brand plugin; any other import is a compile error.
116
+ A change to the theme, a partial, or an imported stylesheet recompiles every template that reads it.
113
117
 
114
118
  `samva templates check` and `buildTemplates()` compile every template, render every declared
115
119
  fixture through each channel the template declares, and check the email output against the client
@@ -124,8 +128,8 @@ const result = await buildTemplates({ root: ".", assetBase: "https://assets.exam
124
128
  ```
125
129
 
126
130
  `buildTemplates(options)` and `createTemplateBuildSession(options)` take `root`, `dir`, `theme`,
127
- `assetBase` and `offline`. Imported email assets require an HTTPS `assetBase`, which names where
128
- their bytes are served in delivered messages. `createTemplateBuildSession` also reports file
131
+ `assetBase`, `brandResolver` and `brandPlugin`. Imported email assets require an HTTPS `assetBase`,
132
+ which names where their bytes are served in delivered messages. `createTemplateBuildSession` also reports file
129
133
  changes for `check --watch`.
130
134
 
131
135
  `samva templates build --out dist/templates.json` writes the CLI's local artifact. Check writes no
@@ -161,26 +165,36 @@ await server.close();
161
165
  `startDevServer` creates a Vite server with `configFile: false` and `samvaEditor()`, which is what
162
166
  `samva templates dev` does.
163
167
 
164
- ## The organization brand
168
+ ## Brand resolution
165
169
 
166
- A project that imports `samva:brand` (the default brand) or `samva:brand/<slug>` compiles against
167
- its organization's brand. The platform brand record is the source of truth; each publication pins
168
- the brand version it was built with. The editor, `buildTemplates()`, and `exportProject()` resolve
169
- it in this order:
170
+ `samvaEditor()`, `startDevServer()`, and the project, build, render and export APIs accept
171
+ `brandResolver` and `brandPlugin`. The resolver supplies an `EmailBrand`; the plugin defines the
172
+ brand import, footer and unsubscribe behavior. A project with no brand import runs without a
173
+ resolver or credentials. A brand import without a resolver reports `brand-unavailable`.
170
174
 
171
- 1. **Live.** With `SAMVA_API_KEY` in the environment or the project's `.env` (and `SAMVA_API_URL`
172
- for another API), the brand is fetched directly. Without one, the `samva` CLI on `PATH` is asked
173
- (`samva brands get --json`) and answers with your `samva login` session, which stays in the
174
- operating-system keyring the CLI owns. A live answer refreshes the cached copy.
175
- 2. **Cached copy.** `.samva/brands/<slug>.json`, written by every live fetch and by
176
- `samva brands pull [slug]`, with a `brand-offline` warning.
177
- 3. **Neither.** The build fails with `brand-unavailable`, naming both fixes.
175
+ For example, supply a brand from your own configuration:
178
176
 
179
- When the live brand's digest differs from the cached copy's, the build warns with
180
- `brand-snapshot-stale` and refreshes the copy. Warnings are build diagnostics and editor log lines;
181
- they never fail a build. The editor and `check --watch` reuse a resolution briefly, so a brand
182
- edited elsewhere arrives within seconds rather than on the next save. A project that imports no
183
- brand needs no credentials for local work.
177
+ ```ts
178
+ import { samvaEditor } from "@samva/vite";
179
+ import { samvaBrandPlugin } from "@samva/markup/brand";
180
+
181
+ samvaEditor({
182
+ brandPlugin: samvaBrandPlugin,
183
+ brandResolver: {
184
+ resolve: async () => ({
185
+ ok: true,
186
+ brand: { slug: "local", css: "@theme { --color-primary: #2563eb; }" },
187
+ source: "configuration",
188
+ warnings: [],
189
+ }),
190
+ },
191
+ });
192
+ ```
193
+
194
+ `samva templates dev/check/build/render/export` supplies the Samva resolver and brand plugin. These
195
+ commands resolve `samva:brand` from the organization's live brand or a cached
196
+ `.samva/brands/<slug>.json` snapshot. Configure Samva credentials and snapshot behavior through the
197
+ CLI; the standalone Vite plugin does not read them.
184
198
 
185
199
  ## The `.samva/` folder
186
200
 
@@ -216,8 +230,8 @@ const receipt = await exportProject({ root: ".", out: "dist/email" });
216
230
  ```
217
231
 
218
232
  `root` is the project: its `theme.css` themes the export, as in `buildTemplates()`; `dir` narrows
219
- the templates directory, `theme` names another file or `false` disables it, and `samva:brand`
220
- resolves as described above.
233
+ the templates directory, `theme` names another file or `false` disables it, and `brandResolver` / `brandPlugin`
234
+ configure brand resolution as described above.
221
235
 
222
236
  Export writes `templates/<id>/<fixture>.html` and `.txt`, plus `.sms.txt` and `.whatsapp.json` for
223
237
  those channels, content-addressed files under `assets/`, and `catalog.json` with the asset mapping
@@ -0,0 +1,52 @@
1
+ import { BrandPlugin, EmailBrand } from "@samva/markup/brand";
2
+ import { EmailDiagnostic } from "@samva/markup/diagnostics";
3
+ //#region src/layout.d.ts
4
+ /** Directories scanned for templates when no `dir` is configured, in scan order. */
5
+ declare const DEFAULT_TEMPLATE_DIRS: readonly ["templates", "emails"];
6
+ /** The folder for files this package generates, relative to the project root. Gitignore it. */
7
+ declare const SAMVA_DIR = ".samva";
8
+ /** A project's files by root-relative POSIX path: text as strings, imported assets as bytes. */
9
+ type ProjectFiles = Readonly<Record<string, string | Uint8Array>>;
10
+ /**
11
+ * The absolute directories a project's templates live in. A configured `dir`
12
+ * is the only one scanned; otherwise every default directory that exists. A
13
+ * directory outside the root cannot be compiled, because a project's files are
14
+ * addressed relative to its root, so it is refused rather than half-read.
15
+ */
16
+ declare const templateDirectories: (root: string, dir?: string | undefined) => Promise<readonly string[]>;
17
+ /** Every `.tsx` file beneath the given directories, as root-relative paths, sorted. */
18
+ declare const discoverEntries: (root: string, dirs: readonly string[]) => Promise<readonly string[]>;
19
+ /**
20
+ * Read the project into the map the compiler consumes: scripts, stylesheets
21
+ * and JSON as text, imported assets as bytes. Hidden folders (`.samva`, `.git`)
22
+ * and `node_modules` are not part of a project.
23
+ */
24
+ declare const readProjectFiles: (root: string) => Promise<ProjectFiles>;
25
+ //#endregion
26
+ //#region src/brand.d.ts
27
+ /** A host-resolved brand; a host may attach its content digest. */
28
+ interface ResolvedBrand extends EmailBrand {
29
+ readonly digest?: string | undefined;
30
+ }
31
+ /** A finding emitted by the host that resolves the brand. */
32
+ interface BrandWarning {
33
+ readonly code: string;
34
+ readonly message: string;
35
+ }
36
+ type BrandResolution = {
37
+ readonly ok: true;
38
+ /** `undefined` when the project imports no brand. */
39
+ readonly brand: ResolvedBrand | undefined;
40
+ readonly source: string;
41
+ readonly warnings: readonly BrandWarning[];
42
+ } | {
43
+ readonly ok: false;
44
+ readonly message: string;
45
+ };
46
+ /** The host owns brand storage, authentication and resolution caching. */
47
+ interface BrandResolver {
48
+ readonly resolve: (files: ProjectFiles, themePath: string | undefined) => Promise<BrandResolution>;
49
+ }
50
+ //#endregion
51
+ export { DEFAULT_TEMPLATE_DIRS as a, discoverEntries as c, ResolvedBrand as i, readProjectFiles as l, BrandResolver as n, ProjectFiles as o, BrandWarning as r, SAMVA_DIR as s, BrandResolution as t, templateDirectories as u };
52
+ //# sourceMappingURL=brand-BkXQMGgY.d.ts.map
package/dist/build.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { _ as TemplateChannel, a as ProjectOptions } from "./project-CRqjs-wV.js";
1
+ import { ProjectOptions, TemplateChannel } from "./project.js";
2
2
  import { RenderedIrEmail, RenderedIrWhatsApp, TemplateIr } from "@samva/markup/render";
3
3
  import { EmailDiagnostic } from "@samva/markup/diagnostics";
4
4
  //#region src/build.d.ts
package/dist/build.js CHANGED
@@ -1,4 +1,4 @@
1
- import { d as emailCompatibility, f as finding, h as renderEmailFixtures, i as loadProject, m as renderChannelFixture, n as createProjectSession, p as hasErrors, s as isDeliverableBase } from "./project-Ut6wra0r.js";
1
+ import { C as renderEmailFixtures, S as renderChannelFixture, b as finding, i as loadProject, n as createProjectSession, s as isDeliverableBase, x as hasErrors, y as emailCompatibility } from "./project-DwbOoPDk.js";
2
2
  import markupPackage from "@samva/markup/package.json" with { type: "json" };
3
3
  //#region src/build.ts
4
4
  /** The compiler a build ran, as a publication records it. */
package/dist/dev.d.ts CHANGED
@@ -1,5 +1,13 @@
1
+ import { n as BrandResolver } from "./brand-BkXQMGgY.js";
2
+ import { t as EditorAffordances } from "./editor-DfdlKEeu.js";
3
+ import { BrandPlugin } from "@samva/markup/brand";
1
4
  //#region src/dev.d.ts
2
5
  interface DevServerOptions {
6
+ readonly brandResolver?: BrandResolver | undefined;
7
+ readonly brandPlugin?: BrandPlugin | undefined;
8
+ /** Whether the host provides authenticated editor capabilities. */
9
+ readonly authenticated?: boolean | undefined;
10
+ readonly editorAffordances?: EditorAffordances | undefined;
3
11
  /** The project root. Default: the working directory. */
4
12
  readonly root?: string | undefined;
5
13
  /** The templates directory, relative to `root`. Default: `templates/` and `emails/`, whichever exist. */
package/dist/dev.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as samvaEditor } from "./editor-B_2rlC_U.js";
1
+ import { t as samvaEditor } from "./editor-DnFOzVJA.js";
2
2
  import { resolve } from "node:path";
3
3
  //#region src/dev.ts
4
4
  /** Start the local editor for a template project. */
@@ -19,7 +19,13 @@ const startDevServer = async (options = {}) => {
19
19
  ...options.host === void 0 ? {} : { host: options.host },
20
20
  open: options.open === true
21
21
  },
22
- plugins: [samvaEditor({ ...options.dir === void 0 ? {} : { templatesDir: options.dir } })]
22
+ plugins: [samvaEditor({
23
+ templatesDir: options.dir,
24
+ brandResolver: options.brandResolver,
25
+ brandPlugin: options.brandPlugin,
26
+ authenticated: options.authenticated,
27
+ editorAffordances: options.editorAffordances
28
+ })]
23
29
  });
24
30
  try {
25
31
  await server.listen();
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--spacing:.25rem;--container-lg:32rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--ease-out:cubic-bezier(0, 0, .2, 1);--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent-email:var(--accent-email);--color-sel-soft:var(--sel-soft);--color-sel-mid:var(--sel-mid);--color-background:var(--background);--color-foreground:var(--foreground);--color-muted:var(--muted);--color-muted-foreground:var(--muted-foreground);--color-border:var(--border);--color-border-subtle:var(--border-subtle);--color-surface-inset:var(--surface-inset);--color-surface-elevated:var(--surface-elevated);--color-primary:var(--primary);--color-primary-foreground:var(--primary-foreground);--color-placeholder:var(--placeholder);--color-status-success:var(--status-success);--color-status-warning:var(--status-warning);--color-status-error:var(--status-error)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[80\]{z-index:80}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.z-\[111\]{z-index:111}.z-\[120\]{z-index:120}.z-\[130\]{z-index:130}.z-\[131\]{z-index:131}.z-\[200\]{z-index:200}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-4{margin-block:calc(var(--spacing) * 4)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-1{margin-right:var(--spacing)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-\[7px\]{width:7px;height:7px}.size-\[11px\]{width:11px;height:11px}.size-\[13px\]{width:13px;height:13px}.size-\[14px\]{width:14px;height:14px}.size-\[15px\]{width:15px;height:15px}.size-\[16px\]{width:16px;height:16px}.size-full{width:100%;height:100%}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-7\.5{height:calc(var(--spacing) * 7.5)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-\[18px\]{height:18px}.h-\[22px\]{height:22px}.h-\[30px\]{height:30px}.h-\[92px\]{height:92px}.h-\[calc\(100\%-2rem\)\]{height:calc(100% - 2rem)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-\[85dvh\]{max-height:85dvh}.max-h-\[min\(560px\,70vh\)\]{max-height:min(560px,70vh)}.min-h-0{min-height:0}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-40{min-height:calc(var(--spacing) * 40)}.min-h-52{min-height:calc(var(--spacing) * 52)}.min-h-full{min-height:100%}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-\[30px\]{width:30px}.w-\[42px\]{width:42px}.w-\[52px\]{width:52px}.w-\[82px\]{width:82px}.w-\[116px\]{width:116px}.w-\[150px\]{width:150px}.w-\[360px\]{width:360px}.w-\[375px\]{width:375px}.w-\[380px\]{width:380px}.w-\[400px\]{width:400px}.w-\[420px\]{width:420px}.w-\[600px\]{width:600px}.w-\[clamp\(96px\,18vw\,240px\)\]{width:clamp(96px,18vw,240px)}.w-\[min\(840px\,calc\(100vw-32px\)\)\]{width:min(840px,100vw - 32px)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[72px\]{max-width:72px}.max-w-\[92vw\]{max-width:92vw}.max-w-\[170px\]{max-width:170px}.max-w-\[180px\]{max-width:180px}.max-w-\[280px\]{max-width:280px}.max-w-\[420px\]{max-width:420px}.max-w-\[460px\]{max-width:460px}.max-w-\[720px\]{max-width:720px}.max-w-\[1100px\]{max-width:1100px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-\[8ch\]{min-width:8ch}.min-w-\[128px\]{min-width:128px}.min-w-\[var\(--anchor-width\)\]{min-width:var(--anchor-width)}.flex-1{flex:1}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-\[var\(--transform-origin\)\]{transform-origin:var(--transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.grid-rows-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-rows:auto minmax(0,1fr) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--color-border)}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[5px\]{border-radius:5px}.rounded-\[6px\]{border-radius:6px}.rounded-\[7px\]{border-radius:7px}.rounded-\[9px\]{border-radius:9px}.rounded-\[18px\]{border-radius:18px}.rounded-\[28px\]{border-radius:28px}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[color\:var\(--editor-well-border\)\]{border-color:var(--editor-well-border)}.border-accent-email,.border-accent-email\/40{border-color:var(--color-accent-email)}@supports (color:color-mix(in lab, red, red)){.border-accent-email\/40{border-color:color-mix(in oklab, var(--color-accent-email) 40%, transparent)}}.border-border{border-color:var(--color-border)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-border\/80{border-color:var(--color-border)}@supports (color:color-mix(in lab, red, red)){.border-border\/80{border-color:color-mix(in oklab, var(--color-border) 80%, transparent)}}.border-status-error\/30{border-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.border-status-error\/30{border-color:color-mix(in oklab, var(--color-status-error) 30%, transparent)}}.border-status-error\/40{border-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.border-status-error\/40{border-color:color-mix(in oklab, var(--color-status-error) 40%, transparent)}}.border-status-warning\/45{border-color:var(--color-status-warning)}@supports (color:color-mix(in lab, red, red)){.border-status-warning\/45{border-color:color-mix(in oklab, var(--color-status-warning) 45%, transparent)}}.border-transparent{border-color:#0000}.bg-\[\#e9e2d8\]{background-color:#e9e2d8}.bg-\[var\(--editor-backdrop\,rgb\(0_0_0\/0\.28\)\)\]{background-color:var(--editor-backdrop,#00000047)}.bg-\[var\(--editor-canvas-bg\)\]{background-color:var(--editor-canvas-bg)}.bg-\[var\(--editor-raised-bg\)\]{background-color:var(--editor-raised-bg)}.bg-\[var\(--editor-scrollbar-thumb\)\]{background-color:var(--editor-scrollbar-thumb)}.bg-\[var\(--editor-well-bg\)\]{background-color:var(--editor-well-bg)}.bg-accent-email{background-color:var(--color-accent-email)}.bg-background,.bg-background\/45{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/45{background-color:color-mix(in oklab, var(--color-background) 45%, transparent)}}.bg-background\/92{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/92{background-color:color-mix(in oklab, var(--color-background) 92%, transparent)}}.bg-background\/95{background-color:var(--color-background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab, var(--color-background) 95%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-foreground{background-color:var(--color-foreground)}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground{background-color:var(--color-muted-foreground)}.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted) 30%, transparent)}}.bg-primary{background-color:var(--color-primary)}.bg-sel-soft{background-color:var(--color-sel-soft)}.bg-status-error,.bg-status-error\/5{background-color:var(--color-status-error)}@supports (color:color-mix(in lab, red, red)){.bg-status-error\/5{background-color:color-mix(in oklab, var(--color-status-error) 5%, transparent)}}.bg-status-success\/10{background-color:var(--color-status-success)}@supports (color:color-mix(in lab, red, red)){.bg-status-success\/10{background-color:color-mix(in oklab, var(--color-status-success) 10%, transparent)}}.bg-status-success\/12{background-color:var(--color-status-success)}@supports (color:color-mix(in lab, red, red)){.bg-status-success\/12{background-color:color-mix(in oklab, var(--color-status-success) 12%, transparent)}}.bg-status-warning{background-color:var(--color-status-warning)}.bg-surface-elevated{background-color:var(--color-surface-elevated)}.bg-surface-inset,.bg-surface-inset\/40{background-color:var(--color-surface-inset)}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/40{background-color:color-mix(in oklab, var(--color-surface-inset) 40%, transparent)}}.bg-surface-inset\/80{background-color:var(--color-surface-inset)}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/80{background-color:color-mix(in oklab, var(--color-surface-inset) 80%, transparent)}}.bg-transparent{background-color:#0000}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-\[7px\]{padding-inline:7px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-\[3px\]{padding-block:3px}.py-px{padding-block:1px}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.82em\]{font-size:.82em}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11\.5px\]{font-size:11.5px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[color\:var\(--editor-raised-fg\)\]{color:var(--editor-raised-fg)}.text-accent-email{color:var(--color-accent-email)}.text-background{color:var(--color-background)}.text-foreground{color:var(--color-foreground)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-placeholder{color:var(--color-placeholder)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-status-error{color:var(--color-status-error)}.text-status-success{color:var(--color-status-success)}.text-status-warning{color:var(--color-status-warning)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_0_1px_var\(--accent-email\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--accent-email));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--editor-raised-shadow\)\]{--tw-shadow:var(--editor-raised-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--editor-well-shadow\)\]{--tw-shadow:var(--editor-well-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-floating\)\]{--tw-shadow:var(--shadow-floating);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-lg\)\]{--tw-shadow:var(--shadow-lg);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-md\)\]{--tw-shadow:var(--shadow-md);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-sm\)\]{--tw-shadow:var(--shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-xl\)\]{--tw-shadow:var(--shadow-xl);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--shadow-xs\)\]{--tw-shadow:var(--shadow-xs);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-accent-email\/20{--tw-ring-color:var(--color-accent-email)}@supports (color:color-mix(in lab, red, red)){.ring-accent-email\/20{--tw-ring-color:color-mix(in oklab, var(--color-accent-email) 20%, transparent)}}.ring-primary{--tw-ring-color:var(--color-primary)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[border-color\,box-shadow\]{transition-property:border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,background-color\,border-color\,box-shadow\]{transition-property:color,background-color,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,scale\,opacity\]{transition-property:transform,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,transform\,box-shadow\]{transition-property:width,transform,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-180{--tw-duration:.18s;transition-duration:.18s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.\[overflow-anchor\:none\]{overflow-anchor:none}.ring-inset{--tw-ring-inset:inset}.placeholder\:text-muted-foreground\/60::placeholder{color:var(--color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/60::placeholder{color:color-mix(in oklab, var(--color-muted-foreground) 60%, transparent)}}.placeholder\:text-placeholder::placeholder{color:var(--color-placeholder)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-y-0:before{content:var(--tw-content);inset-block:0}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:-translate-x-1\/2:before{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.before\:bg-border:before{content:var(--tw-content);background-color:var(--color-border)}.before\:transition-colors:before{content:var(--tw-content);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:h-10:after{content:var(--tw-content);height:calc(var(--spacing) * 10)}.after\:w-1:after{content:var(--tw-content);width:var(--spacing)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.after\:rounded-full:after{content:var(--tw-content);border-radius:2147483647px}.after\:bg-muted-foreground\/35:after{content:var(--tw-content);background-color:var(--color-muted-foreground)}@supports (color:color-mix(in lab, red, red)){.after\:bg-muted-foreground\/35:after{background-color:color-mix(in oklab, var(--color-muted-foreground) 35%, transparent)}}.after\:opacity-60:after{content:var(--tw-content);opacity:.6}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.first\:mt-0:first-child{margin-top:0}.read-only\:bg-muted:read-only{background-color:var(--color-muted)}.read-only\:shadow-none:read-only{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.hover\:border-sel-mid:hover{border-color:var(--color-sel-mid)}.hover\:bg-\[var\(--editor-raised-bg-hover\)\]:hover{background-color:var(--editor-raised-bg-hover)}.hover\:bg-\[var\(--editor-scrollbar-thumb-hover\)\]:hover{background-color:var(--editor-scrollbar-thumb-hover)}.hover\:bg-muted:hover{background-color:var(--color-muted)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-status-error:hover{color:var(--color-status-error)}.hover\:opacity-90:hover{opacity:.9}.hover\:before\:w-0\.5:hover:before{content:var(--tw-content);width:calc(var(--spacing) * .5)}.hover\:before\:bg-accent-email:hover:before,.hover\:after\:bg-accent-email:hover:after{content:var(--tw-content);background-color:var(--color-accent-email)}.hover\:after\:opacity-100:hover:after{content:var(--tw-content);opacity:1}}.focus\:bg-background:focus,.focus-visible\:bg-background:focus-visible{background-color:var(--color-background)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.active\:shadow-\[var\(--editor-raised-shadow-pressed\)\]:active{--tw-shadow:var(--editor-raised-shadow-pressed);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.active\:before\:bg-accent-email:active:before{content:var(--tw-content);background-color:var(--color-accent-email)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-surface-inset:disabled{background-color:var(--color-surface-inset)}.disabled\:text-muted-foreground:disabled{color:var(--color-muted-foreground)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:shadow-none:disabled{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-expanded\:bg-\[var\(--editor-raised-bg-hover\)\][aria-expanded=true]{background-color:var(--editor-raised-bg-hover)}.aria-pressed\:border-\[color\:var\(--editor-chip-border\)\][aria-pressed=true]{border-color:var(--editor-chip-border)}.aria-pressed\:bg-\[var\(--editor-chip-bg\)\][aria-pressed=true]{background-color:var(--editor-chip-bg)}.aria-pressed\:bg-\[var\(--editor-pressed-bg\)\][aria-pressed=true]{background-color:var(--editor-pressed-bg)}.aria-pressed\:text-\[color\:var\(--editor-chip-fg\)\][aria-pressed=true]{color:var(--editor-chip-fg)}.aria-pressed\:shadow-\[var\(--editor-chip-shadow\)\][aria-pressed=true]{--tw-shadow:var(--editor-chip-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-pressed\:shadow-\[var\(--editor-pressed-shadow\)\][aria-pressed=true]{--tw-shadow:var(--editor-pressed-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-active\:border-\[color\:var\(--editor-chip-border\)\][data-active]{border-color:var(--editor-chip-border)}.data-active\:bg-\[var\(--editor-chip-bg\)\][data-active]{background-color:var(--editor-chip-bg)}.data-active\:text-\[color\:var\(--editor-chip-fg\)\][data-active]{color:var(--editor-chip-fg)}.data-active\:shadow-\[var\(--editor-chip-shadow\)\][data-active]{--tw-shadow:var(--editor-chip-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-disabled\:shadow-none[data-disabled]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-highlighted\:bg-muted[data-highlighted]{background-color:var(--color-muted)}.data-popup-open\:bg-\[var\(--editor-raised-bg-hover\)\][data-popup-open]{background-color:var(--editor-raised-bg-hover)}.data-\[ending-style\]\:scale-95[data-ending-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[ending-style\]\:opacity-0[data-ending-style]{opacity:0}.data-\[highlighted\]\:bg-sel-soft[data-highlighted]{background-color:var(--color-sel-soft)}.data-\[highlighted\]\:text-accent-email[data-highlighted]{color:var(--color-accent-email)}.data-\[pressed\]\:border-\[color\:var\(--editor-chip-border\)\][data-pressed]{border-color:var(--editor-chip-border)}.data-\[pressed\]\:bg-\[var\(--editor-chip-bg\)\][data-pressed]{background-color:var(--editor-chip-bg)}.data-\[pressed\]\:text-\[color\:var\(--editor-chip-fg\)\][data-pressed]{color:var(--editor-chip-fg)}.data-\[pressed\]\:shadow-\[var\(--editor-chip-shadow\)\][data-pressed]{--tw-shadow:var(--editor-chip-shadow);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[starting-style\]\:scale-95[data-starting-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}@media (width>=40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}}.dark\:grid:where(.dark,.dark *){display:grid}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:bg-\[\#0b141a\]:where(.dark,.dark *){background-color:#0b141a}.dark\:read-only\:bg-muted\/40:where(.dark,.dark *):read-only{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.dark\:read-only\:bg-muted\/40:where(.dark,.dark *):read-only{background-color:color-mix(in oklab, var(--color-muted) 40%, transparent)}}.\[\&_\[data-channel-button\]\]\:px-1\.5 [data-channel-button]{padding-inline:calc(var(--spacing) * 1.5)}.\[\&_\[data-channel-label\]\]\:hidden [data-channel-label]{display:none}}:root{--accent-email:oklch(62% .21 255);--sel-soft:oklch(62% .21 255/.08);--sel-mid:oklch(62% .21 255/.35);--editor-scrollbar-thumb:oklch(78% .01 286);--editor-scrollbar-thumb-hover:oklch(62% .015 286)}.dark{--sel-soft:oklch(62% .21 255/.16);--editor-scrollbar-thumb:oklch(32% .01 286);--editor-scrollbar-thumb-hover:oklch(42% .012 286)}.samva-editor-shell{--editor-bg:var(--background);--editor-fg:var(--foreground);--editor-surface:var(--card);--editor-surface-elevated:var(--surface-elevated);--editor-surface-inset:var(--surface-inset);--editor-muted:var(--muted);--editor-muted-fg:var(--muted-foreground);--editor-placeholder:var(--placeholder);--editor-border:var(--border);--editor-border-subtle:var(--border-subtle);--editor-hover:var(--muted);--editor-active:var(--accent);--editor-accent:var(--accent-email);--editor-accent-fg:oklch(100% 0 0);--editor-selection-soft:var(--sel-soft);--editor-selection-mid:var(--sel-mid);--editor-focus-ring:var(--ring);--editor-disabled-fg:var(--muted-foreground);--editor-success:var(--status-success);--editor-warning:var(--status-warning);--editor-error:var(--status-error);--editor-info:var(--status-info);--editor-canvas-bg:var(--surface-inset);--editor-canvas-grid:var(--border)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-canvas-grid:color-mix(in oklab, var(--border) 64%, transparent)}}.samva-editor-shell{--editor-canvas-hover:var(--editor-selection-mid);--editor-canvas-selected:var(--editor-accent);--editor-canvas-selected-fg:var(--editor-accent-fg);--editor-canvas-generated:oklch(62% .21 305);--editor-canvas-document-bg:oklch(100% 0 0);--editor-backdrop:oklab(0% none none/.28);--editor-shadow-control:var(--shadow-xs);--editor-shadow-overlay:var(--shadow-lg);--editor-shadow-floating:var(--shadow-floating);--editor-raised-bg:var(--primary);--editor-raised-bg-hover:var(--editor-raised-bg)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-raised-bg-hover:color-mix(in oklab, var(--editor-raised-bg), white 8%)}}.samva-editor-shell{--editor-raised-fg:var(--primary-foreground);--editor-raised-shadow:0 1px 2px 0 oklch(0% 0 0/.2), 0 0 0 1px var(--foreground), inset 0 3px 5px 0 oklch(100% 0 0/.16), inset 0 0 0 1px oklch(100% 0 0/.12), inset 0 -6px 10px 0 oklch(0% 0 0/.2)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-raised-shadow:0 1px 2px 0 oklch(0% 0 0/.2), 0 0 0 1px color-mix(in oklab, var(--foreground) 16%, transparent), inset 0 3px 5px 0 oklch(100% 0 0/.16), inset 0 0 0 1px oklch(100% 0 0/.12), inset 0 -6px 10px 0 oklch(0% 0 0/.2)}}.samva-editor-shell{--editor-raised-shadow-pressed:0 0 0 1px var(--foreground), inset 0 2px 4px 0 oklch(0% 0 0/.35)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-raised-shadow-pressed:0 0 0 1px color-mix(in oklab, var(--foreground) 16%, transparent), inset 0 2px 4px 0 oklch(0% 0 0/.35)}}.samva-editor-shell{--editor-chip-bg:var(--background);--editor-chip-fg:var(--foreground);--editor-chip-border:var(--border);--editor-chip-shadow:var(--shadow-md);--editor-pressed-bg:var(--accent)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-pressed-bg:color-mix(in oklab, var(--accent), black 3%)}}.samva-editor-shell{--editor-pressed-shadow:inset 0 1px 3px 0 oklch(0% 0 0/.12);--editor-well-bg:var(--surface-inset)}@supports (color:color-mix(in lab, red, red)){.samva-editor-shell{--editor-well-bg:color-mix(in oklab, var(--surface-inset) 55%, transparent)}}.samva-editor-shell{--editor-well-border:var(--input);--editor-well-shadow:inset 0 1px 2px 0 oklch(0% 0 0/.05);background-color:var(--editor-bg);color:var(--editor-fg);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-size:13px;line-height:1.45}.samva-editor-frame{container:samva-editor/inline-size}.dark .samva-editor-shell{--editor-raised-bg-hover:var(--editor-raised-bg)}@supports (color:color-mix(in lab, red, red)){.dark .samva-editor-shell{--editor-raised-bg-hover:color-mix(in oklab, var(--editor-raised-bg), black 8%)}}.dark .samva-editor-shell{--editor-raised-shadow:0 1px 2px 0 oklch(0% 0 0/.35), 0 0 0 1px oklch(0% 0 0/.4), inset 0 3px 5px 0 oklch(0% 0 0/.1), inset 0 0 0 1px oklch(100% 0 0/.25), inset 0 -6px 10px 0 oklch(100% 0 0/.22);--editor-raised-shadow-pressed:0 0 0 1px oklch(0% 0 0/.4), inset 0 2px 4px 0 oklch(0% 0 0/.25);--editor-pressed-bg:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark .samva-editor-shell{--editor-pressed-bg:color-mix(in oklab, var(--accent), white 12%)}}.dark .samva-editor-shell{--editor-pressed-shadow:inset 0 1px 3px 0 oklch(0% 0 0/.45);--editor-well-bg:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark .samva-editor-shell{--editor-well-bg:color-mix(in oklab, var(--input) 20%, transparent)}}.dark .samva-editor-shell{--editor-well-shadow:inset 0 1px 2px 0 oklch(0% 0 0/.35);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@container samva-editor (width<=1279px){.samva-editor-shell[data-layout=wide] [data-editor-rail=right],.samva-editor-shell[data-layout=wide] [data-editor-resize=right]{display:none}}@container samva-editor (width<=979px){.samva-editor-shell[data-layout=wide] [data-editor-rail=left],.samva-editor-shell[data-layout=wide] [data-editor-resize=left]{display:none}}.samva-inspector-content>div{border:0;border-bottom:1px solid var(--border-subtle);background:0 0;border-radius:0;margin:0;padding-inline:12px}.samva-inspector-content>div:last-child{border-bottom:0}.samva-radius-slider{appearance:none;cursor:ew-resize;background:0 0;height:18px}.samva-radius-slider::-webkit-slider-runnable-track{background:var(--border);border-radius:999px;height:3px}.samva-radius-slider::-webkit-slider-thumb{appearance:none;border:1px solid var(--border);background:var(--foreground);width:12px;height:12px;box-shadow:var(--editor-shadow-control);border-radius:999px;margin-top:-4.5px}.samva-radius-slider::-moz-range-track{background:var(--border);border-radius:999px;height:3px}.samva-radius-slider::-moz-range-thumb{border:1px solid var(--border);background:var(--foreground);width:12px;height:12px;box-shadow:var(--editor-shadow-control);border-radius:999px}.samva-radius-slider:focus-visible{outline:2px solid var(--accent-email)}@supports (color:color-mix(in lab, red, red)){.samva-radius-slider:focus-visible{outline:2px solid color-mix(in oklab, var(--accent-email) 55%, transparent)}}.samva-radius-slider:focus-visible{outline-offset:3px}.samva-radius-slider-overridden::-webkit-slider-thumb{background:var(--accent-email)}.samva-radius-slider-overridden::-moz-range-thumb{background:var(--accent-email)}@container samva-editor (width<=719px){.samva-editor-workspace .samva-editor-scroll{padding-inline:16px;padding-top:16px}.samva-editor-shell button{touch-action:manipulation}}.samva-editor-workspace{background-color:var(--editor-canvas-bg);background-image:linear-gradient(to right, var(--editor-canvas-grid) 1px, transparent 1px), linear-gradient(to bottom, var(--editor-canvas-grid) 1px, transparent 1px);background-position:top;background-size:24px 24px}.dark .samva-editor-workspace{--editor-canvas-grid:var(--editor-border)}@supports (color:color-mix(in lab, red, red)){.dark .samva-editor-workspace{--editor-canvas-grid:color-mix(in oklab, var(--editor-border) 55%, transparent)}}.samva-editor-scroll{color-scheme:inherit;scrollbar-width:thin;scrollbar-color:var(--editor-scrollbar-thumb) transparent}.samva-editor-scroll::-webkit-scrollbar{width:10px;height:10px}.samva-editor-scroll::-webkit-scrollbar-track{background:0 0}.samva-editor-scroll::-webkit-scrollbar-thumb{background-color:var(--editor-scrollbar-thumb);background-clip:padding-box;border:2px solid #0000;border-radius:999px}.samva-editor-scroll::-webkit-scrollbar-thumb:hover{background-color:var(--editor-scrollbar-thumb-hover);background-clip:padding-box}@media (prefers-reduced-motion:reduce){.samva-editor-shell,.samva-editor-shell *,.samva-editor-shell :before,.samva-editor-shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.1% .005 285.823);--muted:oklch(96.7% .001 286.375);--muted-foreground:oklch(55.2% .016 285.938);--accent:oklch(96.7% .001 286.375);--border:oklch(92% .004 286.32);--input:oklch(92% .004 286.32);--border-subtle:oklch(94% .002 286);--surface-inset:oklch(97.5% .001 286);--surface-elevated:oklch(99.5% 0 0);--primary:oklch(21% .006 285.885);--primary-foreground:oklch(98.5% 0 0);--placeholder:oklch(65% .012 285.9);--status-success:oklch(65% .22 155);--status-warning:oklch(75% .18 75);--status-error:oklch(57.7% .245 27.325);--shadow-md:0 2px 4px -1px oklch(0% 0 0/.06), 0 6px 12px -2px oklch(0% 0 0/.08);--shadow-xl:0 12px 24px -6px oklch(0% 0 0/.1), 0 32px 64px -12px oklch(0% 0 0/.16)}.dark{--background:oklch(14.1% .005 285.823);--foreground:oklch(98.5% 0 0);--muted:oklch(27.4% .006 286.033);--muted-foreground:oklch(75% .015 286.067);--accent:oklch(27.4% .006 286.033);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--border-subtle:oklch(100% 0 0/.07);--surface-inset:oklch(16% .004 286);--surface-elevated:oklch(18% .005 286);--primary:oklch(92% .004 286.32);--primary-foreground:oklch(21% .006 285.885);--placeholder:oklch(68% .012 285.9);--shadow-md:0 2px 4px -1px oklch(0% 0 0/.4), 0 6px 12px -2px oklch(0% 0 0/.45);--shadow-xl:0 12px 24px -6px oklch(0% 0 0/.55), 0 32px 64px -12px oklch(0% 0 0/.7)}html,body,#root{height:100%;margin:0}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{color:var(--foreground);background:var(--background);-webkit-font-smoothing:antialiased;font-family:ui-sans-serif,system-ui,sans-serif;font-size:13px;line-height:1.45;overflow:hidden}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}