(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{"5D9J":function(e,r,t){"use strict";t.r(r);var o=t("0jh0"),n=t.n(o),i=t("q1tI"),a=t("9uj6"),s=t("qKvR"),c=t("SIPS"),l=t("MiSq"),d=a.a,u=function(e){return"theme"!==e&&"innerRef"!==e},p=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?d:u};function f(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function m(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?f(t,!0).forEach((function(r){n()(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):f(t).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var g=function e(r,t){var o,n,a;void 0!==t&&(o=t.label,a=t.target,n=r.__emotion_forwardProp&&t.shouldForwardProp?function(e){return r.__emotion_forwardProp(e)&&t.shouldForwardProp(e)}:t.shouldForwardProp);var d=r.__emotion_real===r,u=d&&r.__emotion_base||r;"function"!=typeof n&&d&&(n=r.__emotion_forwardProp);var f=n||p(u),g=!f("as");return function(){var h=arguments,b=d&&void 0!==r.__emotion_styles?r.__emotion_styles.slice(0):[];if(void 0!==o&&b.push("label:"+o+";"),null==h[0]||void 0===h[0].raw)b.push.apply(b,h);else{0,b.push(h[0][0]);for(var y=h.length,v=1;v<y;v++)b.push(h[v],h[0][v])}var w=Object(s.withEmotionCache)((function(e,r,t){return Object(i.createElement)(s.ThemeContext.Consumer,null,(function(o){var s=g&&e.as||u,d="",m=[],h=e;if(null==e.theme){for(var y in h={},e)h[y]=e[y];h.theme=o}"string"==typeof e.className?d=Object(c.a)(r.registered,m,e.className):null!=e.className&&(d=e.className+" ");var v=Object(l.a)(b.concat(m),r.registered,h);Object(c.b)(r,v,"string"==typeof s);d+=r.key+"-"+v.name,void 0!==a&&(d+=" "+a);var w=g&&void 0===n?p(s):f,O={};for(var S in e)g&&"as"===S||w(S)&&(O[S]=e[S]);return O.className=d,O.ref=t||e.innerRef,Object(i.createElement)(s,O)}))}));return w.displayName=void 0!==o?o:"Styled("+("string"==typeof u?u:u.displayName||u.name||"Component")+")",w.defaultProps=r.defaultProps,w.__emotion_real=w,w.__emotion_base=u,w.__emotion_styles=b,w.__emotion_forwardProp=n,Object.defineProperty(w,"toString",{value:function(){return"."+a}}),w.withComponent=function(r,o){return e(r,void 0!==o?m({},t||{},{},o):t).apply(void 0,b)},w}}.bind();["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){g[e]=g(e)}));r.default=g},"9uj6":function(e,r,t){"use strict";var o=t("4qRI"),n=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,i=Object(o.a)((function(e){return n.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91}));r.a=i},ITVs:function(e){e.exports=JSON.parse('{"a":"10.1.1"}')},bQgK:function(e,r,t){(function(r){(function(){var t,o,n,i,a,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:null!=r&&r.hrtime?(e.exports=function(){return(t()-a)/1e6},o=r.hrtime,i=(t=function(){var e;return 1e9*(e=o())[0]+e[1]})(),s=1e9*r.uptime(),a=i-s):Date.now?(e.exports=function(){return Date.now()-n},n=Date.now()):(e.exports=function(){return(new Date).getTime()-n},n=(new Date).getTime())}).call(this)}).call(this,t("8oxB"))},dCk4:function(e,r,t){"use strict";t.d(r,"a",(function(){return fe}));var o=t("qKvR"),n=function(e,r,t,o,n){for(r=r&&r.split?r.split("."):[r],o=0;o<r.length;o++)e=e?e[r[o]]:n;return e===n?t:e},i=[40,52,64].map((function(e){return e+"em"})),a={space:[0,4,8,16,32,64,128,256,512],fontSizes:[12,14,16,20,24,32,48,64,72]},s={bg:"backgroundColor",m:"margin",mt:"marginTop",mr:"marginRight",mb:"marginBottom",ml:"marginLeft",mx:"marginX",my:"marginY",p:"padding",pt:"paddingTop",pr:"paddingRight",pb:"paddingBottom",pl:"paddingLeft",px:"paddingX",py:"paddingY"},c={marginX:["marginLeft","marginRight"],marginY:["marginTop","marginBottom"],paddingX:["paddingLeft","paddingRight"],paddingY:["paddingTop","paddingBottom"],size:["width","height"]},l={color:"colors",backgroundColor:"colors",borderColor:"colors",margin:"space",marginTop:"space",marginRight:"space",marginBottom:"space",marginLeft:"space",marginX:"space",marginY:"space",padding:"space",paddingTop:"space",paddingRight:"space",paddingBottom:"space",paddingLeft:"space",paddingX:"space",paddingY:"space",top:"space",right:"space",bottom:"space",left:"space",gridGap:"space",gridColumnGap:"space",gridRowGap:"space",gap:"space",columnGap:"space",rowGap:"space",fontFamily:"fonts",fontSize:"fontSizes",fontWeight:"fontWeights",lineHeight:"lineHeights",letterSpacing:"letterSpacings",border:"borders",borderTop:"borders",borderRight:"borders",borderBottom:"borders",borderLeft:"borders",borderWidth:"borderWidths",borderStyle:"borderStyles",borderRadius:"radii",borderTopRightRadius:"radii",borderTopLeftRadius:"radii",borderBottomRightRadius:"radii",borderBottomLeftRadius:"radii",borderTopWidth:"borderWidths",borderTopColor:"colors",borderTopStyle:"borderStyles",borderBottomWidth:"borderWidths",borderBottomColor:"colors",borderBottomStyle:"borderStyles",borderLeftWidth:"borderWidths",borderLeftColor:"colors",borderLeftStyle:"borderStyles",borderRightWidth:"borderWidths",borderRightColor:"colors",borderRightStyle:"borderStyles",outlineColor:"colors",boxShadow:"shadows",textShadow:"shadows",zIndex:"zIndices",width:"sizes",minWidth:"sizes",maxWidth:"sizes",height:"sizes",minHeight:"sizes",maxHeight:"sizes",flexBasis:"sizes",size:"sizes",fill:"colors",stroke:"colors"},d=function(e,r){if("number"!=typeof r||r>=0)return n(e,r,r);var t=Math.abs(r),o=n(e,t,t);return"string"==typeof o?"-"+o:-1*o},u=["margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","top","bottom","left","right"].reduce((function(e,r){var t;return Object.assign({},e,((t={})[r]=d,t))}),{}),p=function e(r){return function(t){void 0===t&&(t={});var o=Object.assign({},a,t.theme||t),d={},p=function(e){return function(r){var t={},o=n(r,"breakpoints",i),a=[null].concat(o.map((function(e){return"@media screen and (min-width: "+e+")"})));for(var s in e){var c="function"==typeof e[s]?e[s](r):e[s];if(null!=c)if(Array.isArray(c))for(var l=0;l<c.slice(0,a.length).length;l++){var d=a[l];d?(t[d]=t[d]||{},null!=c[l]&&(t[d][s]=c[l])):t[s]=c[l]}else t[s]=c}return t}}("function"==typeof r?r(o):r)(o);for(var f in p){var m=p[f],g="function"==typeof m?m(o):m;if("variant"!==f)if(g&&"object"==typeof g)d[f]=e(g)(o);else{var h=n(s,f,f),b=n(l,h),y=n(o,b,n(o,h,{})),v=n(u,h,n)(y,g,g);if(c[h])for(var w=c[h],O=0;O<w.length;O++)d[w[O]]=v;else d[h]=v}else{var S=e(n(o,g))(o);d=Object.assign({},d,S)}}return d}},f=t("q1tI"),m=t.n(f),g=t("tZ2j"),h=t.n(g),b=t("ITVs"),y=function(e){if(!e)return null;var r={};for(var t in e)"sx"!==t&&(r[t]=e[t]);var o=function(e){if(e.sx||e.css)return function(r){return[p(e.sx)(r),"function"==typeof e.css?e.css(r):e.css]}}(e);return o&&(r.css=o),r},v=function(e,r){for(var t=[],n=arguments.length-2;n-- >0;)t[n]=arguments[n+2];return o.jsx.apply(void 0,[e,y(r)].concat(t))},w=m.a.createContext({__EMOTION_VERSION__:b.a,theme:null}),O=function(){return m.a.useContext(w)},S="function"==typeof Symbol&&Symbol.for,x=S?Symbol.for("react.element"):60103,k=S?Symbol.for("react.forward_ref"):60103,j=function(e){return!!e&&"object"==typeof e&&e.$$typeof!==x&&e.$$typeof!==k},C=function(e,r,t){return r},R=function(e,r){return h()(e,r,{isMergeableObject:j,arrayMerge:C})};R.all=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return h.a.all(e,{isMergeableObject:j,arrayMerge:C})};var T=function(e){var r=e.context,t=e.children;return v(o.ThemeContext.Provider,{value:r.theme},v(w.Provider,{value:r,children:t}))},P=function(e){var r=e.theme,t=e.children,o=O();var n="function"==typeof r?Object.assign({},o,{theme:r(o.theme)}):R.all({},o,{theme:r});return v(T,{context:n,children:t})},M=function(e){return"--theme-ui-"+e},z=function(e,r){return"var("+M(e)+", "+r+")"},B=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return e.filter(Boolean).join("-")},L={fontWeights:!0,lineHeights:!0},A={useCustomProperties:!0,initialColorModeName:!0,initialColorMode:!0},_=function(e,r){return"number"!=typeof r||L[e]?r:r+"px"},E=function e(r,t){var o={};for(var n in t)if("modes"!==n){var i=B(r,n),a=t[n];a&&"object"==typeof a?o=Object.assign({},o,e(i,a)):o[M(i)]=a}return o},W=function(e){try{return window.localStorage.getItem("theme-ui-color-mode")||e}catch(r){console.warn("localStorage is disabled and color mode might not work as expected.","Please check your Site Settings.",r)}},I=function(e){try{window.localStorage.setItem("theme-ui-color-mode",e)}catch(r){console.warn("localStorage is disabled and color mode might not work as expected.","Please check your Site Settings.",r)}},D=function(e){void 0===e&&(e={});var r=m.a.useState(e.initialColorModeName||"default"),t=r[0],o=r[1];return m.a.useEffect((function(){var r=W();if(document.body.classList.remove("theme-ui-"+r),r||!e.useColorSchemeMediaQuery){var n,i,a;r&&r!==t&&o(r)}else{var s=(n="(prefers-color-scheme: dark)",i=window.matchMedia?window.matchMedia(n):{},a=window.matchMedia?window.matchMedia("(prefers-color-scheme: light)"):{},i.media===n&&i.matches?"dark":"(prefers-color-scheme: light)"===a.media&&a.matches?"light":"default");o(s)}}),[]),m.a.useEffect((function(){t&&I(t)}),[t]),[t,o]},q=function(){return v(o.Global,{styles:function(e){return function(e){if(void 0===e&&(e={}),!e.colors||!1===e.useBodyStyles)return{};if(!1===e.useCustomProperties||!e.colors.modes)return p({body:{color:"text",bg:"background"}})(e);var r=e.rawColors||e.colors,t=r.modes,o=E("colors",r);return Object.keys(t).forEach((function(e){o["&.theme-ui-"+e]=E("colors",t[e])})),p({body:Object.assign({},o,{color:"text",bg:"background"})})(e)}(e)}})},X=function(e){var r=e.children,t=O(),i=D(t.theme),a=i[0],s=i[1],c=function(e,r){if(!r)return e;var t=n(e,"colors.modes",{});return R.all({},e,{colors:n(t,r,{})})}(t.theme||{},a),l=Object.assign({},c);!1!==c.useCustomProperties&&(l.colors=function e(r,t,o){var n=Array.isArray(r)?[]:{};for(var i in r){var a=r[i],s=B(t,i);if(a&&"object"==typeof a)n[i]=e(a,s,i);else if(A[i])n[i]=a;else{var c=_(o||i,a);n[i]=z(s,c)}}return n}(l.colors,"colors"));var d=Object.assign({},t,{theme:c,colorMode:a,setColorMode:s});return v(o.ThemeContext.Provider,{value:l},v(w.Provider,{value:d},v(q,{key:"color-mode"}),r))},H=t("5D9J");function N(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Y(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function F(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?Y(Object(t),!0).forEach((function(r){N(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):Y(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function G(e,r){if(null==e)return{};var t,o,n=function(e,r){if(null==e)return{};var t,o,n={},i=Object.keys(e);for(o=0;o<i.length;o++)t=i[o],r.indexOf(t)>=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)t=i[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var U=m.a.createContext({}),V=function(e){var r=m.a.useContext(U),t=r;return e&&(t="function"==typeof e?e(r):F(F({},r),e)),t},$=function(e){var r=V(e.components);return m.a.createElement(U.Provider,{value:r},e.children)},J={inlineCode:"code",wrapper:function(e){var r=e.children;return m.a.createElement(m.a.Fragment,{},r)}},K=m.a.forwardRef((function(e,r){var t=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,a=G(e,["components","mdxType","originalType","parentName"]),s=V(t),c=o,l=s["".concat(i,".").concat(c)]||s[c]||J[c]||n;return t?m.a.createElement(l,F(F({ref:r},a),{},{components:t})):m.a.createElement(l,F({ref:r},a))}));K.displayName="MDXCreateElement";var Q={inlineCode:"code",thematicBreak:"hr",root:"div"},Z=function(e){return function(r){return p(n(r.theme,"styles."+e))(r.theme)}},ee=Object(H.default)("div")(Z("div")),re={};["p","b","i","a","h1","h2","h3","h4","h5","h6","img","pre","code","ol","ul","li","blockquote","hr","em","table","tr","th","td","em","strong","del","inlineCode","thematicBreak","div","root"].forEach((function(e){var r;re[e]=Object(H.default)(Q[r=e]||r)(Z(e)),ee[e]=re[e]}));var te=function(e){var r,t,o=e.components,n=e.children,i=V();return v($,{components:(r=Object.assign({},i,o),t=Object.assign({},re),Object.keys(r).forEach((function(e){t[e]=Object(H.default)(r[e])(Z(e))})),t),children:n})},oe=function(e,r,t,o,n){for(r=r&&r.split?r.split("."):[r],o=0;o<r.length;o++)e=e?e[r[o]]:n;return e===n?t:e},ne=[40,52,64].map((function(e){return e+"em"})),ie={space:[0,4,8,16,32,64,128,256,512],fontSizes:[12,14,16,20,24,32,48,64,72]},ae={bg:"backgroundColor",m:"margin",mt:"marginTop",mr:"marginRight",mb:"marginBottom",ml:"marginLeft",mx:"marginX",my:"marginY",p:"padding",pt:"paddingTop",pr:"paddingRight",pb:"paddingBottom",pl:"paddingLeft",px:"paddingX",py:"paddingY"},se={marginX:["marginLeft","marginRight"],marginY:["marginTop","marginBottom"],paddingX:["paddingLeft","paddingRight"],paddingY:["paddingTop","paddingBottom"],size:["width","height"]},ce={color:"colors",backgroundColor:"colors",borderColor:"colors",margin:"space",marginTop:"space",marginRight:"space",marginBottom:"space",marginLeft:"space",marginX:"space",marginY:"space",padding:"space",paddingTop:"space",paddingRight:"space",paddingBottom:"space",paddingLeft:"space",paddingX:"space",paddingY:"space",top:"space",right:"space",bottom:"space",left:"space",gridGap:"space",gridColumnGap:"space",gridRowGap:"space",gap:"space",columnGap:"space",rowGap:"space",fontFamily:"fonts",fontSize:"fontSizes",fontWeight:"fontWeights",lineHeight:"lineHeights",letterSpacing:"letterSpacings",border:"borders",borderTop:"borders",borderRight:"borders",borderBottom:"borders",borderLeft:"borders",borderWidth:"borderWidths",borderStyle:"borderStyles",borderRadius:"radii",borderTopRightRadius:"radii",borderTopLeftRadius:"radii",borderBottomRightRadius:"radii",borderBottomLeftRadius:"radii",borderTopWidth:"borderWidths",borderTopColor:"colors",borderTopStyle:"borderStyles",borderBottomWidth:"borderWidths",borderBottomColor:"colors",borderBottomStyle:"borderStyles",borderLeftWidth:"borderWidths",borderLeftColor:"colors",borderLeftStyle:"borderStyles",borderRightWidth:"borderWidths",borderRightColor:"colors",borderRightStyle:"borderStyles",outlineColor:"colors",boxShadow:"shadows",textShadow:"shadows",zIndex:"zIndices",width:"sizes",minWidth:"sizes",maxWidth:"sizes",height:"sizes",minHeight:"sizes",maxHeight:"sizes",flexBasis:"sizes",size:"sizes",fill:"colors",stroke:"colors"},le=function(e,r){if("number"!=typeof r||r>=0)return oe(e,r,r);var t=Math.abs(r),o=oe(e,t,t);return"string"==typeof o?"-"+o:-1*o},de=["margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","top","bottom","left","right"].reduce((function(e,r){var t;return Object.assign({},e,((t={})[r]=le,t))}),{}),ue=function e(r){return function(t){void 0===t&&(t={});var o=Object.assign({},ie,t.theme||t),n={},i=function(e){return function(r){var t={},o=oe(r,"breakpoints",ne),n=[null].concat(o.map((function(e){return"@media screen and (min-width: "+e+")"})));for(var i in e){var a="function"==typeof e[i]?e[i](r):e[i];if(null!=a)if(Array.isArray(a))for(var s=0;s<a.slice(0,n.length).length;s++){var c=n[s];c?(t[c]=t[c]||{},null!=a[s]&&(t[c][i]=a[s])):t[i]=a[s]}else t[i]=a}return t}}("function"==typeof r?r(o):r)(o);for(var a in i){var s=i[a],c="function"==typeof s?s(o):s;if("variant"!==a)if(c&&"object"==typeof c)n[a]=e(c)(o);else{var l=oe(ae,a,a),d=oe(ce,l),u=oe(o,d,oe(o,l,{})),p=oe(de,l,oe)(u,c,c);if(se[l])for(var f=se[l],m=0;m<f.length;m++)n[f[m]]=p;else n[l]=p}else{var g=e(oe(o,c))(o);n=Object.assign({},n,g)}}return n}},pe=function(){return v(o.Global,{styles:function(e){if(!1===e.useBodyStyles||e.styles&&!e.styles.root)return!1;var r=!1===e.useBorderBox?null:"border-box";return ue({"*":{boxSizing:r},body:{margin:0,variant:"styles.root"}})(e)}})},fe=function(e){var r=e.theme,t=e.components,o=e.children;return"function"==typeof O().setColorMode?v(P,{theme:r},v(te,{components:t,children:o})):v(P,{theme:r},v(X,null,v(pe),v(te,{components:t,children:o})))}},tZ2j:function(e,r,t){"use strict";var o=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var r=Object.prototype.toString.call(e);return"[object RegExp]"===r||"[object Date]"===r||function(e){return e.$$typeof===n}(e)}(e)};var n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(e,r){return!1!==r.clone&&r.isMergeableObject(e)?d((t=e,Array.isArray(t)?[]:{}),e,r):e;var t}function a(e,r,t){return e.concat(r).map((function(e){return i(e,t)}))}function s(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(r){return e.propertyIsEnumerable(r)})):[]}(e))}function c(e,r){try{return r in e}catch(t){return!1}}function l(e,r,t){var o={};return t.isMergeableObject(e)&&s(e).forEach((function(r){o[r]=i(e[r],t)})),s(r).forEach((function(n){(function(e,r){return c(e,r)&&!(Object.hasOwnProperty.call(e,r)&&Object.propertyIsEnumerable.call(e,r))})(e,n)||(c(e,n)&&t.isMergeableObject(r[n])?o[n]=function(e,r){if(!r.customMerge)return d;var t=r.customMerge(e);return"function"==typeof t?t:d}(n,t)(e[n],r[n],t):o[n]=i(r[n],t))})),o}function d(e,r,t){(t=t||{}).arrayMerge=t.arrayMerge||a,t.isMergeableObject=t.isMergeableObject||o,t.cloneUnlessOtherwiseSpecified=i;var n=Array.isArray(r);return n===Array.isArray(e)?n?t.arrayMerge(e,r,t):l(e,r,t):i(r,t)}d.all=function(e,r){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,t){return d(e,t,r)}),{})};var u=d;e.exports=u},xEkU:function(e,r,t){(function(r){for(var o=t("bQgK"),n="undefined"==typeof window?r:window,i=["moz","webkit"],a="AnimationFrame",s=n["request"+a],c=n["cancel"+a]||n["cancelRequest"+a],l=0;!s&&l<i.length;l++)s=n[i[l]+"Request"+a],c=n[i[l]+"Cancel"+a]||n[i[l]+"CancelRequest"+a];if(!s||!c){var d=0,u=0,p=[];s=function(e){if(0===p.length){var r=o(),t=Math.max(0,1e3/60-(r-d));d=t+r,setTimeout((function(){var e=p.slice(0);p.length=0;for(var r=0;r<e.length;r++)if(!e[r].cancelled)try{e[r].callback(d)}catch(t){setTimeout((function(){throw t}),0)}}),Math.round(t))}return p.push({handle:++u,callback:e,cancelled:!1}),u},c=function(e){for(var r=0;r<p.length;r++)p[r].handle===e&&(p[r].cancelled=!0)}}e.exports=function(e){return s.call(n,e)},e.exports.cancel=function(){c.apply(n,arguments)},e.exports.polyfill=function(e){e||(e=n),e.requestAnimationFrame=s,e.cancelAnimationFrame=c}}).call(this,t("yLpj"))}}]);
//# sourceMappingURL=123db1a06e43f5346479d5c4aa867f08efe1b682-5cb52ba4eabd9dfdf443.js.map