zframes 0.1.1 → 0.3.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.
Files changed (73) hide show
  1. package/NOTICE +2 -0
  2. package/dist/index.js +1727 -217
  3. package/package.json +7 -6
  4. package/runtime/assets/d3-B3esOK0k.js +1 -0
  5. package/runtime/assets/editor-DVTcqJo4.js +68 -0
  6. package/runtime/assets/editor-DnV0I9s-.css +1 -0
  7. package/runtime/assets/gridstack-BxxvPIFU.js +9 -0
  8. package/runtime/assets/gridstack-FIb_WQSt.css +1 -0
  9. package/runtime/assets/index-DEGnog6Q.css +1 -0
  10. package/runtime/assets/{index-A5M9erCx.js → index-DPlG_EDx.js} +1 -1
  11. package/runtime/assets/index-KRy1feFG.js +761 -0
  12. package/runtime/assets/liveline-C5zt2WuS.js +1 -0
  13. package/runtime/assets/react-qoZPGuNy.js +49 -0
  14. package/runtime/index.html +6 -3
  15. package/runtime/widget-icons/breakeven.png +0 -0
  16. package/runtime/widget-icons/breathing.png +0 -0
  17. package/runtime/widget-icons/btc-blocks.png +0 -0
  18. package/runtime/widget-icons/btc-difficulty.png +0 -0
  19. package/runtime/widget-icons/btc-fees.png +0 -0
  20. package/runtime/widget-icons/btc-hashrate.png +0 -0
  21. package/runtime/widget-icons/btc-mempool.png +0 -0
  22. package/runtime/widget-icons/calculator.png +0 -0
  23. package/runtime/widget-icons/checklist.png +0 -0
  24. package/runtime/widget-icons/coin-movers.png +0 -0
  25. package/runtime/widget-icons/countdown.png +0 -0
  26. package/runtime/widget-icons/day-meter.png +0 -0
  27. package/runtime/widget-icons/dex-volume-chart.png +0 -0
  28. package/runtime/widget-icons/dex-volume-treemap.png +0 -0
  29. package/runtime/widget-icons/dice.png +0 -0
  30. package/runtime/widget-icons/divider.png +0 -0
  31. package/runtime/widget-icons/drawdy.png +0 -0
  32. package/runtime/widget-icons/filings-feed.png +0 -0
  33. package/runtime/widget-icons/financial-stress.png +0 -0
  34. package/runtime/widget-icons/flappy-bird.png +0 -0
  35. package/runtime/widget-icons/fundamentals.png +0 -0
  36. package/runtime/widget-icons/holiday-calendar.png +0 -0
  37. package/runtime/widget-icons/journal-log.png +0 -0
  38. package/runtime/widget-icons/journal-open.png +0 -0
  39. package/runtime/widget-icons/journal-results.png +0 -0
  40. package/runtime/widget-icons/journal-score.png +0 -0
  41. package/runtime/widget-icons/labor-market.png +0 -0
  42. package/runtime/widget-icons/lightning-stats.png +0 -0
  43. package/runtime/widget-icons/link-grid.png +0 -0
  44. package/runtime/widget-icons/market-cap-treemap.png +0 -0
  45. package/runtime/widget-icons/marquee.png +0 -0
  46. package/runtime/widget-icons/mining-pools.png +0 -0
  47. package/runtime/widget-icons/national-debt.png +0 -0
  48. package/runtime/widget-icons/news-feed.png +0 -0
  49. package/runtime/widget-icons/open-interest.png +0 -0
  50. package/runtime/widget-icons/options-iv.png +0 -0
  51. package/runtime/widget-icons/options-oi-strike.png +0 -0
  52. package/runtime/widget-icons/options-put-call.png +0 -0
  53. package/runtime/widget-icons/pomodoro.png +0 -0
  54. package/runtime/widget-icons/portfolio-allocation.png +0 -0
  55. package/runtime/widget-icons/portfolio-holdings.png +0 -0
  56. package/runtime/widget-icons/portfolio-value.png +0 -0
  57. package/runtime/widget-icons/protocol-fees-treemap.png +0 -0
  58. package/runtime/widget-icons/protocol-tvl-chart.png +0 -0
  59. package/runtime/widget-icons/protocol-tvl-treemap.png +0 -0
  60. package/runtime/widget-icons/quote.png +0 -0
  61. package/runtime/widget-icons/returns-projector.png +0 -0
  62. package/runtime/widget-icons/risk-reward.png +0 -0
  63. package/runtime/widget-icons/rules-card.png +0 -0
  64. package/runtime/widget-icons/session-progress.png +0 -0
  65. package/runtime/widget-icons/short-volume.png +0 -0
  66. package/runtime/widget-icons/snake.png +0 -0
  67. package/runtime/widget-icons/spotify-embed.png +0 -0
  68. package/runtime/widget-icons/stopwatch.png +0 -0
  69. package/runtime/widget-icons/treasury-auctions.png +0 -0
  70. package/runtime/widget-icons/video.png +0 -0
  71. package/runtime/widget-icons/yield-curve.png +0 -0
  72. package/runtime/assets/index-6CnH3oHt.js +0 -719
  73. package/runtime/assets/index-CgpsbUVX.css +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zframes",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "zframes CLI — serve a dashboard.json as a live, editable market terminal (serve), print the frame catalogue for generating agents (catalogue), and validate a dashboard.json (lint).",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Zentry",
@@ -33,21 +33,22 @@
33
33
  "NOTICE"
34
34
  ],
35
35
  "dependencies": {
36
+ "sirv": "^3.0.2",
36
37
  "zod": "^4.1.0"
37
38
  },
38
39
  "devDependencies": {
39
40
  "@types/node": "^20.14.0",
40
41
  "tsup": "^8.3.0",
41
42
  "typescript": "^5.8.0",
42
- "@zframes/core": "0.0.0",
43
- "@zframes/frames": "0.0.0",
44
43
  "@zframes/provider-coingecko": "0.0.0",
45
- "@zframes/provider-defillama": "0.0.0",
44
+ "@zframes/frames": "0.0.0",
46
45
  "@zframes/provider-alternativeme": "0.0.0",
47
- "@zframes/provider-hyperliquid": "0.0.0"
46
+ "@zframes/core": "0.0.0",
47
+ "@zframes/provider-hyperliquid": "0.0.0",
48
+ "@zframes/provider-defillama": "0.0.0"
48
49
  },
49
50
  "scripts": {
50
- "build": "node scripts/build-runtime.mjs && tsup",
51
+ "build": "node scripts/build-runtime.mjs && tsup && node scripts/assert-artifacts.mjs",
51
52
  "typecheck": "tsc --noEmit"
52
53
  }
53
54
  }
@@ -0,0 +1 @@
1
+ function ei(t){var n=0,e=t.children,r=e&&e.length;if(!r)n=1;else for(;--r>=0;)n+=e[r].value;t.value=n}function ri(){return this.eachAfter(ei)}function ii(t,n){let e=-1;for(const r of this)t.call(n,r,++e,this);return this}function ui(t,n){for(var e=this,r=[e],i,u,o=-1;e=r.pop();)if(t.call(n,e,++o,this),i=e.children)for(u=i.length-1;u>=0;--u)r.push(i[u]);return this}function oi(t,n){for(var e=this,r=[e],i=[],u,o,a,f=-1;e=r.pop();)if(i.push(e),u=e.children)for(o=0,a=u.length;o<a;++o)r.push(u[o]);for(;e=i.pop();)t.call(n,e,++f,this);return this}function ai(t,n){let e=-1;for(const r of this)if(t.call(n,r,++e,this))return r}function si(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})}function fi(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})}function ci(t){for(var n=this,e=li(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r}function li(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function hi(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n}function gi(){return Array.from(this)}function pi(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t}function di(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n}function*mi(){var t=this,n,e=[t],r,i,u;do for(n=e.reverse(),e=[];t=n.pop();)if(yield t,r=t.children)for(i=0,u=r.length;i<u;++i)e.push(r[i]);while(e.length)}function hr(t,n){t instanceof Map?(t=[void 0,t],n===void 0&&(n=vi)):n===void 0&&(n=_i);for(var e=new pn(t),r,i=[e],u,o,a,f;r=i.pop();)if((o=n(r.data))&&(f=(o=Array.from(o)).length))for(r.children=o,a=f-1;a>=0;--a)i.push(u=o[a]=new pn(o[a])),u.parent=r,u.depth=r.depth+1;return e.eachBefore(xi)}function yi(){return hr(this).eachBefore(wi)}function _i(t){return t.children}function vi(t){return Array.isArray(t)?t[1]:null}function wi(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function xi(t){var n=0;do t.height=n;while((t=t.parent)&&t.height<++n)}function pn(t){this.data=t,this.depth=this.height=0,this.parent=null}pn.prototype=hr.prototype={constructor:pn,count:ri,each:ii,eachAfter:oi,eachBefore:ui,find:ai,sum:si,sort:fi,path:ci,ancestors:hi,descendants:gi,leaves:pi,links:di,copy:yi,[Symbol.iterator]:mi};function Mi(t){if(typeof t!="function")throw new Error;return t}function Pt(){return 0}function Ot(t){return function(){return t}}function Ti(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function bi(t,n,e,r,i){for(var u=t.children,o,a=-1,f=u.length,s=t.value&&(r-n)/t.value;++a<f;)o=u[a],o.y0=e,o.y1=i,o.x0=n,o.x1=n+=o.value*s}function ki(t,n,e,r,i){for(var u=t.children,o,a=-1,f=u.length,s=t.value&&(i-e)/t.value;++a<f;)o=u[a],o.x0=n,o.x1=r,o.y0=e,o.y1=e+=o.value*s}var Ci=(1+Math.sqrt(5))/2;function Ai(t,n,e,r,i,u){for(var o=[],a=n.children,f,s,l=0,h=0,c=a.length,g,d,y=n.value,_,w,k,b,M,S,m;l<c;){g=i-e,d=u-r;do _=a[h++].value;while(!_&&h<c);for(w=k=_,S=Math.max(d/g,g/d)/(y*t),m=_*_*S,M=Math.max(k/m,m/w);h<c;++h){if(_+=s=a[h].value,s<w&&(w=s),s>k&&(k=s),m=_*_*S,b=Math.max(k/m,m/w),b>M){_-=s;break}M=b}o.push(f={value:_,dice:g<d,children:a.slice(l,h)}),f.dice?bi(f,e,r,i,y?r+=d*_/y:u):ki(f,e,r,y?e+=g*_/y:i,u),y-=_,l=h}return o}const Si=(function t(n){function e(r,i,u,o,a){Ai(n,r,i,u,o,a)}return e.ratio=function(r){return t((r=+r)>1?r:1)},e})(Ci);function mc(){var t=Si,n=!1,e=1,r=1,i=[0],u=Pt,o=Pt,a=Pt,f=Pt,s=Pt;function l(c){return c.x0=c.y0=0,c.x1=e,c.y1=r,c.eachBefore(h),i=[0],n&&c.eachBefore(Ti),c}function h(c){var g=i[c.depth],d=c.x0+g,y=c.y0+g,_=c.x1-g,w=c.y1-g;_<d&&(d=_=(d+_)/2),w<y&&(y=w=(y+w)/2),c.x0=d,c.y0=y,c.x1=_,c.y1=w,c.children&&(g=i[c.depth+1]=u(c)/2,d+=s(c)-g,y+=o(c)-g,_-=a(c)-g,w-=f(c)-g,_<d&&(d=_=(d+_)/2),w<y&&(y=w=(y+w)/2),t(c,d,y,_,w))}return l.round=function(c){return arguments.length?(n=!!c,l):n},l.size=function(c){return arguments.length?(e=+c[0],r=+c[1],l):[e,r]},l.tile=function(c){return arguments.length?(t=Mi(c),l):t},l.padding=function(c){return arguments.length?l.paddingInner(c).paddingOuter(c):l.paddingInner()},l.paddingInner=function(c){return arguments.length?(u=typeof c=="function"?c:Ot(+c),l):u},l.paddingOuter=function(c){return arguments.length?l.paddingTop(c).paddingRight(c).paddingBottom(c).paddingLeft(c):l.paddingTop()},l.paddingTop=function(c){return arguments.length?(o=typeof c=="function"?c:Ot(+c),l):o},l.paddingRight=function(c){return arguments.length?(a=typeof c=="function"?c:Ot(+c),l):a},l.paddingBottom=function(c){return arguments.length?(f=typeof c=="function"?c:Ot(+c),l):f},l.paddingLeft=function(c){return arguments.length?(s=typeof c=="function"?c:Ot(+c),l):s},l}function fn(t,n){return t==null||n==null?NaN:t<n?-1:t>n?1:t>=n?0:NaN}function Ni(t,n){return t==null||n==null?NaN:n<t?-1:n>t?1:n>=t?0:NaN}function ue(t){let n,e,r;t.length!==2?(n=fn,e=(a,f)=>fn(t(a),f),r=(a,f)=>t(a)-f):(n=t===fn||t===Ni?t:$i,e=t,r=t);function i(a,f,s=0,l=a.length){if(s<l){if(n(f,f)!==0)return l;do{const h=s+l>>>1;e(a[h],f)<0?s=h+1:l=h}while(s<l)}return s}function u(a,f,s=0,l=a.length){if(s<l){if(n(f,f)!==0)return l;do{const h=s+l>>>1;e(a[h],f)<=0?s=h+1:l=h}while(s<l)}return s}function o(a,f,s=0,l=a.length){const h=i(a,f,s,l-1);return h>s&&r(a[h-1],f)>-r(a[h],f)?h-1:h}return{left:i,center:o,right:u}}function $i(){return 0}function Di(t){return t===null?NaN:+t}const Ui=ue(fn),Fi=Ui.right;ue(Di).center;function yc(t,n){let e,r;if(n===void 0)for(const i of t)i!=null&&(e===void 0?i>=i&&(e=r=i):(e>i&&(e=i),r<i&&(r=i)));else{let i=-1;for(let u of t)(u=n(u,++i,t))!=null&&(e===void 0?u>=u&&(e=r=u):(e>u&&(e=u),r<u&&(r=u)))}return[e,r]}class ke extends Map{constructor(n,e=Yi){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),n!=null)for(const[r,i]of n)this.set(r,i)}get(n){return super.get(Ce(this,n))}has(n){return super.has(Ce(this,n))}set(n,e){return super.set(Ei(this,n),e)}delete(n){return super.delete(Ri(this,n))}}function Ce({_intern:t,_key:n},e){const r=n(e);return t.has(r)?t.get(r):e}function Ei({_intern:t,_key:n},e){const r=n(e);return t.has(r)?t.get(r):(t.set(r,e),e)}function Ri({_intern:t,_key:n},e){const r=n(e);return t.has(r)&&(e=t.get(r),t.delete(r)),e}function Yi(t){return t!==null&&typeof t=="object"?t.valueOf():t}const Hi=Math.sqrt(50),Ii=Math.sqrt(10),Li=Math.sqrt(2);function dn(t,n,e){const r=(n-t)/Math.max(0,e),i=Math.floor(Math.log10(r)),u=r/Math.pow(10,i),o=u>=Hi?10:u>=Ii?5:u>=Li?2:1;let a,f,s;return i<0?(s=Math.pow(10,-i)/o,a=Math.round(t*s),f=Math.round(n*s),a/s<t&&++a,f/s>n&&--f,s=-s):(s=Math.pow(10,i)*o,a=Math.round(t/s),f=Math.round(n/s),a*s<t&&++a,f*s>n&&--f),f<a&&.5<=e&&e<2?dn(t,n,e*2):[a,f,s]}function Pi(t,n,e){if(n=+n,t=+t,e=+e,!(e>0))return[];if(t===n)return[t];const r=n<t,[i,u,o]=r?dn(n,t,e):dn(t,n,e);if(!(u>=i))return[];const a=u-i+1,f=new Array(a);if(r)if(o<0)for(let s=0;s<a;++s)f[s]=(u-s)/-o;else for(let s=0;s<a;++s)f[s]=(u-s)*o;else if(o<0)for(let s=0;s<a;++s)f[s]=(i+s)/-o;else for(let s=0;s<a;++s)f[s]=(i+s)*o;return f}function zn(t,n,e){return n=+n,t=+t,e=+e,dn(t,n,e)[2]}function Bn(t,n,e){n=+n,t=+t,e=+e;const r=n<t,i=r?zn(n,t,e):zn(t,n,e);return(r?-1:1)*(i<0?1/-i:i)}function _c(t,n){let e;for(const r of t)r!=null&&(e<r||e===void 0&&r>=r)&&(e=r);return e}function vc(t,n){let e;for(const r of t)r!=null&&(e>r||e===void 0&&r>=r)&&(e=r);return e}function Oi(t){return t}var Rn=1,Yn=2,Zn=3,zt=4,Ae=1e-6;function qi(t){return"translate("+t+",0)"}function Wi(t){return"translate(0,"+t+")"}function Vi(t){return n=>+t(n)}function Xi(t,n){return n=Math.max(0,t.bandwidth()-n*2)/2,t.round()&&(n=Math.round(n)),e=>+t(e)+n}function zi(){return!this.__axis}function gr(t,n){var e=[],r=null,i=null,u=6,o=6,a=3,f=typeof window<"u"&&window.devicePixelRatio>1?0:.5,s=t===Rn||t===zt?-1:1,l=t===zt||t===Yn?"x":"y",h=t===Rn||t===Zn?qi:Wi;function c(g){var d=r??(n.ticks?n.ticks.apply(n,e):n.domain()),y=i??(n.tickFormat?n.tickFormat.apply(n,e):Oi),_=Math.max(u,0)+a,w=n.range(),k=+w[0]+f,b=+w[w.length-1]+f,M=(n.bandwidth?Xi:Vi)(n.copy(),f),S=g.selection?g.selection():g,m=S.selectAll(".domain").data([null]),N=S.selectAll(".tick").data(d,n).order(),Y=N.exit(),I=N.enter().append("g").attr("class","tick"),R=N.select("line"),E=N.select("text");m=m.merge(m.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),N=N.merge(I),R=R.merge(I.append("line").attr("stroke","currentColor").attr(l+"2",s*u)),E=E.merge(I.append("text").attr("fill","currentColor").attr(l,s*_).attr("dy",t===Rn?"0em":t===Zn?"0.71em":"0.32em")),g!==S&&(m=m.transition(g),N=N.transition(g),R=R.transition(g),E=E.transition(g),Y=Y.transition(g).attr("opacity",Ae).attr("transform",function(x){return isFinite(x=M(x))?h(x+f):this.getAttribute("transform")}),I.attr("opacity",Ae).attr("transform",function(x){var T=this.parentNode.__axis;return h((T&&isFinite(T=T(x))?T:M(x))+f)})),Y.remove(),m.attr("d",t===zt||t===Yn?o?"M"+s*o+","+k+"H"+f+"V"+b+"H"+s*o:"M"+f+","+k+"V"+b:o?"M"+k+","+s*o+"V"+f+"H"+b+"V"+s*o:"M"+k+","+f+"H"+b),N.attr("opacity",1).attr("transform",function(x){return h(M(x)+f)}),R.attr(l+"2",s*u),E.attr(l,s*_).text(y),S.filter(zi).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Yn?"start":t===zt?"end":"middle"),S.each(function(){this.__axis=M})}return c.scale=function(g){return arguments.length?(n=g,c):n},c.ticks=function(){return e=Array.from(arguments),c},c.tickArguments=function(g){return arguments.length?(e=g==null?[]:Array.from(g),c):e.slice()},c.tickValues=function(g){return arguments.length?(r=g==null?null:Array.from(g),c):r&&r.slice()},c.tickFormat=function(g){return arguments.length?(i=g,c):i},c.tickSize=function(g){return arguments.length?(u=o=+g,c):u},c.tickSizeInner=function(g){return arguments.length?(u=+g,c):u},c.tickSizeOuter=function(g){return arguments.length?(o=+g,c):o},c.tickPadding=function(g){return arguments.length?(a=+g,c):a},c.offset=function(g){return arguments.length?(f=+g,c):f},c}function wc(t){return gr(Zn,t)}function xc(t){return gr(zt,t)}var Bi={value:()=>{}};function pr(){for(var t=0,n=arguments.length,e={},r;t<n;++t){if(!(r=arguments[t]+"")||r in e||/[\s.]/.test(r))throw new Error("illegal type: "+r);e[r]=[]}return new cn(e)}function cn(t){this._=t}function Zi(t,n){return t.trim().split(/^|\s+/).map(function(e){var r="",i=e.indexOf(".");if(i>=0&&(r=e.slice(i+1),e=e.slice(0,i)),e&&!n.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:r}})}cn.prototype=pr.prototype={constructor:cn,on:function(t,n){var e=this._,r=Zi(t+"",e),i,u=-1,o=r.length;if(arguments.length<2){for(;++u<o;)if((i=(t=r[u]).type)&&(i=Gi(e[i],t.name)))return i;return}if(n!=null&&typeof n!="function")throw new Error("invalid callback: "+n);for(;++u<o;)if(i=(t=r[u]).type)e[i]=Se(e[i],t.name,n);else if(n==null)for(i in e)e[i]=Se(e[i],t.name,null);return this},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new cn(t)},call:function(t,n){if((i=arguments.length-2)>0)for(var e=new Array(i),r=0,i,u;r<i;++r)e[r]=arguments[r+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(u=this._[t],r=0,i=u.length;r<i;++r)u[r].value.apply(n,e)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,u=r.length;i<u;++i)r[i].value.apply(n,e)}};function Gi(t,n){for(var e=0,r=t.length,i;e<r;++e)if((i=t[e]).name===n)return i.value}function Se(t,n,e){for(var r=0,i=t.length;r<i;++r)if(t[r].name===n){t[r]=Bi,t=t.slice(0,r).concat(t.slice(r+1));break}return e!=null&&t.push({name:n,value:e}),t}var Gn="http://www.w3.org/1999/xhtml";const Ne={svg:"http://www.w3.org/2000/svg",xhtml:Gn,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Dn(t){var n=t+="",e=n.indexOf(":");return e>=0&&(n=t.slice(0,e))!=="xmlns"&&(t=t.slice(e+1)),Ne.hasOwnProperty(n)?{space:Ne[n],local:t}:t}function Qi(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===Gn&&n.documentElement.namespaceURI===Gn?n.createElement(t):n.createElementNS(e,t)}}function Ji(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function dr(t){var n=Dn(t);return(n.local?Ji:Qi)(n)}function Ki(){}function oe(t){return t==null?Ki:function(){return this.querySelector(t)}}function ji(t){typeof t!="function"&&(t=oe(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var u=n[i],o=u.length,a=r[i]=new Array(o),f,s,l=0;l<o;++l)(f=u[l])&&(s=t.call(f,f.__data__,l,u))&&("__data__"in f&&(s.__data__=f.__data__),a[l]=s);return new Q(r,this._parents)}function tu(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}function nu(){return[]}function mr(t){return t==null?nu:function(){return this.querySelectorAll(t)}}function eu(t){return function(){return tu(t.apply(this,arguments))}}function ru(t){typeof t=="function"?t=eu(t):t=mr(t);for(var n=this._groups,e=n.length,r=[],i=[],u=0;u<e;++u)for(var o=n[u],a=o.length,f,s=0;s<a;++s)(f=o[s])&&(r.push(t.call(f,f.__data__,s,o)),i.push(f));return new Q(r,i)}function yr(t){return function(){return this.matches(t)}}function _r(t){return function(n){return n.matches(t)}}var iu=Array.prototype.find;function uu(t){return function(){return iu.call(this.children,t)}}function ou(){return this.firstElementChild}function au(t){return this.select(t==null?ou:uu(typeof t=="function"?t:_r(t)))}var su=Array.prototype.filter;function fu(){return Array.from(this.children)}function cu(t){return function(){return su.call(this.children,t)}}function lu(t){return this.selectAll(t==null?fu:cu(typeof t=="function"?t:_r(t)))}function hu(t){typeof t!="function"&&(t=yr(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var u=n[i],o=u.length,a=r[i]=[],f,s=0;s<o;++s)(f=u[s])&&t.call(f,f.__data__,s,u)&&a.push(f);return new Q(r,this._parents)}function vr(t){return new Array(t.length)}function gu(){return new Q(this._enter||this._groups.map(vr),this._parents)}function mn(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}mn.prototype={constructor:mn,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};function pu(t){return function(){return t}}function du(t,n,e,r,i,u){for(var o=0,a,f=n.length,s=u.length;o<s;++o)(a=n[o])?(a.__data__=u[o],r[o]=a):e[o]=new mn(t,u[o]);for(;o<f;++o)(a=n[o])&&(i[o]=a)}function mu(t,n,e,r,i,u,o){var a,f,s=new Map,l=n.length,h=u.length,c=new Array(l),g;for(a=0;a<l;++a)(f=n[a])&&(c[a]=g=o.call(f,f.__data__,a,n)+"",s.has(g)?i[a]=f:s.set(g,f));for(a=0;a<h;++a)g=o.call(t,u[a],a,u)+"",(f=s.get(g))?(r[a]=f,f.__data__=u[a],s.delete(g)):e[a]=new mn(t,u[a]);for(a=0;a<l;++a)(f=n[a])&&s.get(c[a])===f&&(i[a]=f)}function yu(t){return t.__data__}function _u(t,n){if(!arguments.length)return Array.from(this,yu);var e=n?mu:du,r=this._parents,i=this._groups;typeof t!="function"&&(t=pu(t));for(var u=i.length,o=new Array(u),a=new Array(u),f=new Array(u),s=0;s<u;++s){var l=r[s],h=i[s],c=h.length,g=vu(t.call(l,l&&l.__data__,s,r)),d=g.length,y=a[s]=new Array(d),_=o[s]=new Array(d),w=f[s]=new Array(c);e(l,h,y,_,w,g,n);for(var k=0,b=0,M,S;k<d;++k)if(M=y[k]){for(k>=b&&(b=k+1);!(S=_[b])&&++b<d;);M._next=S||null}}return o=new Q(o,r),o._enter=a,o._exit=f,o}function vu(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function wu(){return new Q(this._exit||this._groups.map(vr),this._parents)}function xu(t,n,e){var r=this.enter(),i=this,u=this.exit();return typeof t=="function"?(r=t(r),r&&(r=r.selection())):r=r.append(t+""),n!=null&&(i=n(i),i&&(i=i.selection())),e==null?u.remove():e(u),r&&i?r.merge(i).order():i}function Mu(t){for(var n=t.selection?t.selection():t,e=this._groups,r=n._groups,i=e.length,u=r.length,o=Math.min(i,u),a=new Array(i),f=0;f<o;++f)for(var s=e[f],l=r[f],h=s.length,c=a[f]=new Array(h),g,d=0;d<h;++d)(g=s[d]||l[d])&&(c[d]=g);for(;f<i;++f)a[f]=e[f];return new Q(a,this._parents)}function Tu(){for(var t=this._groups,n=-1,e=t.length;++n<e;)for(var r=t[n],i=r.length-1,u=r[i],o;--i>=0;)(o=r[i])&&(u&&o.compareDocumentPosition(u)^4&&u.parentNode.insertBefore(o,u),u=o);return this}function bu(t){t||(t=ku);function n(h,c){return h&&c?t(h.__data__,c.__data__):!h-!c}for(var e=this._groups,r=e.length,i=new Array(r),u=0;u<r;++u){for(var o=e[u],a=o.length,f=i[u]=new Array(a),s,l=0;l<a;++l)(s=o[l])&&(f[l]=s);f.sort(n)}return new Q(i,this._parents).order()}function ku(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function Cu(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function Au(){return Array.from(this)}function Su(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var r=t[n],i=0,u=r.length;i<u;++i){var o=r[i];if(o)return o}return null}function Nu(){let t=0;for(const n of this)++t;return t}function $u(){return!this.node()}function Du(t){for(var n=this._groups,e=0,r=n.length;e<r;++e)for(var i=n[e],u=0,o=i.length,a;u<o;++u)(a=i[u])&&t.call(a,a.__data__,u,i);return this}function Uu(t){return function(){this.removeAttribute(t)}}function Fu(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Eu(t,n){return function(){this.setAttribute(t,n)}}function Ru(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function Yu(t,n){return function(){var e=n.apply(this,arguments);e==null?this.removeAttribute(t):this.setAttribute(t,e)}}function Hu(t,n){return function(){var e=n.apply(this,arguments);e==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function Iu(t,n){var e=Dn(t);if(arguments.length<2){var r=this.node();return e.local?r.getAttributeNS(e.space,e.local):r.getAttribute(e)}return this.each((n==null?e.local?Fu:Uu:typeof n=="function"?e.local?Hu:Yu:e.local?Ru:Eu)(e,n))}function wr(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Lu(t){return function(){this.style.removeProperty(t)}}function Pu(t,n,e){return function(){this.style.setProperty(t,n,e)}}function Ou(t,n,e){return function(){var r=n.apply(this,arguments);r==null?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function qu(t,n,e){return arguments.length>1?this.each((n==null?Lu:typeof n=="function"?Ou:Pu)(t,n,e??"")):$t(this.node(),t)}function $t(t,n){return t.style.getPropertyValue(n)||wr(t).getComputedStyle(t,null).getPropertyValue(n)}function Wu(t){return function(){delete this[t]}}function Vu(t,n){return function(){this[t]=n}}function Xu(t,n){return function(){var e=n.apply(this,arguments);e==null?delete this[t]:this[t]=e}}function zu(t,n){return arguments.length>1?this.each((n==null?Wu:typeof n=="function"?Xu:Vu)(t,n)):this.node()[t]}function xr(t){return t.trim().split(/^|\s+/)}function ae(t){return t.classList||new Mr(t)}function Mr(t){this._node=t,this._names=xr(t.getAttribute("class")||"")}Mr.prototype={add:function(t){var n=this._names.indexOf(t);n<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Tr(t,n){for(var e=ae(t),r=-1,i=n.length;++r<i;)e.add(n[r])}function br(t,n){for(var e=ae(t),r=-1,i=n.length;++r<i;)e.remove(n[r])}function Bu(t){return function(){Tr(this,t)}}function Zu(t){return function(){br(this,t)}}function Gu(t,n){return function(){(n.apply(this,arguments)?Tr:br)(this,t)}}function Qu(t,n){var e=xr(t+"");if(arguments.length<2){for(var r=ae(this.node()),i=-1,u=e.length;++i<u;)if(!r.contains(e[i]))return!1;return!0}return this.each((typeof n=="function"?Gu:n?Bu:Zu)(e,n))}function Ju(){this.textContent=""}function Ku(t){return function(){this.textContent=t}}function ju(t){return function(){var n=t.apply(this,arguments);this.textContent=n??""}}function to(t){return arguments.length?this.each(t==null?Ju:(typeof t=="function"?ju:Ku)(t)):this.node().textContent}function no(){this.innerHTML=""}function eo(t){return function(){this.innerHTML=t}}function ro(t){return function(){var n=t.apply(this,arguments);this.innerHTML=n??""}}function io(t){return arguments.length?this.each(t==null?no:(typeof t=="function"?ro:eo)(t)):this.node().innerHTML}function uo(){this.nextSibling&&this.parentNode.appendChild(this)}function oo(){return this.each(uo)}function ao(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function so(){return this.each(ao)}function fo(t){var n=typeof t=="function"?t:dr(t);return this.select(function(){return this.appendChild(n.apply(this,arguments))})}function co(){return null}function lo(t,n){var e=typeof t=="function"?t:dr(t),r=n==null?co:typeof n=="function"?n:oe(n);return this.select(function(){return this.insertBefore(e.apply(this,arguments),r.apply(this,arguments)||null)})}function ho(){var t=this.parentNode;t&&t.removeChild(this)}function go(){return this.each(ho)}function po(){var t=this.cloneNode(!1),n=this.parentNode;return n?n.insertBefore(t,this.nextSibling):t}function mo(){var t=this.cloneNode(!0),n=this.parentNode;return n?n.insertBefore(t,this.nextSibling):t}function yo(t){return this.select(t?mo:po)}function _o(t){return arguments.length?this.property("__data__",t):this.node().__data__}function vo(t){return function(n){t.call(this,n,this.__data__)}}function wo(t){return t.trim().split(/^|\s+/).map(function(n){var e="",r=n.indexOf(".");return r>=0&&(e=n.slice(r+1),n=n.slice(0,r)),{type:n,name:e}})}function xo(t){return function(){var n=this.__on;if(n){for(var e=0,r=-1,i=n.length,u;e<i;++e)u=n[e],(!t.type||u.type===t.type)&&u.name===t.name?this.removeEventListener(u.type,u.listener,u.options):n[++r]=u;++r?n.length=r:delete this.__on}}}function Mo(t,n,e){return function(){var r=this.__on,i,u=vo(n);if(r){for(var o=0,a=r.length;o<a;++o)if((i=r[o]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=u,i.options=e),i.value=n;return}}this.addEventListener(t.type,u,e),i={type:t.type,name:t.name,value:n,listener:u,options:e},r?r.push(i):this.__on=[i]}}function To(t,n,e){var r=wo(t+""),i,u=r.length,o;if(arguments.length<2){var a=this.node().__on;if(a){for(var f=0,s=a.length,l;f<s;++f)for(i=0,l=a[f];i<u;++i)if((o=r[i]).type===l.type&&o.name===l.name)return l.value}return}for(a=n?Mo:xo,i=0;i<u;++i)this.each(a(r[i],n,e));return this}function kr(t,n,e){var r=wr(t),i=r.CustomEvent;typeof i=="function"?i=new i(n,e):(i=r.document.createEvent("Event"),e?(i.initEvent(n,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(n,!1,!1)),t.dispatchEvent(i)}function bo(t,n){return function(){return kr(this,t,n)}}function ko(t,n){return function(){return kr(this,t,n.apply(this,arguments))}}function Co(t,n){return this.each((typeof n=="function"?ko:bo)(t,n))}function*Ao(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var r=t[n],i=0,u=r.length,o;i<u;++i)(o=r[i])&&(yield o)}var Cr=[null];function Q(t,n){this._groups=t,this._parents=n}function tn(){return new Q([[document.documentElement]],Cr)}function So(){return this}Q.prototype=tn.prototype={constructor:Q,select:ji,selectAll:ru,selectChild:au,selectChildren:lu,filter:hu,data:_u,enter:gu,exit:wu,join:xu,merge:Mu,selection:So,order:Tu,sort:bu,call:Cu,nodes:Au,node:Su,size:Nu,empty:$u,each:Du,attr:Iu,style:qu,property:zu,classed:Qu,text:to,html:io,raise:oo,lower:so,append:fo,insert:lo,remove:go,clone:yo,datum:_o,on:To,dispatch:Co,[Symbol.iterator]:Ao};function Mc(t){return typeof t=="string"?new Q([[document.querySelector(t)]],[document.documentElement]):new Q([[t]],Cr)}function No(t){let n;for(;n=t.sourceEvent;)t=n;return t}function Tc(t,n){if(t=No(t),n===void 0&&(n=t.currentTarget),n){var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}if(n.getBoundingClientRect){var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}}return[t.pageX,t.pageY]}function se(t,n,e){t.prototype=n.prototype=e,e.constructor=t}function Ar(t,n){var e=Object.create(t.prototype);for(var r in n)e[r]=n[r];return e}function nn(){}var Qt=.7,yn=1/Qt,Nt="\\s*([+-]?\\d+)\\s*",Jt="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",it="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",$o=/^#([0-9a-f]{3,8})$/,Do=new RegExp(`^rgb\\(${Nt},${Nt},${Nt}\\)$`),Uo=new RegExp(`^rgb\\(${it},${it},${it}\\)$`),Fo=new RegExp(`^rgba\\(${Nt},${Nt},${Nt},${Jt}\\)$`),Eo=new RegExp(`^rgba\\(${it},${it},${it},${Jt}\\)$`),Ro=new RegExp(`^hsl\\(${Jt},${it},${it}\\)$`),Yo=new RegExp(`^hsla\\(${Jt},${it},${it},${Jt}\\)$`),$e={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};se(nn,_t,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:De,formatHex:De,formatHex8:Ho,formatHsl:Io,formatRgb:Ue,toString:Ue});function De(){return this.rgb().formatHex()}function Ho(){return this.rgb().formatHex8()}function Io(){return Sr(this).formatHsl()}function Ue(){return this.rgb().formatRgb()}function _t(t){var n,e;return t=(t+"").trim().toLowerCase(),(n=$o.exec(t))?(e=n[1].length,n=parseInt(n[1],16),e===6?Fe(n):e===3?new X(n>>8&15|n>>4&240,n>>4&15|n&240,(n&15)<<4|n&15,1):e===8?rn(n>>24&255,n>>16&255,n>>8&255,(n&255)/255):e===4?rn(n>>12&15|n>>8&240,n>>8&15|n>>4&240,n>>4&15|n&240,((n&15)<<4|n&15)/255):null):(n=Do.exec(t))?new X(n[1],n[2],n[3],1):(n=Uo.exec(t))?new X(n[1]*255/100,n[2]*255/100,n[3]*255/100,1):(n=Fo.exec(t))?rn(n[1],n[2],n[3],n[4]):(n=Eo.exec(t))?rn(n[1]*255/100,n[2]*255/100,n[3]*255/100,n[4]):(n=Ro.exec(t))?Ye(n[1],n[2]/100,n[3]/100,1):(n=Yo.exec(t))?Ye(n[1],n[2]/100,n[3]/100,n[4]):$e.hasOwnProperty(t)?Fe($e[t]):t==="transparent"?new X(NaN,NaN,NaN,0):null}function Fe(t){return new X(t>>16&255,t>>8&255,t&255,1)}function rn(t,n,e,r){return r<=0&&(t=n=e=NaN),new X(t,n,e,r)}function Lo(t){return t instanceof nn||(t=_t(t)),t?(t=t.rgb(),new X(t.r,t.g,t.b,t.opacity)):new X}function Qn(t,n,e,r){return arguments.length===1?Lo(t):new X(t,n,e,r??1)}function X(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}se(X,Qn,Ar(nn,{brighter(t){return t=t==null?yn:Math.pow(yn,t),new X(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?Qt:Math.pow(Qt,t),new X(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new X(yt(this.r),yt(this.g),yt(this.b),_n(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ee,formatHex:Ee,formatHex8:Po,formatRgb:Re,toString:Re}));function Ee(){return`#${mt(this.r)}${mt(this.g)}${mt(this.b)}`}function Po(){return`#${mt(this.r)}${mt(this.g)}${mt(this.b)}${mt((isNaN(this.opacity)?1:this.opacity)*255)}`}function Re(){const t=_n(this.opacity);return`${t===1?"rgb(":"rgba("}${yt(this.r)}, ${yt(this.g)}, ${yt(this.b)}${t===1?")":`, ${t})`}`}function _n(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function yt(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function mt(t){return t=yt(t),(t<16?"0":"")+t.toString(16)}function Ye(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new nt(t,n,e,r)}function Sr(t){if(t instanceof nt)return new nt(t.h,t.s,t.l,t.opacity);if(t instanceof nn||(t=_t(t)),!t)return new nt;if(t instanceof nt)return t;t=t.rgb();var n=t.r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),u=Math.max(n,e,r),o=NaN,a=u-i,f=(u+i)/2;return a?(n===u?o=(e-r)/a+(e<r)*6:e===u?o=(r-n)/a+2:o=(n-e)/a+4,a/=f<.5?u+i:2-u-i,o*=60):a=f>0&&f<1?0:o,new nt(o,a,f,t.opacity)}function Oo(t,n,e,r){return arguments.length===1?Sr(t):new nt(t,n,e,r??1)}function nt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}se(nt,Oo,Ar(nn,{brighter(t){return t=t==null?yn:Math.pow(yn,t),new nt(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?Qt:Math.pow(Qt,t),new nt(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,r=e+(e<.5?e:1-e)*n,i=2*e-r;return new X(Hn(t>=240?t-240:t+120,i,r),Hn(t,i,r),Hn(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new nt(He(this.h),un(this.s),un(this.l),_n(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=_n(this.opacity);return`${t===1?"hsl(":"hsla("}${He(this.h)}, ${un(this.s)*100}%, ${un(this.l)*100}%${t===1?")":`, ${t})`}`}}));function He(t){return t=(t||0)%360,t<0?t+360:t}function un(t){return Math.max(0,Math.min(1,t||0))}function Hn(t,n,e){return(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)*255}const fe=t=>()=>t;function qo(t,n){return function(e){return t+e*n}}function Wo(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Vo(t){return(t=+t)==1?Nr:function(n,e){return e-n?Wo(n,e,t):fe(isNaN(n)?e:n)}}function Nr(t,n){var e=n-t;return e?qo(t,e):fe(isNaN(t)?n:t)}const vn=(function t(n){var e=Vo(n);function r(i,u){var o=e((i=Qn(i)).r,(u=Qn(u)).r),a=e(i.g,u.g),f=e(i.b,u.b),s=Nr(i.opacity,u.opacity);return function(l){return i.r=o(l),i.g=a(l),i.b=f(l),i.opacity=s(l),i+""}}return r.gamma=t,r})(1);function Xo(t,n){n||(n=[]);var e=t?Math.min(n.length,t.length):0,r=n.slice(),i;return function(u){for(i=0;i<e;++i)r[i]=t[i]*(1-u)+n[i]*u;return r}}function zo(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function Bo(t,n){var e=n?n.length:0,r=t?Math.min(e,t.length):0,i=new Array(r),u=new Array(e),o;for(o=0;o<r;++o)i[o]=ce(t[o],n[o]);for(;o<e;++o)u[o]=n[o];return function(a){for(o=0;o<r;++o)u[o]=i[o](a);return u}}function Zo(t,n){var e=new Date;return t=+t,n=+n,function(r){return e.setTime(t*(1-r)+n*r),e}}function tt(t,n){return t=+t,n=+n,function(e){return t*(1-e)+n*e}}function Go(t,n){var e={},r={},i;(t===null||typeof t!="object")&&(t={}),(n===null||typeof n!="object")&&(n={});for(i in n)i in t?e[i]=ce(t[i],n[i]):r[i]=n[i];return function(u){for(i in e)r[i]=e[i](u);return r}}var Jn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,In=new RegExp(Jn.source,"g");function Qo(t){return function(){return t}}function Jo(t){return function(n){return t(n)+""}}function $r(t,n){var e=Jn.lastIndex=In.lastIndex=0,r,i,u,o=-1,a=[],f=[];for(t=t+"",n=n+"";(r=Jn.exec(t))&&(i=In.exec(n));)(u=i.index)>e&&(u=n.slice(e,u),a[o]?a[o]+=u:a[++o]=u),(r=r[0])===(i=i[0])?a[o]?a[o]+=i:a[++o]=i:(a[++o]=null,f.push({i:o,x:tt(r,i)})),e=In.lastIndex;return e<n.length&&(u=n.slice(e),a[o]?a[o]+=u:a[++o]=u),a.length<2?f[0]?Jo(f[0].x):Qo(n):(n=f.length,function(s){for(var l=0,h;l<n;++l)a[(h=f[l]).i]=h.x(s);return a.join("")})}function ce(t,n){var e=typeof n,r;return n==null||e==="boolean"?fe(n):(e==="number"?tt:e==="string"?(r=_t(n))?(n=r,vn):$r:n instanceof _t?vn:n instanceof Date?Zo:zo(n)?Xo:Array.isArray(n)?Bo:typeof n.valueOf!="function"&&typeof n.toString!="function"||isNaN(n)?Go:tt)(t,n)}function Ko(t,n){return t=+t,n=+n,function(e){return Math.round(t*(1-e)+n*e)}}var Ie=180/Math.PI,Kn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Dr(t,n,e,r,i,u){var o,a,f;return(o=Math.sqrt(t*t+n*n))&&(t/=o,n/=o),(f=t*e+n*r)&&(e-=t*f,r-=n*f),(a=Math.sqrt(e*e+r*r))&&(e/=a,r/=a,f/=a),t*r<n*e&&(t=-t,n=-n,f=-f,o=-o),{translateX:i,translateY:u,rotate:Math.atan2(n,t)*Ie,skewX:Math.atan(f)*Ie,scaleX:o,scaleY:a}}var on;function jo(t){const n=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return n.isIdentity?Kn:Dr(n.a,n.b,n.c,n.d,n.e,n.f)}function ta(t){return t==null||(on||(on=document.createElementNS("http://www.w3.org/2000/svg","g")),on.setAttribute("transform",t),!(t=on.transform.baseVal.consolidate()))?Kn:(t=t.matrix,Dr(t.a,t.b,t.c,t.d,t.e,t.f))}function Ur(t,n,e,r){function i(s){return s.length?s.pop()+" ":""}function u(s,l,h,c,g,d){if(s!==h||l!==c){var y=g.push("translate(",null,n,null,e);d.push({i:y-4,x:tt(s,h)},{i:y-2,x:tt(l,c)})}else(h||c)&&g.push("translate("+h+n+c+e)}function o(s,l,h,c){s!==l?(s-l>180?l+=360:l-s>180&&(s+=360),c.push({i:h.push(i(h)+"rotate(",null,r)-2,x:tt(s,l)})):l&&h.push(i(h)+"rotate("+l+r)}function a(s,l,h,c){s!==l?c.push({i:h.push(i(h)+"skewX(",null,r)-2,x:tt(s,l)}):l&&h.push(i(h)+"skewX("+l+r)}function f(s,l,h,c,g,d){if(s!==h||l!==c){var y=g.push(i(g)+"scale(",null,",",null,")");d.push({i:y-4,x:tt(s,h)},{i:y-2,x:tt(l,c)})}else(h!==1||c!==1)&&g.push(i(g)+"scale("+h+","+c+")")}return function(s,l){var h=[],c=[];return s=t(s),l=t(l),u(s.translateX,s.translateY,l.translateX,l.translateY,h,c),o(s.rotate,l.rotate,h,c),a(s.skewX,l.skewX,h,c),f(s.scaleX,s.scaleY,l.scaleX,l.scaleY,h,c),s=l=null,function(g){for(var d=-1,y=c.length,_;++d<y;)h[(_=c[d]).i]=_.x(g);return h.join("")}}}var na=Ur(jo,"px, ","px)","deg)"),ea=Ur(ta,", ",")",")"),Dt=0,Bt=0,qt=0,Fr=1e3,wn,Zt,xn=0,vt=0,Un=0,Kt=typeof performance=="object"&&performance.now?performance:Date,Er=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function le(){return vt||(Er(ra),vt=Kt.now()+Un)}function ra(){vt=0}function Mn(){this._call=this._time=this._next=null}Mn.prototype=Rr.prototype={constructor:Mn,restart:function(t,n,e){if(typeof t!="function")throw new TypeError("callback is not a function");e=(e==null?le():+e)+(n==null?0:+n),!this._next&&Zt!==this&&(Zt?Zt._next=this:wn=this,Zt=this),this._call=t,this._time=e,jn()},stop:function(){this._call&&(this._call=null,this._time=1/0,jn())}};function Rr(t,n,e){var r=new Mn;return r.restart(t,n,e),r}function ia(){le(),++Dt;for(var t=wn,n;t;)(n=vt-t._time)>=0&&t._call.call(void 0,n),t=t._next;--Dt}function Le(){vt=(xn=Kt.now())+Un,Dt=Bt=0;try{ia()}finally{Dt=0,oa(),vt=0}}function ua(){var t=Kt.now(),n=t-xn;n>Fr&&(Un-=n,xn=t)}function oa(){for(var t,n=wn,e,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:wn=e);Zt=t,jn(r)}function jn(t){if(!Dt){Bt&&(Bt=clearTimeout(Bt));var n=t-vt;n>24?(t<1/0&&(Bt=setTimeout(Le,t-Kt.now()-Un)),qt&&(qt=clearInterval(qt))):(qt||(xn=Kt.now(),qt=setInterval(ua,Fr)),Dt=1,Er(Le))}}function Pe(t,n,e){var r=new Mn;return n=n==null?0:+n,r.restart(i=>{r.stop(),t(i+n)},n,e),r}var aa=pr("start","end","cancel","interrupt"),sa=[],Yr=0,Oe=1,te=2,ln=3,qe=4,ne=5,hn=6;function Fn(t,n,e,r,i,u){var o=t.__transition;if(!o)t.__transition={};else if(e in o)return;fa(t,e,{name:n,index:r,group:i,on:aa,tween:sa,time:u.time,delay:u.delay,duration:u.duration,ease:u.ease,timer:null,state:Yr})}function he(t,n){var e=et(t,n);if(e.state>Yr)throw new Error("too late; already scheduled");return e}function ut(t,n){var e=et(t,n);if(e.state>ln)throw new Error("too late; already running");return e}function et(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("transition not found");return e}function fa(t,n,e){var r=t.__transition,i;r[n]=e,e.timer=Rr(u,0,e.time);function u(s){e.state=Oe,e.timer.restart(o,e.delay,e.time),e.delay<=s&&o(s-e.delay)}function o(s){var l,h,c,g;if(e.state!==Oe)return f();for(l in r)if(g=r[l],g.name===e.name){if(g.state===ln)return Pe(o);g.state===qe?(g.state=hn,g.timer.stop(),g.on.call("interrupt",t,t.__data__,g.index,g.group),delete r[l]):+l<n&&(g.state=hn,g.timer.stop(),g.on.call("cancel",t,t.__data__,g.index,g.group),delete r[l])}if(Pe(function(){e.state===ln&&(e.state=qe,e.timer.restart(a,e.delay,e.time),a(s))}),e.state=te,e.on.call("start",t,t.__data__,e.index,e.group),e.state===te){for(e.state=ln,i=new Array(c=e.tween.length),l=0,h=-1;l<c;++l)(g=e.tween[l].value.call(t,t.__data__,e.index,e.group))&&(i[++h]=g);i.length=h+1}}function a(s){for(var l=s<e.duration?e.ease.call(null,s/e.duration):(e.timer.restart(f),e.state=ne,1),h=-1,c=i.length;++h<c;)i[h].call(t,l);e.state===ne&&(e.on.call("end",t,t.__data__,e.index,e.group),f())}function f(){e.state=hn,e.timer.stop(),delete r[n];for(var s in r)return;delete t.__transition}}function ca(t,n){var e=t.__transition,r,i,u=!0,o;if(e){n=n==null?null:n+"";for(o in e){if((r=e[o]).name!==n){u=!1;continue}i=r.state>te&&r.state<ne,r.state=hn,r.timer.stop(),r.on.call(i?"interrupt":"cancel",t,t.__data__,r.index,r.group),delete e[o]}u&&delete t.__transition}}function la(t){return this.each(function(){ca(this,t)})}function ha(t,n){var e,r;return function(){var i=ut(this,t),u=i.tween;if(u!==e){r=e=u;for(var o=0,a=r.length;o<a;++o)if(r[o].name===n){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function ga(t,n,e){var r,i;if(typeof e!="function")throw new Error;return function(){var u=ut(this,t),o=u.tween;if(o!==r){i=(r=o).slice();for(var a={name:n,value:e},f=0,s=i.length;f<s;++f)if(i[f].name===n){i[f]=a;break}f===s&&i.push(a)}u.tween=i}}function pa(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r=et(this.node(),e).tween,i=0,u=r.length,o;i<u;++i)if((o=r[i]).name===t)return o.value;return null}return this.each((n==null?ha:ga)(e,t,n))}function ge(t,n,e){var r=t._id;return t.each(function(){var i=ut(this,r);(i.value||(i.value={}))[n]=e.apply(this,arguments)}),function(i){return et(i,r).value[n]}}function Hr(t,n){var e;return(typeof n=="number"?tt:n instanceof _t?vn:(e=_t(n))?(n=e,vn):$r)(t,n)}function da(t){return function(){this.removeAttribute(t)}}function ma(t){return function(){this.removeAttributeNS(t.space,t.local)}}function ya(t,n,e){var r,i=e+"",u;return function(){var o=this.getAttribute(t);return o===i?null:o===r?u:u=n(r=o,e)}}function _a(t,n,e){var r,i=e+"",u;return function(){var o=this.getAttributeNS(t.space,t.local);return o===i?null:o===r?u:u=n(r=o,e)}}function va(t,n,e){var r,i,u;return function(){var o,a=e(this),f;return a==null?void this.removeAttribute(t):(o=this.getAttribute(t),f=a+"",o===f?null:o===r&&f===i?u:(i=f,u=n(r=o,a)))}}function wa(t,n,e){var r,i,u;return function(){var o,a=e(this),f;return a==null?void this.removeAttributeNS(t.space,t.local):(o=this.getAttributeNS(t.space,t.local),f=a+"",o===f?null:o===r&&f===i?u:(i=f,u=n(r=o,a)))}}function xa(t,n){var e=Dn(t),r=e==="transform"?ea:Hr;return this.attrTween(t,typeof n=="function"?(e.local?wa:va)(e,r,ge(this,"attr."+t,n)):n==null?(e.local?ma:da)(e):(e.local?_a:ya)(e,r,n))}function Ma(t,n){return function(e){this.setAttribute(t,n.call(this,e))}}function Ta(t,n){return function(e){this.setAttributeNS(t.space,t.local,n.call(this,e))}}function ba(t,n){var e,r;function i(){var u=n.apply(this,arguments);return u!==r&&(e=(r=u)&&Ta(t,u)),e}return i._value=n,i}function ka(t,n){var e,r;function i(){var u=n.apply(this,arguments);return u!==r&&(e=(r=u)&&Ma(t,u)),e}return i._value=n,i}function Ca(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(n==null)return this.tween(e,null);if(typeof n!="function")throw new Error;var r=Dn(t);return this.tween(e,(r.local?ba:ka)(r,n))}function Aa(t,n){return function(){he(this,t).delay=+n.apply(this,arguments)}}function Sa(t,n){return n=+n,function(){he(this,t).delay=n}}function Na(t){var n=this._id;return arguments.length?this.each((typeof t=="function"?Aa:Sa)(n,t)):et(this.node(),n).delay}function $a(t,n){return function(){ut(this,t).duration=+n.apply(this,arguments)}}function Da(t,n){return n=+n,function(){ut(this,t).duration=n}}function Ua(t){var n=this._id;return arguments.length?this.each((typeof t=="function"?$a:Da)(n,t)):et(this.node(),n).duration}function Fa(t,n){if(typeof n!="function")throw new Error;return function(){ut(this,t).ease=n}}function Ea(t){var n=this._id;return arguments.length?this.each(Fa(n,t)):et(this.node(),n).ease}function Ra(t,n){return function(){var e=n.apply(this,arguments);if(typeof e!="function")throw new Error;ut(this,t).ease=e}}function Ya(t){if(typeof t!="function")throw new Error;return this.each(Ra(this._id,t))}function Ha(t){typeof t!="function"&&(t=yr(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var u=n[i],o=u.length,a=r[i]=[],f,s=0;s<o;++s)(f=u[s])&&t.call(f,f.__data__,s,u)&&a.push(f);return new ct(r,this._parents,this._name,this._id)}function Ia(t){if(t._id!==this._id)throw new Error;for(var n=this._groups,e=t._groups,r=n.length,i=e.length,u=Math.min(r,i),o=new Array(r),a=0;a<u;++a)for(var f=n[a],s=e[a],l=f.length,h=o[a]=new Array(l),c,g=0;g<l;++g)(c=f[g]||s[g])&&(h[g]=c);for(;a<r;++a)o[a]=n[a];return new ct(o,this._parents,this._name,this._id)}function La(t){return(t+"").trim().split(/^|\s+/).every(function(n){var e=n.indexOf(".");return e>=0&&(n=n.slice(0,e)),!n||n==="start"})}function Pa(t,n,e){var r,i,u=La(n)?he:ut;return function(){var o=u(this,t),a=o.on;a!==r&&(i=(r=a).copy()).on(n,e),o.on=i}}function Oa(t,n){var e=this._id;return arguments.length<2?et(this.node(),e).on.on(t):this.each(Pa(e,t,n))}function qa(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function Wa(){return this.on("end.remove",qa(this._id))}function Va(t){var n=this._name,e=this._id;typeof t!="function"&&(t=oe(t));for(var r=this._groups,i=r.length,u=new Array(i),o=0;o<i;++o)for(var a=r[o],f=a.length,s=u[o]=new Array(f),l,h,c=0;c<f;++c)(l=a[c])&&(h=t.call(l,l.__data__,c,a))&&("__data__"in l&&(h.__data__=l.__data__),s[c]=h,Fn(s[c],n,e,c,s,et(l,e)));return new ct(u,this._parents,n,e)}function Xa(t){var n=this._name,e=this._id;typeof t!="function"&&(t=mr(t));for(var r=this._groups,i=r.length,u=[],o=[],a=0;a<i;++a)for(var f=r[a],s=f.length,l,h=0;h<s;++h)if(l=f[h]){for(var c=t.call(l,l.__data__,h,f),g,d=et(l,e),y=0,_=c.length;y<_;++y)(g=c[y])&&Fn(g,n,e,y,c,d);u.push(c),o.push(l)}return new ct(u,o,n,e)}var za=tn.prototype.constructor;function Ba(){return new za(this._groups,this._parents)}function Za(t,n){var e,r,i;return function(){var u=$t(this,t),o=(this.style.removeProperty(t),$t(this,t));return u===o?null:u===e&&o===r?i:i=n(e=u,r=o)}}function Ir(t){return function(){this.style.removeProperty(t)}}function Ga(t,n,e){var r,i=e+"",u;return function(){var o=$t(this,t);return o===i?null:o===r?u:u=n(r=o,e)}}function Qa(t,n,e){var r,i,u;return function(){var o=$t(this,t),a=e(this),f=a+"";return a==null&&(f=a=(this.style.removeProperty(t),$t(this,t))),o===f?null:o===r&&f===i?u:(i=f,u=n(r=o,a))}}function Ja(t,n){var e,r,i,u="style."+n,o="end."+u,a;return function(){var f=ut(this,t),s=f.on,l=f.value[u]==null?a||(a=Ir(n)):void 0;(s!==e||i!==l)&&(r=(e=s).copy()).on(o,i=l),f.on=r}}function Ka(t,n,e){var r=(t+="")=="transform"?na:Hr;return n==null?this.styleTween(t,Za(t,r)).on("end.style."+t,Ir(t)):typeof n=="function"?this.styleTween(t,Qa(t,r,ge(this,"style."+t,n))).each(Ja(this._id,t)):this.styleTween(t,Ga(t,r,n),e).on("end.style."+t,null)}function ja(t,n,e){return function(r){this.style.setProperty(t,n.call(this,r),e)}}function ts(t,n,e){var r,i;function u(){var o=n.apply(this,arguments);return o!==i&&(r=(i=o)&&ja(t,o,e)),r}return u._value=n,u}function ns(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(n==null)return this.tween(r,null);if(typeof n!="function")throw new Error;return this.tween(r,ts(t,n,e??""))}function es(t){return function(){this.textContent=t}}function rs(t){return function(){var n=t(this);this.textContent=n??""}}function is(t){return this.tween("text",typeof t=="function"?rs(ge(this,"text",t)):es(t==null?"":t+""))}function us(t){return function(n){this.textContent=t.call(this,n)}}function os(t){var n,e;function r(){var i=t.apply(this,arguments);return i!==e&&(n=(e=i)&&us(i)),n}return r._value=t,r}function as(t){var n="text";if(arguments.length<1)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!="function")throw new Error;return this.tween(n,os(t))}function ss(){for(var t=this._name,n=this._id,e=Lr(),r=this._groups,i=r.length,u=0;u<i;++u)for(var o=r[u],a=o.length,f,s=0;s<a;++s)if(f=o[s]){var l=et(f,n);Fn(f,t,e,s,o,{time:l.time+l.delay+l.duration,delay:0,duration:l.duration,ease:l.ease})}return new ct(r,this._parents,t,e)}function fs(){var t,n,e=this,r=e._id,i=e.size();return new Promise(function(u,o){var a={value:o},f={value:function(){--i===0&&u()}};e.each(function(){var s=ut(this,r),l=s.on;l!==t&&(n=(t=l).copy(),n._.cancel.push(a),n._.interrupt.push(a),n._.end.push(f)),s.on=n}),i===0&&u()})}var cs=0;function ct(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function Lr(){return++cs}var at=tn.prototype;ct.prototype={constructor:ct,select:Va,selectAll:Xa,selectChild:at.selectChild,selectChildren:at.selectChildren,filter:Ha,merge:Ia,selection:Ba,transition:ss,call:at.call,nodes:at.nodes,node:at.node,size:at.size,empty:at.empty,each:at.each,on:Oa,attr:xa,attrTween:Ca,style:Ka,styleTween:ns,text:is,textTween:as,remove:Wa,tween:pa,delay:Na,duration:Ua,ease:Ea,easeVarying:Ya,end:fs,[Symbol.iterator]:at[Symbol.iterator]};const bc=t=>+t;function kc(t){return--t*t*t+1}function ls(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var pe=1.70158,Cc=(function t(n){n=+n;function e(r){return(r=+r)*r*(n*(r-1)+r)}return e.overshoot=t,e})(pe),Ac=(function t(n){n=+n;function e(r){return--r*r*((r+1)*n+r)+1}return e.overshoot=t,e})(pe);(function t(n){n=+n;function e(r){return((r*=2)<1?r*r*((n+1)*r-n):(r-=2)*r*((n+1)*r+n)+2)/2}return e.overshoot=t,e})(pe);var hs={time:null,delay:0,duration:250,ease:ls};function gs(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))throw new Error(`transition ${n} not found`);return e}function ps(t){var n,e;t instanceof ct?(n=t._id,t=t._name):(n=Lr(),(e=hs).time=le(),t=t==null?null:t+"");for(var r=this._groups,i=r.length,u=0;u<i;++u)for(var o=r[u],a=o.length,f,s=0;s<a;++s)(f=o[s])&&Fn(f,t,n,s,o,e||gs(f,n));return new ct(r,this._parents,t,n)}tn.prototype.interrupt=la;tn.prototype.transition=ps;const ee=Math.PI,re=2*ee,dt=1e-6,ds=re-dt;function Pr(t){this._+=t[0];for(let n=1,e=t.length;n<e;++n)this._+=arguments[n]+t[n]}function ms(t){let n=Math.floor(t);if(!(n>=0))throw new Error(`invalid digits: ${t}`);if(n>15)return Pr;const e=10**n;return function(r){this._+=r[0];for(let i=1,u=r.length;i<u;++i)this._+=Math.round(arguments[i]*e)/e+r[i]}}class ys{constructor(n){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=n==null?Pr:ms(n)}moveTo(n,e){this._append`M${this._x0=this._x1=+n},${this._y0=this._y1=+e}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(n,e){this._append`L${this._x1=+n},${this._y1=+e}`}quadraticCurveTo(n,e,r,i){this._append`Q${+n},${+e},${this._x1=+r},${this._y1=+i}`}bezierCurveTo(n,e,r,i,u,o){this._append`C${+n},${+e},${+r},${+i},${this._x1=+u},${this._y1=+o}`}arcTo(n,e,r,i,u){if(n=+n,e=+e,r=+r,i=+i,u=+u,u<0)throw new Error(`negative radius: ${u}`);let o=this._x1,a=this._y1,f=r-n,s=i-e,l=o-n,h=a-e,c=l*l+h*h;if(this._x1===null)this._append`M${this._x1=n},${this._y1=e}`;else if(c>dt)if(!(Math.abs(h*f-s*l)>dt)||!u)this._append`L${this._x1=n},${this._y1=e}`;else{let g=r-o,d=i-a,y=f*f+s*s,_=g*g+d*d,w=Math.sqrt(y),k=Math.sqrt(c),b=u*Math.tan((ee-Math.acos((y+c-_)/(2*w*k)))/2),M=b/k,S=b/w;Math.abs(M-1)>dt&&this._append`L${n+M*l},${e+M*h}`,this._append`A${u},${u},0,0,${+(h*g>l*d)},${this._x1=n+S*f},${this._y1=e+S*s}`}}arc(n,e,r,i,u,o){if(n=+n,e=+e,r=+r,o=!!o,r<0)throw new Error(`negative radius: ${r}`);let a=r*Math.cos(i),f=r*Math.sin(i),s=n+a,l=e+f,h=1^o,c=o?i-u:u-i;this._x1===null?this._append`M${s},${l}`:(Math.abs(this._x1-s)>dt||Math.abs(this._y1-l)>dt)&&this._append`L${s},${l}`,r&&(c<0&&(c=c%re+re),c>ds?this._append`A${r},${r},0,1,${h},${n-a},${e-f}A${r},${r},0,1,${h},${this._x1=s},${this._y1=l}`:c>dt&&this._append`A${r},${r},0,${+(c>=ee)},${h},${this._x1=n+r*Math.cos(u)},${this._y1=e+r*Math.sin(u)}`)}rect(n,e,r,i){this._append`M${this._x0=this._x1=+n},${this._y0=this._y1=+e}h${r=+r}v${+i}h${-r}Z`}toString(){return this._}}function _s(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Tn(t,n){if(!isFinite(t)||t===0)return null;var e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"),r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Ut(t){return t=Tn(Math.abs(t)),t?t[1]:NaN}function vs(t,n){return function(e,r){for(var i=e.length,u=[],o=0,a=t[0],f=0;i>0&&a>0&&(f+a+1>r&&(a=Math.max(1,r-f)),u.push(e.substring(i-=a,i+a)),!((f+=a+1)>r));)a=t[o=(o+1)%t.length];return u.reverse().join(n)}}function ws(t){return function(n){return n.replace(/[0-9]/g,function(e){return t[+e]})}}var xs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function bn(t){if(!(n=xs.exec(t)))throw new Error("invalid format: "+t);var n;return new de({fill:n[1],align:n[2],sign:n[3],symbol:n[4],zero:n[5],width:n[6],comma:n[7],precision:n[8]&&n[8].slice(1),trim:n[9],type:n[10]})}bn.prototype=de.prototype;function de(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}de.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Ms(t){t:for(var n=t.length,e=1,r=-1,i;e<n;++e)switch(t[e]){case".":r=i=e;break;case"0":r===0&&(r=e),i=e;break;default:if(!+t[e])break t;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var kn;function Ts(t,n){var e=Tn(t,n);if(!e)return kn=void 0,t.toPrecision(n);var r=e[0],i=e[1],u=i-(kn=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,o=r.length;return u===o?r:u>o?r+new Array(u-o+1).join("0"):u>0?r.slice(0,u)+"."+r.slice(u):"0."+new Array(1-u).join("0")+Tn(t,Math.max(0,n+u-1))[0]}function We(t,n){var e=Tn(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}const Ve={"%":(t,n)=>(t*100).toFixed(n),b:t=>Math.round(t).toString(2),c:t=>t+"",d:_s,e:(t,n)=>t.toExponential(n),f:(t,n)=>t.toFixed(n),g:(t,n)=>t.toPrecision(n),o:t=>Math.round(t).toString(8),p:(t,n)=>We(t*100,n),r:We,s:Ts,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Xe(t){return t}var ze=Array.prototype.map,Be=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function bs(t){var n=t.grouping===void 0||t.thousands===void 0?Xe:vs(ze.call(t.grouping,Number),t.thousands+""),e=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",u=t.numerals===void 0?Xe:ws(ze.call(t.numerals,String)),o=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"−":t.minus+"",f=t.nan===void 0?"NaN":t.nan+"";function s(h,c){h=bn(h);var g=h.fill,d=h.align,y=h.sign,_=h.symbol,w=h.zero,k=h.width,b=h.comma,M=h.precision,S=h.trim,m=h.type;m==="n"?(b=!0,m="g"):Ve[m]||(M===void 0&&(M=12),S=!0,m="g"),(w||g==="0"&&d==="=")&&(w=!0,g="0",d="=");var N=(c&&c.prefix!==void 0?c.prefix:"")+(_==="$"?e:_==="#"&&/[boxX]/.test(m)?"0"+m.toLowerCase():""),Y=(_==="$"?r:/[%p]/.test(m)?o:"")+(c&&c.suffix!==void 0?c.suffix:""),I=Ve[m],R=/[defgprs%]/.test(m);M=M===void 0?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,M)):Math.max(0,Math.min(20,M));function E(x){var T=N,C=Y,P,ot,z;if(m==="c")C=I(x)+C,x="";else{x=+x;var B=x<0||1/x<0;if(x=isNaN(x)?f:I(Math.abs(x),M),S&&(x=Ms(x)),B&&+x==0&&y!=="+"&&(B=!1),T=(B?y==="("?y:a:y==="-"||y==="("?"":y)+T,C=(m==="s"&&!isNaN(x)&&kn!==void 0?Be[8+kn/3]:"")+C+(B&&y==="("?")":""),R){for(P=-1,ot=x.length;++P<ot;)if(z=x.charCodeAt(P),48>z||z>57){C=(z===46?i+x.slice(P+1):x.slice(P))+C,x=x.slice(0,P);break}}}b&&!w&&(x=n(x,1/0));var K=T.length+x.length+C.length,O=K<k?new Array(k-K+1).join(g):"";switch(b&&w&&(x=n(O+x,O.length?k-C.length:1/0),O=""),d){case"<":x=T+x+C+O;break;case"=":x=T+O+x+C;break;case"^":x=O.slice(0,K=O.length>>1)+T+x+C+O.slice(K);break;default:x=O+T+x+C;break}return u(x)}return E.toString=function(){return h+""},E}function l(h,c){var g=Math.max(-8,Math.min(8,Math.floor(Ut(c)/3)))*3,d=Math.pow(10,-g),y=s((h=bn(h),h.type="f",h),{suffix:Be[8+g/3]});return function(_){return y(d*_)}}return{format:s,formatPrefix:l}}var an,Or,qr;ks({thousands:",",grouping:[3],currency:["$",""]});function ks(t){return an=bs(t),Or=an.format,qr=an.formatPrefix,an}function Cs(t){return Math.max(0,-Ut(Math.abs(t)))}function As(t,n){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Ut(n)/3)))*3-Ut(Math.abs(t)))}function Ss(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Ut(n)-Ut(t))+1}function me(t,n){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(n).domain(t);break}return this}const Ze=Symbol("implicit");function Ns(){var t=new ke,n=[],e=[],r=Ze;function i(u){let o=t.get(u);if(o===void 0){if(r!==Ze)return r;t.set(u,o=n.push(u)-1)}return e[o%e.length]}return i.domain=function(u){if(!arguments.length)return n.slice();n=[],t=new ke;for(const o of u)t.has(o)||t.set(o,n.push(o)-1);return i},i.range=function(u){return arguments.length?(e=Array.from(u),i):e.slice()},i.unknown=function(u){return arguments.length?(r=u,i):r},i.copy=function(){return Ns(n,e).unknown(r)},me.apply(i,arguments),i}function $s(t){return function(){return t}}function Ds(t){return+t}var Ge=[0,1];function Ct(t){return t}function ie(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:$s(isNaN(n)?NaN:.5)}function Us(t,n){var e;return t>n&&(e=t,t=n,n=e),function(r){return Math.max(t,Math.min(n,r))}}function Fs(t,n,e){var r=t[0],i=t[1],u=n[0],o=n[1];return i<r?(r=ie(i,r),u=e(o,u)):(r=ie(r,i),u=e(u,o)),function(a){return u(r(a))}}function Es(t,n,e){var r=Math.min(t.length,n.length)-1,i=new Array(r),u=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());++o<r;)i[o]=ie(t[o],t[o+1]),u[o]=e(n[o],n[o+1]);return function(a){var f=Fi(t,a,1,r)-1;return u[f](i[f](a))}}function Wr(t,n){return n.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Rs(){var t=Ge,n=Ge,e=ce,r,i,u,o=Ct,a,f,s;function l(){var c=Math.min(t.length,n.length);return o!==Ct&&(o=Us(t[0],t[c-1])),a=c>2?Es:Fs,f=s=null,h}function h(c){return c==null||isNaN(c=+c)?u:(f||(f=a(t.map(r),n,e)))(r(o(c)))}return h.invert=function(c){return o(i((s||(s=a(n,t.map(r),tt)))(c)))},h.domain=function(c){return arguments.length?(t=Array.from(c,Ds),l()):t.slice()},h.range=function(c){return arguments.length?(n=Array.from(c),l()):n.slice()},h.rangeRound=function(c){return n=Array.from(c),e=Ko,l()},h.clamp=function(c){return arguments.length?(o=c?!0:Ct,l()):o!==Ct},h.interpolate=function(c){return arguments.length?(e=c,l()):e},h.unknown=function(c){return arguments.length?(u=c,h):u},function(c,g){return r=c,i=g,l()}}function Vr(){return Rs()(Ct,Ct)}function Ys(t,n,e,r){var i=Bn(t,n,e),u;switch(r=bn(r??",f"),r.type){case"s":{var o=Math.max(Math.abs(t),Math.abs(n));return r.precision==null&&!isNaN(u=As(i,o))&&(r.precision=u),qr(r,o)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(u=Ss(i,Math.max(Math.abs(t),Math.abs(n))))&&(r.precision=u-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(u=Cs(i))&&(r.precision=u-(r.type==="%")*2);break}}return Or(r)}function Hs(t){var n=t.domain;return t.ticks=function(e){var r=n();return Pi(r[0],r[r.length-1],e??10)},t.tickFormat=function(e,r){var i=n();return Ys(i[0],i[i.length-1],e??10,r)},t.nice=function(e){e==null&&(e=10);var r=n(),i=0,u=r.length-1,o=r[i],a=r[u],f,s,l=10;for(a<o&&(s=o,o=a,a=s,s=i,i=u,u=s);l-- >0;){if(s=zn(o,a,e),s===f)return r[i]=o,r[u]=a,n(r);if(s>0)o=Math.floor(o/s)*s,a=Math.ceil(a/s)*s;else if(s<0)o=Math.ceil(o*s)/s,a=Math.floor(a*s)/s;else break;f=s}return t},t}function Is(){var t=Vr();return t.copy=function(){return Wr(t,Is())},me.apply(t,arguments),Hs(t)}function Ls(t,n){t=t.slice();var e=0,r=t.length-1,i=t[e],u=t[r],o;return u<i&&(o=e,e=r,r=o,o=i,i=u,u=o),t[e]=n.floor(i),t[r]=n.ceil(u),t}const Ln=new Date,Pn=new Date;function H(t,n,e,r){function i(u){return t(u=arguments.length===0?new Date:new Date(+u)),u}return i.floor=u=>(t(u=new Date(+u)),u),i.ceil=u=>(t(u=new Date(u-1)),n(u,1),t(u),u),i.round=u=>{const o=i(u),a=i.ceil(u);return u-o<a-u?o:a},i.offset=(u,o)=>(n(u=new Date(+u),o==null?1:Math.floor(o)),u),i.range=(u,o,a)=>{const f=[];if(u=i.ceil(u),a=a==null?1:Math.floor(a),!(u<o)||!(a>0))return f;let s;do f.push(s=new Date(+u)),n(u,a),t(u);while(s<u&&u<o);return f},i.filter=u=>H(o=>{if(o>=o)for(;t(o),!u(o);)o.setTime(o-1)},(o,a)=>{if(o>=o)if(a<0)for(;++a<=0;)for(;n(o,-1),!u(o););else for(;--a>=0;)for(;n(o,1),!u(o););}),e&&(i.count=(u,o)=>(Ln.setTime(+u),Pn.setTime(+o),t(Ln),t(Pn),Math.floor(e(Ln,Pn))),i.every=u=>(u=Math.floor(u),!isFinite(u)||!(u>0)?null:u>1?i.filter(r?o=>r(o)%u===0:o=>i.count(0,o)%u===0):i)),i}const Cn=H(()=>{},(t,n)=>{t.setTime(+t+n)},(t,n)=>n-t);Cn.every=t=>(t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?H(n=>{n.setTime(Math.floor(n/t)*t)},(n,e)=>{n.setTime(+n+e*t)},(n,e)=>(e-n)/t):Cn);Cn.range;const st=1e3,J=st*60,ft=J*60,lt=ft*24,ye=lt*7,Qe=lt*30,On=lt*365,At=H(t=>{t.setTime(t-t.getMilliseconds())},(t,n)=>{t.setTime(+t+n*st)},(t,n)=>(n-t)/st,t=>t.getUTCSeconds());At.range;const _e=H(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*st)},(t,n)=>{t.setTime(+t+n*J)},(t,n)=>(n-t)/J,t=>t.getMinutes());_e.range;const Ps=H(t=>{t.setUTCSeconds(0,0)},(t,n)=>{t.setTime(+t+n*J)},(t,n)=>(n-t)/J,t=>t.getUTCMinutes());Ps.range;const ve=H(t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*st-t.getMinutes()*J)},(t,n)=>{t.setTime(+t+n*ft)},(t,n)=>(n-t)/ft,t=>t.getHours());ve.range;const Os=H(t=>{t.setUTCMinutes(0,0,0)},(t,n)=>{t.setTime(+t+n*ft)},(t,n)=>(n-t)/ft,t=>t.getUTCHours());Os.range;const en=H(t=>t.setHours(0,0,0,0),(t,n)=>t.setDate(t.getDate()+n),(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*J)/lt,t=>t.getDate()-1);en.range;const we=H(t=>{t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n)},(t,n)=>(n-t)/lt,t=>t.getUTCDate()-1);we.range;const qs=H(t=>{t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n)},(t,n)=>(n-t)/lt,t=>Math.floor(t/lt));qs.range;function xt(t){return H(n=>{n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},(n,e)=>{n.setDate(n.getDate()+e*7)},(n,e)=>(e-n-(e.getTimezoneOffset()-n.getTimezoneOffset())*J)/ye)}const En=xt(0),An=xt(1),Ws=xt(2),Vs=xt(3),Ft=xt(4),Xs=xt(5),zs=xt(6);En.range;An.range;Ws.range;Vs.range;Ft.range;Xs.range;zs.range;function Mt(t){return H(n=>{n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCDate(n.getUTCDate()+e*7)},(n,e)=>(e-n)/ye)}const Xr=Mt(0),Sn=Mt(1),Bs=Mt(2),Zs=Mt(3),Et=Mt(4),Gs=Mt(5),Qs=Mt(6);Xr.range;Sn.range;Bs.range;Zs.range;Et.range;Gs.range;Qs.range;const xe=H(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,n)=>{t.setMonth(t.getMonth()+n)},(t,n)=>n.getMonth()-t.getMonth()+(n.getFullYear()-t.getFullYear())*12,t=>t.getMonth());xe.range;const Js=H(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCMonth(t.getUTCMonth()+n)},(t,n)=>n.getUTCMonth()-t.getUTCMonth()+(n.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());Js.range;const ht=H(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n)},(t,n)=>n.getFullYear()-t.getFullYear(),t=>t.getFullYear());ht.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:H(n=>{n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},(n,e)=>{n.setFullYear(n.getFullYear()+e*t)});ht.range;const wt=H(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n)},(t,n)=>n.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());wt.every=t=>!isFinite(t=Math.floor(t))||!(t>0)?null:H(n=>{n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},(n,e)=>{n.setUTCFullYear(n.getUTCFullYear()+e*t)});wt.range;function Ks(t,n,e,r,i,u){const o=[[At,1,st],[At,5,5*st],[At,15,15*st],[At,30,30*st],[u,1,J],[u,5,5*J],[u,15,15*J],[u,30,30*J],[i,1,ft],[i,3,3*ft],[i,6,6*ft],[i,12,12*ft],[r,1,lt],[r,2,2*lt],[e,1,ye],[n,1,Qe],[n,3,3*Qe],[t,1,On]];function a(s,l,h){const c=l<s;c&&([s,l]=[l,s]);const g=h&&typeof h.range=="function"?h:f(s,l,h),d=g?g.range(s,+l+1):[];return c?d.reverse():d}function f(s,l,h){const c=Math.abs(l-s)/h,g=ue(([,,_])=>_).right(o,c);if(g===o.length)return t.every(Bn(s/On,l/On,h));if(g===0)return Cn.every(Math.max(Bn(s,l,h),1));const[d,y]=o[c/o[g-1][2]<o[g][2]/c?g-1:g];return d.every(y)}return[a,f]}const[js,tf]=Ks(ht,xe,En,en,ve,_e);function qn(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Wn(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Wt(t,n,e){return{y:t,m:n,d:e,H:0,M:0,S:0,L:0}}function nf(t){var n=t.dateTime,e=t.date,r=t.time,i=t.periods,u=t.days,o=t.shortDays,a=t.months,f=t.shortMonths,s=Vt(i),l=Xt(i),h=Vt(u),c=Xt(u),g=Vt(o),d=Xt(o),y=Vt(a),_=Xt(a),w=Vt(f),k=Xt(f),b={a:z,A:B,b:K,B:O,c:null,d:er,e:er,f:kf,g:Rf,G:Hf,H:Mf,I:Tf,j:bf,L:zr,m:Cf,M:Af,p:Tt,q:bt,Q:ur,s:or,S:Sf,u:Nf,U:$f,V:Df,w:Uf,W:Ff,x:null,X:null,y:Ef,Y:Yf,Z:If,"%":ir},M={a:Rt,A:Yt,b:j,B:Ht,c:null,d:rr,e:rr,f:qf,g:Kf,G:tc,H:Lf,I:Pf,j:Of,L:Zr,m:Wf,M:Vf,p:It,q:Lt,Q:ur,s:or,S:Xf,u:zf,U:Bf,V:Zf,w:Gf,W:Qf,x:null,X:null,y:Jf,Y:jf,Z:nc,"%":ir},S={a:R,A:E,b:x,B:T,c:C,d:tr,e:tr,f:_f,g:je,G:Ke,H:nr,I:nr,j:pf,L:yf,m:gf,M:df,p:I,q:hf,Q:wf,s:xf,S:mf,u:af,U:sf,V:ff,w:of,W:cf,x:P,X:ot,y:je,Y:Ke,Z:lf,"%":vf};b.x=m(e,b),b.X=m(r,b),b.c=m(n,b),M.x=m(e,M),M.X=m(r,M),M.c=m(n,M);function m(v,A){return function($){var p=[],W=-1,F=0,Z=v.length,G,gt,be;for($ instanceof Date||($=new Date(+$));++W<Z;)v.charCodeAt(W)===37&&(p.push(v.slice(F,W)),(gt=Je[G=v.charAt(++W)])!=null?G=v.charAt(++W):gt=G==="e"?" ":"0",(be=A[G])&&(G=be($,gt)),p.push(G),F=W+1);return p.push(v.slice(F,W)),p.join("")}}function N(v,A){return function($){var p=Wt(1900,void 0,1),W=Y(p,v,$+="",0),F,Z;if(W!=$.length)return null;if("Q"in p)return new Date(p.Q);if("s"in p)return new Date(p.s*1e3+("L"in p?p.L:0));if(A&&!("Z"in p)&&(p.Z=0),"p"in p&&(p.H=p.H%12+p.p*12),p.m===void 0&&(p.m="q"in p?p.q:0),"V"in p){if(p.V<1||p.V>53)return null;"w"in p||(p.w=1),"Z"in p?(F=Wn(Wt(p.y,0,1)),Z=F.getUTCDay(),F=Z>4||Z===0?Sn.ceil(F):Sn(F),F=we.offset(F,(p.V-1)*7),p.y=F.getUTCFullYear(),p.m=F.getUTCMonth(),p.d=F.getUTCDate()+(p.w+6)%7):(F=qn(Wt(p.y,0,1)),Z=F.getDay(),F=Z>4||Z===0?An.ceil(F):An(F),F=en.offset(F,(p.V-1)*7),p.y=F.getFullYear(),p.m=F.getMonth(),p.d=F.getDate()+(p.w+6)%7)}else("W"in p||"U"in p)&&("w"in p||(p.w="u"in p?p.u%7:"W"in p?1:0),Z="Z"in p?Wn(Wt(p.y,0,1)).getUTCDay():qn(Wt(p.y,0,1)).getDay(),p.m=0,p.d="W"in p?(p.w+6)%7+p.W*7-(Z+5)%7:p.w+p.U*7-(Z+6)%7);return"Z"in p?(p.H+=p.Z/100|0,p.M+=p.Z%100,Wn(p)):qn(p)}}function Y(v,A,$,p){for(var W=0,F=A.length,Z=$.length,G,gt;W<F;){if(p>=Z)return-1;if(G=A.charCodeAt(W++),G===37){if(G=A.charAt(W++),gt=S[G in Je?A.charAt(W++):G],!gt||(p=gt(v,$,p))<0)return-1}else if(G!=$.charCodeAt(p++))return-1}return p}function I(v,A,$){var p=s.exec(A.slice($));return p?(v.p=l.get(p[0].toLowerCase()),$+p[0].length):-1}function R(v,A,$){var p=g.exec(A.slice($));return p?(v.w=d.get(p[0].toLowerCase()),$+p[0].length):-1}function E(v,A,$){var p=h.exec(A.slice($));return p?(v.w=c.get(p[0].toLowerCase()),$+p[0].length):-1}function x(v,A,$){var p=w.exec(A.slice($));return p?(v.m=k.get(p[0].toLowerCase()),$+p[0].length):-1}function T(v,A,$){var p=y.exec(A.slice($));return p?(v.m=_.get(p[0].toLowerCase()),$+p[0].length):-1}function C(v,A,$){return Y(v,n,A,$)}function P(v,A,$){return Y(v,e,A,$)}function ot(v,A,$){return Y(v,r,A,$)}function z(v){return o[v.getDay()]}function B(v){return u[v.getDay()]}function K(v){return f[v.getMonth()]}function O(v){return a[v.getMonth()]}function Tt(v){return i[+(v.getHours()>=12)]}function bt(v){return 1+~~(v.getMonth()/3)}function Rt(v){return o[v.getUTCDay()]}function Yt(v){return u[v.getUTCDay()]}function j(v){return f[v.getUTCMonth()]}function Ht(v){return a[v.getUTCMonth()]}function It(v){return i[+(v.getUTCHours()>=12)]}function Lt(v){return 1+~~(v.getUTCMonth()/3)}return{format:function(v){var A=m(v+="",b);return A.toString=function(){return v},A},parse:function(v){var A=N(v+="",!1);return A.toString=function(){return v},A},utcFormat:function(v){var A=m(v+="",M);return A.toString=function(){return v},A},utcParse:function(v){var A=N(v+="",!0);return A.toString=function(){return v},A}}}var Je={"-":"",_:" ",0:"0"},L=/^\s*\d+/,ef=/^%/,rf=/[\\^$*+?|[\]().{}]/g;function U(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",u=i.length;return r+(u<e?new Array(e-u+1).join(n)+i:i)}function uf(t){return t.replace(rf,"\\$&")}function Vt(t){return new RegExp("^(?:"+t.map(uf).join("|")+")","i")}function Xt(t){return new Map(t.map((n,e)=>[n.toLowerCase(),e]))}function of(t,n,e){var r=L.exec(n.slice(e,e+1));return r?(t.w=+r[0],e+r[0].length):-1}function af(t,n,e){var r=L.exec(n.slice(e,e+1));return r?(t.u=+r[0],e+r[0].length):-1}function sf(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.U=+r[0],e+r[0].length):-1}function ff(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.V=+r[0],e+r[0].length):-1}function cf(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.W=+r[0],e+r[0].length):-1}function Ke(t,n,e){var r=L.exec(n.slice(e,e+4));return r?(t.y=+r[0],e+r[0].length):-1}function je(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),e+r[0].length):-1}function lf(t,n,e){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function hf(t,n,e){var r=L.exec(n.slice(e,e+1));return r?(t.q=r[0]*3-3,e+r[0].length):-1}function gf(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function tr(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function pf(t,n,e){var r=L.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function nr(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function df(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function mf(t,n,e){var r=L.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function yf(t,n,e){var r=L.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function _f(t,n,e){var r=L.exec(n.slice(e,e+6));return r?(t.L=Math.floor(r[0]/1e3),e+r[0].length):-1}function vf(t,n,e){var r=ef.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function wf(t,n,e){var r=L.exec(n.slice(e));return r?(t.Q=+r[0],e+r[0].length):-1}function xf(t,n,e){var r=L.exec(n.slice(e));return r?(t.s=+r[0],e+r[0].length):-1}function er(t,n){return U(t.getDate(),n,2)}function Mf(t,n){return U(t.getHours(),n,2)}function Tf(t,n){return U(t.getHours()%12||12,n,2)}function bf(t,n){return U(1+en.count(ht(t),t),n,3)}function zr(t,n){return U(t.getMilliseconds(),n,3)}function kf(t,n){return zr(t,n)+"000"}function Cf(t,n){return U(t.getMonth()+1,n,2)}function Af(t,n){return U(t.getMinutes(),n,2)}function Sf(t,n){return U(t.getSeconds(),n,2)}function Nf(t){var n=t.getDay();return n===0?7:n}function $f(t,n){return U(En.count(ht(t)-1,t),n,2)}function Br(t){var n=t.getDay();return n>=4||n===0?Ft(t):Ft.ceil(t)}function Df(t,n){return t=Br(t),U(Ft.count(ht(t),t)+(ht(t).getDay()===4),n,2)}function Uf(t){return t.getDay()}function Ff(t,n){return U(An.count(ht(t)-1,t),n,2)}function Ef(t,n){return U(t.getFullYear()%100,n,2)}function Rf(t,n){return t=Br(t),U(t.getFullYear()%100,n,2)}function Yf(t,n){return U(t.getFullYear()%1e4,n,4)}function Hf(t,n){var e=t.getDay();return t=e>=4||e===0?Ft(t):Ft.ceil(t),U(t.getFullYear()%1e4,n,4)}function If(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+U(n/60|0,"0",2)+U(n%60,"0",2)}function rr(t,n){return U(t.getUTCDate(),n,2)}function Lf(t,n){return U(t.getUTCHours(),n,2)}function Pf(t,n){return U(t.getUTCHours()%12||12,n,2)}function Of(t,n){return U(1+we.count(wt(t),t),n,3)}function Zr(t,n){return U(t.getUTCMilliseconds(),n,3)}function qf(t,n){return Zr(t,n)+"000"}function Wf(t,n){return U(t.getUTCMonth()+1,n,2)}function Vf(t,n){return U(t.getUTCMinutes(),n,2)}function Xf(t,n){return U(t.getUTCSeconds(),n,2)}function zf(t){var n=t.getUTCDay();return n===0?7:n}function Bf(t,n){return U(Xr.count(wt(t)-1,t),n,2)}function Gr(t){var n=t.getUTCDay();return n>=4||n===0?Et(t):Et.ceil(t)}function Zf(t,n){return t=Gr(t),U(Et.count(wt(t),t)+(wt(t).getUTCDay()===4),n,2)}function Gf(t){return t.getUTCDay()}function Qf(t,n){return U(Sn.count(wt(t)-1,t),n,2)}function Jf(t,n){return U(t.getUTCFullYear()%100,n,2)}function Kf(t,n){return t=Gr(t),U(t.getUTCFullYear()%100,n,2)}function jf(t,n){return U(t.getUTCFullYear()%1e4,n,4)}function tc(t,n){var e=t.getUTCDay();return t=e>=4||e===0?Et(t):Et.ceil(t),U(t.getUTCFullYear()%1e4,n,4)}function nc(){return"+0000"}function ir(){return"%"}function ur(t){return+t}function or(t){return Math.floor(+t/1e3)}var kt,Qr;ec({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function ec(t){return kt=nf(t),Qr=kt.format,kt.parse,kt.utcFormat,kt.utcParse,kt}function rc(t){return new Date(t)}function ic(t){return t instanceof Date?+t:+new Date(+t)}function Jr(t,n,e,r,i,u,o,a,f,s){var l=Vr(),h=l.invert,c=l.domain,g=s(".%L"),d=s(":%S"),y=s("%I:%M"),_=s("%I %p"),w=s("%a %d"),k=s("%b %d"),b=s("%B"),M=s("%Y");function S(m){return(f(m)<m?g:a(m)<m?d:o(m)<m?y:u(m)<m?_:r(m)<m?i(m)<m?w:k:e(m)<m?b:M)(m)}return l.invert=function(m){return new Date(h(m))},l.domain=function(m){return arguments.length?c(Array.from(m,ic)):c().map(rc)},l.ticks=function(m){var N=c();return t(N[0],N[N.length-1],m??10)},l.tickFormat=function(m,N){return N==null?S:s(N)},l.nice=function(m){var N=c();return(!m||typeof m.range!="function")&&(m=n(N[0],N[N.length-1],m??10)),m?c(Ls(N,m)):l},l.copy=function(){return Wr(l,Jr(t,n,e,r,i,u,o,a,f,s))},l}function Sc(){return me.apply(Jr(js,tf,ht,xe,En,en,ve,_e,At,Qr).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function D(t){return function(){return t}}const ar=Math.abs,q=Math.atan2,pt=Math.cos,uc=Math.max,Vn=Math.min,rt=Math.sin,St=Math.sqrt,V=1e-12,jt=Math.PI,Nn=jt/2,gn=2*jt;function oc(t){return t>1?0:t<-1?jt:Math.acos(t)}function sr(t){return t>=1?Nn:t<=-1?-Nn:Math.asin(t)}function Me(t){let n=3;return t.digits=function(e){if(!arguments.length)return n;if(e==null)n=null;else{const r=Math.floor(e);if(!(r>=0))throw new RangeError(`invalid digits: ${e}`);n=r}return t},()=>new ys(n)}function ac(t){return t.innerRadius}function sc(t){return t.outerRadius}function fc(t){return t.startAngle}function cc(t){return t.endAngle}function lc(t){return t&&t.padAngle}function hc(t,n,e,r,i,u,o,a){var f=e-t,s=r-n,l=o-i,h=a-u,c=h*f-l*s;if(!(c*c<V))return c=(l*(n-u)-h*(t-i))/c,[t+c*f,n+c*s]}function sn(t,n,e,r,i,u,o){var a=t-e,f=n-r,s=(o?u:-u)/St(a*a+f*f),l=s*f,h=-s*a,c=t+l,g=n+h,d=e+l,y=r+h,_=(c+d)/2,w=(g+y)/2,k=d-c,b=y-g,M=k*k+b*b,S=i-u,m=c*y-d*g,N=(b<0?-1:1)*St(uc(0,S*S*M-m*m)),Y=(m*b-k*N)/M,I=(-m*k-b*N)/M,R=(m*b+k*N)/M,E=(-m*k+b*N)/M,x=Y-_,T=I-w,C=R-_,P=E-w;return x*x+T*T>C*C+P*P&&(Y=R,I=E),{cx:Y,cy:I,x01:-l,y01:-h,x11:Y*(i/S-1),y11:I*(i/S-1)}}function Nc(){var t=ac,n=sc,e=D(0),r=null,i=fc,u=cc,o=lc,a=null,f=Me(s);function s(){var l,h,c=+t.apply(this,arguments),g=+n.apply(this,arguments),d=i.apply(this,arguments)-Nn,y=u.apply(this,arguments)-Nn,_=ar(y-d),w=y>d;if(a||(a=l=f()),g<c&&(h=g,g=c,c=h),!(g>V))a.moveTo(0,0);else if(_>gn-V)a.moveTo(g*pt(d),g*rt(d)),a.arc(0,0,g,d,y,!w),c>V&&(a.moveTo(c*pt(y),c*rt(y)),a.arc(0,0,c,y,d,w));else{var k=d,b=y,M=d,S=y,m=_,N=_,Y=o.apply(this,arguments)/2,I=Y>V&&(r?+r.apply(this,arguments):St(c*c+g*g)),R=Vn(ar(g-c)/2,+e.apply(this,arguments)),E=R,x=R,T,C;if(I>V){var P=sr(I/c*rt(Y)),ot=sr(I/g*rt(Y));(m-=P*2)>V?(P*=w?1:-1,M+=P,S-=P):(m=0,M=S=(d+y)/2),(N-=ot*2)>V?(ot*=w?1:-1,k+=ot,b-=ot):(N=0,k=b=(d+y)/2)}var z=g*pt(k),B=g*rt(k),K=c*pt(S),O=c*rt(S);if(R>V){var Tt=g*pt(b),bt=g*rt(b),Rt=c*pt(M),Yt=c*rt(M),j;if(_<jt)if(j=hc(z,B,Rt,Yt,Tt,bt,K,O)){var Ht=z-j[0],It=B-j[1],Lt=Tt-j[0],v=bt-j[1],A=1/rt(oc((Ht*Lt+It*v)/(St(Ht*Ht+It*It)*St(Lt*Lt+v*v)))/2),$=St(j[0]*j[0]+j[1]*j[1]);E=Vn(R,(c-$)/(A-1)),x=Vn(R,(g-$)/(A+1))}else E=x=0}N>V?x>V?(T=sn(Rt,Yt,z,B,g,x,w),C=sn(Tt,bt,K,O,g,x,w),a.moveTo(T.cx+T.x01,T.cy+T.y01),x<R?a.arc(T.cx,T.cy,x,q(T.y01,T.x01),q(C.y01,C.x01),!w):(a.arc(T.cx,T.cy,x,q(T.y01,T.x01),q(T.y11,T.x11),!w),a.arc(0,0,g,q(T.cy+T.y11,T.cx+T.x11),q(C.cy+C.y11,C.cx+C.x11),!w),a.arc(C.cx,C.cy,x,q(C.y11,C.x11),q(C.y01,C.x01),!w))):(a.moveTo(z,B),a.arc(0,0,g,k,b,!w)):a.moveTo(z,B),!(c>V)||!(m>V)?a.lineTo(K,O):E>V?(T=sn(K,O,Tt,bt,c,-E,w),C=sn(z,B,Rt,Yt,c,-E,w),a.lineTo(T.cx+T.x01,T.cy+T.y01),E<R?a.arc(T.cx,T.cy,E,q(T.y01,T.x01),q(C.y01,C.x01),!w):(a.arc(T.cx,T.cy,E,q(T.y01,T.x01),q(T.y11,T.x11),!w),a.arc(0,0,c,q(T.cy+T.y11,T.cx+T.x11),q(C.cy+C.y11,C.cx+C.x11),w),a.arc(C.cx,C.cy,E,q(C.y11,C.x11),q(C.y01,C.x01),!w))):a.arc(0,0,c,S,M,w)}if(a.closePath(),l)return a=null,l+""||null}return s.centroid=function(){var l=(+t.apply(this,arguments)+ +n.apply(this,arguments))/2,h=(+i.apply(this,arguments)+ +u.apply(this,arguments))/2-jt/2;return[pt(h)*l,rt(h)*l]},s.innerRadius=function(l){return arguments.length?(t=typeof l=="function"?l:D(+l),s):t},s.outerRadius=function(l){return arguments.length?(n=typeof l=="function"?l:D(+l),s):n},s.cornerRadius=function(l){return arguments.length?(e=typeof l=="function"?l:D(+l),s):e},s.padRadius=function(l){return arguments.length?(r=l==null?null:typeof l=="function"?l:D(+l),s):r},s.startAngle=function(l){return arguments.length?(i=typeof l=="function"?l:D(+l),s):i},s.endAngle=function(l){return arguments.length?(u=typeof l=="function"?l:D(+l),s):u},s.padAngle=function(l){return arguments.length?(o=typeof l=="function"?l:D(+l),s):o},s.context=function(l){return arguments.length?(a=l??null,s):a},s}function Te(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function Kr(t){this._context=t}Kr.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n);break}}};function jr(t){return new Kr(t)}function ti(t){return t[0]}function ni(t){return t[1]}function gc(t,n){var e=D(!0),r=null,i=jr,u=null,o=Me(a);t=typeof t=="function"?t:t===void 0?ti:D(t),n=typeof n=="function"?n:n===void 0?ni:D(n);function a(f){var s,l=(f=Te(f)).length,h,c=!1,g;for(r==null&&(u=i(g=o())),s=0;s<=l;++s)!(s<l&&e(h=f[s],s,f))===c&&((c=!c)?u.lineStart():u.lineEnd()),c&&u.point(+t(h,s,f),+n(h,s,f));if(g)return u=null,g+""||null}return a.x=function(f){return arguments.length?(t=typeof f=="function"?f:D(+f),a):t},a.y=function(f){return arguments.length?(n=typeof f=="function"?f:D(+f),a):n},a.defined=function(f){return arguments.length?(e=typeof f=="function"?f:D(!!f),a):e},a.curve=function(f){return arguments.length?(i=f,r!=null&&(u=i(r)),a):i},a.context=function(f){return arguments.length?(f==null?r=u=null:u=i(r=f),a):r},a}function $c(t,n,e){var r=null,i=D(!0),u=null,o=jr,a=null,f=Me(s);t=typeof t=="function"?t:t===void 0?ti:D(+t),n=typeof n=="function"?n:D(n===void 0?0:+n),e=typeof e=="function"?e:e===void 0?ni:D(+e);function s(h){var c,g,d,y=(h=Te(h)).length,_,w=!1,k,b=new Array(y),M=new Array(y);for(u==null&&(a=o(k=f())),c=0;c<=y;++c){if(!(c<y&&i(_=h[c],c,h))===w)if(w=!w)g=c,a.areaStart(),a.lineStart();else{for(a.lineEnd(),a.lineStart(),d=c-1;d>=g;--d)a.point(b[d],M[d]);a.lineEnd(),a.areaEnd()}w&&(b[c]=+t(_,c,h),M[c]=+n(_,c,h),a.point(r?+r(_,c,h):b[c],e?+e(_,c,h):M[c]))}if(k)return a=null,k+""||null}function l(){return gc().defined(i).curve(o).context(u)}return s.x=function(h){return arguments.length?(t=typeof h=="function"?h:D(+h),r=null,s):t},s.x0=function(h){return arguments.length?(t=typeof h=="function"?h:D(+h),s):t},s.x1=function(h){return arguments.length?(r=h==null?null:typeof h=="function"?h:D(+h),s):r},s.y=function(h){return arguments.length?(n=typeof h=="function"?h:D(+h),e=null,s):n},s.y0=function(h){return arguments.length?(n=typeof h=="function"?h:D(+h),s):n},s.y1=function(h){return arguments.length?(e=h==null?null:typeof h=="function"?h:D(+h),s):e},s.lineX0=s.lineY0=function(){return l().x(t).y(n)},s.lineY1=function(){return l().x(t).y(e)},s.lineX1=function(){return l().x(r).y(n)},s.defined=function(h){return arguments.length?(i=typeof h=="function"?h:D(!!h),s):i},s.curve=function(h){return arguments.length?(o=h,u!=null&&(a=o(u)),s):o},s.context=function(h){return arguments.length?(h==null?u=a=null:a=o(u=h),s):u},s}function pc(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function dc(t){return t}function Dc(){var t=dc,n=pc,e=null,r=D(0),i=D(gn),u=D(0);function o(a){var f,s=(a=Te(a)).length,l,h,c=0,g=new Array(s),d=new Array(s),y=+r.apply(this,arguments),_=Math.min(gn,Math.max(-gn,i.apply(this,arguments)-y)),w,k=Math.min(Math.abs(_)/s,u.apply(this,arguments)),b=k*(_<0?-1:1),M;for(f=0;f<s;++f)(M=d[g[f]=f]=+t(a[f],f,a))>0&&(c+=M);for(n!=null?g.sort(function(S,m){return n(d[S],d[m])}):e!=null&&g.sort(function(S,m){return e(a[S],a[m])}),f=0,h=c?(_-s*b)/c:0;f<s;++f,y=w)l=g[f],M=d[l],w=y+(M>0?M*h:0)+b,d[l]={data:a[l],index:f,value:M,startAngle:y,endAngle:w,padAngle:k};return d}return o.value=function(a){return arguments.length?(t=typeof a=="function"?a:D(+a),o):t},o.sortValues=function(a){return arguments.length?(n=a,e=null,o):n},o.sort=function(a){return arguments.length?(e=a,n=null,o):e},o.startAngle=function(a){return arguments.length?(r=typeof a=="function"?a:D(+a),o):r},o.endAngle=function(a){return arguments.length?(i=typeof a=="function"?a:D(+a),o):i},o.padAngle=function(a){return arguments.length?(u=typeof a=="function"?a:D(+a),o):u},o}function fr(t){return t<0?-1:1}function cr(t,n,e){var r=t._x1-t._x0,i=n-t._x1,u=(t._y1-t._y0)/(r||i<0&&-0),o=(e-t._y1)/(i||r<0&&-0),a=(u*i+o*r)/(r+i);return(fr(u)+fr(o))*Math.min(Math.abs(u),Math.abs(o),.5*Math.abs(a))||0}function lr(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function Xn(t,n,e){var r=t._x0,i=t._y0,u=t._x1,o=t._y1,a=(u-r)/3;t._context.bezierCurveTo(r+a,i+a*n,u-a,o-a*e,u,o)}function $n(t){this._context=t}$n.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Xn(this,this._t0,lr(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,!(t===this._x1&&n===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,Xn(this,lr(this,e=cr(this,t,n)),e);break;default:Xn(this,this._t0,e=cr(this,t,n));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}};Object.create($n.prototype).point=function(t,n){$n.prototype.point.call(this,n,t)};function Uc(t){return new $n(t)}function Gt(t,n,e){this.k=t,this.x=n,this.y=e}Gt.prototype={constructor:Gt,scale:function(t){return t===1?this:new Gt(this.k*t,this.x,this.y)},translate:function(t,n){return t===0&n===0?this:new Gt(this.k,this.x+this.k*t,this.y+this.k*n)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};Gt.prototype;export{Mc as a,_c as b,ue as c,Sc as d,yc as e,xc as f,wc as g,hr as h,mc as i,gc as j,Uc as k,Is as l,vc as m,ls as n,kc as o,Cc as p,Tc as q,bc as r,Si as s,Qr as t,Ac as u,Dc as v,Nc as w,Ns as x,$c as y};
@@ -0,0 +1,68 @@
1
+ import{r,c as is,j as e,a as At}from"./react-qoZPGuNy.js";import{G as Mt}from"./gridstack-BxxvPIFU.js";import{u as ls,F as Et,a as cs,b as os,c as us,d as ms,N as Lt,e as Ft,t as qe}from"./index-KRy1feFG.js";import"./liveline-C5zt2WuS.js";import"./d3-B3esOK0k.js";const $t=[{key:"zframes",label:"zframes",description:"The signature indigo on near-black navy, DM Sans, soft rounded cards — the default look.",theme:{accentHue:242,accentSat:90,baseHue:233,baseSat:20},typography:{fontFamily:"sans",numericStyle:"proportional"},appearance:{radius:18,borderStrength:.22,surfaceOpacity:1,density:1,elevation:1}},{key:"terminal",label:"Terminal",description:"Phosphor green on black, monospaced, fixed-width digits, sharp dense flat cards — a trading-terminal feel.",theme:{accentHue:145,accentSat:85,baseHue:150,baseSat:16},typography:{fontFamily:"mono",numericStyle:"tabular"},appearance:{radius:4,borderStrength:.34,surfaceOpacity:1,density:.85,elevation:.4}},{key:"amber",label:"Amber",description:"Warm amber on charcoal, monospaced, tabular, slightly sharp cards — a retro CRT console.",theme:{accentHue:38,accentSat:95,baseHue:30,baseSat:18},typography:{fontFamily:"mono",numericStyle:"tabular"},appearance:{radius:6,borderStrength:.3,surfaceOpacity:1,density:.9,elevation:.6}},{key:"graphite",label:"Graphite",description:"Near-grayscale slate, faint rims, flat quiet cards, tabular numbers — calm and neutral.",theme:{accentHue:220,accentSat:8,baseHue:220,baseSat:4},typography:{fontFamily:"sans",numericStyle:"tabular"},appearance:{radius:14,borderStrength:.14,surfaceOpacity:1,density:1,elevation:.35}},{key:"synthwave",label:"Synthwave",description:"Hot magenta on deep violet-black, faintly glassy cards floating on a strong glow — vivid and nocturnal.",theme:{accentHue:320,accentSat:88,baseHue:280,baseSat:26},typography:{fontFamily:"sans",numericStyle:"proportional"},appearance:{radius:20,borderStrength:.3,surfaceOpacity:.9,density:1,elevation:1.7}},{key:"editorial",label:"Editorial",description:"A warm serif on soft charcoal-brown, roomy padding, gentle lift — reads like a financial broadsheet.",theme:{accentHue:22,accentSat:60,baseHue:28,baseSat:12},typography:{fontFamily:"serif",numericStyle:"proportional"},appearance:{radius:10,borderStrength:.18,surfaceOpacity:1,density:1.15,elevation:.8}}];/**
2
+ * @license lucide-react v1.21.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const _t=(...t)=>t.filter((a,n,m)=>!!a&&a.trim()!==""&&m.indexOf(a)===n).join(" ").trim();/**
7
+ * @license lucide-react v1.21.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const ds=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();/**
12
+ * @license lucide-react v1.21.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const fs=t=>t.replace(/^([A-Z])|[\s-_]+(\w)/g,(a,n,m)=>m?m.toUpperCase():n.toLowerCase());/**
17
+ * @license lucide-react v1.21.0 - ISC
18
+ *
19
+ * This source code is licensed under the ISC license.
20
+ * See the LICENSE file in the root directory of this source tree.
21
+ */const Ht=t=>{const a=fs(t);return a.charAt(0).toUpperCase()+a.slice(1)};/**
22
+ * @license lucide-react v1.21.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */var Pe={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
27
+ * @license lucide-react v1.21.0 - ISC
28
+ *
29
+ * This source code is licensed under the ISC license.
30
+ * See the LICENSE file in the root directory of this source tree.
31
+ */const hs=t=>{for(const a in t)if(a.startsWith("aria-")||a==="role"||a==="title")return!0;return!1},ps=r.createContext({}),gs=()=>r.useContext(ps),ys=r.forwardRef(({color:t,size:a,strokeWidth:n,absoluteStrokeWidth:m,className:N="",children:d,iconNode:h,...o},f)=>{const{size:p=24,strokeWidth:u=2,absoluteStrokeWidth:y=!1,color:z="currentColor",className:j=""}=gs()??{},k=m??y?Number(n??u)*24/Number(a??p):n??u;return r.createElement("svg",{ref:f,...Pe,width:a??p??Pe.width,height:a??p??Pe.height,stroke:t??z,strokeWidth:k,className:_t("lucide",j,N),...!d&&!hs(o)&&{"aria-hidden":"true"},...o},[...h.map(([R,L])=>r.createElement(R,L)),...Array.isArray(d)?d:[d]])});/**
32
+ * @license lucide-react v1.21.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */const ne=(t,a)=>{const n=r.forwardRef(({className:m,...N},d)=>r.createElement(ys,{ref:d,iconNode:a,className:_t(`lucide-${ds(Ht(t))}`,`lucide-${t}`,m),...N}));return n.displayName=Ht(t),n};/**
37
+ * @license lucide-react v1.21.0 - ISC
38
+ *
39
+ * This source code is licensed under the ISC license.
40
+ * See the LICENSE file in the root directory of this source tree.
41
+ */const bs=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],xs=ne("check",bs);/**
42
+ * @license lucide-react v1.21.0 - ISC
43
+ *
44
+ * This source code is licensed under the ISC license.
45
+ * See the LICENSE file in the root directory of this source tree.
46
+ */const zs=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],js=ne("chevron-down",zs);/**
47
+ * @license lucide-react v1.21.0 - ISC
48
+ *
49
+ * This source code is licensed under the ISC license.
50
+ * See the LICENSE file in the root directory of this source tree.
51
+ */const Ns=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],vs=ne("plus",Ns);/**
52
+ * @license lucide-react v1.21.0 - ISC
53
+ *
54
+ * This source code is licensed under the ISC license.
55
+ * See the LICENSE file in the root directory of this source tree.
56
+ */const ks=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],ws=ne("search",ks);/**
57
+ * @license lucide-react v1.21.0 - ISC
58
+ *
59
+ * This source code is licensed under the ISC license.
60
+ * See the LICENSE file in the root directory of this source tree.
61
+ */const Ss=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],Cs=ne("sliders-horizontal",Ss);/**
62
+ * @license lucide-react v1.21.0 - ISC
63
+ *
64
+ * This source code is licensed under the ISC license.
65
+ * See the LICENSE file in the root directory of this source tree.
66
+ */const Rs=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Ce=ne("x",Rs),As=24;function It(t,a){var n;return a==="flow-horizontal"?(n=t.layouts)==null?void 0:n["flow-horizontal"]:t.position}function Tt(t,a){const n=t.reduce((m,N)=>m+Math.max(1,N.position.w)*Math.min(Math.max(1,N.position.h),a),0);return Math.max(As,Math.ceil(n/a*1.25)+8)}function Ot(t,a,n){var h;const m=new Set,N=(o,f,p,u)=>{for(let y=0;y<p;y++)for(let z=0;z<u;z++){const j=o+y,k=f+z;j>=0&&k>=0&&m.add(`${j},${k}`)}},d=(o,f,p,u)=>{if(o+p>a||f+u>n)return!1;for(let y=0;y<p;y++)for(let z=0;z<u;z++)if(m.has(`${o+y},${f+z}`))return!1;return!0};for(const o of t){const f=(h=o.layouts)==null?void 0:h["flow-horizontal"];f&&N(f.x,f.y,f.w,Math.min(f.h,n))}return t.map(o=>{var y;if((y=o.layouts)!=null&&y["flow-horizontal"])return o;const f=Math.min(Math.max(1,o.position.w),a),p=Math.min(Math.max(1,o.position.h),n);let u={x:0,y:0,w:f,h:p};e:for(let z=0;z<=a-f;z++)for(let j=0;j<=n-p;j++)if(d(z,j,f,p)){u={x:z,y:j,w:f,h:p};break e}return N(u.x,u.y,u.w,u.h),{...o,layouts:{...o.layouts,"flow-horizontal":u}}})}const Gt=["xyz:TSLA","xyz:NVDA","xyz:AAPL","xyz:MSFT","xyz:GOOGL","xyz:AMD","xyz:META","xyz:AMZN","xyz:NFLX","xyz:AVGO","xyz:MSTR","xyz:COIN","xyz:HOOD","xyz:PLTR","BTC","ETH","SOL","HYPE","BNB","XRP","DOGE","LINK","AVAX","SUI"],Wt=new Map(Gt.map((t,a)=>[t,a]));function me(t){const a=t.indexOf(":");return(a===-1?t:t.slice(a+1)).toUpperCase()}function Ke(t){return t.includes(":")?"Stock":"Crypto"}function Ms(t){const a=t.indexOf(":");if(a!==-1){const n=t.slice(a+1);return`https://assets.parqet.com/logos/symbol/${encodeURIComponent(n)}?format=png`}return`https://assets.coincap.io/assets/icons/${t.toLowerCase()}@2x.png`}function Es(t){const a=t.trim().replace(/\s+/g,"");if(!a)return"";const n=a.indexOf(":");return n===-1?a.toUpperCase():`${a.slice(0,n).toLowerCase()}:${a.slice(n+1).toUpperCase()}`}function _e(t,a,n=Wt.get(t)??1e4){return{symbol:t,ticker:me(t),kind:Ke(t),markPx:a==null?void 0:a.markPx,changePct:a==null?void 0:a.changePct,rank:n}}function Ut(t){if(!Number.isFinite(t))return"";const a=t;return a>=1e3?`$${a.toLocaleString(void 0,{maximumFractionDigits:0})}`:a>=100?`$${a.toFixed(2)}`:a>=1?`$${a.toFixed(3)}`:`$${a.toPrecision(3)}`}function Ls(t){if(!Number.isFinite(t))return"";const a=t;return`${a>=0?"+":""}${a.toFixed(2)}%`}function qt(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function I(t,a){return t!=null&&t.type?Array.isArray(t.type)?t.type.includes(a):t.type===a:!1}function Kt(t){const a=t==null?void 0:t.items;return!!a&&I(t,"array")&&I(a,"string")}function Fs(t){var a,n,m;try{const d=qe(t.schema,{io:"input"}).properties??{};if(I(d.symbol,"string"))return{kind:"single"};if(Kt(d.symbols))return{kind:"symbols",minItems:(a=d.symbols)==null?void 0:a.minItems,maxItems:(n=d.symbols)==null?void 0:n.maxItems};const h=d.holdings,o=((m=h==null?void 0:h.items)==null?void 0:m.properties)??{};if(I(h,"array")&&I(o.symbol,"string"))return{kind:"holdings",minItems:h==null?void 0:h.minItems,maxItems:h==null?void 0:h.maxItems}}catch{}return t.name==="price-chart"?{kind:"single"}:["price-liveline","price-ticker","funding-rate-chart","funding-heatmap","price-compare"].includes(t.name)?{kind:"symbols"}:null}function $s(t,a){return t.kind==="single"?typeof a.symbol=="string"&&a.symbol?[a.symbol]:[]:t.kind==="symbols"?Array.isArray(a.symbols)?a.symbols.filter(n=>typeof n=="string"):[]:Array.isArray(a.holdings)?a.holdings.map(n=>qt(n)&&typeof n.symbol=="string"?n.symbol:"").filter(Boolean):[]}const Hs=new Set(["symbol","symbols","holdings"]);function Ve(t){const a=t.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").trim();return a?a.charAt(0).toUpperCase()+a.slice(1):t}function Is(t){let a;try{a=qe(t.schema,{io:"input"})}catch{return[]}return Object.entries(a.properties??{}).filter(([n])=>!Hs.has(n)).map(([n,m])=>({key:n,label:Ve(n),shape:m}))}const Pt=["xyz:TSLA","xyz:NVDA","xyz:AAPL","xyz:MSFT","xyz:META","xyz:AMD","xyz:GOOGL","xyz:AMZN"];function Ts(t,a){return t==="symbol"?Pt[a%Pt.length]:t==="url"?"https://":t==="text"?"New note":t==="title"?"Heading":Ve(t)||"value"}function Ge(t,a,n=0){var m;if(t.default!==void 0)return t.default;if(Array.isArray(t.enum)&&t.enum.length)return t.enum[0];if(I(t,"string"))return Ts(a,n);if(I(t,"number")||I(t,"integer"))return t.exclusiveMinimum!==void 0?t.exclusiveMinimum+1:t.minimum??0;if(I(t,"boolean"))return!1;if(I(t,"array")){const N=t.items??{},d=a==="symbols"?"symbol":a;return Array.from({length:t.minItems??0},(h,o)=>Ge(N,d,o))}if(I(t,"object")){const N={};for(const d of t.required??[]){const h=(m=t.properties)==null?void 0:m[d];h&&(N[d]=Ge(h,d,n))}return N}return null}function Os(t){const a=t.schema.safeParse({});if(a.success)return a.data;let n;try{n=qe(t.schema,{io:"input"})}catch{return{}}const m={},N=new Set(n.required??[]);for(const[h,o]of Object.entries(n.properties??{}))N.has(h)&&(m[h]=Ge(o,h));const d=t.schema.safeParse(m);return d.success?d.data:m}const Ps='<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>';function Ds(t,a){const n=r.useMemo(()=>t.find(f=>f.capabilities.includes("day-stats")),[t]),[m,N]=r.useState({}),[d,h]=r.useState(!1);return r.useEffect(()=>{if(!a||!(n!=null&&n.getDayStats)){h(!1);return}let f=!1;return h(!0),Promise.allSettled([n.getDayStats(),n.getDayStats(["xyz:*"])]).then(p=>{if(f)return;const u={};for(const y of p)y.status==="fulfilled"&&Object.assign(u,y.value);N(u)}).finally(()=>{f||h(!1)}),()=>{f=!0}},[a,n]),{options:r.useMemo(()=>{const f=new Map;return Gt.forEach((p,u)=>{f.set(p,_e(p,m[p],u))}),Object.entries(m).forEach(([p,u])=>{f.set(p,_e(p,u,Wt.get(p)??1e4))}),[...f.values()].sort((p,u)=>p.rank!==u.rank?p.rank-u.rank:p.kind!==u.kind?p.kind==="Stock"?-1:1:p.ticker.localeCompare(u.ticker))},[m]),loading:d}}function ea({spec:t,registry:a,onSave:n,customiseButtonTarget:m,onAccentHueChange:N,onAccentSatChange:d,onFontScaleChange:h,onUpColorChange:o,onDownColorChange:f,onModeChange:p}){var vt;const u=ls(),y=r.useRef(null),z=r.useRef(null),j=r.useRef(!1),k=r.useRef(t.grid.mode),R=r.useRef(new Map),L=r.useRef(new Map),x=r.useRef(new Map),v=r.useRef([]),E=r.useRef(t.theme.accentHue),se=r.useRef(t.theme.accentSat),ie=r.useRef(t.theme.baseHue),Xe=r.useRef(t.theme.baseSat),Ye=r.useRef(t.theme.upColor),Ze=r.useRef(t.theme.downColor),Je=r.useRef(t.grid.gap),Qe=r.useRef(t.grid.mode),le=r.useRef(null),et=r.useRef(t.appearance.radius),tt=r.useRef(t.appearance.borderStrength),st=r.useRef(t.appearance.surfaceOpacity),at=r.useRef(t.appearance.density),rt=r.useRef(t.appearance.elevation),nt=r.useRef(t.typography.fontFamily),it=r.useRef(t.typography.numericStyle),lt=r.useRef(t.typography.scale),ct=r.useRef(0),[F,Re]=r.useState(!1),Xt=Ds(u,F),[Vs,ce]=r.useState(t.frames.length),[O,de]=r.useState(t.theme.accentHue),[P,fe]=r.useState(t.theme.accentSat),[D,he]=r.useState(t.theme.baseHue),[B,pe]=r.useState(t.theme.baseSat),[_,Ae]=r.useState(t.theme.upColor),[G,Me]=r.useState(t.theme.downColor),[H,ot]=r.useState(t.grid.mode),[Yt,ut]=r.useState(!1),[W,Ee]=r.useState(t.grid.gap),[U,ge]=r.useState(t.appearance.radius),[q,ye]=r.useState(t.appearance.borderStrength),[K,be]=r.useState(t.appearance.surfaceOpacity),[V,xe]=r.useState(t.appearance.density),[X,ze]=r.useState(t.appearance.elevation),[J,Le]=r.useState(t.typography.fontFamily),[Q,Fe]=r.useState(t.typography.numericStyle),[Y,$e]=r.useState(t.typography.scale),Zt=r.useCallback(s=>{de(s.theme.accentHue),fe(s.theme.accentSat),he(s.theme.baseHue),pe(s.theme.baseSat),Le(s.typography.fontFamily),Fe(s.typography.numericStyle),ge(s.appearance.radius),ye(s.appearance.borderStrength),be(s.appearance.surfaceOpacity),xe(s.appearance.density),ze(s.appearance.elevation)},[]),mt=((vt=$t.find(s=>s.theme.accentHue===O&&s.theme.accentSat===P&&s.theme.baseHue===D&&s.theme.baseSat===B&&s.typography.fontFamily===J&&s.typography.numericStyle===Q&&s.appearance.radius===U&&s.appearance.borderStrength===q&&s.appearance.surfaceOpacity===K&&s.appearance.density===V&&s.appearance.elevation===X))==null?void 0:vt.key)??null,[ee,dt]=r.useState("frames"),[He,ae]=r.useState(null),ft=r.useRef(null);ft.current=He,r.useEffect(()=>{N==null||N(O)},[O,N]),r.useEffect(()=>{d==null||d(P)},[P,d]),r.useEffect(()=>{h==null||h(Y)},[Y,h]),r.useEffect(()=>{o==null||o(_)},[_,o]),r.useEffect(()=>{f==null||f(G)},[G,f]),r.useEffect(()=>{k.current=H,p==null||p(H)},[H,p]),r.useEffect(()=>{var s;(s=z.current)==null||s.margin(W/2)},[W]);const ht=r.useRef(u);ht.current=u;const re=r.useRef(a);re.current=a;const je=r.useMemo(()=>{const s=new Map;for(const l of a.values()){const b=l.category??"other",S=s.get(b);S?S.push(l):s.set(b,[l])}const c=Et.map(l=>l.key),i=Et.map(l=>({key:l.key,label:l.label,description:l.description,frames:s.get(l.key)??[]})),g=[...s.entries()].filter(([l])=>!c.includes(l)).flatMap(([,l])=>l);return g.length&&i.push({key:"other",label:"Other",description:"",frames:g}),i.filter(l=>l.frames.length>0).map(l=>({...l,frames:[...l.frames].sort((b,S)=>b.name.localeCompare(S.name))}))},[a]),[pt,Jt]=r.useState(()=>new Set(je[0]?[je[0].key]:[])),Qt=r.useCallback(s=>{Jt(c=>{const i=new Set(c);return i.has(s)?i.delete(s):i.add(s),i})},[]),oe=r.useCallback(s=>s?Os(s):{},[]),Ne=r.useCallback(s=>{let c=`${s}-${++ct.current}`;for(;R.current.has(c);)c=`${s}-${++ct.current}`;return c},[]),ve=r.useRef(null),Z=r.useCallback(s=>{const c=x.current.get(s),i=R.current.get(s);if(!c||!i)return;let g=L.current.get(s);g||(c.innerHTML="",g=is.createRoot(c),L.current.set(s,g)),g.render(e.jsx(cs,{providers:ht.current,children:e.jsx(os.Provider,{value:l=>{var b;return(b=ve.current)==null?void 0:b.call(ve,s,l)},children:e.jsx(us,{instance:i,registry:re.current,className:"zf-fill"})})}))},[]),es=r.useCallback((s,c)=>{const i=R.current.get(s);i&&(R.current.set(s,{...i,config:{...i.config,...c}}),Z(s))},[Z]);ve.current=es;const gt=r.useCallback(s=>{var g;const c=z.current;if(!c)return;const i=s.getAttribute("gs-id");i&&((g=L.current.get(i))==null||g.unmount(),L.current.delete(i),x.current.delete(i),R.current.delete(i),ft.current===i&&ae(null)),c.removeWidget(s,!0),ce(c.getGridItems().length)},[]),te=r.useCallback(s=>{if(!s.querySelector(".zf-cfg-btn")){const c=document.createElement("button");c.className="zf-cfg-btn",c.type="button",c.title="Edit frame",c.setAttribute("aria-label","Edit frame"),c.innerHTML=Ps,c.addEventListener("click",i=>{i.stopPropagation();const g=s.getAttribute("gs-id");g&&ae(g)}),s.appendChild(c)}if(!s.querySelector(".zf-del-btn")){const c=document.createElement("button");c.className="zf-del-btn",c.type="button",c.title="Remove frame",c.innerHTML="&times;",c.addEventListener("click",i=>{i.stopPropagation(),gt(s)}),s.appendChild(c)}},[gt]),yt=r.useCallback(s=>{var c,i;(c=s.querySelector(".zf-cfg-btn"))==null||c.remove(),(i=s.querySelector(".zf-del-btn"))==null||i.remove()},[]),ke=r.useCallback((s,c=!1)=>{const i=k.current,g=i==="flow-horizontal",l=It(s,i),b=(l==null?void 0:l.w)??s.position.w,S=(l==null?void 0:l.h)??s.position.h,w=g?Math.min(S,t.grid.rows):S,M=re.current.get(s.frame),C=M==null?void 0:M.layout,A=document.createElement("div");A.className="grid-stack-item",A.setAttribute("gs-id",s.id),A.setAttribute("data-frame",s.frame),c||!l?A.setAttribute("gs-auto-position","true"):(A.setAttribute("gs-x",String(l.x)),A.setAttribute("gs-y",String(l.y))),A.setAttribute("gs-w",String(b)),A.setAttribute("gs-h",String(w)),C!=null&&C.minW&&A.setAttribute("gs-min-w",String(C.minW)),C!=null&&C.minH&&A.setAttribute("gs-min-h",String(C.minH)),C!=null&&C.maxW&&A.setAttribute("gs-max-w",String(C.maxW)),C!=null&&C.maxH&&A.setAttribute("gs-max-h",String(C.maxH));const $=document.createElement("div");return $.className="grid-stack-item-content",A.appendChild($),x.current.set(s.id,$),A},[t.grid.rows]),ue=r.useCallback(s=>{const c=z.current;if(c){L.current.forEach(i=>i.unmount()),L.current.clear(),x.current.clear(),R.current=new Map(s.map(i=>[i.id,i])),c.removeAll(!0),c.el.querySelectorAll(".grid-stack-item").forEach(i=>i.remove()),c.batchUpdate();for(const i of s){const g=ke(i);c.el.appendChild(g),c.makeWidget(g),Z(i.id)}c.batchUpdate(!1),ce(s.length)}},[ke,Z]),bt=r.useCallback(s=>{var S,w;const c=z.current;if(!c)return;const i=re.current.get(s),g=Ne(s),l={id:g,frame:s,position:{x:0,y:0,w:((S=i==null?void 0:i.layout)==null?void 0:S.w)??4,h:((w=i==null?void 0:i.layout)==null?void 0:w.h)??3},config:oe(i)};R.current.set(g,l);const b=ke(l,!0);c.el.appendChild(b),c.makeWidget(b),Z(g),te(b),ce(c.getGridItems().length),ae(g)},[ke,te,oe,Z,Ne]),we=r.useCallback(()=>{var g,l;const s=typeof window<"u"?window.innerHeight:800,c=((l=(g=y.current)==null?void 0:g.parentElement)==null?void 0:l.getBoundingClientRect().top)??120,i=s-c-56;return Math.max(80,Math.floor(i/t.grid.rows))},[t.grid.rows]),Ie=r.useCallback(()=>{const s=z.current;if(!s)return;const c=s.el;s.off("dropped"),s.off("removed"),s.off("drag"),s.off("dragstart"),s.off("dragstop"),document.body.classList.remove("zf-dragging"),L.current.forEach(i=>i.unmount()),L.current.clear(),x.current.clear(),s.destroy(!1),c&&(c.querySelectorAll(".grid-stack-item").forEach(i=>i.remove()),c.style.width="",c.style.height=""),z.current=null},[]),Te=r.useCallback((s,c)=>{const i=s==="flow-horizontal",g=i?we():t.grid.rowHeight,l=Mt.init({column:i?c:t.grid.columns,cellHeight:g,margin:t.grid.gap/2,float:!0,...i?{maxRow:t.grid.rows,minRow:t.grid.rows}:{},animate:!0,acceptWidgets:!0,disableDrag:!0,disableResize:!0},y.current);return l.el.style.width=i?`${c*g}px`:"",l.on("dropped",(b,S,w)=>{var Ct,Rt;const M=w==null?void 0:w.el;if(!M)return;const C=M.querySelector(".grid-stack-item-content"),A=M.getAttribute("data-frame");if(!C||!A)return;const $=M.getAttribute("gs-id")||Ne(A);M.setAttribute("gs-id",$);const T=re.current.get(A),kt=(w==null?void 0:w.w)??((Ct=T==null?void 0:T.layout)==null?void 0:Ct.w)??4,wt=(w==null?void 0:w.h)??((Rt=T==null?void 0:T.layout)==null?void 0:Rt.h)??3,St={x:(w==null?void 0:w.x)??0,y:(w==null?void 0:w.y)??0,w:kt,h:wt},ns=k.current==="flow-horizontal"?{id:$,frame:A,position:{x:0,y:0,w:kt,h:wt},layouts:{"flow-horizontal":St},config:oe(T)}:{id:$,frame:A,position:St,config:oe(T)};R.current.set($,ns),x.current.set($,C),Z($),te(M),ce(l.getGridItems().length),ae($)}),l.on("removed",()=>ce(l.getGridItems().length)),l.on("dragstart",()=>document.body.classList.add("zf-dragging")),l.on("dragstop",()=>document.body.classList.remove("zf-dragging")),i&&l.on("drag",b=>{var A,$,T;const S=(A=y.current)==null?void 0:A.parentElement;if(!S)return;const w=S.getBoundingClientRect(),M=b.clientX??((T=($=b.touches)==null?void 0:$[0])==null?void 0:T.clientX);if(M==null)return;const C=64;M<w.left+C?S.scrollLeft-=18:M>w.right-C&&(S.scrollLeft+=18)}),l},[we,t.grid.columns,t.grid.rowHeight,t.grid.rows,t.grid.gap,Ne,oe,Z,te]);r.useEffect(()=>{if(!y.current||j.current)return;j.current=!0;const s=k.current==="flow-horizontal",c=s?Tt(t.frames,t.grid.rows):t.grid.columns;return z.current=Te(k.current,c),ue(s?Ot(t.frames,c,t.grid.rows):t.frames),()=>{Ie(),j.current=!1}},[]),r.useEffect(()=>{const s=z.current;s&&(s.enableMove(F),s.enableResize(F),F?s.getGridItems().forEach(te):s.getGridItems().forEach(yt))},[F,te,yt]),r.useEffect(()=>{const s=z.current;if(!s||k.current!=="flow-horizontal")return;const c=requestAnimationFrame(()=>{const i=we();s.cellHeight(i),s.el.style.width=`${s.getColumn()*i}px`});return()=>cancelAnimationFrame(c)},[F,we]),r.useEffect(()=>{!F||ee!=="frames"||!z.current||Mt.setupDragIn(".zf-newwidget",{appendTo:"body",helper:s=>{var C;const i=(s.closest(".zf-newwidget")??s).dataset.frame??"",g=re.current.get(i),l=g==null?void 0:g.layout,b=document.createElement("div");b.className="grid-stack-item",b.setAttribute("data-frame",i),b.setAttribute("gs-w",String((l==null?void 0:l.w)??4)),b.setAttribute("gs-h",String((l==null?void 0:l.h)??3)),l!=null&&l.minW&&b.setAttribute("gs-min-w",String(l.minW)),l!=null&&l.minH&&b.setAttribute("gs-min-h",String(l.minH)),l!=null&&l.maxW&&b.setAttribute("gs-max-w",String(l.maxW)),l!=null&&l.maxH&&b.setAttribute("gs-max-h",String(l.maxH));const S=(C=y.current)==null?void 0:C.closest(".zf-editor");if(S){const A=getComputedStyle(S);for(const $ of["--zf-accent-hue","--zf-accent-sat","--font-dmsans"]){const T=A.getPropertyValue($).trim();T&&b.style.setProperty($,T)}}const w=i.replace(/-/g," "),M=g!=null&&g.iconUrl?`<img class="zf-drag-ghost-icon" src="${g.iconUrl}" alt="" />`:"";return b.innerHTML=`<div class="grid-stack-item-content zf-drag-ghost" data-frame="${i}">${M}<span class="zf-drag-ghost-name">${w}</span></div>`,b}})},[F,ee,je,pt]);const Se=r.useCallback(()=>{const s=z.current,c=[];if(s)for(const i of s.getGridItems()){const g=i.getAttribute("gs-id");if(!g)continue;const l=R.current.get(g);if(!l)continue;const b=i.gridstackNode,S=It(l,H)??l.position,w={x:(b==null?void 0:b.x)??S.x,y:(b==null?void 0:b.y)??S.y,w:(b==null?void 0:b.w)??S.w,h:(b==null?void 0:b.h)??S.h};c.push(H==="flow-horizontal"?{...l,layouts:{...l.layouts,"flow-horizontal":w}}:{...l,position:w})}return c.sort((i,g)=>i.position.y-g.position.y||i.position.x-g.position.x),{...t,grid:{...t.grid,gap:W,mode:H},theme:{...t.theme,accentHue:O,accentSat:P,baseHue:D,baseSat:B,upColor:_,downColor:G},typography:{...t.typography,fontFamily:J,numericStyle:Q,scale:Y},appearance:{...t.appearance,radius:U,borderStrength:q,surfaceOpacity:K,density:V,elevation:X},frames:c}},[t,O,P,D,B,_,G,J,Q,Y,W,H,U,q,K,V,X]),xt=r.useCallback(s=>{const c=new Blob([`${JSON.stringify(s,null,2)}
67
+ `],{type:"application/json"}),i=URL.createObjectURL(c),g=document.createElement("a");g.href=i,g.download="dashboard.json",g.click(),setTimeout(()=>URL.revokeObjectURL(i),0)},[]),ts=r.useCallback(()=>{v.current=Se().frames,E.current=O,se.current=P,ie.current=D,Xe.current=B,Ye.current=_,Ze.current=G,Je.current=W,Qe.current=H,et.current=U,tt.current=q,st.current=K,at.current=V,rt.current=X,nt.current=J,it.current=Q,lt.current=Y,Re(!0)},[Se,O,P,D,B,_,G,W,H,U,q,K,V,X,J,Q,Y]),ss=r.useCallback(()=>{ue(v.current),de(E.current),fe(se.current),he(ie.current),pe(Xe.current),Ae(Ye.current),Me(Ze.current),Ee(Je.current),ot(Qe.current),ge(et.current),ye(tt.current),be(st.current),xe(at.current),ze(rt.current),Le(nt.current),Fe(it.current),$e(lt.current),ae(null),Re(!1)},[ue]),as=r.useCallback(async()=>{const s=Se();Re(!1),ae(null),n?await n(s):xt(s)},[Se,n,xt]),zt=r.useCallback(()=>{const s=z.current;if(!s)return;const c=k.current;for(const i of s.getGridItems()){const g=i.getAttribute("gs-id");if(!g)continue;const l=R.current.get(g);if(!l)continue;const b=i.gridstackNode;if(!b)continue;const S={x:b.x??0,y:b.y??0,w:b.w??1,h:b.h??1};R.current.set(g,c==="flow-horizontal"?{...l,layouts:{...l.layouts,"flow-horizontal":S}}:{...l,position:S})}},[]),jt=r.useCallback(s=>{var g;if(s===k.current)return;const c=()=>{zt();const l=[...R.current.values()],b=F,S=s==="flow-horizontal",w=S?Tt(l,t.grid.rows):t.grid.columns;Ie(),k.current=s,ot(s);const M=Te(s,w);z.current=M,ue(S?Ot(l,w,t.grid.rows):l),b&&(M.enableMove(!0),M.enableResize(!0),M.getGridItems().forEach(te))};if(typeof window<"u"&&((g=window.matchMedia)==null?void 0:g.call(window,"(prefers-reduced-motion: reduce)").matches)){c();return}le.current&&clearTimeout(le.current),ut(!0),le.current=setTimeout(()=>{c(),requestAnimationFrame(()=>ut(!1))},150)},[F,zt,Ie,Te,ue,te,t.grid.rows,t.grid.columns]);r.useEffect(()=>()=>{le.current&&clearTimeout(le.current)},[]);const Nt=()=>e.jsx("button",{type:"button",className:"zf-btn zf-btn--icon",onClick:ts,"aria-label":"Customise",title:"Customise",children:e.jsx(Cs,{size:18,"aria-hidden":"true"})}),Oe=F&&He?R.current.get(He):void 0,rs=H==="flow-horizontal";return e.jsxs(e.Fragment,{children:[e.jsx("style",{children:ms}),m&&!F?At.createPortal(Nt(),m):null,e.jsxs("div",{className:F?"zf-editor zf-customise":"zf-editor","data-mode":H,style:{"--zf-accent-hue":O,"--zf-accent-sat":`${P}%`,"--zf-base-hue":D,"--zf-base-sat":`${B}%`,"--zf-up":_,"--zf-down":G,"--zf-font-family":Ft[J],"--zf-numeric":Lt[Q],"--zf-frame-radius":`${U}px`,"--zf-border-alpha":q,"--zf-surface-opacity":K,"--zf-density":V,"--zf-elevation":X},children:[(F||!m)&&e.jsxs("div",{className:"zf-editor-bar",children:[e.jsx("div",{className:"zf-editor-bar-spacer"}),F?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:"zf-btn zf-btn--ghost",onClick:ss,children:"Cancel"}),e.jsx("button",{type:"button",className:"zf-btn zf-btn--primary",onClick:as,children:"Save"})]}):Nt()]}),e.jsxs("div",{className:"zf-editor-main",children:[e.jsx("div",{className:"zf-editor-grid","data-switching":Yt,children:e.jsx("div",{ref:y,className:"grid-stack"})}),e.jsx("aside",{className:"zf-rail","aria-hidden":!F,inert:!F,children:e.jsxs("div",{className:"zf-rail-inner",children:[e.jsxs("div",{className:"zf-rail-tabs",role:"tablist","aria-label":"Customise",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":ee==="frames",className:ee==="frames"?"zf-rail-tab is-active":"zf-rail-tab",onClick:()=>dt("frames"),children:"Frames"}),e.jsx("button",{type:"button",role:"tab","aria-selected":ee==="cosmetics",className:ee==="cosmetics"?"zf-rail-tab is-active":"zf-rail-tab",onClick:()=>dt("cosmetics"),children:"Cosmetics"})]}),ee==="cosmetics"&&e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",style:{margin:0},children:"Presets"}),e.jsx("div",{className:"zf-presets",children:$t.map(s=>e.jsxs("button",{type:"button",className:mt===s.key?"zf-preset is-active":"zf-preset",title:s.description,"aria-pressed":mt===s.key,onClick:()=>Zt(s),children:[e.jsx("span",{className:"zf-preset-swatch",style:{background:`linear-gradient(135deg, hsl(${s.theme.baseHue} ${s.theme.baseSat}% 16%) 0 52%, hsl(${s.theme.accentHue} ${s.theme.accentSat}% 62%) 52% 100%)`}}),e.jsx("span",{className:"zf-preset-label",children:s.label})]},s.key))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",style:{margin:0},children:"Accent"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("span",{className:"zf-theme-val",children:[e.jsx("span",{className:"zf-theme-swatch"}),"Hue ",O,"°"]}),O!==242&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>de(242),children:"Reset"})]}),e.jsx("input",{type:"range",className:"zf-hue-slider",min:0,max:360,value:O,"aria-label":"Accent hue",onChange:s=>de(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Saturation"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[P!==90&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>fe(90),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[P,"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:100,value:P,"aria-label":"Accent saturation",onChange:s=>fe(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Surface"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("span",{className:"zf-theme-val",children:[e.jsx("span",{className:"zf-theme-swatch",style:{background:`hsl(${D} ${B}% 32%)`,boxShadow:"none"}}),"Tint ",D,"°"]}),D!==233&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>he(233),children:"Reset"})]}),e.jsx("input",{type:"range",className:"zf-hue-slider",min:0,max:360,value:D,"aria-label":"Surface tint hue",onChange:s=>he(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Tint strength"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[B!==20&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>pe(20),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[B,"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:100,value:B,"aria-label":"Surface tint strength",onChange:s=>pe(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Gain / Loss"}),e.jsxs("div",{className:"zf-theme-row",style:{margin:"10px 0 0"},children:[e.jsxs("label",{className:"zf-theme-val",children:[e.jsx("input",{type:"color",className:"zf-color",value:_,"aria-label":"Gain (up) colour",onChange:s=>Ae(s.target.value)}),"Up ",_]}),_.toLowerCase()!=="#3fd08f"&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Ae("#3fd08f"),children:"Reset"})]}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:9},children:[e.jsxs("label",{className:"zf-theme-val",children:[e.jsx("input",{type:"color",className:"zf-color",value:G,"aria-label":"Loss (down) colour",onChange:s=>Me(s.target.value)}),"Down ",G]}),G.toLowerCase()!=="#ff6b81"&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Me("#ff6b81"),children:"Reset"})]})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Layout"}),e.jsx("div",{className:"zf-theme-row",children:e.jsx("span",{className:"zf-theme-val",children:"Direction"})}),e.jsxs("div",{className:"zf-mode-seg",role:"group","aria-label":"Dashboard layout direction",children:[e.jsx("button",{type:"button",className:H==="flow-vertical"?"zf-mode-seg-btn is-active":"zf-mode-seg-btn","aria-pressed":H==="flow-vertical",onClick:()=>jt("flow-vertical"),children:"Vertical"}),e.jsx("button",{type:"button",className:H==="flow-horizontal"?"zf-mode-seg-btn is-active":"zf-mode-seg-btn","aria-pressed":H==="flow-horizontal",onClick:()=>jt("flow-horizontal"),children:"Horizontal"}),e.jsx("button",{type:"button",className:"zf-mode-seg-btn",disabled:!0,title:"Infinite canvas — coming soon",children:"Canvas"})]}),rs&&e.jsx("p",{className:"zf-mode-seg-hint",children:"Rows fill the height; the board scrolls sideways. Rearranging stays in Vertical for now."}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Frame gap"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[W!==12&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>Ee(12),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[W,"px"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:12,value:W,"aria-label":"Frame gap",onChange:s=>Ee(Number(s.target.value))})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Appearance"}),e.jsxs("div",{className:"zf-theme-row",children:[e.jsx("span",{className:"zf-theme-val",children:"Corner radius"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[U!==18&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ge(18),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[U,"px"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:32,value:U,"aria-label":"Corner radius",onChange:s=>ge(Number(s.target.value))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Border"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[q!==.22&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ye(.22),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(q*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:1,step:.01,value:q,"aria-label":"Border strength",onChange:s=>ye(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Card opacity"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[K!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>be(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(K*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.3,max:1,step:.05,value:K,"aria-label":"Card opacity",onChange:s=>be(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Density"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[V!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>xe(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(V*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.6,max:1.4,step:.05,value:V,"aria-label":"Card density",onChange:s=>xe(Math.round(Number(s.target.value)*100)/100)}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Elevation"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[X!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>ze(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[X.toFixed(1),"×"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:0,max:2,step:.1,value:X,"aria-label":"Card elevation",onChange:s=>ze(Math.round(Number(s.target.value)*10)/10)})]}),e.jsxs("section",{className:"zf-theme",children:[e.jsx("h3",{className:"zf-rail-title",children:"Typography"}),e.jsx("div",{className:"zf-theme-row",children:e.jsx("span",{className:"zf-theme-val",children:"Font"})}),e.jsx("div",{className:"zf-seg",role:"group","aria-label":"Font family",children:["sans","mono","serif"].map(s=>e.jsx("button",{type:"button",className:J===s?"zf-seg-btn is-active":"zf-seg-btn","aria-pressed":J===s,style:{fontFamily:Ft[s]},onClick:()=>Le(s),children:s==="sans"?"Sans":s==="mono"?"Mono":"Serif"},s))}),e.jsx("div",{className:"zf-theme-row",style:{marginTop:13},children:e.jsx("span",{className:"zf-theme-val",children:"Numbers"})}),e.jsx("div",{className:"zf-seg",role:"group","aria-label":"Numeric style",children:["proportional","tabular"].map(s=>e.jsx("button",{type:"button",className:Q===s?"zf-seg-btn is-active":"zf-seg-btn","aria-pressed":Q===s,onClick:()=>Fe(s),children:e.jsx("span",{style:{fontVariantNumeric:Lt[s]},children:s==="proportional"?"Normal 1,071":"Tabular 1,071"})},s))}),e.jsxs("div",{className:"zf-theme-row",style:{marginTop:13},children:[e.jsx("span",{className:"zf-theme-val",children:"Text size"}),e.jsxs("span",{className:"zf-theme-knob-end",children:[Y!==1&&e.jsx("button",{type:"button",className:"zf-theme-reset",onClick:()=>$e(1),children:"Reset"}),e.jsxs("span",{className:"zf-theme-val",children:[Math.round(Y*100),"%"]})]})]}),e.jsx("input",{type:"range",className:"zf-range",min:.85,max:1.25,step:.05,value:Y,"aria-label":"Text size",onChange:s=>$e(Math.round(Number(s.target.value)*100)/100)})]})]}),ee==="frames"&&e.jsxs("section",{children:[e.jsx("h3",{className:"zf-rail-title",children:"Add a frame"}),e.jsx("p",{className:"zf-palette-hint",children:"Open a category, then click a frame to add it — or drag it onto the grid."}),e.jsx("div",{className:"zf-palette-cats",children:je.map(s=>{const c=pt.has(s.key);return e.jsxs("div",{className:c?"zf-palette-cat is-open":"zf-palette-cat",children:[e.jsxs("button",{type:"button",className:"zf-palette-cat-header","aria-expanded":c,onClick:()=>Qt(s.key),children:[e.jsx("svg",{className:"zf-palette-cat-chevron",viewBox:"0 0 16 16","aria-hidden":"true",children:e.jsx("path",{d:"M6 4l4 4-4 4",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})}),e.jsx("span",{className:"zf-palette-cat-label",children:s.label}),e.jsx("span",{className:"zf-palette-cat-count",children:s.frames.length})]}),c&&e.jsxs("div",{className:"zf-palette-cat-body",children:[s.description&&e.jsx("p",{className:"zf-palette-cat-desc",children:s.description}),e.jsx("div",{className:"zf-palette",children:s.frames.map(i=>{var g,l,b,S,w,M;return e.jsxs("div",{className:"grid-stack-item zf-newwidget","data-frame":i.name,"gs-w":((g=i.layout)==null?void 0:g.w)??4,"gs-h":((l=i.layout)==null?void 0:l.h)??3,"gs-min-w":(b=i.layout)==null?void 0:b.minW,"gs-min-h":(S=i.layout)==null?void 0:S.minH,"gs-max-w":(w=i.layout)==null?void 0:w.maxW,"gs-max-h":(M=i.layout)==null?void 0:M.maxH,role:"button",tabIndex:0,title:`Drag onto the board, or click to add ${i.name.replace(/-/g," ")}`,onClick:()=>bt(i.name),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),bt(i.name))},children:[i.iconUrl&&e.jsx("img",{className:"zf-newwidget-icon",src:i.iconUrl,alt:"",loading:"lazy",draggable:!1}),e.jsxs("div",{className:"zf-newwidget-copy",children:[e.jsx("div",{className:"zf-newwidget-name",children:i.name.replace(/-/g," ")}),e.jsx("div",{className:"zf-newwidget-desc",children:i.description})]})]},i.name)})})]})]},s.key)})})]})]})})]})]}),Oe?At.createPortal(e.jsx(Bs,{instance:Oe,registry:a,instancesRef:R,symbolUniverse:Xt,accentHue:O,onApply:s=>Z(s),onClose:()=>ae(null)},Oe.id),document.body):null]})}function Bs({instance:t,registry:a,instancesRef:n,symbolUniverse:m,accentHue:N,onApply:d,onClose:h}){const o=a.get(t.frame),f=r.useMemo(()=>o?Fs(o):null,[o]),p=r.useMemo(()=>o?Is(o):[],[o]),[u,y]=r.useState(()=>({...t.config??{}})),[z,j]=r.useState(null),k=t.id,R=r.useCallback(v=>{if(y(v),o){const se=o.schema.safeParse(v);if(!se.success){j(se.error.issues.map(ie=>`${ie.path.join(".")||"(root)"}: ${ie.message}`).join(`
68
+ `));return}}j(null);const E=n.current.get(k);E&&(n.current.set(k,{...E,config:v}),d(k))},[o,k,n,d]);r.useEffect(()=>{const v=E=>{E.key==="Escape"&&h()};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[h]);const L=(v,E)=>R({...u,[v]:E}),x=t.frame.replace(/-/g," ");return e.jsx("div",{className:"zf-dialog-backdrop",style:{"--zf-accent-hue":N},onMouseDown:v=>{v.target===v.currentTarget&&h()},children:e.jsxs("div",{className:"zf-dialog",role:"dialog","aria-modal":"true","aria-label":`Configure ${x}`,children:[e.jsxs("header",{className:"zf-dialog-head",children:[e.jsxs("h3",{className:"zf-dialog-title",children:["Configure · ",x]}),e.jsx("button",{type:"button",className:"zf-dialog-close",onClick:h,"aria-label":"Close",title:"Close",children:e.jsx(Ce,{size:16,"aria-hidden":"true"})})]}),e.jsxs("div",{className:"zf-dialog-body",children:[f&&e.jsx(qs,{control:f,config:u,loading:m.loading,options:m.options,onChangeSymbol:v=>R({...u,symbol:v}),onChangeSymbols:v=>R({...u,symbols:v}),onChangeHoldings:v=>R({...u,holdings:v})}),p.map(v=>e.jsx(_s,{field:v,value:u[v.key],onChange:E=>L(v.key,E)},v.key)),!f&&p.length===0&&e.jsx("p",{className:"zf-rail-empty",children:"This frame has no settings."}),z&&e.jsx("div",{className:"zf-config-error",children:z})]}),e.jsx("footer",{className:"zf-dialog-foot",children:e.jsx("button",{type:"button",className:"zf-btn zf-btn--primary",onClick:h,children:"Done"})})]})})}function _s({field:t,value:a,onChange:n}){const{key:m,label:N,shape:d}=t,h=`zf-cfg-${m}`,o=d.description;if(I(d,"boolean")){const p=typeof a=="boolean"?a:!!d.default;return e.jsxs("label",{className:"zf-checkbox",title:o,children:[e.jsx("input",{type:"checkbox",checked:p,onChange:u=>n(u.target.checked)}),N]})}const f=Array.isArray(d.enum)&&d.enum.every(p=>typeof p=="string")?d.enum:null;if(f&&f.length>0){const p=typeof d.default=="string"?d.default:f[0],u=typeof a=="string"&&f.includes(a)?a:p;return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:h,title:o,children:N}),e.jsx("select",{id:h,className:"zf-select",value:u,onChange:y=>n(y.target.value),children:f.map(y=>e.jsx("option",{value:y,children:Ve(y)},y))})]})}return I(d,"integer")||I(d,"number")?e.jsx(Gs,{id:h,field:t,value:a,onChange:n}):Kt(d)?e.jsx(Us,{id:h,field:t,value:a,onChange:n}):e.jsx(Ws,{id:h,field:t,value:a,onChange:n})}function Gs({id:t,field:a,value:n,onChange:m}){const{label:N,shape:d}=a,h=d.description,o=typeof d.minimum=="number"?d.minimum:void 0,f=typeof d.maximum=="number"?d.maximum:void 0,p=I(d,"integer"),u=p?1:"any",y=typeof d.default=="number"?d.default:o??0,z=typeof n=="number"&&Number.isFinite(n)?n:void 0;if(o!==void 0&&f!==void 0){const j=z??y;return e.jsxs("div",{className:"zf-field",children:[e.jsxs("div",{className:"zf-field-row",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),e.jsx("span",{className:"zf-field-num",children:j})]}),e.jsx("input",{id:t,type:"range",className:"zf-range",min:o,max:f,step:u,value:j,onChange:k=>m(p?Math.round(Number(k.target.value)):Number(k.target.value))})]})}return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),e.jsx("input",{id:t,type:"number",className:"zf-input",min:o,max:f,step:u,value:n==null?"":String(n),onChange:j=>m(j.target.value===""?"":Number(j.target.value))})]})}function Ws({id:t,field:a,value:n,onChange:m}){const{key:N,label:d,shape:h}=a,o=h.description,f=typeof n=="string"?n:"",p=typeof h.default=="string"?h.default:"",u=typeof h.default=="string"&&/^#[0-9a-f]{6}$/i.test(h.default)?h.default:null;if(N==="color"||u){const y=/^#[0-9a-f]{6}$/i.test(f)?f:u??"#8b8df9";return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsxs("div",{className:"zf-color-row",children:[e.jsx("input",{type:"color",className:"zf-color",value:y,"aria-label":`${d} swatch`,onChange:z=>m(z.target.value)}),e.jsx("input",{id:t,className:"zf-input",value:f,placeholder:p,spellCheck:!1,onChange:z=>m(z.target.value)})]})]})}return N==="text"?e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsx("textarea",{id:t,className:"zf-textarea zf-textarea--prose",value:f,placeholder:p,onChange:y=>m(y.target.value)})]}):e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:o,children:d}),e.jsx("input",{id:t,className:"zf-input",value:f,placeholder:p,spellCheck:!1,onChange:y=>m(y.target.value)})]})}function Us({id:t,field:a,value:n,onChange:m}){const{label:N,shape:d}=a,h=d.description,o=Array.isArray(n)?n.filter(j=>typeof j=="string"):[],[f,p]=r.useState(""),u=typeof d.maxItems=="number"?d.maxItems:void 0,y=u!==void 0&&o.length>=u,z=j=>{const k=j.trim().toUpperCase();p(""),!(!k||o.includes(k)||y)&&m([...o,k])};return e.jsxs("div",{className:"zf-field",children:[e.jsx("label",{htmlFor:t,title:h,children:N}),o.length>0&&e.jsx("div",{className:"zf-taglist",children:o.map(j=>e.jsxs("span",{className:"zf-tag",children:[j,e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${j}`,onClick:()=>m(o.filter(k=>k!==j)),children:e.jsx(Ce,{size:12,"aria-hidden":"true"})})]},j))}),e.jsx("input",{id:t,className:"zf-input",value:f,disabled:y,spellCheck:!1,placeholder:y?"Maximum reached":"Type a code, Enter to add",onChange:j=>p(j.target.value),onBlur:()=>z(f),onKeyDown:j=>{j.key==="Enter"||j.key===","?(j.preventDefault(),z(f)):j.key==="Backspace"&&f===""&&o.length>0&&m(o.slice(0,-1))}})]})}function qs({control:t,config:a,loading:n,options:m,onChangeSymbol:N,onChangeSymbols:d,onChangeHoldings:h}){const o=$s(t,a);if(t.kind==="single"){const u=o[0]??"";return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Ticker",detail:u?me(u):"None",loading:n}),u?e.jsx(Ue,{symbol:u,option:We(u,m)}):null,e.jsx(Be,{loading:n,options:m,selectedSymbols:u?[u]:[],placeholder:"Search TSLA, BTC...",onSelect:N})]})}if(t.kind==="symbols"){const u=typeof t.maxItems=="number"&&o.length>=t.maxItems;return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Tickers",detail:Dt(o.length,t),loading:n}),e.jsx(Ks,{symbols:o,options:m,onRemove:y=>d(o.filter(z=>z!==y))}),e.jsx(Be,{disabled:u,loading:n,options:m,selectedSymbols:o,placeholder:u?"Maximum tickers added":"Add ticker",keepOpenOnSelect:!0,onSelect:y=>{o.includes(y)||u||d([...o,y])}})]})}const f=Array.isArray(a.holdings)?a.holdings.filter(qt):[],p=typeof t.maxItems=="number"&&f.length>=t.maxItems;return e.jsxs("div",{className:"zf-symbol-editor",children:[e.jsx(De,{title:"Holding tickers",detail:Dt(f.length,t),loading:n}),e.jsx("div",{className:"zf-holding-list",children:f.map((u,y)=>{const z=typeof u.symbol=="string"?u.symbol:"";return e.jsxs("div",{className:"zf-holding-row",children:[e.jsxs("div",{className:"zf-holding-main",children:[z?e.jsx(Ue,{symbol:z,option:We(z,m),compact:!0}):e.jsx("span",{className:"zf-symbol-empty",children:"No ticker"}),typeof u.amount=="number"&&e.jsxs("span",{className:"zf-holding-amount",children:["x ",u.amount]})]}),e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${z||"holding"}`,onClick:()=>{h(f.filter((j,k)=>k!==y))},children:e.jsx(Ce,{size:13,"aria-hidden":"true"})})]},`${z}-${y}`)})}),e.jsx(Be,{disabled:p,loading:n,options:m,selectedSymbols:o,placeholder:p?"Maximum holdings added":"Add holding",keepOpenOnSelect:!0,onSelect:u=>{p||h([...f,{symbol:u,amount:1}])}})]})}function De({title:t,detail:a,loading:n}){return e.jsxs("div",{className:"zf-symbol-head",children:[e.jsxs("div",{children:[e.jsx("div",{className:"zf-symbol-label",children:t}),e.jsx("div",{className:"zf-symbol-detail",children:a})]}),e.jsx("span",{className:n?"zf-symbol-source is-loading":"zf-symbol-source",children:n?"Loading":"Live list"})]})}function Dt(t,a){return typeof a.maxItems=="number"?`${t}/${a.maxItems}`:typeof a.minItems=="number"&&t<a.minItems?`${t}/${a.minItems}+`:String(t)}function We(t,a){return a.find(n=>n.symbol===t)??_e(t)}function Ks({symbols:t,options:a,onRemove:n}){return t.length===0?e.jsx("div",{className:"zf-symbol-empty",children:"No tickers selected"}):e.jsx("div",{className:"zf-symbol-chips",children:t.map(m=>e.jsxs("span",{className:"zf-symbol-chip",children:[e.jsx(Ue,{symbol:m,option:We(m,a),compact:!0}),e.jsx("button",{type:"button",className:"zf-symbol-remove","aria-label":`Remove ${m}`,onClick:()=>n(m),children:e.jsx(Ce,{size:13,"aria-hidden":"true"})})]},m))})}function Ue({symbol:t,option:a,compact:n=!1}){return e.jsxs("span",{className:n?"zf-selected-symbol is-compact":"zf-selected-symbol",children:[e.jsx(Vt,{symbol:t}),e.jsxs("span",{className:"zf-selected-symbol-text",children:[e.jsx("strong",{children:me(t)}),!n&&e.jsx("em",{children:t})]}),!n&&a.markPx!==void 0&&e.jsx("span",{className:"zf-selected-symbol-price",children:Ut(a.markPx)})]})}function Be({disabled:t=!1,loading:a,options:n,selectedSymbols:m,placeholder:N,keepOpenOnSelect:d=!1,onSelect:h}){const[o,f]=r.useState(""),[p,u]=r.useState(!1),y=r.useMemo(()=>new Set(m),[m]),z=r.useMemo(()=>new Set(n.map(x=>x.symbol)),[n]),j=Es(o),k=r.useMemo(()=>{const x=o.trim().toLowerCase();return(x?n.filter(E=>E.ticker.toLowerCase().includes(x)||E.symbol.toLowerCase().includes(x)):n.slice(0,28)).slice().sort((E,se)=>Bt(E,x)-Bt(se,x)).slice(0,36)},[n,o]),R=r.useMemo(()=>{if(!j)return[];const x=j.includes(":")?[j]:[`xyz:${j}`,j];return x.filter((v,E)=>x.indexOf(v)===E&&!z.has(v)&&!y.has(v))},[z,j,y]),L=x=>{!x||d&&y.has(x)||(h(x),f(""),u(d))};return e.jsxs("div",{className:"zf-symbol-combo",onBlur:x=>{x.currentTarget.contains(x.relatedTarget)||u(!1)},children:[e.jsxs("div",{className:t?"zf-symbol-search is-disabled":"zf-symbol-search",children:[e.jsx(ws,{size:14,"aria-hidden":"true"}),e.jsx("input",{value:o,disabled:t,placeholder:N,"aria-label":N,role:"combobox","aria-expanded":p,onFocus:()=>u(!0),onChange:x=>{f(x.target.value),u(!0)},onKeyDown:x=>{var v;x.key==="Enter"&&(x.preventDefault(),L(((v=k[0])==null?void 0:v.symbol)??R[0]??j))}}),e.jsx(js,{size:14,"aria-hidden":"true"})]}),p&&!t&&e.jsxs("div",{className:"zf-symbol-menu",role:"listbox",children:[a&&e.jsx("div",{className:"zf-symbol-menu-status",children:"Loading live universe..."}),k.map(x=>{const v=y.has(x.symbol);return e.jsxs("button",{type:"button",className:v?"zf-symbol-option is-selected":"zf-symbol-option",disabled:d&&v,role:"option","aria-selected":v,onMouseDown:E=>{E.preventDefault(),L(x.symbol)},onClick:E=>{E.detail===0&&L(x.symbol)},children:[e.jsx(Vt,{symbol:x.symbol}),e.jsxs("span",{className:"zf-symbol-option-main",children:[e.jsx("strong",{children:x.ticker}),e.jsx("em",{children:x.symbol})]}),e.jsxs("span",{className:"zf-symbol-option-meta",children:[e.jsx("span",{children:Ut(x.markPx)||x.kind}),x.changePct!==void 0&&e.jsx("span",{className:x.changePct>=0?"zf-symbol-change is-up":"zf-symbol-change is-down",children:Ls(x.changePct)})]}),v&&e.jsx(xs,{size:14,"aria-hidden":"true"})]},x.symbol)}),R.map(x=>e.jsxs("button",{type:"button",className:"zf-symbol-option zf-symbol-option--custom",onMouseDown:v=>{v.preventDefault(),L(x)},onClick:v=>{v.detail===0&&L(x)},children:[e.jsx("span",{className:"zf-symbol-custom-icon",children:e.jsx(vs,{size:13,"aria-hidden":"true"})}),e.jsxs("span",{className:"zf-symbol-option-main",children:[e.jsx("strong",{children:me(x)}),e.jsx("em",{children:x})]}),e.jsx("span",{className:"zf-symbol-option-meta",children:e.jsx("span",{children:Ke(x)})})]},x)),!a&&k.length===0&&R.length===0&&e.jsx("div",{className:"zf-symbol-menu-status",children:"No matches"})]})]})}function Bt(t,a){if(!a)return t.rank;const n=t.ticker.toLowerCase(),m=t.symbol.toLowerCase();return n===a||m===a?-40+t.rank/1e4:n.startsWith(a)?-20+t.rank/1e4:m.startsWith(a)?-10+t.rank/1e4:t.rank}function Vt({symbol:t}){const a=Ke(t).toLowerCase(),[n,m]=r.useState(!1);return r.useEffect(()=>m(!1),[t]),n?e.jsx("span",{className:`zf-symbol-avatar zf-symbol-avatar--${a}`,children:me(t).slice(0,2)}):e.jsx("img",{className:`zf-symbol-avatar zf-symbol-avatar--logo zf-symbol-avatar--${a}`,src:Ms(t),alt:"","aria-hidden":"true",draggable:!1,loading:"lazy",onError:()=>m(!0)})}export{ea as DashboardEditor};
@@ -0,0 +1 @@
1
+ .zf-editor{--zf-accent: hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%);--font-dmsans: var(--zf-font-family, "DM Sans", sans-serif);--zf-ease-out: cubic-bezier(.23, 1, .32, 1);--zf-ease-drawer: cubic-bezier(.32, .72, 0, 1);position:relative}.zf-editor-main{display:flex;align-items:flex-start}.zf-editor-grid{flex:1;min-width:0;min-height:360px;border-radius:18px;border:1px dashed transparent;transition:border-color .2s var(--zf-ease-out),opacity .24s var(--zf-ease-out),filter .24s var(--zf-ease-out),transform .24s var(--zf-ease-out)}.zf-editor-grid[data-switching=true]{opacity:.15;filter:blur(10px);transform:scale(.985);transition:opacity .14s var(--zf-ease-out),filter .14s var(--zf-ease-out),transform .14s var(--zf-ease-out)}@media(prefers-reduced-motion:reduce){.zf-editor-grid[data-switching=true]{filter:none;transform:none}}.zf-editor.zf-customise .zf-editor-grid{border-color:#ffffff14}.zf-editor[data-mode=flow-horizontal] .zf-editor-grid{overflow-x:auto;overflow-y:hidden}.zf-editor .grid-stack>.grid-stack-item>.grid-stack-item-content{overflow:visible}@media(hover:hover){.zf-editor:not(.zf-customise) .grid-stack-item-content:hover>.zf-frame{transform:translateY(-2px);border-color:var( --zf-frame-border-hover, hsl(var(--zf-accent-hue, 242) 90% 76% / .42) );background:var( --zf-frame-bg-hover, linear-gradient( 165deg, rgba(34, 35, 50, .88) 0%, rgba(18, 19, 28, .9) 60%, rgba(12, 13, 20, .92) 100% ) );box-shadow:var( --zf-frame-shadow-hover, inset 0 1px 0 rgba(255, 255, 255, .09), 0 1px 2px rgba(0, 0, 0, .4), 0 26px 56px -26px rgba(0, 0, 0, .92), 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .12), 0 20px 60px -28px hsl(var(--zf-accent-hue, 242) 90% 76% / .4) )}}.zf-fill{width:100%;height:100%}.zf-editor .zf-frame,.zf-editor .zf-bare{animation:none}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{outline:2px dashed rgba(255,255,255,.08);outline-offset:-2px;border-radius:18px;transition:outline-color .2s var(--zf-ease-out)}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content>*{pointer-events:none}.zf-editor.zf-customise .grid-stack-item:hover>.grid-stack-item-content{outline-color:var(--zf-accent)}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{cursor:grab}body.zf-dragging,body.zf-dragging *{cursor:grabbing!important}@keyframes zf-wiggle{0%,to{transform:rotate(-.4deg)}50%{transform:rotate(.4deg)}}.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{animation:zf-wiggle .32s ease-in-out infinite}.zf-editor.zf-customise .grid-stack-item:nth-child(2n)>.grid-stack-item-content{animation-delay:.05s;animation-duration:.28s}.zf-editor.zf-customise .grid-stack-item:nth-child(3n)>.grid-stack-item-content{animation-delay:.1s;animation-duration:.34s}.zf-editor.zf-customise .grid-stack-item:nth-child(5n)>.grid-stack-item-content{animation-delay:.15s;animation-duration:.26s}.zf-editor.zf-customise .grid-stack-item.ui-draggable-dragging>.grid-stack-item-content,.zf-editor.zf-customise .grid-stack-item.ui-resizing>.grid-stack-item-content{animation:none}@media(prefers-reduced-motion:reduce){.zf-editor.zf-customise .grid-stack-item>.grid-stack-item-content{animation:none}}.zf-del-btn{position:absolute;top:0;right:0;width:24px;height:24px;border-radius:9999px;background:linear-gradient(180deg,#f87171d1,#dc2626db);border:1px solid rgba(255,255,255,.28);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transform:scale(.8);-webkit-backdrop-filter:blur(12px) saturate(150%);backdrop-filter:blur(12px) saturate(150%);box-shadow:inset 0 1px #ffffff59,0 1px 2px #0000004d,0 8px 20px -12px #dc2626b3;transition:opacity .2s var(--zf-ease-out),transform .2s var(--zf-ease-out),background .2s var(--zf-ease-out),border-color .2s var(--zf-ease-out),box-shadow .2s var(--zf-ease-out);z-index:100;font-size:14px;font-weight:700;line-height:1;padding:0}.zf-del-btn:hover{background:linear-gradient(180deg,#f87171f2,#dc2626fa);border-color:#ffffff6b;transform:scale(1.1);box-shadow:inset 0 1px #ffffff6b,0 2px 6px #00000052,0 12px 26px -12px #dc2626d9}.zf-del-btn:active{transform:scale(.98)}.zf-editor.zf-customise .grid-stack-item:hover>.zf-del-btn{opacity:1;transform:scale(1)}.zf-cfg-btn{position:absolute;top:0;right:28px;width:24px;height:24px;border-radius:9999px;background:linear-gradient(180deg,#262838b8,#13141fc7);border:1px solid rgba(255,255,255,.16);color:#ffffffeb;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transform:scale(.8);-webkit-backdrop-filter:blur(14px) saturate(150%);backdrop-filter:blur(14px) saturate(150%);box-shadow:inset 0 1px #ffffff1a,0 1px 2px #00000052,0 8px 20px -12px #000c;transition:opacity .2s var(--zf-ease-out),transform .2s var(--zf-ease-out),color .2s var(--zf-ease-out),border-color .2s var(--zf-ease-out),box-shadow .2s var(--zf-ease-out);z-index:100;padding:0}.zf-cfg-btn:hover{color:hsl(var(--zf-accent-hue, 242) 96% 82%);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .6);transform:scale(1.1);box-shadow:inset 0 1px #ffffff24,0 2px 6px #00000057,0 12px 26px -14px #000000d1}.zf-cfg-btn:active{transform:scale(.98)}.zf-cfg-btn>svg{display:block}.zf-editor.zf-customise .grid-stack-item:hover>.zf-cfg-btn{opacity:1;transform:scale(1)}.zf-editor .grid-stack-placeholder>.placeholder-content{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .15);border:2px dashed hsl(var(--zf-accent-hue, 242) 90% 76% / .55);border-radius:18px}.ui-draggable-dragging>.zf-drag-ghost{box-sizing:border-box;width:100%;height:100%;display:flex;align-items:center;gap:10px;padding:0 14px;direction:ltr;border-radius:12px;background:linear-gradient(165deg,#222332f2,#0d0e15f5);border:1px solid hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .55);box-shadow:inset 0 1px #ffffff14,0 22px 50px -20px #000000d9,0 0 0 1px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .22);color:#eef1f8;font-family:var(--font-dmsans, "DM Sans", system-ui, sans-serif);-webkit-backdrop-filter:blur(10px) saturate(140%);backdrop-filter:blur(10px) saturate(140%);overflow:hidden}.ui-draggable-dragging>.zf-drag-ghost>.zf-drag-ghost-icon{width:30px;height:30px;flex:none;border-radius:7px;object-fit:cover}.ui-draggable-dragging>.zf-drag-ghost>.zf-drag-ghost-name{font-size:13px;font-weight:700;letter-spacing:.01em;text-transform:capitalize;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body:has(.ui-draggable-dragging),body:has(.ui-draggable-dragging) *{cursor:grabbing!important}.zf-editor-bar{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-bottom:14px}.zf-editor-bar-spacer{flex:1}.zf-btn{font:inherit;font-size:13px;font-weight:600;line-height:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 15px;border-radius:10px;cursor:pointer;border:1px solid rgba(255,255,255,.14);background:linear-gradient(180deg,#262838b8,#13141fc7);color:#ffffffeb;-webkit-backdrop-filter:blur(14px) saturate(150%);backdrop-filter:blur(14px) saturate(150%);box-shadow:inset 0 1px #ffffff14,0 1px 2px #00000052,0 10px 24px -14px #000c;transition:background .18s var(--zf-ease-out),border-color .18s var(--zf-ease-out),color .18s var(--zf-ease-out),box-shadow .18s var(--zf-ease-out),transform .18s var(--zf-ease-out)}.zf-btn:hover{background:linear-gradient(180deg,#323447d1,#1a1b29db);border-color:#ffffff38;transform:translateY(-1px);box-shadow:inset 0 1px #ffffff1a,0 2px 6px #00000057,0 16px 30px -16px #000000d1}.zf-btn:active{transform:translateY(0) scale(.97);box-shadow:inset 0 1px 3px #00000073,0 1px 2px #0000004d}.zf-btn:focus-visible{outline:none;border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .7);box-shadow:inset 0 1px #ffffff14,0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .35)}.zf-btn--primary{border-color:hsl(var(--zf-accent-hue, 242) 90% 72% / .7);background:linear-gradient(180deg,hsl(var(--zf-accent-hue, 242) 96% 81%),hsl(var(--zf-accent-hue, 242) 88% 72%));color:#0b0c13;box-shadow:inset 0 1px #fff6,0 1px 2px #0000004d,0 12px 26px -12px hsl(var(--zf-accent-hue, 242) 85% 60% / .7)}.zf-btn--primary:hover{border-color:hsl(var(--zf-accent-hue, 242) 95% 78% / .85);background:linear-gradient(180deg,hsl(var(--zf-accent-hue, 242) 100% 85%),hsl(var(--zf-accent-hue, 242) 92% 76%));box-shadow:inset 0 1px #ffffff73,0 2px 6px #0000004d,0 18px 34px -14px hsl(var(--zf-accent-hue, 242) 85% 60% / .8)}.zf-btn--primary:focus-visible{box-shadow:inset 0 1px #fff6,0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .45)}.zf-btn--danger{border-color:#f2155352;color:#ff9aab}.zf-btn--danger:hover{border-color:#f215538c;color:#ffb3bf;background:linear-gradient(180deg,#781c349e,#4a1224b8)}.zf-btn--danger:focus-visible{border-color:#f21553b3;box-shadow:inset 0 1px #ffffff14,0 0 0 3px #f2155359}.zf-btn--ghost{border-color:#ffffff1a;background:linear-gradient(180deg,#1e1f2c80,#10111a94);color:#ffffffc7}.zf-btn--ghost:hover{color:#fffffff2}.zf-btn--icon{padding:0;width:38px;height:38px;border-radius:11px;color:#ffffffd9}.zf-btn--icon:hover{color:hsl(var(--zf-accent-hue, 242) 96% 82%);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .55)}.zf-btn--icon>svg{display:block}@media(prefers-reduced-motion:reduce){.zf-btn:hover,.zf-btn:active,.zf-del-btn:active,.zf-cfg-btn:active,.zf-rail-tab:active,.zf-dialog-close:active{transform:none}}.zf-rail{flex:none;width:0;margin-left:0;overflow:hidden;position:sticky;top:12px;transition:width .32s var(--zf-ease-drawer),margin-left .32s var(--zf-ease-drawer)}.zf-editor.zf-customise .zf-rail{width:320px;margin-left:16px}.zf-editor.zf-customise[data-mode=flow-horizontal] .zf-rail{margin-right:24px}.zf-rail-inner{box-sizing:border-box;width:320px;display:flex;flex-direction:column;gap:12px;padding:14px;border-radius:14px;background:linear-gradient(180deg,#141622b3,#0b0c13cc);border:1px solid rgba(255,255,255,.08);max-height:calc(100vh - 24px);overflow-x:hidden;overflow-y:auto;opacity:0;transition:opacity .2s var(--zf-ease-out)}.zf-editor.zf-customise .zf-rail-inner{opacity:1;transition-delay:.12s}.zf-rail-actions{display:flex;flex:none;gap:8px}.zf-rail-actions .zf-btn{flex:1}.zf-rail-scroll{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:16px}@media(prefers-reduced-motion:reduce){.zf-rail,.zf-rail-inner{transition:none}}.zf-rail-tabs{display:flex;gap:4px;padding:3px;border-radius:9px;background:#00000047;border:1px solid rgba(255,255,255,.07)}.zf-rail-tab{flex:1;font:inherit;font-size:11px;font-weight:600;letter-spacing:.04em;color:#ffffff80;background:transparent;border:0;border-radius:7px;padding:6px 8px;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),box-shadow .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-rail-tab:hover{color:#ffffffd1}.zf-rail-tab:active{transform:scale(.97)}.zf-rail-tab.is-active{color:#fff;background:hsl(var(--zf-accent-hue, 242) 90% 70% / .22);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-rail-tab:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:1px}.zf-mode-seg{display:flex;gap:4px;padding:3px;border-radius:9px;background:#00000047;border:1px solid rgba(255,255,255,.07)}.zf-mode-seg-btn{flex:1;font:inherit;font-size:11px;font-weight:600;letter-spacing:.04em;color:#ffffff80;background:transparent;border:0;border-radius:7px;padding:6px 8px;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),box-shadow .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-mode-seg-btn:hover:not(:disabled){color:#ffffffd1}.zf-mode-seg-btn:active:not(:disabled){transform:scale(.97)}.zf-mode-seg-btn.is-active{color:#fff;background:hsl(var(--zf-accent-hue, 242) 90% 70% / .22);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-mode-seg-btn:disabled{opacity:.4;cursor:not-allowed}.zf-mode-seg-btn:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:1px}.zf-mode-seg-hint{margin:8px 1px 0;font-size:10.5px;line-height:1.4;color:#ffffff6b}.zf-rail-title{font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#ffffff75;margin:0 0 8px}.zf-palette-hint{font-size:11px;color:#fff6;margin:-4px 0 8px}.zf-palette-cats{display:flex;flex-direction:column;gap:6px}.zf-palette-cat{border-radius:10px;border:1px solid rgba(255,255,255,.06);background:#ffffff05;overflow:hidden;transition:background .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out)}.zf-palette-cat.is-open{background:#ffffff09;border-color:#ffffff1a}.zf-palette-cat-header{display:flex;align-items:center;gap:9px;width:100%;font:inherit;text-align:left;cursor:pointer;padding:10px 11px;background:transparent;border:0;color:#fffc;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out)}.zf-palette-cat-header:hover{background:#ffffff0b;color:#fff}.zf-palette-cat-header:focus-visible{outline:2px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .7);outline-offset:-2px}.zf-palette-cat-chevron{width:13px;height:13px;flex:none;color:#fff6;transition:transform .18s var(--zf-ease-out),color .15s var(--zf-ease-out)}.zf-palette-cat.is-open .zf-palette-cat-chevron{transform:rotate(90deg);color:hsl(var(--zf-accent-hue, 242) 70% 80% / .9)}.zf-palette-cat-label{flex:1;min-width:0;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.zf-palette-cat.is-open .zf-palette-cat-label{color:hsl(var(--zf-accent-hue, 242) 72% 84% / .95)}.zf-palette-cat-count{flex:none;font-size:10px;font-weight:600;font-variant-numeric:tabular-nums;color:#ffffff80;background:#ffffff12;border-radius:999px;padding:1px 7px;min-width:22px;text-align:center}.zf-palette-cat-body{padding:0 8px 9px;animation:zf-cat-in .18s var(--zf-ease-out)}@keyframes zf-cat-in{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.zf-palette-cat-body{animation:none}.zf-palette-cat-chevron{transition:none}}.zf-palette-cat-desc{font-size:10.5px;line-height:1.45;color:#ffffff61;margin:0 2px 9px}.zf-palette{display:flex;flex-direction:column;gap:6px}.zf-newwidget{display:flex;align-items:center;gap:10px;text-align:left;cursor:grab;user-select:none;-webkit-user-select:none;min-height:58px;padding:7px 10px 7px 8px;border-radius:9px;background:#ffffff0a;border:1px solid rgba(255,255,255,.07);transition:background .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out)}.zf-newwidget:hover{background:#ffffff17;border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .4)}.zf-newwidget:active{cursor:grabbing}.zf-newwidget-icon{width:42px;height:42px;flex:none;border-radius:10px;object-fit:cover;background:#ffffff0d;box-shadow:inset 0 0 0 1px #ffffff14,0 8px 18px #00000038}.zf-newwidget-copy{min-width:0}.zf-newwidget-name{font-size:12px;font-weight:600;color:#ffffffe6;text-transform:capitalize}.zf-newwidget-desc{font-size:11px;color:#fff6;margin-top:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.zf-field{display:flex;flex-direction:column;gap:5px;margin-bottom:10px}.zf-field label{font-size:11px;color:#ffffff8c}.zf-input,.zf-textarea{font:inherit;font-size:12px;color:#ffffffe6;background:#0000004d;border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:7px 9px;width:100%;box-sizing:border-box}.zf-textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:120px;resize:vertical;line-height:1.45}.zf-input:focus,.zf-textarea:focus{outline:none;border-color:var(--zf-accent)}.zf-checkbox{display:flex;align-items:center;gap:7px;font-size:12px;color:#ffffffb3;margin-bottom:10px;cursor:pointer}.zf-config-error{font-size:11px;color:#ff8b9d;line-height:1.45;margin:-4px 0 10px;white-space:pre-wrap}.zf-rail-empty{font-size:12px;color:#fff6;line-height:1.5}.zf-select{font:inherit;font-size:12px;color:#ffffffe6;background:#0000004d;border:1px solid rgba(255,255,255,.12);border-radius:7px;padding:7px 28px 7px 9px;width:100%;box-sizing:border-box;cursor:pointer;-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-opacity='0.55' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 9px center}.zf-select:focus{outline:none;border-color:var(--zf-accent)}.zf-select option{color:#0b0c13}.zf-field-row{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.zf-field-num{font-size:12px;font-variant-numeric:tabular-nums;font-weight:700;color:#ffffffd1}.zf-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:6px;margin:4px 0 2px;border-radius:9999px;outline:none;cursor:pointer;background:#ffffff21}.zf-range::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:15px;height:15px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-range::-moz-range-thumb{width:15px;height:15px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-range:focus-visible{box-shadow:0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .3)}.zf-color-row{display:flex;gap:8px}.zf-color{flex:none;width:40px;height:34px;padding:2px;border-radius:7px;border:1px solid rgba(255,255,255,.12);background:#0000004d;cursor:pointer}.zf-textarea--prose{font-family:inherit;min-height:76px}.zf-taglist{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:2px}.zf-tag{display:inline-flex;align-items:center;gap:5px;padding:4px 5px 4px 9px;border-radius:9999px;border:1px solid rgba(255,255,255,.1);background:#0000003d;font-size:11px;font-weight:600;letter-spacing:.02em;color:#ffffffd1}.zf-symbol-editor{position:relative;display:flex;flex-direction:column;gap:9px;margin:0 0 12px;padding:10px;border-radius:11px;border:1px solid hsl(var(--zf-accent-hue, 242) 90% 76% / .16);background:linear-gradient(135deg,hsl(var(--zf-accent-hue, 242) 90% 76% / .1),#ffffff09 45%,#00000029),#ffffff08}.zf-symbol-head,.zf-holding-row,.zf-holding-main,.zf-selected-symbol,.zf-symbol-search,.zf-symbol-chip{display:flex;align-items:center}.zf-symbol-head{justify-content:space-between;gap:10px}.zf-symbol-label{font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:#ffffff75}.zf-symbol-detail{margin-top:2px;font-size:13px;font-weight:700;color:#ffffffe0}.zf-symbol-source{flex:none;padding:4px 7px;border-radius:9999px;border:1px solid rgba(255,255,255,.09);background:#0003;font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:#ffffff7a}.zf-symbol-source.is-loading{color:var(--zf-accent);border-color:hsl(var(--zf-accent-hue, 242) 90% 76% / .24)}.zf-selected-symbol{min-width:0;gap:8px;padding:7px 8px;border-radius:9px;border:1px solid rgba(255,255,255,.08);background:#00000038}.zf-selected-symbol.is-compact{gap:6px;padding:0;border:0;background:transparent}.zf-selected-symbol-text{min-width:0;display:flex;flex-direction:column;gap:1px}.zf-selected-symbol-text strong,.zf-symbol-option-main strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#ffffffe6}.zf-selected-symbol-text em,.zf-symbol-option-main em{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:10px;color:#fff6}.zf-selected-symbol-price{margin-left:auto;font-variant-numeric:tabular-nums;font-size:12px;font-weight:700;color:#ffffffb8}.zf-symbol-avatar{flex:none;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px;font-size:9px;font-weight:800;letter-spacing:.02em;line-height:1}.zf-symbol-avatar--stock{background:#ffffffeb;color:#151821;box-shadow:inset 0 0 0 1px #00000014}.zf-symbol-avatar--crypto{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .18);color:var(--zf-accent);box-shadow:inset 0 0 0 1px hsl(var(--zf-accent-hue, 242) 90% 76% / .22)}.zf-symbol-avatar--logo{object-fit:contain}.zf-symbol-avatar--logo.zf-symbol-avatar--stock{padding:2px}.zf-symbol-avatar--logo.zf-symbol-avatar--crypto{border-radius:9999px;background:transparent;box-shadow:none}.zf-symbol-chips{display:flex;flex-wrap:wrap;gap:6px}.zf-symbol-chip{min-width:0;gap:6px;max-width:100%;padding:6px 6px 6px 7px;border-radius:9999px;border:1px solid rgba(255,255,255,.08);background:#00000038}.zf-symbol-remove{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:9999px;padding:0;cursor:pointer;background:#ffffff0f;color:#ffffff80}.zf-symbol-remove:hover{background:#ef44442e;color:#ff8b9d}.zf-symbol-empty{padding:7px 8px;border-radius:8px;border:1px dashed rgba(255,255,255,.09);color:#ffffff5c;font-size:11px}.zf-symbol-combo{position:relative}.zf-symbol-search{gap:7px;height:34px;border-radius:9px;padding:0 9px;border:1px solid rgba(255,255,255,.11);background:#00000047;color:#ffffff7a}.zf-symbol-search:focus-within{border-color:var(--zf-accent);box-shadow:0 0 0 3px hsl(var(--zf-accent-hue, 242) 90% 76% / .12)}.zf-symbol-search.is-disabled{opacity:.55}.zf-symbol-search input{min-width:0;flex:1;border:0;outline:0;padding:0;background:transparent;color:#ffffffe6;font:inherit;font-size:12px}.zf-symbol-search input::placeholder{color:#ffffff57}.zf-symbol-menu{position:absolute;z-index:120;top:calc(100% + 6px);left:0;right:0;display:flex;flex-direction:column;gap:3px;max-height:286px;overflow-y:auto;padding:6px;border-radius:11px;border:1px solid rgba(255,255,255,.12);background:#0b0c13f5;box-shadow:0 18px 36px #00000075,0 0 0 1px #0000004d;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.zf-symbol-option{width:100%;min-width:0;display:grid;grid-template-columns:22px minmax(0,1fr) auto 16px;align-items:center;gap:8px;min-height:40px;padding:7px;border:0;border-radius:8px;background:transparent;color:inherit;text-align:left;cursor:pointer}.zf-symbol-option:hover,.zf-symbol-option:focus-visible{outline:none;background:#ffffff13}.zf-symbol-option:disabled{cursor:default;opacity:.52}.zf-symbol-option.is-selected{background:hsl(var(--zf-accent-hue, 242) 90% 76% / .1)}.zf-symbol-option--custom{border-top:1px solid rgba(255,255,255,.06);border-radius:0 0 8px 8px}.zf-symbol-option-main{min-width:0;display:flex;flex-direction:column;gap:1px}.zf-symbol-option-meta{display:flex;flex-direction:column;align-items:flex-end;gap:1px;font-variant-numeric:tabular-nums;font-size:10px;color:#ffffff70}.zf-symbol-change{font-size:10px;font-weight:800}.zf-symbol-change.is-up{color:#42d67a}.zf-symbol-change.is-down{color:#ff637d}.zf-symbol-custom-icon{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:7px;background:#ffffff12;color:var(--zf-accent)}.zf-symbol-menu-status{padding:10px 8px;color:#ffffff61;font-size:11px}.zf-holding-list{display:flex;flex-direction:column;gap:6px}.zf-holding-row{justify-content:space-between;gap:8px;min-width:0;padding:7px;border-radius:9px;border:1px solid rgba(255,255,255,.08);background:#0000002e}.zf-holding-main{min-width:0;gap:7px}.zf-holding-amount{flex:none;font-variant-numeric:tabular-nums;font-size:11px;color:#ffffff70}.zf-theme{margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.07)}.zf-theme-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:9px}.zf-theme-val{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-variant-numeric:tabular-nums;color:#ffffff8c}.zf-theme-swatch{width:11px;height:11px;border-radius:9999px;background:var(--zf-accent);box-shadow:0 0 8px hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76% / .9)}.zf-theme-knob-end{display:inline-flex;align-items:center;gap:10px}.zf-theme-reset{background:none;border:none;padding:0;font:inherit;font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#ffffff61;cursor:pointer}.zf-theme-reset:hover{color:var(--zf-accent)}.zf-hue-slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:10px;border-radius:9999px;outline:none;cursor:pointer;border:1px solid rgba(255,255,255,.12);background:linear-gradient(to right,#f98b8b,#f9f98b,#8bf98b,#8bf9f9,#8b8bf9,#f98bf9,#f98b8b)}.zf-hue-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-hue-slider::-moz-range-thumb{width:16px;height:16px;border-radius:9999px;background:var(--zf-accent);border:2px solid #fff;box-shadow:0 1px 4px #00000080;cursor:pointer}.zf-presets{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:10px}.zf-preset{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:#ffffff08;color:#ffffffb3;font:inherit;font-size:11px;font-weight:600;cursor:pointer;text-align:left;transition:border-color .15s var(--zf-ease-out, ease),background .15s var(--zf-ease-out, ease),color .15s var(--zf-ease-out, ease)}.zf-preset:hover{border-color:#ffffff38;color:#ffffffe6}.zf-preset.is-active{border-color:var(--zf-accent);color:#fff;box-shadow:0 0 0 1px var(--zf-accent)}.zf-preset-swatch{width:16px;height:16px;flex:none;border-radius:5px;border:1px solid rgba(255,255,255,.18)}.zf-preset-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zf-seg{display:flex;gap:6px}.zf-seg-btn{flex:1;padding:7px 6px;border-radius:9px;border:1px solid rgba(255,255,255,.1);background:#ffffff08;color:#ffffff9e;font:inherit;font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap;transition:border-color .15s var(--zf-ease-out, ease),background .15s var(--zf-ease-out, ease),color .15s var(--zf-ease-out, ease)}.zf-seg-btn:hover{border-color:#ffffff38;color:#ffffffd9}.zf-seg-btn.is-active{border-color:var(--zf-accent);background:hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 60% / .14);color:#fff}.zf-color{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:22px;height:16px;padding:0;border:1px solid rgba(255,255,255,.18);border-radius:5px;background:none;cursor:pointer;vertical-align:middle}.zf-color::-webkit-color-swatch-wrapper{padding:0}.zf-color::-webkit-color-swatch{border:none;border-radius:4px}.zf-color::-moz-color-swatch{border:none;border-radius:4px}.zf-dialog-backdrop{--zf-accent: hsl(var(--zf-accent-hue, 242) var(--zf-accent-sat, 90%) 76%);--zf-ease-out: cubic-bezier(.23, 1, .32, 1);position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:24px;background:#06070c9e;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:zf-dialog-fade .16s var(--zf-ease-out)}.zf-dialog{width:min(440px,100%);max-height:calc(100vh - 48px);display:flex;flex-direction:column;border-radius:16px;border:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,#141622fa,#0b0c13fc);box-shadow:0 30px 80px -20px #000c,0 0 0 1px #0006;animation:zf-dialog-pop .18s cubic-bezier(.32,.72,0,1)}.zf-dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 16px 12px;border-bottom:1px solid rgba(255,255,255,.07)}.zf-dialog-title{margin:0;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#ffffff9e}.zf-dialog-close{flex:none;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:8px;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;color:#ffffffb3;cursor:pointer;transition:background .15s var(--zf-ease-out),color .15s var(--zf-ease-out),border-color .15s var(--zf-ease-out),transform .15s var(--zf-ease-out)}.zf-dialog-close:hover{background:#ffffff17;border-color:#ffffff2e;color:#fff}.zf-dialog-close:active{transform:scale(.94)}.zf-dialog-close>svg{display:block}.zf-dialog-body{padding:16px;overflow-y:auto;scrollbar-gutter:stable}.zf-dialog-body>:first-child{margin-top:0}.zf-dialog-foot{display:flex;justify-content:flex-end;gap:8px;padding:12px 16px 16px;border-top:1px solid rgba(255,255,255,.07)}@keyframes zf-dialog-fade{0%{opacity:0}to{opacity:1}}@keyframes zf-dialog-pop{0%{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.zf-dialog-backdrop,.zf-dialog{animation:none}}