image-sprout 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -67,6 +67,30 @@ npm install
67
67
 
68
68
  From the repo checkout, you can run the app with the local scripts or run the built CLI directly.
69
69
 
70
+ ### Install As An Agent Skill
71
+
72
+ If you're using an AI agent runtime, install the skill instead of the CLI:
73
+
74
+ **ClawHub (OpenClaw):**
75
+
76
+ ```bash
77
+ npx clawhub@latest install image-sprout
78
+ ```
79
+
80
+ Or if the ClawHub CLI is already installed:
81
+
82
+ ```bash
83
+ clawhub install image-sprout
84
+ ```
85
+
86
+ **tmc-marketplace (Claude Code / Codex):**
87
+
88
+ ```bash
89
+ claude plugin add tmchow/tmc-marketplace/plugins/image-sprout
90
+ ```
91
+
92
+ **Manual:** point your agent at the [skill file](https://raw.githubusercontent.com/tmchow/image-sprout/main/skills/agents/SKILL.md) directly. This won't auto-update when new versions are released.
93
+
70
94
  ## How To Run It
71
95
 
72
96
  You can use either mode.
@@ -81,6 +105,18 @@ image-sprout web
81
105
 
82
106
  This starts the interactive local app backed by the same on-disk store the CLI uses.
83
107
 
108
+ Pass `--open` to automatically open the app in your default browser:
109
+
110
+ ```bash
111
+ image-sprout web --open
112
+ ```
113
+
114
+ Pass `--port` to use a custom port (default is 4310):
115
+
116
+ ```bash
117
+ image-sprout web --port 8080
118
+ ```
119
+
84
120
  ### CLI
85
121
 
86
122
  Run CLI commands directly:
@@ -145,6 +181,22 @@ image-sprout model set-default google/gemini-3.1-flash-image-preview
145
181
  image-sprout model restore-defaults
146
182
  ```
147
183
 
184
+ ### Analysis Model
185
+
186
+ Guide derivation uses a separate analysis model. The default is `google/gemini-3.1-flash-image-preview`.
187
+
188
+ To use a different model for derivation:
189
+
190
+ ```bash
191
+ image-sprout config set analysisModel <openrouter-model-id>
192
+ ```
193
+
194
+ You can also override it per-command:
195
+
196
+ ```bash
197
+ image-sprout project derive my-blog --target both --analysis-model google/gemini-2.5-flash
198
+ ```
199
+
148
200
  ## Recommended Project Setup
149
201
 
150
202
  The general workflow is:
@@ -208,6 +260,8 @@ Recommended mapping:
208
260
  - subject-only project: derive subject
209
261
  - style-and-subject project: derive both
210
262
 
263
+ When deriving both guides from different reference sets, both analyses run in parallel.
264
+
211
265
  Review the derived text before saving it.
212
266
 
213
267
  ### 5. Save The Project Profile
@@ -221,7 +275,7 @@ Project Settings does not auto-save guide edits. Save after:
221
275
 
222
276
  Once the project is configured, generate from the main canvas.
223
277
 
224
- The main prompt is the per-run request.
278
+ The main prompt is the per-run request. The image count can be 1, 2, 4, or 6.
225
279
 
226
280
  Examples:
227
281
  - `a flower in a forest`
@@ -299,6 +353,12 @@ image-sprout project status my-blog
299
353
  image-sprout project generate my-blog --prompt "a flower in a forest"
300
354
  ```
301
355
 
356
+ Generate a single image:
357
+
358
+ ```bash
359
+ image-sprout project generate my-blog --prompt "a flower in a forest" --count 1
360
+ ```
361
+
302
362
  ### 6. Inspect Sessions And Runs
303
363
 
304
364
  ```bash
@@ -307,6 +367,34 @@ image-sprout run list --project my-blog
307
367
  image-sprout run latest --project my-blog --json
308
368
  ```
309
369
 
370
+ ### 7. Delete Sessions
371
+
372
+ ```bash
373
+ image-sprout session delete --project my-blog <session-id>
374
+ ```
375
+
376
+ Deleting a session removes the session and all of its runs and generated images.
377
+
378
+ ## CLI Aliases
379
+
380
+ For convenience, `generate` and `analyze` are available as top-level aliases:
381
+
382
+ ```bash
383
+ image-sprout generate --project my-blog --prompt "a flower in a forest"
384
+ image-sprout analyze --project my-blog --target both
385
+ ```
386
+
387
+ These are shorthand for `project generate` and `project derive`, respectively.
388
+
389
+ ## Agent Skills
390
+
391
+ Image Sprout ships skill files so AI agents can use the full workflow — project setup, reference management, guide derivation, generation, and result inspection — without additional documentation. See [Install As An Agent Skill](#install-as-an-agent-skill) for setup.
392
+
393
+ | Runtime | Path | Distribution |
394
+ |---------|------|--------------|
395
+ | OpenClaw / ClawHub | `skills/openclaw/SKILL.md` | Published to ClawHub directly |
396
+ | Claude Code + Codex | `skills/agents/SKILL.md` | Via tmc-marketplace plugin |
397
+
310
398
  ## CLI For Agents
311
399
 
312
400
  The CLI is the better mode for AI agents because it:
@@ -329,7 +417,29 @@ image-sprout run latest --project my-blog --json
329
417
  image-sprout help
330
418
  image-sprout project --help
331
419
  image-sprout ref --help
420
+ image-sprout session --help
332
421
  image-sprout model --help
422
+ image-sprout config --help
423
+ ```
424
+
425
+ ## Configuration
426
+
427
+ The following config keys are available:
428
+
429
+ | Key | Description | Default |
430
+ |-----|-------------|---------|
431
+ | `apiKey` | OpenRouter API key | (empty) |
432
+ | `model` | Default generation model | `google/gemini-3.1-flash-image-preview` |
433
+ | `sizePreset` | Default image aspect ratio (`16:9`, `1:1`, `9:16`) | `16:9` |
434
+ | `imageCount` | Default number of images per run (`1`, `2`, `4`, `6`) | `4` |
435
+ | `analysisModel` | Model used for guide derivation | `google/gemini-3.1-flash-image-preview` |
436
+
437
+ ```bash
438
+ image-sprout config show
439
+ image-sprout config set <key> <value>
440
+ image-sprout config get <key>
441
+ image-sprout config unset <key>
442
+ image-sprout config path
333
443
  ```
334
444
 
335
445
  ## Development
@@ -340,8 +450,6 @@ For local repo development:
340
450
  npm install
341
451
  ```
342
452
 
343
-
344
-
345
453
  ```bash
346
454
  npm run dev # Vite dev server
347
455
  npm run build # Build the web app
@@ -0,0 +1,3 @@
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))n(a);new MutationObserver(a=>{for(const s of a)if(s.type==="childList")for(const u of s.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&n(u)}).observe(document,{childList:!0,subtree:!0});function r(a){const s={};return a.integrity&&(s.integrity=a.integrity),a.referrerPolicy&&(s.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?s.credentials="include":a.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function n(a){if(a.ep)return;a.ep=!0;const s=r(a);fetch(a.href,s)}})();const Zr=!1;var hn=Array.isArray,Ps=Array.prototype.indexOf,Vt=Array.prototype.includes,Tr=Array.from,Cs=Object.defineProperty,Ht=Object.getOwnPropertyDescriptor,ia=Object.getOwnPropertyDescriptors,Is=Object.prototype,Ms=Array.prototype,gn=Object.getPrototypeOf,Bn=Object.isExtensible;const Ds=()=>{};function Ts(e){return e()}function $r(e){for(var t=0;t<e.length;t++)e[t]()}function oa(){var e,t,r=new Promise((n,a)=>{e=n,t=a});return{promise:r,resolve:e,reject:t}}const _e=2,Qt=4,At=8,bn=1<<24,kt=16,Ze=32,Lt=64,Qr=128,Be=512,ge=1024,be=2048,Xe=4096,je=8192,rt=16384,er=32768,Jt=65536,Gn=1<<17,As=1<<18,tr=1<<19,la=1<<20,et=1<<25,Ot=65536,en=1<<21,mn=1<<22,mt=1<<23,lt=Symbol("$state"),Os=Symbol("legacy props"),Fs=Symbol(""),Pt=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},Ns=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml");function ua(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Ls(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Us(e,t,r){throw new Error("https://svelte.dev/e/each_key_duplicate")}function zs(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Bs(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Gs(e){throw new Error("https://svelte.dev/e/effect_orphan")}function qs(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Ks(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Hs(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function Vs(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Js(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ws(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Ys=1,Xs=2,ca=4,Zs=8,$s=16,Qs=1,ei=2,ti=4,ri=8,ni=16,ai=1,si=2,he=Symbol(),da="http://www.w3.org/1999/xhtml";function ii(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function oi(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function fa(e){return e===this.v}function li(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function va(e){return!li(e,this.v)}let rr=!1,ui=!1;function ci(){rr=!0}let ce=null;function Wt(e){ce=e}function ke(e,t=!1,r){ce={p:ce,i:!1,c:null,e:null,s:e,x:null,l:rr&&!t?{s:null,u:null,$:[]}:null}}function Se(e){var t=ce,r=t.e;if(r!==null){t.e=null;for(var n of r)Ma(n)}return t.i=!0,ce=t.p,{}}function gr(){return!rr||ce!==null&&ce.l===null}let Ct=[];function pa(){var e=Ct;Ct=[],$r(e)}function ut(e){if(Ct.length===0&&!dr){var t=Ct;queueMicrotask(()=>{t===Ct&&pa()})}Ct.push(e)}function di(){for(;Ct.length>0;)pa()}function ha(e){var t=re;if(t===null)return Q.f|=mt,e;if((t.f&er)===0&&(t.f&Qt)===0)throw e;bt(e,t)}function bt(e,t){for(;t!==null;){if((t.f&Qr)!==0){if((t.f&er)===0)throw e;try{t.b.error(e);return}catch(r){e=r}}t=t.parent}throw e}const fi=-7169;function fe(e,t){e.f=e.f&fi|t}function _n(e){(e.f&Be)!==0||e.deps===null?fe(e,ge):fe(e,Xe)}function ga(e){if(e!==null)for(const t of e)(t.f&_e)===0||(t.f&Ot)===0||(t.f^=Ot,ga(t.deps))}function ba(e,t,r){(e.f&be)!==0?t.add(e):(e.f&Xe)!==0&&r.add(e),ga(e.deps),fe(e,ge)}const jr=new Set;let se=null,tn=null,Je=null,Ce=[],Ar=null,dr=!1,Yt=null,vi=1;class _t{id=vi++;current=new Map;previous=new Map;#e=new Set;#o=new Set;#t=0;#i=0;#r=null;#s=new Set;#n=new Set;#a=new Map;is_fork=!1;#l=!1;#c(){return this.is_fork||this.#i>0}skip_effect(t){this.#a.has(t)||this.#a.set(t,{d:[],m:[]})}unskip_effect(t){var r=this.#a.get(t);if(r){this.#a.delete(t);for(var n of r.d)fe(n,be),tt(n);for(n of r.m)fe(n,Xe),tt(n)}}process(t){Ce=[],this.apply();var r=Yt=[],n=[];for(const a of t)this.#u(a,r,n);if(Yt=null,this.#c()){this.#d(n),this.#d(r);for(const[a,s]of this.#a)ya(a,s)}else{tn=this,se=null;for(const a of this.#e)a(this);this.#e.clear(),this.#t===0&&this.#f(),qn(n),qn(r),this.#s.clear(),this.#n.clear(),tn=null,this.#r?.resolve()}Je=null}#u(t,r,n){t.f^=ge;for(var a=t.first;a!==null;){var s=a.f,u=(s&(Ze|Lt))!==0,d=u&&(s&ge)!==0,o=(s&je)!==0,f=d||this.#a.has(a);if(!f&&a.fn!==null){u?o||(a.f^=ge):(s&Qt)!==0?r.push(a):(s&(At|bn))!==0&&o?n.push(a):_r(a)&&($t(a),(s&kt)!==0&&(this.#n.add(a),o&&fe(a,be)));var v=a.first;if(v!==null){a=v;continue}}for(;a!==null;){var m=a.next;if(m!==null){a=m;break}a=a.parent}}}#d(t){for(var r=0;r<t.length;r+=1)ba(t[r],this.#s,this.#n)}capture(t,r){r!==he&&!this.previous.has(t)&&this.previous.set(t,r),(t.f&mt)===0&&(this.current.set(t,t.v),Je?.set(t,t.v))}activate(){se=this,this.apply()}deactivate(){se===this&&(se=null,Je=null)}flush(){if(Ce.length>0)se=this,ma();else if(this.#t===0&&!this.is_fork){for(const t of this.#e)t(this);this.#e.clear(),this.#f(),this.#r?.resolve()}this.deactivate()}discard(){for(const t of this.#o)t(this);this.#o.clear()}#f(){if(jr.size>1){this.previous.clear();var t=se,r=Je,n=!0;for(const s of jr){if(s===this){n=!1;continue}const u=[];for(const[o,f]of this.current){if(s.current.has(o))if(n&&f!==s.current.get(o))s.current.set(o,f);else continue;u.push(o)}if(u.length===0)continue;const d=[...s.current.keys()].filter(o=>!this.current.has(o));if(d.length>0){var a=Ce;Ce=[];const o=new Set,f=new Map;for(const v of u)_a(v,d,o,f);if(Ce.length>0){se=s,s.apply();for(const v of Ce)s.#u(v,[],[]);s.deactivate()}Ce=a}}se=t,Je=r}this.#a.clear(),jr.delete(this)}increment(t){this.#t+=1,t&&(this.#i+=1)}decrement(t){this.#t-=1,t&&(this.#i-=1),!this.#l&&(this.#l=!0,ut(()=>{this.#l=!1,this.#c()?Ce.length>0&&this.flush():this.revive()}))}revive(){for(const t of this.#s)this.#n.delete(t),fe(t,be),tt(t);for(const t of this.#n)fe(t,Xe),tt(t);this.flush()}oncommit(t){this.#e.add(t)}ondiscard(t){this.#o.add(t)}settled(){return(this.#r??=oa()).promise}static ensure(){if(se===null){const t=se=new _t;jr.add(se),dr||ut(()=>{se===t&&t.flush()})}return se}apply(){}}function pi(e){var t=dr;dr=!0;try{for(var r;;){if(di(),Ce.length===0&&(se?.flush(),Ce.length===0))return Ar=null,r;ma()}}finally{dr=t}}function ma(){var e=null;try{for(var t=0;Ce.length>0;){var r=_t.ensure();if(t++>1e3){var n,a;hi()}r.process(Ce),xt.clear()}}finally{Ce=[],Ar=null,Yt=null}}function hi(){try{qs()}catch(e){bt(e,Ar)}}let ot=null;function qn(e){var t=e.length;if(t!==0){for(var r=0;r<t;){var n=e[r++];if((n.f&(rt|je))===0&&_r(n)&&(ot=new Set,$t(n),n.deps===null&&n.first===null&&n.nodes===null&&n.teardown===null&&n.ac===null&&Ta(n),ot?.size>0)){xt.clear();for(const a of ot){if((a.f&(rt|je))!==0)continue;const s=[a];let u=a.parent;for(;u!==null;)ot.has(u)&&(ot.delete(u),s.push(u)),u=u.parent;for(let d=s.length-1;d>=0;d--){const o=s[d];(o.f&(rt|je))===0&&$t(o)}}ot.clear()}}ot=null}}function _a(e,t,r,n){if(!r.has(e)&&(r.add(e),e.reactions!==null))for(const a of e.reactions){const s=a.f;(s&_e)!==0?_a(a,t,r,n):(s&(mn|kt))!==0&&(s&be)===0&&xa(a,t,n)&&(fe(a,be),tt(a))}}function xa(e,t,r){const n=r.get(e);if(n!==void 0)return n;if(e.deps!==null)for(const a of e.deps){if(Vt.call(t,a))return!0;if((a.f&_e)!==0&&xa(a,t,r))return r.set(a,!0),!0}return r.set(e,!1),!1}function tt(e){var t=Ar=e,r=t.b;if(r?.is_pending&&(e.f&(Qt|At|bn))!==0&&(e.f&er)===0){r.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var n=t.f;if(Yt!==null&&t===re&&(e.f&At)===0)return;if((n&(Lt|Ze))!==0){if((n&ge)===0)return;t.f^=ge}}Ce.push(t)}function ya(e,t){if(!((e.f&Ze)!==0&&(e.f&ge)!==0)){(e.f&be)!==0?t.d.push(e):(e.f&Xe)!==0&&t.m.push(e),fe(e,ge);for(var r=e.first;r!==null;)ya(r,t),r=r.next}}function gi(e){let t=0,r=Ft(0),n;return()=>{yn()&&(i(r),kn(()=>(t===0&&(n=Ut(()=>e(()=>fr(r)))),t+=1,()=>{ut(()=>{t-=1,t===0&&(n?.(),n=void 0,fr(r))})})))}}var bi=Jt|tr;function mi(e,t,r,n){new _i(e,t,r,n)}class _i{parent;is_pending=!1;transform_error;#e;#o=null;#t;#i;#r;#s=null;#n=null;#a=null;#l=null;#c=0;#u=0;#d=!1;#f=new Set;#p=new Set;#v=null;#_=gi(()=>(this.#v=Ft(this.#c),()=>{this.#v=null}));constructor(t,r,n,a){this.#e=t,this.#t=r,this.#i=s=>{var u=re;u.b=this,u.f|=Qr,n(s)},this.parent=re.b,this.transform_error=a??this.parent?.transform_error??(s=>s),this.#r=Sn(()=>{this.#b()},bi)}#x(){try{this.#s=ze(()=>this.#i(this.#e))}catch(t){this.error(t)}}#y(t){const r=this.#t.failed;r&&(this.#a=ze(()=>{r(this.#e,()=>t,()=>()=>{})}))}#w(){const t=this.#t.pending;t&&(this.is_pending=!0,this.#n=ze(()=>t(this.#e)),ut(()=>{var r=this.#l=document.createDocumentFragment(),n=yt();r.append(n),this.#s=this.#g(()=>(_t.ensure(),ze(()=>this.#i(n)))),this.#u===0&&(this.#e.before(r),this.#l=null,Dt(this.#n,()=>{this.#n=null}),this.#h())}))}#b(){try{if(this.is_pending=this.has_pending_snippet(),this.#u=0,this.#c=0,this.#s=ze(()=>{this.#i(this.#e)}),this.#u>0){var t=this.#l=document.createDocumentFragment();Rn(this.#s,t);const r=this.#t.pending;this.#n=ze(()=>r(this.#e))}else this.#h()}catch(r){this.error(r)}}#h(){this.is_pending=!1;for(const t of this.#f)fe(t,be),tt(t);for(const t of this.#p)fe(t,Xe),tt(t);this.#f.clear(),this.#p.clear()}defer_effect(t){ba(t,this.#f,this.#p)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#t.pending}#g(t){var r=re,n=Q,a=ce;nt(this.#r),qe(this.#r),Wt(this.#r.ctx);try{return t()}catch(s){return ha(s),null}finally{nt(r),qe(n),Wt(a)}}#m(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#m(t);return}this.#u+=t,this.#u===0&&(this.#h(),this.#n&&Dt(this.#n,()=>{this.#n=null}),this.#l&&(this.#e.before(this.#l),this.#l=null))}update_pending_count(t){this.#m(t),this.#c+=t,!(!this.#v||this.#d)&&(this.#d=!0,ut(()=>{this.#d=!1,this.#v&&Xt(this.#v,this.#c)}))}get_effect_pending(){return this.#_(),i(this.#v)}error(t){var r=this.#t.onerror;let n=this.#t.failed;if(!r&&!n)throw t;this.#s&&(Me(this.#s),this.#s=null),this.#n&&(Me(this.#n),this.#n=null),this.#a&&(Me(this.#a),this.#a=null);var a=!1,s=!1;const u=()=>{if(a){oi();return}a=!0,s&&Ws(),this.#a!==null&&Dt(this.#a,()=>{this.#a=null}),this.#g(()=>{_t.ensure(),this.#b()})},d=o=>{try{s=!0,r?.(o,u),s=!1}catch(f){bt(f,this.#r&&this.#r.parent)}n&&(this.#a=this.#g(()=>{_t.ensure();try{return ze(()=>{var f=re;f.b=this,f.f|=Qr,n(this.#e,()=>o,()=>u)})}catch(f){return bt(f,this.#r.parent),null}}))};ut(()=>{var o;try{o=this.transform_error(t)}catch(f){bt(f,this.#r&&this.#r.parent);return}o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(d,f=>bt(f,this.#r&&this.#r.parent)):d(o)})}}function xi(e,t,r,n){const a=gr()?br:Or;var s=e.filter(m=>!m.settled);if(r.length===0&&s.length===0){n(t.map(a));return}var u=re,d=yi(),o=s.length===1?s[0].promise:s.length>1?Promise.all(s.map(m=>m.promise)):null;function f(m){d();try{n(m)}catch(h){(u.f&rt)===0&&bt(h,u)}rn()}if(r.length===0){o.then(()=>f(t.map(a)));return}function v(){d(),Promise.all(r.map(m=>ki(m))).then(m=>f([...t.map(a),...m])).catch(m=>bt(m,u))}o?o.then(v):v()}function yi(){var e=re,t=Q,r=ce,n=se;return function(s=!0){nt(e),qe(t),Wt(r),s&&n?.activate()}}function rn(e=!0){nt(null),qe(null),Wt(null),e&&se?.deactivate()}function wi(){var e=re.b,t=se,r=e.is_rendered();return e.update_pending_count(1),t.increment(r),()=>{e.update_pending_count(-1),t.decrement(r)}}function br(e){var t=_e|be,r=Q!==null&&(Q.f&_e)!==0?Q:null;return re!==null&&(re.f|=tr),{ctx:ce,deps:null,effects:null,equals:fa,f:t,fn:e,reactions:null,rv:0,v:he,wv:0,parent:r??re,ac:null}}function ki(e,t,r){re===null&&Ls();var a=void 0,s=Ft(he),u=!Q,d=new Map;return Ui(()=>{var o=oa();a=o.promise;try{Promise.resolve(e()).then(o.resolve,o.reject).finally(rn)}catch(h){o.reject(h),rn()}var f=se;if(u){var v=wi();d.get(f)?.reject(Pt),d.delete(f),d.set(f,o)}const m=(h,P=void 0)=>{if(f.activate(),P)P!==Pt&&(s.f|=mt,Xt(s,P));else{(s.f&mt)!==0&&(s.f^=mt),Xt(s,h);for(const[g,_]of d){if(d.delete(g),g===f)break;_.reject(Pt)}}v&&v()};o.promise.then(m,h=>m(null,h||"unknown"))}),wn(()=>{for(const o of d.values())o.reject(Pt)}),new Promise(o=>{function f(v){function m(){v===a?o(s):f(a)}v.then(m,m)}f(a)})}function ee(e){const t=br(e);return Fa(t),t}function Or(e){const t=br(e);return t.equals=va,t}function Si(e){var t=e.effects;if(t!==null){e.effects=null;for(var r=0;r<t.length;r+=1)Me(t[r])}}function ji(e){for(var t=e.parent;t!==null;){if((t.f&_e)===0)return(t.f&rt)===0?t:null;t=t.parent}return null}function xn(e){var t,r=re;nt(ji(e));try{e.f&=~Ot,Si(e),t=za(e)}finally{nt(r)}return t}function wa(e){var t=xn(e);if(!e.equals(t)&&(e.wv=La(),(!se?.is_fork||e.deps===null)&&(e.v=t,e.deps===null))){fe(e,ge);return}wt||(Je!==null?(yn()||se?.is_fork)&&Je.set(e,t):_n(e))}function Ei(e){if(e.effects!==null)for(const t of e.effects)(t.teardown||t.ac)&&(t.teardown?.(),t.ac?.abort(Pt),t.teardown=Ds,t.ac=null,vr(t,0),jn(t))}function ka(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&$t(t)}let nn=new Set;const xt=new Map;let Sa=!1;function Ft(e,t){var r={f:0,v:e,reactions:null,equals:fa,rv:0,wv:0};return r}function L(e,t){const r=Ft(e);return Fa(r),r}function Ri(e,t=!1,r=!0){const n=Ft(e);return t||(n.equals=va),rr&&r&&ce!==null&&ce.l!==null&&(ce.l.s??=[]).push(n),n}function l(e,t,r=!1){Q!==null&&(!We||(Q.f&Gn)!==0)&&gr()&&(Q.f&(_e|kt|mn|Gn))!==0&&(Ge===null||!Vt.call(Ge,e))&&Js();let n=r?Fe(t):t;return Xt(e,n)}function Xt(e,t){if(!e.equals(t)){var r=e.v;wt?xt.set(e,t):xt.set(e,r),e.v=t;var n=_t.ensure();if(n.capture(e,r),(e.f&_e)!==0){const a=e;(e.f&be)!==0&&xn(a),_n(a)}e.wv=La(),ja(e,be),gr()&&re!==null&&(re.f&ge)!==0&&(re.f&(Ze|Lt))===0&&(Ue===null?Gi([e]):Ue.push(e)),!n.is_fork&&nn.size>0&&!Sa&&Pi()}return t}function Pi(){Sa=!1;for(const e of nn)(e.f&ge)!==0&&fe(e,Xe),_r(e)&&$t(e);nn.clear()}function fr(e){l(e,e.v+1)}function ja(e,t){var r=e.reactions;if(r!==null)for(var n=gr(),a=r.length,s=0;s<a;s++){var u=r[s],d=u.f;if(!(!n&&u===re)){var o=(d&be)===0;if(o&&fe(u,t),(d&_e)!==0){var f=u;Je?.delete(f),(d&Ot)===0&&(d&Be&&(u.f|=Ot),ja(f,Xe))}else o&&((d&kt)!==0&&ot!==null&&ot.add(u),tt(u))}}}function Fe(e){if(typeof e!="object"||e===null||lt in e)return e;const t=gn(e);if(t!==Is&&t!==Ms)return e;var r=new Map,n=hn(e),a=L(0),s=Tt,u=d=>{if(Tt===s)return d();var o=Q,f=Tt;qe(null),Wn(s);var v=d();return qe(o),Wn(f),v};return n&&r.set("length",L(e.length)),new Proxy(e,{defineProperty(d,o,f){(!("value"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&Hs();var v=r.get(o);return v===void 0?u(()=>{var m=L(f.value);return r.set(o,m),m}):l(v,f.value,!0),!0},deleteProperty(d,o){var f=r.get(o);if(f===void 0){if(o in d){const v=u(()=>L(he));r.set(o,v),fr(a)}}else l(f,he),fr(a);return!0},get(d,o,f){if(o===lt)return e;var v=r.get(o),m=o in d;if(v===void 0&&(!m||Ht(d,o)?.writable)&&(v=u(()=>{var P=Fe(m?d[o]:he),g=L(P);return g}),r.set(o,v)),v!==void 0){var h=i(v);return h===he?void 0:h}return Reflect.get(d,o,f)},getOwnPropertyDescriptor(d,o){var f=Reflect.getOwnPropertyDescriptor(d,o);if(f&&"value"in f){var v=r.get(o);v&&(f.value=i(v))}else if(f===void 0){var m=r.get(o),h=m?.v;if(m!==void 0&&h!==he)return{enumerable:!0,configurable:!0,value:h,writable:!0}}return f},has(d,o){if(o===lt)return!0;var f=r.get(o),v=f!==void 0&&f.v!==he||Reflect.has(d,o);if(f!==void 0||re!==null&&(!v||Ht(d,o)?.writable)){f===void 0&&(f=u(()=>{var h=v?Fe(d[o]):he,P=L(h);return P}),r.set(o,f));var m=i(f);if(m===he)return!1}return v},set(d,o,f,v){var m=r.get(o),h=o in d;if(n&&o==="length")for(var P=f;P<m.v;P+=1){var g=r.get(P+"");g!==void 0?l(g,he):P in d&&(g=u(()=>L(he)),r.set(P+"",g))}if(m===void 0)(!h||Ht(d,o)?.writable)&&(m=u(()=>L(void 0)),l(m,Fe(f)),r.set(o,m));else{h=m.v!==he;var _=u(()=>Fe(f));l(m,_)}var x=Reflect.getOwnPropertyDescriptor(d,o);if(x?.set&&x.set.call(v,f),!h){if(n&&typeof o=="string"){var y=r.get("length"),N=Number(o);Number.isInteger(N)&&N>=y.v&&l(y,N+1)}fr(a)}return!0},ownKeys(d){i(a);var o=Reflect.ownKeys(d).filter(m=>{var h=r.get(m);return h===void 0||h.v!==he});for(var[f,v]of r)v.v!==he&&!(f in d)&&o.push(f);return o},setPrototypeOf(){Vs()}})}function Kn(e){try{if(e!==null&&typeof e=="object"&&lt in e)return e[lt]}catch{}return e}function Ci(e,t){return Object.is(Kn(e),Kn(t))}var Hn,Ea,Ra,Pa;function Ii(){if(Hn===void 0){Hn=window,Ea=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,r=Text.prototype;Ra=Ht(t,"firstChild").get,Pa=Ht(t,"nextSibling").get,Bn(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),Bn(r)&&(r.__t=void 0)}}function yt(e=""){return document.createTextNode(e)}function Zt(e){return Ra.call(e)}function mr(e){return Pa.call(e)}function c(e,t){return Zt(e)}function me(e,t=!1){{var r=Zt(e);return r instanceof Comment&&r.data===""?mr(r):r}}function p(e,t=1,r=!1){let n=e;for(;t--;)n=mr(n);return n}function Mi(e){e.textContent=""}function Ca(){return!1}function Di(e,t,r){return document.createElementNS(da,e,void 0)}let Vn=!1;function Ti(){Vn||(Vn=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Fr(e){var t=Q,r=re;qe(null),nt(null);try{return e()}finally{qe(t),nt(r)}}function Ai(e,t,r,n=r){e.addEventListener(t,()=>Fr(r));const a=e.__on_r;a?e.__on_r=()=>{a(),n(!0)}:e.__on_r=()=>n(!0),Ti()}function Ia(e){re===null&&(Q===null&&Gs(),Bs()),wt&&zs()}function Oi(e,t){var r=t.last;r===null?t.last=t.first=e:(r.next=e,e.prev=r,t.last=e)}function st(e,t){var r=re;r!==null&&(r.f&je)!==0&&(e|=je);var n={ctx:ce,deps:null,nodes:null,f:e|be|Be,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null},a=n;if((e&Qt)!==0)Yt!==null?Yt.push(n):tt(n);else if(t!==null){try{$t(n)}catch(u){throw Me(n),u}a.deps===null&&a.teardown===null&&a.nodes===null&&a.first===a.last&&(a.f&tr)===0&&(a=a.first,(e&kt)!==0&&(e&Jt)!==0&&a!==null&&(a.f|=Jt))}if(a!==null&&(a.parent=r,r!==null&&Oi(a,r),Q!==null&&(Q.f&_e)!==0&&(e&Lt)===0)){var s=Q;(s.effects??=[]).push(a)}return n}function yn(){return Q!==null&&!We}function wn(e){const t=st(At,null);return fe(t,ge),t.teardown=e,t}function ct(e){Ia();var t=re.f,r=!Q&&(t&Ze)!==0&&(t&er)===0;if(r){var n=ce;(n.e??=[]).push(e)}else return Ma(e)}function Ma(e){return st(Qt|la,e)}function Fi(e){return Ia(),st(At|la,e)}function Ni(e){_t.ensure();const t=st(Lt|tr,e);return(r={})=>new Promise(n=>{r.outro?Dt(t,()=>{Me(t),n(void 0)}):(Me(t),n(void 0))})}function Li(e){return st(Qt,e)}function Ui(e){return st(mn|tr,e)}function kn(e,t=0){return st(At|t,e)}function q(e,t=[],r=[],n=[]){xi(n,t,r,a=>{st(At,()=>e(...a.map(i)))})}function Sn(e,t=0){var r=st(kt|t,e);return r}function ze(e){return st(Ze|tr,e)}function Da(e){var t=e.teardown;if(t!==null){const r=wt,n=Q;Jn(!0),qe(null);try{t.call(null)}finally{Jn(r),qe(n)}}}function jn(e,t=!1){var r=e.first;for(e.first=e.last=null;r!==null;){const a=r.ac;a!==null&&Fr(()=>{a.abort(Pt)});var n=r.next;(r.f&Lt)!==0?r.parent=null:Me(r,t),r=n}}function zi(e){for(var t=e.first;t!==null;){var r=t.next;(t.f&Ze)===0&&Me(t),t=r}}function Me(e,t=!0){var r=!1;(t||(e.f&As)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(Bi(e.nodes.start,e.nodes.end),r=!0),jn(e,t&&!r),vr(e,0),fe(e,rt);var n=e.nodes&&e.nodes.t;if(n!==null)for(const s of n)s.stop();Da(e);var a=e.parent;a!==null&&a.first!==null&&Ta(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function Bi(e,t){for(;e!==null;){var r=e===t?null:mr(e);e.remove(),e=r}}function Ta(e){var t=e.parent,r=e.prev,n=e.next;r!==null&&(r.next=n),n!==null&&(n.prev=r),t!==null&&(t.first===e&&(t.first=n),t.last===e&&(t.last=r))}function Dt(e,t,r=!0){var n=[];Aa(e,n,!0);var a=()=>{r&&Me(e),t&&t()},s=n.length;if(s>0){var u=()=>--s||a();for(var d of n)d.out(u)}else a()}function Aa(e,t,r){if((e.f&je)===0){e.f^=je;var n=e.nodes&&e.nodes.t;if(n!==null)for(const d of n)(d.is_global||r)&&t.push(d);for(var a=e.first;a!==null;){var s=a.next,u=(a.f&Jt)!==0||(a.f&Ze)!==0&&(e.f&kt)!==0;Aa(a,t,u?r:!1),a=s}}}function En(e){Oa(e,!0)}function Oa(e,t){if((e.f&je)!==0){e.f^=je;for(var r=e.first;r!==null;){var n=r.next,a=(r.f&Jt)!==0||(r.f&Ze)!==0;Oa(r,a?t:!1),r=n}var s=e.nodes&&e.nodes.t;if(s!==null)for(const u of s)(u.is_global||t)&&u.in()}}function Rn(e,t){if(e.nodes)for(var r=e.nodes.start,n=e.nodes.end;r!==null;){var a=r===n?null:mr(r);t.append(r),r=a}}let Cr=!1,wt=!1;function Jn(e){wt=e}let Q=null,We=!1;function qe(e){Q=e}let re=null;function nt(e){re=e}let Ge=null;function Fa(e){Q!==null&&(Ge===null?Ge=[e]:Ge.push(e))}let Ie=null,Oe=0,Ue=null;function Gi(e){Ue=e}let Na=1,It=0,Tt=It;function Wn(e){Tt=e}function La(){return++Na}function _r(e){var t=e.f;if((t&be)!==0)return!0;if(t&_e&&(e.f&=~Ot),(t&Xe)!==0){for(var r=e.deps,n=r.length,a=0;a<n;a++){var s=r[a];if(_r(s)&&wa(s),s.wv>e.wv)return!0}(t&Be)!==0&&Je===null&&fe(e,ge)}return!1}function Ua(e,t,r=!0){var n=e.reactions;if(n!==null&&!(Ge!==null&&Vt.call(Ge,e)))for(var a=0;a<n.length;a++){var s=n[a];(s.f&_e)!==0?Ua(s,t,!1):t===s&&(r?fe(s,be):(s.f&ge)!==0&&fe(s,Xe),tt(s))}}function za(e){var t=Ie,r=Oe,n=Ue,a=Q,s=Ge,u=ce,d=We,o=Tt,f=e.f;Ie=null,Oe=0,Ue=null,Q=(f&(Ze|Lt))===0?e:null,Ge=null,Wt(e.ctx),We=!1,Tt=++It,e.ac!==null&&(Fr(()=>{e.ac.abort(Pt)}),e.ac=null);try{e.f|=en;var v=e.fn,m=v();e.f|=er;var h=e.deps,P=se?.is_fork;if(Ie!==null){var g;if(P||vr(e,Oe),h!==null&&Oe>0)for(h.length=Oe+Ie.length,g=0;g<Ie.length;g++)h[Oe+g]=Ie[g];else e.deps=h=Ie;if(yn()&&(e.f&Be)!==0)for(g=Oe;g<h.length;g++)(h[g].reactions??=[]).push(e)}else!P&&h!==null&&Oe<h.length&&(vr(e,Oe),h.length=Oe);if(gr()&&Ue!==null&&!We&&h!==null&&(e.f&(_e|Xe|be))===0)for(g=0;g<Ue.length;g++)Ua(Ue[g],e);if(a!==null&&a!==e){if(It++,a.deps!==null)for(let _=0;_<r;_+=1)a.deps[_].rv=It;if(t!==null)for(const _ of t)_.rv=It;Ue!==null&&(n===null?n=Ue:n.push(...Ue))}return(e.f&mt)!==0&&(e.f^=mt),m}catch(_){return ha(_)}finally{e.f^=en,Ie=t,Oe=r,Ue=n,Q=a,Ge=s,Wt(u),We=d,Tt=o}}function qi(e,t){let r=t.reactions;if(r!==null){var n=Ps.call(r,e);if(n!==-1){var a=r.length-1;a===0?r=t.reactions=null:(r[n]=r[a],r.pop())}}if(r===null&&(t.f&_e)!==0&&(Ie===null||!Vt.call(Ie,t))){var s=t;(s.f&Be)!==0&&(s.f^=Be,s.f&=~Ot),_n(s),Ei(s),vr(s,0)}}function vr(e,t){var r=e.deps;if(r!==null)for(var n=t;n<r.length;n++)qi(e,r[n])}function $t(e){var t=e.f;if((t&rt)===0){fe(e,ge);var r=re,n=Cr;re=e,Cr=!0;try{(t&(kt|bn))!==0?zi(e):jn(e),Da(e);var a=za(e);e.teardown=typeof a=="function"?a:null,e.wv=Na;var s;Zr&&ui&&(e.f&be)!==0&&e.deps}finally{Cr=n,re=r}}}async function Ki(){await Promise.resolve(),pi()}function i(e){var t=e.f,r=(t&_e)!==0;if(Q!==null&&!We){var n=re!==null&&(re.f&rt)!==0;if(!n&&(Ge===null||!Vt.call(Ge,e))){var a=Q.deps;if((Q.f&en)!==0)e.rv<It&&(e.rv=It,Ie===null&&a!==null&&a[Oe]===e?Oe++:Ie===null?Ie=[e]:Ie.push(e));else{(Q.deps??=[]).push(e);var s=e.reactions;s===null?e.reactions=[Q]:Vt.call(s,Q)||s.push(Q)}}}if(wt&&xt.has(e))return xt.get(e);if(r){var u=e;if(wt){var d=u.v;return((u.f&ge)===0&&u.reactions!==null||Ga(u))&&(d=xn(u)),xt.set(u,d),d}var o=(u.f&Be)===0&&!We&&Q!==null&&(Cr||(Q.f&Be)!==0),f=(u.f&er)===0;_r(u)&&(o&&(u.f|=Be),wa(u)),o&&!f&&(ka(u),Ba(u))}if(Je?.has(e))return Je.get(e);if((e.f&mt)!==0)throw e.v;return e.v}function Ba(e){if(e.f|=Be,e.deps!==null)for(const t of e.deps)(t.reactions??=[]).push(e),(t.f&_e)!==0&&(t.f&Be)===0&&(ka(t),Ba(t))}function Ga(e){if(e.v===he)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(xt.has(t)||(t.f&_e)!==0&&Ga(t))return!0;return!1}function Ut(e){var t=We;try{return We=!0,e()}finally{We=t}}function Hi(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(lt in e)an(e);else if(!Array.isArray(e))for(let t in e){const r=e[t];typeof r=="object"&&r&&lt in r&&an(r)}}}function an(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let n in e)try{an(e[n],t)}catch{}const r=gn(e);if(r!==Object.prototype&&r!==Array.prototype&&r!==Map.prototype&&r!==Set.prototype&&r!==Date.prototype){const n=ia(r);for(let a in n){const s=n[a].get;if(s)try{s.call(e)}catch{}}}}}const Vi=["touchstart","touchmove"];function Ji(e){return Vi.includes(e)}const ur=Symbol("events"),qa=new Set,sn=new Set;function Wi(e,t,r,n={}){function a(s){if(n.capture||on.call(t,s),!s.cancelBubble)return Fr(()=>r?.call(this,s))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?ut(()=>{t.addEventListener(e,a,n)}):t.addEventListener(e,a,n),a}function Rt(e,t,r,n,a){var s={capture:n,passive:a},u=Wi(e,t,r,s);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&wn(()=>{t.removeEventListener(e,u,s)})}function D(e,t,r){(t[ur]??={})[e]=r}function De(e){for(var t=0;t<e.length;t++)qa.add(e[t]);for(var r of sn)r(e)}let Yn=null;function on(e){var t=this,r=t.ownerDocument,n=e.type,a=e.composedPath?.()||[],s=a[0]||e.target;Yn=e;var u=0,d=Yn===e&&e[ur];if(d){var o=a.indexOf(d);if(o!==-1&&(t===document||t===window)){e[ur]=t;return}var f=a.indexOf(t);if(f===-1)return;o<=f&&(u=o)}if(s=a[u]||e.target,s!==t){Cs(e,"currentTarget",{configurable:!0,get(){return s||r}});var v=Q,m=re;qe(null),nt(null);try{for(var h,P=[];s!==null;){var g=s.assignedSlot||s.parentNode||s.host||null;try{var _=s[ur]?.[n];_!=null&&(!s.disabled||e.target===s)&&_.call(s,e)}catch(x){h?P.push(x):h=x}if(e.cancelBubble||g===t||g===null)break;s=g}if(h){for(let x of P)queueMicrotask(()=>{throw x});throw h}}finally{e[ur]=t,delete e.currentTarget,qe(v),nt(m)}}}const Yi=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function Xi(e){return Yi?.createHTML(e)??e}function Ka(e){var t=Di("template");return t.innerHTML=Xi(e.replaceAll("<!>","<!---->")),t.content}function Ir(e,t){var r=re;r.nodes===null&&(r.nodes={start:e,end:t,a:null,t:null})}function E(e,t){var r=(t&ai)!==0,n=(t&si)!==0,a,s=!e.startsWith("<!>");return()=>{a===void 0&&(a=Ka(s?e:"<!>"+e),r||(a=Zt(a)));var u=n||Ea?document.importNode(a,!0):a.cloneNode(!0);if(r){var d=Zt(u),o=u.lastChild;Ir(d,o)}else Ir(u,u);return u}}function Zi(e,t,r="svg"){var n=!e.startsWith("<!>"),a=`<${r}>${n?e:"<!>"+e}</${r}>`,s;return()=>{if(!s){var u=Ka(a),d=Zt(u);s=Zt(d)}var o=s.cloneNode(!0);return Ir(o,o),o}}function $i(e,t){return Zi(e,t,"svg")}function xr(){var e=document.createDocumentFragment(),t=document.createComment(""),r=yt();return e.append(t,r),Ir(t,r),e}function k(e,t){e!==null&&e.before(t)}function K(e,t){var r=t==null?"":typeof t=="object"?`${t}`:t;r!==(e.__t??=e.nodeValue)&&(e.__t=r,e.nodeValue=`${r}`)}function Qi(e,t){return eo(e,t)}const Er=new Map;function eo(e,{target:t,anchor:r,props:n={},events:a,context:s,intro:u=!0,transformError:d}){Ii();var o=void 0,f=Ni(()=>{var v=r??t.appendChild(yt());mi(v,{pending:()=>{}},P=>{ke({});var g=ce;s&&(g.c=s),a&&(n.$$events=a),o=e(P,n)||{},Se()},d);var m=new Set,h=P=>{for(var g=0;g<P.length;g++){var _=P[g];if(!m.has(_)){m.add(_);var x=Ji(_);for(const M of[t,document]){var y=Er.get(M);y===void 0&&(y=new Map,Er.set(M,y));var N=y.get(_);N===void 0?(M.addEventListener(_,on,{passive:x}),y.set(_,1)):y.set(_,N+1)}}}};return h(Tr(qa)),sn.add(h),()=>{for(var P of m)for(const x of[t,document]){var g=Er.get(x),_=g.get(P);--_==0?(x.removeEventListener(P,on),g.delete(P),g.size===0&&Er.delete(x)):g.set(P,_)}sn.delete(h),v!==r&&v.parentNode?.removeChild(v)}});return to.set(o,f),o}let to=new WeakMap;class ro{anchor;#e=new Map;#o=new Map;#t=new Map;#i=new Set;#r=!0;constructor(t,r=!0){this.anchor=t,this.#r=r}#s=t=>{if(this.#e.has(t)){var r=this.#e.get(t),n=this.#o.get(r);if(n)En(n),this.#i.delete(r);else{var a=this.#t.get(r);a&&(a.effect.f&je)===0&&(this.#o.set(r,a.effect),this.#t.delete(r),a.fragment.lastChild.remove(),this.anchor.before(a.fragment),n=a.effect)}for(const[s,u]of this.#e){if(this.#e.delete(s),s===t)break;const d=this.#t.get(u);d&&(Me(d.effect),this.#t.delete(u))}for(const[s,u]of this.#o){if(s===r||this.#i.has(s)||(u.f&je)!==0)continue;const d=()=>{if(Array.from(this.#e.values()).includes(s)){var f=document.createDocumentFragment();Rn(u,f),f.append(yt()),this.#t.set(s,{effect:u,fragment:f})}else Me(u);this.#i.delete(s),this.#o.delete(s)};this.#r||!n?(this.#i.add(s),Dt(u,d,!1)):d()}}};#n=t=>{this.#e.delete(t);const r=Array.from(this.#e.values());for(const[n,a]of this.#t)r.includes(n)||(Me(a.effect),this.#t.delete(n))};ensure(t,r){var n=se,a=Ca();if(r&&!this.#o.has(t)&&!this.#t.has(t))if(a){var s=document.createDocumentFragment(),u=yt();s.append(u),this.#t.set(t,{effect:ze(()=>r(u)),fragment:s})}else this.#o.set(t,ze(()=>r(this.anchor)));if(this.#e.set(n,t),a){for(const[d,o]of this.#o)d===t?n.unskip_effect(o):n.skip_effect(o);for(const[d,o]of this.#t)d===t?n.unskip_effect(o.effect):n.skip_effect(o.effect);n.oncommit(this.#s),n.ondiscard(this.#n)}else this.#s(n)}}function G(e,t,r=!1){var n=new ro(e),a=r?Jt:0;function s(u,d){n.ensure(u,d)}Sn(()=>{var u=!1;t((d,o=0)=>{u=!0,s(o,d)}),u||s(-1,null)},a)}function Jr(e,t){return t}function no(e,t,r){for(var n=[],a=t.length,s,u=t.length,d=0;d<a;d++){let m=t[d];Dt(m,()=>{if(s){if(s.pending.delete(m),s.done.add(m),s.pending.size===0){var h=e.outrogroups;ln(e,Tr(s.done)),h.delete(s),h.size===0&&(e.outrogroups=null)}}else u-=1},!1)}if(u===0){var o=n.length===0&&r!==null;if(o){var f=r,v=f.parentNode;Mi(v),v.append(f),e.items.clear()}ln(e,t,!o)}else s={pending:new Set(t),done:new Set},(e.outrogroups??=new Set).add(s)}function ln(e,t,r=!0){var n;if(e.pending.size>0){n=new Set;for(const u of e.pending.values())for(const d of u)n.add(e.items.get(d).e)}for(var a=0;a<t.length;a++){var s=t[a];if(n?.has(s)){s.f|=et;const u=document.createDocumentFragment();Rn(s,u)}else Me(t[a],r)}}var Xn;function Ye(e,t,r,n,a,s=null){var u=e,d=new Map,o=(t&ca)!==0;if(o){var f=e;u=f.appendChild(yt())}var v=null,m=Or(()=>{var M=r();return hn(M)?M:M==null?[]:Tr(M)}),h,P=new Map,g=!0;function _(M){(N.effect.f&rt)===0&&(N.pending.delete(M),N.fallback=v,ao(N,h,u,t,n),v!==null&&(h.length===0?(v.f&et)===0?En(v):(v.f^=et,cr(v,null,u)):Dt(v,()=>{v=null})))}function x(M){N.pending.delete(M)}var y=Sn(()=>{h=i(m);for(var M=h.length,A=new Set,O=se,b=Ca(),w=0;w<M;w+=1){var S=h[w],F=n(S,w),z=g?null:d.get(F);z?(z.v&&Xt(z.v,S),z.i&&Xt(z.i,w),b&&O.unskip_effect(z.e)):(z=so(d,g?u:Xn??=yt(),S,F,w,a,t,r),g||(z.e.f|=et),d.set(F,z)),A.add(F)}if(M===0&&s&&!v&&(g?v=ze(()=>s(u)):(v=ze(()=>s(Xn??=yt())),v.f|=et)),M>A.size&&Us(),!g)if(P.set(O,A),b){for(const[V,J]of d)A.has(V)||O.skip_effect(J.e);O.oncommit(_),O.ondiscard(x)}else _(O);i(m)}),N={effect:y,items:d,pending:P,outrogroups:null,fallback:v};g=!1}function lr(e){for(;e!==null&&(e.f&Ze)===0;)e=e.next;return e}function ao(e,t,r,n,a){var s=(n&Zs)!==0,u=t.length,d=e.items,o=lr(e.effect.first),f,v=null,m,h=[],P=[],g,_,x,y;if(s)for(y=0;y<u;y+=1)g=t[y],_=a(g,y),x=d.get(_).e,(x.f&et)===0&&(x.nodes?.a?.measure(),(m??=new Set).add(x));for(y=0;y<u;y+=1){if(g=t[y],_=a(g,y),x=d.get(_).e,e.outrogroups!==null)for(const z of e.outrogroups)z.pending.delete(x),z.done.delete(x);if((x.f&et)!==0)if(x.f^=et,x===o)cr(x,null,r);else{var N=v?v.next:o;x===e.effect.last&&(e.effect.last=x.prev),x.prev&&(x.prev.next=x.next),x.next&&(x.next.prev=x.prev),gt(e,v,x),gt(e,x,N),cr(x,N,r),v=x,h=[],P=[],o=lr(v.next);continue}if((x.f&je)!==0&&(En(x),s&&(x.nodes?.a?.unfix(),(m??=new Set).delete(x))),x!==o){if(f!==void 0&&f.has(x)){if(h.length<P.length){var M=P[0],A;v=M.prev;var O=h[0],b=h[h.length-1];for(A=0;A<h.length;A+=1)cr(h[A],M,r);for(A=0;A<P.length;A+=1)f.delete(P[A]);gt(e,O.prev,b.next),gt(e,v,O),gt(e,b,M),o=M,v=b,y-=1,h=[],P=[]}else f.delete(x),cr(x,o,r),gt(e,x.prev,x.next),gt(e,x,v===null?e.effect.first:v.next),gt(e,v,x),v=x;continue}for(h=[],P=[];o!==null&&o!==x;)(f??=new Set).add(o),P.push(o),o=lr(o.next);if(o===null)continue}(x.f&et)===0&&h.push(x),v=x,o=lr(x.next)}if(e.outrogroups!==null){for(const z of e.outrogroups)z.pending.size===0&&(ln(e,Tr(z.done)),e.outrogroups?.delete(z));e.outrogroups.size===0&&(e.outrogroups=null)}if(o!==null||f!==void 0){var w=[];if(f!==void 0)for(x of f)(x.f&je)===0&&w.push(x);for(;o!==null;)(o.f&je)===0&&o!==e.fallback&&w.push(o),o=lr(o.next);var S=w.length;if(S>0){var F=(n&ca)!==0&&u===0?r:null;if(s){for(y=0;y<S;y+=1)w[y].nodes?.a?.measure();for(y=0;y<S;y+=1)w[y].nodes?.a?.fix()}no(e,w,F)}}s&&ut(()=>{if(m!==void 0)for(x of m)x.nodes?.a?.apply()})}function so(e,t,r,n,a,s,u,d){var o=(u&Ys)!==0?(u&$s)===0?Ri(r,!1,!1):Ft(r):null,f=(u&Xs)!==0?Ft(a):null;return{v:o,i:f,e:ze(()=>(s(t,o??r,f??a,d),()=>{e.delete(n)}))}}function cr(e,t,r){if(e.nodes)for(var n=e.nodes.start,a=e.nodes.end,s=t&&(t.f&et)===0?t.nodes.start:r;n!==null;){var u=mr(n);if(s.before(n),n===a)return;n=u}}function gt(e,t,r){t===null?e.effect.first=r:t.next=r,r===null?e.effect.last=t:r.prev=t}function Ha(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(r=Ha(e[t]))&&(n&&(n+=" "),n+=r)}else for(r in e)e[r]&&(n&&(n+=" "),n+=r);return n}function io(){for(var e,t,r=0,n="",a=arguments.length;r<a;r++)(e=arguments[r])&&(t=Ha(e))&&(n&&(n+=" "),n+=t);return n}function oo(e){return typeof e=="object"?io(e):e??""}function lo(e,t,r){var n=e==null?"":""+e;return n===""?null:n}function uo(e,t){return e==null?null:String(e)}function we(e,t,r,n,a,s){var u=e.__className;if(u!==r||u===void 0){var d=lo(r);d==null?e.removeAttribute("class"):t?e.className=d:e.setAttribute("class",d),e.__className=r}return s}function Pn(e,t,r,n){var a=e.__style;if(a!==t){var s=uo(t);s==null?e.removeAttribute("style"):e.style.cssText=s,e.__style=t}return n}function Cn(e,t,r=!1){if(e.multiple){if(t==null)return;if(!hn(t))return ii();for(var n of e.options)n.selected=t.includes(Zn(n));return}for(n of e.options){var a=Zn(n);if(Ci(a,t)){n.selected=!0;return}}(!r||t!==void 0)&&(e.selectedIndex=-1)}function Va(e){var t=new MutationObserver(()=>{Cn(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),wn(()=>{t.disconnect()})}function Zn(e){return"__value"in e?e.__value:e.value}const co=Symbol("is custom element"),fo=Symbol("is html"),vo=Ns?"progress":"PROGRESS";function dt(e,t){var r=In(e);r.value===(r.value=t??void 0)||e.value===t&&(t!==0||e.nodeName!==vo)||(e.value=t??"")}function Ja(e,t){var r=In(e);r.checked!==(r.checked=t??void 0)&&(e.checked=t)}function H(e,t,r,n){var a=In(e);a[t]!==(a[t]=r)&&(t==="loading"&&(e[Fs]=r),r==null?e.removeAttribute(t):typeof r!="string"&&po(e).includes(t)?e[t]=r:e.setAttribute(t,r))}function In(e){return e.__attributes??={[co]:e.nodeName.includes("-"),[fo]:e.namespaceURI===da}}var $n=new Map;function po(e){var t=e.getAttribute("is")||e.nodeName,r=$n.get(t);if(r)return r;$n.set(t,r=[]);for(var n,a=e,s=Element.prototype;s!==a;){n=ia(a);for(var u in n)n[u].set&&r.push(u);a=gn(a)}return r}function un(e,t,r=t){var n=new WeakSet;Ai(e,"input",async a=>{var s=a?e.defaultValue:e.value;if(s=Wr(e)?Yr(s):s,r(s),se!==null&&n.add(se),await Ki(),s!==(s=t())){var u=e.selectionStart,d=e.selectionEnd,o=e.value.length;if(e.value=s??"",d!==null){var f=e.value.length;u===d&&d===o&&f>o?(e.selectionStart=f,e.selectionEnd=f):(e.selectionStart=u,e.selectionEnd=Math.min(d,f))}}}),Ut(t)==null&&e.value&&(r(Wr(e)?Yr(e.value):e.value),se!==null&&n.add(se)),kn(()=>{var a=t();if(e===document.activeElement){var s=tn??se;if(n.has(s))return}Wr(e)&&a===Yr(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function Wr(e){var t=e.type;return t==="number"||t==="range"}function Yr(e){return e===""?null:+e}function Qn(e,t){return e===t||e?.[lt]===t}function ho(e={},t,r,n){return Li(()=>{var a,s;return kn(()=>{a=s,s=[],Ut(()=>{e!==r(...s)&&(t(e,...s),a&&Qn(r(...a),e)&&t(null,...a))})}),()=>{ut(()=>{s&&Qn(r(...s),e)&&t(null,...s)})}}),e}function Wa(e=!1){const t=ce,r=t.l.u;if(!r)return;let n=()=>Hi(t.s);if(e){let a=0,s={};const u=br(()=>{let d=!1;const o=t.s;for(const f in o)o[f]!==s[f]&&(s[f]=o[f],d=!0);return d&&a++,a});n=()=>i(u)}r.b.length&&Fi(()=>{ea(t,n),$r(r.b)}),ct(()=>{const a=Ut(()=>r.m.map(Ts));return()=>{for(const s of a)typeof s=="function"&&s()}}),r.a.length&&ct(()=>{ea(t,n),$r(r.a)})}function ea(e,t){if(e.l.s)for(const r of e.l.s)i(r);t()}let Rr=!1;function go(e){var t=Rr;try{return Rr=!1,[e(),Rr]}finally{Rr=t}}function pr(e,t,r,n){var a=!rr||(r&ei)!==0,s=(r&ri)!==0,u=(r&ni)!==0,d=n,o=!0,f=()=>(o&&(o=!1,d=u?Ut(n):n),d),v;if(s){var m=lt in e||Os in e;v=Ht(e,t)?.set??(m&&t in e?M=>e[t]=M:void 0)}var h,P=!1;s?[h,P]=go(()=>e[t]):h=e[t],h===void 0&&n!==void 0&&(h=f(),v&&(a&&Ks(),v(h)));var g;if(a?g=()=>{var M=e[t];return M===void 0?f():(o=!0,M)}:g=()=>{var M=e[t];return M!==void 0&&(d=void 0),M===void 0?d:M},a&&(r&ti)===0)return g;if(v){var _=e.$$legacy;return(function(M,A){return arguments.length>0?((!a||!A||_||P)&&v(A?g():M),M):g()})}var x=!1,y=((r&Qs)!==0?br:Or)(()=>(x=!1,g()));s&&i(y);var N=re;return(function(M,A){if(arguments.length>0){const O=A?i(y):a&&s?Fe(M):M;return l(y,O),x=!0,d!==void 0&&(d=O),M}return wt&&x||(N.f&rt)!==0?y.v:i(y)})}function Ya(e){ce===null&&ua(),rr&&ce.l!==null?mo(ce).m.push(e):ct(()=>{const t=Ut(e);if(typeof t=="function")return t})}function bo(e){ce===null&&ua(),Ya(()=>()=>Ut(e))}function mo(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const _o="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(_o);const Xa=[{id:"google/gemini-3.1-flash-image-preview",label:"Nano Banana 2",requestFormat:"image-config"},{id:"google/gemini-3-pro-image-preview",label:"Nano Banana Pro",requestFormat:"image-config"},{id:"openai/gpt-5-image",label:"GPT-5 Image",requestFormat:"openai-size"}],Za=Xa[0].id,xo=["1:1","4:3","3:2","16:9","4:5","9:16"],yo=[1,2,4,6];async function de(e,t){const r=typeof window<"u"?new URL(e,window.location.origin).toString():e,n=await fetch(r,{headers:{"Content-Type":"application/json",...t?.headers??{}},...t}),a=n.headers.get("content-type")??"";if(!n.ok){let s={};try{s=await n.json()}catch{}throw new Error(s.error?.message??`Request failed: ${n.status}`)}if(!a.includes("application/json")){const u=(await n.text()).trimStart();throw u.startsWith("<!doctype")||u.startsWith("<html")?new Error("Expected JSON from /api but received HTML. Start the app through `npm run web`, or use a dev server with the local bridge middleware enabled."):new Error(`Expected JSON response but received ${a||"unknown content type"}`)}return n.json()}function wo(e){return new Promise((t,r)=>{const n=new FileReader;n.onload=()=>t(String(n.result)),n.onerror=()=>r(new Error(`Failed to read file: ${e.name}`)),n.readAsDataURL(e)})}async function ko(){return de("/api/bootstrap")}async function So(e){return de("/api/config",{method:"PATCH",body:JSON.stringify(e)})}async function jo(){return de("/api/models")}async function Eo(e){return de("/api/models",{method:"POST",body:JSON.stringify(e)})}async function Ro(e,t){return de(`/api/models/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function Po(e){return de(`/api/models/${encodeURIComponent(e)}`,{method:"DELETE"})}async function Co(e){return de(`/api/models/${encodeURIComponent(e)}/set-default`,{method:"POST"})}async function Io(){return de("/api/models/restore-defaults",{method:"POST"})}async function Mo(e){return de("/api/projects",{method:"POST",body:JSON.stringify({name:e})})}async function Do(){return de("/api/projects")}async function To(e){return de(`/api/projects/${encodeURIComponent(e)}`)}async function Ao(e){return de(`/api/projects/${encodeURIComponent(e)}/use`,{method:"POST"})}async function Oo(e,t){return de(`/api/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(t)})}async function Fo(e,t,r="both"){const n=await Promise.all(t.map(async({file:a,width:s,height:u})=>({filename:a.name,mimeType:a.type,width:s,height:u,dataUrl:await wo(a)})));return de(`/api/projects/${encodeURIComponent(e)}/refs`,{method:"POST",body:JSON.stringify({body:{files:n,role:r}})})}async function No(e,t){await de(`/api/projects/${encodeURIComponent(e)}/refs/${encodeURIComponent(t)}`,{method:"DELETE"})}async function $a(e,t,r){return de(`/api/projects/${encodeURIComponent(e)}/refs/${encodeURIComponent(t)}`,{method:"PATCH",body:JSON.stringify({role:r})})}async function Lo(e){return de(`/api/projects/${encodeURIComponent(e)}/status`)}async function Uo(e,t="both",r){return de(`/api/projects/${encodeURIComponent(e)}/derive`,{method:"POST",body:JSON.stringify({target:t,persist:r?.persist})})}async function zo(e){return de(`/api/projects/${encodeURIComponent(e.projectId)}/generate`,{method:"POST",body:JSON.stringify({prompt:e.prompt,feedback:e.feedback,sessionId:e.sessionId??void 0,selectedImageDataUrls:e.selectedImageDataUrls??[],model:e.model,sizePreset:e.sizePreset,imageCount:e.imageCount})})}async function Qa(e){return de(`/api/projects/${encodeURIComponent(e)}/sessions`)}async function Bo(e,t){return de(`/api/projects/${encodeURIComponent(e)}/sessions/${encodeURIComponent(t)}`)}async function Go(e,t){await de(`/api/projects/${encodeURIComponent(e)}/sessions/${encodeURIComponent(t)}`,{method:"DELETE"})}let yr=L(!1),Nr=L("16:9"),Lr=L(4),at=L(Fe(Za)),cn=L(Fe(Xa.map(e=>({id:e.id,label:e.label,source:"builtin"})))),dn=L(Fe(Za)),fn=L(!1),vn=L(!1),hr=L(null);async function qo(){l(vn,!0);try{const e=await ko();l(yr,e.config.apiKeyConfigured,!0),l(Nr,e.config.sizePreset,!0),l(Lr,e.config.imageCount,!0),l(at,e.config.model,!0),wr(e.modelRegistry),l(hr,null),l(fn,!0)}catch(e){l(hr,e instanceof Error?e.message:"Failed to load settings",!0),l(fn,!0)}finally{l(vn,!1)}}function Ko(e){l(yr,e.apiKeyConfigured,!0),l(Nr,e.sizePreset,!0),l(Lr,e.imageCount,!0),l(at,e.model,!0)}function wr(e){l(cn,e.models,!0),l(dn,e.defaultModelId,!0),i(cn).some(t=>t.id===i(at))||l(at,i(dn),!0)}async function zt(e){try{const t=await So(e);Ko(t),l(hr,null)}catch(t){throw l(hr,t instanceof Error?t.message:"Failed to save settings",!0),t}}function es(e){return l(yr,e.trim().length>0),zt({apiKey:e})}function Ho(){return l(yr,!1),zt({apiKey:""})}function Vo(e){return l(Nr,e,!0),zt({sizePreset:e})}function Jo(e){return l(Lr,e,!0),zt({imageCount:e})}function Wo(e){return l(at,e,!0),zt({model:e})}async function ts(){wr(await jo())}async function Yo(e){await Eo(e),await ts()}async function Xo(e,t){await Ro(e,t),await ts()}async function Zo(e){const t=await Po(e);wr(t),i(at)===e&&l(at,t.defaultModelId,!0)}async function $o(e){const t=await Co(e);wr(t),l(at,t.defaultModelId,!0),await zt({model:t.defaultModelId})}async function Qo(){const e=await Io();wr(e),l(at,e.defaultModelId,!0),await zt({model:e.defaultModelId})}const te={get apiKeyConfigured(){return i(yr)},get sizePreset(){return i(Nr)},get imageCount(){return i(Lr)},get model(){return i(at)},get availableModels(){return i(cn)},get defaultModelId(){return i(dn)},get ready(){return i(fn)},get loading(){return i(vn)},get loadError(){return i(hr)}};let Nt=L(Fe([])),pe=L(null),Ee=L(Fe([])),Mr=L(null);function el(){if(i(pe)!==null)return i(Nt).find(e=>e.id===i(pe))}const ta=new Proxy([],{get(e,t){return Reflect.get(i(Nt),t)},has(e,t){return Reflect.has(i(Nt),t)}}),ft={get value(){return i(pe)}},Ur=el,Kt=new Proxy([],{get(e,t){return Reflect.get(i(Ee),t)},has(e,t){return Reflect.has(i(Ee),t)}}),Mt={get value(){return i(Mr)}};let rs=null;function tl(e){rs=e}function ns(e){l(Nt,e.projects,!0),l(pe,e.currentProjectId,!0),l(Ee,e.activeProject?.refs??[],!0)}async function St(e){if(!e){l(Mr,null);return}l(Mr,await Lo(e),!0)}async function rl(){const e=await Do();if(l(Nt,e.projects,!0),l(pe,e.currentProjectId,!0),l(Ee,[],!0),l(Mr,null),e.currentProjectId){const t=await To(e.currentProjectId);l(Ee,t.refs,!0),await St(e.currentProjectId)}}async function nl(e){const t=await Mo(e);return ns(t),await St(t.currentProjectId),t.project}async function al(e){rs?.();const t=await Ao(e);ns(t),await St(t.currentProjectId)}async function sl(e,t){const r=await Oo(e,t);return l(Nt,i(Nt).map(n=>n.id===e?r:n),!0),i(pe)===e&&(l(Ee,r.refs,!0),await St(e)),r}async function il(e,t="both",r){return await Uo(e,t,r)}async function ol(e,t,r,n="both"){if(i(pe)===null)throw new Error("No active project");const[a]=await Fo(i(pe),[{file:e,width:t,height:r}],n);return l(Ee,[...i(Ee),a],!0),await St(i(pe)),a}async function ll(e){if(i(pe)===null)throw new Error("No active project");await No(i(pe),e),l(Ee,i(Ee).filter(t=>t.id!==e),!0),await St(i(pe))}async function ul(e,t){if(i(pe)===null)throw new Error("No active project");const r=await $a(i(pe),e,t);return l(Ee,i(Ee).map(n=>n.id===e?r:n),!0),await St(i(pe)),r}async function cl(){if(i(pe)===null)throw new Error("No active project");const e=i(Ee).filter(n=>n.role!=="both");if(e.length===0)return;const t=await Promise.all(e.map(n=>$a(i(pe),n.id,"both"))),r=new Map(t.map(n=>[n.id,n]));l(Ee,i(Ee).map(n=>r.get(n.id)??n),!0),await St(i(pe))}var dl=E('<p class="mt-1 text-xs text-red-600"> </p>'),fl=E(`<div data-testid="api-key-setup" class="flex items-center justify-center min-h-screen bg-slate-50"><div class="w-full max-w-md mx-4 bg-white rounded-xl shadow-lg p-8"><div class="text-center mb-6"><h1 class="text-2xl font-bold text-slate-900 mb-2">Image Sprout</h1> <p class="text-sm text-slate-600">To get started, you'll need an OpenRouter API key. This key is used to
2
+ generate images via the OpenRouter API and is stored locally on your
3
+ machine for this installation.</p></div> <div class="space-y-4"><div><label for="api-key-input" class="block text-sm font-medium text-slate-700 mb-1">API Key</label> <input id="api-key-input" type="password" placeholder="sk-or-..." class="w-full px-3 py-2 border border-slate-300 rounded-lg text-sm text-slate-900 placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-accent-500 focus:border-transparent"/> <!></div> <button class="w-full px-4 py-2.5 bg-accent-600 text-white text-sm font-semibold rounded-lg hover:bg-accent-700 transition-colors cursor-pointer">Save</button></div> <p class="mt-4 text-center text-xs text-slate-500">Don't have a key? <a href="https://openrouter.ai/keys" target="_blank" rel="noopener noreferrer" class="text-accent-600 hover:text-accent-700 underline">Get one at OpenRouter</a></p></div></div>`);function vl(e,t){ke(t,!0);let r=L(""),n=L("");function a(_){l(r,_.target.value,!0)}function s(){const _=i(r).trim();if(!_){l(n,"Please enter an API key");return}l(n,""),es(_)}function u(_){_.key==="Enter"&&s()}var d=fl(),o=c(d),f=p(c(o),2),v=c(f),m=p(c(v),2),h=p(m,2);{var P=_=>{var x=dl(),y=c(x);q(()=>K(y,i(n))),k(_,x)};G(h,_=>{i(n)&&_(P)})}var g=p(v,2);q(()=>dt(m,i(r))),D("input",m,a),D("keydown",m,u),D("click",g,s),k(e,d),Se()}De(["input","keydown","click"]);var pl=E('<p data-testid="project-selector-error" class="px-4 py-1 text-xs text-red-600"> </p>'),hl=E('<div class="px-4 py-3"><p class="text-sm font-medium text-slate-700 mb-2">Create your first project</p> <input data-testid="new-project-input" type="text" placeholder="Project name..." class="w-full px-3 py-1.5 text-sm border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"/></div>'),gl=$i('<svg class="ml-auto w-4 h-4 text-indigo-600 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"></path></svg>'),bl=E('<button><span class="truncate"> </span> <!></button>'),ml=E('<div class="px-3 py-2"><input data-testid="new-project-input" type="text" placeholder="Project name..." class="w-full px-2 py-1.5 text-sm border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"/></div>'),_l=E('<button data-testid="new-project-button" class="flex items-center w-full px-3 py-2 text-left text-sm text-indigo-600 hover:bg-indigo-50 transition-colors cursor-pointer"><svg class="w-4 h-4 mr-2" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"></path></svg> New Project</button>'),xl=E('<div data-testid="project-dropdown-list" class="absolute left-0 right-0 z-10 mt-1 bg-white border border-slate-200 rounded-md shadow-lg max-h-64 overflow-y-auto"><!> <div class="border-t border-slate-100"><!></div></div>'),yl=E('<button data-testid="project-selector-trigger" class="flex items-center justify-between w-full mt-2 px-2.5 py-1.5 text-left text-sm text-slate-700 bg-slate-50 border border-slate-200 rounded-md hover:bg-slate-100 transition-colors cursor-pointer"><span class="truncate"> </span> <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"></path></svg></button> <!>',1),wl=E('<div class="relative" data-testid="project-selector"><!> <!></div>');function kl(e,t){ke(t,!0);let r=L(!1),n=L(!1),a=L(""),s=L(!1),u=L(null);const d=ee(()=>ta.length>0),o=ee(Ur);async function f(){const A=i(a).trim();if(!(!A||i(s))){l(s,!0),l(u,null);try{await nl(A),l(a,""),l(n,!1),l(r,!1)}catch(O){l(u,O instanceof Error?O.message:"Failed to create project",!0),console.error("Failed to create project:",O)}finally{l(s,!1)}}}function v(A){A.key==="Enter"?f():A.key==="Escape"&&(l(a,""),l(n,!1))}async function m(A){l(r,!1),l(u,null);try{await al(A)}catch(O){l(u,O instanceof Error?O.message:"Failed to switch project",!0),console.error("Failed to switch project:",O)}}function h(){l(r,!i(r)),i(r)||l(n,!1)}function P(){l(n,!0)}var g=wl(),_=c(g);{var x=A=>{var O=pl(),b=c(O);q(()=>K(b,i(u))),k(A,O)};G(_,A=>{i(u)&&A(x)})}var y=p(_,2);{var N=A=>{var O=hl(),b=p(c(O),2);D("keydown",b,v),un(b,()=>i(a),w=>l(a,w)),k(A,O)},M=A=>{var O=yl(),b=me(O),w=c(b),S=c(w),F=p(w,2),z=p(b,2);{var V=J=>{var Y=xl(),U=c(Y);Ye(U,17,()=>ta,X=>X.id,(X,ae)=>{var oe=bl(),ne=c(oe),le=c(ne),xe=p(ne,2);{var Ne=Te=>{var $e=gl();k(Te,$e)};G(xe,Te=>{ft.value===i(ae).id&&Te(Ne)})}q(()=>{H(oe,"data-testid",`project-option-${i(ae).id??""}`),we(oe,1,`flex items-center w-full px-3 py-2 text-left text-sm transition-colors cursor-pointer ${ft.value===i(ae).id?"bg-indigo-50 text-indigo-700 font-medium":"text-slate-700 hover:bg-slate-50"}`),K(le,i(ae).name)}),D("click",oe,()=>m(i(ae).id)),k(X,oe)});var R=p(U,2),B=c(R);{var I=X=>{var ae=ml(),oe=c(ae);D("keydown",oe,v),un(oe,()=>i(a),ne=>l(a,ne)),k(X,ae)},W=X=>{var ae=_l();D("click",ae,P),k(X,ae)};G(B,X=>{i(n)?X(I):X(W,-1)})}k(J,Y)};G(z,J=>{i(r)&&J(V)})}q(()=>{K(S,i(o)?.name??"Select project"),we(F,0,`w-3.5 h-3.5 text-slate-400 transition-transform duration-200 ${i(r)?"rotate-180":""}`)}),D("click",b,h),k(A,O)};G(y,A=>{!i(d)&&!i(o)?A(N):A(M,-1)})}k(e,g),Se()}De(["keydown","click"]);let Dr=L(Fe([]));const ra=new Proxy([],{get(e,t){return Reflect.get(i(Dr),t)},has(e,t){return Reflect.has(i(Dr),t)}});async function na(e){l(Dr,await Qa(e),!0)}async function as(e){l(Dr,await Qa(e),!0)}function Sl(){return{status:"idle",results:[],prompt:"",feedback:"",error:null,activeSessionId:null,activeRunIndex:0,sessionRuns:[],draftActive:!1}}let C=Fe(Sl());function ss(){return C.results.filter(e=>e.status==="success"&&e.selected)}function jl(){C.status="generating",C.error=null}function El(e){e<0||e>=C.results.length||(C.results[e].selected=!C.results[e].selected)}function aa(){for(const e of C.results)e.selected=!1}function Xr(e){C.feedback=e}function zr(){C.status="idle",C.results=[],C.prompt="",C.feedback="",C.error=null,C.activeSessionId=null,C.activeRunIndex=0,C.sessionRuns=[],C.draftActive=!1}function Rl(){zr(),C.draftActive=!0}tl(zr);function Mn(e){C.results=e.images.map(t=>t.status==="error"?{status:"error",error:t.error??"Unknown error",selected:!1}:{status:"success",imageDataUrl:t.imageDataUrl,selected:!1}),C.prompt=e.prompt,C.feedback=e.feedback??""}async function Pl(e){const t=ft.value;if(!t)return;const{session:r,runs:n}=await Bo(t,e);if(C.draftActive=!1,C.activeSessionId=e,C.sessionRuns=n,C.prompt=r.prompt,n.length>0){const a=n.length-1;C.activeRunIndex=a,Mn(n[a]),C.status="complete"}}function Cl(e){e<0||e>=C.sessionRuns.length||(C.activeRunIndex=e,Mn(C.sessionRuns[e]))}async function Il(e){const t=ft.value;t&&(await Go(t,e),C.activeSessionId===e&&zr(),await as(t))}async function pn(e){jl();try{const t=Ur(),r=ft.value;if(!r||!t)throw new Error("No active project");const n=await zo({projectId:r,prompt:e.prompt,feedback:C.feedback||null,sessionId:C.activeSessionId,selectedImageDataUrls:ss().filter(a=>a.status==="success").map(a=>a.imageDataUrl),model:te.model,sizePreset:te.sizePreset,imageCount:te.imageCount});C.draftActive=!1,C.activeSessionId=n.sessionId,C.sessionRuns=n.runs,C.activeRunIndex=n.runs.length-1,Mn(n.run),C.status="complete",await as(r)}catch(t){C.status="error",C.error=t instanceof Error?t.message:"Generation failed"}}var Ml=E('<p class="text-sm text-slate-500">Generate from the main canvas to create the first session for this project.</p>'),Dl=E('<p class="text-sm text-slate-500 mb-3">Set up references and guides before generating the first session for this project.</p> <button data-testid="empty-state-settings-link" class="text-sm font-medium text-accent-600 hover:text-accent-700 transition-colors cursor-pointer">Open Project Settings</button>',1),Tl=E('<div data-testid="session-history-empty" class="px-4 py-6"><div class="bg-slate-50 rounded-lg p-4 text-center"><!></div></div>'),Al=E('<div data-testid="session-draft" class="flex items-center w-full px-4 py-2.5 text-left bg-accent-50 border-r-2 border-accent-500"><div class="flex-1 min-w-0"><p class="text-sm text-slate-500 italic">New session</p> <p class="text-xs text-slate-400">Enter a prompt to begin</p></div></div>'),Ol=E('<div class="ml-2 flex items-center gap-1"><button class="px-1.5 py-0.5 text-xs font-medium text-red-600 bg-red-50 rounded hover:bg-red-100 transition-colors cursor-pointer">Delete?</button> <button class="p-0.5 text-slate-400 hover:text-slate-600 transition-colors cursor-pointer" aria-label="Cancel delete"><svg class="w-3 h-3" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button></div>'),Fl=E('<button class="ml-2 p-1 text-slate-300 hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity cursor-pointer" aria-label="Delete session"><svg class="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button>'),Nl=E('<div role="button" tabindex="0"><div class="flex-1 min-w-0"><p class="text-sm text-slate-700 truncate"> </p> <p class="text-xs text-slate-400"> </p></div> <!></div>'),Ll=E('<div data-testid="session-history-list" class="py-1"><!> <!></div>'),Ul=E('<div class="flex items-center justify-between px-4 py-2 border-b border-slate-100"><h2 class="text-xs font-semibold uppercase tracking-[0.14em] text-slate-400">Sessions</h2> <button data-testid="new-session-button" class="rounded-md border border-slate-200 bg-white px-2.5 py-1 text-xs font-medium text-slate-600 hover:bg-slate-50 hover:text-slate-800 transition-colors cursor-pointer">New Session</button></div> <!>',1);function zl(e,t){ke(t,!0),ct(()=>{const y=ft.value;y&&na(y)});function r(y){const N=new Date(y),A=new Date().getTime()-N.getTime(),O=Math.floor(A/1e3),b=Math.floor(O/60),w=Math.floor(b/60),S=Math.floor(w/24);return O<60?"just now":b<60?`${b}m ago`:w<24?`${w}h ago`:S<7?`${S}d ago`:N.toLocaleDateString()}async function n(y){await Pl(y)}let a=L(null),s=null;function u(y,N){y.stopPropagation(),s&&clearTimeout(s),l(a,N,!0),s=setTimeout(()=>{l(a,null)},3e3)}async function d(y,N){y.stopPropagation(),s&&clearTimeout(s),l(a,null),await Il(N);const M=ft.value;M&&await na(M)}function o(y){y.stopPropagation(),s&&clearTimeout(s),l(a,null)}function f(){Rl()}const v=ee(()=>Mt.value?.readiness.generate??!1);var m=Ul(),h=me(m),P=p(c(h),2),g=p(h,2);{var _=y=>{var N=Tl(),M=c(N),A=c(M);{var O=w=>{var S=Ml();k(w,S)},b=w=>{var S=Dl(),F=p(me(S),2);D("click",F,()=>t.onOpenSettings?.()),k(w,S)};G(A,w=>{i(v)?w(O):w(b,-1)})}k(y,N)},x=y=>{var N=Ll(),M=c(N);{var A=b=>{var w=Al();k(b,w)};G(M,b=>{C.draftActive&&b(A)})}var O=p(M,2);Ye(O,17,()=>ra,b=>b.id,(b,w)=>{var S=Nl(),F=c(S),z=c(F),V=c(z),J=p(z,2),Y=c(J),U=p(F,2);{var R=I=>{var W=Ol(),X=c(W),ae=p(X,2);q(()=>{H(W,"data-testid",`confirm-delete-${i(w).id??""}`),H(X,"data-testid",`confirm-delete-yes-${i(w).id??""}`),H(ae,"data-testid",`confirm-delete-no-${i(w).id??""}`)}),D("click",X,oe=>d(oe,i(w).id)),D("click",ae,oe=>o(oe)),k(I,W)},B=I=>{var W=Fl();q(()=>H(W,"data-testid",`delete-session-${i(w).id??""}`)),D("click",W,X=>u(X,i(w).id)),k(I,W)};G(U,I=>{i(a)===i(w).id?I(R):I(B,-1)})}q(I=>{H(S,"data-testid",`session-item-${i(w).id??""}`),we(S,1,`flex items-center w-full px-4 py-2.5 text-left hover:bg-slate-50 transition-colors cursor-pointer group ${C.activeSessionId===i(w).id?"bg-accent-50 border-r-2 border-accent-500":""}`),K(V,i(w).prompt),K(Y,I)},[()=>r(i(w).updatedAt)]),D("click",S,()=>n(i(w).id)),D("keydown",S,I=>I.key==="Enter"&&n(i(w).id)),k(b,S)}),k(y,N)};G(g,y=>{ra.length===0&&!C.draftActive?y(_):y(x,-1)})}D("click",P,f),k(e,m),Se()}De(["click","keydown"]);var Bl=E('<button data-testid="sidebar-settings-button" class="flex items-center gap-2 px-4 py-2.5 text-sm text-slate-600 hover:bg-slate-50 transition-colors cursor-pointer border-b border-slate-100"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg> <span>Project Settings</span></button>'),Gl=E('<input type="password" placeholder="Enter new API key" class="w-full px-2 py-1.5 border border-slate-300 rounded text-xs text-slate-900 placeholder-slate-400 focus:outline-none focus:ring-1 focus:ring-accent-500 mb-2"/> <div class="flex gap-2"><button data-testid="sidebar-api-key-save" class="px-2 py-1 bg-accent-600 text-white rounded text-xs hover:bg-accent-700 transition-colors cursor-pointer">Save</button> <button class="px-2 py-1 text-slate-500 hover:text-slate-700 text-xs cursor-pointer">Cancel</button></div>',1),ql=E('<p class="text-slate-600 mb-2">Key: <span class="font-medium"> </span></p> <div class="flex gap-2"><button data-testid="sidebar-api-key-change" class="px-2 py-1 text-accent-600 hover:text-accent-700 text-xs cursor-pointer">Change</button> <button data-testid="sidebar-api-key-remove" class="px-2 py-1 text-red-600 hover:text-red-700 text-xs cursor-pointer">Remove</button></div>',1),Kl=E('<div data-testid="sidebar-api-key-editor" class="mt-2 p-2 bg-slate-50 rounded-lg text-xs"><!></div>'),Hl=E('<aside data-testid="sidebar" class="flex flex-col h-full overflow-y-auto bg-white border-r border-slate-200"><div class="px-4 py-3 border-b border-slate-200"><h1 class="text-lg font-bold text-slate-900">Image Sprout</h1> <!></div> <!> <div class="flex-1 overflow-y-auto"><!></div> <div class="border-t border-slate-200 px-4 py-2"><button data-testid="sidebar-api-key-button" class="text-xs text-slate-500 hover:text-accent-600 transition-colors cursor-pointer">API Key</button> <!></div></aside>');function Vl(e,t){ke(t,!0);const r=ee(()=>Ur()!==void 0);let n=L(!1),a=L(!1),s=L("");function u(){l(n,!i(n)),l(a,!1),l(s,"")}function d(){l(a,!0),l(s,"")}function o(){const b=i(s).trim();b&&(es(b),l(a,!1),l(s,""))}function f(){Ho(),l(n,!1),l(a,!1)}var v=Hl(),m=c(v),h=p(c(m),2);kl(h,{});var P=p(m,2);{var g=b=>{var w=Bl();D("click",w,()=>t.onOpenSettings?.()),k(b,w)};G(P,b=>{i(r)&&b(g)})}var _=p(P,2),x=c(_);{var y=b=>{zl(b,{onOpenSettings:()=>t.onOpenSettings?.()})};G(x,b=>{i(r)&&b(y)})}var N=p(_,2),M=c(N),A=p(M,2);{var O=b=>{var w=Kl(),S=c(w);{var F=V=>{var J=Gl(),Y=me(J),U=p(Y,2),R=c(U),B=p(R,2);un(Y,()=>i(s),I=>l(s,I)),D("click",R,o),D("click",B,()=>{l(a,!1),l(s,"")}),k(V,J)},z=V=>{var J=ql(),Y=me(J),U=p(c(Y)),R=c(U),B=p(Y,2),I=c(B),W=p(I,2);q(()=>K(R,te.apiKeyConfigured?"Configured":"Not set")),D("click",I,d),D("click",W,f),k(V,J)};G(S,V=>{i(a)?V(F):V(z,-1)})}k(b,w)};G(A,b=>{i(n)&&b(O)})}D("click",M,u),k(e,v),Se()}De(["click"]);ci();var Jl=E('<div class="bg-slate-100"><img class="block h-auto w-full select-none pointer-events-none"/></div>'),Wl=E('<div class="absolute inset-0 flex items-center justify-center bg-slate-100 p-4"><p class="text-sm text-red-600 text-center"> </p></div>'),Yl=E('<div class="absolute top-2 right-2 bg-indigo-600 text-white rounded-full w-6 h-6 flex items-center justify-center"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="3"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"></path></svg></div>'),Xl=E('<span class="text-xs text-green-300 font-medium">Copied!</span>'),Zl=E('<span class="text-xs text-red-300 font-medium"> </span>'),$l=E('<div class="absolute bottom-0 left-0 right-0 z-10 flex items-center justify-center gap-2 bg-black/60 p-1.5 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100"><button type="button" class="inline-flex cursor-pointer rounded bg-white/20 p-1 text-white transition-colors hover:bg-white/40" title="View larger"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"></path></svg></button> <button type="button" class="inline-flex cursor-pointer rounded bg-white/20 p-1 text-white transition-colors hover:bg-white/40" title="Download PNG"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M4 16v2a2 2 0 002 2h12a2 2 0 002-2v-2M7 10l5 5m0 0l5-5m-5 5V3"></path></svg></button> <button type="button" class="inline-flex cursor-pointer rounded bg-white/20 p-1 text-white transition-colors hover:bg-white/40" title="Copy to clipboard"><svg class="w-4 h-4" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3"></path></svg></button> <!> <!></div>'),Ql=E('<div role="button" tabindex="0"><!> <span class="absolute top-2 left-2 bg-black/50 text-white text-xs rounded-full w-5 h-5 flex items-center justify-center"> </span> <!> <!></div>');function sa(e,t){ke(t,!0);let r=pr(t,"sizePreset",3,"16:9"),n=L(!1),a=L("");function s(){El(t.index)}function u(b){b.target===b.currentTarget&&(b.key==="Enter"||b.key===" ")&&(b.preventDefault(),s())}function d(b){if(b.stopPropagation(),t.result.status!=="success")return;const w=document.createElement("a");w.href=t.result.imageDataUrl,w.download=`image-sprout-${t.index+1}.png`,document.body.appendChild(w),w.click(),document.body.removeChild(w)}function o(b){const[w,S]=b.split(","),F=w.match(/:(.*?);/),z=F?F[1]:"image/png",V=atob(S),J=new Uint8Array(V.length);for(let Y=0;Y<V.length;Y++)J[Y]=V.charCodeAt(Y);return new Blob([J],{type:z})}async function f(b){if(b.stopPropagation(),t.result.status==="success")try{const w=o(t.result.imageDataUrl);await navigator.clipboard.write([new ClipboardItem({[w.type]:w})]),l(n,!0),l(a,""),setTimeout(()=>{l(n,!1)},2e3)}catch{l(a,"Copy not supported in this browser"),l(n,!1)}}function v(b){b.stopPropagation(),t.result.status==="success"&&t.onPreview?.(t.index)}function m(b){return b.replace(":"," / ")}var h=Ql(),P=c(h);{var g=b=>{var w=Jl(),S=c(w);q(()=>{H(S,"src",t.result.imageDataUrl),H(S,"alt",`Generated image ${t.index+1}`)}),k(b,w)},_=b=>{var w=Wl(),S=c(w),F=c(S);q(()=>K(F,t.result.error)),k(b,w)};G(P,b=>{t.result.status==="success"?b(g):b(_,-1)})}var x=p(P,2),y=c(x),N=p(x,2);{var M=b=>{var w=Yl();q(()=>H(w,"data-testid",`checkmark-${t.index??""}`)),k(b,w)};G(N,b=>{t.result.selected&&b(M)})}var A=p(N,2);{var O=b=>{var w=$l(),S=c(w),F=p(S,2),z=p(F,2),V=p(z,2);{var J=R=>{var B=Xl();q(()=>H(B,"data-testid",`copy-feedback-${t.index??""}`)),k(R,B)};G(V,R=>{i(n)&&R(J)})}var Y=p(V,2);{var U=R=>{var B=Zl(),I=c(B);q(()=>{H(B,"data-testid",`copy-error-${t.index??""}`),K(I,i(a))}),k(R,B)};G(Y,R=>{i(a)&&R(U)})}q(()=>{H(w,"data-testid",`export-toolbar-${t.index??""}`),H(S,"data-testid",`preview-btn-${t.index??""}`),H(S,"aria-label",`View generated image ${t.index+1} larger`),H(F,"data-testid",`download-btn-${t.index??""}`),H(F,"aria-label",`Download generated image ${t.index+1} as PNG`),H(z,"data-testid",`copy-btn-${t.index??""}`),H(z,"aria-label",`Copy generated image ${t.index+1} to clipboard`)}),D("click",S,v),D("click",F,d),D("click",z,f),k(b,w)};G(A,b=>{t.result.status==="success"&&b(O)})}q(b=>{H(h,"data-testid",`image-card-${t.index??""}`),we(h,1,`group relative block w-full self-start overflow-hidden rounded-lg transition-all ${t.result.selected?"ring-2 ring-indigo-600":"ring-1 ring-slate-200"} cursor-pointer`),Pn(h,b),H(h,"aria-pressed",t.result.selected),H(h,"aria-label",`Select generated image ${t.index+1}`),H(x,"data-testid",`image-index-${t.index??""}`),K(y,t.index+1)},[()=>t.result.status==="success"?"":`aspect-ratio: ${m(r())};`]),D("click",h,s),D("keydown",h,u),k(e,h),Se()}De(["click","keydown"]);var eu=E('<div class="flex-1 flex items-center justify-center"><div class="text-center"><p class="text-slate-500 text-sm">Generate images to see results here</p> <svg class="mx-auto mt-2 w-5 h-5 text-slate-400" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M19 14l-7 7m0 0l-7-7m7 7V3"></path></svg></div></div>'),tu=E('<div class="relative overflow-hidden rounded-2xl border border-slate-200 bg-slate-200"><div class="absolute inset-0 animate-pulse bg-gradient-to-br from-slate-200 via-slate-100 to-slate-200"></div></div>'),ru=E('<div class="flex-1 flex items-center justify-center px-6"><div class="w-full max-w-5xl"><div class="mb-4 rounded-2xl border border-indigo-200 bg-indigo-50 px-4 py-3 text-center"><p class="text-sm font-semibold text-indigo-700">Generating images</p> <p class="mt-1 text-sm text-indigo-600">This can take a few seconds depending on the model and image count.</p></div> <div data-testid="results-grid"></div></div></div>'),nu=E('<div class="relative w-full"><div data-testid="results-grid"></div> <div class="pointer-events-none absolute inset-0 flex items-start justify-center p-6"><div class="rounded-2xl border border-indigo-200 bg-white/96 px-4 py-3 text-center shadow-lg backdrop-blur-sm"><div class="mx-auto mb-2 h-5 w-5 animate-spin rounded-full border-2 border-indigo-200 border-t-indigo-600"></div> <p class="text-sm font-semibold text-slate-800">Generating next run</p> <p class="mt-1 text-sm text-slate-600"> </p></div></div></div>'),au=E('<div class="flex-1 flex items-center justify-center"><div class="text-center space-y-3"><div class="mx-auto w-10 h-10 rounded-full bg-red-100 flex items-center justify-center"><svg class="w-5 h-5 text-red-600" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.082 16.5c-.77.833.192 2.5 1.732 2.5z"></path></svg></div> <p class="text-sm text-red-600"> </p> <button data-testid="retry-button" class="px-4 py-2 text-sm font-medium text-white bg-indigo-600 rounded-lg hover:bg-indigo-700 transition-colors cursor-pointer">Try Again</button> <p class="text-xs text-slate-400 mt-1">Returns to the generation form</p></div></div>'),su=E('<div data-testid="results-grid"></div>'),iu=E('<div data-testid="image-preview-backdrop" class="fixed inset-0 z-40 flex items-center justify-center bg-slate-950/75 p-6" role="dialog" aria-modal="true" aria-label="Image preview" tabindex="-1"><div class="relative w-full max-w-7xl"><button type="button" data-testid="image-preview-close" class="absolute right-3 top-3 z-10 rounded-full bg-black/50 p-2 text-white hover:bg-black/70 cursor-pointer" aria-label="Close preview"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button> <img data-testid="image-preview" class="mx-auto max-h-[85vh] w-auto max-w-full rounded-2xl bg-slate-950 object-contain shadow-2xl"/></div></div>'),ou=E("<!> <!>",1);function lu(e,t){ke(t,!0);let r=L(null);function n(){return C.sessionRuns[C.activeRunIndex]?.sizePreset??te.sizePreset}function a(S){const[F,z]=S.split(":").map(Number);return F<=z}function s(S,F){return S>=6?F==="1:1"?"grid-cols-2 xl:grid-cols-3":"grid-cols-1 md:grid-cols-2 xl:grid-cols-3":"grid-cols-1 lg:grid-cols-2"}function u(S,F){return S>=6?a(F)?"max-w-4xl":"max-w-7xl":S>=4?a(F)?"max-w-4xl":"max-w-6xl":a(F)?"max-w-4xl":"max-w-5xl"}function d(S){return S.replace(":"," / ")}function o(S){l(r,S,!0)}function f(){l(r,null)}let v=ee(()=>i(r)===null?null:C.results[i(r)]??null),m=ee(()=>C.results.length>0),h=ee(()=>C.sessionRuns[C.activeRunIndex]??null),P=ee(()=>C.status==="generating"?i(h)?`Generating a new variation from ${i(h).sizePreset} · ${i(h).imageCount} images...`:"Generating images...":null);function g(S){S.target===S.currentTarget&&f()}var _=ou(),x=me(_);{var y=S=>{var F=eu();k(S,F)},N=S=>{var F=ru(),z=c(F),V=p(c(z),2);Ye(V,21,()=>Array(te.imageCount),Jr,(J,Y,U)=>{var R=tu();H(R,"data-testid",`skeleton-${U}`),q(B=>Pn(R,B),[()=>`aspect-ratio: ${d(te.sizePreset)};`]),k(J,R)}),q(J=>we(V,1,J),[()=>`grid self-start items-start ${s(te.imageCount,te.sizePreset)} gap-4 p-4 w-full ${u(te.imageCount,te.sizePreset)} mx-auto`]),k(S,F)},M=S=>{var F=nu(),z=c(F);Ye(z,21,()=>C.results,Jr,(R,B,I)=>{{let W=ee(n);sa(R,{get result(){return i(B)},index:I,onPreview:o,get sizePreset(){return i(W)}})}});var V=p(z,2),J=c(V),Y=p(c(J),4),U=c(Y);q(R=>{we(z,1,R),K(U,i(P))},[()=>`grid self-start items-start ${s(C.results.length,n())} gap-4 p-4 w-full ${u(C.results.length,n())} mx-auto opacity-45 transition-opacity`]),k(S,F)},A=S=>{var F=au(),z=c(F),V=p(c(z),2),J=c(V),Y=p(V,2);q(()=>K(J,C.error)),D("click",Y,function(...U){zr?.apply(this,U)}),k(S,F)},O=S=>{var F=su();Ye(F,21,()=>C.results,Jr,(z,V,J)=>{{let Y=ee(n);sa(z,{get result(){return i(V)},index:J,onPreview:o,get sizePreset(){return i(Y)}})}}),q(z=>we(F,1,z),[()=>`grid self-start items-start ${s(C.results.length,n())} gap-4 p-4 w-full ${u(C.results.length,n())} mx-auto`]),k(S,F)};G(x,S=>{C.status==="idle"&&C.results.length===0?S(y):C.status==="generating"&&!i(m)?S(N,1):C.status==="generating"&&i(m)?S(M,2):C.status==="error"?S(A,3):C.status==="complete"&&C.results.length>0&&S(O,4)})}var b=p(x,2);{var w=S=>{var F=iu(),z=c(F),V=c(z),J=p(V,2);q(()=>{H(J,"src",i(v).imageDataUrl),H(J,"alt",`Generated image ${i(r)+1} preview`)}),D("click",F,g),D("keydown",F,Y=>Y.key==="Escape"&&f()),D("click",V,f),k(S,F)};G(b,S=>{i(v)?.status==="success"&&i(r)!==null&&S(w)})}k(e,_),Se()}De(["click","keydown"]);var uu=E('<img class="block h-full w-full object-contain"/>'),cu=E('<div class="w-full h-full flex items-center justify-center text-slate-400 text-xs">?</div>'),du=E('<button class="flex-shrink-0 flex flex-col items-center gap-1 cursor-pointer group"><div><div class="flex h-full w-full items-center justify-center overflow-hidden rounded-[4px] bg-slate-100"><!></div></div> <span class="text-[10px] text-slate-500 group-hover:text-slate-700"> </span></button>'),fu=E('<div data-testid="run-strip" class="border-t border-slate-200 bg-white px-4 py-2"><div class="flex gap-2 overflow-x-auto"></div></div>');function vu(e,t){ke(t,!1);function r(d){return d.images.find(f=>f.status==="success")?.imageDataUrl??null}function n(d){return d.replace(":"," / ")}Wa();var a=xr(),s=me(a);{var u=d=>{var o=fu(),f=c(o);Ye(f,7,()=>C.sessionRuns,v=>v.id,(v,m,h)=>{const P=Or(()=>r(i(m)));var g=du(),_=c(g),x=c(_),y=c(x);{var N=b=>{var w=uu();q(()=>{H(w,"src",i(P)),H(w,"alt",`Run ${i(h)+1}`)}),k(b,w)},M=b=>{var w=cu();k(b,w)};G(y,b=>{i(P)?b(N):b(M,-1)})}var A=p(_,2),O=c(A);q(b=>{H(g,"data-testid",`run-thumbnail-${i(h)??""}`),H(_,"data-testid",`run-thumbnail-frame-${i(h)??""}`),we(_,1,`h-8 shrink-0 rounded border-2 ${C.activeRunIndex===i(h)?"border-indigo-500":"border-slate-200"}`),Pn(_,b),K(O,`Run ${i(h)+1}`)},[()=>`aspect-ratio: ${n(i(m).sizePreset)};`]),D("click",g,()=>Cl(i(h))),k(v,g)}),k(d,o)};G(s,d=>{C.sessionRuns?.length>1&&d(u)})}k(e,a),Se()}De(["click"]);var pu=E('<p class="text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-400 mt-2">Feedback</p> <p class="mt-1 text-sm text-slate-700 whitespace-pre-wrap break-words"> </p>',1),hu=E('<p class="mt-1 text-xs text-slate-500"> </p>'),gu=E('<span data-testid="selected-count" class="shrink-0 text-sm text-slate-500"> </span>'),bu=E('<button type="button" data-testid="iterate-button" class="px-4 py-1.5 text-sm font-medium text-white bg-indigo-600 rounded-lg hover:bg-indigo-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">Iterate</button>'),mu=E(`<div data-testid="action-bar" class="border-t border-slate-200 bg-white px-4 py-2"><div class="mb-2 rounded-lg border border-slate-200 bg-slate-50 px-3 py-2"><div class="flex items-start justify-between gap-3"><div class="min-w-0 flex-1"><p class="text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-400">Prompt Used</p> <p class="mt-1 text-sm text-slate-700 whitespace-pre-wrap break-words"> </p> <!> <!> <p class="mt-2 text-xs text-slate-500"> </p></div> <!></div></div> <div class="flex items-center gap-3"><input type="text" data-testid="feedback-input" class="flex-1 px-3 py-1.5 text-sm border border-slate-300 rounded-lg focus:outline-none focus:ring-1 focus:ring-indigo-500 focus:border-indigo-500" placeholder="Describe changes you'd like..."/> <div class="flex items-center gap-2"><!> <button type="button" data-testid="run-again-button" class="px-4 py-1.5 text-sm font-medium text-slate-700 bg-slate-200 rounded-lg hover:bg-slate-300 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">Run Again</button></div></div></div>`);function _u(e,t){ke(t,!0);let r=L(""),n=ee(ss),a=ee(()=>C.results.length>0),s=ee(()=>C.status==="generating"),u=ee(()=>i(n).length>0||i(r).length>0),d=ee(()=>C.sessionRuns[C.activeRunIndex]??null),o=ee(()=>i(n).length>0?`Using ${i(n).length} selected image${i(n).length===1?"":"s"} as visual references for the next iteration.`:i(r).length>0?"No images selected. This iteration will use the project references with your feedback.":"Tip: click one or more images above to carry them forward visually, then describe the changes you want."),f=ee(()=>i(d)?te.availableModels.find(y=>y.id===i(d).model)?.label??i(d).model:null),v=ee(()=>i(d)?`${i(d).sizePreset} · ${i(d).imageCount} image${i(d).imageCount===1?"":"s"} · ${i(f)}`:null);function m(y){const N=y.target;l(r,N.value,!0),Xr(N.value)}async function h(){aa(),Xr(""),l(r,"");try{await pn({prompt:C.prompt})}catch(y){console.error("handleRegenerate: unexpected error",y)}}async function P(){try{await pn({prompt:C.prompt})}catch(y){console.error("handleIterate: unexpected error",y)}l(r,""),Xr(""),aa()}var g=xr(),_=me(g);{var x=y=>{var N=mu(),M=c(N),A=c(M),O=c(A),b=p(c(O),2),w=c(b),S=p(b,2);{var F=ne=>{var le=pu(),xe=p(me(le),2),Ne=c(xe);q(()=>K(Ne,i(d).feedback)),k(ne,le)};G(S,ne=>{i(d)?.feedback&&ne(F)})}var z=p(S,2);{var V=ne=>{var le=hu(),xe=c(le);q(()=>K(xe,i(v))),k(ne,le)};G(z,ne=>{i(v)&&ne(V)})}var J=p(z,2),Y=c(J),U=p(O,2);{var R=ne=>{var le=gu(),xe=c(le);q(()=>K(xe,`${i(n).length??""} selected`)),k(ne,le)};G(U,ne=>{i(n).length>0&&ne(R)})}var B=p(M,2),I=c(B),W=p(I,2),X=c(W);{var ae=ne=>{var le=bu();q(()=>le.disabled=i(s)),D("click",le,P),k(ne,le)};G(X,ne=>{i(u)&&ne(ae)})}var oe=p(X,2);q(()=>{K(w,i(d)?.prompt??C.prompt),K(Y,i(o)),dt(I,i(r)),oe.disabled=i(s)}),D("input",I,m),D("click",oe,h),k(y,N)};G(_,y=>{i(a)&&y(x)})}k(e,g),Se()}De(["input","click"]);var xu=E('<div data-testid="canvas" class="flex-1 flex flex-col bg-slate-50 overflow-auto"><div class="flex-1 flex justify-center p-6 overflow-auto"><!></div> <!> <!></div>');function yu(e){var t=xu(),r=c(t),n=c(r);lu(n,{});var a=p(r,2);vu(a,{});var s=p(a,2);_u(s,{}),k(e,t)}var wu=E("<option> </option>"),ku=E(`<select data-testid="size-presets" class="text-xs text-slate-700 bg-slate-200 rounded-full px-3 py-1 font-medium cursor-pointer hover:bg-slate-300 transition-colors focus:outline-none focus:ring-1 focus:ring-indigo-500 appearance-none pr-6 bg-no-repeat bg-[length:12px] bg-[right_8px_center] bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2364748b%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')]"></select>`);function Su(e,t){ke(t,!1);function r(s){const u=s.target;Vo(u.value)}Wa();var n=ku();Ye(n,5,()=>xo,s=>s,(s,u)=>{var d=wu(),o=c(d),f={};q(()=>{K(o,i(u)),f!==(f=i(u))&&(d.value=(d.__value=i(u))??"")}),k(s,d)});var a;Va(n),q(()=>{a!==(a=te.sizePreset)&&(n.value=(n.__value=te.sizePreset)??"",Cn(n,te.sizePreset))}),D("change",n,r),k(e,n),Se()}De(["change"]);var ju=E('<textarea data-testid="prompt-textarea" class="w-full rounded-lg border border-slate-200 bg-slate-50 px-3 py-2 text-sm text-slate-900 placeholder:text-slate-400 focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 focus:outline-none resize-none" rows="2" placeholder="Describe what you want to generate..."></textarea>'),Eu=E("<button> </button>"),Ru=E("<option> </option>"),Pu=E('<button type="button" data-testid="model-settings-button" class="flex h-7 w-7 items-center justify-center rounded-full border border-slate-200 bg-white text-slate-500 hover:bg-slate-50 hover:text-slate-700 cursor-pointer" aria-label="Manage models"><svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path><path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"></path></svg></button>'),Cu=E('<button type="button" class="text-xs font-medium text-amber-800 underline decoration-amber-300 underline-offset-2 hover:text-amber-900 cursor-pointer">Open Project Settings</button>'),Iu=E('<p class="text-right text-xs text-amber-700"> </p> <!>',1),Mu=E('<div class="flex max-w-64 flex-col items-end gap-1.5"><button data-testid="generate-button"> </button> <!></div>'),Du=E(`<div data-testid="generation-form" class="space-y-3"><!> <div class="flex items-start justify-between gap-4"><div class="flex items-center gap-6"><div class="flex flex-col gap-1"><span class="text-xs text-slate-500">Size</span> <!></div> <div class="flex flex-col gap-1"><span class="text-xs text-slate-500">Images</span> <div class="flex items-center gap-1.5"></div></div> <div class="flex flex-col gap-1"><span class="text-xs text-slate-500">Model</span> <div class="flex items-center gap-1.5"><select data-testid="model-select" class="text-xs text-slate-700 bg-slate-200 rounded-full px-3 py-1 font-medium cursor-pointer hover:bg-slate-300 transition-colors focus:outline-none focus:ring-1 focus:ring-indigo-500 appearance-none pr-6 bg-no-repeat bg-[length:12px] bg-[right_8px_center] bg-[url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2364748b%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')]"></select> <!></div></div></div> <!></div></div>`);function Tu(e,t){ke(t,!0);let r=pr(t,"prompt",15,""),n=pr(t,"variant",3,"full");const a=yo;function s(U){const R=U.target;r(R.value)}function u(){i(f)||t.onGenerate?.()}function d(U){const R=U.target;Wo(R.value)}function o(U){if(!U||U.readiness.generate)return null;if(U.mode==="none")return"Add shared, style, or subject references in Project Settings to get this project ready.";const R=[];return(U.mode==="style"||U.mode==="both")&&!U.guides.stylePresent&&R.push("visual style"),(U.mode==="subject"||U.mode==="both")&&!U.guides.subjectPresent&&R.push("subject guide"),R.length===2?"Generate a visual style and subject guide from your references in Project Settings before generating.":R[0]==="visual style"?"Generate a visual style from your references in Project Settings before generating.":R[0]==="subject guide"?"Generate a subject guide from your references in Project Settings before generating.":"Finish setting up this project in Project Settings before generating."}let f=ee(()=>!r().trim()||!te.apiKeyConfigured||!Mt.value?.readiness.generate||C.status==="generating"),v=ee(()=>o(Mt.value)),m=ee(()=>n()==="full"),h=ee(()=>n()==="full");var P=Du(),g=c(P);{var _=U=>{var R=ju();q(()=>dt(R,r())),D("input",R,s),k(U,R)};G(g,U=>{i(m)&&U(_)})}var x=p(g,2),y=c(x),N=c(y),M=p(c(N),2);Su(M,{});var A=p(N,2),O=p(c(A),2);Ye(O,20,()=>a,U=>U,(U,R)=>{var B=Eu(),I=c(B);q(()=>{H(B,"data-testid",`image-count-${R??""}`),we(B,1,`w-7 h-7 rounded-full text-xs font-medium transition-colors cursor-pointer ${te.imageCount===R?"bg-indigo-600 text-white":"bg-slate-200 text-slate-700 hover:bg-slate-300"}`),K(I,R)}),D("click",B,()=>Jo(R)),k(U,B)});var b=p(A,2),w=p(c(b),2),S=c(w);Ye(S,21,()=>te.availableModels,U=>U.id,(U,R)=>{var B=Ru(),I=c(B),W={};q(()=>{K(I,i(R).label),W!==(W=i(R).id)&&(B.value=(B.__value=i(R).id)??"")}),k(U,B)});var F;Va(S);var z=p(S,2);{var V=U=>{var R=Pu();D("click",R,()=>t.onOpenModelSettings?.()),k(U,R)};G(z,U=>{t.onOpenModelSettings&&U(V)})}var J=p(y,2);{var Y=U=>{var R=Mu(),B=c(R),I=c(B),W=p(B,2);{var X=ae=>{var oe=Iu(),ne=me(oe),le=c(ne),xe=p(ne,2);{var Ne=Te=>{var $e=Cu();D("click",$e,()=>t.onOpenSettings?.()),k(Te,$e)};G(xe,Te=>{t.onOpenSettings&&Te(Ne)})}q(()=>K(le,i(v))),k(ae,oe)};G(W,ae=>{i(v)&&ae(X)})}q(()=>{we(B,1,`px-4 py-1.5 rounded-lg text-sm font-medium transition-colors ${i(f)?"bg-slate-200 text-slate-400 cursor-not-allowed":"bg-indigo-600 text-white hover:bg-indigo-700 cursor-pointer"}`),B.disabled=i(f),K(I,C.status==="generating"?"Generating...":"Generate")}),D("click",B,u),k(U,R)};G(J,U=>{i(h)&&U(Y)})}q(()=>{F!==(F=te.model)&&(S.value=(S.__value=te.model)??"",Cn(S,te.model))}),D("change",S,d),k(e,P),Se()}De(["input","click","change"]);var Au=E('<span class="truncate text-slate-500"> </span>'),Ou=E('<div data-testid="drawer-content" class="px-4 pb-4"><!></div>'),Fu=E('<div data-testid="drawer"><button data-testid="drawer-collapsed-bar" class="flex items-center w-full px-4 h-[44px] text-left text-sm text-slate-600 hover:bg-slate-50 transition-colors cursor-pointer gap-2"><svg fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M5 15l7-7 7 7"></path></svg> <!> <span class="ml-auto flex items-center gap-2 text-xs text-slate-400"><span> </span> <span class="text-slate-300">|</span> <span> </span></span></button> <!></div>');function Nu(e,t){ke(t,!0);let r=L(!0),n=L(""),a=!1,s=ee(()=>C.activeSessionId!==null||C.sessionRuns.length>0);ct(()=>{i(s)&&!a&&l(r,!1),!i(s)&&a&&(l(n,C.prompt,!0),l(r,!0)),a=i(s)});function u(){l(r,!i(r))}async function d(){try{await pn({prompt:i(n).trim()})}catch(O){console.error("handleGenerate: unexpected error",O)}}let o=ee(()=>i(s)?"Next iteration settings":i(n).trim()||"Describe what you want to generate...");var f=Fu(),v=c(f),m=c(v),h=p(m,2);{var P=O=>{var b=Au(),w=c(b);q(()=>K(w,i(o))),k(O,b)};G(h,O=>{i(r)||O(P)})}var g=p(h,2),_=c(g),x=c(_),y=p(_,4),N=c(y),M=p(v,2);{var A=O=>{var b=Ou(),w=c(b);{let S=ee(()=>i(s)?"settings":"full");Tu(w,{get variant(){return i(S)},onGenerate:d,get onOpenSettings(){return t.onOpenSettings},get onOpenModelSettings(){return t.onOpenModelSettings},get prompt(){return i(n)},set prompt(F){l(n,F,!0)}})}k(O,b)};G(M,O=>{i(r)&&O(A)})}q(()=>{we(f,1,`border-t border-slate-200 bg-white transition-all duration-200 ease-in-out ${i(r)?"expanded":""}`),we(m,0,`w-4 h-4 text-slate-400 transition-transform duration-200 ${i(r)?"rotate-180":""}`),K(x,te.sizePreset),K(N,`${te.imageCount??""} images`)}),D("click",v,u),k(e,f),Se()}De(["click"]);var Lu=E('<p class="mt-4 text-sm text-red-600"> </p>'),Uu=E('<span class="rounded-full bg-indigo-100 px-2 py-0.5 text-[11px] font-semibold text-indigo-700">Default</span>'),zu=E('<button class="rounded-lg border border-slate-300 px-3 py-1.5 text-xs font-medium text-slate-700 hover:bg-slate-50 cursor-pointer">Set Default</button>'),Bu=E('<button class="rounded-lg border border-red-200 px-3 py-1.5 text-xs font-medium text-red-600 hover:bg-red-50 cursor-pointer">Remove</button>'),Gu=E('<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4"><div class="flex flex-wrap items-start justify-between gap-3"><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-2"><p class="truncate text-sm font-semibold text-slate-900"> </p> <!> <span class="rounded-full bg-slate-100 px-2 py-0.5 text-[11px] font-medium text-slate-600"> </span></div> <p class="mt-1 break-all font-mono text-xs text-slate-500"> </p></div> <div class="flex items-center gap-2"><!> <!></div></div> <div class="mt-3"><input type="text" class="rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-900"/> <p class="mt-2 text-xs text-slate-500">Image Sprout validates this model against OpenRouter and handles compatibility automatically.</p></div></div>'),qu=E('<div class="fixed inset-0 z-[70] flex items-center justify-center bg-black/45 px-4" role="dialog" aria-modal="true" aria-label="Manage models" tabindex="-1"><div class="w-full max-w-3xl overflow-hidden rounded-2xl bg-white shadow-2xl"><div class="flex items-center justify-between border-b border-slate-200 px-6 py-4"><div><h2 class="text-lg font-semibold text-slate-900">Manage Models</h2> <p class="mt-1 text-sm text-slate-500">These models are shared between the CLI and web app. Restore defaults anytime.</p></div> <button class="rounded-md p-1 text-slate-400 hover:text-slate-700 cursor-pointer" aria-label="Close"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button></div> <div class="max-h-[80vh] overflow-y-auto px-6 py-5"><div class="rounded-2xl border border-slate-200 bg-slate-50 px-4 py-4"><h3 class="text-sm font-semibold text-slate-900">Add Model</h3> <div class="mt-3 grid gap-3 md:grid-cols-[1.8fr_1fr_auto]"><input type="text" class="rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-900" placeholder="OpenRouter model id, e.g. provider/model-name"/> <input type="text" class="rounded-lg border border-slate-300 px-3 py-2 text-sm text-slate-900" placeholder="Friendly label (optional)"/> <button class="rounded-lg bg-indigo-600 px-4 py-2 text-sm font-medium text-white hover:bg-indigo-700 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer">Add</button></div> <p class="mt-2 text-xs text-slate-500">If the label is omitted, Image Sprout will use the OpenRouter model name when it can fetch it. Only OpenRouter models that accept image input and return image output can be added.</p></div> <!> <div class="mt-6 space-y-3"></div></div> <div class="flex items-center justify-between border-t border-slate-200 px-6 py-4"><button class="rounded-lg border border-slate-300 px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 cursor-pointer">Restore Defaults</button> <button class="rounded-lg bg-slate-900 px-4 py-2 text-sm font-medium text-white hover:bg-slate-800 cursor-pointer">Done</button></div></div></div>');function Ku(e,t){ke(t,!0);let r=L(""),n=L(""),a=L(!1),s=L(null);async function u(){const g=i(r).trim();if(!(!g||i(a))){l(a,!0),l(s,null);try{await Yo({id:g,label:i(n).trim()||void 0}),l(r,""),l(n,"")}catch(_){l(s,_ instanceof Error?_.message:"Failed to add model",!0)}finally{l(a,!1)}}}async function d(g){l(a,!0),l(s,null);try{await $o(g)}catch(_){l(s,_ instanceof Error?_.message:"Failed to set default model",!0)}finally{l(a,!1)}}async function o(g){l(a,!0),l(s,null);try{await Zo(g)}catch(_){l(s,_ instanceof Error?_.message:"Failed to remove model",!0)}finally{l(a,!1)}}async function f(){l(a,!0),l(s,null);try{await Qo()}catch(g){l(s,g instanceof Error?g.message:"Failed to restore defaults",!0)}finally{l(a,!1)}}async function v(g,_){const x=_.target.value;try{await Xo(g,{label:x})}catch(y){l(s,y instanceof Error?y.message:"Failed to update label",!0)}}var m=xr(),h=me(m);{var P=g=>{var _=qu(),x=c(_),y=c(x),N=p(c(y),2),M=p(y,2),A=c(M),O=p(c(A),2),b=c(O),w=p(b,2),S=p(w,2),F=p(A,2);{var z=R=>{var B=Lu(),I=c(B);q(()=>K(I,i(s))),k(R,B)};G(F,R=>{i(s)&&R(z)})}var V=p(F,2);Ye(V,21,()=>te.availableModels,R=>R.id,(R,B)=>{var I=Gu(),W=c(I),X=c(W),ae=c(X),oe=c(ae),ne=c(oe),le=p(oe,2);{var xe=ve=>{var Pe=Uu();k(ve,Pe)};G(le,ve=>{te.defaultModelId===i(B).id&&ve(xe)})}var Ne=p(le,2),Te=c(Ne),$e=p(ae,2),nr=c($e),ar=p(X,2),Re=c(ar);{var Bt=ve=>{var Pe=zu();D("click",Pe,()=>d(i(B).id)),k(ve,Pe)};G(Re,ve=>{te.defaultModelId!==i(B).id&&ve(Bt)})}var sr=p(Re,2);{var jt=ve=>{var Pe=Bu();D("click",Pe,()=>o(i(B).id)),k(ve,Pe)};G(sr,ve=>{i(B).source==="user"&&ve(jt)})}var ir=p(W,2),Et=c(ir);q(()=>{K(ne,i(B).label),K(Te,i(B).source),K(nr,i(B).id),dt(Et,i(B).label)}),Rt("blur",Et,ve=>v(i(B).id,ve)),k(R,I)});var J=p(M,2),Y=c(J),U=p(Y,2);q(R=>{dt(b,i(r)),dt(w,i(n)),S.disabled=R},[()=>i(a)||!i(r).trim()]),D("click",_,R=>R.target===R.currentTarget&&t.onClose()),D("keydown",_,R=>R.key==="Escape"&&t.onClose()),D("click",N,function(...R){t.onClose?.apply(this,R)}),D("input",b,R=>l(r,R.target.value,!0)),D("input",w,R=>l(n,R.target.value,!0)),D("click",S,u),D("click",Y,f),D("click",U,function(...R){t.onClose?.apply(this,R)}),k(g,_)};G(h,g=>{t.open&&g(P)})}k(e,m),Se()}De(["click","keydown","input"]);var Hu=E('<label class="flex shrink-0 items-start gap-2 pt-0.5"><input type="checkbox" class="mt-0.5 h-4 w-4 rounded border-slate-300 text-amber-600 focus:ring-amber-500"/> <span class="text-sm text-slate-700"> </span></label>'),Vu=E('<p class="mb-2 text-xs text-red-600"> </p>'),Ju=E('<div class="rounded-xl border border-dashed border-slate-200 bg-slate-50 px-4 py-5"><p class="text-sm text-slate-500"> </p></div>'),Wu=E('<div class="mt-0.5 flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-slate-200 bg-white text-slate-400" title="Drag to another section"><svg class="h-4 w-4" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.4"><path stroke-linecap="round" d="M5 3h.01M5 6.5h.01M5 10h.01M5 13h.01M11 3h.01M11 6.5h.01M11 10h.01M11 13h.01"></path></svg></div>'),Yu=E('<article><div class="relative"><button class="block aspect-square w-full overflow-hidden rounded-lg bg-slate-100 cursor-pointer"><img class="h-full w-full object-cover"/></button> <button class="absolute right-1.5 top-1.5 flex h-7 w-7 items-center justify-center rounded-full bg-white/90 text-slate-500 shadow-sm hover:bg-white hover:text-red-600 cursor-pointer"><svg class="h-3.5 w-3.5" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8"><path stroke-linecap="round" d="M4 4l8 8M12 4l-8 8"></path></svg></button></div> <div class="mt-2 flex items-start justify-between gap-2"><div class="min-w-0"><p class="truncate text-[11px] font-medium text-slate-700"> </p> <p class="mt-1 text-[11px] text-slate-500"> </p></div> <!></div></article>'),Xu=E('<div class="fixed inset-0 z-[60] flex items-center justify-center bg-black/70 px-4" role="presentation"><div class="max-h-[90vh] max-w-4xl overflow-hidden rounded-xl bg-white shadow-2xl"><div class="flex items-center justify-between border-b border-slate-200 px-4 py-3"><div class="min-w-0"><h4 class="truncate text-sm font-medium text-slate-900"> </h4> <p class="text-xs text-slate-500"> </p></div> <div class="flex items-center gap-2"><button class="rounded-md px-2 py-1 text-xs text-slate-600 hover:bg-slate-100 cursor-pointer">Download</button> <button class="rounded-md px-2 py-1 text-xs text-slate-600 hover:bg-slate-100 cursor-pointer">Close</button></div></div> <img class="max-h-[80vh] w-full object-contain bg-slate-100"/></div></div>'),Zu=E('<section class="rounded-xl border border-slate-200 bg-white"><div class="border-b border-slate-100 px-4 py-3"><div class="flex flex-wrap items-start justify-between gap-4"><div class="min-w-0"><h4 class="text-sm font-semibold text-slate-900"> </h4> <p class="mt-1 text-xs text-slate-500"> </p></div> <!></div></div> <div role="region"><!> <!> <div class="mt-3 flex gap-3 overflow-x-auto pb-1"><!> <button><span>+</span></button></div> <input type="file" multiple="" class="hidden"/></div></section> <!>',1);function Pr(e,t){ke(t,!0);let r=pr(t,"allowRoleMove",3,!1),n=pr(t,"compact",3,!1);const a=["image/png","image/jpeg","image/webp"],s=1024;let u=L(!1),d=L(!1),o=L(void 0),f=L(null),v=L(null);const m="application/x-image-sprout-ref",h=ee(()=>n()?"w-32":"w-44"),P=ee(()=>n()?"text-2xl":"text-3xl"),g=new Map,_=ee(()=>Kt.filter(j=>j.role===t.role));function x(j){let T=g.get(j.id);if(!T){if(!j.blob)return"";T=URL.createObjectURL(j.blob),g.set(j.id,T)}return T}function y(j){return j.dataUrl??x(j)}function N(){for(const[,j]of g)URL.revokeObjectURL(j);g.clear()}ct(()=>{const j=new Set(Kt.map(T=>T.id));for(const[T,Z]of g)j.has(T)||(URL.revokeObjectURL(Z),g.delete(T))}),bo(N);async function M(j){if(!a.includes(j.type))return;let T=null;try{T=await createImageBitmap(j);let{width:Z,height:ie}=T,ye=j;if(Z>s||ie>s){const Ae=s/Math.max(Z,ie),Ke=Math.round(Z*Ae),Qe=Math.round(ie*Ae);if(typeof OffscreenCanvas<"u"){const it=new OffscreenCanvas(Ke,Qe);it.getContext("2d").drawImage(T,0,0,Ke,Qe);const pt=await it.convertToBlob({type:j.type});ye=new File([pt],j.name,{type:j.type}),Z=Ke,ie=Qe}}await ol(ye,Z,ie,t.role)}finally{T&&typeof T.close=="function"&&T.close()}}async function A(j){const T=Array.from(j);l(f,null);for(const Z of T)try{await M(Z)}catch(ie){const ye=ie instanceof Error?ie.message:"Failed to process image";l(f,`Failed to upload ${Z.name}: ${ye}`)}}function O(j){const T=j.target;T.files&&T.files.length>0&&(A(T.files),T.value="")}function b(){i(o)?.click()}function w(j){const T=j.dataTransfer?.types;return Array.isArray(T)?T.includes(m):!!T?.includes?.(m)}function S(j){const T=j.dataTransfer?.types;return Array.isArray(T)?T.includes("Files"):!!T?.includes?.("Files")}function F(j){if(j.preventDefault(),r()&&w(j)){l(d,!0);return}S(j)&&l(u,!0)}function z(j){if(r()&&w(j)){j.preventDefault(),l(d,!0),j.dataTransfer&&(j.dataTransfer.dropEffect="move");return}S(j)&&(j.preventDefault(),l(u,!0))}function V(j){j.preventDefault(),j.currentTarget===j.target&&(l(u,!1),l(d,!1))}async function J(j){if(j.preventDefault(),l(u,!1),l(d,!1),r()&&w(j)){const Z=j.dataTransfer?.getData(m);if(!Z)return;try{const ie=JSON.parse(Z);if(!ie.id||ie.role===t.role)return;await ul(ie.id,t.role)}catch(ie){l(f,ie instanceof Error?ie.message:"Failed to move reference",!0)}return}const T=j.dataTransfer?.files;T&&T.length>0&&await A(T)}async function Y(j){try{await ll(j)}catch(T){l(f,T instanceof Error?T.message:"Failed to delete image",!0)}}function U(j){l(v,j,!0)}function R(){l(v,null)}function B(j){const T=y(j),Z=document.createElement("a");Z.href=T,Z.download=j.filename,Z.click()}function I(j,T){!r()||!j.dataTransfer||(j.dataTransfer.effectAllowed="move",j.dataTransfer.setData(m,JSON.stringify({id:T.id,role:T.role})))}function W(){l(d,!1)}var X=Zu(),ae=me(X),oe=c(ae),ne=c(oe),le=c(ne),xe=c(le),Ne=c(xe),Te=p(xe,2),$e=c(Te),nr=p(le,2);{var ar=j=>{var T=Hu(),Z=c(T),ie=p(Z,2),ye=c(ie);q(()=>{Ja(Z,t.headerAction.checked),Z.disabled=t.headerAction.disabled,K(ye,t.headerAction.label)}),D("change",Z,Ae=>{t.headerAction.onChange(Ae)}),k(j,T)};G(nr,j=>{t.headerAction&&j(ar)})}var Re=p(oe,2),Bt=c(Re);{var sr=j=>{var T=Vu(),Z=c(T);q(()=>{H(T,"data-testid",`upload-error-${t.role}`),K(Z,i(f))}),k(j,T)};G(Bt,j=>{i(f)&&j(sr)})}var jt=p(Bt,2);{var ir=j=>{var T=Ju(),Z=c(T),ie=c(Z);q(()=>K(ie,t.emptyLabel)),k(j,T)};G(jt,j=>{i(_).length===0&&j(ir)})}var Et=p(jt,2),ve=c(Et);Ye(ve,17,()=>i(_),j=>j.id,(j,T)=>{var Z=Yu(),ie=c(Z),ye=c(ie),Ae=c(ye),Ke=p(ye,2),Qe=p(ie,2),it=c(Qe),vt=c(it),pt=c(vt),ht=p(vt,2),Gt=c(ht),He=p(it,2);{var Kr=Ve=>{var kr=Wu();q(()=>H(kr,"aria-label",`Drag ${i(T).filename??""} to another reference section`)),k(Ve,kr)};G(He,Ve=>{r()&&Ve(Kr)})}q(Ve=>{H(Z,"data-testid",`reference-card-${t.role}-${i(T).id}`),we(Z,1,`group ${i(h)} shrink-0 rounded-xl border border-slate-200 bg-slate-50 p-2`),H(Z,"draggable",r()),H(ye,"aria-label",`View ${i(T).filename??""}`),H(Ae,"src",Ve),H(Ae,"alt",i(T).filename),H(Ke,"aria-label",`Delete ${i(T).filename??""}`),H(vt,"title",i(T).filename),K(pt,i(T).filename),K(Gt,i(T).role==="both"?"Shared reference":i(T).role==="style"?"Style only":"Subject only")},[()=>y(i(T))]),Rt("dragstart",Z,Ve=>I(Ve,i(T))),Rt("dragend",Z,W),D("click",ye,()=>U(i(T))),D("click",Ke,()=>Y(i(T).id)),k(j,Z)});var Pe=p(ve,2),Br=c(Pe),or=p(Et,2);ho(or,j=>l(o,j),()=>i(o));var Gr=p(ae,2);{var qr=j=>{var T=Xu(),Z=c(T),ie=c(Z),ye=c(ie),Ae=c(ye),Ke=c(Ae),Qe=p(Ae,2),it=c(Qe),vt=p(ye,2),pt=c(vt),ht=p(pt,2),Gt=p(ie,2);q(He=>{K(Ke,i(v).filename),K(it,`Role: ${i(v).role??""}`),H(Gt,"src",He),H(Gt,"alt",i(v).filename)},[()=>y(i(v))]),D("click",T,He=>{He.target===He.currentTarget&&R()}),D("click",pt,()=>i(v)&&B(i(v))),D("click",ht,R),k(j,T)};G(Gr,j=>{i(v)&&j(qr)})}q(j=>{K(Ne,t.title),K($e,t.description),H(Re,"data-testid",`reference-images-dropzone-${t.role}`),we(Re,1,`px-4 py-4 transition-colors ${i(u)?"rounded-b-xl border-2 border-dashed border-amber-400 bg-amber-50":""} ${i(d)?"rounded-b-xl border-2 border-dashed border-sky-400 bg-sky-50/80":""}`),H(Re,"aria-label",t.title),H(Pe,"data-testid",`upload-tile-${t.role}`),we(Pe,1,`flex aspect-square ${i(h)} shrink-0 items-center justify-center rounded-xl border-2 border-dashed border-slate-300 bg-white text-slate-400 hover:border-amber-400 hover:text-amber-600 transition-colors cursor-pointer`),we(Br,1,oo(i(P))),H(or,"accept",j)},[()=>a.join(",")]),Rt("dragenter",Re,F),Rt("dragover",Re,z),Rt("dragleave",Re,V),Rt("drop",Re,j=>{J(j)}),D("click",Pe,b),D("change",or,O),k(e,X),Se()}De(["change","click"]);var $u=E('<div class="flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-slate-50 px-5 py-4"><p class="text-xs text-slate-600">Need a reference to influence both guides?</p> <button type="button" class="rounded-lg border border-slate-300 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 hover:bg-slate-50 cursor-pointer">Show Shared References</button></div>'),Qu=E('<div class="flex items-start justify-between gap-4 rounded-2xl border border-slate-200 bg-slate-50 px-5 py-4"><div class="max-w-2xl"><h3 class="text-sm font-semibold text-slate-900">Split Reference Sets</h3> <p class="mt-1 text-xs text-slate-500">Keep style and subject references separate when the same images should not drive both guides.</p></div> <label class="flex shrink-0 items-start gap-2 pt-0.5"><input type="checkbox" class="mt-0.5 h-4 w-4 rounded border-slate-300 text-amber-600 focus:ring-amber-500"/> <span class="text-sm text-slate-700">Enabled</span></label></div> <div class="grid gap-4 xl:grid-cols-2"><!> <!></div> <!>',1),ec=E('<p data-testid="derive-error" class="mt-3 text-xs text-red-600"> </p>'),tc=E('<p class="mt-3 text-xs text-emerald-700"> </p>'),rc=E('<div class="xl:col-span-2"><span class="inline-flex items-center rounded-full border border-amber-200 bg-amber-50 px-3 py-1 text-xs font-medium text-amber-800">Unsaved project profile changes</span></div>'),nc=E('<div class="border-t border-slate-100 px-5 py-4"><textarea data-testid="instructions-textarea" class="min-h-28 w-full resize-y rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm text-slate-700 focus:border-amber-500 focus:outline-none focus:ring-1 focus:ring-amber-500" placeholder="Add instructions that should apply to every generation..."></textarea></div>'),ac=E('<p class="mr-auto text-xs text-slate-500">Derived guides stay local until you save them.</p>'),sc=E('<button data-testid="settings-cancel-btn" class="rounded-lg border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors cursor-pointer">Cancel</button> <button data-testid="settings-save-btn" class="rounded-lg bg-amber-600 px-4 py-2 text-sm font-medium text-white hover:bg-amber-700 transition-colors cursor-pointer">Save Edits</button>',1),ic=E('<button data-testid="settings-close-btn" class="rounded-lg border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 transition-colors cursor-pointer">Close</button>'),oc=E('<div data-testid="settings-modal-backdrop" class="fixed inset-0 z-50 flex items-center justify-center bg-black/40" role="dialog" aria-modal="true" aria-label="Project Settings" tabindex="-1"><div data-testid="settings-modal-panel" class="mx-4 flex max-h-[88vh] w-full max-w-6xl flex-col overflow-hidden rounded-2xl bg-[linear-gradient(180deg,#fffdf7_0%,#ffffff_18%,#f8fafc_100%)] shadow-xl"><div class="flex items-center justify-between border-b border-slate-200 px-6 py-4"><div><h2 class="text-lg font-semibold text-slate-900">Project Profile</h2> <p class="text-sm text-slate-500">Define shared, style-only, and subject-only references, then derive the guides the generator depends on.</p></div> <button data-testid="settings-modal-close" class="p-1 text-slate-400 hover:text-slate-600 transition-colors cursor-pointer" aria-label="Close"><svg class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"></path></svg></button></div> <div class="flex-1 overflow-y-auto px-6 py-5"><div class="rounded-2xl border border-amber-200 bg-amber-50/70 p-4"><div class="flex flex-wrap items-center gap-4"><div><p class="text-xs font-semibold uppercase tracking-[0.16em] text-amber-700">Project Status</p> <p class="mt-1 text-sm text-slate-700">Mode: <span class="font-medium"> </span></p></div> <div class="grid flex-1 gap-2 text-xs text-slate-700 sm:grid-cols-4"><div class="rounded-xl bg-white/80 px-3 py-2">Shared refs: <span class="font-medium"> </span></div> <div class="rounded-xl bg-white/80 px-3 py-2">Style ready: <span class="font-medium"> </span></div> <div class="rounded-xl bg-white/80 px-3 py-2">Subject ready: <span class="font-medium"> </span></div> <div class="rounded-xl bg-white/80 px-3 py-2">API key: <span class="font-medium"> </span></div></div></div></div> <div class="mt-6 space-y-4"><!> <!></div> <div class="mt-6 rounded-2xl border border-slate-200 bg-white px-5 py-4"><div class="flex flex-wrap items-center justify-between gap-3"><div><h3 class="text-sm font-semibold text-slate-900">Derive Guides</h3> <p class="mt-1 text-xs text-slate-500"> </p></div> <div class="flex flex-wrap gap-2"><button data-testid="derive-both-btn" class="rounded-lg bg-amber-600 px-3 py-2 text-xs font-semibold text-white hover:bg-amber-700 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer"> </button> <button class="rounded-lg border border-slate-300 bg-white px-3 py-2 text-xs font-semibold text-slate-700 hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer"> </button> <button class="rounded-lg border border-slate-300 bg-white px-3 py-2 text-xs font-semibold text-slate-700 hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer"> </button></div></div> <!></div> <div class="mt-6 grid gap-4 xl:grid-cols-2"><!> <div class="rounded-2xl border border-slate-200 bg-white"><div class="border-b border-slate-100 px-5 py-4"><h3 class="text-sm font-semibold text-slate-900">Visual Style</h3> <p class="mt-1 min-h-10 text-xs text-slate-500">Describe the rendering style, palette, composition tendencies, and overall art direction.</p></div> <div class="px-5 py-4"><textarea data-testid="style-description-textarea" class="min-h-44 w-full resize-y rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm text-slate-700 focus:border-amber-500 focus:outline-none focus:ring-1 focus:ring-amber-500" placeholder="Describe the visual style for this project..."></textarea></div></div> <div class="rounded-2xl border border-slate-200 bg-white"><div class="border-b border-slate-100 px-5 py-4"><h3 class="text-sm font-semibold text-slate-900">Subject Guide</h3> <p class="mt-1 min-h-10 text-xs text-slate-500">Describe the recurring character, product, or subject identity this project should preserve.</p></div> <div class="px-5 py-4"><textarea data-testid="core-instruction-textarea" class="min-h-44 w-full resize-y rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm text-slate-700 focus:border-amber-500 focus:outline-none focus:ring-1 focus:ring-amber-500" placeholder="Describe the recurring subject identity for this project..."></textarea></div></div> <div class="rounded-2xl border border-slate-200 bg-white xl:col-span-2"><button type="button" class="flex w-full items-start justify-between gap-4 px-5 py-4 text-left cursor-pointer"><div><h3 class="text-sm font-semibold text-slate-900">Instructions</h3> <p class="mt-1 text-xs text-slate-500">Advanced project-level instructions that apply to every generation, such as watermark, framing, or branding requirements. Use Visual Style and Subject Guide first when those are enough.</p></div> <span class="rounded-full border border-slate-200 bg-slate-50 px-3 py-1 text-xs font-medium text-slate-600"> </span></button> <!></div></div></div> <div class="flex items-center justify-end gap-3 border-t border-slate-200 px-6 py-4"><!> <!></div></div></div>');function lc(e,t){ke(t,!0);let r=L(""),n=L(""),a=L(""),s=L(""),u=L(""),d=L(""),o=L(null),f=L(null),v=L(null),m=L(!1),h=L(!1),P=L(!1),g=L(!1),_=ee(()=>Kt.filter(I=>I.role!=="both").length),x=ee(()=>Kt.filter(I=>I.role==="both").length),y=ee(()=>i(_)>0),N=!1;ct(()=>{if(t.open&&!N){const I=Ur();l(r,I?.subjectGuide??"",!0),l(n,I?.visualStyle??"",!0),l(a,I?.instructions??"",!0),l(s,i(r),!0),l(u,i(n),!0),l(d,i(a),!0),l(f,null),l(v,null),l(o,null),l(m,Kt.some(W=>W.role!=="both"),!0),l(h,!1),l(P,Kt.some(W=>W.role==="both"),!0),l(g,(I?.instructions??"").trim().length>0),N=!0}t.open||(N=!1)}),ct(()=>{t.open&&i(y)&&l(m,!0)}),ct(()=>{i(x)>0&&l(P,!0)});let M=ee(()=>i(r)!==i(s)||i(n)!==i(u)||i(a)!==i(d));async function A(I){const W=ft.value;if(!(!W||i(o))){l(o,I,!0),l(f,null),l(v,null);try{const X=await il(W,I,{persist:!1});(I==="both"||I==="style")&&l(n,X.visualStyle??"",!0),(I==="both"||I==="subject")&&l(r,X.subjectGuide??"",!0),l(v,I==="both"?"Style and subject guides were derived. Review them, then save to apply.":I==="style"?"Visual style was derived. Save to apply it.":"Subject guide was derived. Save to apply it.",!0)}catch(X){l(f,X instanceof Error?X.message:"Derivation failed",!0)}finally{l(o,null)}}}async function O(){const I=ft.value;if(I)try{await sl(I,{subjectGuide:i(r),visualStyle:i(n),instructions:i(a)}),l(s,i(r),!0),l(u,i(n),!0),l(d,i(a),!0),l(v,null),t.onClose()}catch(W){l(f,W instanceof Error?W.message:"Failed to save settings",!0)}}function b(){l(r,i(s),!0),l(n,i(u),!0),l(a,i(d),!0),l(f,null),l(v,null),t.onClose()}function w(I){I.target===I.currentTarget&&b()}function S(I){I.key==="Escape"&&b()}function F(I){l(r,I.target.value,!0),l(v,null)}function z(I){l(n,I.target.value,!0),l(v,null)}function V(I){l(a,I.target.value,!0),l(v,null)}function J(){return i(m)?"Derive visual style from style references and subject guide from subject references.":"Derive both guides from the project references."}async function Y(I){if(I.target.checked){l(m,!0);return}l(h,!0),l(f,null);try{await cl(),l(m,!1)}catch(X){l(f,X instanceof Error?X.message:"Failed to merge references",!0),l(m,!0)}finally{l(h,!1)}}var U=xr(),R=me(U);{var B=I=>{var W=oc(),X=c(W),ae=c(X),oe=p(c(ae),2),ne=p(ae,2),le=c(ne),xe=c(le),Ne=c(xe),Te=p(c(Ne),2),$e=p(c(Te)),nr=c($e),ar=p(Ne,2),Re=c(ar),Bt=p(c(Re)),sr=c(Bt),jt=p(Re,2),ir=p(c(jt)),Et=c(ir),ve=p(jt,2),Pe=p(c(ve)),Br=c(Pe),or=p(ve,2),Gr=p(c(or)),qr=c(Gr),j=p(le,2),T=c(j);{var Z=$=>{var ue=Qu(),Le=me(ue),Hr=p(c(Le),2),Vr=c(Hr),Ln=p(Le,2),Un=c(Ln);Pr(Un,{title:"Visual Style References",description:"Moodboards, palettes, rendering examples, and composition cues.",role:"style",emptyLabel:"Upload style-only references when the project's look should be separated from its subject.",allowRoleMove:!0,compact:!0});var ks=p(Un,2);Pr(ks,{title:"Subject References",description:"Character sheets, product shots, or recurring subject references.",role:"subject",emptyLabel:"Upload subject-only references when the project's subject should be separated from its look.",allowRoleMove:!0,compact:!0});var Ss=p(Ln,2);{var js=qt=>{Pr(qt,{title:"Shared References (Optional)",description:"Keep only the references that should influence both guides. Drag cards here or out to style/subject when needed.",role:"both",emptyLabel:"Drop shared references here only when an image should influence both style and subject.",allowRoleMove:!0,compact:!0})},Es=qt=>{var zn=$u(),Rs=p(c(zn),2);D("click",Rs,()=>l(P,!0)),k(qt,zn)};G(Ss,qt=>{i(x)>0||i(P)?qt(js):qt(Es,-1)})}q(()=>{Ja(Vr,i(m)),Vr.disabled=i(h)}),D("change",Vr,Y),k($,ue)};G(T,$=>{i(m)&&$(Z)})}var ie=p(T,2);{var ye=$=>{{let ue=ee(()=>({label:"Split style and subject references",checked:i(m),disabled:i(h),onChange:Y}));Pr($,{title:"Project References",description:"Used for both the visual style and subject guide. This is the default reference set for the project.",role:"both",emptyLabel:"Upload the core references for this project. These will drive both the visual style and the subject guide.",allowRoleMove:!1,get headerAction(){return i(ue)}})}};G(ie,$=>{i(m)||$(ye)})}var Ae=p(j,2),Ke=c(Ae),Qe=c(Ke),it=p(c(Qe),2),vt=c(it),pt=p(Qe,2),ht=c(pt),Gt=c(ht),He=p(ht,2),Kr=c(He),Ve=p(He,2),kr=c(Ve),is=p(Ke,2);{var os=$=>{var ue=ec(),Le=c(ue);q(()=>K(Le,i(f))),k($,ue)},ls=$=>{var ue=tc(),Le=c(ue);q(()=>K(Le,i(v))),k($,ue)};G(is,$=>{i(f)?$(os):i(v)&&$(ls,1)})}var us=p(Ae,2),Dn=c(us);{var cs=$=>{var ue=rc();k($,ue)};G(Dn,$=>{i(M)&&$(cs)})}var Tn=p(Dn,2),ds=p(c(Tn),2),An=c(ds),On=p(Tn,2),fs=p(c(On),2),Fn=c(fs),vs=p(On,2),Sr=c(vs),ps=p(c(Sr),2),hs=c(ps),gs=p(Sr,2);{var bs=$=>{var ue=nc(),Le=c(ue);q(()=>dt(Le,i(a))),D("input",Le,V),k($,ue)};G(gs,$=>{i(g)&&$(bs)})}var ms=p(ne,2),Nn=c(ms);{var _s=$=>{var ue=ac();k($,ue)};G(Nn,$=>{!i(M)&&i(v)&&$(_s)})}var xs=p(Nn,2);{var ys=$=>{var ue=sc(),Le=me(ue),Hr=p(Le,2);D("click",Le,b),D("click",Hr,O),k($,ue)},ws=$=>{var ue=ic();D("click",ue,b),k($,ue)};G(xs,$=>{i(M)?$(ys):$(ws,-1)})}q($=>{K(nr,Mt.value?.mode??"none"),K(sr,Mt.value?.refs.both??0),K(Et,Mt.value?.readiness.style?"yes":"no"),K(Br,Mt.value?.readiness.subject?"yes":"no"),K(qr,te.apiKeyConfigured?"configured":"missing"),K(vt,$),ht.disabled=i(o)!==null,K(Gt,i(o)==="both"?"Deriving style + subject...":"Derive Style + Subject"),He.disabled=i(o)!==null,K(Kr,i(o)==="style"?"Deriving style...":"Derive Style"),Ve.disabled=i(o)!==null,K(kr,i(o)==="subject"?"Deriving subject...":"Derive Subject"),dt(An,i(n)),dt(Fn,i(r)),H(Sr,"aria-expanded",i(g)),K(hs,i(g)?"Hide":"Show")},[J]),D("click",W,w),D("keydown",W,S),D("click",oe,b),D("click",ht,()=>A("both")),D("click",He,()=>A("style")),D("click",Ve,()=>A("subject")),D("input",An,z),D("input",Fn,F),D("click",Sr,()=>l(g,!i(g))),k(I,W)};G(R,I=>{t.open&&I(B)})}k(e,U),Se()}De(["click","keydown","change","input"]);var uc=E('<div class="flex min-h-screen items-center justify-center bg-slate-50 text-sm text-slate-500">Loading Image Sprout...</div>'),cc=E('<div class="flex min-h-screen items-center justify-center bg-slate-50 px-6"><div class="rounded-xl bg-white p-6 text-sm text-red-600 shadow-lg"> </div></div>'),dc=E('<div data-testid="layout" class="grid h-screen" style="grid-template-columns: 300px 1fr"><!> <div data-testid="canvas-column" class="flex flex-col min-h-0 overflow-hidden"><!> <!></div></div> <!> <!>',1);function fc(e,t){ke(t,!0);let r=L(!1),n=L(!1),a=L(null);function s(){l(r,!0)}function u(){l(r,!1)}function d(){l(n,!0)}function o(){l(n,!1)}Ya(async()=>{try{await qo(),await rl(),l(a,null)}catch(_){l(a,_ instanceof Error?_.message:"Failed to load app",!0)}});var f=xr(),v=me(f);{var m=_=>{var x=uc();k(_,x)},h=_=>{var x=cc(),y=c(x),N=c(y);q(()=>K(N,i(a)??te.loadError)),k(_,x)},P=_=>{vl(_,{})},g=_=>{var x=dc(),y=me(x),N=c(y);Vl(N,{onOpenSettings:s});var M=p(N,2),A=c(M);yu(A);var O=p(A,2);Nu(O,{onOpenSettings:s,onOpenModelSettings:d});var b=p(y,2);lc(b,{get open(){return i(r)},onClose:u});var w=p(b,2);Ku(w,{get open(){return i(n)},onClose:o}),k(_,x)};G(v,_=>{!te.ready||te.loading?_(m):i(a)||te.loadError?_(h,1):te.apiKeyConfigured?_(g,-1):_(P,2)})}k(e,f),Se()}Qi(fc,{target:document.getElementById("app")});
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-300:oklch(87.1% .15 154.449);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-400:oklch(74.6% .16 232.661);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-accent-50:#eef2ff;--color-accent-500:#6366f1;--color-accent-600:#4f46e5;--color-accent-700:#4338ca}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:calc(var(--spacing) * 0)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-\[44px\]{height:44px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[88vh\]{max-height:88vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-screen{min-height:100vh}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent-500{border-color:var(--color-accent-500)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-400{border-color:var(--color-amber-400)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-red-200{border-color:var(--color-red-200)}.border-sky-400{border-color:var(--color-sky-400)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-t-indigo-600{border-top-color:var(--color-indigo-600)}.bg-accent-50{background-color:var(--color-accent-50)}.bg-accent-600{background-color:var(--color-accent-600)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:#fffbebb3}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50) 70%,transparent)}}.bg-amber-600{background-color:var(--color-amber-600)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-sky-50\/80{background-color:#f0f9ffcc}@supports (color:color-mix(in lab,red,red)){.bg-sky-50\/80{background-color:color-mix(in oklab,var(--color-sky-50) 80%,transparent)}}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/75{background-color:#020618bf}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/75{background-color:color-mix(in oklab,var(--color-slate-950) 75%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.bg-white\/96{background-color:#fffffff5}@supports (color:color-mix(in lab,red,red)){.bg-white\/96{background-color:color-mix(in oklab,var(--color-white) 96%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(180deg\,\#fffdf7_0\%\,\#ffffff_18\%\,\#f8fafc_100\%\)\]{background-image:linear-gradient(#fffdf7,#fff 18%,#f8fafc)}.bg-\[url\(\'data\:image\/svg\+xml\;charset\=utf-8\,\%3Csvg\%20xmlns\%3D\%22http\%3A\%2F\%2Fwww\.w3\.org\%2F2000\%2Fsvg\%22\%20width\%3D\%2212\%22\%20height\%3D\%2212\%22\%20viewBox\%3D\%220\%200\%2024\%2024\%22\%20fill\%3D\%22none\%22\%20stroke\%3D\%22\%2364748b\%22\%20stroke-width\%3D\%222\%22\%3E\%3Cpath\%20d\%3D\%22M6\%209l6\%206\%206-6\%22\%2F\%3E\%3C\%2Fsvg\%3E\'\)\]{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2364748b%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E)}.from-slate-200{--tw-gradient-from:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-slate-100{--tw-gradient-via:var(--color-slate-100);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-slate-200{--tw-gradient-to:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-\[length\:12px\]{background-size:12px}.bg-\[right_8px_center\]{background-position:right 8px center}.bg-no-repeat{background-repeat:no-repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-600{color:var(--color-accent-600)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-green-300{color:var(--color-green-300)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-300{color:var(--color-red-300)}.text-red-600{color:var(--color-red-600)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.decoration-amber-300{-webkit-text-decoration-color:var(--color-amber-300);text-decoration-color:var(--color-amber-300)}.underline-offset-2{text-underline-offset:2px}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-0{opacity:0}.opacity-45{opacity:.45}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-indigo-600{--tw-ring-color:var(--color-indigo-600)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\:text-slate-700:is(:where(.group):hover *){color:var(--color-slate-700)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}@media(hover:hover){.hover\:border-amber-400:hover{border-color:var(--color-amber-400)}.hover\:bg-accent-700:hover{background-color:var(--color-accent-700)}.hover\:bg-amber-700:hover{background-color:var(--color-amber-700)}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-red-100:hover{background-color:var(--color-red-100)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/40:hover{background-color:#fff6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/40:hover{background-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.hover\:text-accent-600:hover{color:var(--color-accent-600)}.hover\:text-accent-700:hover{color:var(--color-accent-700)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-amber-900:hover{color:var(--color-amber-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}}.focus\:border-amber-500:focus{border-color:var(--color-amber-500)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-accent-500:focus{--tw-ring-color:var(--color-accent-500)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[1\.8fr_1fr_auto\]{grid-template-columns:1.8fr 1fr auto}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}body{font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#app{width:100%;min-height:100vh}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -11,8 +11,8 @@
11
11
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
12
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" />
13
13
  <title>Image Sprout</title>
14
- <script type="module" crossorigin src="/assets/index-Yj_7qKUG.js"></script>
15
- <link rel="stylesheet" crossorigin href="/assets/index-C7ombVWN.css">
14
+ <script type="module" crossorigin src="/assets/index-BX6u0Mtk.js"></script>
15
+ <link rel="stylesheet" crossorigin href="/assets/index-Cs3-aG7c.css">
16
16
  </head>
17
17
  <body>
18
18
  <div id="app"></div>