diff --git a/dist/assets/index.css b/dist/assets/index.css new file mode 100644 index 0000000..e34e68f --- /dev/null +++ b/dist/assets/index.css @@ -0,0 +1 @@ +*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter var,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0px;right:0px;bottom:0px;left:0px}.inset-x-0{left:0px;right:0px}.top-0{top:0px}.mx-auto{margin-left:auto;margin-right:auto}.-mr-2{margin-right:-.5rem}.mt-6{margin-top:1.5rem}.ml-4{margin-left:1rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.mt-10{margin-top:2.5rem}.mt-3{margin-top:.75rem}.mt-12{margin-top:3rem}.-mb-16{margin-bottom:-4rem}.mt-2{margin-top:.5rem}.mt-5{margin-top:1.25rem}.-mb-10{margin-bottom:-2.5rem}.-mt-6{margin-top:-1.5rem}.mt-8{margin-top:2rem}.ml-3{margin-left:.75rem}.-mr-1{margin-right:-.25rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.h-8{height:2rem}.h-6{height:1.5rem}.h-5{height:1.25rem}.h-1\/2{height:50%}.h-12{height:3rem}.h-48{height:12rem}.h-10{height:2.5rem}.h-56{height:14rem}.h-full{height:100%}.w-full{width:100%}.w-auto{width:auto}.w-6{width:1.5rem}.w-5{width:1.25rem}.w-12{width:3rem}.w-10{width:2.5rem}.min-w-0{min-width:0px}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-prose{max-width:65ch}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.origin-top{transform-origin:top}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-8{gap:2rem}.space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2rem * var(--tw-space-x-reverse));margin-left:calc(2rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.25rem * var(--tw-space-x-reverse));margin-left:calc(.25rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-t{border-top-width:1px}.border-transparent{border-color:transparent}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity: 1;background-color:rgb(79 70 229 / var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-teal-500{--tw-gradient-from: #14b8a6;--tw-gradient-to: rgb(20 184 166 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-teal-200{--tw-gradient-from: #99f6e4;--tw-gradient-to: rgb(153 246 228 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-cyan-600{--tw-gradient-to: #0891b2}.to-cyan-400{--tw-gradient-to: #22d3ee}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.object-cover{-o-object-fit:cover;object-fit:cover}.p-2{padding:.5rem}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-0{padding-top:0;padding-bottom:0}.py-16{padding-top:4rem;padding-bottom:4rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pt-6{padding-top:1.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pb-6{padding-bottom:1.5rem}.pt-10{padding-top:2.5rem}.pr-2{padding-right:.5rem}.pb-3{padding-bottom:.75rem}.pt-16{padding-top:4rem}.pb-8{padding-bottom:2rem}.pb-16{padding-bottom:4rem}.pt-12{padding-top:3rem}.text-center{text-align:center}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-extrabold{font-weight:800}.uppercase{text-transform:uppercase}.leading-5{line-height:1.25rem}.tracking-wide{letter-spacing:.025em}.tracking-tight{letter-spacing:-.025em}.tracking-wider{letter-spacing:.05em}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-transparent{color:transparent}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity))}.placeholder-gray-500::placeholder{--tw-placeholder-opacity: 1;color:rgb(107 114 128 / var(--tw-placeholder-opacity))}.opacity-25{opacity:.25}.mix-blend-multiply{mix-blend-mode:multiply}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-black{--tw-ring-opacity: 1;--tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity: .05}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\:bg-gray-800:hover{--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.hover\:from-teal-600:hover{--tw-gradient-from: #0d9488;--tw-gradient-to: rgb(13 148 136 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:to-cyan-700:hover{--tw-gradient-to: #0e7490}.hover\:text-gray-300:hover{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-inset:focus{--tw-ring-inset: inset}.focus\:ring-white:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(255 255 255 / var(--tw-ring-opacity))}.focus\:ring-cyan-600:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(8 145 178 / var(--tw-ring-opacity))}.focus\:ring-cyan-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(34 211 238 / var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus\:ring-offset-gray-900:focus{--tw-ring-offset-color: #111827}@media (min-width: 640px){.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:mt-5{margin-top:1.25rem}.sm\:mt-12{margin-top:3rem}.sm\:mt-0{margin-top:0}.sm\:ml-3{margin-left:.75rem}.sm\:mt-4{margin-top:1rem}.sm\:-mb-48{margin-bottom:-12rem}.sm\:-mb-24{margin-bottom:-6rem}.sm\:flex{display:flex}.sm\:h-10{height:2.5rem}.sm\:h-72{height:18rem}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-xl{max-width:36rem}.sm\:max-w-3xl{max-width:48rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-7xl{max-width:80rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-24{padding-top:6rem;padding-bottom:6rem}.sm\:py-20{padding-top:5rem;padding-bottom:5rem}.sm\:pt-16{padding-top:4rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:pt-24{padding-top:6rem}.sm\:text-center{text-align:center}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-6xl{font-size:3.75rem;line-height:1}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 768px){.md\:absolute{position:absolute}.md\:left-0{left:0px}.md\:ml-10{margin-left:2.5rem}.md\:ml-auto{margin-left:auto}.md\:mt-0{margin-top:0}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:h-full{height:100%}.md\:w-auto{width:auto}.md\:w-1\/2{width:50%}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:items-center{align-items:center}.md\:gap-8{gap:2rem}.md\:space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.md\:py-28{padding-top:7rem;padding-bottom:7rem}.md\:pl-10{padding-left:2.5rem}}@media (min-width: 1024px){.lg\:absolute{position:absolute}.lg\:relative{position:relative}.lg\:inset-y-0{top:0px;bottom:0px}.lg\:left-0{left:0px}.lg\:z-10{z-index:10}.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:m-0{margin:0}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-auto{margin-left:auto;margin-right:auto}.lg\:-my-8{margin-top:-2rem;margin-bottom:-2rem}.lg\:mt-6{margin-top:1.5rem}.lg\:-mb-80{margin-bottom:-20rem}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:hidden{display:none}.lg\:h-full{height:100%}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:max-w-none{max-width:none}.lg\:max-w-7xl{max-width:80rem}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-8{gap:2rem}.lg\:overflow-hidden{overflow:hidden}.lg\:p-0{padding:0}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:px-0{padding-left:0;padding-right:0}.lg\:py-24{padding-top:6rem;padding-bottom:6rem}.lg\:py-32{padding-top:8rem;padding-bottom:8rem}.lg\:py-20{padding-top:5rem;padding-bottom:5rem}.lg\:pt-8{padding-top:2rem}.lg\:pb-14{padding-bottom:3.5rem}.lg\:pt-32{padding-top:8rem}.lg\:pb-0{padding-bottom:0}.lg\:pl-8{padding-left:2rem}.lg\:pt-16{padding-top:4rem}.lg\:text-left{text-align:left}.lg\:text-sm{font-size:.875rem;line-height:1.25rem}.lg\:text-lg{font-size:1.125rem;line-height:1.75rem}}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-2{grid-column:span 2 / span 2}.xl\:mt-0{margin-top:0}.xl\:grid{display:grid}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:gap-8{gap:2rem}.xl\:text-center{text-align:center}.xl\:text-base{font-size:1rem;line-height:1.5rem}.xl\:text-6xl{font-size:3.75rem;line-height:1}.xl\:text-xl{font-size:1.25rem;line-height:1.75rem}} diff --git a/dist/assets/polyfills-legacy.53eda98a.js b/dist/assets/polyfills-legacy.53eda98a.js deleted file mode 100644 index 271df7f..0000000 --- a/dist/assets/polyfills-legacy.53eda98a.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=function(t){return t&&t.Math==Math&&t},n=e("object"==typeof globalThis&&globalThis)||e("object"==typeof window&&window)||e("object"==typeof self&&self)||e("object"==typeof t&&t)||function(){return this}()||Function("return this")(),r={},o=function(t){try{return!!t()}catch(e){return!0}},i=!o((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),c={},u={}.propertyIsEnumerable,a=Object.getOwnPropertyDescriptor,f=a&&!u.call({1:2},1);c.f=f?function(t){var e=a(this,t);return!!e&&e.enumerable}:u;var s,l,p=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},v={}.toString,h=function(t){return v.call(t).slice(8,-1)},d=h,y="".split,g=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},m=o((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==d(t)?y.call(t,""):Object(t)}:Object,b=g,w=function(t){return m(b(t))},O=function(t){return"object"==typeof t?null!==t:"function"==typeof t},j=n,E=function(t){return"function"==typeof t?t:void 0},S=function(t,e){return arguments.length<2?E(j[t]):j[t]&&j[t][e]},x=S("navigator","userAgent")||"",P=n,T=x,I=P.process,_=P.Deno,A=I&&I.versions||_&&_.version,k=A&&A.v8;k?l=(s=k.split("."))[0]<4?1:s[0]+s[1]:T&&(!(s=T.match(/Edge\/(\d+)/))||s[1]>=74)&&(s=T.match(/Chrome\/(\d+)/))&&(l=s[1]);var M=l&&+l,R=M,C=o,L=!!Object.getOwnPropertySymbols&&!C((function(){var t=Symbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&R&&R<41})),F=L&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,N=S,D=F?function(t){return"symbol"==typeof t}:function(t){var e=N("Symbol");return"function"==typeof e&&Object(t)instanceof e},W=O,z={exports:{}},U=n,G=function(t,e){try{Object.defineProperty(U,t,{value:e,configurable:!0,writable:!0})}catch(n){U[t]=e}return e},q=G,J="__core-js_shared__",B=n[J]||q(J,{}),Y=B;(z.exports=function(t,e){return Y[t]||(Y[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.17.3",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"});var H=g,K=function(t){return Object(H(t))},V=K,X={}.hasOwnProperty,$=Object.hasOwn||function(t,e){return X.call(V(t),e)},Q=0,Z=Math.random(),tt=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++Q+Z).toString(36)},et=n,nt=z.exports,rt=$,ot=tt,it=L,ct=F,ut=nt("wks"),at=et.Symbol,ft=ct?at:at&&at.withoutSetter||ot,st=function(t){return rt(ut,t)&&(it||"string"==typeof ut[t])||(it&&rt(at,t)?ut[t]=at[t]:ut[t]=ft("Symbol."+t)),ut[t]},lt=O,pt=D,vt=function(t,e){var n,r;if("string"===e&&"function"==typeof(n=t.toString)&&!W(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!W(r=n.call(t)))return r;if("string"!==e&&"function"==typeof(n=t.toString)&&!W(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")},ht=st("toPrimitive"),dt=function(t,e){if(!lt(t)||pt(t))return t;var n,r=t[ht];if(void 0!==r){if(void 0===e&&(e="default"),n=r.call(t,e),!lt(n)||pt(n))return n;throw TypeError("Can't convert object to primitive value")}return void 0===e&&(e="number"),vt(t,e)},yt=D,gt=function(t){var e=dt(t,"string");return yt(e)?e:String(e)},mt=O,bt=n.document,wt=mt(bt)&&mt(bt.createElement),Ot=function(t){return wt?bt.createElement(t):{}},jt=Ot,Et=!i&&!o((function(){return 7!=Object.defineProperty(jt("div"),"a",{get:function(){return 7}}).a})),St=i,xt=c,Pt=p,Tt=w,It=gt,_t=$,At=Et,kt=Object.getOwnPropertyDescriptor;r.f=St?kt:function(t,e){if(t=Tt(t),e=It(e),At)try{return kt(t,e)}catch(n){}if(_t(t,e))return Pt(!xt.f.call(t,e),t[e])};var Mt={},Rt=O,Ct=function(t){if(!Rt(t))throw TypeError(String(t)+" is not an object");return t},Lt=i,Ft=Et,Nt=Ct,Dt=gt,Wt=Object.defineProperty;Mt.f=Lt?Wt:function(t,e,n){if(Nt(t),e=Dt(e),Nt(n),Ft)try{return Wt(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t};var zt=Mt,Ut=p,Gt=i?function(t,e,n){return zt.f(t,e,Ut(1,n))}:function(t,e,n){return t[e]=n,t},qt={exports:{}},Jt=B,Bt=Function.toString;"function"!=typeof Jt.inspectSource&&(Jt.inspectSource=function(t){return Bt.call(t)});var Yt,Ht,Kt,Vt=Jt.inspectSource,Xt=Vt,$t=n.WeakMap,Qt="function"==typeof $t&&/native code/.test(Xt($t)),Zt=z.exports,te=tt,ee=Zt("keys"),ne=function(t){return ee[t]||(ee[t]=te(t))},re={},oe=Qt,ie=O,ce=Gt,ue=$,ae=B,fe=ne,se=re,le="Object already initialized",pe=n.WeakMap;if(oe||ae.state){var ve=ae.state||(ae.state=new pe),he=ve.get,de=ve.has,ye=ve.set;Yt=function(t,e){if(de.call(ve,t))throw new TypeError(le);return e.facade=t,ye.call(ve,t,e),e},Ht=function(t){return he.call(ve,t)||{}},Kt=function(t){return de.call(ve,t)}}else{var ge=fe("state");se[ge]=!0,Yt=function(t,e){if(ue(t,ge))throw new TypeError(le);return e.facade=t,ce(t,ge,e),e},Ht=function(t){return ue(t,ge)?t[ge]:{}},Kt=function(t){return ue(t,ge)}}var me={set:Yt,get:Ht,has:Kt,enforce:function(t){return Kt(t)?Ht(t):Yt(t,{})},getterFor:function(t){return function(e){var n;if(!ie(e)||(n=Ht(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}}},be=n,we=Gt,Oe=$,je=G,Ee=Vt,Se=me.get,xe=me.enforce,Pe=String(String).split("String");(qt.exports=function(t,e,n,r){var o,i=!!r&&!!r.unsafe,c=!!r&&!!r.enumerable,u=!!r&&!!r.noTargetGet;"function"==typeof n&&("string"!=typeof e||Oe(n,"name")||we(n,"name",e),(o=xe(n)).source||(o.source=Pe.join("string"==typeof e?e:""))),t!==be?(i?!u&&t[e]&&(c=!0):delete t[e],c?t[e]=n:we(t,e,n)):c?t[e]=n:je(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&Se(this).source||Ee(this)}));var Te={},Ie=Math.ceil,_e=Math.floor,Ae=function(t){return isNaN(t=+t)?0:(t>0?_e:Ie)(t)},ke=Ae,Me=Math.min,Re=function(t){return t>0?Me(ke(t),9007199254740991):0},Ce=Ae,Le=Math.max,Fe=Math.min,Ne=w,De=Re,We=function(t,e){var n=Ce(t);return n<0?Le(n+e,0):Fe(n,e)},ze=function(t){return function(e,n,r){var o,i=Ne(e),c=De(i.length),u=We(r,c);if(t&&n!=n){for(;c>u;)if((o=i[u++])!=o)return!0}else for(;c>u;u++)if((t||u in i)&&i[u]===n)return t||u||0;return!t&&-1}},Ue={includes:ze(!0),indexOf:ze(!1)},Ge=$,qe=w,Je=Ue.indexOf,Be=re,Ye=function(t,e){var n,r=qe(t),o=0,i=[];for(n in r)!Ge(Be,n)&&Ge(r,n)&&i.push(n);for(;e.length>o;)Ge(r,n=e[o++])&&(~Je(i,n)||i.push(n));return i},He=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ke=Ye,Ve=He.concat("length","prototype");Te.f=Object.getOwnPropertyNames||function(t){return Ke(t,Ve)};var Xe={};Xe.f=Object.getOwnPropertySymbols;var $e=Te,Qe=Xe,Ze=Ct,tn=S("Reflect","ownKeys")||function(t){var e=$e.f(Ze(t)),n=Qe.f;return n?e.concat(n(t)):e},en=$,nn=tn,rn=r,on=Mt,cn=o,un=/#|\.prototype\./,an=function(t,e){var n=sn[fn(t)];return n==pn||n!=ln&&("function"==typeof e?cn(e):!!e)},fn=an.normalize=function(t){return String(t).replace(un,".").toLowerCase()},sn=an.data={},ln=an.NATIVE="N",pn=an.POLYFILL="P",vn=an,hn=n,dn=r.f,yn=Gt,gn=qt.exports,mn=G,bn=function(t,e){for(var n=nn(e),r=on.f,o=rn.f,i=0;ir;)e.push(arguments[r++]);return Fr[++Lr]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},hr(Lr),Lr},kr=function(t){delete Fr[t]},_r?hr=function(t){Mr.nextTick(Wr(t))}:Cr&&Cr.now?hr=function(t){Cr.now(Wr(t))}:Rr&&!Ir?(yr=(dr=new Rr).port2,dr.port1.onmessage=zr,hr=xr(yr.postMessage,yr,1)):Er.addEventListener&&"function"==typeof postMessage&&!Er.importScripts&&vr&&"file:"!==vr.protocol&&!Sr(Ur)?(hr=Ur,Er.addEventListener("message",zr,!1)):hr=Nr in Tr("script")?function(t){Pr.appendChild(Tr("script")).onreadystatechange=function(){Pr.removeChild(this),Dr(t)}}:function(t){setTimeout(Wr(t),0)});var Gr,qr,Jr,Br,Yr,Hr,Kr,Vr,Xr={set:Ar,clear:kr},$r=n,Qr=/ipad|iphone|ipod/i.test(x)&&void 0!==$r.Pebble,Zr=/web0s(?!.*chrome)/i.test(x),to=n,eo=r.f,no=Xr.set,ro=Or,oo=Qr,io=Zr,co=jr,uo=to.MutationObserver||to.WebKitMutationObserver,ao=to.document,fo=to.process,so=to.Promise,lo=eo(to,"queueMicrotask"),po=lo&&lo.value;po||(Gr=function(){var t,e;for(co&&(t=fo.domain)&&t.exit();qr;){e=qr.fn,qr=qr.next;try{e()}catch(qc){throw qr?Br():Jr=void 0,qc}}Jr=void 0,t&&t.enter()},ro||co||io||!uo||!ao?!oo&&so&&so.resolve?((Kr=so.resolve(void 0)).constructor=so,Vr=Kr.then,Br=function(){Vr.call(Kr,Gr)}):Br=co?function(){fo.nextTick(Gr)}:function(){no.call(to,Gr)}:(Yr=!0,Hr=ao.createTextNode(""),new uo(Gr).observe(Hr,{characterData:!0}),Br=function(){Hr.data=Yr=!Yr}));var vo=po||function(t){var e={fn:t,next:void 0};Jr&&(Jr.next=e),qr||(qr=e,Br()),Jr=e},ho={},yo=Fn,go=function(t){var e,n;this.promise=new t((function(t,r){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=r})),this.resolve=yo(e),this.reject=yo(n)};ho.f=function(t){return new go(t)};var mo,bo,wo,Oo,jo=Ct,Eo=O,So=ho,xo=n,Po="object"==typeof window,To=On,Io=n,_o=S,Ao=jn,ko=qt.exports,Mo=function(t,e,n){for(var r in e)En(t,r,e[r],n);return t},Ro=Tn,Co=kn,Lo=function(t){var e=Mn(t),n=Rn.f;Cn&&e&&!e[Ln]&&n(e,Ln,{configurable:!0,get:function(){return this}})},Fo=O,No=Fn,Do=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t},Wo=Vt,zo=function(t,e,n){var r,o,i,c,u,a,f,s=n&&n.that,l=!(!n||!n.AS_ENTRIES),p=!(!n||!n.IS_ITERATOR),v=!(!n||!n.INTERRUPTED),h=or(e,s,1+l+v),d=function(t){return r&&ur(r,"normal",t),new ar(!0,t)},y=function(t){return l?(er(t),v?h(t[0],t[1],d):h(t[0],t[1])):v?h(t,d):h(t)};if(p)r=t;else{if("function"!=typeof(o=cr(t)))throw TypeError("Target is not iterable");if(nr(o)){for(i=0,c=rr(t.length);c>i;i++)if((u=y(t[i]))&&u instanceof ar)return u;return new ar(!1)}r=ir(t,o)}for(a=r.next;!(f=a.call(r)).done;){try{u=y(f.value)}catch(qc){ur(r,"throw",qc)}if("object"==typeof u&&u&&u instanceof ar)return u}return new ar(!1)},Uo=function(t,e){if(!e&&!sr)return!1;var n=!1;try{var r={};r[fr]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(qc){}return n},Go=function(t,e){var n,r=gr(t).constructor;return void 0===r||null==(n=gr(r)[br])?e:mr(n)},qo=Xr.set,Jo=vo,Bo=function(t,e){if(jo(t),Eo(e)&&e.constructor===t)return e;var n=So.f(t);return(0,n.resolve)(e),n.promise},Yo=function(t,e){var n=xo.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))},Ho=ho,Ko=function(t){try{return{error:!1,value:t()}}catch(qc){return{error:!0,value:qc}}},Vo=me,Xo=vn,$o=Po,Qo=jr,Zo=M,ti=st("species"),ei="Promise",ni=Vo.get,ri=Vo.set,oi=Vo.getterFor(ei),ii=Ao&&Ao.prototype,ci=Ao,ui=ii,ai=Io.TypeError,fi=Io.document,si=Io.process,li=Ho.f,pi=li,vi=!!(fi&&fi.createEvent&&Io.dispatchEvent),hi="function"==typeof PromiseRejectionEvent,di="unhandledrejection",yi=!1,gi=Xo(ei,(function(){var t=Wo(ci),e=t!==String(ci);if(!e&&66===Zo)return!0;if(Zo>=51&&/native code/.test(t))return!1;var n=new ci((function(t){t(1)})),r=function(t){t((function(){}),(function(){}))};return(n.constructor={})[ti]=r,!(yi=n.then((function(){}))instanceof r)||!e&&$o&&!hi})),mi=gi||!Uo((function(t){ci.all(t).catch((function(){}))})),bi=function(t){var e;return!(!Fo(t)||"function"!=typeof(e=t.then))&&e},wi=function(t,e){if(!t.notified){t.notified=!0;var n=t.reactions;Jo((function(){for(var r=t.value,o=1==t.state,i=0;n.length>i;){var c,u,a,f=n[i++],s=o?f.ok:f.fail,l=f.resolve,p=f.reject,v=f.domain;try{s?(o||(2===t.rejection&&Si(t),t.rejection=1),!0===s?c=r:(v&&v.enter(),c=s(r),v&&(v.exit(),a=!0)),c===f.promise?p(ai("Promise-chain cycle")):(u=bi(c))?u.call(c,l,p):l(c)):p(r)}catch(qc){v&&!a&&v.exit(),p(qc)}}t.reactions=[],t.notified=!1,e&&!t.rejection&&ji(t)}))}},Oi=function(t,e,n){var r,o;vi?((r=fi.createEvent("Event")).promise=e,r.reason=n,r.initEvent(t,!1,!0),Io.dispatchEvent(r)):r={promise:e,reason:n},!hi&&(o=Io["on"+t])?o(r):t===di&&Yo("Unhandled promise rejection",n)},ji=function(t){qo.call(Io,(function(){var e,n=t.facade,r=t.value;if(Ei(t)&&(e=Ko((function(){Qo?si.emit("unhandledRejection",r,n):Oi(di,n,r)})),t.rejection=Qo||Ei(t)?2:1,e.error))throw e.value}))},Ei=function(t){return 1!==t.rejection&&!t.parent},Si=function(t){qo.call(Io,(function(){var e=t.facade;Qo?si.emit("rejectionHandled",e):Oi("rejectionhandled",e,t.value)}))},xi=function(t,e,n){return function(r){t(e,r,n)}},Pi=function(t,e,n){t.done||(t.done=!0,n&&(t=n),t.value=e,t.state=2,wi(t,!0))},Ti=function(t,e,n){if(!t.done){t.done=!0,n&&(t=n);try{if(t.facade===e)throw ai("Promise can't be resolved itself");var r=bi(e);r?Jo((function(){var n={done:!1};try{r.call(e,xi(Ti,n,t),xi(Pi,n,t))}catch(qc){Pi(n,qc,t)}})):(t.value=e,t.state=1,wi(t,!1))}catch(qc){Pi({done:!1},qc,t)}}};if(gi&&(ui=(ci=function(t){Do(this,ci,ei),No(t),mo.call(this);var e=ni(this);try{t(xi(Ti,e),xi(Pi,e))}catch(qc){Pi(e,qc)}}).prototype,(mo=function(t){ri(this,{type:ei,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=Mo(ui,{then:function(t,e){var n=oi(this),r=li(Go(this,ci));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=Qo?si.domain:void 0,n.parent=!0,n.reactions.push(r),0!=n.state&&wi(n,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),bo=function(){var t=new mo,e=ni(t);this.promise=t,this.resolve=xi(Ti,e),this.reject=xi(Pi,e)},Ho.f=li=function(t){return t===ci||t===wo?new bo(t):pi(t)},"function"==typeof Ao&&ii!==Object.prototype)){Oo=ii.then,yi||(ko(ii,"then",(function(t,e){var n=this;return new ci((function(t,e){Oo.call(n,t,e)})).then(t,e)}),{unsafe:!0}),ko(ii,"catch",ui.catch,{unsafe:!0}));try{delete ii.constructor}catch(qc){}Ro&&Ro(ii,ui)}To({global:!0,wrap:!0,forced:gi},{Promise:ci}),Co(ci,ei,!1),Lo(ei),wo=_o(ei),To({target:ei,stat:!0,forced:gi},{reject:function(t){var e=li(this);return e.reject.call(void 0,t),e.promise}}),To({target:ei,stat:!0,forced:gi},{resolve:function(t){return Bo(this,t)}}),To({target:ei,stat:!0,forced:mi},{all:function(t){var e=this,n=li(e),r=n.resolve,o=n.reject,i=Ko((function(){var n=No(e.resolve),i=[],c=0,u=1;zo(t,(function(t){var a=c++,f=!1;i.push(void 0),u++,n.call(e,t).then((function(t){f||(f=!0,i[a]=t,--u||r(i))}),o)})),--u||r(i)}));return i.error&&o(i.value),n.promise},race:function(t){var e=this,n=li(e),r=n.reject,o=Ko((function(){var o=No(e.resolve);zo(t,(function(t){o.call(e,t).then(n.resolve,r)}))}));return o.error&&r(o.value),n.promise}});var Ii,_i=Ye,Ai=He,ki=Object.keys||function(t){return _i(t,Ai)},Mi=Mt,Ri=Ct,Ci=ki,Li=i?Object.defineProperties:function(t,e){Ri(t);for(var n,r=Ci(e),o=r.length,i=0;o>i;)Mi.f(t,n=r[i++],e[n]);return t},Fi=Ct,Ni=Li,Di=He,Wi=re,zi=wr,Ui=Ot,Gi=ne("IE_PROTO"),qi=function(){},Ji=function(t){return" - - - + + + + - - + + + - -
-
-
-
- -
- - -
-
-
-
- -
-
- -
-
-
- - -
-

Existing customer? Login

-
-
-
-
-
-
-
-
-
-
-
- - We're - hiring - Visit our careers page - - - -

- A better way to - ship - web apps -

-

- Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui Lorem cupidatat - commodo. Elit sunt amet fugiat veniam occaecat fugiat. -

-
-
-
-
- - -
-
- -
-
-

Start your free 14-day trial, - no credit card necessary. By providing your email, you agree to our terms or service.

-
-
-
-
-
-
- - -
-
-
-
-
- - -
-
-
-

Serverless

-

- No server? No problem. -

-

- Phasellus lorem quam molestie id quisque diam aenean nulla in. Accumsan in quis quis - nunc, ullamcorper malesuada. Eleifend condimentum id viverra nulla. -

-
-
- -
-
-
- - -
-
-

Deploy faster

-

- Everything you need to deploy your app -

-

- Phasellus lorem quam molestie id quisque diam aenean nulla in. Accumsan in quis quis nunc, - ullamcorper malesuada. Eleifend condimentum id viverra nulla. -

-
-
-
-
-
-
- - - - -
-

Push to - Deploy

-

- Ac tincidunt sapien vehicula erat auctor pellentesque rhoncus. Et magna - sit morbi vitae lobortis. -

-
-
-
- -
-
-
-
- - - - -
-

SSL - Certificates

-

- Qui aut temporibus nesciunt vitae dicta repellat sit dolores pariatur. - Temporibus qui illum aut. -

-
-
-
- -
-
-
-
- - - - -
-

Simple - Queues

-

- Rerum quas incidunt deleniti quaerat suscipit mollitia. Amet repellendus - ut odit dolores qui. -

-
-
-
- -
-
-
-
- - - - -
-

Advanced - Security

-

- Ullam laboriosam est voluptatem maxime ut mollitia commodi. Et - dignissimos suscipit perspiciatis. -

-
-
-
- -
-
-
-
- - - - -
-

Powerful - API

-

- Ab a facere voluptatem in quia corrupti veritatis aliquam. Veritatis - labore quaerat ipsum quaerat id. -

-
-
-
- -
-
-
-
- - - - -
-

Database - Backups

-

- Quia qui et est officia cupiditate qui consectetur. Ratione similique et - impedit ea ipsum et. -

-
-
-
-
-
-
-
- - -
-
-
- -
-
- -
-
-
-
-
-
-
- -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed urna nulla - vitae laoreet augue. Amet feugiat est integer dolor auctor adipiscing nunc - urna, sit. -

-
-
-

Judith Black

-

CEO at PureInsights

-
-
-
-
-
-
- - - - - -
-
- - -
-
-
-

- Award winning support -

-

- We’re here to help -

-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Et, egestas tempus tellus etiam - sed. Quam a scelerisque amet ullamcorper eu enim et fermentum, augue. Aliquet amet - volutpat quisque ut interdum tincidunt duis. -

- -
-
-
-
- -
-
- - + + + + + + diff --git a/index.html b/index.html new file mode 120000 index 0000000..cde8126 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +./src/tests/index.html \ No newline at end of file diff --git a/src/js/sunset-to-sunset.ts b/src/js/sunset-to-sunset.ts index b39c6ff..d3c9be2 100644 --- a/src/js/sunset-to-sunset.ts +++ b/src/js/sunset-to-sunset.ts @@ -2,116 +2,117 @@ import "../css/style.css"; import { DateTime, Duration } from "luxon"; const renderBanner = (closing, opening) => { - const userDefinedTemplate = document.querySelector( - "template#sts-banner-template" - ); + if (typeof window !== "undefined") { + const userDefinedTemplate = document.querySelector("#sts-banner-template"); - let template; + let template; - if (userDefinedTemplate) { - template = userDefinedTemplate; - } else { - let defaultBannerTemplate = document.createElement("template"); + if (userDefinedTemplate) { + template = userDefinedTemplate; + } else { + let defaultBannerTemplate = document.createElement("template"); - defaultBannerTemplate.innerHTML = ` -
- Because of religious beliefs our store will be closed over the Sabbath hours. - Closing on and will re-open on . -
- `; - template = defaultBannerTemplate; - } + defaultBannerTemplate.innerHTML = ` +
+ Because of religious beliefs our store will be closed over the Sabbath hours. + Closing on and will re-open on . +
+ `; + template = defaultBannerTemplate; + } - const banner = template.content.cloneNode(true); + const banner = template.cloneNode(true); - // Find all closing elements and add formatted times - const closingElements = banner.querySelectorAll(".sts-closing-time"); - formatTimes(closingElements, closing); + // Find all closing elements and add formatted times + const closingElements = banner.querySelectorAll(".sts-closing-time"); + formatTimes(closingElements, closing); - // Find all opening elements and add formatted times - const openingElements = banner.querySelectorAll(".sts-opening-time"); - formatTimes(openingElements, opening); + // Find all opening elements and add formatted times + const openingElements = banner.querySelectorAll(".sts-opening-time"); + formatTimes(openingElements, opening); - // Insert the banner as the first item on the page. - document.body.insertBefore(banner, document.body.firstChild); + // Insert the banner as the first item on the page. + document.body.insertBefore(banner, document.body.firstChild); + } }; const renderMessage = (opening) => { - const userFullTemplate = document.querySelector( - "template#sts-full-message-template" - ); - const userSimpleTemplate = document.querySelector( - "template#sts-message-template" - ); - const userDefinedTemplate = userFullTemplate - ? userFullTemplate - : userSimpleTemplate; - - let message; - - if (userDefinedTemplate) { - message = userDefinedTemplate.content.cloneNode(true); - message = message.firstElementChild; - } else { - let messageHolder = document.createElement("div"); - messageHolder.innerHTML = ` -

- In a world that seems to be spinning faster every day, we choose to stop - and rest every Sabbath (Saturday). It’s a day for us to relax, refresh, - refocus and worship; worship a God who loved us so much that He built a - day of rest into Creation week and then commanded us to keep it - (knowing we probably wouldn’t do it otherwise—even though it is for - our best good). -

- `; + if (typeof window !== "undefined") { + const userFullTemplate = document.querySelector( + "#sts-full-message-template" + ); + const userSimpleTemplate = document.querySelector("#sts-message-template"); + const userDefinedTemplate = userFullTemplate + ? userFullTemplate + : userSimpleTemplate; - message = messageHolder; - } + let message; - let template = document.createElement("template"); - template.innerHTML = ` -
+ if (userDefinedTemplate) { + message = userDefinedTemplate.content.cloneNode(true); + message = message.firstElementChild; + } else { + let messageHolder = document.createElement("div"); + messageHolder.innerHTML = ` +

+ In a world that seems to be spinning faster every day, we choose to stop + and rest every Sabbath (Saturday). It’s a day for us to relax, refresh, + refocus and worship; worship a God who loved us so much that He built a + day of rest into Creation week and then commanded us to keep it + (knowing we probably wouldn’t do it otherwise—even though it is for + our best good). +

+ `; + + message = messageHolder; + } -
-
-

Sabbath

-
-
-

- We will re-open on . -

+ let template = document.createElement("template"); + template.innerHTML = ` +
+ +
+
+

Sabbath

+
+
+

+ We will re-open on . +

+
+
- -
- `; + `; - const messageTemplate = template.content.cloneNode(true); + const messageTemplate = template.content.cloneNode(true); - if (userFullTemplate) { - let messageContainer = messageTemplate.querySelector( - ".sts-full-message__container" - ); + if (userFullTemplate) { + let messageContainer = messageTemplate.querySelector( + ".sts-full-message__container" + ); - while (messageContainer.firstElementChild) { - messageContainer.removeChild(messageContainer.firstChild); - } + while (messageContainer.firstElementChild) { + messageContainer.removeChild(messageContainer.firstChild); + } - messageContainer.insertBefore(message, null); - } else if (userSimpleTemplate) { - const messageArea = messageTemplate.querySelector(".sts-message-area"); - messageArea.insertBefore(message, null); - } + messageContainer.insertBefore(message, null); + } else if (userSimpleTemplate) { + const messageArea = messageTemplate.querySelector(".sts-message-area"); + messageArea.insertBefore(message, null); + } - const html = document.getElementsByTagName("html")[0]; - html.classList.add("sts-during-sabbath"); + const html = document.getElementsByTagName("html")[0]; + html.classList.add("sts-during-sabbath"); - // Find all opening elements and add formatted times - const openingElements = messageTemplate.querySelectorAll(".sts-opening-time"); - formatTimes(openingElements, opening); + // Find all opening elements and add formatted times + const openingElements = + messageTemplate.querySelectorAll(".sts-opening-time"); + formatTimes(openingElements, opening); - // Insert the messageTemplate as the first item on the page. - document.body.insertBefore(messageTemplate, document.body.firstChild); + // Insert the messageTemplate as the first item on the page. + document.body.insertBefore(messageTemplate, document.body.firstChild); + } }; const formatTimes = (elements, time) => { @@ -148,330 +149,332 @@ const formatTimes = (elements, time) => { } }; -const SunsetToSunset = (() => { - console.log(`Intializing Sunset to Sunset...`); +export const SunsetToSunset = (() => { + if (typeof window !== "undefined") { + console.log(`Initializing Sunset to Sunset...`); - const now = DateTime.now(); + const now = DateTime.now(); - // Keep track of calculated times - let times = {}; + // Keep track of calculated times + let times = {}; - times["Current Time"] = { - Date: now.toLocaleString(DateTime.DATE_FULL), - Time: now.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), - }; + times["Current Time"] = { + Date: now.toLocaleString(DateTime.DATE_FULL), + Time: now.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), + }; - // Get options set in HTML - const stsContainer = document.querySelector("template#sts-settings"); - let days = {}; - - // Mainly for debugging purposes you can set the closing and opening day number - // so the plugin activates on the day you are testing it for example instead of - // needing to wait until Friday to test it. - if (stsContainer.dataset.days) { - days = JSON.parse(stsContainer.dataset.days); - } - - // Set day of week: zero-based index - const dayDefaults = { - closing: 5, - opening: 6, - }; - - // Merge days with dayDefaults - days = Object.assign(Object.assign({}, dayDefaults), days); - - const getClosingDayNumber = () => { - return days.closing; - }; - - const getOpeningDayNumber = () => { - return days.opening; - }; - - const activateSunsetWatch = - now.weekday == getClosingDayNumber() || - now.weekday == getOpeningDayNumber(); - - // Set default options - const defaults = { - guardDuration: { - minutes: 30, - }, - bannerDuration: { - hours: 3, - }, - location: { - lat: 0, - long: 0, - }, - simulateTime: false, - debug: false, - }; - - let options = {}; - - if (stsContainer.dataset.settings) { - options = JSON.parse(stsContainer.dataset.settings); - } - - // Merge options with defaults - options = Object.assign(Object.assign({}, defaults), options); - - if (options.simulateTime) { - console.warn( - "%cThe `simulateTime` option is enabled for the Sunset to Sunset plugin. Remember to disable this option once you are done verifying the settings.", - "font-size: 16px" - ); - } - - if (options.debug) { - console.group(`Sunset to Sunset intialized with the following options:`); - console.dir(options); - console.groupEnd(); - } + // Get options set in HTML + const stsContainer = document.querySelector("#sts-settings"); + let days = {}; - // Get location coordinates - const getLocation = () => { - return options.location; - }; - - // Get sunset time for given date and location - const getSunsetTime = async (date) => { - const sunsetDate = date.split("T")[0]; - const response = await fetch( - "https://api.sunrise-sunset.org/json?&lat=" + - getLocation().lat + - "&lng=" + - getLocation().long + - "&date=" + - sunsetDate + - "&formatted=0" - ); - const data = await response.json(); - const sunset = DateTime.fromISO(data.results.sunset); - - return sunset; - }; - - // Get closing sunset - const getClosingSunset = () => { - let daysToClosing = getClosingDayNumber() - now.weekday; - - const closingDate = DateTime.fromISO( - now.plus({ - days: daysToClosing, - }) - ).toString(); - - const closingSunset = getSunsetTime(closingDate); - - return closingSunset; - }; - - // Get opening sunset - const getOpeningSunset = () => { - let daysToOpening = getOpeningDayNumber() - now.weekday; - - const openingDate = DateTime.fromISO( - now.plus({ - days: daysToOpening, - }) - ).toString(); - - const openingSunset = getSunsetTime(openingDate); - - return openingSunset; - }; - - // Get message minutes - const getBannerDuration = () => { - let duration = Duration.fromObject(options.bannerDuration); - - return duration; - }; - - // Get guard duration - const getGuardDuration = () => { - return options.guardDuration; - }; + // Mainly for debugging purposes you can set the closing and opening day number + // so the plugin activates on the day you are testing it for example instead of + // needing to wait until Friday to test it. + if (stsContainer.dataset.days) { + days = JSON.parse(stsContainer.dataset.days); + } - //Get message time - const getMessageTime = (date) => { - return date.minus(getBannerDuration()); - }; + // Set day of week: zero-based index + const dayDefaults = { + closing: 5, + opening: 6, + }; + + // Merge days with dayDefaults + days = Object.assign(Object.assign({}, dayDefaults), days); + + const getClosingDayNumber = () => { + return days.closing; + }; + + const getOpeningDayNumber = () => { + return days.opening; + }; + + const activateSunsetWatch = + now.weekday == getClosingDayNumber() || + now.weekday == getOpeningDayNumber(); + + // Set default options + const defaults = { + guardDuration: { + minutes: 30, + }, + bannerDuration: { + hours: 3, + }, + location: { + lat: 0, + long: 0, + }, + simulateTime: false, + debug: false, + }; + + let options = {}; + + if (stsContainer.dataset.settings) { + options = JSON.parse(stsContainer.dataset.settings); + } - // Get guard time. `date` is a Luxon DateTime object. - const getGuardTime = (date, action) => { - let time; + // Merge options with defaults + options = Object.assign(Object.assign({}, defaults), options); - if (action == "closing") { - time = date.minus(getGuardDuration()); + if (options.simulateTime) { + console.warn( + "%cThe `simulateTime` option is enabled for the Sunset to Sunset plugin. Remember to disable this option once you are done verifying the settings.", + "font-size: 16px" + ); } - if (action == "opening") { - time = date.plus(getGuardDuration()); + if (options.debug) { + console.group(`Sunset to Sunset intialized with the following options:`); + console.dir(options); + console.groupEnd(); } - return time; - }; + // Get location coordinates + const getLocation = () => { + return options.location; + }; + + // Get sunset time for given date and location + const getSunsetTime = async (date) => { + const sunsetDate = date.split("T")[0]; + const response = await fetch( + "https://api.sunrise-sunset.org/json?&lat=" + + getLocation().lat + + "&lng=" + + getLocation().long + + "&date=" + + sunsetDate + + "&formatted=0" + ); + const data = await response.json(); + const sunset = DateTime.fromISO(data.results.sunset); + + return sunset; + }; + + // Get closing sunset + const getClosingSunset = () => { + let daysToClosing = getClosingDayNumber() - now.weekday; + + const closingDate = DateTime.fromISO( + now.plus({ + days: daysToClosing, + }) + ).toString(); + + const closingSunset = getSunsetTime(closingDate); + + return closingSunset; + }; + + // Get opening sunset + const getOpeningSunset = () => { + let daysToOpening = getOpeningDayNumber() - now.weekday; + + const openingDate = DateTime.fromISO( + now.plus({ + days: daysToOpening, + }) + ).toString(); + + const openingSunset = getSunsetTime(openingDate); + + return openingSunset; + }; + + // Get message minutes + const getBannerDuration = () => { + let duration = Duration.fromObject(options.bannerDuration); + + return duration; + }; + + // Get guard duration + const getGuardDuration = () => { + return options.guardDuration; + }; + + //Get message time + const getMessageTime = (date) => { + return date.minus(getBannerDuration()); + }; + + // Get guard time. `date` is a Luxon DateTime object. + const getGuardTime = (date, action) => { + let time; + + if (action == "closing") { + time = date.minus(getGuardDuration()); + } - const getTimes = async () => { - const allTimes = Promise.all([getClosingSunset(), getOpeningSunset()]); + if (action == "opening") { + time = date.plus(getGuardDuration()); + } - const times = await allTimes; + return time; + }; - return times; - }; + const getTimes = async () => { + const allTimes = Promise.all([getClosingSunset(), getOpeningSunset()]); - // Only run if today is Friday or Sabbath - if (activateSunsetWatch || options.simulateTime) { - let preparationDay = false; - let bannerUp = false; - let duringSabbath = false; - let afterSabbath = false; + const times = await allTimes; - // Check if we are simulating the time - if (options.simulateTime) { - switch (options.simulateTime) { - case "preparation-day": - preparationDay = true; - break; + return times; + }; - case "banner-up": - bannerUp = true; - break; + // Only run if today is Friday or Sabbath + if (activateSunsetWatch || options.simulateTime) { + let preparationDay = false; + let bannerUp = false; + let duringSabbath = false; + let afterSabbath = false; - case "during-sabbath": - duringSabbath = true; - break; + // Check if we are simulating the time + if (options.simulateTime) { + switch (options.simulateTime) { + case "preparation-day": + preparationDay = true; + break; - case "after-sabbath": - afterSabbath = true; - break; + case "banner-up": + bannerUp = true; + break; - default: - break; - } - } + case "during-sabbath": + duringSabbath = true; + break; - getTimes().then(([closingSunset, openingSunset]) => { - // Set guard times - const closing = getGuardTime(closingSunset, "closing"); - const opening = getGuardTime(openingSunset, "opening"); - - if (!options.simulateTime) { - // Set time checks - preparationDay = now < getMessageTime(closing); - bannerUp = now > getMessageTime(closing) && now < closing; - duringSabbath = - now >= closing && - now <= opening && - now.weekday >= getClosingDayNumber(); - afterSabbath = now > opening && now >= getOpeningDayNumber(); - } + case "after-sabbath": + afterSabbath = true; + break; - // Is is during the week before the time to show the banner? - if (preparationDay) { - // Refresh the page when it's time to show the banner. - const refreshTime = getMessageTime(closing) - .diff(now, "milliseconds") - .toObject(); - - // Don't refresh if there is a negative refresh time. - // This conditional is mainly here for when `simulateTime` - // is set to `preparation-day`. - if (refreshTime.milliseconds >= 0) { - setTimeout(() => { - location.reload(); - }, refreshTime.milliseconds); + default: + break; } } - // Is it before closing time but the banner should be up? - if (bannerUp) { - renderBanner(closing, opening); + getTimes().then(([closingSunset, openingSunset]) => { + // Set guard times + const closing = getGuardTime(closingSunset, "closing"); + const opening = getGuardTime(openingSunset, "opening"); + + if (!options.simulateTime) { + // Set time checks + preparationDay = now < getMessageTime(closing); + bannerUp = now > getMessageTime(closing) && now < closing; + duringSabbath = + now >= closing && + now <= opening && + now.weekday >= getClosingDayNumber(); + afterSabbath = now > opening && now >= getOpeningDayNumber(); + } - // Refresh the page when it's closing time. - const refreshTime = closing.diff(now, "milliseconds").toObject(); + // Is is during the week before the time to show the banner? + if (preparationDay) { + // Refresh the page when it's time to show the banner. + const refreshTime = getMessageTime(closing) + .diff(now, "milliseconds") + .toObject(); + + // Don't refresh if there is a negative refresh time. + // This conditional is mainly here for when `simulateTime` + // is set to `preparation-day`. + if (refreshTime.milliseconds >= 0) { + setTimeout(() => { + location.reload(); + }, refreshTime.milliseconds); + } + } - // Don't refresh if there is a negative refresh time. - // This conditional is mainly here for when `simulateTime` - // is set to `banner-up`. - if (refreshTime.milliseconds >= 0) { - setTimeout(() => { - location.reload(); - }, refreshTime.milliseconds); + // Is it before closing time but the banner should be up? + if (bannerUp) { + renderBanner(closing, opening); + + // Refresh the page when it's closing time. + const refreshTime = closing.diff(now, "milliseconds").toObject(); + + // Don't refresh if there is a negative refresh time. + // This conditional is mainly here for when `simulateTime` + // is set to `banner-up`. + if (refreshTime.milliseconds >= 0) { + setTimeout(() => { + location.reload(); + }, refreshTime.milliseconds); + } } - } - // Is it during the sabbath? - if (duringSabbath) { - renderMessage(opening); + // Is it during the sabbath? + if (duringSabbath) { + renderMessage(opening); - // Refresh the page when it's opening time. - const refreshTime = opening.diff(now, "milliseconds").toObject(); + // Refresh the page when it's opening time. + const refreshTime = opening.diff(now, "milliseconds").toObject(); - if (refreshTime.milliseconds >= 0) { - setTimeout(() => { - location.reload(); - }, refreshTime.milliseconds); + if (refreshTime.milliseconds >= 0) { + setTimeout(() => { + location.reload(); + }, refreshTime.milliseconds); + } } - } - // Is it after sundown on Saturday? - if (afterSabbath) { - } + // Is it after sundown on Saturday? + if (afterSabbath) { + } - if (options.debug) { - let checks = { - Enabled: { - "Preparation day": preparationDay, - "Banner up": bannerUp, - "During the Sabbath": duringSabbath, - "After Sabbath": afterSabbath, - }, - }; - - console.group(`Sunset to Sunset time checks`); - console.table(checks); - console.groupEnd(); - - times["Banner up"] = { - Date: getMessageTime(closing).toLocaleString(DateTime.DATE_FULL), - Time: getMessageTime(closing).toLocaleString( - DateTime.TIME_WITH_SHORT_OFFSET - ), - }; - - times["Closing guard"] = { - Date: closing.toLocaleString(DateTime.DATE_FULL), - Time: closing.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), - }; - - times["Closing sunset"] = { - Date: closingSunset.toLocaleString(DateTime.DATE_FULL), - Time: closingSunset.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), - }; - - times["Opening sunset"] = { - Date: openingSunset.toLocaleString(DateTime.DATE_FULL), - Time: openingSunset.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), - }; - - times["Opening guard"] = { - Date: opening.toLocaleString(DateTime.DATE_FULL), - Time: opening.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), - }; - - console.group(`Sunset to Sunset times`); - console.table(times); - console.groupEnd(); - } - }); - } else { - console.log("Sunset to Sunset: Exiting because today is not closing day"); - } + if (options.debug) { + let checks = { + Enabled: { + "Preparation day": preparationDay, + "Banner up": bannerUp, + "During the Sabbath": duringSabbath, + "After Sabbath": afterSabbath, + }, + }; + + console.group(`Sunset to Sunset time checks`); + console.table(checks); + console.groupEnd(); + + times["Banner up"] = { + Date: getMessageTime(closing).toLocaleString(DateTime.DATE_FULL), + Time: getMessageTime(closing).toLocaleString( + DateTime.TIME_WITH_SHORT_OFFSET + ), + }; + + times["Closing guard"] = { + Date: closing.toLocaleString(DateTime.DATE_FULL), + Time: closing.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), + }; + + times["Closing sunset"] = { + Date: closingSunset.toLocaleString(DateTime.DATE_FULL), + Time: closingSunset.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), + }; + + times["Opening sunset"] = { + Date: openingSunset.toLocaleString(DateTime.DATE_FULL), + Time: openingSunset.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), + }; + + times["Opening guard"] = { + Date: opening.toLocaleString(DateTime.DATE_FULL), + Time: opening.toLocaleString(DateTime.TIME_WITH_SHORT_OFFSET), + }; + + console.group(`Sunset to Sunset times`); + console.table(times); + console.groupEnd(); + } + }); + } else { + console.log("Sunset to Sunset: Exiting because today is not closing day"); + } - return options; + return options; + } })(); diff --git a/src/tests/index.html b/src/tests/index.html index bc283d0..d1b7a34 100644 --- a/src/tests/index.html +++ b/src/tests/index.html @@ -4,11 +4,10 @@ Sunset to Sunset Test - + - - + @@ -1174,7 +1173,7 @@
- + > +
+
+ Our store will be closing at + + and will re-open on + +
+