stillmade-sdk 0.1.41 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.stillmade/sdk-baseline.json +19 -19
  2. package/AGENTS.md +2 -2
  3. package/INTERFACE_DESIGN.md +5 -0
  4. package/PASTE_TO_LLM.md +12 -12
  5. package/SDK.md +44 -23
  6. package/UI_AESTHETIC.md +8 -1
  7. package/examples/check-clip.stillmade.json +4 -0
  8. package/examples/clean-text.stillmade.json +4 -0
  9. package/examples/custom-interface.stillmade.json +4 -0
  10. package/examples/describe-image.stillmade.json +4 -0
  11. package/examples/foley-cue.stillmade.json +4 -0
  12. package/examples/generate-image.stillmade.json +4 -0
  13. package/examples/generate-video.stillmade.json +4 -0
  14. package/examples/module-word-stats/stillmade.block.json +4 -0
  15. package/examples/narrate-script.stillmade.json +4 -0
  16. package/examples/numbered-takes.stillmade.json +4 -0
  17. package/examples/research-topic.stillmade.json +4 -0
  18. package/examples/score-a-scene.stillmade.json +4 -0
  19. package/examples/script-draft.stillmade.json +4 -0
  20. package/examples/summarize-page.stillmade.json +4 -0
  21. package/examples/text-workflow.stillmade.json +4 -0
  22. package/examples/thicken-lines.stillmade.json +4 -0
  23. package/examples/timeline-polish.stillmade.json +4 -0
  24. package/examples/transcribe-audio.stillmade.json +4 -0
  25. package/examples/word-count.stillmade.json +4 -0
  26. package/package.json +1 -1
  27. package/packages/block-cli/dev-host/assets/host.js +6 -1
  28. package/packages/block-cli/dev-host/assets/index.css +1 -1
  29. package/packages/block-cli/ready-gate.js +4 -0
  30. package/packages/block-cli/templates.js +7 -7
  31. package/packages/block-platform/block-readiness.js +3 -1
  32. package/packages/block-sdk/audio-generation-example.js +2 -2
  33. package/packages/block-sdk/builder-contract.js +3 -3
  34. package/packages/block-sdk/capability-example.js +1 -1
  35. package/packages/block-sdk/examples.js +3 -3
  36. package/packages/block-sdk/image-description-example.js +1 -1
  37. package/packages/block-sdk/image-generation-example.js +1 -1
  38. package/packages/block-sdk/media-analysis-example.js +1 -1
  39. package/packages/block-sdk/module-example.js +1 -1
  40. package/packages/block-sdk/speech-example.js +1 -1
  41. package/packages/block-sdk/state-example.js +1 -1
  42. package/packages/block-sdk/timeline-proposal-example.js +1 -1
  43. package/packages/block-sdk/transcription-example.js +1 -1
  44. package/packages/block-sdk/trigger-examples.js +2 -2
  45. package/packages/block-sdk/video-generation-example.js +1 -1
  46. package/packages/block-sdk/view-design.js +27 -1
  47. package/packages/block-sdk/web-example.js +2 -2
  48. package/packages/design-system/block-kit.css +5 -0
@@ -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-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[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)}
@@ -111,6 +111,10 @@ async function judge(path,main,{executeModules=true}={}){
111
111
  const placeholder=features=>features.length===1&&features[0].id==='main'&&features[0].asks?.length===1&&features[0].asks[0]===features[0].does;
112
112
  if(PASSING.has(readiness.status)&&manifest&&!(Array.isArray(manifest.features)&&manifest.features.length&&!placeholder(manifest.features)))
113
113
  return {ok:false,status:'NO FEATURE MAP',failures:['Add manifest.features: one entry per separate thing the Block can do, each with id, label, does and asks (requests in a customer\'s words). StillMade search, matching and the listing read it.'],limitations:(readiness.limitations||[]).length};
114
+ // November 3, 2026 (owner: the rules are followed, not suggested): a Wording note does not lower readiness, but the
115
+ // gate does not pass until each is fixed. StillMade's own builder sends the same notes back as repairs.
116
+ const wording=(readiness.limitations||[]).filter(note=>note.startsWith('Wording: '));
117
+ if(PASSING.has(readiness.status)&&wording.length)return {ok:false,status:'WORDING NOT SETTLED',failures:[...wording.map(note=>note.slice(9)),'Fix each of these in the Block. If the person asked for exactly these words, keep them and tell the person the gate flags them.'],limitations:(readiness.limitations||[]).length};
114
118
  return {ok:PASSING.has(readiness.status),status:readiness.status,failures:summarize(readiness),limitations:(readiness.limitations||[]).length};
115
119
  }catch(error){
116
120
  if(/^ready checks one Block package/.test(error.message)){
@@ -111,7 +111,7 @@ export default async function run(input, stillmade) {
111
111
  return { cards: { cards: titles.map((title, index) => ({ number: index + 1, title: title.slice(0, 120) })) } };
112
112
  }
113
113
  `;
114
- const cardsManifest=(id,name)=>manifest({id,version:'1.0.0',name,description:'Turn lines of text into numbered title cards, with a pinned card shared by everyone in the project.',runtime:'javascript',
114
+ const cardsManifest=(id,name)=>manifest({id,action:{label:'Make cards',running:'Making cards…'},version:'1.0.0',name,description:'Turn lines of text into numbered title cards, with a pinned card shared by everyone in the project.',runtime:'javascript',
115
115
  inputs:{lines:{type:'text',primary:true,required:true,semantic:'plain_text',description:'One title per line.'}},
116
116
  outputs:{cards:{type:'json',primary:true,semantic:'title_cards',description:'The numbered title cards.',schema:{cards:'object[]'}}},
117
117
  // The required input also gets a generated control: pack --original and import refuse a required input nobody can set.
@@ -239,12 +239,12 @@ export const TEMPLATES=Object.freeze({
239
239
  stateful:{description:'Number takes with memory saved between runs.',runtime:'recipe',files:fromExample(async()=>(await import('../block-sdk/state-example.js')).numberedTakes,'A Block with saved memory (manifest state).',['stillmade-block test .','stillmade-block run . --save-state memory.json','stillmade-block run . --state memory.json --save-state memory-2.json'])},
240
240
  module:{description:'Modern JavaScript (ES modules, async, typed arrays) in a Worker.',runtime:'module',files:async options=>{const {moduleWordStats,MODULE_EXAMPLE_SOURCE}=await import('../block-sdk/module-example.js');return {'stillmade.block.json':json(moduleWordStats.manifest),'module/main.js':MODULE_EXAMPLE_SOURCE,'tests/fixtures.json':json(moduleWordStats.tests),'README.md':readme(moduleWordStats.manifest.name,'A module Block: module/main.js exports `run(input, stillmade)`. Bundle npm packages into module/main.js with any bundler.',OFFLINE,options)};}},
241
241
  'module-wasm':{description:'A module that runs WebAssembly shipped beside its code.',runtime:'module',files:async options=>{
242
- const pkg=manifest({id:'example.wasm-add',version:'1.0.0',name:'Add with WebAssembly',description:'Adds two whole numbers in WebAssembly.',runtime:'module',inputs:{a:{type:'integer',primary:true,required:true,semantic:'first_number',description:'First number.'},b:{type:'integer',required:true,semantic:'second_number',description:'Second number.'}},outputs:{sum:{type:'integer',primary:true,semantic:'sum',description:'a + b.'}},ui:[{control:'number',port:'a'},{control:'number',port:'b'}]});
242
+ const pkg=manifest({id:'example.wasm-add',action:{label:'Add numbers',running:'Adding numbers…'},version:'1.0.0',name:'Add with WebAssembly',description:'Adds two whole numbers in WebAssembly.',runtime:'module',inputs:{a:{type:'integer',primary:true,required:true,semantic:'first_number',description:'First number.'},b:{type:'integer',required:true,semantic:'second_number',description:'Second number.'}},outputs:{sum:{type:'integer',primary:true,semantic:'sum',description:'a + b.'}},ui:[{control:'number',port:'a'},{control:'number',port:'b'}]});
243
243
  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
244
  }},
245
245
  'module-hosted':{description:'A module that calls hosted text and image generation as tools.',runtime:'module',files:async options=>{
246
246
  // Named for the Block being made, so its README, types and feature map do not name the example (October 27, 2026).
247
- const pkg=manifest({id:'example.poster-from-idea',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'}]});
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
248
  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
249
  }},
250
250
  'view-react':{description:'A React interface (frame view) on a module Block, bundled with esbuild.',runtime:'module',files:async options=>{
@@ -271,25 +271,25 @@ export const TEMPLATES=Object.freeze({
271
271
  'web-research':{description:'Research a topic with sources (web.research).',runtime:'capability',files:fromExample(async()=>(await import('../block-sdk/web-example.js')).webResearch,'Hosted web research.',HOSTED)},
272
272
  'timeline-proposal':{description:'Propose Editor timeline edits the person reviews (timeline.propose).',runtime:'capability',files:fromExample(async()=>(await import('../block-sdk/timeline-proposal-example.js')).timelinePolish,'Hosted timeline proposals: the person reviews and applies them in the Editor.',HOSTED)},
273
273
  'outside-api':{description:'Call an outside https API with the person\'s own key (net.fetch).',runtime:'module',files:async options=>{
274
- const pkg=manifest({id:'example.open-issues',version:'1.0.0',name:'Open GitHub issues',description:'Lists the open issues of a GitHub repository with your own token.',runtime:'module',inputs:{repository:{type:'text',primary:true,required:true,semantic:'repository_name',description:'owner/name, such as octocat/hello-world.'}},outputs:{issues:{type:'json',primary:true,semantic:'issue_list',description:'Open issues.',schema:{issues:'object[]'}}},permissions:{network:[{origin:'https://api.github.com',auth:{scheme:'bearer',label:'GitHub personal access token',help:'https://github.com/settings/tokens'}}]},ui:[{control:'text',port:'repository'}]});
274
+ const pkg=manifest({id:'example.open-issues',action:{label:'Get open issues',running:'Getting open issues…'},version:'1.0.0',name:'Open GitHub issues',description:'Lists the open issues of a GitHub repository with your own token.',runtime:'module',inputs:{repository:{type:'text',primary:true,required:true,semantic:'repository_name',description:'owner/name, such as octocat/hello-world.'}},outputs:{issues:{type:'json',primary:true,semantic:'issue_list',description:'Open issues.',schema:{issues:'object[]'}}},permissions:{network:[{origin:'https://api.github.com',auth:{scheme:'bearer',label:'GitHub personal access token',help:'https://github.com/settings/tokens'}}]},ui:[{control:'text',port:'repository'}]});
275
275
  return {'stillmade.block.json':json(pkg),'module/main.js':OUTSIDE_API,'tests/fixtures.json':json([{name:'Lists issues',input:{repository:'octocat/hello-world'},expected:{issues:{issues:[{number:7,title:'Fix the README',url:'https://github.com/octocat/hello-world/issues/7'}]}}}]),
276
276
  'tests/mocks.json':json({network:[{method:'GET',url:'https://api.github.com/repos/octocat/hello-world/issues*',status:200,json:[{number:7,title:'Fix the README',html_url:'https://github.com/octocat/hello-world/issues/7'},{number:8,title:'A pull request',html_url:'https://github.com/octocat/hello-world/pull/8',pull_request:{}}]}]}),
277
277
  'README.md':readme(pkg.name,'A module Block that calls an outside API. StillMade adds the person\'s own key for each declared origin; tests/mocks.json records the API\'s answers for offline tests.',HOSTED,options)};
278
278
  }},
279
279
  connection:{description:'Call a published OpenAPI adapter with the person\'s sign-in.',runtime:'module',files:async options=>{
280
- const pkg=manifest({id:'example.notion-title',version:'1.0.0',name:'Notion page title',description:'Reads a Notion page title through the published Notion adapter.',runtime:'module',inputs:{pageId:{type:'text',primary:true,required:true,semantic:'notion_page_id',description:'The Notion page ID.'}},outputs:{title:{type:'text',primary:true,semantic:'page_title',description:'The page title.'}},permissions:{connections:['app:openapi:notion']},ui:[{control:'text',port:'pageId'}]});
280
+ const pkg=manifest({id:'example.notion-title',action:{label:'Get page title',running:'Getting page title…'},version:'1.0.0',name:'Notion page title',description:'Reads a Notion page title through the published Notion adapter.',runtime:'module',inputs:{pageId:{type:'text',primary:true,required:true,semantic:'notion_page_id',description:'The Notion page ID.'}},outputs:{title:{type:'text',primary:true,semantic:'page_title',description:'The page title.'}},permissions:{connections:['app:openapi:notion']},ui:[{control:'text',port:'pageId'}]});
281
281
  return {'stillmade.block.json':json(pkg),'module/main.js':CONNECTION,'tests/fixtures.json':json([{name:'Reads a title',input:{pageId:'b1b2c3d4e5f60718293a4b5c6d7e8f90'},expected:{title:'Launch plan'}}]),
282
282
  'tests/mocks.json':json({connections:{'app:openapi:notion/retrievePage':{object:'page',properties:{Name:{type:'title',title:[{plain_text:'Launch plan'}]}}}}}),
283
283
  'README.md':readme(pkg.name,'A module Block that calls a published adapter. People sign in once per Block; tests/mocks.json records the adapter\'s answers for offline tests.',HOSTED,options)};
284
284
  }},
285
285
  storage:{description:'Remember values across runs in the project\'s Block storage.',runtime:'module',files:async options=>{
286
- const pkg=manifest({id:'example.remember-settings',version:'1.0.0',name:'Remember settings',description:'Keeps a name and a run count in project storage.',runtime:'module',storage:{schemaVersion:1,scope:'project',desktop:'device-unmetered',cloud:'metered'},inputs:{name:{type:'text',primary:true,required:false,semantic:'person_name',description:'A name to remember.'}},outputs:{greeting:{type:'text',primary:true,semantic:'greeting',description:'A greeting with the run count.'}},ui:[{control:'text',port:'name'}]});
286
+ const pkg=manifest({id:'example.remember-settings',action:{label:'Save settings',running:'Saving settings…'},version:'1.0.0',name:'Remember settings',description:'Keeps a name and a run count in project storage.',runtime:'module',storage:{schemaVersion:1,scope:'project',desktop:'device-unmetered',cloud:'metered'},inputs:{name:{type:'text',primary:true,required:false,semantic:'person_name',description:'A name to remember.'}},outputs:{greeting:{type:'text',primary:true,semantic:'greeting',description:'A greeting with the run count.'}},ui:[{control:'text',port:'name'}]});
287
287
  return {'stillmade.block.json':json(pkg),'module/main.js':STORAGE,'tests/fixtures.json':json([{name:'First run',input:{name:'Ada'},expected:{greeting:'Hello Ada, run 1'}}]),'tests/mocks.json':json({storage:{}}),'README.md':readme(pkg.name,'A module Block with project storage. tests/mocks.json can seed stored values under "storage".',OFFLINE,options)};
288
288
  }},
289
289
  'trigger-media':{description:'Runs on its own when a video is saved (media.saved trigger).',runtime:'capability',files:fromExample(async()=>(await import('../block-sdk/trigger-examples.js')).autoCaptions,'A hosted Block that declares a media.saved trigger. The project owner turns it on and approves a credit budget in the Step\'s "Runs on its own" panel.',HOSTED)},
290
290
  'trigger-webhook':{description:'Runs when another service sends a webhook.',runtime:'javascript',files:fromExample(async()=>(await import('../block-sdk/trigger-examples.js')).orderNote,'A JavaScript Block that declares a webhook trigger. The owner turns it on and gets the address and key once.')},
291
291
  'trigger-schedule':{description:'Runs on a schedule with the project\'s saved inputs.',runtime:'javascript',files:async options=>{
292
- const pkg={manifest:manifest({id:'example.daily-checklist',version:'1.0.0',name:'Daily checklist',description:'Turns a list of chores into a numbered checklist, every day.',runtime:'javascript',inputs:{items:{type:'text',primary:true,required:true,semantic:'plain_text',description:'One chore per line.'}},outputs:{checklist:{type:'text',primary:true,semantic:'checklist',description:'The numbered checklist.'}},triggers:[{event:'schedule',everySeconds:86400,label:'Every day'}],ui:[{control:'text',port:'items'}]}),
292
+ const pkg={manifest:manifest({id:'example.daily-checklist',action:{label:'Make checklist',running:'Making checklist…'},version:'1.0.0',name:'Daily checklist',description:'Turns a list of chores into a numbered checklist, every day.',runtime:'javascript',inputs:{items:{type:'text',primary:true,required:true,semantic:'plain_text',description:'One chore per line.'}},outputs:{checklist:{type:'text',primary:true,semantic:'checklist',description:'The numbered checklist.'}},triggers:[{event:'schedule',everySeconds:86400,label:'Every day'}],ui:[{control:'text',port:'items'}]}),
293
293
  code:"const items=String(input.items||'').split('\\n').map(line=>line.trim()).filter(Boolean);\nreturn {checklist:items.map((item,index)=>`${index+1}. [ ] ${item}`).join('\\n')};",
294
294
  tests:[{name:'Two chores',input:{items:'Back up footage\nReview cuts'},expected:{checklist:'1. [ ] Back up footage\n2. [ ] Review cuts'}}]};
295
295
  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)};
@@ -47,7 +47,9 @@ export function jobWordingNotes(pkg){
47
47
  const manifest=pkg?.manifest||{},notes=[],label=manifest.action?.label;
48
48
  const operations=pkg?.capability?.operation?[pkg.capability.operation]:(manifest.permissions?.capabilities||[]);
49
49
  if(label&&GENERIC_ACTIONS.test(label.trim()))notes.push(`The button reads "${label}". Name what it does in the job's words in manifest.action ("Plan the tour").`);
50
- else if(!label&&!operations.length)notes.push('The Step\'s button would read "Make it". Name it in manifest.action ("Plan the tour").');
50
+ // November 3, 2026 (owner: fix the underlying problem): StillMade draws the run button for every Block without its
51
+ // own screen, and for one that calls operations; such a Block names it, or StillMade can only guess from its name.
52
+ else if(!label&&(!pkg?.view||operations.length))notes.push('StillMade draws this Step\'s button and can only guess its words from the Block\'s name or output. Name what it does in the job\'s words in manifest.action ({label:"Animate photos",running:"Animating…"}).');
51
53
  const bare=Object.entries(manifest.inputs||{}).filter(([name,port])=>MEDIA_PORTS.has(port?.type)&&BARE_MEDIA_NAMES.has(name.toLowerCase())).map(([name])=>name);
52
54
  // Days and times are picked, never typed: a text input that holds one is a date input, which StillMade shows as a calendar.
53
55
  const typedDates=Object.entries(manifest.inputs||{}).filter(([name,port])=>port?.type==='text'&&/(?:date|time|when|deadline|schedule)|(?:At|_at)$/.test(name)).map(([name])=>name);
@@ -3,12 +3,12 @@ import {EXAMPLE_PROVENANCE} from './example-license.js';
3
3
  // prompt and a suggested length; the person running it chooses the length and
4
4
  // pays with StillMade credits at the app's prices.
5
5
  export const audioMusic={
6
- manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.score-a-scene',version:'1.0.0',name:'Score a scene',description:'Generate a short music bed for a scene from a written mood brief.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{brief:{type:'brief',primary:true,semantic:'music_brief',required:true,description:'Mood, tempo and instruments for the music bed.'}},outputs:{music:{type:'audio',primary:true,semantic:'music_bed',description:'Generated music bed.'}},permissions:{project:[],capabilities:['audio.music'],network:[],filesystem:[],secrets:[]},ui:[]},
6
+ manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.score-a-scene',action:{label:'Generate music',running:'Generating music…'},version:'1.0.0',name:'Score a scene',description:'Generate a short music bed for a scene from a written mood brief.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{brief:{type:'brief',primary:true,semantic:'music_brief',required:true,description:'Mood, tempo and instruments for the music bed.'}},outputs:{music:{type:'audio',primary:true,semantic:'music_bed',description:'Generated music bed.'}},permissions:{project:[],capabilities:['audio.music'],network:[],filesystem:[],secrets:[]},ui:[]},
7
7
  capability:{schemaVersion:1,operation:'audio.music',prompt:{$input:'brief'},output:'music',settings:{durationSec:30}},
8
8
  tests:[{name:'Calm piano bed',input:{brief:{schemaVersion:1,text:'Calm solo piano, slow tempo, warm and hopeful.'}},expectations:{music:{kind:'audio',format:'any',minDuration:1,maxDuration:241,minBytes:45,maxBytes:134217728}}}],
9
9
  };
10
10
  export const audioSfx={
11
- manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.foley-cue',version:'1.0.0',name:'Foley cue',description:'Generate a short sound effect from a written description.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{description:{type:'text',primary:true,semantic:'sound_description',required:true,description:'The sound to create.'}},outputs:{sound:{type:'audio',primary:true,semantic:'sound_effect',description:'Generated sound effect.'}},permissions:{project:[],capabilities:['audio.sfx'],network:[],filesystem:[],secrets:[]},ui:[]},
11
+ manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.foley-cue',action:{label:'Generate sound',running:'Generating sound…'},version:'1.0.0',name:'Foley cue',description:'Generate a short sound effect from a written description.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{description:{type:'text',primary:true,semantic:'sound_description',required:true,description:'The sound to create.'}},outputs:{sound:{type:'audio',primary:true,semantic:'sound_effect',description:'Generated sound effect.'}},permissions:{project:[],capabilities:['audio.sfx'],network:[],filesystem:[],secrets:[]},ui:[]},
12
12
  capability:{schemaVersion:1,operation:'audio.sfx',prompt:{$input:'description'},output:'sound',settings:{durationSec:3}},
13
13
  tests:[{name:'Door creak',input:{description:'A slow wooden door creak in a quiet room.'},expectations:{sound:{kind:'audio',format:'any',minDuration:.1,maxDuration:23,minBytes:45,maxBytes:134217728}}}],
14
14
  };
@@ -9,7 +9,7 @@
9
9
  import {HOSTED_OPERATION_NAMES} from './contracts.js';
10
10
 
11
11
  export const BUILDER_CONTRACT_ID='stillmade.block-builder';
12
- export const BUILDER_CONTRACT_VERSION='1.16.0';
12
+ export const BUILDER_CONTRACT_VERSION='1.17.0';
13
13
  export const BUILDER_CONTRACT_STAMP=`${BUILDER_CONTRACT_ID}@${BUILDER_CONTRACT_VERSION}`;
14
14
  export const BUILDER_CONTRACT_DOCS_PATH='/docs/build/block-builder-contract';
15
15
  // Block names appear in step bars, cards and pickers; new releases keep them short.
@@ -76,8 +76,8 @@ const SECTIONS=Object.freeze([
76
76
  // day (owner, of four tiles each saying "Only on the device it was added from"): "if it's a notification make it a
77
77
  // notification": state is one StillMade notification or nothing, never a sentence on the page or one per item.
78
78
  rule('job-words','block',
79
- 'Speak the job unless the person or creator asks otherwise: `manifest.action` names the button ("Plan the tour"; AI pictures, video or sound start with Generate, never "Make it"), one solid `sm-primary`, progress in the job\'s units, one line per problem, no notes on how the Block works or its state (one StillMade notification at most, never one per item), `date` inputs for days and times, plain input names so "Use a reference" fills them, posting as its own connector Step. Clear every Wording note `gate` lists.',
80
- 'These are StillMade\'s defaults: unless the person or the creator asked for something else, every screen speaks the job in its own words and adds nothing else. `manifest.action` names the Step\'s button, {label:"Plan the tour", running:"Planning the tour…"}, and StillMade adds the price ("Plan the tour · 1 credit"). When the Block makes a picture, video or sound with AI the label starts with Generate and says what ("Generate tour", "Generate voiceover"); one that cuts or renders the person\'s own media says Make ("Make 6 clips"); never "Make it", "Run", "Submit", "Process" or a bare "Generate". The main button stands out: one solid `sm-primary` in the kit\'s ink, never restyled to the background; everything else is `sm-quiet` or an `sm-icon`, and close is an X icon. Report progress in the job\'s units with `stillmade.progress(fraction, label)` ("Moving through the kitchen, 4 of 9 rooms"), never "Processing". Head the result in the job\'s words ("9 rooms", "Your tour · 44 s"), never "Output". Say a problem in one line with its fix beside it ("No bathroom photo. Guests look for one." and Add photo). Stay quiet: no welcome text, tips under fields, tours or banners, and at most one line of guidance on a screen, only where the next move is not obvious; anything more goes in the input\'s `description`, which StillMade shows behind an (i). Say nothing about how the Block works (where it runs, saving, syncing, recovery, accounts, credits) or where a file is kept: StillMade tells the person what they need as one short notification, or nothing; never a sentence on the page, and never the same line under each item. Every drop area offers "Use a reference", which fills the Step from the person\'s saved photos, videos and notes: media inputs fill by kind, so take `video` or `asset` where a clip works as well as a photo, and text inputs fill by plain names and labels (`productName`, `website`, `brandColors`, `fonts`, `voice`, and `details` or `notes` for the reference\'s note); never build your own reference picker. Days and times are picked, never typed: use the `date` type, which StillMade shows as a calendar, with a list of times when the input is about a time (`postAt`, `startsAt`); a custom view uses `<input type="date">` or `type="datetime-local"`. Posting is a connector Step of its own, and StillMade words its button from the app and action ("Post to Instagram"). Before handing the Block back, clear every Wording note that `gate` and readiness list, unless the person asked for those words.'),
79
+ 'Speak the job unless the person or creator asks otherwise: `manifest.action` names the button, required whenever StillMade draws it ("Plan the tour"; AI pictures, video or sound start with Generate, never "Make it"), one solid `sm-primary`, progress in the job\'s units, one line per problem, no notes on how the Block works or its state (one StillMade notification at most, never one per item), `date` inputs for days and times, plain input names so "Use a reference" fills them, posting as its own connector Step. Clear every Wording note `gate` lists.',
80
+ 'These are StillMade\'s defaults: unless the person or the creator asked for something else, every screen speaks the job in its own words and adds nothing else. `manifest.action` names the Step\'s button, {label:"Plan the tour", running:"Planning the tour…"}, and StillMade adds the price ("Plan the tour · 1 credit"). Every Block whose Step shows StillMade\'s button declares it: any Block without its own screen, and any that calls operations. Without it StillMade can only guess from the Block\'s name or output ("Make clips"), and the readiness gate and StillMade\'s own builder send the Block back until it names the job. When the Block makes a picture, video or sound with AI the label starts with Generate and says what ("Generate tour", "Generate voiceover"); one that cuts or renders the person\'s own media says Make ("Make 6 clips"); never "Make it", "Run", "Submit", "Process" or a bare "Generate". The main button stands out: one solid `sm-primary` in the kit\'s ink, never restyled to the background; everything else is `sm-quiet` or an `sm-icon`, and close is an X icon. Report progress in the job\'s units with `stillmade.progress(fraction, label)` ("Moving through the kitchen, 4 of 9 rooms"), never "Processing". Head the result in the job\'s words ("9 rooms", "Your tour · 44 s"), never "Output". Say a problem in one line with its fix beside it ("No bathroom photo. Guests look for one." and Add photo). Stay quiet: no welcome text, tips under fields, tours or banners, and at most one line of guidance on a screen, only where the next move is not obvious; anything more goes in the input\'s `description`, which StillMade shows behind an (i). Say nothing about how the Block works (where it runs, saving, syncing, recovery, accounts, credits) or where a file is kept: StillMade tells the person what they need as one short notification, or nothing; never a sentence on the page, and never the same line under each item. Every drop area offers "Use a reference", which fills the Step from the person\'s saved photos, videos and notes: media inputs fill by kind, so take `video` or `asset` where a clip works as well as a photo, and text inputs fill by plain names and labels (`productName`, `website`, `brandColors`, `fonts`, `voice`, and `details` or `notes` for the reference\'s note); never build your own reference picker. Days and times are picked, never typed: use the `date` type, which StillMade shows as a calendar, with a list of times when the input is about a time (`postAt`, `startsAt`); a custom view uses `<input type="date">` or `type="datetime-local"`. Posting is a connector Step of its own, and StillMade words its button from the app and action ("Post to Instagram"). Before handing the Block back, clear every Wording note that `gate` and readiness list, unless the person asked for those words.'),
81
81
  // November 2, 2026 (owner): StillMade centers and zooms a screen; an app that lays itself out (a CAD tool) opts out with
82
82
  // data-stillmade-layout="own" and keeps its own layout and Ctrl/Cmd +/- keys. The same day (owner: "implement A absolutely
83
83
  // universally, like in app, platform, sdk, just everywhere"): every <video controls> gets StillMade's player and result
@@ -2,7 +2,7 @@ import {EXAMPLE_PROVENANCE} from './example-license.js';
2
2
  // Portable request; provider/model/payment and real execution approval are
3
3
  // selected in StillMade. These fixtures are expectations, not recorded results.
4
4
  export const textGenerate={
5
- manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.script-draft',version:'1.0.0',name:'Draft a short script',description:'Turn a production brief into a short narration draft using an approved text-generation call.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{prompt:{type:'text',primary:true,semantic:'production_brief',required:true,description:'Production brief that guides the narration draft.'}},outputs:{script:{type:'script',primary:true,semantic:'narration_script',description:'A concise narration script based on the supplied brief.'}},permissions:{project:[],capabilities:['text.generate'],network:[],filesystem:[],secrets:[]},ui:[{control:'text',port:'prompt'}]},
5
+ manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.script-draft',action:{label:'Write script',running:'Writing script…'},version:'1.0.0',name:'Draft a short script',description:'Turn a production brief into a short narration draft using an approved text-generation call.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{prompt:{type:'text',primary:true,semantic:'production_brief',required:true,description:'Production brief that guides the narration draft.'}},outputs:{script:{type:'script',primary:true,semantic:'narration_script',description:'A concise narration script based on the supplied brief.'}},permissions:{project:[],capabilities:['text.generate'],network:[],filesystem:[],secrets:[]},ui:[{control:'text',port:'prompt'}]},
6
6
  capability:{schemaVersion:1,operation:'text.generate',prompt:{$input:'prompt'},system:'Write a concise narration script. Return only the script text.',maxTokens:1200,output:'script'},
7
7
  tests:[{name:'A short opening narration',input:{prompt:'Write two narration sentences about a quiet forest at sunrise.'},expectations:{script:{kind:'script',minLength:20,maxLength:6000}}}],
8
8
  };
@@ -1,19 +1,19 @@
1
1
  import {EXAMPLE_PROVENANCE} from './example-license.js';
2
2
  export const textCleanup = {
3
- manifest: { schemaVersion: 1, license: 'MIT', provenance: EXAMPLE_PROVENANCE, sdkVersion: '0.1.0', id: 'example.clean-text', version: '1.0.0', name: 'Clean text', description: 'Trims extra space from text and returns a clean copy for the next step.', kind: 'task', runtime: 'recipe', inputs: { text: { type: 'text', semantic: 'plain_text', required: true, description: 'Text whose surrounding whitespace should be removed.' } }, outputs: { text: { type: 'text', semantic: 'plain_text', description: 'The same text with surrounding whitespace removed.' } }, permissions: { project: [], network: [], filesystem: [], secrets: [] }, ui: [{ control: 'text', port: 'text' }] },
3
+ manifest: { schemaVersion: 1, license: 'MIT', provenance: EXAMPLE_PROVENANCE, sdkVersion: '0.1.0', id: 'example.clean-text',action:{label:'Clean text',running:'Cleaning text…'}, version: '1.0.0', name: 'Clean text', description: 'Trims extra space from text and returns a clean copy for the next step.', kind: 'task', runtime: 'recipe', inputs: { text: { type: 'text', semantic: 'plain_text', required: true, description: 'Text whose surrounding whitespace should be removed.' } }, outputs: { text: { type: 'text', semantic: 'plain_text', description: 'The same text with surrounding whitespace removed.' } }, permissions: { project: [], network: [], filesystem: [], secrets: [] }, ui: [{ control: 'text', port: 'text' }] },
4
4
  recipe: { schemaVersion: 1, steps: [{ id: 'clean', op: 'text.trim', args: { text: { $input: 'text' } } }], outputs: { text: { $step: 'clean' } } },
5
5
  tests: [{ name: 'Trims surrounding whitespace', input: { text: ' StillMade\n' }, expected: { text: 'StillMade' } }],
6
6
  };
7
7
  const pixels = Array.from({ length: 5 * 5 * 4 }, (_, i) => i >= 48 && i <= 50 ? 0 : 255);
8
8
  const expanded = pixels.map((v, i) => { const p = Math.floor(i / 4), x = p % 5, y = Math.floor(p / 5); return x >= 1 && x <= 3 && y >= 1 && y <= 3 && i % 4 !== 3 ? 0 : v; });
9
9
  export const lineArt = {
10
- manifest: { schemaVersion: 1, license: 'MIT', provenance: EXAMPLE_PROVENANCE, sdkVersion: '0.1.0', id: 'example.thicken-lines', version: '1.0.1', name: 'Thicken line art', description: 'Expands dark outlines in an image while preserving surrounding colors, creating a new image for the next production step.', kind: 'task', runtime: 'recipe', inputs: { image: { type: 'image', primary: true, semantic: 'source_image', required: true, description: 'Line-art image whose dark outlines should be expanded.' }, thickness: { type: 'integer', default: 2, min: 1, max: 8, semantic: 'line_thickness', required: false, description: 'Number of pixels by which to expand dark outlines.' }, threshold: { type: 'number', default: 100, min: 0, max: 255, semantic: 'darkness_threshold', required: false, description: 'Brightness threshold used to identify dark outline pixels.' } }, outputs: { image: { type: 'image', primary: true, semantic: 'processed_image', description: 'A new image with expanded dark outlines.' } }, permissions: { project: [], network: [], filesystem: [], secrets: [] }, ui: [{ control: 'asset', port: 'image' }, { control: 'slider', port: 'thickness' }, { control: 'slider', port: 'threshold' }] },
10
+ manifest: { schemaVersion: 1, license: 'MIT', provenance: EXAMPLE_PROVENANCE, sdkVersion: '0.1.0', id: 'example.thicken-lines',action:{label:'Thicken lines',running:'Thickening lines…'}, version: '1.0.1', name: 'Thicken line art', description: 'Expands dark outlines in an image while preserving surrounding colors, creating a new image for the next production step.', kind: 'task', runtime: 'recipe', inputs: { image: { type: 'image', primary: true, semantic: 'source_image', required: true, description: 'Line-art image whose dark outlines should be expanded.' }, thickness: { type: 'integer', default: 2, min: 1, max: 8, semantic: 'line_thickness', required: false, description: 'Number of pixels by which to expand dark outlines.' }, threshold: { type: 'number', default: 100, min: 0, max: 255, semantic: 'darkness_threshold', required: false, description: 'Brightness threshold used to identify dark outline pixels.' } }, outputs: { image: { type: 'image', primary: true, semantic: 'processed_image', description: 'A new image with expanded dark outlines.' } }, permissions: { project: [], network: [], filesystem: [], secrets: [] }, ui: [{ control: 'asset', port: 'image' }, { control: 'slider', port: 'thickness' }, { control: 'slider', port: 'threshold' }] },
11
11
  recipe: { schemaVersion: 1, steps: [{ id: 'outlines', op: 'image.thicken-lines', args: { image: { $input: 'image' }, thickness: { $input: 'thickness' }, threshold: { $input: 'threshold' } } }], outputs: { image: { $step: 'outlines' } } },
12
12
  tests: [{ name: 'One dark point expands to a 3×3 square', input: { image: { width: 5, height: 5, data: pixels }, thickness: 1 }, expected: { image: { width: 5, height: 5, data: expanded } } }],
13
13
  };
14
14
 
15
15
  export const javascriptText = {
16
- manifest: { ...textCleanup.manifest, id: 'example.word-count', name: 'Word count', description: 'Counts words and returns trimmed text using isolated JavaScript.', runtime: 'javascript', outputs: { text: { type: 'text', semantic: 'plain_text', description: 'The trimmed source text.' }, words: { type: 'integer', semantic: 'word_count', description: 'The number of whitespace-separated words.' } } },
16
+ manifest: { ...textCleanup.manifest, id: 'example.word-count',action:{label:'Count words',running:'Counting words…'}, name: 'Word count', description: 'Counts words and returns trimmed text using isolated JavaScript.', runtime: 'javascript', outputs: { text: { type: 'text', semantic: 'plain_text', description: 'The trimmed source text.' }, words: { type: 'integer', semantic: 'word_count', description: 'The number of whitespace-separated words.' } } },
17
17
  code: 'const text = input.text.trim();\nreturn { text, words: text ? text.split(/\\s+/).length : 0 };',
18
18
  tests: [{ name: 'Counts words', input: { text: ' Hello StillMade ' }, expected: { text: 'Hello StillMade', words: 2 } }, { name: 'Empty text', input: { text: ' ' }, expected: { text: '', words: 0 } }],
19
19
  };
@@ -3,7 +3,7 @@ import {EXAMPLE_PROVENANCE} from './example-license.js';
3
3
  // Provider, model, payment and image loading belong to the trusted host. The
4
4
  // package owns only the typed contract, bounded analysis instructions and tests.
5
5
  export const imageDescription={
6
- manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.describe-image',version:'1.0.0',name:'Describe an image',description:'Turn one owned image into concise production-ready visual notes.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{image:{type:'image',primary:true,semantic:'source_image',required:true,description:'Owned image to inspect for visible production details.'}},outputs:{description:{type:'text',primary:true,role:'visual_description',semantic:'visual_description',description:'Concise production notes based only on visible image details.'}},permissions:{project:[],capabilities:['image.describe'],network:[],filesystem:[],secrets:[]},ui:[{control:'asset',port:'image'}]},
6
+ manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:'example.describe-image',action:{label:'Describe image',running:'Describing image…'},version:'1.0.0',name:'Describe an image',description:'Turn one owned image into concise production-ready visual notes.',kind:'task',runtime:'capability',entry:'src/capability.json',license:'MIT',provenance:EXAMPLE_PROVENANCE,inputs:{image:{type:'image',primary:true,semantic:'source_image',required:true,description:'Owned image to inspect for visible production details.'}},outputs:{description:{type:'text',primary:true,role:'visual_description',semantic:'visual_description',description:'Concise production notes based only on visible image details.'}},permissions:{project:[],capabilities:['image.describe'],network:[],filesystem:[],secrets:[]},ui:[{control:'asset',port:'image'}]},
7
7
  capability:{schemaVersion:1,operation:'image.describe',image:{$input:'image'},instruction:'Describe only visibly supported subject matter, composition, lighting, color, texture, camera feel and visual style. Return concise production-ready plain text.',maxTokens:700,output:'description'},
8
8
  tests:[{name:'Blue image',input:{image:{width:1,height:1,data:[20,80,200,255]}},expectations:{description:{kind:'text',minLength:20,maxLength:32768,includes:['blue']}}}],
9
9
  };