diff --git a/app/assets/builds/tailwind.css b/app/assets/builds/tailwind.css index 0fabccb3..b51fda44 100644 --- a/app/assets/builds/tailwind.css +++ b/app/assets/builds/tailwind.css @@ -1 +1 @@ -/*! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);outline:2px solid #0000;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,::backdrop,:after,:before{--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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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:#3b82f680;--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: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.prose{--tw-prose-body:#3f3f46;--tw-prose-headings:#18181b;--tw-prose-links:#7825cb;--tw-prose-links-hover:#6423a6;--tw-prose-links-underline:#a658f44d;--tw-prose-bold:#18181b;--tw-prose-counters:#71717a;--tw-prose-bullets:#d4d4d8;--tw-prose-hr:#18181b0d;--tw-prose-quotes:#18181b;--tw-prose-quote-borders:#e4e4e7;--tw-prose-captions:#71717a;--tw-prose-code:#18181b;--tw-prose-code-bg:#f4f4f5;--tw-prose-code-ring:#d4d4d8;--tw-prose-th-borders:#d4d4d8;--tw-prose-td-borders:#e4e4e7;--tw-prose-invert-body:#a1a1aa;--tw-prose-invert-headings:#fff;--tw-prose-invert-links:#cc9dfb;--tw-prose-invert-links-hover:#a658f4;--tw-prose-invert-links-underline:#a658f44d;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#a1a1aa;--tw-prose-invert-bullets:#52525b;--tw-prose-invert-hr:#ffffff0d;--tw-prose-invert-quotes:#f4f4f5;--tw-prose-invert-quote-borders:#3f3f46;--tw-prose-invert-captions:#a1a1aa;--tw-prose-invert-code:#fff;--tw-prose-invert-code-bg:#3f3f4626;--tw-prose-invert-code-ring:#ffffff1a;--tw-prose-invert-th-borders:#52525b;--tw-prose-invert-td-borders:#3f3f46;color:var(--tw-prose-body);font-size:.875rem;line-height:1.75rem}.prose :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.5rem;margin-top:1.5rem}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1rem;line-height:1.75rem}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25rem;margin-top:1.25rem;padding-left:1.625rem}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25rem;margin-top:1.25rem;padding-left:1.625rem}.prose :where(li):not(:where([class~=not-prose] *)){margin-bottom:.5rem;margin-top:.5rem}.prose :where(:is(ol,ul)>li):not(:where([class~=not-prose] *)){padding-left:.375rem}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.75rem;margin-top:.75rem}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25rem}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25rem}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25rem}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25rem}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.75rem;margin-top:.75rem}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin:4rem -1rem;max-width:none}@media (min-width:640px){.prose :where(hr):not(:where([class~=not-prose] *)){margin-left:-1.5rem;margin-right:-1.5rem}}@media (min-width:1024px){.prose :where(hr):not(:where([class~=not-prose] *)){margin-left:-2rem;margin-right:-2rem}}.prose :where(blockquote):not(:where([class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:2rem;margin-top:2rem;padding-left:1.25rem;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5rem;font-weight:700;line-height:2rem;margin-bottom:.5rem}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.125rem;font-weight:600;line-height:1.75rem;margin-bottom:.5rem;margin-top:4rem}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1rem;font-weight:600;line-height:1.75rem;margin-bottom:.5rem;margin-top:2.5rem}.prose :where(img,video,figure):not(:where([class~=not-prose] *)){margin-bottom:2rem;margin-top:2rem}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.8125rem;line-height:1.5rem;margin-top:.5rem}.prose :where(table):not(:where([class~=not-prose] *)){line-height:1.5rem;margin-bottom:2rem;margin-top:2rem;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5rem;padding-left:.5rem;padding-right:.5rem;vertical-align:bottom}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose :where(:is(tbody,tfoot) td):not(:where([class~=not-prose] *)){padding:.5rem}.prose :where(:is(tbody,tfoot) td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(:is(tbody,tfoot) td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition-duration:.15s;transition-property:color,text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.prose :where(a):not(:where([class~=not-prose] *)):hover{color:var(--tw-prose-links-hover);text-decoration-color:var(--tw-prose-links-underline)}.prose :where(:is(h1,h2,h3) a):not(:where([class~=not-prose] *)){font-weight:inherit}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(:is(a,blockquote,thead th) strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(code):not(:where([class~=not-prose] *)){background-color:var(--tw-prose-code-bg);border-radius:.5rem;box-shadow:inset 0 0 0 1px var(--tw-prose-code-ring);color:var(--tw-prose-code);font-size:.75rem;font-size:[object Object];padding:.25rem .375rem}.prose :where(:is(a,h1,h2,h3,blockquote,thead th) code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){font-size:1rem;font-weight:inherit}.prose :where(h3 code):not(:where([class~=not-prose] *)){font-size:.875rem;font-weight:inherit}.prose :where(:is(h1,h2,h3)+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0!important}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0!important}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.-inset-1{inset:-.25rem}.-inset-1\.5{inset:-.375rem}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.-top-40{top:-10rem}.bottom-0{bottom:0}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[calc\(50\%\+3rem\)\]{left:calc(50% + 3rem)}.left-\[calc\(50\%-11rem\)\]{left:calc(50% - 11rem)}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[calc\(100\%-13rem\)\]{top:calc(100% - 13rem)}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-50{z-index:50}.z-\[999\]{z-index:999}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.float-start{float:inline-start}.float-end{float:inline-end}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.m-0{margin:0}.m-1{margin:.25rem}.m-4{margin:1rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.-my-1\.5{margin-bottom:-.375rem;margin-top:-.375rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-bottom:.25rem;margin-top:.25rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-24{margin-bottom:6rem;margin-top:6rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-32{margin-bottom:8rem;margin-top:8rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.me-1{margin-inline-end:.25rem}.me-2{margin-inline-end:.5rem}.me-3{margin-inline-end:.75rem}.me-auto{margin-inline-end:auto}.ml-1{margin-left:.25rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-5{margin-right:1.25rem}.mr-auto{margin-right:auto}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.ms-3{margin-inline-start:.75rem}.ms-4{margin-inline-start:1rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-32{margin-top:8rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[1108\/632\]{aspect-ratio:1108/632}.aspect-\[1155\/678\]{aspect-ratio:1155/678}.size-4{height:1rem;width:1rem}.size-5{height:1.25rem;width:1.25rem}.h-0{height:0}.h-0\.5{height:.125rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-12{max-height:3rem}.min-h-\[calc\(theme\(spacing\.12\)\+1px\)\]{min-height:calc(3rem + 1px)}.min-h-full{min-height:100%}.w-0{width:0}.w-0\.5{width:.125rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-24{width:6rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-\[36\.125rem\]{width:36.125rem}.w-\[69\.25rem\]{width:69.25rem}.w-\[72\.1875rem\]{width:72.1875rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-full{min-width:100%}.max-w-2xl{max-width:40rem}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.-translate-y-1\.5,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x:1.25rem}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-1,.translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\.5{--tw-translate-y:0.375rem}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-\[30deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[30deg\]{--tw-rotate:30deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!cursor-not-allowed{cursor:not-allowed!important}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.scroll-mt-24{scroll-margin-top:6rem}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1fr\2c 1px\2c 1fr\]{grid-template-columns:1fr 1px 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-16{-moz-column-gap:4rem;column-gap:4rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-10{row-gap:2.5rem}.gap-y-12{row-gap:3rem}.gap-y-20{row-gap:5rem}.gap-y-4{row-gap:1rem}.gap-y-8{row-gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.25rem*var(--tw-space-x-reverse))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.5rem*var(--tw-space-y-reverse));margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-16>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(4rem*var(--tw-space-y-reverse));margin-top:calc(4rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.divide-gray-900\/10>:not([hidden])~:not([hidden]){border-color:#1118271a}.divide-zinc-900\/5>:not([hidden])~:not([hidden]){border-color:#18181b0d}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.\!border{border-width:1px!important}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-900\/5{border-color:#1118270d}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-lilac-500\/20{border-color:#db5ad933}.border-mauve-500{--tw-border-opacity:1;border-color:rgb(166 88 244/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-900\/10{border-color:#18181b1a}.border-zinc-900\/5{border-color:#18181b0d}.border-b-white\/7\.5{border-bottom-color:hsla(0,0%,100%,.075)}.border-l-mauve-500{--tw-border-opacity:1;border-left-color:rgb(166 88 244/var(--tw-border-opacity))}.border-t-transparent{border-top-color:#0000}.\!bg-indigo-50{--tw-bg-opacity:1!important;background-color:rgb(238 242 255/var(--tw-bg-opacity))!important}.\!bg-indigo-600{--tw-bg-opacity:1!important;background-color:rgb(79 70 229/var(--tw-bg-opacity))!important}.\!bg-transparent{background-color:initial!important}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-lilac-50\/50{background-color:#fdf5fe80}.bg-mauve-400\/10{background-color:#cc9dfb1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/2\.5{background-color:hsla(0,0%,100%,.025)}.bg-white\/5{background-color:#ffffff0d}.bg-white\/\[var\(--bg-opacity-light\)\]{background-color:rgb(255 255 255/var(--bg-opacity-light))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-zinc-400\/25{background-color:#a1a1aa40}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-900\/10{background-color:#18181b1a}.bg-zinc-900\/7\.5{background-color:rgba(24,24,27,.075)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-\[\#ff80b5\]{--tw-gradient-from:#ff80b5 var(--tw-gradient-from-position);--tw-gradient-to:#ff80b500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-\[\#9089fc\]{--tw-gradient-to:#9089fc var(--tw-gradient-to-position)}.fill-emerald-400{fill:#34d399}.fill-gray-900{fill:#111827}.fill-lilac-500{fill:#db5ad9}.fill-mauve-500{fill:#a658f4}.fill-zinc-500\/20{fill:#71717a33}.fill-zinc-700{fill:#3f3f46}.fill-zinc-700\/10{fill:#3f3f461a}.fill-zinc-900{fill:#18181b}.stroke-current{stroke:currentColor}.stroke-white{stroke:#fff}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-900{stroke:#18181b}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-24{padding-bottom:6rem;padding-top:6rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-32{padding-bottom:8rem;padding-top:8rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-8{padding-bottom:2rem}.pe-2{padding-inline-end:.5rem}.pe-20{padding-inline-end:5rem}.pe-4{padding-inline-end:1rem}.pl-10{padding-left:2.5rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pr-0{padding-right:0}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pr-6{padding-right:1.5rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-10{padding-top:2.5rem}.pt-14{padding-top:3.5rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.\!text-sm{font-size:.875rem!important;line-height:1.5rem!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-2xs{font-size:.75rem;line-height:1.25rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.625rem\]{font-size:.625rem}.text-base{font-size:1rem;line-height:1.75rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.8125rem;line-height:1.5rem}.\!font-semibold{font-weight:600!important}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.not-italic{font-style:normal}.leading-10{line-height:2.5rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.tracking-tight{letter-spacing:-.025em}.\!text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lilac-900{--tw-text-opacity:1;color:rgb(106 37 100/var(--tw-text-opacity))}.text-mauve-400{--tw-text-opacity:1;color:rgb(204 157 251/var(--tw-text-opacity))}.text-mauve-500{--tw-text-opacity:1;color:rgb(166 88 244/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.\!shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{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 #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--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-zinc-900\/10{--tw-shadow-color:#18181b1a;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid #0000;outline-offset:2px}.ring-0{--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(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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)}.ring-2{--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)}.ring-2,.ring-8{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-8{--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(8px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-500\/10{--tw-ring-color:#6b72801a}.ring-gray-900\/10{--tw-ring-color:#1118271a}.ring-gray-900\/5{--tw-ring-color:#1118270d}.ring-green-600\/10{--tw-ring-color:#16a34a1a}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-mauve-400\/20{--tw-ring-color:#cc9dfb33}.ring-transparent{--tw-ring-color:#0000}.ring-zinc-900\/10{--tw-ring-color:#18181b1a}.ring-zinc-900\/7\.5{--tw-ring-color:rgba(24,24,27,.075)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur-3xl{--tw-blur:blur(64px)}.blur-3xl,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-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-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark\:prose-invert:where(.dark,.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-links-hover:var(--tw-prose-invert-links-hover);--tw-prose-links-underline:var(--tw-prose-invert-links-underline);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-code-bg:var(--tw-prose-invert-code-bg);--tw-prose-code-ring:var(--tw-prose-invert-code-ring);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.placeholder\:text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.empty\:hidden:empty{display:none}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-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\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-white\/7\.5:hover{background-color:hsla(0,0%,100%,.075)}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-900\/2\.5:hover{background-color:rgba(24,24,27,.025)}.hover\:bg-zinc-900\/5:hover{background-color:#18181b0d}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/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-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-inherit:hover{color:inherit}.hover\:text-mauve-600:hover{--tw-text-opacity:1;color:rgb(142 54 231/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:ring-gray-900\/20:hover{--tw-ring-color:#11182733}.hover\:ring-indigo-300:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.hover\:ring-zinc-900\/20:hover{--tw-ring-color:#18181b33}.focus\:w-full:focus{width:100%}.focus\:flex-none:focus{flex:none}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-1: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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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)}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus\:ring-green-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.focus\:ring-yellow-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-offset-green-50:focus{--tw-ring-offset-color:#f0fdf4}.focus\:ring-offset-yellow-50:focus{--tw-ring-offset-color:#fefce8}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-200:focus-visible{outline-color:#c7d2fe}.focus-visible\:outline-indigo-600:focus-visible{outline-color:#4f46e5}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:#0000}.group:hover .group-hover\:fill-zinc-900{fill:#18181b}.group\/button:hover .group-hover\/button\:stroke-zinc-400{stroke:#a1a1aa}.group:hover .group-hover\:stroke-zinc-900{stroke:#18181b}.group:hover .group-hover\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:416px){.min-\[416px\]\:contents{display:contents}.min-\[416px\]\:max-w-sm{max-width:24rem}}@media (min-width:640px){.sm\:-top-80{top:-20rem}.sm\:bottom-0{bottom:0}.sm\:left-\[calc\(50\%\+36rem\)\]{left:calc(50% + 36rem)}.sm\:left-\[calc\(50\%-30rem\)\]{left:calc(50% - 30rem)}.sm\:right-\[calc\(50\%-6rem\)\]{right:calc(50% - 6rem)}.sm\:top-\[calc\(100\%-30rem\)\]{top:calc(100% - 30rem)}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-auto{grid-column-start:auto}.sm\:-my-px{margin-bottom:-1px;margin-top:-1px}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-56{margin-bottom:14rem;margin-top:14rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-20{margin-top:5rem}.sm\:mt-32{margin-top:8rem}.sm\:mt-56{margin-top:14rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:w-64{width:16rem}.sm\:w-\[72\.1875rem\]{width:72.1875rem}.sm\:w-full{width:100%}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-\[480px\]{max-width:480px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-xl{max-width:36rem}.sm\:flex-none{flex:none}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-4{gap:1rem}.sm\:gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.sm\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.sm\:gap-y-14{row-gap:3.5rem}.sm\:gap-y-16{row-gap:4rem}.sm\:space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.sm\:space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(5rem*var(--tw-space-y-reverse));margin-top:calc(5rem*(1 - var(--tw-space-y-reverse)))}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-20{padding-bottom:5rem;padding-top:5rem}.sm\:py-32{padding-bottom:8rem;padding-top:8rem}.sm\:py-48{padding-bottom:12rem;padding-top:12rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-0{padding-left:0}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-6xl{font-size:3.75rem;line-height:1}.sm\:text-sm{font-size:.875rem}.sm\:leading-6,.sm\:text-sm{line-height:1.5rem}.sm\:leading-9{line-height:2.25rem}}@media (min-width:768px){.md\:visible{visibility:visible}.md\:col-span-2{grid-column:span 2/span 2}.md\:mx-0{margin-left:0;margin-right:0}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:h-5{height:1.25rem}.md\:w-px{width:1px}.md\:max-w-2xl{max-width:40rem}.md\:max-w-none{max-width:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:justify-start{justify-content:flex-start}.md\:gap-8{gap:2rem}.md\:bg-zinc-900\/10{background-color:#18181b1a}.md\:py-32{padding-bottom:8rem;padding-top:8rem}}@media (min-width:1024px){.lg\:pointer-events-auto{pointer-events:auto}.lg\:fixed{position:fixed}.lg\:inset-0{inset:0}.lg\:z-30{z-index:30}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:ml-72{margin-left:18rem}.lg\:mt-0{margin-top:0}.lg\:mt-10{margin-top:2.5rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-72{width:18rem}.lg\:w-full{width:100%}.lg\:min-w-60{min-width:15rem}.lg\:max-w-2xl{max-width:40rem}.lg\:max-w-4xl{max-width:56rem}.lg\:max-w-5xl{max-width:66rem}.lg\:max-w-7xl{max-width:80rem}.lg\:max-w-md{max-width:28rem}.lg\:max-w-none{max-width:none}.lg\:flex-auto{flex:1 1 auto}.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\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:justify-center{justify-content:center}.lg\:gap-8{gap:2rem}.lg\:gap-y-16{row-gap:4rem}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-r{border-right-width:1px}.lg\:border-zinc-900\/10{border-color:#18181b1a}.lg\:p-4{padding:1rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-40{padding-bottom:10rem;padding-top:10rem}.lg\:py-\[15vh\]{padding-bottom:15vh;padding-top:15vh}.lg\:pb-8{padding-bottom:2rem}.lg\:pt-14{padding-top:3.5rem}.lg\:text-center{text-align:center}}@media (min-width:1280px){.xl\:sticky{position:sticky}.xl\:top-1\/3{top:33.333333%}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:-mr-6{margin-right:-1.5rem}.xl\:ml-80{margin-left:20rem}.xl\:mt-0{margin-top:0}.xl\:mt-5{margin-top:1.25rem}.xl\:block{display:block}.xl\:grid{display:grid}.xl\:h-\[calc\(100vh-4\.75rem\)\]{height:calc(100vh - 4.75rem)}.xl\:w-80{width:20rem}.xl\:w-full{width:100%}.xl\:max-w-5xl{max-width:66rem}.xl\:max-w-none{max-width:none}.xl\:flex-none{flex:none}.xl\:\!grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:gap-1{gap:.25rem}.xl\:overflow-y-auto{overflow-y:auto}.xl\:p-10{padding:2.5rem}.xl\:py-0{padding-bottom:0;padding-top:0}.xl\:pr-6{padding-right:1.5rem}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:divide-gray-800:where(.dark,.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(31 41 55/var(--tw-divide-opacity))}.dark\:divide-white\/5:where(.dark,.dark *)>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.dark\:border-gray-800:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.dark\:border-indigo-300:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.dark\:border-lilac-500\/30:where(.dark,.dark *){border-color:#db5ad94d}.dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}.dark\:border-white\/5:where(.dark,.dark *){border-color:#ffffff0d}.dark\:border-zinc-100\/5:where(.dark,.dark *){border-color:#f4f4f50d}.dark\:border-zinc-800:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.dark\:border-b-white\/5:where(.dark,.dark *){border-bottom-color:#ffffff0d}.dark\:bg-black\/40:where(.dark,.dark *){background-color:#0006}.dark\:bg-emerald-400\/10:where(.dark,.dark *){background-color:#34d3991a}.dark\:bg-gray-400\/10:where(.dark,.dark *){background-color:#9ca3af1a}.dark\:bg-gray-600:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.dark\:bg-indigo-900:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.dark\:bg-lilac-500\/5:where(.dark,.dark *){background-color:#db5ad90d}.dark\:bg-mauve-400\/10:where(.dark,.dark *){background-color:#cc9dfb1a}.dark\:bg-transparent:where(.dark,.dark *){background-color:initial}.dark\:bg-white\/1:where(.dark,.dark *){background-color:#ffffff03}.dark\:bg-white\/10:where(.dark,.dark *){background-color:#ffffff1a}.dark\:bg-white\/2\.5:where(.dark,.dark *){background-color:hsla(0,0%,100%,.025)}.dark\:bg-white\/5:where(.dark,.dark *){background-color:#ffffff0d}.dark\:bg-white\/7\.5:where(.dark,.dark *){background-color:hsla(0,0%,100%,.075)}.dark\:bg-zinc-700:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark\:bg-zinc-800:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.dark\:bg-zinc-900:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.dark\:bg-zinc-900\/10:where(.dark,.dark *){background-color:#18181b1a}.dark\:bg-zinc-900\/\[var\(--bg-opacity-dark\)\]:where(.dark,.dark *){background-color:rgb(24 24 27/var(--bg-opacity-dark))}.dark\:fill-lilac-200\/20:where(.dark,.dark *){fill:#f7d6f833}.dark\:fill-mauve-200\/20:where(.dark,.dark *){fill:#ead6fe33}.dark\:fill-white:where(.dark,.dark *){fill:#fff}.dark\:fill-white\/10:where(.dark,.dark *){fill:#ffffff1a}.dark\:stroke-lilac-200:where(.dark,.dark *){stroke:#f7d6f8}.dark\:stroke-mauve-200:where(.dark,.dark *){stroke:#ead6fe}.dark\:stroke-white:where(.dark,.dark *){stroke:#fff}.dark\:stroke-zinc-400:where(.dark,.dark *){stroke:#a1a1aa}.dark\:text-emerald-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.dark\:text-gray-300:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark\:text-gray-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:text-gray-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:text-gray-700:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.dark\:text-gray-900:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.dark\:text-indigo-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.dark\:text-lilac-200:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(247 214 248/var(--tw-text-opacity))}.dark\:text-mauve-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(204 157 251/var(--tw-text-opacity))}.dark\:text-rose-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.dark\:text-white:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-zinc-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.dark\:text-zinc-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.dark\:ring-1:where(.dark,.dark *){--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)}.dark\:ring-inset:where(.dark,.dark *){--tw-ring-inset:inset}.dark\:ring-emerald-400\/20:where(.dark,.dark *){--tw-ring-color:#34d39933}.dark\:ring-gray-300:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.dark\:ring-gray-800:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.dark\:ring-mauve-400\/20:where(.dark,.dark *){--tw-ring-color:#cc9dfb33}.dark\:ring-white\/10:where(.dark,.dark *){--tw-ring-color:#ffffff1a}.dark\:ring-zinc-800:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.dark\:backdrop-blur:where(.dark,.dark *){--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.dark\:\[--tw-prose-links-hover\:theme\(colors\.lilac\.300\)\]:where(.dark,.dark *){--tw-prose-links-hover:#f3b9f3}.dark\:\[--tw-prose-links\:theme\(colors\.white\)\]:where(.dark,.dark *){--tw-prose-links:#fff}.dark\:placeholder\:text-gray-500:where(.dark,.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:where(.dark,.dark *)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:hover\:border-white\/10:hover:where(.dark,.dark *){border-color:#ffffff1a}.dark\:hover\:bg-emerald-400\/10:hover:where(.dark,.dark *){background-color:#34d3991a}.dark\:hover\:bg-gray-700:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:hover\:bg-gray-700\/50:hover:where(.dark,.dark *){background-color:#37415180}.dark\:hover\:bg-indigo-700:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.dark\:hover\:bg-mauve-400\/10:hover:where(.dark,.dark *){background-color:#cc9dfb1a}.dark\:hover\:bg-white\/20:hover:where(.dark,.dark *){background-color:#fff3}.dark\:hover\:bg-white\/5:hover:where(.dark,.dark *){background-color:#ffffff0d}.dark\:hover\:bg-zinc-800\/50:hover:where(.dark,.dark *){background-color:#27272a80}.dark\:hover\:bg-zinc-900:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.dark\:hover\:text-emerald-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.dark\:hover\:text-emerald-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.dark\:hover\:text-gray-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:hover\:text-indigo-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.dark\:hover\:text-mauve-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(217 181 253/var(--tw-text-opacity))}.dark\:hover\:text-mauve-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(166 88 244/var(--tw-text-opacity))}.dark\:hover\:text-white:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:dark\:text-gray-400:where(.dark,.dark *):hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:hover\:ring-emerald-300:hover:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.dark\:hover\:ring-mauve-300:hover:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(217 181 253/var(--tw-ring-opacity))}.dark\:hover\:ring-white\/20:hover:where(.dark,.dark *){--tw-ring-color:#fff3}.dark\:focus\:ring-indigo-500:focus:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.group:hover .dark\:group-hover\:fill-mauve-300\/10:where(.dark,.dark *){fill:#d9b5fd1a}.group:hover .dark\:group-hover\:fill-zinc-500:where(.dark,.dark *){fill:#71717a}.group:hover .dark\:group-hover\:stroke-mauve-400:where(.dark,.dark *){stroke:#cc9dfb}.group:hover .dark\:group-hover\:text-gray-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}@media (min-width:768px){.md\:dark\:bg-white\/15:where(.dark,.dark *){background-color:#ffffff26}}@media (min-width:1024px){.lg\:dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}}.\[\&\>\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\:last-child\]\:mb-0>:last-child{margin-bottom:0} \ No newline at end of file +/*! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}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,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);outline:2px solid #0000;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,::backdrop,:after,:before{--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-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--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:#3b82f680;--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: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-input,.form-multiselect,.form-select,.form-textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}.form-input:focus,.form-multiselect:focus,.form-select:focus,.form-textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}.prose{--tw-prose-body:#3f3f46;--tw-prose-headings:#18181b;--tw-prose-links:#7825cb;--tw-prose-links-hover:#6423a6;--tw-prose-links-underline:#a658f44d;--tw-prose-bold:#18181b;--tw-prose-counters:#71717a;--tw-prose-bullets:#d4d4d8;--tw-prose-hr:#18181b0d;--tw-prose-quotes:#18181b;--tw-prose-quote-borders:#e4e4e7;--tw-prose-captions:#71717a;--tw-prose-code:#18181b;--tw-prose-code-bg:#f4f4f5;--tw-prose-code-ring:#d4d4d8;--tw-prose-th-borders:#d4d4d8;--tw-prose-td-borders:#e4e4e7;--tw-prose-invert-body:#a1a1aa;--tw-prose-invert-headings:#fff;--tw-prose-invert-links:#cc9dfb;--tw-prose-invert-links-hover:#a658f4;--tw-prose-invert-links-underline:#a658f44d;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#a1a1aa;--tw-prose-invert-bullets:#52525b;--tw-prose-invert-hr:#ffffff0d;--tw-prose-invert-quotes:#f4f4f5;--tw-prose-invert-quote-borders:#3f3f46;--tw-prose-invert-captions:#a1a1aa;--tw-prose-invert-code:#fff;--tw-prose-invert-code-bg:#3f3f4626;--tw-prose-invert-code-ring:#ffffff1a;--tw-prose-invert-th-borders:#52525b;--tw-prose-invert-td-borders:#3f3f46;color:var(--tw-prose-body);font-size:.875rem;line-height:1.75rem}.prose :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.5rem;margin-top:1.5rem}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1rem;line-height:1.75rem}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25rem;margin-top:1.25rem;padding-left:1.625rem}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25rem;margin-top:1.25rem;padding-left:1.625rem}.prose :where(li):not(:where([class~=not-prose] *)){margin-bottom:.5rem;margin-top:.5rem}.prose :where(:is(ol,ul)>li):not(:where([class~=not-prose] *)){padding-left:.375rem}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.75rem;margin-top:.75rem}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25rem}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25rem}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25rem}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25rem}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.75rem;margin-top:.75rem}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin:4rem -1rem;max-width:none}@media (min-width:640px){.prose :where(hr):not(:where([class~=not-prose] *)){margin-left:-1.5rem;margin-right:-1.5rem}}@media (min-width:1024px){.prose :where(hr):not(:where([class~=not-prose] *)){margin-left:-2rem;margin-right:-2rem}}.prose :where(blockquote):not(:where([class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:2rem;margin-top:2rem;padding-left:1.25rem;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5rem;font-weight:700;line-height:2rem;margin-bottom:.5rem}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.125rem;font-weight:600;line-height:1.75rem;margin-bottom:.5rem;margin-top:4rem}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1rem;font-weight:600;line-height:1.75rem;margin-bottom:.5rem;margin-top:2.5rem}.prose :where(img,video,figure):not(:where([class~=not-prose] *)){margin-bottom:2rem;margin-top:2rem}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.8125rem;line-height:1.5rem;margin-top:.5rem}.prose :where(table):not(:where([class~=not-prose] *)){line-height:1.5rem;margin-bottom:2rem;margin-top:2rem;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5rem;padding-left:.5rem;padding-right:.5rem;vertical-align:bottom}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose :where(:is(tbody,tfoot) td):not(:where([class~=not-prose] *)){padding:.5rem}.prose :where(:is(tbody,tfoot) td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(:is(tbody,tfoot) td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition-duration:.15s;transition-property:color,text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.prose :where(a):not(:where([class~=not-prose] *)):hover{color:var(--tw-prose-links-hover);text-decoration-color:var(--tw-prose-links-underline)}.prose :where(:is(h1,h2,h3) a):not(:where([class~=not-prose] *)){font-weight:inherit}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(:is(a,blockquote,thead th) strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(code):not(:where([class~=not-prose] *)){background-color:var(--tw-prose-code-bg);border-radius:.5rem;box-shadow:inset 0 0 0 1px var(--tw-prose-code-ring);color:var(--tw-prose-code);font-size:.75rem;font-size:[object Object];padding:.25rem .375rem}.prose :where(:is(a,h1,h2,h3,blockquote,thead th) code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){font-size:1rem;font-weight:inherit}.prose :where(h3 code):not(:where([class~=not-prose] *)){font-size:.875rem;font-weight:inherit}.prose :where(:is(h1,h2,h3)+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0!important}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0!important}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.-inset-1{inset:-.25rem}.-inset-1\.5{inset:-.375rem}.inset-0{inset:0}.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.-top-40{top:-10rem}.bottom-0{bottom:0}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-\[calc\(50\%\+3rem\)\]{left:calc(50% + 3rem)}.left-\[calc\(50\%-11rem\)\]{left:calc(50% - 11rem)}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-20{top:5rem}.top-3{top:.75rem}.top-3\.5{top:.875rem}.top-4{top:1rem}.top-\[calc\(100\%-13rem\)\]{top:calc(100% - 13rem)}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-\[999\]{z-index:999}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-full{grid-column:1/-1}.col-start-2{grid-column-start:2}.col-start-6{grid-column-start:6}.float-start{float:inline-start}.float-end{float:inline-end}.-m-2{margin:-.5rem}.-m-2\.5{margin:-.625rem}.m-0{margin:0}.m-1{margin:.25rem}.m-4{margin:1rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-1\.5{margin-left:-.375rem;margin-right:-.375rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.-my-1\.5{margin-bottom:-.375rem;margin-top:-.375rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-bottom:.25rem;margin-top:.25rem}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-24{margin-bottom:6rem;margin-top:6rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-32{margin-bottom:8rem;margin-top:8rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.-mb-px{margin-bottom:-1px}.-ml-1{margin-left:-.25rem}.-ml-px{margin-left:-1px}.-mr-1{margin-right:-.25rem}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.me-1{margin-inline-end:.25rem}.me-2{margin-inline-end:.5rem}.me-3{margin-inline-end:.75rem}.me-auto{margin-inline-end:auto}.ml-1{margin-left:.25rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-2{margin-right:.5rem}.mr-5{margin-right:1.25rem}.mr-auto{margin-right:auto}.ms-1{margin-inline-start:.25rem}.ms-2{margin-inline-start:.5rem}.ms-3{margin-inline-start:.75rem}.ms-4{margin-inline-start:1rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-20{margin-top:5rem}.mt-24{margin-top:6rem}.mt-3{margin-top:.75rem}.mt-32{margin-top:8rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[1108\/632\]{aspect-ratio:1108/632}.aspect-\[1155\/678\]{aspect-ratio:1155/678}.size-4{height:1rem;width:1rem}.size-5{height:1.25rem;width:1.25rem}.h-0{height:0}.h-0\.5{height:.125rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-12{max-height:3rem}.min-h-\[calc\(theme\(spacing\.12\)\+1px\)\]{min-height:calc(3rem + 1px)}.min-h-full{min-height:100%}.w-0{width:0}.w-0\.5{width:.125rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-3\/4{width:75%}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-8{width:2rem}.w-\[36\.125rem\]{width:36.125rem}.w-\[69\.25rem\]{width:69.25rem}.w-\[72\.1875rem\]{width:72.1875rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-full{min-width:100%}.max-w-2xl{max-width:40rem}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-top-right{transform-origin:top right}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.-translate-y-1\.5,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x:1.25rem}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-1,.translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\.5{--tw-translate-y:0.375rem}.rotate-180{--tw-rotate:180deg}.rotate-180,.rotate-\[30deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-\[30deg\]{--tw-rotate:30deg}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\!cursor-not-allowed{cursor:not-allowed!important}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.scroll-mt-24{scroll-margin-top:6rem}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[1fr\2c 1px\2c 1fr\]{grid-template-columns:1fr 1px 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.gap-x-16{-moz-column-gap:4rem;column-gap:4rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-10{row-gap:2.5rem}.gap-y-12{row-gap:3rem}.gap-y-20{row-gap:5rem}.gap-y-4{row-gap:1rem}.gap-y-8{row-gap:2rem}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.space-x-5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.25rem*var(--tw-space-x-reverse))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2.5rem*var(--tw-space-y-reverse));margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-16>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(4rem*var(--tw-space-y-reverse));margin-top:calc(4rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-gray-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(243 244 246/var(--tw-divide-opacity))}.divide-gray-900\/10>:not([hidden])~:not([hidden]){border-color:#1118271a}.divide-zinc-900\/5>:not([hidden])~:not([hidden]){border-color:#18181b0d}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.\!border{border-width:1px!important}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-4{border-left-width:4px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-900\/5{border-color:#1118270d}.border-indigo-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-lilac-500\/20{border-color:#db5ad933}.border-mauve-500{--tw-border-opacity:1;border-color:rgb(166 88 244/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.border-yellow-400{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity))}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity))}.border-zinc-700{--tw-border-opacity:1;border-color:rgb(63 63 70/var(--tw-border-opacity))}.border-zinc-900\/10{border-color:#18181b1a}.border-zinc-900\/5{border-color:#18181b0d}.border-b-white\/7\.5{border-bottom-color:hsla(0,0%,100%,.075)}.border-l-mauve-500{--tw-border-opacity:1;border-left-color:rgb(166 88 244/var(--tw-border-opacity))}.border-t-transparent{border-top-color:#0000}.\!bg-indigo-50{--tw-bg-opacity:1!important;background-color:rgb(238 242 255/var(--tw-bg-opacity))!important}.\!bg-indigo-600{--tw-bg-opacity:1!important;background-color:rgb(79 70 229/var(--tw-bg-opacity))!important}.\!bg-transparent{background-color:initial!important}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-lilac-50\/50{background-color:#fdf5fe80}.bg-mauve-400\/10{background-color:#cc9dfb1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/2\.5{background-color:hsla(0,0%,100%,.025)}.bg-white\/5{background-color:#ffffff0d}.bg-white\/\[var\(--bg-opacity-light\)\]{background-color:rgb(255 255 255/var(--bg-opacity-light))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-zinc-400\/25{background-color:#a1a1aa40}.bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.bg-zinc-500{--tw-bg-opacity:1;background-color:rgb(113 113 122/var(--tw-bg-opacity))}.bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.bg-zinc-900\/10{background-color:#18181b1a}.bg-zinc-900\/7\.5{background-color:rgba(24,24,27,.075)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-\[\#ff80b5\]{--tw-gradient-from:#ff80b5 var(--tw-gradient-from-position);--tw-gradient-to:#ff80b500 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-\[\#9089fc\]{--tw-gradient-to:#9089fc var(--tw-gradient-to-position)}.fill-emerald-400{fill:#34d399}.fill-gray-900{fill:#111827}.fill-lilac-500{fill:#db5ad9}.fill-mauve-500{fill:#a658f4}.fill-zinc-500\/20{fill:#71717a33}.fill-zinc-700{fill:#3f3f46}.fill-zinc-700\/10{fill:#3f3f461a}.fill-zinc-900{fill:#18181b}.stroke-current{stroke:currentColor}.stroke-white{stroke:#fff}.stroke-zinc-500{stroke:#71717a}.stroke-zinc-700{stroke:#3f3f46}.stroke-zinc-900{stroke:#18181b}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-16{padding-bottom:4rem;padding-top:4rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-24{padding-bottom:6rem;padding-top:6rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-32{padding-bottom:8rem;padding-top:8rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-8{padding-bottom:2rem}.pe-2{padding-inline-end:.5rem}.pe-20{padding-inline-end:5rem}.pe-4{padding-inline-end:1rem}.pe-6{padding-inline-end:1.5rem}.pl-10{padding-left:2.5rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-7{padding-left:1.75rem}.pr-0{padding-right:0}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pr-6{padding-right:1.5rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-10{padding-top:2.5rem}.pt-14{padding-top:3.5rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-start{text-align:start}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.\!text-sm{font-size:.875rem!important;line-height:1.5rem!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-2xs{font-size:.75rem;line-height:1.25rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.625rem\]{font-size:.625rem}.text-base{font-size:1rem;line-height:1.75rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.8125rem;line-height:1.5rem}.\!font-semibold{font-weight:600!important}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.capitalize{text-transform:capitalize}.italic{font-style:italic}.not-italic{font-style:normal}.leading-10{line-height:2.5rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.tracking-tight{letter-spacing:-.025em}.\!text-indigo-600{--tw-text-opacity:1!important;color:rgb(79 70 229/var(--tw-text-opacity))!important}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-lilac-900{--tw-text-opacity:1;color:rgb(106 37 100/var(--tw-text-opacity))}.text-mauve-400{--tw-text-opacity:1;color:rgb(204 157 251/var(--tw-text-opacity))}.text-mauve-500{--tw-text-opacity:1;color:rgb(166 88 244/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity))}.text-zinc-700{--tw-text-opacity:1;color:rgb(63 63 70/var(--tw-text-opacity))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.\!shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d!important;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{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 #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--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-zinc-900\/10{--tw-shadow-color:#18181b1a;--tw-shadow:var(--tw-shadow-colored)}.outline-none{outline:2px solid #0000;outline-offset:2px}.ring-0{--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(var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-0,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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)}.ring-2{--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)}.ring-2,.ring-8{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-8{--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(8px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-inset{--tw-ring-inset:inset}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-gray-200{--tw-ring-opacity:1;--tw-ring-color:rgb(229 231 235/var(--tw-ring-opacity))}.ring-gray-300{--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.ring-gray-500\/10{--tw-ring-color:#6b72801a}.ring-gray-900\/10{--tw-ring-color:#1118271a}.ring-gray-900\/5{--tw-ring-color:#1118270d}.ring-green-600\/10{--tw-ring-color:#16a34a1a}.ring-indigo-200{--tw-ring-opacity:1;--tw-ring-color:rgb(199 210 254/var(--tw-ring-opacity))}.ring-indigo-500{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.ring-indigo-600{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.ring-mauve-400\/20{--tw-ring-color:#cc9dfb33}.ring-transparent{--tw-ring-color:#0000}.ring-zinc-900\/10{--tw-ring-color:#18181b1a}.ring-zinc-900\/7\.5{--tw-ring-color:rgba(24,24,27,.075)}.ring-opacity-5{--tw-ring-opacity:0.05}.blur-3xl{--tw-blur:blur(64px)}.blur-3xl,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px)}.backdrop-blur,.backdrop-blur-sm{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-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-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.dark\:prose-invert:where(.dark,.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-links-hover:var(--tw-prose-invert-links-hover);--tw-prose-links-underline:var(--tw-prose-invert-links-underline);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-code-bg:var(--tw-prose-invert-code-bg);--tw-prose-code-ring:var(--tw-prose-invert-code-ring);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.placeholder\:text-gray-400::-moz-placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-gray-400::placeholder{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.placeholder\:text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.placeholder\:text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.empty\:hidden:empty{display:none}.hover\:border-gray-300:hover{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-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\:bg-green-100:hover{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.hover\:bg-indigo-100:hover{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.hover\:bg-indigo-500:hover{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.hover\:bg-white\/7\.5:hover{background-color:hsla(0,0%,100%,.075)}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-zinc-50:hover{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity))}.hover\:bg-zinc-700:hover{--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.hover\:bg-zinc-900\/2\.5:hover{background-color:rgba(24,24,27,.025)}.hover\:bg-zinc-900\/5:hover{background-color:#18181b0d}.hover\:text-emerald-600:hover{--tw-text-opacity:1;color:rgb(5 150 105/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-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-indigo-200:hover{--tw-text-opacity:1;color:rgb(199 210 254/var(--tw-text-opacity))}.hover\:text-indigo-500:hover{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.hover\:text-indigo-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-inherit:hover{color:inherit}.hover\:text-mauve-600:hover{--tw-text-opacity:1;color:rgb(142 54 231/var(--tw-text-opacity))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity))}.hover\:ring-gray-900\/20:hover{--tw-ring-color:#11182733}.hover\:ring-indigo-300:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(165 180 252/var(--tw-ring-opacity))}.hover\:ring-zinc-900\/20:hover{--tw-ring-color:#18181b33}.focus\:w-full:focus{width:100%}.focus\:flex-none:focus{flex:none}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-1: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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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)}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus\:ring-green-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(22 163 74/var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.focus\:ring-indigo-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(79 70 229/var(--tw-ring-opacity))}.focus\:ring-yellow-600:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(202 138 4/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-offset-green-50:focus{--tw-ring-offset-color:#f0fdf4}.focus\:ring-offset-yellow-50:focus{--tw-ring-offset-color:#fefce8}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-indigo-200:focus-visible{outline-color:#c7d2fe}.focus-visible\:outline-indigo-600:focus-visible{outline-color:#4f46e5}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:#0000}.group:hover .group-hover\:fill-zinc-900{fill:#18181b}.group\/button:hover .group-hover\/button\:stroke-zinc-400{stroke:#a1a1aa}.group:hover .group-hover\:stroke-zinc-900{stroke:#18181b}.group:hover .group-hover\:text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.group:hover .group-hover\:text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:416px){.min-\[416px\]\:contents{display:contents}.min-\[416px\]\:max-w-sm{max-width:24rem}}@media (min-width:640px){.sm\:-top-80{top:-20rem}.sm\:bottom-0{bottom:0}.sm\:left-\[calc\(50\%\+36rem\)\]{left:calc(50% + 36rem)}.sm\:left-\[calc\(50\%-30rem\)\]{left:calc(50% - 30rem)}.sm\:right-\[calc\(50\%-6rem\)\]{right:calc(50% - 6rem)}.sm\:top-\[calc\(100\%-30rem\)\]{top:calc(100% - 30rem)}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-start-2{grid-column-start:2}.sm\:col-start-auto{grid-column-start:auto}.sm\:-my-px{margin-bottom:-1px;margin-top:-1px}.sm\:mx-auto{margin-left:auto;margin-right:auto}.sm\:my-56{margin-bottom:14rem;margin-top:14rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:mt-0{margin-top:0}.sm\:mt-20{margin-top:5rem}.sm\:mt-32{margin-top:8rem}.sm\:mt-56{margin-top:14rem}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:w-64{width:16rem}.sm\:w-\[72\.1875rem\]{width:72.1875rem}.sm\:w-full{width:100%}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-\[480px\]{max-width:480px}.sm\:max-w-md{max-width:28rem}.sm\:max-w-xl{max-width:36rem}.sm\:flex-none{flex:none}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:transform-gpu{transform:translate3d(var(--tw-translate-x),var(--tw-translate-y),0) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:gap-4{gap:1rem}.sm\:gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.sm\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.sm\:gap-y-14{row-gap:3.5rem}.sm\:gap-y-16{row-gap:4rem}.sm\:space-x-8>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(2rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(2rem*var(--tw-space-x-reverse))}.sm\:space-y-20>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(5rem*var(--tw-space-y-reverse));margin-top:calc(5rem*(1 - var(--tw-space-y-reverse)))}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-20{padding-bottom:5rem;padding-top:5rem}.sm\:py-32{padding-bottom:8rem;padding-top:8rem}.sm\:py-48{padding-bottom:12rem;padding-top:12rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pl-0{padding-left:0}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-5xl{font-size:3rem;line-height:1}.sm\:text-6xl{font-size:3.75rem;line-height:1}.sm\:text-sm{font-size:.875rem}.sm\:leading-6,.sm\:text-sm{line-height:1.5rem}.sm\:leading-9{line-height:2.25rem}}@media (min-width:768px){.md\:visible{visibility:visible}.md\:col-span-2{grid-column:span 2/span 2}.md\:mx-0{margin-left:0;margin-right:0}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:inline{display:inline}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:h-5{height:1.25rem}.md\:w-px{width:1px}.md\:max-w-2xl{max-width:40rem}.md\:max-w-none{max-width:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:justify-start{justify-content:flex-start}.md\:gap-8{gap:2rem}.md\:bg-zinc-900\/10{background-color:#18181b1a}.md\:py-32{padding-bottom:8rem;padding-top:8rem}}@media (min-width:1024px){.lg\:pointer-events-auto{pointer-events:auto}.lg\:fixed{position:fixed}.lg\:inset-0{inset:0}.lg\:z-30{z-index:30}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:col-span-5{grid-column:span 5/span 5}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:ml-72{margin-left:18rem}.lg\:mt-0{margin-top:0}.lg\:mt-10{margin-top:2.5rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-72{width:18rem}.lg\:w-full{width:100%}.lg\:min-w-60{min-width:15rem}.lg\:max-w-2xl{max-width:40rem}.lg\:max-w-4xl{max-width:56rem}.lg\:max-w-5xl{max-width:66rem}.lg\:max-w-7xl{max-width:80rem}.lg\:max-w-md{max-width:28rem}.lg\:max-w-none{max-width:none}.lg\:flex-auto{flex:1 1 auto}.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\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:justify-center{justify-content:center}.lg\:gap-8{gap:2rem}.lg\:gap-y-16{row-gap:4rem}.lg\:overflow-y-auto{overflow-y:auto}.lg\:border-r{border-right-width:1px}.lg\:border-zinc-900\/10{border-color:#18181b1a}.lg\:p-4{padding:1rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-40{padding-bottom:10rem;padding-top:10rem}.lg\:py-\[15vh\]{padding-bottom:15vh;padding-top:15vh}.lg\:pb-8{padding-bottom:2rem}.lg\:pt-14{padding-top:3.5rem}.lg\:text-center{text-align:center}}@media (min-width:1280px){.xl\:sticky{position:sticky}.xl\:top-1\/3{top:33.333333%}.xl\:col-span-2{grid-column:span 2/span 2}.xl\:col-span-3{grid-column:span 3/span 3}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:-mr-6{margin-right:-1.5rem}.xl\:ml-80{margin-left:20rem}.xl\:mt-0{margin-top:0}.xl\:mt-5{margin-top:1.25rem}.xl\:block{display:block}.xl\:grid{display:grid}.xl\:h-\[calc\(100vh-4\.75rem\)\]{height:calc(100vh - 4.75rem)}.xl\:w-80{width:20rem}.xl\:w-full{width:100%}.xl\:max-w-5xl{max-width:66rem}.xl\:max-w-none{max-width:none}.xl\:flex-none{flex:none}.xl\:\!grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))!important}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:gap-1{gap:.25rem}.xl\:overflow-y-auto{overflow-y:auto}.xl\:p-10{padding:2.5rem}.xl\:py-0{padding-bottom:0;padding-top:0}.xl\:pr-6{padding-right:1.5rem}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:divide-gray-800:where(.dark,.dark *)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(31 41 55/var(--tw-divide-opacity))}.dark\:divide-white\/5:where(.dark,.dark *)>:not([hidden])~:not([hidden]){border-color:#ffffff0d}.dark\:border:where(.dark,.dark *){border-width:1px}.dark\:border-gray-800:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity))}.dark\:border-indigo-300:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(165 180 252/var(--tw-border-opacity))}.dark\:border-lilac-500\/30:where(.dark,.dark *){border-color:#db5ad94d}.dark\:border-white:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}.dark\:border-white\/5:where(.dark,.dark *){border-color:#ffffff0d}.dark\:border-zinc-100\/5:where(.dark,.dark *){border-color:#f4f4f50d}.dark\:border-zinc-800:where(.dark,.dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity))}.dark\:border-b-white\/5:where(.dark,.dark *){border-bottom-color:#ffffff0d}.dark\:bg-black\/40:where(.dark,.dark *){background-color:#0006}.dark\:bg-emerald-400\/10:where(.dark,.dark *){background-color:#34d3991a}.dark\:bg-gray-400\/10:where(.dark,.dark *){background-color:#9ca3af1a}.dark\:bg-gray-600:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.dark\:bg-indigo-900:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(49 46 129/var(--tw-bg-opacity))}.dark\:bg-lilac-500\/5:where(.dark,.dark *){background-color:#db5ad90d}.dark\:bg-mauve-400\/10:where(.dark,.dark *){background-color:#cc9dfb1a}.dark\:bg-transparent:where(.dark,.dark *){background-color:initial}.dark\:bg-white\/1:where(.dark,.dark *){background-color:#ffffff03}.dark\:bg-white\/10:where(.dark,.dark *){background-color:#ffffff1a}.dark\:bg-white\/2\.5:where(.dark,.dark *){background-color:hsla(0,0%,100%,.025)}.dark\:bg-white\/5:where(.dark,.dark *){background-color:#ffffff0d}.dark\:bg-white\/7\.5:where(.dark,.dark *){background-color:hsla(0,0%,100%,.075)}.dark\:bg-zinc-700:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(63 63 70/var(--tw-bg-opacity))}.dark\:bg-zinc-800:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity))}.dark\:bg-zinc-900:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.dark\:bg-zinc-900\/10:where(.dark,.dark *){background-color:#18181b1a}.dark\:bg-zinc-900\/\[var\(--bg-opacity-dark\)\]:where(.dark,.dark *){background-color:rgb(24 24 27/var(--bg-opacity-dark))}.dark\:fill-lilac-200\/20:where(.dark,.dark *){fill:#f7d6f833}.dark\:fill-mauve-200\/20:where(.dark,.dark *){fill:#ead6fe33}.dark\:fill-white:where(.dark,.dark *){fill:#fff}.dark\:fill-white\/10:where(.dark,.dark *){fill:#ffffff1a}.dark\:stroke-lilac-200:where(.dark,.dark *){stroke:#f7d6f8}.dark\:stroke-mauve-200:where(.dark,.dark *){stroke:#ead6fe}.dark\:stroke-white:where(.dark,.dark *){stroke:#fff}.dark\:stroke-zinc-400:where(.dark,.dark *){stroke:#a1a1aa}.dark\:text-emerald-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}.dark\:text-gray-300:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark\:text-gray-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:text-gray-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:text-gray-600:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.dark\:text-gray-700:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.dark\:text-gray-900:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.dark\:text-indigo-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.dark\:text-lilac-200:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(247 214 248/var(--tw-text-opacity))}.dark\:text-mauve-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(204 157 251/var(--tw-text-opacity))}.dark\:text-rose-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(244 63 94/var(--tw-text-opacity))}.dark\:text-white:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:text-zinc-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity))}.dark\:text-zinc-500:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity))}.dark\:ring-1:where(.dark,.dark *){--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)}.dark\:ring-inset:where(.dark,.dark *){--tw-ring-inset:inset}.dark\:ring-emerald-400\/20:where(.dark,.dark *){--tw-ring-color:#34d39933}.dark\:ring-gray-300:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(209 213 219/var(--tw-ring-opacity))}.dark\:ring-gray-800:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(31 41 55/var(--tw-ring-opacity))}.dark\:ring-mauve-400\/20:where(.dark,.dark *){--tw-ring-color:#cc9dfb33}.dark\:ring-white\/10:where(.dark,.dark *){--tw-ring-color:#ffffff1a}.dark\:ring-zinc-800:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42/var(--tw-ring-opacity))}.dark\:backdrop-blur:where(.dark,.dark *){--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.dark\:\[--tw-prose-links-hover\:theme\(colors\.lilac\.300\)\]:where(.dark,.dark *){--tw-prose-links-hover:#f3b9f3}.dark\:\[--tw-prose-links\:theme\(colors\.white\)\]:where(.dark,.dark *){--tw-prose-links:#fff}.dark\:placeholder\:text-gray-500:where(.dark,.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:placeholder\:text-gray-500:where(.dark,.dark *)::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:hover\:border-white\/10:hover:where(.dark,.dark *){border-color:#ffffff1a}.dark\:hover\:bg-emerald-400\/10:hover:where(.dark,.dark *){background-color:#34d3991a}.dark\:hover\:bg-gray-700:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:hover\:bg-gray-700\/50:hover:where(.dark,.dark *){background-color:#37415180}.dark\:hover\:bg-indigo-700:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.dark\:hover\:bg-mauve-400\/10:hover:where(.dark,.dark *){background-color:#cc9dfb1a}.dark\:hover\:bg-white\/20:hover:where(.dark,.dark *){background-color:#fff3}.dark\:hover\:bg-white\/5:hover:where(.dark,.dark *){background-color:#ffffff0d}.dark\:hover\:bg-zinc-800\/50:hover:where(.dark,.dark *){background-color:#27272a80}.dark\:hover\:bg-zinc-900:hover:where(.dark,.dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity))}.hover\:dark\:bg-gray-500:where(.dark,.dark *):hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.dark\:hover\:text-emerald-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}.dark\:hover\:text-emerald-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity))}.dark\:hover\:text-gray-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.dark\:hover\:text-indigo-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.dark\:hover\:text-mauve-300:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(217 181 253/var(--tw-text-opacity))}.dark\:hover\:text-mauve-500:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(166 88 244/var(--tw-text-opacity))}.dark\:hover\:text-white:hover:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:dark\:text-gray-400:where(.dark,.dark *):hover{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:hover\:ring-emerald-300:hover:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.dark\:hover\:ring-mauve-300:hover:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(217 181 253/var(--tw-ring-opacity))}.dark\:hover\:ring-white\/20:hover:where(.dark,.dark *){--tw-ring-color:#fff3}.dark\:focus\:ring-indigo-500:focus:where(.dark,.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.group:hover .dark\:group-hover\:fill-mauve-300\/10:where(.dark,.dark *){fill:#d9b5fd1a}.group:hover .dark\:group-hover\:fill-zinc-500:where(.dark,.dark *){fill:#71717a}.group:hover .dark\:group-hover\:stroke-mauve-400:where(.dark,.dark *){stroke:#cc9dfb}.group:hover .dark\:group-hover\:text-gray-400:where(.dark,.dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}@media (min-width:768px){.md\:dark\:bg-white\/15:where(.dark,.dark *){background-color:#ffffff26}}@media (min-width:1024px){.lg\:dark\:border-white\/10:where(.dark,.dark *){border-color:#ffffff1a}}.\[\&\>\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\:last-child\]\:mb-0>:last-child{margin-bottom:0} \ No newline at end of file diff --git a/app/jobs/importer/get_api_fields_job.rb b/app/jobs/importer/get_api_fields_job.rb new file mode 100644 index 00000000..fd9e8321 --- /dev/null +++ b/app/jobs/importer/get_api_fields_job.rb @@ -0,0 +1,12 @@ +module Importer + class GetApiFieldsJob < ApplicationJob + include Sidekiq::Status::Worker + + queue_as :importers + sidekiq_options retry: false + + def perform(job) + Importer::GetApiFields.call(job) + end + end +end diff --git a/app/models/concerns/ats/greenhouse/application_fields.rb b/app/models/concerns/ats/greenhouse/application_fields.rb index a7973564..c543b263 100644 --- a/app/models/concerns/ats/greenhouse/application_fields.rb +++ b/app/models/concerns/ats/greenhouse/application_fields.rb @@ -2,265 +2,8 @@ module Ats module Greenhouse module ApplicationFields def get_application_criteria(job, _data) - job.application_criteria = CORE_FIELDS - # GetForm.perform + job.application_criteria = Importer::GetApiFields.call end - - CORE_FIELDS = { - first_name: { - interaction: :input, - locators: 'first_name', - required: true, - label: 'First Name', - core_field: true - }, - last_name: { - interaction: :input, - locators: 'last_name', - required: true, - label: 'Last Name', - core_field: true - }, - email: { - interaction: :input, - locators: 'email', - required: true, - label: 'Email', - core_field: true - }, - phone_number: { - interaction: :input, - locators: 'phone', - required: true, - label: 'Phone', - core_field: true - }, - city: { - interaction: :input, - locators: 'location', - required: false, - label: 'Location (City)', - core_field: true - }, - resume: { - interaction: :upload, - locators: 'button[aria-describedby="resume-allowable-file-types"', - required: true, - label: 'Resume/CV', - core_field: true - }, - cover_letter_: { - interaction: :upload, - locators: 'button[aria-describedby="cover_letter-allowable-file-types"]', - required: true, - label: 'Cover Letter', - core_field: true - } - } - - ADDITIONAL_FIELDS = { - school: { - interaction: :select, - locators: 's2id_education_school_name_0', - required: true, - placeholder: 'Select a School', - data_url: 'https://boards-api.greenhouse.io/v1/boards/phonepe/education/schools', - label: 'School', - core_field: false - }, - degree: { - interaction: :select, - locators: 's2id_education_degree_0', - required: false, - label: 'Degree', - core_field: false - }, - discipline: { - interaction: :select, - locators: 's2id_education_discipline_0', - required: false, - label: 'Discipline', - core_field: false - }, - ed_start_date_year: { - interaction: :input, - locators: 'job_application[educations][][start_date][year]', - required: true, - label: 'Education Start Date Year', - core_field: false - }, - ed_end_date_year: { - interaction: :input, - locators: 'job_application[educations][][end_date][year]', - required: true, - label: 'Education End Date Year', - core_field: false - }, - company_name: { - interaction: :input, - locators: 'job_application[employments][][company_name]', - required: true, - label: 'Company Name', - core_field: false - }, - title: { - interaction: :input, - locators: 'job_application[employments][][title]', - required: true, - label: 'Title', - core_field: false - }, - emp_start_date_month: { - interaction: :input, - locators: 'job_application[employments][][start_date][month]', - required: true, - label: 'Employment Start Date Month', - core_field: false - }, - emp_start_date_year: { - interaction: :input, - locators: 'job_application[employments][][start_date][year]', - required: true, - label: 'Employment Start Date Year', - core_field: false - }, - emp_end_date_month: { - interaction: :input, - locators: 'job_application[employments][][end_date][month]', - required: true, - label: 'Employment End Date Month', - core_field: false - }, - emp_end_date_year: { - interaction: :input, - locators: 'job_application[employments][][end_date][year]', - required: true, - label: 'Employment End Date Year', - core_field: false - }, - linkedin_profile: { - interaction: :input, - locators: 'input[autocomplete="custom-question-linkedin-profile"]', - required: false, - label: 'LinkedIn Profile', - core_field: false - }, - personal_website: { - interaction: :input, - locators: 'input[autocomplete="custom-question-website"], input[autocomplete="custom-question-portfolio-linkwebsite"]', - required: false, - label: 'Personal Website', - core_field: false - }, - gender: { - interaction: :input, - locators: 'input[autocomplete="custom-question-website"], input[autocomplete="custom-question-portfolio-linkwebsite"]', - required: false, - label: 'Gender', - core_field: false - } - # location_click: { - # interaction: :listbox, - # locators: 'ul#location_autocomplete-items-popup' - # }, - - # heard_from: { - # interaction: :input, - # locators: 'input[autocomplete="custom-question-how-did-you-hear-about-this-job"]' - # }, - # require_visa?: { - # interaction: :input, - # locators: 'textarea[autocomplete="custom-question-would-you-need-sponsorship-to-work-in-the-uk-"]' - # }, - } - - DEGREE_OPTIONS = [ - "High School", - "Associate's Degree", - "Bachelor's Degree", - "Master's Degree", - "Master of Business Administration (M.B.A.)", - "Juris Doctor (J.D.)", - "Doctor of Medicine (M.D.)", - "Doctor of Philosophy (Ph.D.)", - "Engineer's Degree", - "Other" - ] - - DISCIPLINE_OPTIONS = [ - "Accounting", - "African Studies", - "Agriculture", - "Anthropology", - "Applied Health Services", - "Architecture", - "Art", - "Asian Studies", - "Biology", - "Business", - "Business Administration", - "Chemistry", - "Classical Languages", - "Communications & Film", - "Computer Science", - "Dentistry", - "Developing Nations", - "Discipline Unknown", - "Earth Sciences", - "Economics", - "Education", - "Electronics", - "Engineering", - "English Studies", - "Environmental Studies", - "European Studies", - "Fashion", - "Finance", - "Fine Arts", - "General Studies", - "Health Services", - "History", - "Human Resources Management", - "Humanities", - "Industrial Arts & Carpentry", - "Information Systems", - "International Relations", - "Journalism", - "Languages", - "Latin American Studies", - "Law", - "Linguistics", - "Manufacturing & Mechanics", - "Mathematics", - "Medicine", - "Middle Eastern Studies", - "Naval Science", - "North American Studies", - "Nuclear Technics", - "Operations Research & Strategy", - "Organizational Theory", - "Philosophy", - "Physical Education", - "Physical Sciences", - "Physics", - "Political Science", - "Psychology", - "Public Policy", - "Public Service", - "Religious Studies", - "Russian & Soviet Studies", - "Scandinavian Studies", - "Science", - "Slavic Studies", - "Social Science", - "Social Sciences", - "Sociology", - "Speech", - "Statistics & Decision Theory", - "Urban Studies", - "Veterinary Medicine", - "Other" - ] end end end diff --git a/app/services/faraday_helpers.rb b/app/services/faraday_helpers.rb index 51c79e41..0d0d62a9 100644 --- a/app/services/faraday_helpers.rb +++ b/app/services/faraday_helpers.rb @@ -51,4 +51,8 @@ def stream_xml_data(body) def log_error(message) Rails.logger.error(message) end + + def pretty_generate(json) + JSON.pretty_generate(json) + end end diff --git a/app/services/importer/get_api_fields.rb b/app/services/importer/get_api_fields.rb new file mode 100644 index 00000000..9580f7db --- /dev/null +++ b/app/services/importer/get_api_fields.rb @@ -0,0 +1,56 @@ +module Importer + # Core class for getting form fields directly from the API + # Splits based on category of fields - main, custom, demographic, eeoc + # Known Issues - Building the checkbox logic for the data_compliance section + # Allowable file types (Greenhouse): (File types: pdf, doc, docx, txt, rtf) + # NB. Must include all params to get additional fields from the API + class GetApiFields < ApplicationTask + include FaradayHelpers + + def initialize + # @job = job + # @url = @job.api_url + @url = "https://boards-api.greenhouse.io/v1/boards/cleoai/jobs/4628944002" + # @url = "https://boards-api.greenhouse.io/v1/boards/cleoai/jobs/7301308002" + # @url = "https://boards-api.greenhouse.io/v1/boards/monzo/jobs/6076740" + # @url = "https://boards-api.greenhouse.io/v1/boards/axios/jobs/6009256" + # @url = "https://boards-api.greenhouse.io/v1/boards/11fs/jobs/4060453101" + # @url = "https://boards-api.greenhouse.io/v1/boards/forter/jobs/7259821002" + # @url = "https://boards-api.greenhouse.io/v1/boards/cleoai/jobs/4628944002" + @url += "?questions=true&location_questions=true&demographic_questions=true&&compliance=true&pay_transparency=true" + # @ats_sections = %w[main_fields custom_fields demographic_questions eeoc_fields data_compliance security_code_fields] + @fields = {} + @errors = false + end + + def call + return unless processable + + process + rescue StandardError => e + Rails.logger.error "Error running GetFormFields: #{e.message}" + nil + end + + private + + def processable + @url # && @job + end + + def process + p "Hello from GetApiFields!" + + json = fetch_json(@url) + return unless json + + @fields['main_fields'] = json['questions'] + @fields['demographic_questions'] = json['demographic_questions'] + @fields['location_questions'] = json['location_questions'] + @fields['data_compliance'] = json['data_compliance'] + + puts pretty_generate(@fields) + @fields + end + end +end diff --git a/app/services/importer/get_form_fields.rb b/app/services/importer/get_form_fields.rb index 2a999b33..cf91a9c7 100644 --- a/app/services/importer/get_form_fields.rb +++ b/app/services/importer/get_form_fields.rb @@ -1,15 +1,29 @@ -require 'nokogiri' -require 'open-uri' - module Importer - # Core class for getting form fields using Nokogiri/Capybara - # NB. Only scrapes extra fields and combines those with the standard set of Greenhouse fields at the moment - # TODO: Add routing logic - in future will route to either NokoFields / CapyFields or ApiFields depending on the ATS + # Core class for getting form fields using Nokogiri + # Scrapes all fields from the form (including core fields); excludes dev-field-1, hidden fields + # Splits based on category of fields - main, custom, demographic, eeoc + # Notes - In a standard greenhouse form, every field exists within a field tag + # Known Issues - Candidate Privacy Notice. Individual checkboxes. Identifying multi- vs single-select dropdowns. Embedded / custom job-boards + # NB. This will not pull all the fields if there is an additional section not listed in @ats_sections + # Allowable file types (Greenhouse): (File types: pdf, doc, docx, txt, rtf) + # Instructions: + # 1. Parse the HTML of the job posting + # 2. Parse the form from the HTML (check for application form) + # 3. Split by fields, get the labels (questions) + # 3. Get the inputs relating to the question (input, textarea, select) + # 5. Get the values for each input class GetFormFields < ApplicationTask def initialize # @job = job # @url = @job.posting_url - @url = "https://job-boards.greenhouse.io/monzo/jobs/6076740" + # @url = "https://boards.greenhouse.io/cleoai/jobs/4628944002" + @url = "https://boards.greenhouse.io/cleoai/jobs/7301308002" + # @url = "https://boards.greenhouse.io/axios/jobs/6009256#app" + # @url = "https://boards.greenhouse.io/11fs/jobs/4060453101" + # @url = "https://boards.greenhouse.io/forter/jobs/7259821002" + @ats_sections = %w[main_fields custom_fields demographic_questions eeoc_fields data_compliance security_code_fields] + @fields = {} + @errors = false end def call @@ -27,118 +41,204 @@ def processable @url # && @job end + # HTML > Form > Section > Field > Label > Input > Options def process p "Hello from GetFormFields!" - scrape_page - end - - def scrape_page - # return unless @job.api_url&.include?('greenhouse') # Not yet able to handle Lever or DevIT job - doc = parse_html - form = parse_form(doc) + form = find_form(doc) + return @fields unless form - labels = form.css('label') + @ats_sections.each { |section_name| process_section(form, section_name) } - attributes = {} + puts pretty_generate(@fields) + @fields + end - labels.each do |label| - # Could do this based off of name of ID - # TODO: Add ability to deal with boolean required fields. Input will have an asterisk in a span class in that case - # TODO: Fix issue where additional core fields will be shown to the user even if not required when included in the core greenhouse set + def parse_html + html = URI.parse(@url).open + Nokogiri::HTML(html) + end - # Stripping text, downcasing and replacing spaces with underscores to act as primary keys - label_text = label.xpath('descendant-or-self::text()[not(parent::select or parent::option or parent::ul or parent::label/input[@type="checkbox"])]').text + def find_form(doc) + form = doc.css('form#application-form, form#application_form').first + return form if form - p label_text + form = doc.css('form[id*=application], form[id*=apply]').first + return form if form - required = label_text.include?("*") - label_text = label_text.split("*")[0] + form = doc.css('form').first + return form + rescue StandardError => e + "Form not found: #{e.message}" + end - name = label_text&.strip&.downcase&.gsub(" ", "_") - standard_fields = ['first_name', 'last_name', 'email', 'phone', 'resume/cv', 'cover_letter', 'city', 'location_(city)'] - next if name.blank? || standard_fields.include?(remove_trailing_underscore(name)) - next if label.parent.name == 'label' + def section_present?(fields, fields_name) + fields.empty? ? puts("#{fields_name} - NO") : puts("#{fields_name} - YES") + !fields.empty? + end - attributes[name] = { - interaction: :input, - required:, - label: label_text - } + def process_section(form, section_name) + section_html = split_by_section(form, section_name) + return unless section_present?(section_html, section_name.humanize) - p attributes[name] + fields = split_by_field(section_html) + results = fields.map { |field| process_field(field) } + results = results.flatten.compact - inputs = label.css('input', 'textarea').reject { |input| input['type'] == 'hidden' || !input['id'] } - attributes[name][:locators] = inputs[0]['id'] unless inputs.empty? + @fields[section_name] = { questions: results } + end - checkbox_input = label.css('label:has(input[type="checkbox"])') - unless checkbox_input.empty? - attributes[name][:interaction] = :checkbox - attributes[name][:locators] = name.humanize.chars.reject { |char| char.ord == 160 }.join - attributes[name][:options] = label.css('label:has(input[type="checkbox"])').map { |option| option.text.strip } - end + def split_by_section(form, css_selector) + form.css("##{css_selector}") + end - select_input = label.css('select') - next if select_input.empty? + def split_by_field(section_html) + section_html.css('.field') + end - attributes[name][:interaction] = :select - attributes[name][:locators] = select_input[0]['id'] - attributes[name][:option] = 'option' - attributes[name][:options] = label.css('option').map { |option| option.text.strip } - end + def process_field(field) + label = field.xpath('descendant-or-self::text()[not(parent::select or parent::option or parent::ul or parent::label/input[@type="checkbox"])]').text.strip - begin - demographics = form.css("#demographic_questions") - demographics_questions = demographics.css(".demographic_question") - demographics_questions.each do |question| - label = question.children.select(&:text?).map(&:text).join.strip - name = label.downcase.gsub(" ", "_") - required = question['class'].include?('required') - attributes[name] = { - interaction: :checkbox, - required:, - label: - } - demographics_input = question.css('label:has(input[type="checkbox"])') - next if demographics_input.empty? - - attributes[name][:locators] = question.children.select(&:text?).map(&:text).join.gsub("\n", ' ').strip - attributes[name][:options] = question.css('label:has(input[type="checkbox"])').map do |option| - option.text.strip - end - p attributes[name] - end - rescue Nokogiri::ElementNotFound - @errors = true + if field.css('input[type="checkbox"], input[type="radio"]').any? + process_checkbox_radio(label, field) + elsif field.css('select').any? + process_select(label, field) + else + process_input(label, field) end + end - extra_fields = attributes - - p extra_fields - - # @job.requirement.no_of_qs = attributes.keys.count + def process_checkbox_radio(label, field) + id = field.at('input[type="hidden"][id*="question_id"]')['id'] + required = field.css('input[type="checkbox"], input[type="radio"]').first['aria-required'] + options = field.css('input[type="checkbox"], input[type="radio"]').map do |input| + next if input['type'] == 'hidden' + + { + label: get_label(field, input), + id: input['id'], # For uniquely identifying the option + required: input['aria-required'], + class: input['class'] + # value: input['value'], # Useful for submitting post requests + } + end + { + label:, + id:, + required:, + type: 'checkbox', + options: + } + end - # unless extra_fields.nil? - # @job.application_criteria = @job.application_criteria.merge(extra_fields) - # p @job.application_criteria - # end - # @job.apply_with_cheddar = true - # @job.save + def process_select(label, field) + id = field.at('input[type="hidden"][id*="question_id"]')['id'] + required = field.css('select').first['aria-required'] + options = field.css('option').map do |option| + next if option.text.strip == "--" || option.text.strip == "Please select" + + { + label: option.text.strip, + id: option['id'], # For uniquely identifying the option + required: option['aria-required'], + class: option['class'] + # value: option['value'], # Useful for submitting post requests + } + end + { + label:, + id:, + required:, + type: 'select', + options: + } + end - attributes + def process_input(_label, field) + # ID set to answer value at the moment but could instead by the question_id (simple gsub also works) + field.css('input, textarea').map do |input| + next if input['type'] == 'hidden' || input['id'].nil? || input['id'].include?('dev-field-1') + + { + label: get_label(field, input), + required: input['aria-required'], + type: input['type'] || input.name, + max_length: input['maxlength'], + id: input['id'] + # value: input['value'], # Useful for submitting post requests + } + end end - def parse_html - html = URI.parse(@url).open - Nokogiri::HTML(html) + # First find a for= element, then look for label text - not fully working yet + def get_label(form, input) + label = form.css("label[for='#{input['id']}']").text # best way for getting labels + # puts "0. #{label}" + label.empty? ? label = input.parent.css('label').text.strip : label # gets labels from parent element + # puts "1. #{label}" + label.empty? ? label = input.parent.children.select(&:text?).map(&:text).join.strip : label # Alternative method for getting labels + # puts "2. #{label}" + label.gsub(/\s+/, ' ').strip # (Works for Axios with above method) + # puts "3. #{label}" + label.empty? ? label = input.parent.text.strip : label # (Works for Cleo.ai) + # puts "4. #{label}" + label end - def parse_form(doc) - doc.css('form').first + # May need to remove trailing asterisk, underscore or space + def remove_trailing_asterisk(string) + string[-1] == '*' ? string[...-1] : string end def remove_trailing_underscore(string) string[-1] == '_' ? string[...-1] : string end + + def remove_trailing_space(string) + string.strip + end + + def pretty_generate(json) + JSON.pretty_generate(json) + end end end + +# OLD_STRUCTURE = { +# first_name: { +# interaction: :input, +# locators: 'first_name', +# required: true, +# label: 'First Name', +# core_field: true +# } +# } + +# NEW_STRUCTURE = { +# section: { +# first_name: { +# label:, +# id:, +# required:, +# type:, +# max_length:, +# options: [ +# { +# label:, +# id:, +# required:, +# class:, +# } +# ] +# } +# } +# } + +# For testing: +# @url = "https://boards.greenhouse.io/cleoai/jobs/4628944002" +# @url = "https://boards.greenhouse.io/cleoai/jobs/7301308002" +# @url = "https://boards.greenhouse.io/axios/jobs/6009256#app" +# @url = "https://boards.greenhouse.io/11fs/jobs/4060453101" +# @url = "https://boards.greenhouse.io/forter/jobs/7259821002" +# @url = "https://job-boards.greenhouse.io/monzo/jobs/6076740" +# @url = "https://stripe.com/jobs/listing/account-executive-digital-natives/5414838/apply" diff --git a/app/services/importer/capy_fields.rb b/app/services/importer/get_form_fields_old.rb similarity index 70% rename from app/services/importer/capy_fields.rb rename to app/services/importer/get_form_fields_old.rb index 9c7ec5b3..4d542bc3 100644 --- a/app/services/importer/capy_fields.rb +++ b/app/services/importer/get_form_fields_old.rb @@ -1,13 +1,16 @@ require 'nokogiri' +require 'open-uri' module Importer # Core class for getting form fields using Nokogiri/Capybara + # NB. Only scrapes extra fields and combines those with the standard set of Greenhouse fields at the moment # TODO: Add routing logic - in future will route to either NokoFields / CapyFields or ApiFields depending on the ATS - class CapyFields < ApplicationTask - include Capybara::DSL - - def initialize(job) - @job = job + class GetFormFieldsOld < ApplicationTask + def initialize + # @job = job + # @url = @job.posting_url + # @url = "https://job-boards.greenhouse.io/monzo/jobs/6076740" + @url = "https://boards.greenhouse.io/forter/jobs/7259821002" end def call @@ -15,56 +18,41 @@ def call process rescue StandardError => e - Rails.logger.error "Error running FormFiller: #{e.message}" + Rails.logger.error "Error running GetFormFields: #{e.message}" nil end private def processable - @job + @url # && @job end def process - p "Hello from CapyFields!" - run_capybara + p "Hello from GetFormFields!" + scrape_page end - def run_capybara - return unless @job.api_url&.include?('greenhouse') # Not yet able to handle Lever or DevIT jobs - - Capybara.current_driver = :selenium_chrome_headless # session = Capybara::Session.new(:selenium_chrome_headless) - # all the capybara commands should be session.visit - # begin, rescue, ensure - - visit(@job.posting_url) - return if page.has_selector?('#flash_pending') - - begin - find_apply_button.click - rescue StandardError - nil - end - - # Find Form Fields + def scrape_page + # return unless @job.api_url&.include?('greenhouse') # Not yet able to handle Lever or DevIT job - form = find('form', text: /apply|application/i) - form_html = page.evaluate_script("arguments[0].outerHTML", form.native) - nokogiri_form = Nokogiri::HTML.fragment(form_html) + doc = parse_html + form = parse_form(doc) - labels = nokogiri_form.css('label') + labels = form.css('label') attributes = {} + labels.each do |label| # Could do this based off of name of ID - # TODO: Add ability to deal with boolean required fields. Input will have an asterisk in a span class in that case # TODO: Fix issue where additional core fields will be shown to the user even if not required when included in the core greenhouse set # Stripping text, downcasing and replacing spaces with underscores to act as primary keys - label_text = label.xpath('descendant-or-self::text()[not(parent::select or parent::option or parent::ul or parent::label/input[@type="checkbox"])]').text + # p label_text + required = label_text.include?("*") label_text = label_text.split("*")[0] @@ -79,6 +67,8 @@ def run_capybara label: label_text } + # puts attributes[name] + inputs = label.css('input', 'textarea').reject { |input| input['type'] == 'hidden' || !input['id'] } attributes[name][:locators] = inputs[0]['id'] unless inputs.empty? @@ -99,7 +89,7 @@ def run_capybara end begin - demographics = nokogiri_form.css("#demographic_questions") + demographics = form.css("#demographic_questions") demographics_questions = demographics.css(".demographic_question") demographics_questions.each do |question| label = question.children.select(&:text?).map(&:text).join.strip @@ -117,29 +107,39 @@ def run_capybara attributes[name][:options] = question.css('label:has(input[type="checkbox"])').map do |option| option.text.strip end - p attributes[name] + puts attributes[name] end - rescue Capybara::ElementNotFound + rescue Nokogiri::ElementNotFound @errors = true end - Capybara.current_session.driver.quit - extra_fields = attributes - p "job is #{@job}" + puts pretty_generate(extra_fields) - @job.requirement.no_of_qs = attributes.keys.count + # @job.requirement.no_of_qs = attributes.keys.count - unless extra_fields.nil? - @job.application_criteria = @job.application_criteria.merge(extra_fields) - p @job.application_criteria - end - @job.apply_with_cheddar = true - @job.save + # unless extra_fields.nil? + # @job.application_criteria = @job.application_criteria.merge(extra_fields) + # p @job.application_criteria + # end + # @job.apply_with_cheddar = true + # @job.save + + attributes + end + + def parse_html + html = URI.parse(@url).open + Nokogiri::HTML(html) + end - # TODO: Check that including this here doesn't cause issues - return attributes + def parse_form(doc) + doc.css('form').first + end + + def remove_trailing_underscore(string) + string[-1] == '_' ? string[...-1] : string end def find_apply_button @@ -147,8 +147,8 @@ def find_apply_button "//a[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'apply')] | //button[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'apply')]") end - def remove_trailing_underscore(string) - string[-1] == '_' ? string[...-1] : string + def pretty_generate(json) + JSON.pretty_generate(json) end end end diff --git a/app/services/importer/get_greenhouse_api_fields.rb b/app/services/importer/get_greenhouse_api_fields.rb new file mode 100644 index 00000000..15925e38 --- /dev/null +++ b/app/services/importer/get_greenhouse_api_fields.rb @@ -0,0 +1,7 @@ +module Importer + class GetGreenhouseApiFields + def call + # Call to Greenhouse API to get fields + end + end +end diff --git a/app/services/openai.rb b/app/services/openai.rb index 5755947e..2b8bb122 100644 --- a/app/services/openai.rb +++ b/app/services/openai.rb @@ -1,12 +1,26 @@ # app/services/openai.rb -# Class for interacting with OpenAI, primarily for resume analysis during user onboarding in the first instance -# NB. In progress and not fully functional yet +# Class for interacting with OpenAI, primarily for resume analysis during user onboarding +# How this works: +# 1. Initialize the OpenAI client and assistant +# 2. Upload the resume file +# 3. Create a file vector store including the uploaded file +# 4. Create a thread and run (in a single command) with the vector store attached +# 5. Poll the response status until it is completed +# 6. Retrieve the response +# 7. Save the response to cloudinary as a raw JSON object (TBD) +# 8. Delete the thread, vector store, and file +# 9. Update the user_details with the response (TBD) +# NB. Note that threads are independent of assistants and thus must be created on @client rather than @assistant class Openai < ApplicationTask + # TODO: Pass a CV in as a url rather than a local file + # TODO: Constrain output to JSON only + # TODO: Improve quality of response so that more fields are filled + # TODO: Split into an inherited class so that we can use AI in other areas of hte app def initialize p "Initialize" @client = OpenAI::Client.new @assistant = @client.assistants.retrieve(id: "asst_62b4xuE3RQvqlIDT1AYed0wZ") - @file_id = "file-FRXTfhSy25cp874ExD6Tr9h7" + # @file_id = "file-FRXTfhSy25cp874ExD6Tr9h7" # Obretetskiy_cv - kept for testing end def call @@ -21,109 +35,128 @@ def call private def processable - @client + @client && @assistant end def process puts "Processing" - thread_id = create_thread - puts thread_id - message = create_message(thread_id) - puts message - list_messages(thread_id) - end + file = upload_file + store = create_vector_store(file) - def admin - # Not called but kept for reference regarding the API structure - upload_resume - list_assistants - list_uploaded_files - basic_chat - end + run_id, thread_id = create_thread_and_run(store) + poll_response_status(run_id, thread_id) - def list_assistants - response = @client.assistants.list - puts pretty_generate(response) + messages = @client.messages.list(thread_id:, parameters: { order: 'asc' }) + value = messages.dig("data", 0, "content", 0, "text", "value") + puts value + + # delete_thread(thread_id) + delete_vector_store(store) + delete_file(file) + # list_vector_stores + # list_files end - def upload_resume + def upload_file puts "Uploading resume" my_file = File.open("public/Obretetskiy_cv.pdf", "rb") @client.files.upload(parameters: { file: my_file, purpose: "assistants" }) end - def list_uploaded_files - puts "Checking resume uploaded" - @client.files.list - end - - def find_file_by_filename(list, filename) - file = list["data"].find { |file| file["filename"] == filename } - file["id"] + def create_vector_store(file) + puts "Creating vector store" + date = date_created + response = @client.vector_stores.create( + parameters: { + name: "#{date} - Resume", + file_ids: [file['id']] + } + ) + puts pretty_generate(response) + response end - def send_resume_to_openai(_file_id) - puts "Processing resume with OpenAI" - response = @assistant.chat( + def create_thread_and_run(store) + puts "Creating thread and running" + response = @client.runs.create_thread_and_run( parameters: { - model: "gpt-4o", - # file_id:, - attachments: [ - { - file_id: file.id, - tools: [{ type: "file_search" }] + assistant_id: "asst_62b4xuE3RQvqlIDT1AYed0wZ", + tool_resources: { + file_search: { + vector_store_ids: [store['id']] } - ], - messages: [{ role: "user", content: "Here is my resume. Tell me my name" }], - # messages: [{ role: "user", content: "Respond with a sample JSON"}], - temperature: 0.7 + } } ) - puts response - puts pretty_generate(response.dig("choices", 0, "message", "content")) + [response['id'], response['thread_id']] + rescue StandardError => e + puts "An error occurred: #{e.message}" end - def create_thread - puts "Creating thread" - thread_response = @assistant.threads.create - thread_response['id'] + def poll_response_status(run_id, thread_id) + puts "Polling response status" + loop do + response = @client.runs.retrieve(id: run_id, thread_id:) + status = response['status'] + + case status + when 'queued', 'in_progress', 'cancelling' + puts 'Sleeping' + sleep 1 + when 'completed' + puts 'Completed' + break + when 'requires_action' + puts 'Requires action' + when 'cancelled', 'failed', 'expired' + puts "Run failed" + puts response['last_error'].inspect + break + else + puts "Unknown status response: #{status}" + end + end + rescue StandardError => e + puts "An error occurred: #{e.message}" end - def list_messages(thread_id) - puts "Listing messages" - messages_response = @assistant.threads.messages.list(thread_id) - puts messages_response + def delete_thread(thread_id) + puts "Deleting thread" + @client.threads.delete(id: thread_id) + rescue StandardError => e + puts "An error occurred: #{e.message}" end - def create_message(thread_id) - puts "Creating message" - message_response = @assistant.threads.messages.create( - thread_id, - { - role: 'user', - content: 'My name is charlie. What is my name?' - # attachments: [ - # { - # file_id: file_id, - # tools: [{ type: 'file_search' }] - # } - # ] - } - ) - puts message_response + def delete_vector_store(store) + puts "Deleting vector store" + @client.vector_stores.delete(id: store['id']) rescue StandardError => e - puts e + puts "An error occurred: #{e.message}" end - def basic_chat - response = @client.chat( - parameters: { - model: "gpt-4o", - messages: [{ role: "user", content: "Hello!" }], - temperature: 0.7 - } - ) - puts response.dig("choices", 0, "message", "content") + def delete_file(file) + puts "Deleting file" + response = @client.files.delete(id: file['id']) + puts pretty_generate(response) + response + rescue StandardError => e + puts "An error occurred: #{e.message}" + end + + def list_vector_stores + puts "Listing vector stores" + response = @client.vector_stores.list + puts pretty_generate(response) + end + + def list_files + puts "Checking resume uploaded" + response = @client.files.list + puts pretty_generate(response) + end + + def date_created + Time.now.strftime("%Y-%m-%d %H:%M:%S") end def pretty_generate(response) diff --git a/app/tasks/job_attributes_fetcher.rb b/app/tasks/job_attributes_fetcher.rb index 5f25aa59..6223d1ba 100644 --- a/app/tasks/job_attributes_fetcher.rb +++ b/app/tasks/job_attributes_fetcher.rb @@ -30,7 +30,6 @@ def process application_criteria # TODO: rewrite modules so this returns an attribute hash like job_details @job.save - fetch_form_fields end def application_criteria @@ -45,11 +44,6 @@ def core_params } end - def fetch_form_fields - # TODO: create separate module methods for this - Flipper.enabled?(:get_form_fields) ? Importer::GetFormFieldsJob.perform_later(@job) : "Form Fields turned off" - end - def job_details @ats.job_details(@job, @data) end diff --git a/app/views/job_applications/_step_indicators.html.erb b/app/views/job_applications/_step_indicators.html.erb index a8194b7d..07f61a8a 100644 --- a/app/views/job_applications/_step_indicators.html.erb +++ b/app/views/job_applications/_step_indicators.html.erb @@ -9,7 +9,8 @@

- <%= job.title %>
+ <%= job.title %> +
<%= job.company.name %> @@ -20,7 +21,7 @@ + <% elsif job_application.completed? %> @@ -32,7 +33,7 @@ - + <% elsif job_application.unstarted? %> @@ -59,7 +60,7 @@ + <% elsif application_step_completed?("overview") %> @@ -92,7 +93,7 @@ + <% elsif application_step_completed?("payload") %> diff --git a/app/views/job_applications/edit.html.erb b/app/views/job_applications/edit.html.erb index 776875dd..bd6179b4 100644 --- a/app/views/job_applications/edit.html.erb +++ b/app/views/job_applications/edit.html.erb @@ -1,16 +1,28 @@ <%= provide(:title, 'Application Process - Specific fields') %>

+ <%# Link to original post to be able to compare accuracy of ApplicationCriteria %> + <%= link_to @job_application.job.posting_url, target: "_blank", class: "text-sm text-gray-900 dark:text-white pe-6 flex items-center" do %> + Original post + + + + <% end %> + + + <%# Show only mandatory fields %> Hide optional fields <%= mandatory_fields_only_label(@job_application) %> -
+
+ + <%# Render step indicators and application forms %>
<%= render 'step_indicators' %> <%= render 'additional_information_form', job_application: @job_application %>
- \ No newline at end of file + diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 04bbdb3e..1d3b0652 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -16,7 +16,7 @@ :schedule: jobs_updater: cron: '0 1 * * *' # Runs once per day (at 1 am) - class: Updater::ExistingCompanyJobs + class: Updater::ExistingCompanyJobsJob queue: updates devitjobs_updater: cron: '0 2 * * *' # Runs once per day (at 2 am) diff --git a/db/schema.rb b/db/schema.rb index 8cce8831..17c4bd52 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_06_27_161903) do +ActiveRecord::Schema[7.1].define(version: 2024_07_07_132559) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "plpgsql" @@ -297,6 +297,14 @@ t.index ["user_id"], name: "index_saved_jobs_on_user_id" end + create_table "saved_searches", force: :cascade do |t| + t.bigint "user_id", null: false + t.jsonb "params", default: {}, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["user_id"], name: "index_saved_searches_on_user_id" + end + create_table "technologies", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false @@ -342,5 +350,6 @@ add_foreign_key "requirements", "jobs" add_foreign_key "saved_jobs", "jobs" add_foreign_key "saved_jobs", "users" + add_foreign_key "saved_searches", "users" add_foreign_key "user_details", "users" end diff --git a/db/seeds.rb b/db/seeds.rb index f96192dd..0364630d 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -5,7 +5,7 @@ puts "Please enter a valid integer between 1 and 500:" response = gets.chomp if response == 'run updater' - Updater::ExistingCompanyJobs.perform_later + Updater::ExistingCompanyJobsService.perform_later exit else response = response.to_i diff --git a/lib/tasks/admin.rake b/lib/tasks/admin.rake index ba4ec4c8..9f1ec0cd 100644 --- a/lib/tasks/admin.rake +++ b/lib/tasks/admin.rake @@ -39,6 +39,16 @@ namespace :admin do Importer::GetFormFields.call end + desc "Test GetFormFieldsOld" + task formfieldsold: :environment do + Importer::GetFormFieldsOld.call + end + + desc "Test GetApiFields" + task apifields: :environment do + Importer::GetApiFields.call + end + desc "Test OpenAI Integration" task openai: :environment do Openai.call