(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,p=function(e){return"theme"!==e&&"innerRef"!==e},u=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?d:p};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,p=d&&r.__emotion_base||r;"function"!=typeof n&&d&&(n=r.__emotion_forwardProp);var f=n||u(p),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 O=Object(s.e)((function(e,r,t){return Object(i.createElement)(s.b.Consumer,null,(function(o){var s=g&&e.as||p,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 O=g&&void 0===n?u(s):f,S={};for(var w in e)g&&"as"===w||O(w)&&(S[w]=e[w]);return S.className=d,S.ref=t||e.innerRef,Object(i.createElement)(s,S)}))}));return O.displayName=void 0!==o?o:"Styled("+("string"==typeof p?p:p.displayName||p.name||"Component")+")",O.defaultProps=r.defaultProps,O.__emotion_real=O,O.__emotion_base=p,O.__emotion_styles=b,O.__emotion_forwardProp=n,Object.defineProperty(O,"toString",{value:function(){return"."+a}}),O.withComponent=function(r,o){return e(r,void 0!==o?m({},t||{},{},o):t).apply(void 0,b)},O}}.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.0.28"}')},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},p=["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))}),{}),u=function e(r){return function(t){void 0===t&&(t={});var o=Object.assign({},a,t.theme||t),d={},u=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 u){var m=u[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(p,h,n)(y,g,g);if(c[h])for(var O=c[h],S=0;S<O.length;S++)d[O[S]]=v;else d[h]=v}else{var w=e(n(o,g))(o);d=Object.assign({},d,w)}}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[u(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.d.apply(void 0,[e,y(r)].concat(t))},O=m.a.createContext({__EMOTION_VERSION__:b.a,theme:null}),S=function(){return m.a.useContext(O)},w="function"==typeof Symbol&&Symbol.for,k=w?Symbol.for("react.element"):60103,j=w?Symbol.for("react.forward_ref"):60103,x=function(e){return!!e&&"object"==typeof e&&e.$$typeof!==k&&e.$$typeof!==j},R=function(e,r,t){return r},C=function(e,r){return h()(e,r,{isMergeableObject:x,arrayMerge:R})};C.all=function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return h.a.all(e,{isMergeableObject:x,arrayMerge:R})};var P=function(e){var r=e.context,t=e.children;return v(o.b.Provider,{value:r.theme},v(O.Provider,{value:r,children:t}))},T=function(e){var r=e.theme,t=e.children,o=S();var n="function"==typeof r?Object.assign({},o,{theme:r(o.theme)}):C.all({},o,{theme:r});return v(P,{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},_={useCustomProperties:!0,initialColorModeName:!0,initialColorMode:!0},A=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)}},X=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]},D=function(){return v(o.a,{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 u({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])})),u({body:Object.assign({},o,{color:"text",bg:"background"})})(e)}(e)}})},H=function(e){var r=e.children,t=S(),i=X(t.theme),a=i[0],s=i[1],c=function(e,r){if(!r)return e;var t=n(e,"colors.modes",{});return C.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(_[i])n[i]=a;else{var c=A(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.b.Provider,{value:l},v(O.Provider,{value:d},v(D,{key:"color-mode"}),r))},N=t("5D9J");function Y(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function q(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?q(Object(t),!0).forEach((function(r){Y(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):q(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 Z={inlineCode:"code",thematicBreak:"hr",root:"div"},Q=function(e){return function(r){return u(n(r.theme,"styles."+e))(r.theme)}},ee=Object(N.default)("div")(Q("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(N.default)(Z[r=e]||r)(Q(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(N.default)(r[e])(Q(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))}),{}),pe=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),p=oe(o,d,oe(o,l,{})),u=oe(de,l,oe)(p,c,c);if(se[l])for(var f=se[l],m=0;m<f.length;m++)n[f[m]]=u;else n[l]=u}else{var g=e(oe(o,c))(o);n=Object.assign({},n,g)}}return n}},ue=function(){return v(o.a,{styles:function(e){if(!1===e.useBodyStyles||e.styles&&!e.styles.root)return!1;var r=!1===e.useBorderBox?null:"border-box";return pe({"*":{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 S().setColorMode?v(T,{theme:r},v(te,{components:t,children:o})):v(T,{theme:r},v(H,null,v(ue),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 p=d;e.exports=p}}]);
//# sourceMappingURL=7c8c3866edb1f30a175f043f3e876d1d4c1a8347-e293b694b03c83b554f3.js.map