stillmade-sdk 0.1.42 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.stillmade/sdk-baseline.json +6 -8
- package/AGENTS.md +15 -10
- package/FRAME_VIEWS.md +113 -0
- package/INTERFACE_DESIGN.md +62 -22
- package/MOBILE_UI.md +4 -2
- package/MODULES.md +152 -6
- package/PASTE_TO_LLM.md +35 -25
- package/README.md +3 -2
- package/SDK.md +994 -550
- package/UI_AESTHETIC.md +22 -2
- package/blocks/generate/package.js +1 -0
- package/blocks/generate/versions/1.0.0/package.js +463 -0
- package/docs/build/audio-to-editor.md +36 -0
- package/docs/build/block-builder-contract.md +150 -0
- package/docs/build/comfyui.md +227 -0
- package/docs/build/concepts.md +40 -0
- package/docs/build/context.md +159 -0
- package/docs/build/cookbook.md +57 -0
- package/docs/build/custom-interface.md +617 -0
- package/docs/build/data-types.md +83 -0
- package/docs/build/frame-views.md +259 -0
- package/docs/build/generate-media.md +59 -0
- package/docs/build/github-applications.md +314 -0
- package/docs/build/hosted-images.md +214 -0
- package/docs/build/hosted-music.md +39 -0
- package/docs/build/hosted-speech.md +157 -0
- package/docs/build/hosted-text.md +246 -0
- package/docs/build/image-description.md +49 -0
- package/docs/build/interface-design.md +343 -0
- package/docs/build/javascript.md +63 -0
- package/docs/build/local-preview.md +61 -0
- package/docs/build/media-analysis.md +27 -0
- package/docs/build/media.md +400 -0
- package/docs/build/mobile-ui.md +106 -0
- package/docs/build/modules.md +487 -0
- package/docs/build/original-blocks.md +70 -0
- package/docs/build/outside-apis.md +128 -0
- package/docs/build/production-context-templates.md +12 -0
- package/docs/build/project-storage.md +94 -0
- package/docs/build/quickstart.md +48 -0
- package/docs/build/recipes.md +103 -0
- package/docs/build/script-handoff.md +45 -0
- package/docs/build/script-writer.md +34 -0
- package/docs/build/state.md +223 -0
- package/docs/build/testing.md +112 -0
- package/docs/build/timeline-edits.md +116 -0
- package/docs/build/timeline-proposals.md +76 -0
- package/docs/build/transcription.md +59 -0
- package/docs/build/triggers.md +59 -0
- package/docs/build/tutorial.md +52 -0
- package/docs/build/typescript.md +34 -0
- package/docs/build/video-generation.md +61 -0
- package/docs/build/web-reading.md +37 -0
- package/docs/build/with-your-ai.md +27 -0
- package/docs/changelog.md +9 -0
- package/docs/creators.md +21 -0
- package/docs/distribute/discovery.md +43 -0
- package/docs/distribute/imports.md +58 -0
- package/docs/distribute/publishing.md +29 -0
- package/docs/distribute/sdk-versions.md +36 -0
- package/docs/distribute/selling.md +14 -0
- package/docs/distribute/teams.md +60 -0
- package/docs/distribute/versioning.md +28 -0
- package/docs/examples.md +23 -0
- package/docs/gallery.md +26 -0
- package/docs/index.md +50 -0
- package/docs/native-mcp.md +307 -0
- package/docs/project-types/automation.md +43 -0
- package/docs/project-types/batches.md +50 -0
- package/docs/project-types/build.md +42 -0
- package/docs/project-types/completion.md +15 -0
- package/docs/project-types/conditions.md +21 -0
- package/docs/project-types/hosted-review.md +115 -0
- package/docs/project-types/onboarding.md +75 -0
- package/docs/project-types/running.md +309 -0
- package/docs/project-types/testing.md +72 -0
- package/docs/reference/application-artifacts.md +87 -0
- package/docs/reference/authoring-guide.md +134 -0
- package/docs/reference/browser-applications.md +267 -0
- package/docs/reference/capabilities.md +45 -0
- package/docs/reference/cli.md +71 -0
- package/docs/reference/connection-api.md +59 -0
- package/docs/reference/cooperative-jobs.md +13 -0
- package/docs/reference/desktop-capabilities.md +172 -0
- package/docs/reference/desktop-execution.md +77 -0
- package/docs/reference/errors.md +233 -0
- package/docs/reference/execution.md +800 -0
- package/docs/reference/first-party-blocks.md +40 -0
- package/docs/reference/generation-models.md +59 -0
- package/docs/reference/limits.md +306 -0
- package/docs/reference/manifest-kinds-controls.md +36 -0
- package/docs/reference/manifest.md +181 -0
- package/docs/reference/operations.md +36 -0
- package/docs/reference/package-jobs.md +35 -0
- package/docs/reference/parity.md +55 -0
- package/docs/reference/permissions.md +86 -0
- package/docs/reference/ports.md +26 -0
- package/docs/reference/types.md +268 -0
- package/docs/reference/universal-resolver.md +303 -0
- package/docs/reference/view-bridge.md +60 -0
- package/docs/reference/view-rules.md +15 -0
- package/docs/reference/workspace-sync.md +25 -0
- package/docs/sdk.md +34 -0
- package/docs/tools/block-remix.md +211 -0
- package/docs/tools/llm.md +2213 -0
- package/docs/tools/repository-adaptation.md +613 -0
- package/examples/check-clip.stillmade.json +4 -1
- package/examples/generate-video.stillmade.json +6 -2
- package/examples/research-topic.stillmade.json +5 -1
- package/examples/text-workflow.stillmade.json +3 -32
- package/examples/timeline-polish.stillmade.json +11 -3
- package/examples/transcribe-audio.stillmade.json +11 -3
- package/package.json +1 -1
- package/packages/block-cli/cli.js +13 -6
- package/packages/block-cli/dev-host/assets/host.js +76 -38
- package/packages/block-cli/dev-host/assets/index.css +1 -1
- package/packages/block-cli/format.js +1 -1
- package/packages/block-cli/templates.js +31 -13
- package/packages/block-cli/type-packages.js +119 -0
- package/packages/block-platform/block-readiness.js +5 -0
- package/packages/block-platform/canvas.js +2 -1
- package/packages/block-platform/catalog.js +27 -48
- package/packages/block-platform/native-host-inventory.js +0 -226
- package/packages/block-platform/plain-descriptions.js +1 -25
- package/packages/block-platform/project-type-starters.js +13 -53
- package/packages/block-platform/script-handoff.js +2 -4
- package/packages/block-platform/type-workspace.js +2 -0
- package/packages/block-sdk/appearance.js +3 -1
- package/packages/block-sdk/block-tier.js +1 -1
- package/packages/block-sdk/builder-contract.js +10 -8
- package/packages/block-sdk/capabilities.js +1 -1
- package/packages/block-sdk/contracts.js +6 -2
- package/packages/block-sdk/first-party-identities.js +1 -84
- package/packages/block-sdk/first-party-packages.js +3 -85
- package/packages/block-sdk/generation-catalog.js +15 -3
- package/packages/block-sdk/index.d.ts +2 -1
- package/packages/block-sdk/media-analysis-example.js +1 -1
- package/packages/block-sdk/mock-host.js +7 -1
- package/packages/block-sdk/module-host-calls.js +35 -10
- package/packages/block-sdk/module-hosted.js +15 -2
- package/packages/block-sdk/module-media-access.js +71 -0
- package/packages/block-sdk/module-node.js +1 -1
- package/packages/block-sdk/portable-media-actions.js +1 -1
- package/packages/block-sdk/runtime.js +1 -1
- package/packages/block-sdk/timeline-proposal-example.js +1 -1
- package/packages/block-sdk/transcription-example.js +1 -1
- package/packages/block-sdk/video-generation-example.js +1 -1
- package/packages/block-sdk/view-bridge.js +4 -1
- package/packages/block-sdk/view-design.js +17 -14
- package/packages/block-sdk/web-example.js +1 -1
- package/packages/design-system/block-kit.css +48 -12
- package/packages/design-system/block-kit.html +3 -2
- package/blocks/mcp-motion-planner/versions/1.1.0/package.js +0 -97
- package/blocks/motion-designer/versions/1.0.1/package.js +0 -173318
- package/blocks/motion-designer/versions/1.0.2/package.js +0 -173318
- package/blocks/motion-frame-review/versions/1.1.1/package.js +0 -465
- package/blocks/motion-frame-review/versions/1.1.2/package.snapshot.js +0 -572
- package/blocks/narration/package.js +0 -1
- package/blocks/narration/versions/1.0.0/package.js +0 -221
- package/blocks/narration/versions/1.0.1/package.js +0 -221
- package/blocks/native/sm.animated-scene/versions/2.0.0/package.js +0 -475
- package/blocks/native/sm.animated-scene/versions/2.1.0/package.js +0 -498
- package/blocks/native/sm.animated-scene/versions/2.2.0/package.js +0 -524
- package/blocks/native/sm.animated-scene/versions/2.3.0/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.1/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.2/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.3/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.4/package.js +0 -676
- package/blocks/native/sm.animated-scene/versions/2.3.5/package.js +0 -693
- package/blocks/native/sm.animated-scene/versions/2.3.6/package.js +0 -700
- package/blocks/native/sm.animated-scene/versions/2.3.7/package.js +0 -747
- package/blocks/native/sm.animated-scene/versions/2.3.8/package.js +0 -769
- package/blocks/native/sm.animated-scene/versions/2.3.9/package.js +0 -769
- package/blocks/native/sm.animated-scene-assistant/versions/1.0.0/package.js +0 -183
- package/blocks/native/sm.blueprint/versions/2.0.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.1/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.2/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.3/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.4/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.5/package.js +0 -339
- package/blocks/native/sm.blueprint/versions/2.1.6/package.js +0 -356
- package/blocks/native/sm.blueprint/versions/2.1.7/package.js +0 -363
- package/blocks/native/sm.blueprint/versions/2.1.8/package.js +0 -410
- package/blocks/native/sm.blueprint/versions/2.1.9/package.js +0 -422
- package/blocks/native/sm.blueprint-assistant/versions/1.0.0/package.js +0 -172
- package/blocks/native/sm.chat/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.chat/versions/2.0.1/package.js +0 -97
- package/blocks/native/sm.chat/versions/2.0.2/package.js +0 -100
- package/blocks/native/sm.chat/versions/2.0.3/package.js +0 -100
- package/blocks/native/sm.continue-if/versions/1.0.0/package.js +0 -168
- package/blocks/native/sm.describe-media/versions/2.0.0/package.js +0 -153
- package/blocks/native/sm.describe-media/versions/2.0.1/package.js +0 -156
- package/blocks/native/sm.describe-media/versions/2.1.0/package.js +0 -140
- package/blocks/native/sm.image-editor/versions/2.0.0/package.js +0 -183
- package/blocks/native/sm.image-editor/versions/2.0.1/package.js +0 -190
- package/blocks/native/sm.new-items/versions/1.0.0/package.js +0 -191
- package/blocks/native/sm.pick-photos/versions/1.0.0/package.js +0 -334
- package/blocks/native/sm.quality-audit/versions/1.0.0/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.1/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.2/package.js +0 -195
- package/blocks/native/sm.research/versions/2.0.0/package.js +0 -175
- package/blocks/native/sm.research/versions/2.0.1/package.js +0 -184
- package/blocks/native/sm.research/versions/2.0.2/package.js +0 -187
- package/blocks/native/sm.script/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.1/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.2/package.js +0 -105
- package/blocks/native/sm.script/versions/2.1.3/package.js +0 -152
- package/blocks/native/sm.script/versions/2.1.4/package.js +0 -156
- package/blocks/native/sm.script/versions/2.1.5/package.js +0 -156
- package/blocks/native/sm.shot-plan/versions/2.0.0/package.js +0 -301
- package/blocks/native/sm.shot-plan/versions/2.1.0/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.1/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.2/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.3/package.js +0 -536
- package/blocks/native/sm.shot-plan/versions/2.2.0/package.js +0 -800
- package/blocks/native/sm.shot-plan/versions/2.2.1/package.js +0 -920
- package/blocks/native/sm.shot-plan-assistant/versions/1.0.0/package.js +0 -173
- package/blocks/native/sm.stock-search/versions/2.0.0/package.js +0 -174
- package/blocks/native/sm.thumbnail/versions/2.0.0/package.js +0 -137
- package/blocks/native/sm.thumbnail/versions/2.0.1/package.js +0 -140
- package/blocks/native/sm.transcribe/versions/2.0.0/package.js +0 -163
- package/blocks/native/sm.transcribe/versions/2.0.1/package.js +0 -168
- package/blocks/native/sm.whiteboard-assistant/versions/1.0.0/package.js +0 -175
- package/blocks/native/sm.youtube/versions/2.0.0/package.js +0 -217
- package/blocks/occasion-story/package.js +0 -1
- package/blocks/occasion-story/versions/1.0.0/package.js +0 -1658
- package/blocks/occasion-story/versions/1.0.1/package.js +0 -1699
- package/blocks/occasion-story/versions/1.0.2/package.js +0 -1682
- package/blocks/photo-reel-composer/versions/1.0.0/package.js +0 -3043
- package/blocks/photo-reel-composer/versions/1.0.1/package.js +0 -3026
- package/blocks/photo-reel-composer/versions/1.0.2/package.js +0 -4149
- package/blocks/product-ad-variants/versions/1.0.0/package.js +0 -2911
- package/blocks/product-launch-director/versions/1.0.0/package.js +0 -103
- package/blocks/release-visuals/package.js +0 -1
- package/blocks/release-visuals/versions/1.0.0/package.js +0 -1492
- package/blocks/release-visuals/versions/1.0.1/package.js +0 -1517
- package/blocks/release-visuals/versions/1.0.2/package.js +0 -1500
- package/blocks/screen-recorder/package.js +0 -1
- package/blocks/screen-recorder/versions/1.0.0/package.js +0 -223
- package/blocks/screen-recorder/versions/1.0.1/package.js +0 -223
- package/blocks/short-form-finish/package.js +0 -1
- package/blocks/short-form-finish/versions/1.0.0/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.1/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.2/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.3/package.js +0 -1026
- package/examples/saas-product-launch-reviewed-source.stillmade.json +0 -383
- package/examples/saas-product-launch.stillmade.json +0 -304
- package/packages/block-platform/dealer-inventory-video-project-type.js +0 -38
- package/packages/block-platform/first-revenue-project-types.js +0 -46
- package/packages/block-platform/fixture-starters.js +0 -13
- package/packages/block-platform/launch-project-source.js +0 -10
- package/packages/block-platform/launch-project.js +0 -30
- package/packages/block-platform/motion-project-types.js +0 -55
- package/packages/block-platform/motion-starters.js +0 -14
- package/packages/block-platform/product-ad-variants-project-type.js +0 -30
- package/packages/block-platform/product-launch-updated.js +0 -90
- package/packages/block-platform/revenue-review-project-types.js +0 -36
- package/packages/block-platform/revenue-review-starters.js +0 -13
- package/packages/block-platform/script-writer.js +0 -29
- package/packages/block-platform/website-source-block.js +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/HankenGrotesk-Variable.ttf)format("truetype")}@font-face{font-family:Hanken Grotesk;font-style:italic;font-weight:100 900;font-display:swap;src:url(/fonts/HankenGrotesk-Italic-Variable.ttf)format("truetype")}:root{--cream-50:#fdfaf1;--cream-100:#f7f0db;--cream-200:#ece3c9;--cream-300:#dcd2b5;--cream-600:#4e483a;--ink-50:#f2f0ec;--ink-100:#c9c6be;--ink-300:#4a4843;--ink-400:#26241f;--ink-500:#16140f;--ink-600:#0a0a0a;--signal:#e8b23a;--signal-dim:#e8b23a26;--signal-glow:#e8b23a4d;--font-display:"Balgin", "Hanken Grotesk", ui-sans-serif, sans-serif;--font-body:"Hanken Grotesk", ui-sans-serif, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font:var(--font-body);--fs-display-xl:clamp(72px, 14vw, 220px);--fs-display-l:clamp(56px, 9vw, 144px);--fs-display-m:clamp(40px, 6vw, 96px);--fs-h4:1.25rem;--fs-body:1rem;--fs-body-s:.875rem;--fs-caption:.8125rem;--fs-micro:.75rem;--tr-display:-.02em;--tr-body:-.005em;--tr-micro:.08em;--lh-display:.92;--lh-tight:1.05;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:48px;--s-8:64px;--s-9:96px;--s-10:128px;--s-11:192px;--page-gutter:clamp(20px, 3vw, 48px);--page-gutter-compact:clamp(16px, 5vw, 24px);--page-section-gap:clamp(32px, 5vw, 64px);--content-readable:720px;--content-wide:1440px;--control-height:40px;--touch-target:44px;--mobile-dock-height:66px;--z-nav:30;--hover:var(--hover-wash);--r-0:0;--r-1:2px;--r-2:4px;--r-3:8px;--r-pill:999px;--radius-sm:var(--r-2);--radius:var(--r-3);--radius-lg:var(--r-3);--bw-hair:.5px;--bw-1:1px;--bw-2:2px;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-instant:80ms;--dur-fast:.16s;--dur-base:.24s;--dur-slow:.48s;--dur-reveal:.72s}:root,[data-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101010;--bg-elev-1:#232221;--bg-elev-2:#33312f;--bg-inset:#171716;--fg:#f3eee5;--fg-muted:#bbb2a7;--fg-subtle:#f3eee594;--fg-on-accent:#191716;--border-tok:#58534d;--border-strong:#8b7e6f;--divider:#393735;--signal:#d0ae77;--signal-dim:#d0ae7726;--signal-glow:#d0ae774d;--hover-wash:#f7f0db0f;--press-wash:#f7f0db1f;--selection-bg:var(--cream-100);--selection-fg:var(--ink-600);--shadow-1:0 1px 0 #f7f0db0a inset, 0 4px 12px #00000080;--shadow-2:0 1px 0 #f7f0db0f inset, 0 16px 48px #0009;--scrim-top:linear-gradient(to bottom, #0a0a0ad9, #0a0a0a00);--scrim-bottom:linear-gradient(to top, #0a0a0ad9, #0a0a0a00);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-1);--bg-hover:#403d3a;--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:var(--cream-50);--accent-dim:var(--hover-wash);--accent-glow:#f7f0db38;--accent-contrast:var(--bg);--editor-standout-bg:var(--fg);--editor-standout-fg:var(--bg);--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#e0b24f;--attention-error:#e26a5f;--attention-ok:#6bc38e;--attention-info:#7da7e8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}[data-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--signal:#e8b23a;--signal-dim:#e8b23a26;--signal-glow:#e8b23a4d;--bg:var(--cream-100);--bg-elev-1:var(--cream-50);--bg-elev-2:var(--cream-200);--bg-inset:var(--cream-200);--fg:var(--ink-600);--fg-muted:var(--cream-600);--fg-subtle:#0a0a0a61;--fg-on-accent:var(--cream-100);--border-tok:#0a0a0a1a;--border-strong:#0a0a0a38;--divider:#0a0a0a0f;--hover-wash:#0a0a0a0d;--press-wash:#0a0a0a1a;--selection-bg:var(--ink-600);--selection-fg:var(--cream-100);--shadow-1:0 1px 0 #ffffff80 inset, 0 4px 12px #0a0a0a0f;--shadow-2:0 1px 0 #fff9 inset, 0 16px 48px #0a0a0a1a;--scrim-top:linear-gradient(to bottom, #f7f0dbe6, #f7f0db00);--scrim-bottom:linear-gradient(to top, #f7f0dbe6, #f7f0db00);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-2);--bg-hover:var(--cream-300);--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:var(--ink-500);--accent-dim:var(--hover-wash);--accent-glow:#0a0a0a38;--accent-contrast:var(--bg);--editor-standout-bg:var(--ink-300);--editor-standout-fg:var(--cream-100);--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#b98200;--attention-error:#c2453d;--attention-ok:#2e7d4f;--attention-info:#2f67b8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}[data-mode=white]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--bg-elev-1:#f4f4f1;--bg-elev-2:#eaeae6;--bg-inset:#eeeeea;--fg:#0e0e0e;--fg-muted:#5c5c5c;--fg-subtle:#767676;--fg-on-accent:#fff;--border-tok:#e1e1dd;--border-strong:#c4c4bf;--divider:#e7e7e3;--hover-wash:#0000000d;--press-wash:#00000017;--selection-bg:#0e0e0e;--selection-fg:#fff;--signal:#8e6b46;--signal-dim:#8e6b461a;--signal-glow:#8e6b4638;--shadow-1:0 1px 3px #0000000d;--shadow-2:0 12px 40px #0000001a;--scrim-top:linear-gradient(to bottom,#ffffffe6,#fff0);--scrim-bottom:linear-gradient(to top,#ffffffe6,#fff0);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-1);--bg-hover:#ecece8;--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:#2a2a2a;--accent-dim:var(--hover-wash);--accent-glow:#0000001f;--accent-contrast:var(--bg);--editor-standout-bg:#24211d;--editor-standout-fg:#fff;--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#b98200;--attention-error:#c2453d;--attention-ok:#2e7d4f;--attention-info:#2f67b8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}button[data-icon-action=true]{cursor:pointer;flex-shrink:0;line-height:1;min-width:36px!important;min-height:36px!important;box-shadow:none!important;color:var(--text-secondary,var(--fg))!important;background:0 0!important;border:0!important;border-radius:0!important;justify-content:center!important;align-items:center!important;padding:8px!important;display:inline-flex!important}button[data-icon-action=true]:hover:not(:disabled){color:var(--text-primary,var(--fg))!important}button[data-icon-action=true]:focus-visible{outline-offset:2px;outline:2px solid var(--signal)!important}button[data-icon-action=true]:disabled{cursor:not-allowed;opacity:.4!important}button[data-icon-action=true][aria-pressed=true]{text-underline-offset:5px;text-decoration:underline;color:var(--text-primary,var(--fg))!important}@media (pointer:coarse){button[data-icon-action=true]{min-width:44px!important;min-height:44px!important}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root[data-anim-theme="1"]:not([data-mode=white]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0d13;--bg-elev-1:#0f141c;--bg-elev-2:#1a2230;--bg-inset:#0f141c;--fg:#d8dee8;--fg-muted:#8b98ac;--fg-subtle:#64748b;--fg-on-accent:#0a0d13;--border-tok:#232d3d;--border-strong:#303d50;--divider:#1a2230;--hover-wash:#8b98ac14;--press-wash:#8b98ac29;--selection-bg:#303d50;--selection-fg:#d8dee8;--bg-primary:#0a0d13;--bg-secondary:#0f141c;--bg-tertiary:#1a2230;--bg-elevated:#1a2230;--bg-hover:#232d3d;--border:#232d3d;--border-light:#303d50;--accent:#8b98ac;--accent-hover:#b6c0ce;--accent-dim:#8b98ac1f;--accent-glow:#8b98ac40;--accent-contrast:#0a0d13;--editor-standout-bg:#d8dee8;--editor-standout-fg:#0a0d13;--text-primary:#d8dee8;--text-secondary:#8b98ac;--text-muted:#64748b;--success:#8b98ac;--warning:#b6c0ce;--danger:#b6c0ce}html,body{background:var(--bg);width:100%;height:100%;color:var(--fg);font-family:var(--font-body);letter-spacing:var(--tr-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:14px;line-height:1.6;overflow:hidden}#root{width:100%;height:100%;overflow:hidden}.sm-app-shell{height:100dvh}@keyframes sm-navmenu-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.mobile-nav-menu{animation:.2s cubic-bezier(.22,1,.36,1) sm-navmenu-in}::selection{background:var(--selection-bg);color:var(--selection-fg)}.display,h1,h2{font-family:var(--font-display);font-style:italic;font-weight:200;line-height:var(--lh-tight);letter-spacing:var(--tr-display);margin:0}.display{line-height:var(--lh-display)}h3,h4{font-family:var(--font-body);font-weight:500;line-height:var(--lh-tight);letter-spacing:-.01em;margin:0}.eyebrow{color:var(--fg-muted);font-size:11px;font-weight:500}code,pre,.mono{font-family:var(--font-mono);font-size:.92em}.listing-identity code{font-family:inherit;font-size:inherit}button{font-family:var(--font-body);cursor:pointer;letter-spacing:var(--tr-body);border:none;outline:none}textarea,input,select{font-family:var(--font-body);outline:none}select{background-color:var(--bg-elev-1);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--r-2)}select option,select optgroup{background-color:var(--bg-elevated);color:var(--text-primary)}select option:checked{font-weight:600}.tsel-trigger{background-color:var(--bg-elev-1);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--r-2);font-family:var(--font-body);font-size:inherit;cursor:pointer;text-align:left;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;display:inline-flex}.tsel-trigger:hover{border-color:var(--border-strong)}.tsel-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.tsel-trigger:disabled{opacity:.5;cursor:default}.tsel-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tsel-caret{opacity:.7;flex:none;font-size:10px}.tsel-pop{z-index:100100;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-2);max-height:260px;padding:4px;overflow-y:auto;box-shadow:0 8px 28px #00000047}.tsel-opt{color:var(--text-primary);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:6px 8px;font-size:13px;display:flex}.tsel-opt[data-active=true]{background:var(--bg-elev-1)}.tsel-opt[aria-selected=true]{font-weight:600}.tsel-opt[aria-disabled=true]{color:var(--text-muted);cursor:default}.tsel-opt[aria-disabled=true][data-active=true]{background:0 0}.tsel-check{opacity:.8;flex:none;width:12px;font-size:11px}.tsel-opt-label{text-overflow:ellipsis;flex:auto;overflow:hidden}.tsel-note{cursor:help;width:16px;height:16px;color:var(--text-muted);border:1px solid var(--border);border-radius:999px;flex:none;justify-content:center;align-items:center;font-size:11px;display:inline-flex;position:relative}.tsel-note:hover{color:var(--text-primary);border-color:var(--border-strong)}.tsel-tip{z-index:100110;background:var(--text-primary);color:var(--bg-elevated);box-sizing:border-box;white-space:normal;pointer-events:none;border-radius:5px;max-width:min(260px,100vw - 16px);padding:4px 8px;font-size:11px;font-weight:600;box-shadow:0 2px 10px #0000004d}@media (width<=767.98px),(height<=480px) and (pointer:coarse){.tsel-opt{box-sizing:border-box;min-height:44px;font-size:14px}.tsel-note{flex:0 0 44px;width:44px;height:44px;font-size:14px}}.video-editor input,.video-editor select,.video-editor textarea{background:var(--bg-inset);width:100%;min-width:0;color:var(--fg);border:var(--bw-1) solid var(--border-strong);border-radius:var(--r-2);font-family:var(--font-body);accent-color:var(--signal);padding:7px 8px;font-size:12px}.video-editor,.mobile-editor-root{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.video-editor input,.video-editor select,.video-editor textarea,.video-editor [contenteditable=true],.mobile-editor-root input,.mobile-editor-root select,.mobile-editor-root textarea,.mobile-editor-root [contenteditable=true]{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}.video-editor input[type=range]{background:0 0;border:0;padding:0}.video-editor input[type=checkbox]{width:auto;min-width:auto}.video-editor select:focus,.video-editor input:focus,.video-editor textarea:focus{border-color:var(--signal);box-shadow:0 0 0 1px var(--signal-dim)}:focus-visible{outline:2px solid var(--signal);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-pill)}::-webkit-scrollbar-thumb:hover{background:var(--fg-subtle)}.sm-hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.sm-hide-scrollbar::-webkit-scrollbar{width:0;height:0;display:none}.btn{align-items:center;gap:var(--s-2);padding:var(--s-2) var(--s-4);border-radius:var(--r-pill);letter-spacing:var(--tr-body);transition:transform var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), opacity var(--dur-fast) var(--ease-out);font-size:13px;font-weight:500;display:inline-flex}.btn:active{transform:scale(.98)}.btn-primary{background:var(--fg);color:var(--bg)}.btn-primary:hover{background:var(--fg);opacity:.86}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{color:var(--fg);border:var(--bw-1) solid var(--border-strong);background:0 0}.btn-secondary:hover{background:var(--hover-wash);border-color:var(--fg)}.btn-ghost{color:var(--fg-muted);background:0 0;padding:6px 10px}.btn-ghost:hover{background:var(--hover-wash);color:var(--fg)}.btn-icon{color:var(--fg-muted);border-radius:var(--r-2);transition:background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);background:0 0;justify-content:center;align-items:center;padding:5px;display:inline-flex}.btn-icon:hover{background:var(--hover-wash);color:var(--fg)}.btn-icon:active{transform:scale(.98)}.btn-icon:disabled{opacity:.4;cursor:not-allowed}.typing-indicator{align-items:center;gap:4px;padding:4px 0;display:flex}.typing-indicator span{border-radius:var(--r-pill);background:var(--fg-subtle);width:6px;height:6px;animation:1.2s infinite bounce}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes bounce{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-5px)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:.4;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}button:focus-visible,[role=button]:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]):not([type=button]):not([type=submit]):not([type=reset]):is(:focus,:focus-visible),textarea:is(:focus,:focus-visible),select:is(:focus,:focus-visible),[contenteditable]:not([contenteditable=false]):is(:focus,:focus-visible){outline:none!important}@keyframes skeletonShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,#ffffff08 0%,#ffffff1a 50%,#ffffff08 100%) 0 0/200% 100%;border-radius:6px;animation:1.4s ease-in-out infinite skeletonShimmer}.node-state-empty{border-style:dashed!important}.node-state-generating{box-shadow:0 0 0 2px var(--accent);position:relative}.node-state-generating:after{content:"";border-radius:inherit;pointer-events:none;will-change:opacity;animation:1.6s ease-in-out infinite nodePulse;position:absolute;inset:-2px;box-shadow:0 0 18px #f7c8328c}@keyframes nodePulse{0%,to{opacity:.36}50%{opacity:1}}.node-state-warning{position:relative;border-color:var(--attention-warning)!important}.node-state-warning:after{content:"";border-radius:inherit;pointer-events:none;box-shadow:0 0 0 1px var(--attention-warning), 0 0 14px color-mix(in srgb, var(--attention-warning) 40%, transparent);position:absolute;inset:-2px}.node-state-failed{border-top:4px solid #d04848!important}.node-state-failed:before{content:"⚠ ";color:#d04848;z-index:2;pointer-events:none;font-size:12px;font-weight:800;position:absolute;top:6px;left:8px}.react-flow__node{cursor:default}.react-flow__node.dragging,.react-flow__pane.dragging .react-flow__viewport{will-change:transform}.react-flow__node:not(.react-flow__node-sceneGroupNode):not(.react-flow__node-shotLabelNode):not(.react-flow__node-stickyNoteNode):not(.react-flow__node-transitionNode){box-shadow:1px 1px 0 var(--node-side,#d8cfb3), 2px 2px 0 var(--node-side,#d8cfb3), 3px 3px 0 var(--node-side,#d8cfb3), 4px 4px 0 var(--node-side,#d8cfb3), 5px 5px 0 var(--node-side,#d8cfb3), 6px 6px 0 var(--node-side,#d8cfb3), 7px 7px 0 var(--node-edge,#0a0a0a2e), 14px 16px 18px -4px #0a0a0a2e;border-radius:10px}[data-mode=dark] .react-flow__node:not(.react-flow__node-sceneGroupNode):not(.react-flow__node-shotLabelNode):not(.react-flow__node-stickyNoteNode):not(.react-flow__node-transitionNode){--node-side:#1f1d18;--node-edge:#f7f0db2e}.react-flow__controls{grid-template-columns:repeat(2,1fr)!important;display:grid!important}.react-flow__controls button{background:var(--bg-elev-2)!important;border-color:var(--border-tok)!important;color:var(--fg-muted)!important;fill:var(--fg-muted)!important}.react-flow__controls button:hover{background:var(--ink-300)!important}.react-flow__edge-path{stroke:var(--border-strong)}.react-flow.rf-edges-panning .react-flow__edges{display:none}.react-flow__node.node-controls-locked input,.react-flow__node.node-controls-locked textarea,.react-flow__node.node-controls-locked select,.react-flow__node.node-controls-locked button,.react-flow__node.node-controls-locked [role=button]{pointer-events:none!important}.react-flow__node.node-controls-locked{cursor:grab}.react-flow__node.node-controls-locked:active{cursor:grabbing}.react-flow__node.scene-add-available-node{filter:drop-shadow(0 0 10px #f7f0db38)}.react-flow__node.scene-add-available-node>div{outline:1px solid var(--border-strong);outline-offset:4px;border-radius:var(--r-3)}.react-flow__node.scene-add-available-node:after{content:"";border:1px dashed var(--border-strong);border-radius:var(--r-3);pointer-events:none;position:absolute;inset:-8px}.react-flow__node.node-replace-available{filter:drop-shadow(0 0 10px #f7f0db38)}.react-flow__node.node-replace-available>div{outline:1px solid var(--border-strong);outline-offset:4px;border-radius:var(--r-3)}.react-flow__node.node-replace-available:after{content:"";border:1px dashed var(--border-strong);border-radius:var(--r-3);pointer-events:none;position:absolute;inset:-8px}select option{background:var(--bg-elev-2);color:var(--fg)}.spinner{border:2px solid var(--border-tok);border-top-color:var(--fg);border-radius:var(--r-pill);width:16px;height:16px;animation:.7s linear infinite spin}.media-upload-preview:hover .media-upload-overlay{opacity:1!important}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:1ms!important;animation-duration:1ms!important}}.assets-card .assets-card-overlay{opacity:0;transition:opacity .15s}.assets-card:hover .assets-card-overlay{opacity:1}.yt-video-row{transition:background .12s,box-shadow .12s,color .12s}.yt-video-row:hover{box-shadow:inset 2px 0 0 var(--accent), inset 0 0 14px var(--accent-glow);color:var(--text-primary);background:var(--hover-wash)!important}.chat-bubble ::selection{background:var(--signal);color:#0a0a0a}.chat-bubble ::selection{background:var(--signal);color:#0a0a0a}.chat-bubble:hover .chat-bubble-copy,.chat-bubble:focus-within .chat-bubble-copy,.chat-bubble-copy:hover,.chat-bubble-copy:focus{opacity:1!important}.chat-bubble-copy:hover{background:var(--bg-elevated-2,var(--bg-elevated));color:var(--text-primary)!important}.chat-bubble-copy:active{transform:scale(.94)}.sm-brand .sm-brandmark{transform-origin:50%;transition:transform .76s cubic-bezier(.2,.8,.2,1),filter .28s}.sm-brand:hover .sm-brandmark{filter:drop-shadow(0 0 7px color-mix(in srgb, currentColor 45%, transparent));will-change:transform, filter;transform:perspective(340px)rotateY(360deg)scale(1.06)}.sm-brand .sm-word{transition:transform .3s cubic-bezier(.2,.8,.2,1);transform:translate(-4px)}.sm-brand:hover .sm-word{will-change:transform;transform:translate(-4px,-1px)}@media (prefers-reduced-motion:reduce){.sm-brand .sm-brandmark{transition:transform .24s,filter .24s}.sm-brand:hover .sm-brandmark{transform:scale(1.06)}.sm-brand:hover .sm-word{transform:translate(-4px)}}body.sm-mobile-ui input,body.sm-mobile-ui textarea,body.sm-mobile-ui select{font-size:16px!important}body.sm-mobile-ui button,body.sm-mobile-ui select,body.sm-mobile-ui [role=button]{min-height:44px}body.sm-mobile-ui select:not([multiple]):not([size]){height:max(44px,2.75em)}body.sm-mobile-ui button.btn-icon,body.sm-mobile-ui button[data-compact],body.sm-mobile-ui .no-min-tap{min-height:0}body.sm-mobile-ui .yt-video-row{min-width:560px}:where(html:has(.sm-block)){container-type:inline-size}:where(.sm-block){gap:var(--s-5,24px);min-width:0;display:grid}:where(.sm-block,.sm-block *){box-sizing:border-box}:where(.sm-block)>:where(*){min-width:0}@container (width>=720px){:where(.sm-block[data-layout=split]){grid-template-columns:minmax(0,1.6fr) minmax(260px,1fr);align-items:start}:where(.sm-block[data-layout=split])>:where(.sm-stage){grid-row:span 6}}@container (width>=860px){:where(.sm-block:not([data-layout]):has(>.sm-stage)){align-items:start;column-gap:var(--s-5,24px);row-gap:var(--s-4,16px);grid-template-columns:minmax(300px,380px) minmax(0,1fr)}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(*){grid-column:1}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(.sm-stage){grid-area:1/2/span 12;align-self:stretch;min-height:min(70vh,640px)}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(.sm-stage[data-ratio]){align-self:start;min-height:0}}:where(.sm-row){align-items:center;gap:var(--s-2,8px);flex-wrap:wrap;display:flex}@container (width<=519px){:where(.sm-clamp:not([data-open])){-webkit-line-clamp:var(--sm-lines,5);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}:where(.sm-stage){min-height:220px;padding:var(--s-3,12px);border-radius:var(--r-3,8px);background:var(--bg-inset);place-items:center;display:grid;position:relative;overflow:hidden}:where(.sm-stage[data-ratio="16:9"]){aspect-ratio:16/9;min-height:0}:where(.sm-stage[data-ratio="9:16"]){aspect-ratio:9/16;justify-self:center;width:auto;height:min(70vh,640px);min-height:0;max-height:70vh}:where(.sm-stage[data-ratio="1:1"]){aspect-ratio:1;min-height:0}:where(.sm-stage)>:where(img,video,canvas){object-fit:contain;border-radius:var(--r-2,4px);max-width:100%;max-height:100%;display:block}:where(.sm-stage[data-fill])>:where(img,video,canvas){object-fit:cover;width:100%;height:100%}:where(.sm-empty){justify-items:center;gap:var(--s-3,12px);padding:var(--s-5,24px) var(--s-4,16px);text-align:center;color:var(--fg-muted);display:grid}:where(.sm-empty)>:where(.sm-glyph){--sm-glyph-size:40px;color:var(--fg-subtle)}:where(.sm-empty)>:where(p){max-width:24ch;font-size:var(--fs-body,1rem);margin:0}:where(.sm-drop){outline:1px dashed var(--border-tok);outline-offset:-8px}:where(.sm-drop[data-over]){outline-color:var(--fg);background:var(--hover-wash)}:where(.sm-actions){align-items:center;gap:var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-actions)>:where(.sm-status){margin-inline-start:var(--s-2,8px)}:where(.sm-primary,.sm-quiet){justify-content:center;align-items:center;gap:var(--s-2,8px);min-height:var(--touch-target,44px);border-radius:var(--r-pill,999px);font:inherit;cursor:pointer;text-align:center;overflow-wrap:anywhere;max-width:100%;padding:10px 20px;font-weight:500;display:inline-flex}:where(.sm-primary){border:1px solid var(--fg);background:var(--fg);color:var(--bg)}:where(.sm-quiet){border:1px solid var(--border-strong);background:var(--bg-elev-1);color:var(--fg)}:where(.sm-quiet):hover{background:var(--bg-elev-2)}:where(.sm-icon){min-width:var(--touch-target,44px);min-height:var(--touch-target,44px);border-radius:var(--r-2,4px);color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}:where(.sm-icon):hover{color:var(--fg);background:var(--hover-wash)}:where(.sm-icon[aria-pressed=true]){color:var(--fg);background:var(--press-wash)}:where(.sm-primary,.sm-quiet,.sm-icon):disabled{opacity:.45;cursor:default}:where(.sm-primary,.sm-quiet,.sm-icon):focus-visible{outline:2px solid var(--signal);outline-offset:3px}@container (width<=420px){:where(.sm-actions)>:where(.sm-primary){flex:100%}}:where(.sm-field){gap:6px;min-width:0;display:grid}:where(.sm-field)>:where(label,.sm-label){align-items:center;gap:var(--s-1,4px);font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);min-height:24px;display:flex}:where(.sm-field) :where(input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea){width:100%;min-height:var(--touch-target,44px);border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);color:var(--fg);font:inherit;padding:10px 12px}:where(.sm-field) :where(textarea){resize:vertical;min-height:96px}:where(.sm-fields){gap:var(--s-4,16px);grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));display:grid}:where(.sm-block)>:where(.sm-fields,.sm-settings){padding:var(--s-3,12px) var(--s-4,16px);border:1px solid var(--border);border-radius:var(--r-3,8px);background:var(--bg-secondary)}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){align-items:center;gap:6px var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list)))>:where(label,.sm-label){flex:0 auto}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list)))>:where(:not(label,.sm-label)){flex:1 1 var(--sm-control,10rem);min-width:0}@container (width>=520px){:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){align-items:center;gap:var(--s-2,8px);grid-template-columns:minmax(5rem,9rem) minmax(0,1fr);display:grid}:where(.sm-field) :where(input:not([type=checkbox]):not([type=radio]):not([type=range]),select){min-height:36px;padding:6px 10px}:where(.sm-fields){gap:var(--s-2,8px) var(--s-4,16px)}}:where(.sm-choices){gap:var(--s-2,8px);grid-template-columns:repeat(auto-fill,minmax(var(--sm-tile,96px),1fr));border:0;min-width:0;margin:0;padding:0;display:grid}:where(.sm-choices[data-size=wide]){--sm-tile:160px}:where(.sm-choices)>:where(legend){font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);margin-bottom:6px;padding:0}:where(.sm-choices)>:where(label){padding:var(--s-2,8px);border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);color:var(--fg-muted);font-size:max(12px,var(--fs-caption,.8125rem));text-align:center;cursor:pointer;align-content:start;justify-items:center;gap:6px;display:grid;position:relative}:where(.sm-choices)>:where(label:not(:has(input:checked,input:disabled))):hover{border-color:var(--border-strong);color:var(--fg)}:where(.sm-choices) :where(input[type=radio],input[type=checkbox]){opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute;inset:0}:where(.sm-choices)>:where(label:has(input:checked)){border-color:var(--fg);background:var(--fg);color:var(--bg);box-shadow:none;--fg-muted:color-mix(in srgb,var(--bg) 78%,transparent);--fg-subtle:color-mix(in srgb,var(--bg) 64%,transparent);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle)}:where(.sm-choices)>:where(label:has(input:focus-visible)){outline:2px solid var(--signal);outline-offset:2px}:where(.sm-choices)>:where(label:has(input:disabled)),:where(.sm-choices) :where(input:disabled){cursor:default}:where(.sm-choices)>:where(label:has(input:disabled):not(:has(input:checked))){opacity:.45}:where(.sm-choices) :where(img,video,canvas,.sm-swatch){width:100%;aspect-ratio:var(--sm-tile-ratio,1);object-fit:cover;border-radius:var(--r-2,4px);background:var(--bg-inset);display:block}:where(.sm-choices) :where(.sm-glyph){--sm-glyph-size:28px;margin:10px 0 4px}:where(.sm-choices[data-ratio="16:9"]){--sm-tile-ratio:16/9}:where(.sm-choices[data-ratio="9:16"]){--sm-tile-ratio:9/16}:where(.sm-choices[data-compact])>:where(label){min-height:var(--touch-target,44px);grid-auto-flow:column;place-content:center;align-items:center;padding:6px 12px}:where(.sm-choices[data-compact]) :where(.sm-glyph){--sm-glyph-size:18px;margin:0}:where(.sm-choices) :where(audio){z-index:1;width:100%;height:32px;position:relative}:where(.sm-shape){box-sizing:border-box;width:calc(var(--sm-shape-size,32px) * min(1,var(--r,1)));aspect-ratio:var(--r,1);border:2px solid;border-radius:3px;max-width:100%;margin:4px auto;display:block}:where(.sm-choices)>:where(label:has(.sm-shape)){grid-template-rows:1fr auto;align-content:stretch}:where(.sm-choices) :where(.sm-shape){--sm-shape-size:36px;align-self:center;margin:6px auto 2px}:where(.sm-choices[data-compact]) :where(.sm-shape){--sm-shape-size:20px;margin:0}:where(.sm-choices[data-segmented]){gap:0;width:fit-content;max-width:100%;display:flex}:where(.sm-choices[data-segmented])>:where(label){min-height:36px;font-size:var(--fs-body-s,.875rem);white-space:nowrap;border-radius:0;justify-content:center;align-items:center;gap:6px;padding:4px 12px;display:inline-flex}:where(.sm-choices[data-segmented])>:where(label+label){margin-inline-start:-1px}:where(.sm-choices[data-segmented])>:where(label:first-of-type){border-start-start-radius:var(--r-pill,999px);border-end-start-radius:var(--r-pill,999px)}:where(.sm-choices[data-segmented])>:where(label:last-of-type){border-start-end-radius:var(--r-pill,999px);border-end-end-radius:var(--r-pill,999px)}:where(.sm-choices[data-segmented])>:where(label:has(input:checked)){z-index:1;position:relative}:where(.sm-choices[data-segmented]) :where(.sm-glyph){--sm-glyph-size:16px;margin:0}:where(.sm-settings){gap:var(--s-3,12px) var(--s-4,16px);grid-template-columns:repeat(auto-fill,minmax(min(100%,11rem),1fr));align-items:start;min-width:0;display:grid}:where(.sm-settings)>:where(.sm-field){grid-template-columns:minmax(0,1fr);gap:4px}:where(.sm-settings)>:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){--sm-control:6rem;align-items:center;gap:4px var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-settings)>:where(.sm-choices)>:where(legend),:where(.sm-settings) :where(.sm-label){font-size:max(12px,var(--fs-caption,.8125rem))}@container (width<=519px){:where(.sm-choices[data-compact],.sm-choices[data-segmented]){scrollbar-width:none;flex-wrap:nowrap;width:auto;display:flex;overflow-x:auto}:where(.sm-choices[data-compact])>:where(label),:where(.sm-choices[data-segmented])>:where(label){flex:none}}:where(.sm-list){border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);min-width:0;margin:0;padding:0;list-style:none;display:grid;overflow:hidden}:where(.sm-list)>:where(li){align-items:center;gap:var(--s-2,8px);min-width:0;min-height:40px;padding:4px var(--s-2,8px);border-bottom:1px solid var(--divider);display:flex}:where(.sm-list)>:where(li:last-child){border-bottom:0}:where(.sm-list)>:where(li:has(>details)){padding:0;display:block}:where(.sm-list)>:where(li)>:where(details)>:where(summary){align-items:center;gap:var(--s-2,8px);min-height:40px;padding:4px var(--s-2,8px);cursor:pointer;list-style:none;display:flex}:where(.sm-list)>:where(li)>:where(details)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-list)>:where(li)>:where(details[open]){background:var(--bg-inset)}:where(.sm-list)>:where(li)>:where(details)>:where(:not(summary)){padding:var(--s-2,8px) var(--s-3,12px) var(--s-3,12px)}:where(.sm-list) :where(img,video,canvas,.sm-swatch){object-fit:cover;border-radius:var(--r-2,4px);background:var(--bg-inset);flex:none;width:40px;height:26px}:where(.sm-list) :where(.sm-line){white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}:where(.sm-list) :where(small){color:var(--fg-subtle);font-size:max(12px,var(--fs-caption,.8125rem));white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}:where(.sm-list)>:where(.sm-list-more){display:none}@container (width<=519px){:where(.sm-list[data-peek]:not([data-open]))>:where(li:nth-child(n+4):not(.sm-list-more)){display:none}:where(.sm-list[data-peek]:not([data-open]))>:where(.sm-list-more){color:var(--fg-muted);display:flex}}:where(.sm-gallery){gap:var(--s-2,8px);grid-template-columns:repeat(auto-fill,minmax(min(100%,var(--sm-tile,140px)),1fr));margin:0;padding:0;list-style:none;display:grid}:where(.sm-gallery)>:where(*){border-radius:var(--r-3,8px);background:var(--bg-inset);margin:0;position:relative;overflow:hidden}:where(.sm-gallery) :where(img,video,canvas){width:100%;aspect-ratio:var(--sm-tile-ratio,1);object-fit:cover;display:block}:where(.sm-gallery) :where(figcaption){font-size:max(12px,var(--fs-caption,.8125rem));color:var(--fg-muted);padding:6px 8px}:where(.sm-gallery) :where([aria-selected=true],.is-selected){box-shadow:inset 0 0 0 2px var(--fg)}:where(.sm-gallery[data-size=small]){--sm-tile:92px;--sm-tile-ratio:3/2}:where(.sm-media-off){box-sizing:border-box;width:min(100%,320px);aspect-ratio:var(--sm-photo-ratio,4/3);border:1px solid var(--border-tok);border-radius:var(--r-2,4px);background:var(--bg-inset);color:var(--fg-subtle,var(--fg-muted));vertical-align:top;place-items:center;display:inline-grid}:where(.sm-gallery) :where(.sm-media-off){width:100%;aspect-ratio:var(--sm-tile-ratio,1);border-radius:inherit;display:grid}:where(.sm-status){align-items:center;gap:var(--s-2,8px);min-height:24px;font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);display:inline-flex}:where(.sm-status):empty{display:none}:where(.sm-status[data-state]):before{content:"";background:currentColor;border-radius:50%;flex:none;width:14px;height:14px}:where(.sm-status[data-state=loading]):before{background:0 0;border:2px solid;border-right-color:#0000;animation:.8s linear infinite sm-spin}:where(.sm-status[data-state=success]){color:var(--attention-ok,var(--fg))}:where(.sm-status[data-state=success]):before{background:0 0;border:2px solid;border-width:0 2px 2px 0;border-radius:0;width:6px;height:11px;margin:0 4px 3px;transform:rotate(45deg)}:where(.sm-status[data-state=waiting]){color:var(--attention-warning,var(--signal))}:where(.sm-status[data-state=waiting]):before{width:8px;height:8px;margin:0 3px}:where(.sm-status[data-state=error]){color:var(--attention-error,var(--signal))}:where(.sm-status[data-state=error]):before{clip-path:polygon(50% 0,100% 100%,0 100%);border-radius:0}:where(.sm-progress){border-radius:var(--r-pill,999px);background:var(--bg-elev-2);width:100%;height:4px;accent-color:var(--fg);appearance:none;border:0;overflow:hidden}:where(.sm-progress)::-webkit-progress-bar{background:var(--bg-elev-2)}:where(.sm-progress)::-webkit-progress-value{background:var(--fg)}:where(.sm-progress)::-moz-progress-bar{background:var(--fg)}:where(.sm-more){border-top:1px solid var(--divider)}:where(.sm-more)>:where(summary){align-items:center;gap:var(--s-2,8px);min-height:var(--touch-target,44px);color:var(--fg-muted);font-size:var(--fs-body-s,.875rem);cursor:pointer;padding:0;list-style:none;display:flex}:where(.sm-more)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-more)>:where(summary):after{content:"";width:7px;height:7px;transition:transform var(--dur-fast,.16s) var(--ease-out,ease);border:1.5px solid;border-width:0 1.5px 1.5px 0;margin-inline-start:2px;transform:translateY(-2px)rotate(45deg)}:where(.sm-more[open])>:where(summary):after{transform:translateY(2px)rotate(-135deg)}:where(.sm-more)>:where(summary):hover{color:var(--fg)}:where(.sm-more)>:where(:not(summary)){margin-top:var(--s-2,8px)}:where(.sm-more[open]){padding-bottom:var(--s-3,12px)}:where(.sm-label){position:relative}:where(.sm-hint){vertical-align:middle;display:inline-block}:where(:not(.sm-label))>:where(.sm-hint){position:relative}:where(.sm-hint)>:where(summary){width:var(--touch-target,44px);height:var(--touch-target,44px);min-height:0;color:var(--fg-subtle);cursor:pointer;border:0;place-items:center;margin:-8px;padding:0;list-style:none;display:inline-grid}:where(.sm-hint)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-hint)>:where(summary):before{content:"i";width:15px;height:15px;font:600 10px/1 var(--font-body);border:1.5px solid;border-radius:50%;place-items:center;font-style:normal;display:grid}:where(.sm-hint)>:where(summary):hover,:where(.sm-hint[open])>:where(summary){color:var(--fg)}:where(.sm-hint)>:where(:not(summary)){z-index:5;inset-inline-start:0;border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-2);width:max-content;max-width:min(280px,100cqi - 32px);color:var(--fg);font-size:var(--fs-body-s,.875rem);box-shadow:var(--shadow-1);margin:4px 0 0;padding:10px 12px;line-height:1.45;position:absolute;top:100%}:where(:not(.sm-label))>:where(.sm-hint[open]){display:block}:where(:not(.sm-label))>:where(.sm-hint)>:where(:not(summary)){width:auto;max-width:60ch;position:static}:where(.sm-glyph){--g:var(--sm-glyph-size,20px);width:var(--g);height:var(--g);color:inherit;vertical-align:middle;flex:none;display:inline-block;position:relative}:where(.sm-glyph):before,:where(.sm-glyph):after{content:"";box-sizing:border-box;position:absolute}:where(.sm-glyph[data-glyph=play]):before{clip-path:polygon(0 0,100% 50%,0 100%);background:currentColor;inset:15% 15% 15% 25%}:where(.sm-glyph[data-glyph=pause]):before{border:solid;border-width:0 calc(var(--g)*.14);inset:18% 25%}:where(.sm-glyph[data-glyph=plus]):before,:where(.sm-glyph[data-glyph=close]):before{background:linear-gradient(currentColor,currentColor) 50%/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 50%/2px 100% no-repeat;inset:15%}:where(.sm-glyph[data-glyph=close]):before{transform:rotate(45deg)}:where(.sm-glyph[data-glyph=check]):before{border:2px solid;border-width:0 2px 2px 0;width:30%;height:58%;top:12%;left:36%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=chevron]):before{border:2px solid;border-width:0 2px 2px 0;width:40%;height:40%;top:22%;left:30%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=upload]):before{border:2px solid;border-top:0;border-radius:0 0 3px 3px;height:35%;bottom:10%;left:10%;right:10%}:where(.sm-glyph[data-glyph=upload]):after{clip-path:polygon(50% 0,100% 45%,60% 45%,60% 100%,40% 100%,40% 45%,0 45%);background:currentColor;height:62%;top:4%;left:25%;right:25%}:where(.sm-glyph[data-glyph=image]):before{border:2px solid;border-radius:3px;inset:12%}:where(.sm-glyph[data-glyph=image]):after{clip-path:polygon(0 100%,35% 20%,60% 65%,75% 45%,100% 100%);background:currentColor;height:34%;bottom:24%;left:22%;right:22%}:where(.sm-glyph[data-glyph=image-off]):before{background:radial-gradient(circle calc(var(--g) * .09) at 35% 35%,currentColor 96%,transparent 100%);border:2px solid;border-radius:3px;inset:12%}:where(.sm-glyph[data-glyph=image-off]):after{background:currentColor;width:2px;margin-left:-1px;top:-10%;bottom:-10%;left:50%;transform:rotate(-45deg)}:where(.sm-glyph[data-glyph=video]):before{border:2px solid;border-radius:3px;inset:22% 28% 22% 8%}:where(.sm-glyph[data-glyph=video]):after{clip-path:polygon(0 35%,100% 0,100% 100%,0 65%);background:currentColor;width:20%;top:30%;bottom:30%;right:8%}:where(.sm-glyph[data-glyph=audio]):before{background:linear-gradient(currentColor,currentColor) 0 60%/2px 40% no-repeat,linear-gradient(currentColor,currentColor) 33%/2px 80% no-repeat,linear-gradient(currentColor,currentColor) 66%/2px 100% no-repeat,linear-gradient(currentColor,currentColor) 100% 60%/2px 50% no-repeat;inset:15% 12%}:where(.sm-glyph[data-glyph=text]):before{background:linear-gradient(currentColor,currentColor) 0 0/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 0/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 0 100%/60% 2px no-repeat;inset:20% 12%}:where(.sm-glyph[data-glyph=spark]):before{clip-path:polygon(50% 0,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);background:currentColor;inset:8%}:where(.sm-glyph[data-glyph=info]):before{border:2px solid;border-radius:50%;inset:10%}:where(.sm-glyph[data-glyph=info]):after{background:linear-gradient(currentColor,currentColor) 0 0/2px 2px no-repeat,linear-gradient(currentColor,currentColor) 0 100%/2px 60% no-repeat;width:2px;height:46%;margin-left:-1px;top:28%;left:50%}:where(.sm-glyph[data-glyph=warning]):before{clip-path:polygon(50% 0,100% 100%,0 100%);background:currentColor;inset:8% 4% 10%}:where(.sm-glyph[data-glyph=warning]):after{background:linear-gradient(var(--bg),var(--bg)) 0 0/2px 60% no-repeat,linear-gradient(var(--bg),var(--bg)) 0 100%/2px 2px no-repeat;width:2px;height:38%;margin-left:-1px;top:38%;left:50%}:where(.sm-glyph[data-glyph=spinner]):before{border:2px solid;border-right-color:#0000;border-radius:50%;animation:.8s linear infinite sm-spin;inset:12%}:where([class*=sm-][hidden]){display:none!important}:where(.sm-sr){clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@keyframes sm-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){:where(.sm-status[data-state=loading]):before,:where(.sm-glyph[data-glyph=spinner]):before{opacity:.6;border-right-color:currentColor;animation:none}:where(.sm-more)>:where(summary):after{transition:none}}.sm-quiet{border:1px solid var(--border-tok)}html,body{background:var(--bg);color:var(--fg);margin:0}.dh-page{height:100dvh;font-family:var(--font-body);flex-direction:column;display:flex;overflow:hidden}.dh-bar{align-items:center;gap:var(--s-2,8px) var(--s-3,12px);min-height:56px;padding:var(--s-2,8px) var(--s-4,16px);border-bottom:var(--bw-1,1px) solid var(--divider);flex-wrap:wrap;flex:none;display:flex}.dh-title{align-items:baseline;gap:10px;min-width:0;display:flex}.dh-title h1{font-family:var(--font-display);letter-spacing:var(--tr-display);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:24px;font-style:italic;font-weight:200;line-height:1.1;overflow:hidden}.dh-meta{color:var(--fg-muted);font-size:12px}.dh-spacer{flex:1}.dh-picker{border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);max-width:min(340px,100%);height:32px;color:var(--fg-muted);align-items:center;gap:6px;padding:0 4px 0 10px;display:inline-flex}.dh-picker select{min-width:0;max-width:280px;height:30px;color:var(--fg);font:inherit;background:0 0;border:0;padding:0 4px;font-size:13px}.dh-picker select:focus{outline:none}.dh-seg{border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);padding:2px;display:inline-flex}.dh-seg button{width:30px;height:26px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;border-radius:3px;place-items:center;padding:0;display:inline-grid}.dh-seg button[aria-checked=true]{background:var(--fg);color:var(--bg)}.dh-glyph{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}.dh-icon{border-radius:var(--r-2);width:32px;height:32px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.dh-icon:hover,.dh-seg button:hover:not([aria-checked=true]),.dh-tabs [role=tab]:hover{background:var(--bg-elev-2);color:var(--fg)}.dh-seg button:focus-visible,.dh-icon:focus-visible,.dh-tabs [role=tab]:focus-visible,.dh-page .btn:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.dh-main{min-height:0;padding:var(--s-4,16px);flex-direction:column;flex:1;display:flex;overflow:auto}.dh-frame{flex-direction:column;flex:1;width:100%;min-width:0;margin:0 auto;display:flex;container-type:inline-size}.dh-noview{flex:1}@container (width>=760px){.dh-noview{align-content:start;column-gap:var(--s-6,24px);grid-template-rows:auto auto 1fr;grid-template-columns:minmax(260px,380px) minmax(0,1fr)}.dh-noview>:not(.dh-results){grid-column:1}.dh-noview>.dh-results{padding-top:0;padding-left:var(--s-6,24px);border-top:0;border-left:var(--bw-1,1px) solid var(--divider);grid-area:1/2/-1;align-content:start;align-self:stretch}}.dh-noview>.dh-results-empty,.dh-results-empty{place-content:center;justify-items:center;min-height:160px}.dh-results-empty p{color:var(--fg-subtle);margin:0;font-size:13px}.dh-dock{border-top:var(--bw-1,1px) solid var(--border-strong);background:var(--bg-elev-1);flex-direction:column;flex:none;max-height:75dvh;display:flex;position:relative}.dh-dock-grip{cursor:ns-resize;z-index:1;touch-action:none;height:10px;position:absolute;top:-5px;left:0;right:0}.dh-tabs{min-height:40px;padding:0 var(--s-2,8px) 0 10px;flex:none;align-items:center;gap:2px;display:flex;overflow-x:auto}.dh-tabs [role=tab]{border-radius:var(--r-2);height:28px;color:var(--fg-muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0 10px;font-size:13px;display:inline-flex}.dh-tabs [role=tab][aria-selected=true]{background:var(--bg);color:var(--fg);box-shadow:inset 0 0 0 var(--bw-1,1px) var(--border-tok)}.dh-alert{background:var(--attention-error);border-radius:50%;width:6px;height:6px}.dh-tabs-status{padding:0 var(--s-2,8px);color:var(--fg-muted);white-space:nowrap;margin-left:auto;font-size:12px}.dh-fold svg{transform:rotate(-90deg)}.dh-dock[data-open=true] .dh-fold svg{transform:rotate(90deg)}.dh-tabpanel{min-height:0;padding:10px var(--s-4,16px) 14px;border-top:var(--bw-1,1px) solid var(--divider);flex:1;overflow:auto}.dh-console ol{border-top:var(--bw-1,1px) solid var(--divider);margin:0;padding:0;list-style:none}.dh-calls{margin:0;padding:0;font-size:13px;list-style:none;display:grid}.dh-calls li{border-bottom:var(--bw-1,1px) solid var(--divider);flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:6px 0;display:flex}.dh-calls span{color:var(--fg-muted)}.dh-calls small{color:var(--fg-subtle);margin-left:auto}@media (width<=700px){.dh-bar{padding:var(--s-2,8px) 12px}.dh-title h1{font-size:20px}.dh-main{padding:12px}.dh-tabs-status{display:none}}.dh-problem{margin:var(--s-4,16px) var(--s-6,24px) 0;padding:var(--s-3,12px) var(--s-4,16px);border:var(--bw-1,1px) solid var(--border-strong);border-radius:var(--r-2);background:var(--bg-elev-1);white-space:pre-wrap;overflow-wrap:anywhere}.dh-noview{box-sizing:border-box;gap:var(--s-4,16px);min-height:100%;padding:var(--s-6,24px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-3);justify-items:start;display:grid}.dh-noview p{color:var(--fg-muted);margin:0}.dh-form{gap:var(--s-2,8px);width:100%;display:grid}.dh-row{align-items:center;gap:var(--s-3,12px);min-height:36px;display:flex}.dh-row label{min-width:96px;color:var(--fg-muted);font-size:13px}.dh-row input[type=text],.dh-row input[type=number]{min-width:0;height:32px;padding:0 var(--s-2,8px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font:inherit;flex:1;font-size:13px}.dh-media{align-items:center;gap:var(--s-3,12px);min-height:36px;display:flex}.dh-media-label{min-width:96px;color:var(--fg-muted);font-size:13px}.dh-media-tile{align-items:center;gap:var(--s-2,8px);max-width:100%;min-height:32px;padding:0 var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);font-size:13px;display:inline-flex}.dh-media-tile span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dh-results{gap:var(--s-3,12px);width:100%;padding-top:var(--s-4,16px);border-top:var(--bw-1,1px) solid var(--divider);display:grid}.dh-results h2{margin:0;font-size:14px;font-weight:600}.dh-section-head{justify-content:space-between;align-items:center;gap:var(--s-2,8px);margin-bottom:var(--s-2,8px);display:flex}.dh-section-head h2{letter-spacing:var(--tr-body);margin:0;font-size:13px;font-weight:600}.dh-input textarea{box-sizing:border-box;width:100%;padding:var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font-family:var(--font-mono);resize:vertical;font-size:12px;line-height:1.5}.dh-input p,.dh-muted{margin:var(--s-2,8px) 0 0;color:var(--fg-muted);font-size:13px}.dh-json{max-height:240px;padding:var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);font-family:var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.5;overflow:auto}.dh-console{flex-direction:column;min-height:0;display:flex}.dh-entry{gap:var(--s-2,8px);padding:var(--s-2,8px) 0;border-bottom:var(--bw-1,1px) solid var(--divider);grid-template-columns:auto auto minmax(0,1fr);align-items:baseline;font-size:12px;display:grid}.dh-entry time{color:var(--fg-muted);font-variant-numeric:tabular-nums}.dh-kind{color:var(--fg-muted);font-size:11px}.dh-entry pre{font-family:var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.dh-error .dh-kind,.dh-error pre{color:var(--fg);font-weight:600}.dh-stand-in .dh-kind{color:var(--signal)}.dh-row select{min-width:0;height:32px;padding:0 var(--s-2,8px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font:inherit;flex:1}.dh-slider{align-items:center;gap:var(--s-2,8px);flex:1;min-width:0;display:flex}.dh-slider input{flex:1;min-width:0}.dh-slider output{text-align:right;min-width:2.5em;color:var(--fg-muted);font-size:13px}.dh-run-problem{padding:var(--s-2,8px) var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-strong);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);margin:0}.dh-result-media{gap:var(--s-2,8px);justify-items:center;width:100%;margin:0;display:grid}.dh-result-media img,.dh-result-media .sm-player{object-fit:contain;border-radius:var(--r-3,8px);background:#000;width:auto;min-width:min(100%,320px);max-width:100%;height:auto;max-height:min(62dvh,640px);display:block}.dh-result-media .sm-player>video{aspect-ratio:var(--dh-shape,auto)}.dh-result-media audio{width:100%}.dh-result-media figcaption{max-width:100%;color:var(--fg-muted);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.dh-results .sm-data-list:has(>li>.dh-result-media){gap:var(--s-4,16px);grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));margin:0;padding:0;list-style:none;display:grid}.dh-results .sm-data-list:has(>li>.dh-result-media) .dh-result-media img{min-width:min(100%,200px);max-height:min(56dvh,560px)}.dh-results .sm-data-list:has(>li>.dh-result-media) .dh-result-media .sm-player{min-width:min(100%,200px);max-height:min(56dvh,560px)}.dh-media-tile small{margin-left:var(--s-1,4px);border:var(--bw-1,1px) solid var(--border-tok);color:var(--fg-muted);border-radius:999px;padding:1px 6px;font-size:11px}.dh-media-pick{cursor:pointer;font:inherit;color:var(--fg)}.dh-media-pick:hover:not(:disabled){border-color:var(--border-strong)}.dh-media-problem{color:var(--attention-error);font-size:12px}.dh-media-empty{flex-wrap:wrap;align-items:flex-start}.dh-media-drop{padding:var(--s-5,20px) var(--s-4,16px);border:1.5px dashed var(--border-strong);border-radius:var(--r-3);background:var(--bg-elev-1);text-align:center;flex:240px;justify-items:center;gap:6px;display:grid}.dh-media-drop[data-over]{border-style:solid;border-color:var(--fg);background:var(--hover-wash)}.dh-media-drop strong{color:var(--fg);font-size:14px;font-weight:600}.dh-media-drop span{color:var(--fg-muted);font-size:13px}.dh-media-drop small{color:var(--fg-muted);font-size:12px}.dh-media-drop .dh-media-pick{margin-top:var(--s-1,4px)}.dh-switch{border-radius:var(--r-2);height:28px;color:var(--fg-muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:0 6px;font-size:13px;display:inline-flex}.dh-switch:hover{color:var(--fg)}.dh-switch:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.dh-switch-track{background:var(--bg-elev-2);width:32px;height:18px;box-shadow:inset 0 0 0 var(--bw-1,1px) var(--border-strong);border-radius:999px;transition:background .15s;position:relative}.dh-switch-knob{background:var(--fg-muted);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;position:absolute;top:2px;left:2px}.dh-switch[aria-checked=true] .dh-switch-track{background:var(--fg)}.dh-switch[aria-checked=true] .dh-switch-knob{background:var(--bg);transform:translate(14px)}.dh-media-tiles{gap:var(--s-2,8px);flex-wrap:wrap;flex:1;min-width:0;display:flex}.dh-date{margin:0;font-size:15px}.block-zoom-control{z-index:3;border:1px solid var(--border);background:var(--bg);opacity:0;border-radius:999px;align-items:center;gap:2px;padding:2px;transition:opacity .15s;display:flex;position:absolute;top:8px;right:8px;box-shadow:0 4px 14px #00000014}.bs-sandbox-ui:hover>.block-zoom-control,.block-zoom-control:focus-within{opacity:1}.block-zoom-control button{min-width:28px;height:28px;color:var(--fg);font:500 12px var(--font-body);cursor:pointer;background:0 0;border:0;border-radius:999px;place-items:center;padding:0 8px;display:inline-grid}.block-zoom-control button:hover:not(:disabled){background:var(--hover-wash)}.block-zoom-control button:disabled{opacity:.4;cursor:default}.block-zoom-control button:focus-visible{outline:2px solid var(--signal);outline-offset:1px}.block-zoom-control .block-zoom-mode[aria-pressed=true]{color:var(--fg-muted)}@media (width<=600px),(hover:none){.block-zoom-control{display:none}}@media (prefers-reduced-motion:reduce){.block-zoom-control{transition:none}}.bd-table,.bd-document,.bd-chart,.bd-code-view,.bd-files{min-width:0;color:var(--fg);font:14px/1.6 var(--font-body);margin:0}.bd-table-scroll{border:1px solid var(--border);border-radius:var(--r-3);max-width:100%;max-height:480px;overflow:auto}.bd-table-scroll:focus-visible,.bd-code:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.bd-table table{border-collapse:collapse;width:max-content;min-width:100%;font-size:13px}.bd-table th,.bd-table td{padding:var(--s-2) var(--s-3);text-align:left;vertical-align:top;border-bottom:1px solid var(--border);overflow-wrap:break-word;min-width:64px;max-width:320px}.bd-table th{background:var(--bg-secondary);white-space:nowrap;font-weight:600;position:sticky;top:0}.bd-table td.bd-number{text-align:right;font-variant-numeric:tabular-nums}.bd-table tbody tr:last-child td{border-bottom:0}.bd-bar{align-items:center;gap:var(--s-2);margin-top:var(--s-3);color:var(--fg-muted);flex-wrap:wrap;font-size:12px;display:flex}.bd-bar>span{margin-right:auto}.bd-document{gap:var(--s-3);overflow-wrap:anywhere;display:grid}.bd-document>*{margin:0}.bd-document-title{font:200 italic 22px/1.2 var(--font-display);letter-spacing:var(--tr-display)}.bd-document h4,.bd-document h5,.bd-document h6{font-size:15px;font-weight:600}.bd-document ul,.bd-document ol{padding-left:var(--s-5)}.bd-document blockquote{padding-left:var(--s-3);border-left:2px solid var(--border-strong);color:var(--fg-muted)}.bd-document code,.bd-code{font:12px/1.6 var(--font-mono)}.bd-plain{white-space:pre-wrap}.bd-code{padding:var(--s-3);white-space:pre;border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg-secondary);max-height:420px;margin:0;overflow:auto}.bd-chart svg{width:100%;height:auto;display:block}.bd-chart figcaption{color:var(--fg-muted);margin-top:var(--s-2);font-size:12px}.bd-grid{stroke:var(--border);stroke-width:1px}.bd-axis{fill:var(--fg-muted);font:11px var(--font-body)}.bd-mark{fill:var(--fg);opacity:.82}.bd-line{stroke:var(--fg);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.bd-files{gap:var(--s-2);padding:0;list-style:none;display:grid}.bd-file{align-items:center;gap:var(--s-2) var(--s-3);padding:var(--s-3);border:1px solid var(--border);border-radius:var(--r-3);flex-wrap:wrap;display:flex}.bd-file-name{overflow-wrap:anywhere;font-weight:600}.bd-file>.btn{margin-left:auto}.bd-muted{color:var(--fg-muted);font-size:12px}.bd-color{align-items:center;gap:var(--s-2);font:13px var(--font-mono);display:inline-flex}.bd-swatch{border-radius:var(--r-2);border:1px solid var(--border-strong);width:20px;height:20px}.bd-link{color:var(--fg);overflow-wrap:anywhere}.bd-player,.bd-input{gap:var(--s-3);display:grid}.bd-color-row{gap:var(--s-2);align-items:center;display:flex}.bd-color-row input[type=color]{border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg);width:44px;min-width:44px;height:44px;padding:2px}.bd-richtext textarea{font:13px/1.6 var(--font-mono)}.bd-table-input th{white-space:nowrap}.bd-table-input th>span{margin-right:var(--s-1)}.bd-table-input td{padding:var(--s-1)}.bd-table-input td input{border-radius:var(--r-2);width:100%;min-width:96px;min-height:36px;color:var(--fg);padding:var(--s-1) var(--s-2);font:inherit;background:0 0;border:1px solid #0000}.bd-table-input td input:focus{border-color:var(--border-strong);background:var(--bg)}.bd-table-input .bd-bar input{border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg);min-height:40px;color:var(--fg);padding:var(--s-2) var(--s-3);font:inherit;flex:160px}.bd-chart svg{max-width:960px}.bd-richtext .bd-bar select{width:auto;min-height:40px}.sm-data-record{grid-template-columns:minmax(72px,max-content) minmax(0,1fr);gap:4px 16px;margin:0;display:grid}.sm-data-record dt{color:var(--text-muted)}.sm-data-record dd{overflow-wrap:anywhere;min-width:0;margin:0}.sm-data-list{gap:6px;margin:0;padding-left:20px;display:grid}.sm-data-list:has(>li>.sm-data-record){gap:0;padding-left:0;list-style:none}.sm-data-list:has(>li>.sm-data-record)>li{padding:10px 0}.sm-data-list:has(>li>.sm-data-record)>li+li{border-top:1px solid var(--border)}.sm-data-none{color:var(--text-muted)}@media (width<=600px){.sm-data-record{grid-template-columns:minmax(0,1fr);gap:0}.sm-data-record dd{margin-bottom:6px}.sm-data-record dd>.sm-data-record{border-left:1px solid var(--border);padding-left:12px}}:where(.sm-player,.sm-viewer,.sm-expand-btn){--sm-cream:var(--cream-100,#f7f0db);--sm-ink:var(--ink-600,#0a0a0a);--sm-gold:var(--signal,#e8b23a);--sm-out:var(--dur-fast,.16s);--sm-in:var(--dur-base,.24s);--sm-ease:var(--ease-out,cubic-bezier(.22,1,.36,1));--sm-spring:var(--ease-spring,cubic-bezier(.34,1.56,.64,1));--sm-display:var(--font-display,"Balgin","Hanken Grotesk",ui-sans-serif,sans-serif)}.sm-player{vertical-align:top;box-sizing:border-box;background:var(--sm-ink);max-width:100%;color:var(--sm-cream);line-height:1;font-family:var(--font-body,"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;outline:none;display:inline-block;position:relative;overflow:hidden}.sm-player:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-player>video{width:auto;max-width:100%;height:auto;max-height:inherit;object-fit:contain;background:0 0;margin:0 auto;display:block}:is(.sm-player[data-fill]>video,.sm-player:fullscreen>video,.sm-player[data-stage]>video){width:100%;max-width:none;height:100%;max-height:none}.sm-player[data-fill]{display:block}.sm-player[data-idle]{cursor:none}:where(.sm-stage)>.sm-player{border-radius:var(--r-2,4px);max-width:100%;max-height:100%}.sm-player-ui{z-index:1;pointer-events:none;position:absolute;inset:0}.sm-player-shade{background:linear-gradient(#0a0a0a00,#0a0a0a8c);height:120px;max-height:100%;position:absolute;bottom:0;left:0;right:0}.sm-player-bar{pointer-events:auto;align-items:center;gap:10px;display:flex;position:absolute;bottom:12px;left:12px;right:12px}.sm-player-shade,.sm-player-bar{transition:opacity var(--sm-in) var(--sm-ease)}.sm-player[data-away] .sm-player-shade,.sm-player[data-away] .sm-player-bar,.sm-player[data-idle] .sm-player-shade,.sm-player[data-idle] .sm-player-bar{opacity:0;pointer-events:none;transition-duration:var(--sm-out)}:where(.sm-player,.sm-viewer) .sm-media-btn{appearance:none;box-sizing:border-box;border-radius:var(--r-3,8px);background:var(--sm-cream);width:44px;min-width:0;height:44px;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;transition:transform var(--sm-out) var(--sm-spring);border:0;flex:none;place-items:center;margin:0;padding:0;line-height:1;text-decoration:none;display:grid}:where(.sm-player,.sm-viewer) .sm-media-btn svg{width:20px;height:20px;display:block}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn.sm-media-btn-text{width:auto;padding:0 14px;font-size:14px;font-weight:600}@media (hover:hover){:where(.sm-player,.sm-viewer) .sm-media-btn:hover{background:var(--sm-cream);color:var(--sm-ink);transform:translateY(-1px)}}:where(.sm-player,.sm-viewer) .sm-media-btn:active{transform:scale(.94)}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px;border-radius:var(--r-3,8px)}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn{border-radius:var(--r-3,8px);background:var(--sm-cream);min-width:0;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;border:0;padding:0;line-height:1;text-decoration:none}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn:hover{background:var(--sm-cream);color:var(--sm-ink)}.sm-player .sm-player-bar [data-control=fullscreen]{margin-left:auto}.sm-player-sound{flex:none;display:flex;position:relative}.sm-player-volume{opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease),transform var(--sm-out) var(--sm-ease);padding-bottom:10px;position:absolute;bottom:100%;left:50%;transform:translate(-50%,6px)}.sm-player-sound:hover .sm-player-volume,.sm-player-sound:focus-within .sm-player-volume,.sm-player-volume[data-drag]{opacity:1;pointer-events:auto;transition-duration:var(--sm-in);transform:translate(-50%)}.sm-player-volume-rail{box-sizing:border-box;border-radius:var(--r-3,8px);cursor:pointer;touch-action:none;background:#0a0a0aa3;outline:none;width:44px;height:128px;padding:14px 0;position:relative}.sm-player-volume-rail:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-player-volume-track{background:#f7f0db47;border-radius:3px;width:6px;height:100%;margin:0 auto;position:relative;overflow:visible}.sm-player-volume-level{background:var(--sm-cream);transform-origin:bottom;border-radius:3px;position:absolute;inset:0;transform:scaleY(1)}.sm-player-volume-head{pointer-events:none;position:absolute;inset:0;transform:translateY(-100%)}.sm-player-volume-knob{background:var(--sm-cream);border-radius:4px;width:16px;height:16px;margin:0 0 -8px -8px;position:absolute;bottom:0;left:50%;box-shadow:0 0 0 3px #0a0a0a59}.sm-player-volume[data-drag] .sm-player-volume-head{will-change:transform}.sm-player[data-volume-room=short] .sm-player-volume-rail{height:84px;padding:12px 0}.sm-player[data-volume-room=none] .sm-player-volume{display:none}@media (hover:none){.sm-player-volume{display:none}}.sm-player-rail{cursor:pointer;touch-action:none;outline:none;flex:auto;min-width:48px;height:24px;position:relative}.sm-player-rail:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px;border-radius:var(--r-2,4px)}.sm-player-track{height:6px;transition:transform var(--sm-out) var(--sm-ease);background:#f7f0db47;border-radius:3px;margin-top:-3px;position:absolute;top:50%;left:0;right:0;overflow:hidden}.sm-player-buffered,.sm-player-played{transform-origin:0;position:absolute;inset:0;transform:scaleX(0)}.sm-player-buffered{background:#f7f0db2e}.sm-player-played{background:var(--sm-cream)}.sm-player-head{pointer-events:none;position:absolute;inset:0;transform:translate(0)}.sm-player[data-playing] .sm-player-head,.sm-player[data-playing] .sm-player-played,.sm-player-rail[data-drag] .sm-player-head{will-change:transform}.sm-player-knob{background:var(--sm-cream);width:16px;height:16px;transition:transform var(--sm-out) var(--sm-spring);border-radius:4px;margin:-8px 0 0 -8px;position:absolute;top:50%;left:0;transform:scale(0);box-shadow:0 0 0 3px #0a0a0a59}.sm-player-rail:hover .sm-player-knob,.sm-player-rail[data-drag] .sm-player-knob,.sm-player-rail:focus-visible .sm-player-knob{transform:scale(1)}.sm-player-rail:hover .sm-player-track,.sm-player-rail[data-drag] .sm-player-track{transform:scaleY(1.34)}.sm-player-tip{border-radius:var(--r-2,4px);background:var(--sm-ink);color:var(--sm-cream);font-variant-numeric:tabular-nums;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease);border:1px solid #f7f0db24;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 4px);left:0}.sm-player-rail:hover .sm-player-tip,.sm-player-rail[data-drag] .sm-player-tip{opacity:1}.sm-player-time{font-family:var(--sm-display);letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--sm-cream);text-shadow:0 1px 8px #0a0a0a99;flex:none;font-size:22px;font-style:italic;font-weight:200;line-height:1}:where(.sm-player,.sm-viewer) .sm-media-of{opacity:.55}.sm-player[data-size] .sm-player-bar{gap:8px}.sm-player[data-size] .sm-player-total{display:none}.sm-player[data-size] .sm-player-time{font-size:18px}.sm-player:is([data-size=compact],[data-size=tiny],[data-size=micro]) .sm-player-time,.sm-player:is([data-size=tiny],[data-size=micro]) [data-control=volume],.sm-player[data-size=micro] .sm-player-bar>:not([data-control=play]):not([data-control=fullscreen]){display:none}@media (hover:none){.sm-player-rail{height:44px}}.sm-player:fullscreen{border-radius:0;width:100%;max-width:none;height:100%;max-height:none}.sm-player[data-stage=theater]{z-index:2147483000;width:auto;max-width:none;height:auto;max-height:none;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);color:var(--sm-cream);background:var(--sm-ink);border:0;border-radius:0;margin:0;display:block;position:fixed;inset:0;overflow:hidden}.sm-player[data-stage=theater]::backdrop{background:var(--sm-ink)}:is(.sm-player:fullscreen .sm-player-bar,.sm-player[data-stage] .sm-player-bar){left:max(12px,env(safe-area-inset-left,0px));right:max(12px,env(safe-area-inset-right,0px));bottom:max(12px,env(safe-area-inset-bottom,0px))}.sm-expand-host{position:relative}.sm-expand-btn{z-index:2;box-sizing:border-box;border-radius:var(--r-3,8px);background:var(--sm-cream);width:44px;min-width:0;height:44px;min-height:0;color:var(--sm-ink);box-shadow:none;cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease),transform var(--sm-out) var(--sm-spring);border:0;place-items:center;margin:0;padding:0;line-height:1;display:grid;position:absolute;bottom:12px;right:12px}.sm-expand-btn svg{width:20px;height:20px;display:block}.sm-expand-btn[data-size=small]{border-radius:6px;width:32px;height:32px;bottom:6px;right:6px}.sm-expand-btn[data-size=small] svg{width:16px;height:16px}.sm-expand-btn[data-size=small]:before{content:"";position:absolute;inset:-6px}@media (hover:hover){:hover>.sm-expand-btn{opacity:1;pointer-events:auto}.sm-expand-btn:hover{background:var(--sm-cream);color:var(--sm-ink);transform:translateY(-1px)}}.sm-expand-btn:focus-visible,.sm-expand-btn[data-show]{opacity:1;pointer-events:auto}.sm-expand-btn:active{transform:scale(.94)}.sm-expand-btn.sm-expand-btn.sm-expand-btn:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-expand-btn.sm-expand-btn.sm-expand-btn{border-radius:var(--r-3,8px);background:var(--sm-cream);min-width:0;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;border:0;padding:0;line-height:1}.sm-expand-btn.sm-expand-btn.sm-expand-btn[data-size=small]{border-radius:6px}.sm-expand-btn.sm-expand-btn.sm-expand-btn:hover{background:var(--sm-cream);color:var(--sm-ink)}.sm-viewer{box-sizing:border-box;background:var(--sm-ink);width:100%;max-width:none;height:100%;max-height:none;color:var(--sm-cream);font-family:var(--font-body,"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif);border:0;margin:0;padding:0;position:fixed;inset:0;overflow:hidden}.sm-viewer[open]{animation:sm-viewer-in var(--sm-in) var(--sm-ease) both;grid-template-rows:minmax(0,1fr) auto;display:grid}.sm-viewer::backdrop{background:var(--ink-600,#0a0a0a)}@keyframes sm-viewer-in{0%{opacity:0}}.sm-viewer [hidden],.sm-viewer .sm-media-btn[hidden]{display:none}.sm-viewer-stage{min-width:0;min-height:0;padding:max(12px,env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) 12px max(12px,env(safe-area-inset-left,0px));grid-template:minmax(0,1fr)/minmax(0,1fr);place-items:center;display:grid;position:relative;overflow:hidden}.sm-viewer-media{object-fit:contain;width:100%;min-width:0;height:100%;min-height:0;display:block}.sm-viewer-stage>.sm-player{width:100%;max-width:100%;height:100%;max-height:100%}.sm-viewer-off,.sm-player-off{box-sizing:border-box;border:1px solid var(--border-tok,#58534d);border-radius:var(--r-2,4px);background:var(--bg-inset,#171716);color:var(--fg-muted,#bbb2a7);place-items:center;display:inline-grid}.sm-viewer-off{aspect-ratio:4/3;width:min(60vw,320px)}.sm-player-off{aspect-ratio:16/9;vertical-align:top;width:min(100%,320px);max-width:100%}.sm-viewer-off svg,.sm-player-off svg{width:24px;height:24px;display:block}.sm-viewer-top{top:max(12px,env(safe-area-inset-top,0px));right:max(12px,env(safe-area-inset-right,0px));z-index:2;gap:10px;display:flex;position:absolute}.sm-viewer .sm-viewer-nav{z-index:2;margin-top:-22px;position:absolute;top:50%}.sm-viewer .sm-viewer-previous{left:max(12px,env(safe-area-inset-left,0px))}.sm-viewer .sm-viewer-next{right:max(12px,env(safe-area-inset-right,0px))}.sm-viewer-foot{min-width:0;padding:12px max(12px,env(safe-area-inset-right,0px)) max(14px,env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));justify-content:center;align-items:baseline;gap:12px;display:flex}.sm-viewer-count{font-family:var(--sm-display);letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:24px;font-style:italic;font-weight:200;line-height:1}.sm-viewer-name{min-width:0;color:var(--fg-muted,#bbb2a7);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}@media (prefers-reduced-motion:reduce){.sm-player *,.sm-viewer,.sm-viewer *,.sm-expand-btn{transition:none!important;animation:none!important}}.sm-when-pickers{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:inline-flex}.sm-when-pick{min-width:0;display:inline-flex;position:relative}.sm-when-button{border:1px solid var(--border-tok);border-radius:var(--r-3);background:var(--bg-elev-1);height:36px;color:var(--fg);font:inherit;font-family:var(--font-body);font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer;align-items:center;gap:6px;padding:0 8px 0 10px;font-size:13.5px;display:inline-flex}.sm-when-button svg{color:var(--fg-muted);flex:none}.sm-when-button svg:last-child{color:var(--fg-subtle)}.sm-when-button[aria-expanded=true]{border-color:var(--fg);box-shadow:inset 0 0 0 1px var(--fg)}.sm-when-button:disabled{cursor:default;opacity:.55}.sm-when-pop{z-index:40;border:1px solid var(--border-strong);border-radius:var(--r-3);background:var(--bg-elev-1);color:var(--fg);box-shadow:var(--shadow-lg);margin:0;padding:10px;position:absolute;top:calc(100% + 4px);left:0}.sm-when-calendar{box-sizing:border-box;gap:6px;width:260px;max-width:calc(100vw - 32px);display:grid}.sm-when-cal-head{justify-content:space-between;align-items:center;font-size:14px;display:flex}.sm-when-cal-head b{font-weight:600}.sm-when-cal-nav{gap:2px;display:inline-flex}.sm-when-cal-nav button{border-radius:var(--r-2);width:30px;height:30px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.sm-when-cal-nav button:hover:not(:disabled){background:var(--hover-wash);color:var(--fg)}.sm-when-cal-nav button:disabled{opacity:.35;cursor:default}.sm-when-cal-grid{text-align:center;font-variant-numeric:tabular-nums;grid-template-columns:repeat(7,1fr);gap:2px;font-size:13px;display:grid}.sm-when-cal-grid i{color:var(--fg-subtle);padding:2px 0;font-size:12px;font-style:normal}.sm-when-cal-grid button{height:30px;color:var(--fg);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.sm-when-cal-grid button:hover:not(:disabled):not([aria-pressed=true]){background:var(--hover-wash)}.sm-when-cal-grid button:disabled{color:var(--fg-subtle);cursor:default}.sm-when-cal-grid button[aria-current=date]{box-shadow:inset 0 0 0 1px var(--border-strong)}.sm-when-cal-grid button[aria-pressed=true]{background:var(--fg);color:var(--bg);font-weight:600}.sm-when-clear{justify-self:start;min-height:32px;padding:4px 12px}.sm-when-times{box-sizing:border-box;outline:none;gap:1px;width:150px;max-height:240px;padding:4px;list-style:none;display:grid;overflow-y:auto}.sm-when-times li{border-radius:var(--r-2);font-variant-numeric:tabular-nums;cursor:pointer;padding:6px 10px;font-size:14px}.sm-when-times li[data-active=true]{background:var(--hover-wash)}.sm-when-times li[aria-selected=true]{font-weight:600}.sm-when-times li[aria-disabled=true]{color:var(--fg-subtle);cursor:default}.sm-when-times:focus-visible li[data-active=true]{box-shadow:inset 0 0 0 1px var(--fg)}
|
|
1
|
+
@font-face{font-family:Hanken Grotesk;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/HankenGrotesk-Variable.ttf)format("truetype")}@font-face{font-family:Hanken Grotesk;font-style:italic;font-weight:100 900;font-display:swap;src:url(/fonts/HankenGrotesk-Italic-Variable.ttf)format("truetype")}:root{--cream-50:#fdfaf1;--cream-100:#f7f0db;--cream-200:#ece3c9;--cream-300:#dcd2b5;--cream-600:#4e483a;--ink-50:#f2f0ec;--ink-100:#c9c6be;--ink-300:#4a4843;--ink-400:#26241f;--ink-500:#16140f;--ink-600:#0a0a0a;--signal:#e8b23a;--signal-dim:#e8b23a26;--signal-glow:#e8b23a4d;--font-display:"Balgin", "Hanken Grotesk", ui-sans-serif, sans-serif;--font-body:"Hanken Grotesk", ui-sans-serif, sans-serif;--font-mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font:var(--font-body);--fs-display-xl:clamp(72px, 14vw, 220px);--fs-display-l:clamp(56px, 9vw, 144px);--fs-display-m:clamp(40px, 6vw, 96px);--fs-h4:1.25rem;--fs-body:1rem;--fs-body-s:.875rem;--fs-caption:.8125rem;--fs-micro:.75rem;--tr-display:-.02em;--tr-body:-.005em;--tr-micro:.08em;--lh-display:.92;--lh-tight:1.05;--s-1:4px;--s-2:8px;--s-3:12px;--s-4:16px;--s-5:24px;--s-6:32px;--s-7:48px;--s-8:64px;--s-9:96px;--s-10:128px;--s-11:192px;--page-gutter:clamp(20px, 3vw, 48px);--page-gutter-compact:clamp(16px, 5vw, 24px);--page-section-gap:clamp(32px, 5vw, 64px);--content-readable:720px;--content-wide:1440px;--control-height:40px;--touch-target:44px;--mobile-dock-height:66px;--z-nav:30;--hover:var(--hover-wash);--r-0:0;--r-1:2px;--r-2:4px;--r-3:8px;--r-pill:999px;--radius-sm:var(--r-2);--radius:var(--r-3);--radius-lg:var(--r-3);--bw-hair:.5px;--bw-1:1px;--bw-2:2px;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-instant:80ms;--dur-fast:.16s;--dur-base:.24s;--dur-slow:.48s;--dur-reveal:.72s}:root,[data-mode=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#101010;--bg-elev-1:#232221;--bg-elev-2:#33312f;--bg-inset:#171716;--fg:#f3eee5;--fg-muted:#bbb2a7;--fg-subtle:#f3eee594;--fg-on-accent:#191716;--border-tok:#58534d;--border-strong:#8b7e6f;--divider:#393735;--signal:#d0ae77;--signal-dim:#d0ae7726;--signal-glow:#d0ae774d;--hover-wash:#f7f0db0f;--press-wash:#f7f0db1f;--selection-bg:var(--cream-100);--selection-fg:var(--ink-600);--shadow-1:0 1px 0 #f7f0db0a inset, 0 4px 12px #00000080;--shadow-2:0 1px 0 #f7f0db0f inset, 0 16px 48px #0009;--scrim-top:linear-gradient(to bottom, #0a0a0ad9, #0a0a0a00);--scrim-bottom:linear-gradient(to top, #0a0a0ad9, #0a0a0a00);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-1);--bg-hover:#403d3a;--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:var(--cream-50);--accent-dim:var(--hover-wash);--accent-glow:#f7f0db38;--accent-contrast:var(--bg);--editor-standout-bg:var(--fg);--editor-standout-fg:var(--bg);--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#e0b24f;--attention-error:#e26a5f;--attention-ok:#6bc38e;--attention-info:#7da7e8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}[data-mode=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--signal:#e8b23a;--signal-dim:#e8b23a26;--signal-glow:#e8b23a4d;--bg:var(--cream-100);--bg-elev-1:var(--cream-50);--bg-elev-2:var(--cream-200);--bg-inset:var(--cream-200);--fg:var(--ink-600);--fg-muted:var(--cream-600);--fg-subtle:#0a0a0a61;--fg-on-accent:var(--cream-100);--border-tok:#0a0a0a1a;--border-strong:#0a0a0a38;--divider:#0a0a0a0f;--hover-wash:#0a0a0a0d;--press-wash:#0a0a0a1a;--selection-bg:var(--ink-600);--selection-fg:var(--cream-100);--shadow-1:0 1px 0 #ffffff80 inset, 0 4px 12px #0a0a0a0f;--shadow-2:0 1px 0 #fff9 inset, 0 16px 48px #0a0a0a1a;--scrim-top:linear-gradient(to bottom, #f7f0dbe6, #f7f0db00);--scrim-bottom:linear-gradient(to top, #f7f0dbe6, #f7f0db00);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-2);--bg-hover:var(--cream-300);--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:var(--ink-500);--accent-dim:var(--hover-wash);--accent-glow:#0a0a0a38;--accent-contrast:var(--bg);--editor-standout-bg:var(--ink-300);--editor-standout-fg:var(--cream-100);--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#b98200;--attention-error:#c2453d;--attention-ok:#2e7d4f;--attention-info:#2f67b8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}[data-mode=white]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--bg-elev-1:#f4f4f1;--bg-elev-2:#eaeae6;--bg-inset:#eeeeea;--fg:#0e0e0e;--fg-muted:#5c5c5c;--fg-subtle:#767676;--fg-on-accent:#fff;--border-tok:#e1e1dd;--border-strong:#c4c4bf;--divider:#e7e7e3;--hover-wash:#0000000d;--press-wash:#00000017;--selection-bg:#0e0e0e;--selection-fg:#fff;--signal:#8e6b46;--signal-dim:#8e6b461a;--signal-glow:#8e6b4638;--shadow-1:0 1px 3px #0000000d;--shadow-2:0 12px 40px #0000001a;--scrim-top:linear-gradient(to bottom,#ffffffe6,#fff0);--scrim-bottom:linear-gradient(to top,#ffffffe6,#fff0);--bg-primary:var(--bg);--bg-secondary:var(--bg-elev-1);--bg-tertiary:var(--bg-elev-2);--bg-elevated:var(--bg-elev-1);--bg-hover:#ecece8;--border:var(--border-tok);--border-light:var(--border-strong);--accent:var(--fg);--accent-hover:#2a2a2a;--accent-dim:var(--hover-wash);--accent-glow:#0000001f;--accent-contrast:var(--bg);--editor-standout-bg:#24211d;--editor-standout-fg:#fff;--text-primary:var(--fg);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle);--success:var(--fg);--warning:var(--signal);--danger:var(--signal);--attention-warning:#b98200;--attention-error:#c2453d;--attention-ok:#2e7d4f;--attention-info:#2f67b8;--shadow:var(--shadow-1);--shadow-lg:var(--shadow-2)}button[data-icon-action=true]{cursor:pointer;flex-shrink:0;line-height:1;min-width:36px!important;min-height:36px!important;box-shadow:none!important;color:var(--text-secondary,var(--fg))!important;background:0 0!important;border:0!important;border-radius:0!important;justify-content:center!important;align-items:center!important;padding:8px!important;display:inline-flex!important}button[data-icon-action=true]:hover:not(:disabled){color:var(--text-primary,var(--fg))!important}button[data-icon-action=true]:focus-visible{outline-offset:2px;outline:2px solid var(--signal)!important}button[data-icon-action=true]:disabled{cursor:not-allowed;opacity:.4!important}button[data-icon-action=true][aria-pressed=true]{text-underline-offset:5px;text-decoration:underline;color:var(--text-primary,var(--fg))!important}@media (pointer:coarse){button[data-icon-action=true]{min-width:44px!important;min-height:44px!important}}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root[data-anim-theme="1"]:not([data-mode=white]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0d13;--bg-elev-1:#0f141c;--bg-elev-2:#1a2230;--bg-inset:#0f141c;--fg:#d8dee8;--fg-muted:#8b98ac;--fg-subtle:#64748b;--fg-on-accent:#0a0d13;--border-tok:#232d3d;--border-strong:#303d50;--divider:#1a2230;--hover-wash:#8b98ac14;--press-wash:#8b98ac29;--selection-bg:#303d50;--selection-fg:#d8dee8;--bg-primary:#0a0d13;--bg-secondary:#0f141c;--bg-tertiary:#1a2230;--bg-elevated:#1a2230;--bg-hover:#232d3d;--border:#232d3d;--border-light:#303d50;--accent:#8b98ac;--accent-hover:#b6c0ce;--accent-dim:#8b98ac1f;--accent-glow:#8b98ac40;--accent-contrast:#0a0d13;--editor-standout-bg:#d8dee8;--editor-standout-fg:#0a0d13;--text-primary:#d8dee8;--text-secondary:#8b98ac;--text-muted:#64748b;--success:#8b98ac;--warning:#b6c0ce;--danger:#b6c0ce}html,body{background:var(--bg);width:100%;height:100%;color:var(--fg);font-family:var(--font-body);letter-spacing:var(--tr-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:14px;line-height:1.6;overflow:hidden}#root{width:100%;height:100%;overflow:hidden}.sm-app-shell{height:100dvh}@keyframes sm-navmenu-in{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.mobile-nav-menu{animation:.2s cubic-bezier(.22,1,.36,1) sm-navmenu-in}::selection{background:var(--selection-bg);color:var(--selection-fg)}.display,h1,h2{font-family:var(--font-display);font-style:italic;font-weight:200;line-height:var(--lh-tight);letter-spacing:var(--tr-display);margin:0}.display{line-height:var(--lh-display)}h3,h4{font-family:var(--font-body);font-weight:500;line-height:var(--lh-tight);letter-spacing:-.01em;margin:0}.eyebrow{color:var(--fg-muted);font-size:11px;font-weight:500}code,pre,.mono{font-family:var(--font-mono);font-size:.92em}.listing-identity code{font-family:inherit;font-size:inherit}button{font-family:var(--font-body);cursor:pointer;letter-spacing:var(--tr-body);border:none;outline:none}textarea,input,select{font-family:var(--font-body);outline:none}select{background-color:var(--bg-elev-1);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--r-2)}select option,select optgroup{background-color:var(--bg-elevated);color:var(--text-primary)}select option:checked{font-weight:600}.tsel-trigger{background-color:var(--bg-elev-1);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--r-2);font-family:var(--font-body);font-size:inherit;cursor:pointer;text-align:left;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;display:inline-flex}.tsel-trigger:hover{border-color:var(--border-strong)}.tsel-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.tsel-trigger:disabled{opacity:.5;cursor:default}.tsel-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tsel-caret{opacity:.7;flex:none;font-size:10px}.tsel-pop{z-index:100100;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--r-2);max-height:260px;padding:4px;overflow-y:auto;box-shadow:0 8px 28px #00000047}.tsel-opt{color:var(--text-primary);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:6px 8px;font-size:13px;display:flex}.tsel-opt[data-active=true]{background:var(--bg-elev-1)}.tsel-opt[aria-selected=true]{font-weight:600}.tsel-opt[aria-disabled=true]{color:var(--text-muted);cursor:default}.tsel-opt[aria-disabled=true][data-active=true]{background:0 0}.tsel-check{opacity:.8;flex:none;width:12px;font-size:11px}.tsel-opt-label{text-overflow:ellipsis;flex:auto;overflow:hidden}.tsel-note{cursor:help;width:16px;height:16px;color:var(--text-muted);border:1px solid var(--border);border-radius:999px;flex:none;justify-content:center;align-items:center;font-size:11px;display:inline-flex;position:relative}.tsel-note:hover{color:var(--text-primary);border-color:var(--border-strong)}.tsel-tip{z-index:100110;background:var(--text-primary);color:var(--bg-elevated);box-sizing:border-box;white-space:normal;pointer-events:none;border-radius:5px;max-width:min(260px,100vw - 16px);padding:4px 8px;font-size:11px;font-weight:600;box-shadow:0 2px 10px #0000004d}@media (width<=767.98px),(height<=480px) and (pointer:coarse){.tsel-opt{box-sizing:border-box;min-height:44px;font-size:14px}.tsel-note{flex:0 0 44px;width:44px;height:44px;font-size:14px}}.video-editor input,.video-editor select,.video-editor textarea{background:var(--bg-inset);width:100%;min-width:0;color:var(--fg);border:var(--bw-1) solid var(--border-strong);border-radius:var(--r-2);font-family:var(--font-body);accent-color:var(--signal);padding:7px 8px;font-size:12px}.video-editor,.mobile-editor-root{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.video-editor input,.video-editor select,.video-editor textarea,.video-editor [contenteditable=true],.mobile-editor-root input,.mobile-editor-root select,.mobile-editor-root textarea,.mobile-editor-root [contenteditable=true]{-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}.video-editor input[type=range]{background:0 0;border:0;padding:0}.video-editor input[type=checkbox]{width:auto;min-width:auto}.video-editor select:focus,.video-editor input:focus,.video-editor textarea:focus{border-color:var(--signal);box-shadow:0 0 0 1px var(--signal-dim)}:focus-visible{outline:2px solid var(--signal);outline-offset:2px}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-pill)}::-webkit-scrollbar-thumb:hover{background:var(--fg-subtle)}.sm-hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.sm-hide-scrollbar::-webkit-scrollbar{width:0;height:0;display:none}.btn{align-items:center;gap:var(--s-2);padding:var(--s-2) var(--s-4);border-radius:var(--r-pill);letter-spacing:var(--tr-body);transition:transform var(--dur-fast) var(--ease-out), background-color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), opacity var(--dur-fast) var(--ease-out);font-size:13px;font-weight:500;display:inline-flex}.btn:active{transform:scale(.98)}.btn-primary{background:var(--fg);color:var(--bg)}.btn-primary:hover{background:var(--fg);opacity:.86}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{color:var(--fg);border:var(--bw-1) solid var(--border-strong);background:0 0}.btn-secondary:hover{background:var(--hover-wash);border-color:var(--fg)}.btn-ghost{color:var(--fg-muted);background:0 0;padding:6px 10px}.btn-ghost:hover{background:var(--hover-wash);color:var(--fg)}.btn-icon{color:var(--fg-muted);border-radius:var(--r-2);transition:background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out);background:0 0;justify-content:center;align-items:center;padding:5px;display:inline-flex}.btn-icon:hover{background:var(--hover-wash);color:var(--fg)}.btn-icon:active{transform:scale(.98)}.btn-icon:disabled{opacity:.4;cursor:not-allowed}.typing-indicator{align-items:center;gap:4px;padding:4px 0;display:flex}.typing-indicator span{border-radius:var(--r-pill);background:var(--fg-subtle);width:6px;height:6px;animation:1.2s infinite bounce}.typing-indicator span:nth-child(2){animation-delay:.2s}.typing-indicator span:nth-child(3){animation-delay:.4s}@keyframes bounce{0%,60%,to{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-5px)}}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:.4;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}button:focus-visible,[role=button]:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]):not([type=button]):not([type=submit]):not([type=reset]):is(:focus,:focus-visible),textarea:is(:focus,:focus-visible),select:is(:focus,:focus-visible),[contenteditable]:not([contenteditable=false]):is(:focus,:focus-visible){outline:none!important}@keyframes skeletonShimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,#ffffff08 0%,#ffffff1a 50%,#ffffff08 100%) 0 0/200% 100%;border-radius:6px;animation:1.4s ease-in-out infinite skeletonShimmer}.node-state-empty{border-style:dashed!important}.node-state-generating{box-shadow:0 0 0 2px var(--accent);position:relative}.node-state-generating:after{content:"";border-radius:inherit;pointer-events:none;will-change:opacity;animation:1.6s ease-in-out infinite nodePulse;position:absolute;inset:-2px;box-shadow:0 0 18px #f7c8328c}@keyframes nodePulse{0%,to{opacity:.36}50%{opacity:1}}.node-state-warning{position:relative;border-color:var(--attention-warning)!important}.node-state-warning:after{content:"";border-radius:inherit;pointer-events:none;box-shadow:0 0 0 1px var(--attention-warning), 0 0 14px color-mix(in srgb, var(--attention-warning) 40%, transparent);position:absolute;inset:-2px}.node-state-failed{border-top:4px solid #d04848!important}.node-state-failed:before{content:"⚠ ";color:#d04848;z-index:2;pointer-events:none;font-size:12px;font-weight:800;position:absolute;top:6px;left:8px}.react-flow__node{cursor:default}.react-flow__node.dragging,.react-flow__pane.dragging .react-flow__viewport{will-change:transform}.react-flow__node:not(.react-flow__node-sceneGroupNode):not(.react-flow__node-shotLabelNode):not(.react-flow__node-stickyNoteNode):not(.react-flow__node-transitionNode){box-shadow:1px 1px 0 var(--node-side,#d8cfb3), 2px 2px 0 var(--node-side,#d8cfb3), 3px 3px 0 var(--node-side,#d8cfb3), 4px 4px 0 var(--node-side,#d8cfb3), 5px 5px 0 var(--node-side,#d8cfb3), 6px 6px 0 var(--node-side,#d8cfb3), 7px 7px 0 var(--node-edge,#0a0a0a2e), 14px 16px 18px -4px #0a0a0a2e;border-radius:10px}[data-mode=dark] .react-flow__node:not(.react-flow__node-sceneGroupNode):not(.react-flow__node-shotLabelNode):not(.react-flow__node-stickyNoteNode):not(.react-flow__node-transitionNode){--node-side:#1f1d18;--node-edge:#f7f0db2e}.react-flow__controls{grid-template-columns:repeat(2,1fr)!important;display:grid!important}.react-flow__controls button{background:var(--bg-elev-2)!important;border-color:var(--border-tok)!important;color:var(--fg-muted)!important;fill:var(--fg-muted)!important}.react-flow__controls button:hover{background:var(--ink-300)!important}.react-flow__edge-path{stroke:var(--border-strong)}.react-flow.rf-edges-panning .react-flow__edges{display:none}.react-flow__node.node-controls-locked input,.react-flow__node.node-controls-locked textarea,.react-flow__node.node-controls-locked select,.react-flow__node.node-controls-locked button,.react-flow__node.node-controls-locked [role=button]{pointer-events:none!important}.react-flow__node.node-controls-locked{cursor:grab}.react-flow__node.node-controls-locked:active{cursor:grabbing}.react-flow__node.scene-add-available-node{filter:drop-shadow(0 0 10px #f7f0db38)}.react-flow__node.scene-add-available-node>div{outline:1px solid var(--border-strong);outline-offset:4px;border-radius:var(--r-3)}.react-flow__node.scene-add-available-node:after{content:"";border:1px dashed var(--border-strong);border-radius:var(--r-3);pointer-events:none;position:absolute;inset:-8px}.react-flow__node.node-replace-available{filter:drop-shadow(0 0 10px #f7f0db38)}.react-flow__node.node-replace-available>div{outline:1px solid var(--border-strong);outline-offset:4px;border-radius:var(--r-3)}.react-flow__node.node-replace-available:after{content:"";border:1px dashed var(--border-strong);border-radius:var(--r-3);pointer-events:none;position:absolute;inset:-8px}select option{background:var(--bg-elev-2);color:var(--fg)}.spinner{border:2px solid var(--border-tok);border-top-color:var(--fg);border-radius:var(--r-pill);width:16px;height:16px;animation:.7s linear infinite spin}.media-upload-preview:hover .media-upload-overlay{opacity:1!important}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:1ms!important;animation-duration:1ms!important}}.assets-card .assets-card-overlay{opacity:0;transition:opacity .15s}.assets-card:hover .assets-card-overlay{opacity:1}.yt-video-row{transition:background .12s,box-shadow .12s,color .12s}.yt-video-row:hover{box-shadow:inset 2px 0 0 var(--accent), inset 0 0 14px var(--accent-glow);color:var(--text-primary);background:var(--hover-wash)!important}.chat-bubble ::selection{background:var(--signal);color:#0a0a0a}.chat-bubble ::selection{background:var(--signal);color:#0a0a0a}.chat-bubble:hover .chat-bubble-copy,.chat-bubble:focus-within .chat-bubble-copy,.chat-bubble-copy:hover,.chat-bubble-copy:focus{opacity:1!important}.chat-bubble-copy:hover{background:var(--bg-elevated-2,var(--bg-elevated));color:var(--text-primary)!important}.chat-bubble-copy:active{transform:scale(.94)}.sm-brand .sm-brandmark{transform-origin:50%;transition:transform .76s cubic-bezier(.2,.8,.2,1),filter .28s}.sm-brand:hover .sm-brandmark{filter:drop-shadow(0 0 7px color-mix(in srgb, currentColor 45%, transparent));will-change:transform, filter;transform:perspective(340px)rotateY(360deg)scale(1.06)}.sm-brand .sm-word{transition:transform .3s cubic-bezier(.2,.8,.2,1);transform:translate(-4px)}.sm-brand:hover .sm-word{will-change:transform;transform:translate(-4px,-1px)}@media (prefers-reduced-motion:reduce){.sm-brand .sm-brandmark{transition:transform .24s,filter .24s}.sm-brand:hover .sm-brandmark{transform:scale(1.06)}.sm-brand:hover .sm-word{transform:translate(-4px)}}body.sm-mobile-ui input,body.sm-mobile-ui textarea,body.sm-mobile-ui select{font-size:16px!important}body.sm-mobile-ui button,body.sm-mobile-ui select,body.sm-mobile-ui [role=button]{min-height:44px}body.sm-mobile-ui select:not([multiple]):not([size]){height:max(44px,2.75em)}body.sm-mobile-ui button.btn-icon,body.sm-mobile-ui button[data-compact],body.sm-mobile-ui .no-min-tap{min-height:0}body.sm-mobile-ui .yt-video-row{min-width:560px}:where(html:has(.sm-block)){container-type:inline-size}:where(.sm-block){gap:var(--s-5,24px);min-width:0;display:grid}:where(.sm-block,.sm-block *){box-sizing:border-box}:where(.sm-block)>:where(*){min-width:0}@container (width>=720px){:where(.sm-block[data-layout=split]){grid-template-columns:minmax(0,1.6fr) minmax(260px,1fr);align-items:start}:where(.sm-block[data-layout=split])>:where(.sm-stage){grid-row:span 6}}@container (width>=860px){:where(.sm-block:not([data-layout]):has(>.sm-stage)){align-items:start;column-gap:var(--s-5,24px);row-gap:var(--s-4,16px);grid-template-columns:minmax(300px,380px) minmax(0,1fr)}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(*){grid-column:1}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(.sm-stage){grid-area:1/2/span 12;align-self:stretch;min-height:min(70vh,640px)}:where(.sm-block:not([data-layout]):has(>.sm-stage))>:where(.sm-stage[data-ratio]){align-self:start;min-height:0}}:where(.sm-row){align-items:center;gap:var(--s-2,8px);flex-wrap:wrap;display:flex}@container (width<=519px){:where(.sm-clamp:not([data-open])){-webkit-line-clamp:var(--sm-lines,5);-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}:where(.sm-stage){min-height:220px;padding:var(--s-3,12px);border-radius:var(--r-3,8px);background:var(--bg-inset);place-items:center;display:grid;position:relative;overflow:hidden}:where(.sm-stage:is([data-ratio="16:9"],[data-ratio="16/9"])){aspect-ratio:16/9;min-height:0}:where(.sm-stage:is([data-ratio="9:16"],[data-ratio="9/16"])){aspect-ratio:9/16;justify-self:center;width:auto;height:min(70vh,640px);min-height:0;max-height:70vh}:where(.sm-stage:is([data-ratio="1:1"],[data-ratio="1/1"])){aspect-ratio:1;min-height:0}:where(.sm-stage)>:where(img,video,canvas){object-fit:contain;border-radius:var(--r-2,4px);max-width:100%;max-height:100%;display:block}:where(.sm-stage[data-fill])>:where(img,video,canvas){object-fit:cover;width:100%;height:100%}:where(.sm-stage) :where(img:not([src]),img[src=""]){display:none}:where(.sm-empty){justify-items:center;gap:var(--s-3,12px);padding:var(--s-5,24px) var(--s-4,16px);text-align:center;color:var(--fg-muted);display:grid}:where(.sm-empty)>:where(.sm-glyph){--sm-glyph-size:40px;color:var(--fg-subtle)}:where(.sm-empty)>:where(p){max-width:24ch;font-size:var(--fs-body,1rem);margin:0}:where(.sm-drop){outline:1px dashed var(--border-tok);outline-offset:-8px}:where(.sm-drop[data-over]){outline-color:var(--fg);background:var(--hover-wash)}:where(.sm-actions){align-items:center;gap:var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-actions)>:where(.sm-status){margin-inline-start:var(--s-2,8px)}:where(.sm-primary,.sm-quiet){justify-content:center;align-items:center;gap:var(--s-2,8px);min-height:var(--touch-target,44px);border-radius:var(--r-pill,999px);font:inherit;cursor:pointer;text-align:center;overflow-wrap:anywhere;max-width:100%;padding:10px 20px;font-weight:500;display:inline-flex}:where(.sm-primary){border:1px solid var(--fg);background:var(--fg);color:var(--bg)}:where(.sm-quiet){border:1px solid var(--border-strong);background:var(--bg-elev-1);color:var(--fg)}:where(.sm-quiet):hover{background:var(--bg-elev-2)}:where(.sm-icon){min-width:var(--touch-target,44px);min-height:var(--touch-target,44px);border-radius:var(--r-2,4px);color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}:where(.sm-icon):hover{color:var(--fg);background:var(--hover-wash)}:where(.sm-icon[aria-pressed=true]){color:var(--fg);background:var(--press-wash)}:where(.sm-primary,.sm-quiet,.sm-icon):disabled{opacity:.45;cursor:default}:where(.sm-primary,.sm-quiet,.sm-icon):focus-visible{outline:2px solid var(--signal);outline-offset:3px}@container (width<=420px){:where(.sm-actions)>:where(.sm-primary){flex:100%}}:where(.sm-field){gap:6px;min-width:0;display:grid}:where(.sm-field)>:where(label,.sm-label){align-items:center;gap:var(--s-1,4px);font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);min-height:24px;display:flex}:where(.sm-field) :where(input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea){width:100%;min-height:var(--touch-target,44px);border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);color:var(--fg);font:inherit;padding:10px 12px}:where(.sm-field) :where(textarea){resize:vertical;min-height:96px}:where(.sm-fields){gap:var(--s-4,16px);grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));display:grid}:where(.sm-block)>:where(.sm-fields,.sm-settings){padding:var(--s-3,12px) var(--s-4,16px);border:1px solid var(--border);border-radius:var(--r-3,8px);background:var(--bg-secondary)}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){align-items:center;gap:6px var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list)))>:where(label,.sm-label){flex:0 auto}:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list)))>:where(:not(label,.sm-label)){flex:1 1 var(--sm-control,10rem);min-width:0}@container (width>=520px){:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){align-items:center;gap:var(--s-2,8px);grid-template-columns:minmax(5rem,9rem) minmax(0,1fr);display:grid}:where(.sm-field) :where(input:not([type=checkbox]):not([type=radio]):not([type=range]),select){min-height:36px;padding:6px 10px}:where(.sm-fields){gap:var(--s-2,8px) var(--s-4,16px)}}:where(.sm-choices){gap:var(--s-2,8px);grid-template-columns:repeat(auto-fill,minmax(var(--sm-tile,96px),1fr));border:0;min-width:0;margin:0;padding:0;display:grid}:where(.sm-choices[data-size=wide]){--sm-tile:160px}:where(.sm-choices)>:where(legend){font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);margin-bottom:6px;padding:0}:where(.sm-choices)>:where(label){padding:var(--s-2,8px);border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);color:var(--fg-muted);font-size:max(12px,var(--fs-caption,.8125rem));text-align:center;cursor:pointer;align-content:start;justify-items:center;gap:6px;display:grid;position:relative}:where(.sm-choices)>:where(label:not(:has(input:checked,input:disabled))):hover{border-color:var(--border-strong);color:var(--fg)}:where(.sm-choices) :where(input[type=radio],input[type=checkbox]){opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute;inset:0}:where(.sm-choices)>:where(label:has(input:checked)){border-color:var(--fg);background:var(--fg);color:var(--bg);box-shadow:none;--fg-muted:color-mix(in srgb,var(--bg) 78%,transparent);--fg-subtle:color-mix(in srgb,var(--bg) 64%,transparent);--text-secondary:var(--fg-muted);--text-muted:var(--fg-subtle)}:where(.sm-choices)>:where(label:has(input:focus-visible)){outline:2px solid var(--signal);outline-offset:2px}:where(.sm-choices)>:where(label:has(input:disabled)),:where(.sm-choices) :where(input:disabled){cursor:default}:where(.sm-choices)>:where(label:has(input:disabled):not(:has(input:checked))){opacity:.45}:where(.sm-choices) :where(img,video,canvas,.sm-swatch){width:100%;aspect-ratio:var(--sm-tile-ratio,1);object-fit:cover;border-radius:var(--r-2,4px);background:var(--bg-inset);display:block}:where(.sm-choices) :where(.sm-glyph){--sm-glyph-size:28px;margin:10px 0 4px}:where(.sm-choices:is([data-ratio="16:9"],[data-ratio="16/9"])){--sm-tile-ratio:16/9}:where(.sm-choices:is([data-ratio="9:16"],[data-ratio="9/16"])){--sm-tile-ratio:9/16}:where(.sm-choices[data-compact])>:where(label){min-height:var(--touch-target,44px);grid-auto-flow:column;place-content:center;align-items:center;padding:6px 12px}:where(.sm-choices[data-compact]) :where(.sm-glyph){--sm-glyph-size:18px;margin:0}:where(.sm-choices) :where(audio){z-index:1;width:100%;height:32px;position:relative}:where(.sm-shape){box-sizing:border-box;width:calc(var(--sm-shape-size,32px) * min(1,var(--r,1)));aspect-ratio:var(--r,1);border:2px solid;border-radius:3px;max-width:100%;margin:4px auto;display:block}:where(.sm-choices)>:where(label:has(.sm-shape)){grid-template-rows:1fr auto;align-content:stretch}:where(.sm-choices) :where(.sm-shape){--sm-shape-size:36px;align-self:center;margin:6px auto 2px}:where(.sm-choices[data-compact]) :where(.sm-shape){--sm-shape-size:20px;margin:0}:where(.sm-choices[data-segmented]){gap:0;width:fit-content;max-width:100%;display:flex}:where(.sm-choices[data-segmented])>:where(label){min-height:36px;font-size:var(--fs-body-s,.875rem);white-space:nowrap;border-radius:0;justify-content:center;align-items:center;gap:6px;padding:4px 12px;display:inline-flex}:where(.sm-choices[data-segmented])>:where(label+label){margin-inline-start:-1px}:where(.sm-choices[data-segmented])>:where(label:first-of-type){border-start-start-radius:var(--r-pill,999px);border-end-start-radius:var(--r-pill,999px)}:where(.sm-choices[data-segmented])>:where(label:last-of-type){border-start-end-radius:var(--r-pill,999px);border-end-end-radius:var(--r-pill,999px)}:where(.sm-choices[data-segmented])>:where(label:has(input:checked)){z-index:1;position:relative}:where(.sm-choices[data-segmented]) :where(.sm-glyph){--sm-glyph-size:16px;margin:0}:where(.sm-settings){gap:var(--s-3,12px) var(--s-4,16px);grid-template-columns:repeat(auto-fill,minmax(min(100%,11rem),1fr));align-items:start;min-width:0;display:grid}:where(.sm-settings)>:where(.sm-field){grid-template-columns:minmax(0,1fr);gap:4px}:where(.sm-settings)>:where(.sm-field:not(:has(textarea,.sm-choices,.sm-gallery,.sm-list))){--sm-control:6rem;align-items:center;gap:4px var(--s-2,8px);flex-wrap:wrap;display:flex}:where(.sm-settings)>:where(.sm-choices)>:where(legend),:where(.sm-settings) :where(.sm-label){font-size:max(12px,var(--fs-caption,.8125rem))}@container (width<=519px){:where(.sm-choices[data-compact],.sm-choices[data-segmented]){scrollbar-width:none;flex-wrap:nowrap;width:auto;display:flex;overflow-x:auto}:where(.sm-choices[data-compact])>:where(label),:where(.sm-choices[data-segmented])>:where(label){flex:none}}:where(.sm-list){border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-1);min-width:0;margin:0;padding:0;list-style:none;display:grid;overflow:hidden}:where(.sm-list)>:where(li){align-items:center;gap:var(--s-2,8px);min-width:0;min-height:40px;padding:4px var(--s-2,8px);border-bottom:1px solid var(--divider);display:flex}:where(.sm-list)>:where(li:last-child){border-bottom:0}:where(.sm-list)>:where(li:has(>details)){padding:0;display:block}:where(.sm-list)>:where(li)>:where(details)>:where(summary){align-items:center;gap:var(--s-2,8px);min-height:40px;padding:4px var(--s-2,8px);cursor:pointer;list-style:none;display:flex}:where(.sm-list)>:where(li)>:where(details)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-list)>:where(li)>:where(details[open]){background:var(--bg-inset)}:where(.sm-list)>:where(li)>:where(details)>:where(:not(summary)){padding:var(--s-2,8px) var(--s-3,12px) var(--s-3,12px)}:where(.sm-list) :where(img,video,canvas,.sm-swatch){object-fit:cover;border-radius:var(--r-2,4px);background:var(--bg-inset);flex:none;width:40px;height:26px}:where(.sm-list) :where(.sm-line){white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}:where(.sm-list) :where(small){color:var(--fg-subtle);font-size:max(12px,var(--fs-caption,.8125rem));white-space:nowrap;font-variant-numeric:tabular-nums;flex:none}:where(.sm-list)>:where(.sm-list-more){display:none}@container (width<=519px){:where(.sm-list[data-peek]:not([data-open]))>:where(li:nth-child(n+4):not(.sm-list-more)){display:none}:where(.sm-list[data-peek]:not([data-open]))>:where(.sm-list-more){color:var(--fg-muted);display:flex}}:where(.sm-gallery){gap:var(--s-2,8px);grid-template-columns:repeat(auto-fill,minmax(min(100%,var(--sm-tile,140px)),1fr));margin:0;padding:0;list-style:none;display:grid}:where(.sm-gallery)>:where(*){border-radius:var(--r-3,8px);background:var(--bg-inset);margin:0;position:relative;overflow:hidden}:where(.sm-gallery) :where(img,video,canvas){width:100%;aspect-ratio:var(--sm-tile-ratio,1);object-fit:cover;display:block}:where(.sm-gallery) :where(figcaption){font-size:max(12px,var(--fs-caption,.8125rem));color:var(--fg-muted);padding:6px 8px}:where(.sm-gallery) :where([aria-selected=true],.is-selected){box-shadow:inset 0 0 0 2px var(--fg)}:where(.sm-gallery[data-size=small]){--sm-tile:92px;--sm-tile-ratio:3/2}:where(.sm-media-off){box-sizing:border-box;width:min(100%,320px);aspect-ratio:var(--sm-photo-ratio,4/3);border:1px solid var(--border-tok);border-radius:var(--r-2,4px);background:var(--bg-inset);color:var(--fg-subtle,var(--fg-muted));vertical-align:top;place-items:center;display:inline-grid}:where(.sm-gallery) :where(.sm-media-off){width:100%;aspect-ratio:var(--sm-tile-ratio,1);border-radius:inherit;display:grid}:where(.sm-add){box-sizing:border-box;border:1px dashed var(--border-strong);border-radius:var(--r-2,4px);min-width:52px;min-height:52px;color:var(--fg-muted);font:inherit;font-size:max(12px,var(--fs-caption,.8125rem));cursor:pointer;background:0 0;align-content:center;place-items:center;gap:2px;margin:0;padding:6px;line-height:1.2;display:inline-grid}:where(.sm-add):before{content:"+";font-size:20px;line-height:1}:where(.sm-add):hover{color:var(--fg);border-style:solid}:where(.sm-add):focus-visible{outline:2px solid var(--signal);outline-offset:3px}:where(.sm-add):disabled,:where(.sm-add[aria-busy=true]){opacity:.45;cursor:default}:where(.sm-gallery) :where(.sm-add){width:100%;aspect-ratio:var(--sm-tile-ratio,1);border-radius:var(--r-3,8px);background:0 0;display:grid}:where(:root,[data-mode]){--scrim:color-mix(in srgb,var(--bg) 72%,transparent)}:where(.sm-scrim){padding:var(--s-5,24px) var(--s-3,12px) var(--s-3,12px);background:linear-gradient(to top,var(--scrim) 55%,transparent);color:var(--fg);margin:0;position:absolute;inset:auto 0 0}:where(.sm-gallery) :where(.sm-tile-tools){gap:2px;display:flex;position:absolute;top:4px;right:4px}:where(.sm-gallery) :where(.sm-tile-tools)>:where(button){--sm-glyph-size:14px;box-sizing:border-box;border-radius:var(--r-2,4px);background:var(--bg);min-width:24px;height:24px;color:var(--fg);font:inherit;cursor:pointer;border:0;place-items:center;margin:0;padding:0 4px;font-size:16px;line-height:1;display:grid}:where(.sm-gallery) :where(.sm-tile-tools)>:where(button):focus-visible{outline:2px solid var(--signal);outline-offset:1px}:where(.sm-gallery) :where(.sm-tile-tools)>:where(button:disabled,button[aria-busy=true]){opacity:.45;cursor:default}@media (pointer:coarse){:where(.sm-gallery) :where(.sm-tile-tools)>:where(button){min-width:28px;height:28px}}@media (hover:hover){:where(.sm-gallery)>:where(:not(:hover,:focus-within)) :where(.sm-tile-tools){opacity:0}}:where(.sm-status){align-items:center;gap:var(--s-2,8px);min-height:24px;font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);display:inline-flex}:where(.sm-status):empty{display:none}:where(.sm-status[data-state]):before{content:"";background:currentColor;border-radius:50%;flex:none;width:14px;height:14px}:where(.sm-status[data-state=loading]):before{background:0 0;border:2px solid;border-right-color:#0000;animation:.8s linear infinite sm-spin}:where(.sm-status[data-state=success]){color:var(--attention-ok,var(--fg))}:where(.sm-status[data-state=success]):before{background:0 0;border:2px solid;border-width:0 2px 2px 0;border-radius:0;width:6px;height:11px;margin:0 4px 3px;transform:rotate(45deg)}:where(.sm-status[data-state=waiting]){color:var(--attention-warning,var(--signal))}:where(.sm-status[data-state=waiting]):before{width:8px;height:8px;margin:0 3px}:where(.sm-status[data-state=error]){color:var(--attention-error,var(--signal))}:where(.sm-status[data-state=error]):before{clip-path:polygon(50% 0,100% 100%,0 100%);border-radius:0}:where(.sm-progress){border-radius:var(--r-pill,999px);background:var(--bg-elev-2);width:100%;height:4px;accent-color:var(--fg);appearance:none;border:0;overflow:hidden}:where(.sm-progress)::-webkit-progress-bar{background:var(--bg-elev-2)}:where(.sm-progress)::-webkit-progress-value{background:var(--fg)}:where(.sm-progress)::-moz-progress-bar{background:var(--fg)}:where(.sm-more){border-top:1px solid var(--divider)}:where(.sm-more)>:where(summary){align-items:center;gap:var(--s-2,8px);min-height:var(--touch-target,44px);color:var(--fg-muted);font-size:var(--fs-body-s,.875rem);cursor:pointer;padding:0;list-style:none;display:flex}:where(.sm-more)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-more)>:where(summary):after{content:"";width:7px;height:7px;transition:transform var(--dur-fast,.16s) var(--ease-out,ease);border:1.5px solid;border-width:0 1.5px 1.5px 0;margin-inline-start:2px;transform:translateY(-2px)rotate(45deg)}:where(.sm-more[open])>:where(summary):after{transform:translateY(2px)rotate(-135deg)}:where(.sm-more)>:where(summary):hover{color:var(--fg)}:where(.sm-more)>:where(:not(summary)){margin-top:var(--s-2,8px)}:where(.sm-more[open]){padding-bottom:var(--s-3,12px)}:where(.sm-label){position:relative}:where(.sm-hint){vertical-align:middle;display:inline-block}:where(:not(.sm-label))>:where(.sm-hint){position:relative}:where(.sm-hint)>:where(summary){width:var(--touch-target,44px);height:var(--touch-target,44px);min-height:0;color:var(--fg-subtle);cursor:pointer;border:0;place-items:center;margin:-8px;padding:0;list-style:none;display:inline-grid}:where(.sm-hint)>:where(summary)::-webkit-details-marker{display:none}:where(.sm-hint)>:where(summary):before{content:"i";width:15px;height:15px;font:600 10px/1 var(--font-body);border:1.5px solid;border-radius:50%;place-items:center;font-style:normal;display:grid}:where(.sm-hint:hover,.sm-hint:focus-within,.sm-hint[open])>:where(summary){color:var(--fg)}:where(.sm-hint)>:where(:not(summary)){z-index:5;inset-inline-start:0;border:1px solid var(--border-tok);border-radius:var(--r-3,8px);background:var(--bg-elev-2);width:max-content;max-width:min(280px,100cqi - 32px);color:var(--fg);font-size:var(--fs-body-s,.875rem);box-shadow:var(--shadow-1);margin:4px 0 0;padding:10px 12px;line-height:1.45;position:absolute;top:100%}:where(.sm-hint:hover,.sm-hint:focus-within)::details-content{content-visibility:visible}@media (hover:hover){:where(.sm-hint)>:where(summary){pointer-events:none}}:where(.sm-glyph){--g:var(--sm-glyph-size,20px);width:var(--g);height:var(--g);color:inherit;vertical-align:middle;flex:none;display:inline-block;position:relative}:where(.sm-glyph):before,:where(.sm-glyph):after{content:"";box-sizing:border-box;position:absolute}:where(.sm-glyph[data-glyph=play]):before{clip-path:polygon(0 0,100% 50%,0 100%);background:currentColor;inset:15% 15% 15% 25%}:where(.sm-glyph[data-glyph=pause]):before{border:solid;border-width:0 calc(var(--g)*.14);inset:18% 25%}:where(.sm-glyph[data-glyph=plus]):before,:where(.sm-glyph[data-glyph=close]):before{background:linear-gradient(currentColor,currentColor) 50%/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 50%/2px 100% no-repeat;inset:15%}:where(.sm-glyph[data-glyph=close]):before{transform:rotate(45deg)}:where(.sm-glyph[data-glyph=check]):before{border:2px solid;border-width:0 2px 2px 0;width:30%;height:58%;top:12%;left:36%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=chevron]):before{border:2px solid;border-width:0 2px 2px 0;width:40%;height:40%;top:22%;left:30%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=chevron-left]):before{border:0 solid;border-width:0 0 2px 2px;width:40%;height:40%;top:30%;left:36%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=chevron-right]):before{border:2px solid;border-width:2px 2px 0 0;width:40%;height:40%;top:30%;left:24%;transform:rotate(45deg)}:where(.sm-glyph[data-glyph=upload]):before{border:2px solid;border-top:0;border-radius:0 0 3px 3px;height:35%;bottom:10%;left:10%;right:10%}:where(.sm-glyph[data-glyph=upload]):after{clip-path:polygon(50% 0,100% 45%,60% 45%,60% 100%,40% 100%,40% 45%,0 45%);background:currentColor;height:62%;top:4%;left:25%;right:25%}:where(.sm-glyph[data-glyph=image]):before{border:2px solid;border-radius:3px;inset:12%}:where(.sm-glyph[data-glyph=image]):after{clip-path:polygon(0 100%,35% 20%,60% 65%,75% 45%,100% 100%);background:currentColor;height:34%;bottom:24%;left:22%;right:22%}:where(.sm-glyph[data-glyph=image-off]):before{background:radial-gradient(circle calc(var(--g) * .09) at 35% 35%,currentColor 96%,transparent 100%);border:2px solid;border-radius:3px;inset:12%}:where(.sm-glyph[data-glyph=image-off]):after{background:currentColor;width:2px;margin-left:-1px;top:-10%;bottom:-10%;left:50%;transform:rotate(-45deg)}:where(.sm-glyph[data-glyph=video]):before{border:2px solid;border-radius:3px;inset:22% 28% 22% 8%}:where(.sm-glyph[data-glyph=video]):after{clip-path:polygon(0 35%,100% 0,100% 100%,0 65%);background:currentColor;width:20%;top:30%;bottom:30%;right:8%}:where(.sm-glyph[data-glyph=audio]):before{background:linear-gradient(currentColor,currentColor) 0 60%/2px 40% no-repeat,linear-gradient(currentColor,currentColor) 33%/2px 80% no-repeat,linear-gradient(currentColor,currentColor) 66%/2px 100% no-repeat,linear-gradient(currentColor,currentColor) 100% 60%/2px 50% no-repeat;inset:15% 12%}:where(.sm-glyph[data-glyph=text]):before{background:linear-gradient(currentColor,currentColor) 0 0/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 0/100% 2px no-repeat,linear-gradient(currentColor,currentColor) 0 100%/60% 2px no-repeat;inset:20% 12%}:where(.sm-glyph[data-glyph=spark]):before{clip-path:polygon(50% 0,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);background:currentColor;inset:8%}:where(.sm-glyph[data-glyph=info]):before{border:2px solid;border-radius:50%;inset:10%}:where(.sm-glyph[data-glyph=info]):after{background:linear-gradient(currentColor,currentColor) 0 0/2px 2px no-repeat,linear-gradient(currentColor,currentColor) 0 100%/2px 60% no-repeat;width:2px;height:46%;margin-left:-1px;top:28%;left:50%}:where(.sm-glyph[data-glyph=warning]):before{clip-path:polygon(50% 0,100% 100%,0 100%);background:currentColor;inset:8% 4% 10%}:where(.sm-glyph[data-glyph=warning]):after{background:linear-gradient(var(--bg),var(--bg)) 0 0/2px 60% no-repeat,linear-gradient(var(--bg),var(--bg)) 0 100%/2px 2px no-repeat;width:2px;height:38%;margin-left:-1px;top:38%;left:50%}:where(.sm-glyph[data-glyph=spinner]):before{border:2px solid;border-right-color:#0000;border-radius:50%;animation:.8s linear infinite sm-spin;inset:12%}:where([class*=sm-][hidden]){display:none!important}:where(.sm-sr){clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@keyframes sm-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){:where(.sm-status[data-state=loading]):before,:where(.sm-glyph[data-glyph=spinner]):before{opacity:.6;border-right-color:currentColor;animation:none}:where(.sm-more)>:where(summary):after{transition:none}}.sm-quiet{border:1px solid var(--border-tok)}html,body{background:var(--bg);color:var(--fg);margin:0}.dh-page{height:100dvh;font-family:var(--font-body);flex-direction:column;display:flex;overflow:hidden}.dh-bar{align-items:center;gap:var(--s-2,8px) var(--s-3,12px);min-height:56px;padding:var(--s-2,8px) var(--s-4,16px);border-bottom:var(--bw-1,1px) solid var(--divider);flex-wrap:wrap;flex:none;display:flex}.dh-title{align-items:baseline;gap:10px;min-width:0;display:flex}.dh-title h1{font-family:var(--font-display);letter-spacing:var(--tr-display);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:24px;font-style:italic;font-weight:200;line-height:1.1;overflow:hidden}.dh-meta{color:var(--fg-muted);font-size:12px}.dh-spacer{flex:1}.dh-picker{border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);max-width:min(340px,100%);height:32px;color:var(--fg-muted);align-items:center;gap:6px;padding:0 4px 0 10px;display:inline-flex}.dh-picker select{min-width:0;max-width:280px;height:30px;color:var(--fg);font:inherit;background:0 0;border:0;padding:0 4px;font-size:13px}.dh-picker select:focus{outline:none}.dh-seg{border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);padding:2px;display:inline-flex}.dh-seg button{width:30px;height:26px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;border-radius:3px;place-items:center;padding:0;display:inline-grid}.dh-seg button[aria-checked=true]{background:var(--fg);color:var(--bg)}.dh-glyph{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}.dh-icon{border-radius:var(--r-2);width:32px;height:32px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:inline-grid}.dh-icon:hover,.dh-seg button:hover:not([aria-checked=true]),.dh-tabs [role=tab]:hover{background:var(--bg-elev-2);color:var(--fg)}.dh-seg button:focus-visible,.dh-icon:focus-visible,.dh-tabs [role=tab]:focus-visible,.dh-page .btn:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.dh-main{min-height:0;padding:var(--s-4,16px);flex-direction:column;flex:1;display:flex;overflow:auto}.dh-frame{flex-direction:column;flex:1;width:100%;min-width:0;margin:0 auto;display:flex;container-type:inline-size}.dh-noview{flex:1}@container (width>=760px){.dh-noview{align-content:start;column-gap:var(--s-6,24px);grid-template-rows:auto auto 1fr;grid-template-columns:minmax(260px,380px) minmax(0,1fr)}.dh-noview>:not(.dh-results){grid-column:1}.dh-noview>.dh-results{padding-top:0;padding-left:var(--s-6,24px);border-top:0;border-left:var(--bw-1,1px) solid var(--divider);grid-area:1/2/-1;align-content:start;align-self:stretch}}.dh-noview>.dh-results-empty,.dh-results-empty{place-content:center;justify-items:center;min-height:160px}.dh-results-empty p{color:var(--fg-subtle);margin:0;font-size:13px}.dh-dock{border-top:var(--bw-1,1px) solid var(--border-strong);background:var(--bg-elev-1);flex-direction:column;flex:none;max-height:75dvh;display:flex;position:relative}.dh-dock-grip{cursor:ns-resize;z-index:1;touch-action:none;height:10px;position:absolute;top:-5px;left:0;right:0}.dh-tabs{min-height:40px;padding:0 var(--s-2,8px) 0 10px;flex:none;align-items:center;gap:2px;display:flex;overflow-x:auto}.dh-tabs [role=tab]{border-radius:var(--r-2);height:28px;color:var(--fg-muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0 10px;font-size:13px;display:inline-flex}.dh-tabs [role=tab][aria-selected=true]{background:var(--bg);color:var(--fg);box-shadow:inset 0 0 0 var(--bw-1,1px) var(--border-tok)}.dh-alert{background:var(--attention-error);border-radius:50%;width:6px;height:6px}.dh-tabs-status{padding:0 var(--s-2,8px);color:var(--fg-muted);white-space:nowrap;margin-left:auto;font-size:12px}.dh-fold svg{transform:rotate(-90deg)}.dh-dock[data-open=true] .dh-fold svg{transform:rotate(90deg)}.dh-tabpanel{min-height:0;padding:10px var(--s-4,16px) 14px;border-top:var(--bw-1,1px) solid var(--divider);flex:1;overflow:auto}.dh-console ol{border-top:var(--bw-1,1px) solid var(--divider);margin:0;padding:0;list-style:none}.dh-calls{margin:0;padding:0;font-size:13px;list-style:none;display:grid}.dh-calls li{border-bottom:var(--bw-1,1px) solid var(--divider);flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:6px 0;display:flex}.dh-calls span{color:var(--fg-muted)}.dh-calls small{color:var(--fg-subtle);margin-left:auto}@media (width<=700px){.dh-bar{padding:var(--s-2,8px) 12px}.dh-title h1{font-size:20px}.dh-main{padding:12px}.dh-tabs-status{display:none}}.dh-problem{margin:var(--s-4,16px) var(--s-6,24px) 0;padding:var(--s-3,12px) var(--s-4,16px);border:var(--bw-1,1px) solid var(--border-strong);border-radius:var(--r-2);background:var(--bg-elev-1);white-space:pre-wrap;overflow-wrap:anywhere}.dh-noview{box-sizing:border-box;gap:var(--s-4,16px);min-height:100%;padding:var(--s-6,24px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-3);justify-items:start;display:grid}.dh-noview p{color:var(--fg-muted);margin:0}.dh-form{gap:var(--s-2,8px);width:100%;display:grid}.dh-row{align-items:center;gap:var(--s-3,12px);min-height:36px;display:flex}.dh-row label{min-width:96px;color:var(--fg-muted);font-size:13px}.dh-row input[type=text],.dh-row input[type=number]{min-width:0;height:32px;padding:0 var(--s-2,8px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font:inherit;flex:1;font-size:13px}.dh-media{align-items:center;gap:var(--s-3,12px);min-height:36px;display:flex}.dh-media-label{min-width:96px;color:var(--fg-muted);font-size:13px}.dh-media-tile{align-items:center;gap:var(--s-2,8px);max-width:100%;min-height:32px;padding:0 var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);font-size:13px;display:inline-flex}.dh-media-tile span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dh-results{gap:var(--s-3,12px);width:100%;padding-top:var(--s-4,16px);border-top:var(--bw-1,1px) solid var(--divider);display:grid}.dh-results h2{margin:0;font-size:14px;font-weight:600}.dh-section-head{justify-content:space-between;align-items:center;gap:var(--s-2,8px);margin-bottom:var(--s-2,8px);display:flex}.dh-section-head h2{letter-spacing:var(--tr-body);margin:0;font-size:13px;font-weight:600}.dh-input textarea{box-sizing:border-box;width:100%;padding:var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font-family:var(--font-mono);resize:vertical;font-size:12px;line-height:1.5}.dh-input p,.dh-muted{margin:var(--s-2,8px) 0 0;color:var(--fg-muted);font-size:13px}.dh-json{max-height:240px;padding:var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);font-family:var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:12px;line-height:1.5;overflow:auto}.dh-console{flex-direction:column;min-height:0;display:flex}.dh-entry{gap:var(--s-2,8px);padding:var(--s-2,8px) 0;border-bottom:var(--bw-1,1px) solid var(--divider);grid-template-columns:auto auto minmax(0,1fr);align-items:baseline;font-size:12px;display:grid}.dh-entry time{color:var(--fg-muted);font-variant-numeric:tabular-nums}.dh-kind{color:var(--fg-muted);font-size:11px}.dh-entry pre{font-family:var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.dh-error .dh-kind,.dh-error pre{color:var(--fg);font-weight:600}.dh-stand-in .dh-kind{color:var(--signal)}.dh-row select{min-width:0;height:32px;padding:0 var(--s-2,8px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font:inherit;flex:1}.dh-slider{align-items:center;gap:var(--s-2,8px);flex:1;min-width:0;display:flex}.dh-slider input{flex:1;min-width:0}.dh-slider output{text-align:right;min-width:2.5em;color:var(--fg-muted);font-size:13px}.dh-run-problem{padding:var(--s-2,8px) var(--s-3,12px);border:var(--bw-1,1px) solid var(--border-strong);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);margin:0}.dh-result-media{gap:var(--s-2,8px);justify-items:center;width:100%;margin:0;display:grid}.dh-result-media img,.dh-result-media .sm-player{object-fit:contain;border-radius:var(--r-3,8px);background:#000;width:auto;min-width:min(100%,320px);max-width:100%;height:auto;max-height:min(62dvh,640px);display:block}.dh-result-media .sm-player>video{aspect-ratio:var(--dh-shape,auto)}.dh-result-media audio{width:100%}.dh-result-media figcaption{max-width:100%;color:var(--fg-muted);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.dh-results .sm-data-list:has(>li>.dh-result-media){gap:var(--s-4,16px);grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));margin:0;padding:0;list-style:none;display:grid}.dh-results .sm-data-list:has(>li>.dh-result-media) .dh-result-media img{min-width:min(100%,200px);max-height:min(56dvh,560px)}.dh-results .sm-data-list:has(>li>.dh-result-media) .dh-result-media .sm-player{min-width:min(100%,200px);max-height:min(56dvh,560px)}.dh-media-tile small{margin-left:var(--s-1,4px);border:var(--bw-1,1px) solid var(--border-tok);color:var(--fg-muted);border-radius:999px;padding:1px 6px;font-size:11px}.dh-media-pick{cursor:pointer;font:inherit;color:var(--fg)}.dh-media-pick:hover:not(:disabled){border-color:var(--border-strong)}.dh-media-problem{color:var(--attention-error);font-size:12px}.dh-media-empty{flex-wrap:wrap;align-items:flex-start}.dh-media-drop{padding:var(--s-5,20px) var(--s-4,16px);border:1.5px dashed var(--border-strong);border-radius:var(--r-3);background:var(--bg-elev-1);text-align:center;flex:240px;justify-items:center;gap:6px;display:grid}.dh-media-drop[data-over]{border-style:solid;border-color:var(--fg);background:var(--hover-wash)}.dh-media-drop strong{color:var(--fg);font-size:14px;font-weight:600}.dh-media-drop span{color:var(--fg-muted);font-size:13px}.dh-media-drop small{color:var(--fg-muted);font-size:12px}.dh-media-drop .dh-media-pick{margin-top:var(--s-1,4px)}.dh-switch{border-radius:var(--r-2);height:28px;color:var(--fg-muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:0 6px;font-size:13px;display:inline-flex}.dh-switch:hover{color:var(--fg)}.dh-switch:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.dh-switch-track{background:var(--bg-elev-2);width:32px;height:18px;box-shadow:inset 0 0 0 var(--bw-1,1px) var(--border-strong);border-radius:999px;transition:background .15s;position:relative}.dh-switch-knob{background:var(--fg-muted);border-radius:50%;width:14px;height:14px;transition:transform .15s,background .15s;position:absolute;top:2px;left:2px}.dh-switch[aria-checked=true] .dh-switch-track{background:var(--fg)}.dh-switch[aria-checked=true] .dh-switch-knob{background:var(--bg);transform:translate(14px)}.dh-media-tiles{align-items:center;gap:var(--s-2,8px);flex-wrap:wrap;flex:1;min-width:0;display:flex}.dh-row:has(>.dh-text){align-items:flex-start}.dh-row:has(>.dh-text)>label{padding-top:7px}.dh-text{box-sizing:border-box;min-width:0;padding:6px var(--s-2,8px);border:var(--bw-1,1px) solid var(--border-tok);border-radius:var(--r-2);background:var(--bg-elev-1);color:var(--fg);font:inherit;resize:vertical;field-sizing:content;flex:1;min-height:calc(3lh + 14px);max-height:24em;font-size:13px;line-height:1.5;overflow-y:auto}.dh-thumb{border-radius:var(--r-2);background:var(--bg-elev-2);flex:none;width:52px;height:52px;display:block;position:relative;overflow:hidden}.dh-thumb>img,.dh-thumb>video{object-fit:cover;width:100%;height:100%;display:block}.dh-thumb-play{border-radius:var(--r-1,3px);background:var(--fg);width:22px;height:22px;color:var(--bg);cursor:pointer;border:0;flex:none;place-items:center;padding:0;display:inline-grid}.dh-thumb>.dh-thumb-play{background:var(--cream-100,#f7f0db);color:var(--ink-600,#0a0a0a);opacity:0;transition:opacity var(--dur-fast,.16s);position:absolute;bottom:3px;right:3px}.dh-thumb:is(:hover,:focus-within)>.dh-thumb-play{opacity:1}.dh-thumb-play:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.dh-media-sound{padding-left:5px}.dh-media-note{border:var(--bw-1,1px) solid var(--border-tok);color:var(--fg-muted);border-radius:999px;padding:1px 6px;font-size:11px}.dh-date{margin:0;font-size:15px}.dh-noview.dh-focus{width:100%;max-width:720px;padding-block:var(--s-6,24px);border:0;grid-template-rows:none;grid-template-columns:minmax(0,1fr);justify-items:stretch;margin-inline:auto;display:grid}.dh-noview.dh-focus>*{grid-column:1}.dh-noview.dh-focus>.dh-results{border-left:0;grid-row:auto;padding-left:0}.dh-intro{gap:var(--s-2,8px);text-align:center;margin-bottom:var(--s-2,8px);justify-items:center;display:grid}.dh-intro h2{font:italic 200 clamp(28px,4.2vw,42px)/1.1 var(--font-display);letter-spacing:-.02em;color:var(--fg);margin:0}.dh-noview .dh-intro p{max-width:56ch;color:var(--fg-muted);font-size:var(--fs-body,1rem);line-height:1.5}.dh-noview.dh-focus>.btn-primary{justify-self:center;min-width:min(100%,240px)}.sm-trace-loader{--trace-ink:var(--fg);--trace-track:var(--ink-400);flex:none;display:block;overflow:visible}[data-mode=light] .sm-trace-loader{--trace-track:var(--cream-300)}.sm-trace-track{stroke:var(--trace-track)}.sm-trace-dash{stroke:var(--trace-ink)}.sm-trace-head{fill:var(--trace-ink)}.sm-loading-screen{opacity:0;flex:1;justify-content:center;align-items:center;width:100%;min-height:min(60vh,480px);animation:.2s ease-out .25s forwards sm-loading-in;display:flex}.sm-loading-screen.is-fill{z-index:40;background:var(--bg);min-height:0;position:fixed;inset:0}.sm-loading-trace{width:clamp(72px,14vmin,128px);height:auto}@keyframes sm-loading-in{to{opacity:1}}@media (prefers-reduced-motion:reduce){.sm-loading-screen{opacity:1;animation:none}}.sm-loading-screen .sm-sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.block-zoom-control{z-index:3;border:1px solid var(--border);background:var(--bg);opacity:0;border-radius:999px;align-items:center;gap:2px;padding:2px;transition:opacity .15s;display:flex;position:absolute;top:8px;right:8px;box-shadow:0 4px 14px #00000014}.bs-sandbox-ui:hover>.block-zoom-control,.block-zoom-control:focus-within{opacity:1}.block-zoom-control button{min-width:28px;height:28px;color:var(--fg);font:500 12px var(--font-body);cursor:pointer;background:0 0;border:0;border-radius:999px;place-items:center;padding:0 8px;display:inline-grid}.block-zoom-control button:hover:not(:disabled){background:var(--hover-wash)}.block-zoom-control button:disabled{opacity:.4;cursor:default}.block-zoom-control button:focus-visible{outline:2px solid var(--signal);outline-offset:1px}.block-zoom-control .block-zoom-mode[aria-pressed=true]{color:var(--fg-muted)}@media (width<=600px),(hover:none){.block-zoom-control{display:none}}@media (prefers-reduced-motion:reduce){.block-zoom-control{transition:none}}.bd-table,.bd-document,.bd-chart,.bd-code-view,.bd-files{min-width:0;color:var(--fg);font:14px/1.6 var(--font-body);margin:0}.bd-table-scroll{border:1px solid var(--border);border-radius:var(--r-3);max-width:100%;max-height:480px;overflow:auto}.bd-table-scroll:focus-visible,.bd-code:focus-visible{outline:2px solid var(--signal);outline-offset:2px}.bd-table table{border-collapse:collapse;width:max-content;min-width:100%;font-size:13px}.bd-table th,.bd-table td{padding:var(--s-2) var(--s-3);text-align:left;vertical-align:top;border-bottom:1px solid var(--border);overflow-wrap:break-word;min-width:64px;max-width:320px}.bd-table th{background:var(--bg-secondary);white-space:nowrap;font-weight:600;position:sticky;top:0}.bd-table td.bd-number{text-align:right;font-variant-numeric:tabular-nums}.bd-table tbody tr:last-child td{border-bottom:0}.bd-bar{align-items:center;gap:var(--s-2);margin-top:var(--s-3);color:var(--fg-muted);flex-wrap:wrap;font-size:12px;display:flex}.bd-bar>span{margin-right:auto}.bd-document{gap:var(--s-3);overflow-wrap:anywhere;display:grid}.bd-document>*{margin:0}.bd-document-title{font:200 italic 22px/1.2 var(--font-display);letter-spacing:var(--tr-display)}.bd-document h4,.bd-document h5,.bd-document h6{font-size:15px;font-weight:600}.bd-document ul,.bd-document ol{padding-left:var(--s-5)}.bd-document blockquote{padding-left:var(--s-3);border-left:2px solid var(--border-strong);color:var(--fg-muted)}.bd-document code,.bd-code{font:12px/1.6 var(--font-mono)}.bd-plain{white-space:pre-wrap}.bd-code{padding:var(--s-3);white-space:pre;border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg-secondary);max-height:420px;margin:0;overflow:auto}.bd-chart svg{width:100%;height:auto;display:block}.bd-chart figcaption{color:var(--fg-muted);margin-top:var(--s-2);font-size:12px}.bd-grid{stroke:var(--border);stroke-width:1px}.bd-axis{fill:var(--fg-muted);font:11px var(--font-body)}.bd-mark{fill:var(--fg);opacity:.82}.bd-line{stroke:var(--fg);stroke-width:2px;stroke-linejoin:round;stroke-linecap:round}.bd-files{gap:var(--s-2);padding:0;list-style:none;display:grid}.bd-file{align-items:center;gap:var(--s-2) var(--s-3);padding:var(--s-3);border:1px solid var(--border);border-radius:var(--r-3);flex-wrap:wrap;display:flex}.bd-file-name{overflow-wrap:anywhere;font-weight:600}.bd-file>.btn{margin-left:auto}.bd-muted{color:var(--fg-muted);font-size:12px}.bd-color{align-items:center;gap:var(--s-2);font:13px var(--font-mono);display:inline-flex}.bd-swatch{border-radius:var(--r-2);border:1px solid var(--border-strong);width:20px;height:20px}.bd-link{color:var(--fg);overflow-wrap:anywhere}.bd-player,.bd-input{gap:var(--s-3);display:grid}.bd-color-row{gap:var(--s-2);align-items:center;display:flex}.bd-color-row input[type=color]{border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg);width:44px;min-width:44px;height:44px;padding:2px}.bd-richtext textarea{font:13px/1.6 var(--font-mono)}.bd-table-input th{white-space:nowrap}.bd-table-input th>span{margin-right:var(--s-1)}.bd-table-input td{padding:var(--s-1)}.bd-table-input td input{border-radius:var(--r-2);width:100%;min-width:96px;min-height:36px;color:var(--fg);padding:var(--s-1) var(--s-2);font:inherit;background:0 0;border:1px solid #0000}.bd-table-input td input:focus{border-color:var(--border-strong);background:var(--bg)}.bd-table-input .bd-bar input{border:1px solid var(--border);border-radius:var(--r-3);background:var(--bg);min-height:40px;color:var(--fg);padding:var(--s-2) var(--s-3);font:inherit;flex:160px}.bd-chart svg{max-width:960px}.bd-richtext .bd-bar select{width:auto;min-height:40px}.sm-data-record{grid-template-columns:minmax(72px,max-content) minmax(0,1fr);gap:4px 16px;margin:0;display:grid}.sm-data-record dt{color:var(--text-muted)}.sm-data-record dd{overflow-wrap:anywhere;min-width:0;margin:0}.sm-data-list{gap:6px;margin:0;padding-left:20px;display:grid}.sm-data-list:has(>li>.sm-data-record){gap:0;padding-left:0;list-style:none}.sm-data-list:has(>li>.sm-data-record)>li{padding:10px 0}.sm-data-list:has(>li>.sm-data-record)>li+li{border-top:1px solid var(--border)}.sm-data-none{color:var(--text-muted)}@media (width<=600px){.sm-data-record{grid-template-columns:minmax(0,1fr);gap:0}.sm-data-record dd{margin-bottom:6px}.sm-data-record dd>.sm-data-record{border-left:1px solid var(--border);padding-left:12px}}:where(.sm-player,.sm-viewer,.sm-expand-btn){--sm-cream:var(--cream-100,#f7f0db);--sm-ink:var(--ink-600,#0a0a0a);--sm-gold:var(--signal,#e8b23a);--sm-out:var(--dur-fast,.16s);--sm-in:var(--dur-base,.24s);--sm-ease:var(--ease-out,cubic-bezier(.22,1,.36,1));--sm-spring:var(--ease-spring,cubic-bezier(.34,1.56,.64,1));--sm-display:var(--font-display,"Balgin","Hanken Grotesk",ui-sans-serif,sans-serif)}.sm-player{vertical-align:top;box-sizing:border-box;background:var(--sm-ink);max-width:100%;color:var(--sm-cream);line-height:1;font-family:var(--font-body,"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif);-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation;outline:none;display:inline-block;position:relative;overflow:hidden}.sm-player:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-player>video{width:auto;max-width:100%;height:auto;max-height:inherit;object-fit:contain;background:0 0;margin:0 auto;display:block}:is(.sm-player[data-fill]>video,.sm-player:fullscreen>video,.sm-player[data-stage]>video){width:100%;max-width:none;height:100%;max-height:none}.sm-player[data-fill]{display:block}.sm-player[data-idle]{cursor:none}:where(.sm-stage)>.sm-player{border-radius:var(--r-2,4px);max-width:100%;max-height:100%}.sm-player-ui{z-index:1;pointer-events:none;position:absolute;inset:0}.sm-player-shade{background:linear-gradient(#0a0a0a00,#0a0a0a8c);height:120px;max-height:100%;position:absolute;bottom:0;left:0;right:0}.sm-player-bar{pointer-events:auto;align-items:center;gap:10px;display:flex;position:absolute;bottom:12px;left:12px;right:12px}.sm-player-shade,.sm-player-bar{transition:opacity var(--sm-in) var(--sm-ease)}.sm-player[data-away] .sm-player-shade,.sm-player[data-away] .sm-player-bar,.sm-player[data-idle] .sm-player-shade,.sm-player[data-idle] .sm-player-bar{opacity:0;pointer-events:none;transition-duration:var(--sm-out)}:where(.sm-player,.sm-viewer) .sm-media-btn{appearance:none;box-sizing:border-box;border-radius:var(--r-3,8px);background:var(--sm-cream);width:44px;min-width:0;height:44px;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;transition:transform var(--sm-out) var(--sm-spring);border:0;flex:none;place-items:center;margin:0;padding:0;line-height:1;text-decoration:none;display:grid}:where(.sm-player,.sm-viewer) .sm-media-btn svg{width:20px;height:20px;display:block}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn.sm-media-btn-text{width:auto;padding:0 14px;font-size:14px;font-weight:600}@media (hover:hover){:where(.sm-player,.sm-viewer) .sm-media-btn:hover{background:var(--sm-cream);color:var(--sm-ink);transform:translateY(-1px)}}:where(.sm-player,.sm-viewer) .sm-media-btn:active{transform:scale(.94)}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px;border-radius:var(--r-3,8px)}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn{border-radius:var(--r-3,8px);background:var(--sm-cream);min-width:0;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;border:0;padding:0;line-height:1;text-decoration:none}:is(.sm-player,.sm-viewer) .sm-media-btn.sm-media-btn:hover{background:var(--sm-cream);color:var(--sm-ink)}.sm-player .sm-player-bar [data-control=fullscreen]{margin-left:auto}.sm-player-sound{flex:none;display:flex;position:relative}.sm-player-volume{opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease),transform var(--sm-out) var(--sm-ease);padding-bottom:10px;position:absolute;bottom:100%;left:50%;transform:translate(-50%,6px)}.sm-player-sound:hover .sm-player-volume,.sm-player-sound:focus-within .sm-player-volume,.sm-player-volume[data-drag]{opacity:1;pointer-events:auto;transition-duration:var(--sm-in);transform:translate(-50%)}.sm-player-volume-rail{box-sizing:border-box;border-radius:var(--r-3,8px);cursor:pointer;touch-action:none;background:#0a0a0aa3;outline:none;width:44px;height:128px;padding:14px 0;position:relative}.sm-player-volume-rail:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-player-volume-track{background:#f7f0db47;border-radius:3px;width:6px;height:100%;margin:0 auto;position:relative;overflow:visible}.sm-player-volume-level{background:var(--sm-cream);transform-origin:bottom;border-radius:3px;position:absolute;inset:0;transform:scaleY(1)}.sm-player-volume-head{pointer-events:none;position:absolute;inset:0;transform:translateY(-100%)}.sm-player-volume-knob{background:var(--sm-cream);border-radius:4px;width:16px;height:16px;margin:0 0 -8px -8px;position:absolute;bottom:0;left:50%;box-shadow:0 0 0 3px #0a0a0a59}.sm-player-volume[data-drag] .sm-player-volume-head{will-change:transform}.sm-player[data-volume-room=short] .sm-player-volume-rail{height:84px;padding:12px 0}.sm-player[data-volume-room=none] .sm-player-volume{display:none}@media (hover:none){.sm-player-volume{display:none}}.sm-player-rail{cursor:pointer;touch-action:none;outline:none;flex:auto;min-width:48px;height:24px;position:relative}.sm-player-rail:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px;border-radius:var(--r-2,4px)}.sm-player-track{height:6px;transition:transform var(--sm-out) var(--sm-ease);background:#f7f0db47;border-radius:3px;margin-top:-3px;position:absolute;top:50%;left:0;right:0;overflow:hidden}.sm-player-buffered,.sm-player-played{transform-origin:0;position:absolute;inset:0;transform:scaleX(0)}.sm-player-buffered{background:#f7f0db2e}.sm-player-played{background:var(--sm-cream)}.sm-player-head{pointer-events:none;position:absolute;inset:0;transform:translate(0)}.sm-player[data-playing] .sm-player-head,.sm-player[data-playing] .sm-player-played,.sm-player-rail[data-drag] .sm-player-head{will-change:transform}.sm-player-knob{background:var(--sm-cream);width:16px;height:16px;transition:transform var(--sm-out) var(--sm-spring);border-radius:4px;margin:-8px 0 0 -8px;position:absolute;top:50%;left:0;transform:scale(0);box-shadow:0 0 0 3px #0a0a0a59}.sm-player-rail:hover .sm-player-knob,.sm-player-rail[data-drag] .sm-player-knob,.sm-player-rail:focus-visible .sm-player-knob{transform:scale(1)}.sm-player-rail:hover .sm-player-track,.sm-player-rail[data-drag] .sm-player-track{transform:scaleY(1.34)}.sm-player-tip{border-radius:var(--r-2,4px);background:var(--sm-ink);color:var(--sm-cream);font-variant-numeric:tabular-nums;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease);border:1px solid #f7f0db24;padding:3px 7px;font-size:12px;font-weight:500;position:absolute;bottom:calc(100% + 4px);left:0}.sm-player-rail:hover .sm-player-tip,.sm-player-rail[data-drag] .sm-player-tip{opacity:1}.sm-player-time{font-family:var(--sm-display);letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;color:var(--sm-cream);text-shadow:0 1px 8px #0a0a0a99;flex:none;font-size:22px;font-style:italic;font-weight:200;line-height:1}:where(.sm-player,.sm-viewer) .sm-media-of{opacity:.55}.sm-player[data-size] .sm-player-bar{gap:8px}.sm-player[data-size] .sm-player-total{display:none}.sm-player[data-size] .sm-player-time{font-size:18px}.sm-player:is([data-size=compact],[data-size=tiny],[data-size=micro]) .sm-player-time,.sm-player:is([data-size=tiny],[data-size=micro]) [data-control=volume],.sm-player[data-size=micro] .sm-player-bar>:not([data-control=play]):not([data-control=fullscreen]){display:none}@media (hover:none){.sm-player-rail{height:44px}}.sm-player:fullscreen{border-radius:0;width:100%;max-width:none;height:100%;max-height:none}.sm-player[data-stage=theater]{z-index:2147483000;width:auto;max-width:none;height:auto;max-height:none;padding:env(safe-area-inset-top,0px) env(safe-area-inset-right,0px) env(safe-area-inset-bottom,0px) env(safe-area-inset-left,0px);color:var(--sm-cream);background:var(--sm-ink);border:0;border-radius:0;margin:0;display:block;position:fixed;inset:0;overflow:hidden}.sm-player[data-stage=theater]::backdrop{background:var(--sm-ink)}:is(.sm-player:fullscreen .sm-player-bar,.sm-player[data-stage] .sm-player-bar){left:max(12px,env(safe-area-inset-left,0px));right:max(12px,env(safe-area-inset-right,0px));bottom:max(12px,env(safe-area-inset-bottom,0px))}.sm-expand-host{position:relative}.sm-expand-btn{z-index:2;box-sizing:border-box;border-radius:var(--r-3,8px);background:var(--sm-cream);width:44px;min-width:0;height:44px;min-height:0;color:var(--sm-ink);box-shadow:none;cursor:pointer;opacity:0;pointer-events:none;transition:opacity var(--sm-out) var(--sm-ease),transform var(--sm-out) var(--sm-spring);border:0;place-items:center;margin:0;padding:0;line-height:1;display:grid;position:absolute;bottom:12px;right:12px}.sm-expand-btn svg{width:20px;height:20px;display:block}.sm-expand-btn[data-size=small]{border-radius:6px;width:32px;height:32px;bottom:6px;right:6px}.sm-expand-btn[data-size=small] svg{width:16px;height:16px}.sm-expand-btn[data-size=small]:before{content:"";position:absolute;inset:-6px}@media (hover:hover){:hover>.sm-expand-btn{opacity:1;pointer-events:auto}.sm-expand-btn:hover{background:var(--sm-cream);color:var(--sm-ink);transform:translateY(-1px)}}.sm-expand-btn:focus-visible,.sm-expand-btn[data-show]{opacity:1;pointer-events:auto}.sm-expand-btn:active{transform:scale(.94)}.sm-expand-btn.sm-expand-btn.sm-expand-btn:focus-visible{outline:2px solid var(--sm-gold);outline-offset:2px}.sm-expand-btn.sm-expand-btn.sm-expand-btn{border-radius:var(--r-3,8px);background:var(--sm-cream);min-width:0;min-height:0;color:var(--sm-ink);box-shadow:none;font:inherit;cursor:pointer;border:0;padding:0;line-height:1}.sm-expand-btn.sm-expand-btn.sm-expand-btn[data-size=small]{border-radius:6px}.sm-expand-btn.sm-expand-btn.sm-expand-btn:hover{background:var(--sm-cream);color:var(--sm-ink)}.sm-viewer{box-sizing:border-box;background:var(--sm-ink);width:100%;max-width:none;height:100%;max-height:none;color:var(--sm-cream);font-family:var(--font-body,"Hanken Grotesk",ui-sans-serif,system-ui,sans-serif);border:0;margin:0;padding:0;position:fixed;inset:0;overflow:hidden}.sm-viewer[open]{animation:sm-viewer-in var(--sm-in) var(--sm-ease) both;grid-template-rows:minmax(0,1fr) auto;display:grid}.sm-viewer::backdrop{background:var(--ink-600,#0a0a0a)}@keyframes sm-viewer-in{0%{opacity:0}}.sm-viewer [hidden],.sm-viewer .sm-media-btn[hidden]{display:none}.sm-viewer-stage{min-width:0;min-height:0;padding:max(12px,env(safe-area-inset-top,0px)) max(12px,env(safe-area-inset-right,0px)) 12px max(12px,env(safe-area-inset-left,0px));grid-template:minmax(0,1fr)/minmax(0,1fr);place-items:center;display:grid;position:relative;overflow:hidden}.sm-viewer-media{object-fit:contain;width:100%;min-width:0;height:100%;min-height:0;display:block}.sm-viewer-stage>.sm-player{width:100%;max-width:100%;height:100%;max-height:100%}.sm-viewer-off,.sm-player-off{box-sizing:border-box;border:1px solid var(--border-tok,#58534d);border-radius:var(--r-2,4px);background:var(--bg-inset,#171716);color:var(--fg-muted,#bbb2a7);place-items:center;display:inline-grid}.sm-viewer-off{aspect-ratio:4/3;width:min(60vw,320px)}.sm-player-off{aspect-ratio:16/9;vertical-align:top;width:min(100%,320px);max-width:100%}.sm-viewer-off svg,.sm-player-off svg{width:24px;height:24px;display:block}.sm-viewer-top{top:max(12px,env(safe-area-inset-top,0px));right:max(12px,env(safe-area-inset-right,0px));z-index:2;gap:10px;display:flex;position:absolute}.sm-viewer .sm-viewer-nav{z-index:2;margin-top:-22px;position:absolute;top:50%}.sm-viewer .sm-viewer-previous{left:max(12px,env(safe-area-inset-left,0px))}.sm-viewer .sm-viewer-next{right:max(12px,env(safe-area-inset-right,0px))}.sm-viewer-foot{min-width:0;padding:12px max(12px,env(safe-area-inset-right,0px)) max(14px,env(safe-area-inset-bottom,0px)) max(12px,env(safe-area-inset-left,0px));justify-content:center;align-items:baseline;gap:12px;display:flex}.sm-viewer-count{font-family:var(--sm-display);letter-spacing:-.01em;font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;font-size:24px;font-style:italic;font-weight:200;line-height:1}.sm-viewer-name{min-width:0;color:var(--fg-muted,#bbb2a7);white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}@media (prefers-reduced-motion:reduce){.sm-player *,.sm-viewer,.sm-viewer *,.sm-expand-btn{transition:none!important;animation:none!important}}.sm-when-pickers{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;display:inline-flex}.sm-when-pick{min-width:0;display:inline-flex;position:relative}.sm-when-button{border:1px solid var(--border-tok);border-radius:var(--r-3);background:var(--bg-elev-1);height:36px;color:var(--fg);font:inherit;font-family:var(--font-body);font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer;align-items:center;gap:6px;padding:0 8px 0 10px;font-size:13.5px;display:inline-flex}.sm-when-button svg{color:var(--fg-muted);flex:none}.sm-when-button svg:last-child{color:var(--fg-subtle)}.sm-when-button[aria-expanded=true]{border-color:var(--fg);box-shadow:inset 0 0 0 1px var(--fg)}.sm-when-button:disabled{cursor:default;opacity:.55}.sm-when-pop{z-index:40;border:1px solid var(--border-strong);border-radius:var(--r-3);background:var(--bg-elev-1);color:var(--fg);box-shadow:var(--shadow-lg);margin:0;padding:10px;position:absolute;top:calc(100% + 4px);left:0}.sm-when-calendar{box-sizing:border-box;gap:6px;width:260px;max-width:calc(100vw - 32px);display:grid}.sm-when-cal-head{justify-content:space-between;align-items:center;font-size:14px;display:flex}.sm-when-cal-head b{font-weight:600}.sm-when-cal-nav{gap:2px;display:inline-flex}.sm-when-cal-nav button{border-radius:var(--r-2);width:30px;height:30px;color:var(--fg-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.sm-when-cal-nav button:hover:not(:disabled){background:var(--hover-wash);color:var(--fg)}.sm-when-cal-nav button:disabled{opacity:.35;cursor:default}.sm-when-cal-grid{text-align:center;font-variant-numeric:tabular-nums;grid-template-columns:repeat(7,1fr);gap:2px;font-size:13px;display:grid}.sm-when-cal-grid i{color:var(--fg-subtle);padding:2px 0;font-size:12px;font-style:normal}.sm-when-cal-grid button{height:30px;color:var(--fg);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.sm-when-cal-grid button:hover:not(:disabled):not([aria-pressed=true]){background:var(--hover-wash)}.sm-when-cal-grid button:disabled{color:var(--fg-subtle);cursor:default}.sm-when-cal-grid button[aria-current=date]{box-shadow:inset 0 0 0 1px var(--border-strong)}.sm-when-cal-grid button[aria-pressed=true]{background:var(--fg);color:var(--bg);font-weight:600}.sm-when-clear{justify-self:start;min-height:32px;padding:4px 12px}.sm-when-times{box-sizing:border-box;outline:none;gap:1px;width:150px;max-height:240px;padding:4px;list-style:none;display:grid;overflow-y:auto}.sm-when-times li{border-radius:var(--r-2);font-variant-numeric:tabular-nums;cursor:pointer;padding:6px 10px;font-size:14px}.sm-when-times li[data-active=true]{background:var(--hover-wash)}.sm-when-times li[aria-selected=true]{font-weight:600}.sm-when-times li[aria-disabled=true]{color:var(--fg-subtle);cursor:default}.sm-when-times:focus-visible li[data-active=true]{box-shadow:inset 0 0 0 1px var(--fg)}.sm-result-place{align-content:center;justify-items:center;gap:var(--s-3,12px);width:100%;min-height:inherit;padding:var(--s-4,16px);box-sizing:border-box;color:var(--fg-subtle);display:grid}.sm-result-place>p{font-size:var(--fs-body-s,.875rem);color:var(--fg-muted);margin:0}.sm-result-place[data-kind=text]{align-content:start;justify-items:stretch}.sm-result-place[data-kind=text]>p{justify-self:center}.sm-result-lines{gap:10px;width:100%;display:grid}.sm-result-lines>i{background:color-mix(in srgb,var(--fg) 9%,transparent);border-radius:5px;height:9px;display:block}.sm-result-lines>i:nth-child(3n+1){width:92%}.sm-result-lines>i:nth-child(3n+2){width:78%}.sm-result-lines>i:nth-child(3n){width:58%}.sm-result-frame{box-sizing:border-box;border:1.5px dashed color-mix(in srgb,var(--fg) 18%,transparent);border-radius:var(--r-3,8px);background:color-mix(in srgb,var(--fg) 4%,transparent);place-items:center;max-width:100%;height:min(56vh,520px);display:grid}.sm-result-frame>.sm-glyph{--sm-glyph-size:28px;opacity:.6}@supports not (aspect-ratio:1/1){.sm-result-frame{width:min(100%,320px)}}.sm-result-audio{align-items:center;gap:var(--s-3,12px);box-sizing:border-box;width:min(100%,560px);height:56px;padding:0 var(--s-4,16px);border:1.5px dashed color-mix(in srgb,var(--fg) 18%,transparent);border-radius:var(--r-pill,999px);display:flex}.sm-result-wave{flex:1;align-items:center;gap:3px;height:24px;display:flex}.sm-result-wave>i{background:color-mix(in srgb,var(--fg) 12%,transparent);border-radius:2px;flex:1;height:30%}.sm-result-wave>i:nth-child(4n+1){height:60%}.sm-result-wave>i:nth-child(4n+2){height:90%}.sm-result-wave>i:nth-child(5n){height:45%}@container (width<=519px){.sm-result-frame{height:min(48vh,420px)}}
|
|
@@ -69,7 +69,7 @@ export function formatResult(args,result){
|
|
|
69
69
|
const width=Math.max(...result.templates.map(item=>item.name.length));
|
|
70
70
|
return lines('Templates (stillmade-block create <folder> <template>):','',...result.templates.map(item=>` ${item.name.padEnd(width)} ${item.description}`));
|
|
71
71
|
}
|
|
72
|
-
if(command==='create'&&result?.created){
|
|
72
|
+
if((command==='create'||command==='create-type')&&result?.created){
|
|
73
73
|
if(result.kind==='type')return lines(`Created a Project Type at ${result.created}.`);
|
|
74
74
|
const cli=cliCommand(result.created);
|
|
75
75
|
return lines(`Created a ${result.runtime} Block from the ${result.template} template in ${result.created}.`,'','Next:',` cd ${result.created}`,result.files?.includes('package.json')?' npm install':null,result.files?.includes('package.json')?' npm run build':null,` ${cli} dev .`,` ${cli} test .${result.runtime==='capability'?' --mock':''}`,` ${cli} pack .`);
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// with the next commands.
|
|
5
5
|
import {basename} from 'node:path';
|
|
6
6
|
import {EXAMPLE_PROVENANCE} from '../block-sdk/example-license.js';
|
|
7
|
+
import {LICENSE_TEXTS} from '../block-sdk/license-texts.js';
|
|
7
8
|
import {cliCommand} from './format.js';
|
|
8
9
|
|
|
9
10
|
const json=value=>`${JSON.stringify(value,null,2)}\n`;
|
|
@@ -73,7 +74,7 @@ function TitleCards() {
|
|
|
73
74
|
<li key={card.number} className={card.title === pinned ? 'pinned' : ''}>
|
|
74
75
|
<span>{card.number}</span>
|
|
75
76
|
<strong>{card.title}</strong>
|
|
76
|
-
<button type="button" disabled={!shared.canEdit} onClick={() => pin(card.title)}>{card.title === pinned ? 'Pinned' : 'Pin'}</button>
|
|
77
|
+
<button type="button" data-stillmade-action={\`pin \${card.title}\`} disabled={!shared.canEdit} onClick={() => pin(card.title)}>{card.title === pinned ? 'Pinned' : 'Pin'}</button>
|
|
77
78
|
</li>
|
|
78
79
|
))}
|
|
79
80
|
</ol>
|
|
@@ -118,14 +119,9 @@ const cardsManifest=(id,name)=>manifest({id,action:{label:'Make cards',running:'
|
|
|
118
119
|
ui:[{control:'text',port:'lines'}]});
|
|
119
120
|
const CARDS_TESTS=[{name:'Two titles',input:{lines:'Opening\nThe long road'},expected:{cards:{cards:[{number:1,title:'Opening'},{number:2,title:'The long road'}]}}}];
|
|
120
121
|
|
|
122
|
+
// The stage comes last: from 860 px wide the kit puts it on the right, and under that the page
|
|
123
|
+
// stacks in markup order, so on a phone the result's place sits under the button.
|
|
121
124
|
const HTML_VIEW_HTML=`<main class="sm-block">
|
|
122
|
-
<section class="sm-stage" aria-live="polite">
|
|
123
|
-
<div class="sm-empty" id="empty">
|
|
124
|
-
<span class="sm-glyph" data-glyph="text" aria-hidden="true"></span>
|
|
125
|
-
<p>Cards show here</p>
|
|
126
|
-
</div>
|
|
127
|
-
<ol class="sm-gallery cards" id="list" hidden></ol>
|
|
128
|
-
</section>
|
|
129
125
|
<div class="sm-field">
|
|
130
126
|
<div class="sm-label">
|
|
131
127
|
<label for="lines">Titles</label>
|
|
@@ -137,6 +133,13 @@ const HTML_VIEW_HTML=`<main class="sm-block">
|
|
|
137
133
|
<button type="button" class="sm-primary" id="make" data-stillmade-action="run">Make cards</button>
|
|
138
134
|
<p class="sm-status" id="status" role="status"></p>
|
|
139
135
|
</div>
|
|
136
|
+
<section class="sm-stage" aria-live="polite">
|
|
137
|
+
<div class="sm-empty" id="empty">
|
|
138
|
+
<span class="sm-glyph" data-glyph="text" aria-hidden="true"></span>
|
|
139
|
+
<p>Cards show here</p>
|
|
140
|
+
</div>
|
|
141
|
+
<ol class="sm-gallery cards" id="list" hidden></ol>
|
|
142
|
+
</section>
|
|
140
143
|
</main>
|
|
141
144
|
`;
|
|
142
145
|
// The Block kit (injected by the host) styles everything above; this is only
|
|
@@ -231,8 +234,7 @@ export default async function run(input, stillmade) {
|
|
|
231
234
|
}
|
|
232
235
|
`;
|
|
233
236
|
|
|
234
|
-
|
|
235
|
-
export const TEMPLATES=Object.freeze({
|
|
237
|
+
const STARTERS={
|
|
236
238
|
recipe:{description:'Clean up text with built-in steps; no code.',runtime:'recipe',files:fromExample(async()=>(await import('../block-sdk/examples.js')).textCleanup,'A recipe Block: built-in steps in src/recipe.json, no code.')},
|
|
237
239
|
image:{description:'Thicken the lines of an image with built-in image steps.',runtime:'recipe',files:fromExample(async()=>(await import('../block-sdk/examples.js')).lineArt,'A recipe Block for images.')},
|
|
238
240
|
javascript:{description:'Count words with a few lines of sandboxed JavaScript.',runtime:'javascript',files:fromExample(async()=>(await import('../block-sdk/examples.js')).javascriptText,'A JavaScript Block: src/run.js runs in StillMade\'s sandbox with `input` and returns outputs.')},
|
|
@@ -243,8 +245,7 @@ export const TEMPLATES=Object.freeze({
|
|
|
243
245
|
return {'stillmade.block.json':json(pkg),'module/main.js':`// .wasm files beside main.js are checked by SHA-256 before the module runs.\nexport default async function run(input, stillmade) {\n const { instance } = await WebAssembly.instantiate(stillmade.asset('add.wasm'));\n return { sum: instance.exports.add(input.a, input.b) };\n}\n`,'module/add.wasm':MODULE_WASM_BYTES,'tests/fixtures.json':json([{name:'Adds',input:{a:2,b:40},expected:{sum:42}}]),'README.md':readme(pkg.name,'A module Block with WebAssembly. Compile C, C++, Rust or Go to .wasm and put it in module/.',OFFLINE,options)};
|
|
244
246
|
}},
|
|
245
247
|
'module-hosted':{description:'A module that calls hosted text and image generation as tools.',runtime:'module',files:async options=>{
|
|
246
|
-
|
|
247
|
-
const pkg=manifest({id:'example.poster-from-idea',action:{label:'Generate poster',running:'Generating poster…'},version:'1.0.0',name:blockName(options?.folder)||'Poster from an idea',description:'Writes an image prompt from an idea, then generates the poster.',runtime:'module',inputs:{idea:{type:'text',primary:true,required:true,semantic:'idea',description:'What the poster is about.'}},outputs:{poster:{type:'image',primary:true,semantic:'poster',description:'The generated poster.'},prompt:{type:'text',semantic:'image_prompt',description:'The prompt used.'}},permissions:{capabilities:['text.generate','image.generate']},ui:[{control:'text',port:'idea'}]});
|
|
248
|
+
const pkg=manifest({id:'example.poster-from-idea',action:{label:'Generate poster',running:'Generating poster…'},version:'1.0.0',name:'Poster from an idea',description:'Writes an image prompt from an idea, then generates the poster.',runtime:'module',inputs:{idea:{type:'text',primary:true,required:true,semantic:'idea',description:'What the poster is about.'}},outputs:{poster:{type:'image',primary:true,semantic:'poster',description:'The generated poster.'},prompt:{type:'text',semantic:'image_prompt',description:'The prompt used.'}},permissions:{capabilities:['text.generate','image.generate']},ui:[{control:'text',port:'idea'}]});
|
|
248
249
|
return {'stillmade.block.json':json(pkg),'module/main.js':MODULE_HOSTED,'tests/fixtures.json':json([{name:'A poster',input:{idea:'a night market in the rain'},expected:{prompt:'Stand-in reply to: Write one vivid sentence describing a poster for: a night market in the rain',poster:{kind:'image',assetId:'mock-image-1',versionId:'v1',url:'/api/media/stillmade-mock/image-1.png',mimeType:'image/png',width:1024,height:1024,bytes:132192}}}]),'tests/mocks.json':json({hosted:{}}),'README.md':readme(pkg.name,'A module Block that uses hosted operations as tools. tests/mocks.json turns on stand-ins for offline tests and packing; record your own answers under "hosted". People approve the price of each call in StillMade; locally `--mock` uses recorded stand-ins.',HOSTED,options)};
|
|
249
250
|
}},
|
|
250
251
|
'view-react':{description:'A React interface (frame view) on a module Block, bundled with esbuild.',runtime:'module',files:async options=>{
|
|
@@ -294,7 +295,24 @@ export const TEMPLATES=Object.freeze({
|
|
|
294
295
|
tests:[{name:'Two chores',input:{items:'Back up footage\nReview cuts'},expected:{checklist:'1. [ ] Back up footage\n2. [ ] Review cuts'}}]};
|
|
295
296
|
return {...packageFiles(pkg),'README.md':readme(pkg.manifest.name,'A JavaScript Block that declares a schedule trigger. The owner turns it on for a Step; it runs with the project\'s saved inputs.',OFFLINE,options)};
|
|
296
297
|
}},
|
|
297
|
-
}
|
|
298
|
+
};
|
|
299
|
+
// What create makes is the creator's own Block, whatever template it starts from (November 3, 2026: a `module` Block
|
|
300
|
+
// kept "Word stats", its description and README, and every template put "StillMade SDK contributors" in the person's
|
|
301
|
+
// license): it is named for its folder, and its description and license holder are placeholders the builder replaces.
|
|
302
|
+
// Each template's manifest.action keeps its job words ("Count words"), which the gate reads.
|
|
303
|
+
export const LICENSE_HOLDER_PLACEHOLDER='<the person this Block is made for>';
|
|
304
|
+
function ownBlock(template,files,options){
|
|
305
|
+
const name=blockName(options?.folder);if(!name)return files;
|
|
306
|
+
const manifest=JSON.parse(files['stillmade.block.json']),started=manifest.name;
|
|
307
|
+
manifest.name=name;
|
|
308
|
+
manifest.description=`Replace with one sentence saying what ${name} does for the person.`;
|
|
309
|
+
if(manifest.provenance?.notice===EXAMPLE_PROVENANCE.notice)manifest.provenance={...manifest.provenance,notice:LICENSE_TEXTS.MIT.replace('<year> <copyright holders>',`${new Date().getFullYear()} ${LICENSE_HOLDER_PLACEHOLDER}`)};
|
|
310
|
+
const note=`Started from the \`${template}\` template. Say what this Block does here and in \`description\` in stillmade.block.json, and put the name of the person it is made for in place of \`${LICENSE_HOLDER_PLACEHOLDER}\` in \`provenance.notice\`.`;
|
|
311
|
+
const text=files['README.md'];
|
|
312
|
+
return {...files,'stillmade.block.json':json(manifest),...(typeof text==='string'?{'README.md':text.startsWith(`# ${started}\n`)?`# ${name}\n\n${note}\n${text.slice(started.length+3)}`:`# ${name}\n\n${note}\n\n${text}`}:{})};
|
|
313
|
+
}
|
|
314
|
+
/** name → {description, runtime, files: async ({folder}) => ({path: text | bytes})} */
|
|
315
|
+
export const TEMPLATES=Object.freeze(Object.fromEntries(Object.entries(STARTERS).map(([key,template])=>[key,{...template,files:async options=>ownBlock(key,await template.files(options),options)}])));
|
|
298
316
|
export const TEMPLATE_ALIASES=Object.freeze({default:'recipe',capability:'text'});
|
|
299
317
|
export function templateNamed(name='recipe'){
|
|
300
318
|
const key=Object.hasOwn(TEMPLATE_ALIASES,name)?TEMPLATE_ALIASES[name]:name;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Module Blocks inside a Project Type, for the SDK CLI (November 3, 2026: a no-context agent's Real Estate
|
|
2
|
+
// Listing Video Type could not be tested or packed. `test` and `pack` ran its two module Blocks with no
|
|
3
|
+
// executor (RUNTIME_UNAVAILABLE), and the packed Blocks' base64 files, pasted into moduleSource, passed
|
|
4
|
+
// `validate` and failed only at run time with "main.js does not match its recorded digest").
|
|
5
|
+
//
|
|
6
|
+
// A Type carries a module Block's files as JavaScript text in `packages[].moduleSource`. In the Type file
|
|
7
|
+
// an entry of `packages` may instead be what `pack` wrote for the Block, embedded as it is
|
|
8
|
+
// (`{"format":"stillmade-module-bundle/1",...}`), or a path to it or to the Block's folder, relative to
|
|
9
|
+
// the Type file. The CLI turns each into the package with its moduleSource, checks every file against its
|
|
10
|
+
// recorded digest, and `pack` writes the Type with them embedded.
|
|
11
|
+
import {assert,plain} from '../block-sdk/contracts.js';
|
|
12
|
+
import {isModuleBundle,readModuleBundle} from '../block-sdk/module-bundle.js';
|
|
13
|
+
import {moduleFileDigest,MODULE_LIMITS} from '../block-sdk/module-runtime.js';
|
|
14
|
+
import {createNodeModuleExecutor} from '../block-sdk/module-node.js';
|
|
15
|
+
import {createMockHost,validateMocks} from '../block-sdk/mock-host.js';
|
|
16
|
+
import {testPackage} from '../block-sdk/testing.js';
|
|
17
|
+
import {runPackageAsync} from '../block-sdk/runtime.js';
|
|
18
|
+
import {textCleanup} from '../block-sdk/examples.js';
|
|
19
|
+
|
|
20
|
+
const fail=message=>{throw Object.assign(new Error(message),{code:'TYPE_PACKAGE'});};
|
|
21
|
+
const utf8=new TextDecoder('utf-8',{fatal:true});
|
|
22
|
+
const label=(pkg,index)=>`packages[${index}] (${pkg?.manifest?.id||'unnamed'}@${pkg?.manifest?.version||'?'})`;
|
|
23
|
+
|
|
24
|
+
// files: {path: Uint8Array} for the package's module descriptor. Returns the package with moduleSource.
|
|
25
|
+
function withModuleSource(pkg,files,index){
|
|
26
|
+
if(pkg?.manifest?.runtime!=='module')return pkg;
|
|
27
|
+
if(pkg.view?.files)fail(`${label(pkg,index)} has a frame view with its own files, which a Project Type cannot carry. Embed a Block whose view has no files in src/view-files/.`);
|
|
28
|
+
const moduleSource={};
|
|
29
|
+
for(const [path,file] of Object.entries(pkg.module?.files||{})){
|
|
30
|
+
if(file.mediaType!=='text/javascript')fail(`${label(pkg,index)} has ${path} (${file.mediaType}). A Project Type carries a module Block's files as JavaScript text in moduleSource, so bundle the Block into JavaScript files only (no .wasm or data files) to embed it.`);
|
|
31
|
+
const bytes=files?.[path];if(!bytes)fail(`${label(pkg,index)}: ${path} is missing from the packed Block.`);
|
|
32
|
+
try{moduleSource[path]=utf8.decode(bytes);}catch{fail(`${label(pkg,index)}: ${path} is not UTF-8 text.`);}
|
|
33
|
+
}
|
|
34
|
+
return {...pkg,moduleSource};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The Type with every `packages` entry as a package object. read(path) returns {pkg, files} for a packed
|
|
39
|
+
* Block file or a Block folder (the CLI's readPackage). folder: the Type file's folder.
|
|
40
|
+
* Returns the same object when every entry already is a package.
|
|
41
|
+
*/
|
|
42
|
+
export async function embedTypePackages(type,{folder,read,resolvePath}){
|
|
43
|
+
if(!Array.isArray(type?.packages)||type.packages.every(entry=>plain(entry)&&!isModuleBundle(entry)))return type;
|
|
44
|
+
const packages=[];
|
|
45
|
+
for(const [index,entry] of type.packages.entries()){
|
|
46
|
+
if(typeof entry==='string'){
|
|
47
|
+
let found;try{found=await read(resolvePath(folder,entry));}catch(error){fail(`packages[${index}] names ${entry}, which could not be read: ${error.message}`);}
|
|
48
|
+
assert(!found.pkg?.stages,'TYPE_PACKAGE',`packages[${index}] names ${entry}, a Project Type. Name a packed Block or a Block folder.`);
|
|
49
|
+
packages.push(found.files?withModuleSource(found.pkg,found.files,index):found.pkg);
|
|
50
|
+
}else if(isModuleBundle(entry)){
|
|
51
|
+
const bundle=await readModuleBundle(entry),files={};
|
|
52
|
+
for(const [path,file] of Object.entries(bundle.package.module?.files||{}))files[path]=bundle.files[file.sha256];
|
|
53
|
+
packages.push(withModuleSource(bundle.package,files,index));
|
|
54
|
+
}else packages.push(entry);
|
|
55
|
+
}
|
|
56
|
+
return {...type,packages};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const looksBase64=text=>text.length>=8&&text.length%4===0&&/^[A-Za-z0-9+/]+={0,2}$/.test(text.replace(/\s+/g,''));
|
|
60
|
+
/** Every module package's moduleSource must be its files' exact text: checked here, before anything runs. */
|
|
61
|
+
export async function checkTypeModuleSources(type){
|
|
62
|
+
for(const [index,pkg] of (type?.packages||[]).entries()){
|
|
63
|
+
if(pkg?.manifest?.runtime!=='module'||!plain(pkg.moduleSource)||!plain(pkg.module?.files))continue;
|
|
64
|
+
for(const [path,text] of Object.entries(pkg.moduleSource)){
|
|
65
|
+
const file=pkg.module.files[path];if(!file||typeof text!=='string')continue;
|
|
66
|
+
const bytes=new TextEncoder().encode(text);
|
|
67
|
+
if(bytes.byteLength===file.bytes&&await moduleFileDigest(bytes)===file.sha256)continue;
|
|
68
|
+
if(looksBase64(text)){
|
|
69
|
+
let decoded=null;try{decoded=new Uint8Array(Buffer.from(text,'base64'));}catch{}
|
|
70
|
+
if(decoded&&decoded.byteLength===file.bytes&&await moduleFileDigest(decoded)===file.sha256)fail(`${label(pkg,index)}: moduleSource["${path}"] holds the file as base64, the way a packed .stillmade-module.json stores it. A Project Type carries it as plain JavaScript text. Put the packed file's path in packages instead (for example "packages": ["dist/${pkg.manifest.id}-${pkg.manifest.version}.stillmade-module.json"]) and the CLI embeds it, or put the decoded text there.`);
|
|
71
|
+
}
|
|
72
|
+
fail(`${label(pkg,index)}: moduleSource["${path}"] does not match module.files["${path}"] (${file.bytes} bytes, sha256 ${file.sha256}). Pack the Block again and put the packed file's path in packages, so the text and its digest come from the same build.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const sourceFiles=pkg=>{
|
|
78
|
+
assert(plain(pkg.moduleSource)&&Object.keys(pkg.moduleSource).length,'MODULE_FILE',`${pkg.manifest.name} carries no moduleSource, so it cannot run here. Put its packed file or folder in the Type's packages and the CLI embeds the files.`);
|
|
79
|
+
return Object.fromEntries(Object.entries(pkg.moduleSource).map(([path,text])=>[path,new TextEncoder().encode(text)]));
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The local module runner for a Type's checks, the one `test` and `preview` use for a single module Block:
|
|
83
|
+
* the SDK's Node executor, each fixture answered by its own mocks, and with mock (--mock) the recorded
|
|
84
|
+
* stand-ins for anything else. In the connected run a module Step is answered by its first fixture's
|
|
85
|
+
* mocks when it records some, else by the stand-ins with --mock. No provider is ever called.
|
|
86
|
+
* Returns {test, run} for testProjectType/previewProjectType and calls() for the report.
|
|
87
|
+
*/
|
|
88
|
+
export function typeModuleRunner({mock=false,readLocalFile}={}){
|
|
89
|
+
const hosts=[];
|
|
90
|
+
const hostFor=(pkg,mocks,source)=>{const host=createMockHost({mocks:validateMocks(mocks),readLocalFile,manifest:pkg.manifest});hosts.push({host,source});return host.host;};
|
|
91
|
+
const executor=(pkg,host)=>createNodeModuleExecutor({files:sourceFiles(pkg),...(host?{host}:{})});
|
|
92
|
+
const test=(pkg,options={})=>{
|
|
93
|
+
if(pkg.manifest.runtime!=='module')return testPackage(pkg,options);
|
|
94
|
+
const module=executor(pkg,mock?hostFor(pkg,undefined,'recorded stand-in'):undefined);
|
|
95
|
+
return testPackage(pkg,{...options,module,moduleFor:fixture=>fixture?.mocks?executor(pkg,hostFor(pkg,fixture.mocks,'fixture mocks')):module,timeoutMs:Math.min(options.timeoutMs??MODULE_LIMITS.wallClockMs,MODULE_LIMITS.wallClockMs)});
|
|
96
|
+
};
|
|
97
|
+
const run=(pkg,input,options={})=>{
|
|
98
|
+
if(pkg.manifest.runtime!=='module')return runPackageAsync(pkg,input,options);
|
|
99
|
+
const recorded=pkg.tests?.find(fixture=>fixture?.mocks)?.mocks;
|
|
100
|
+
const host=recorded?hostFor(pkg,recorded,'fixture mocks'):mock?hostFor(pkg,undefined,'recorded stand-in'):undefined;
|
|
101
|
+
return runPackageAsync(pkg,input,{...options,module:executor(pkg,host)});
|
|
102
|
+
};
|
|
103
|
+
const calls=()=>hosts.flatMap(({host,source})=>host.calls.map(call=>({api:call.api,name:call.name,source:call.source==='mocks'?source:'recorded stand-in'})));
|
|
104
|
+
return {test,run,calls};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// What `create-type` writes: one job Step, then the Editor, which has captions and export built in, so no
|
|
108
|
+
// Export video Step follows it (builder contract, "One Step per job"). November 3, 2026: it had a second
|
|
109
|
+
// "Review clean text" Step, and a review never starts a new Step; the Editor stays because the person cuts by hand.
|
|
110
|
+
export const TYPE_SCAFFOLD=Object.freeze({
|
|
111
|
+
schemaVersion:1,id:'example.text-workflow',version:'1.0.0',name:'Text workflow',
|
|
112
|
+
description:'Clean the text, then assemble and export the video in the Editor.',
|
|
113
|
+
packages:[textCleanup],
|
|
114
|
+
stages:[
|
|
115
|
+
{id:'first',blockId:'example.clean-text',version:'1.0.0',label:'Prepare text'},
|
|
116
|
+
{id:'edit',blockId:'sm.editor',version:'1.0.0',label:'Edit and export'},
|
|
117
|
+
],
|
|
118
|
+
connections:[],
|
|
119
|
+
});
|