<!DOCTYPE html><html  lang="en" data-capo=""><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>DeepSource: The AI Code Review Platform</title>
<meta property="og:image" content="https://deepsource.com/__og-image__/static/og.png">
<meta property="og:image:type" content="image/png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://deepsource.com/__og-image__/static/og.png">
<meta name="twitter:image:src" content="https://deepsource.com/__og-image__/static/og.png">
<meta property="og:image:width" content="1200">
<meta name="twitter:image:width" content="1200">
<meta property="og:image:height" content="600">
<meta name="twitter:image:height" content="600">
<style>@font-face{font-display:swap;font-family:"Instrument Serif";font-style:normal;font-weight:400;src:url(/_nuxt/InstrumentSerif-Regular.D2fgtoWl.ttf) format("truetype")}@font-face{font-display:swap;font-family:"Instrument Serif";font-style:italic;font-weight:400;src:url(/_nuxt/InstrumentSerif-Italic.D67hM5si.ttf) format("truetype")}@font-face{font-display:swap;font-family:Google Sans;font-style:normal;font-weight:400 700;src:url(/fonts/GoogleSans-Latin.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Google Sans;font-style:normal;font-weight:400 700;src:url(/fonts/GoogleSans-LatinExt.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Google Sans;font-style:italic;font-weight:400 700;src:url(/fonts/GoogleSans-Italic-Latin.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Google Sans;font-style:italic;font-weight:400 700;src:url(/fonts/GoogleSans-Italic-LatinExt.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Google Sans Mono;font-style:normal;font-weight:400 700;src:url(/fonts/GoogleSansMono-Latin.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}*,: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:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-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:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:Google Sans,-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}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-family:Google Sans Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings: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:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,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]:where(:not([hidden=until-found])){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],input:where(:not([type])),select,textarea{-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;--tw-shadow:0 0 #0000}[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,input:where(:not([type])):focus,select:focus,textarea:focus{outline:2px solid transparent;outline-offset:2px;--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)}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;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-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],[size]:where(select:not([size="1"])){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]{-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;--tw-shadow:0 0 #0000}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{outline:2px solid transparent;outline-offset:2px;--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)}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}[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 0'/%3E%3C/svg%3E")}@media (forced-colors:active){[type=checkbox]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[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")}@media (forced-colors:active){[type=radio]:checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:transparent}[type=checkbox]:indeterminate{background-color:currentColor;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%;border-color:transparent}@media (forced-colors:active){[type=checkbox]:indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:transparent}[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}.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}}.prose{color:#1d1f25;max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:#0b3d2c;font-weight:500;text-decoration:underline;text-decoration-style:dashed;text-underline-offset:4px;transition:color .2s ease-in-out}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:#00825b}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:#0b3d2c;font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:none;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em;padding-left:0}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:none;list-style:none;margin-bottom:1.25em;margin-top:1.25em;padding-inline-start:1.625em;padding-left:0}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){border-inline-start-color:var(--tw-prose-quote-borders);border-inline-start-width:.25rem;border-left-color:#00825b;border-left-width:.25rem;color:inherit;font-size:1rem;font-size:[object Object];font-style:italic;font-weight:400;line-height:1.5;margin-bottom:1.6em;margin-top:1.6em;padding-inline-start:1em;quotes:"“""”""‘""’"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom:1px solid #d7dae1;color:#0b3d2c;font-size:1.875rem;font-size:[object Object];font-weight:600;letter-spacing:-.025em;line-height:1.1111111;margin-bottom:.75rem;margin-top:0;padding-bottom:.5rem}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom:1px solid #d7dae1;color:#0b3d2c;font-size:1.5rem;font-size:[object Object];font-weight:600;letter-spacing:-.025em;line-height:1.3333333;margin-bottom:.75rem;margin-top:2em;padding-bottom:.5rem}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:#0b3d2c;font-size:1.25rem;font-size:[object Object];font-weight:600;letter-spacing:-.025em;line-height:1.6;margin-bottom:.5rem;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em;max-width:100%;width:100%}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-bottom:2em;margin-top:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.3125rem;box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows)/10%),0 3px rgb(var(--tw-prose-kbd-shadows)/10%);color:var(--tw-prose-kbd);font-family:inherit;font-size:.875em;font-weight:500;padding-inline-end:.375em;padding-bottom:.1875em;padding-top:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-top:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:1em;margin-top:1em;table-layout:auto;width:100%}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose],[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],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-kbd:#111827;--tw-prose-kbd-shadows:17 24 39;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:255 255 255;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:rgba(0,0,0,.5);--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em;padding-left:1.5rem;position:relative}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em;padding-left:2rem;position:relative}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-top:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose :where(h1 a,h2 a,h3 a,h4 a,h5 a,h6 a):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:inherit;text-decoration:none}.prose :where(h1,h2,h3,h4,h5,h6):not(:where([class~=not-prose],[class~=not-prose] *)):first-child{margin-top:0}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)):before{color:#00825b;content:"—";height:0;left:0;margin-right:.5rem;position:absolute;top:0;width:0}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)):before{color:#00825b;content:counter(list-item) ".";font-weight:500;left:0;padding-right:1rem;position:absolute}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-12{left:3rem;right:3rem}.inset-x-4{left:1rem;right:1rem}.inset-x-8{left:2rem;right:2rem}.inset-y-0{bottom:0;top:0}.-bottom-8{bottom:-2rem}.-left-6{left:-1.5rem}.-left-8{left:-2rem}.-right-8{right:-2rem}.-top-4{top:-1rem}.-top-8{top:-2rem}.bottom-0{bottom:0}.bottom-12{bottom:3rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-12{left:3rem}.left-4{left:1rem}.right-0{right:0}.right-4{right:1rem}.top-0{top:0}.top-1\/3{top:33.333333%}.top-16{top:4rem}.top-24{top:6rem}.top-4{top:1rem}.top-\[-72px\]{top:-72px}.top-\[72px\]{top:72px}.top-\[88px\]{top:88px}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-7{grid-column:span 7/span 7}.col-span-full{grid-column:1/-1}.float-right{float:right}.-m-1\.5{margin:-.375rem}.-m-2\.5{margin:-.625rem}.m-6{margin:1.5rem}.m-auto{margin:auto}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.-my-1{margin-bottom:-.25rem;margin-top:-.25rem}.-my-6{margin-bottom:-1.5rem;margin-top:-1.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.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-4{margin-bottom:1rem;margin-top:1rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.-mr-1{margin-right:-.25rem}.-mt-0\.5{margin-top:-.125rem}.-mt-12{margin-top:-3rem}.-mt-6{margin-top:-1.5rem}.-mt-\[1px\]{margin-top:-1px}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mb-px{margin-bottom:1px}.ml-1{margin-left:.25rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-12{margin-top:3rem}.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}.line-clamp-1{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.flow-root{display:flow-root}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[16\/9\]{aspect-ratio:16/9}.aspect-square{aspect-ratio:1/1}.h-1\.5{height:.375rem}.h-1\/2{height:50%}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-3\/4{height:75%}.h-32{height:8rem}.h-4{height:1rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-52{height:13rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-80{height:20rem}.h-96{height:24rem}.h-\[14px\]{height:14px}.h-\[250px\]{height:250px}.h-\[290px\]{height:290px}.h-\[300px\]{height:300px}.h-\[36px\]{height:36px}.h-\[500px\]{height:500px}.h-\[512px\]{height:512px}.h-\[700px\]{height:700px}.h-\[72px\]{height:72px}.h-\[90vh\]{height:90vh}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:8rem}.max-h-6{max-height:1.5rem}.max-h-60{max-height:15rem}.max-h-72{max-height:18rem}.max-h-full{max-height:100%}.min-h-16{min-height:4rem}.min-h-72{min-height:18rem}.min-h-96{min-height:24rem}.min-h-\[300px\]{min-height:300px}.min-h-\[400px\]{min-height:400px}.min-h-\[500px\]{min-height:500px}.min-h-\[550px\]{min-height:550px}.min-h-\[600px\]{min-height:600px}.min-h-\[640px\]{min-height:640px}.min-h-\[calc\(100vh-12rem\)\]{min-height:calc(100vh - 12rem)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-0{width:0}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-96{width:24rem}.w-\[14px\]{width:14px}.w-\[175px\]{width:175px}.w-\[50px\]{width:50px}.w-\[64rem\]{width:64rem}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-64{min-width:16rem}.min-w-8{min-width:2rem}.min-w-\[200px\]{min-width:200px}.min-w-\[768px\]{min-width:768px}.min-w-\[900px\]{min-width:900px}.max-w-0{max-width:0}.max-w-20{max-width:5rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[100vw\]{max-width:100vw}.max-w-\[240px\]{max-width:240px}.max-w-\[700px\]{max-width:700px}.max-w-\[83rem\]{max-width:83rem}.max-w-\[84rem\]{max-width:84rem}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.flex-grow,.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:-.25rem}.-translate-x-1,.-translate-x-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/3{--tw-translate-y:-33.333333%}.-translate-y-12,.-translate-y-1\/3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-12{--tw-translate-y:-3rem}.-translate-y-3{--tw-translate-y:-.75rem}.-translate-y-3,.-translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-4{--tw-translate-y:-1rem}.-translate-y-8{--tw-translate-y:-2rem}.-translate-y-8,.translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0px}.translate-x-1\/2{--tw-translate-x:50%}.translate-x-1\/2,.translate-x-1\/3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/3{--tw-translate-x:33.333333%}.translate-x-4{--tw-translate-x:1rem}.translate-x-4,.translate-x-\[-20px\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[-20px\]{--tw-translate-x:-20px}.translate-y-0{--tw-translate-y:0px}.translate-y-0,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:.25rem}.translate-y-1\/2{--tw-translate-y:50%}.translate-y-1\/2,.translate-y-1\/3{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/3{--tw-translate-y:33.333333%}.translate-y-12{--tw-translate-y:3rem}.translate-y-12,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:.5rem}.translate-y-20{--tw-translate-y:5rem}.translate-y-20,.translate-y-4{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-4{--tw-translate-y:1rem}.translate-y-6{--tw-translate-y:1.5rem}.translate-y-6,.translate-y-8{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-8{--tw-translate-y:2rem}.translate-y-\[2px\]{--tw-translate-y:2px}.-rotate-12,.translate-y-\[2px\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-12{--tw-rotate:-12deg}.-rotate-90{--tw-rotate:-90deg}.-rotate-90,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.rotate-90{--tw-rotate:90deg}.rotate-90,.scale-100{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-95,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-\[2fr_repeat\(3\,1fr\)\]{grid-template-columns:2fr repeat(3,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-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.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-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-px{gap:1px}.gap-x-0\.5{-moz-column-gap:.125rem;column-gap:.125rem}.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-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.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-1\.5{row-gap:.375rem}.gap-y-10{row-gap:2.5rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-5{row-gap:1.25rem}.gap-y-6{row-gap:1.5rem}.space-x-0\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.125rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.125rem*var(--tw-space-x-reverse))}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-1\.5>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.375rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.375rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.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-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(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-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(3rem*var(--tw-space-y-reverse));margin-top:calc(3rem*(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-2>: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)))}.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-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)));border-right-width:calc(1px*var(--tw-divide-x-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-dashed>:not([hidden])~:not([hidden]){border-style:dashed}.divide-gray-3>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(239 240 244/var(--tw-divide-opacity,1))}.divide-gray-4>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(230 232 237/var(--tw-divide-opacity,1))}.divide-gray-5>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(223 225 231/var(--tw-divide-opacity,1))}.divide-gray-6>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(215 218 225/var(--tw-divide-opacity,1))}.divide-juniper-4>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(205 243 226/var(--tw-divide-opacity,1))}.self-stretch{align-self:stretch}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-clip{overflow:clip}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-b-md{border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem}.rounded-b-none{border-bottom-left-radius:0;border-bottom-right-radius:0}.rounded-r-sm{border-bottom-right-radius:.125rem;border-top-right-radius:.125rem}.rounded-t-md{border-top-right-radius:.375rem}.rounded-t-md,.rounded-tl-md{border-top-left-radius:.375rem}.rounded-tr-none{border-top-right-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-x{border-left-width:1px;border-right-width:1px}.border-y{border-bottom-width:1px;border-top-width:1px}.border-y-2{border-bottom-width:2px;border-top-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-dotted{border-style:dotted}.border-none{border-style:none}.border-\[\#d1d9e0\]{--tw-border-opacity:1;border-color:rgb(209 217 224/var(--tw-border-opacity,1))}.border-gray-11{--tw-border-opacity:1;border-color:rgb(96 100 109/var(--tw-border-opacity,1))}.border-gray-3{--tw-border-opacity:1;border-color:rgb(239 240 244/var(--tw-border-opacity,1))}.border-gray-4{--tw-border-opacity:1;border-color:rgb(230 232 237/var(--tw-border-opacity,1))}.border-gray-5{--tw-border-opacity:1;border-color:rgb(223 225 231/var(--tw-border-opacity,1))}.border-gray-6{--tw-border-opacity:1;border-color:rgb(215 218 225/var(--tw-border-opacity,1))}.border-gray-7{--tw-border-opacity:1;border-color:rgb(203 207 215/var(--tw-border-opacity,1))}.border-gray-8{--tw-border-opacity:1;border-color:rgb(183 188 198/var(--tw-border-opacity,1))}.border-gray-9{--tw-border-opacity:1;border-color:rgb(138 142 152/var(--tw-border-opacity,1))}.border-ink-100{--tw-border-opacity:1;border-color:rgb(42 46 55/var(--tw-border-opacity,1))}.border-ink-200{--tw-border-opacity:1;border-color:rgb(35 38 46/var(--tw-border-opacity,1))}.border-ink-50{--tw-border-opacity:1;border-color:rgb(48 53 64/var(--tw-border-opacity,1))}.border-juniper-11{--tw-border-opacity:1;border-color:rgb(0 130 91/var(--tw-border-opacity,1))}.border-juniper-11\/50{border-color:#00825b80}.border-juniper-12\/40{border-color:#0b3d2c66}.border-juniper-5{--tw-border-opacity:1;border-color:rgb(183 236 212/var(--tw-border-opacity,1))}.border-juniper-7{--tw-border-opacity:1;border-color:rgb(115 211 174/var(--tw-border-opacity,1))}.border-juniper-9{--tw-border-opacity:1;border-color:rgb(51 203 154/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-l-juniper-9{--tw-border-opacity:1;border-left-color:rgb(51 203 154/var(--tw-border-opacity,1))}.border-l-transparent{border-left-color:transparent}.bg-\[\#656d76\]{--tw-bg-opacity:1;background-color:rgb(101 109 118/var(--tw-bg-opacity,1))}.bg-\[\#bf8700\]{--tw-bg-opacity:1;background-color:rgb(191 135 0/var(--tw-bg-opacity,1))}.bg-\[\#f6f8fa\]{--tw-bg-opacity:1;background-color:rgb(246 248 250/var(--tw-bg-opacity,1))}.bg-current{background-color:currentColor}.bg-gray-1{--tw-bg-opacity:1;background-color:rgb(252 252 253/var(--tw-bg-opacity,1))}.bg-gray-1\/20{background-color:#fcfcfd33}.bg-gray-12{--tw-bg-opacity:1;background-color:rgb(29 31 37/var(--tw-bg-opacity,1))}.bg-gray-12\/30{background-color:#1d1f254d}.bg-gray-12\/50{background-color:#1d1f2580}.bg-gray-2{--tw-bg-opacity:1;background-color:rgb(248 249 251/var(--tw-bg-opacity,1))}.bg-gray-3{--tw-bg-opacity:1;background-color:rgb(239 240 244/var(--tw-bg-opacity,1))}.bg-gray-4{--tw-bg-opacity:1;background-color:rgb(230 232 237/var(--tw-bg-opacity,1))}.bg-gray-5{--tw-bg-opacity:1;background-color:rgb(223 225 231/var(--tw-bg-opacity,1))}.bg-gray-7{--tw-bg-opacity:1;background-color:rgb(203 207 215/var(--tw-bg-opacity,1))}.bg-gray-8{--tw-bg-opacity:1;background-color:rgb(183 188 198/var(--tw-bg-opacity,1))}.bg-ink-100{--tw-bg-opacity:1;background-color:rgb(42 46 55/var(--tw-bg-opacity,1))}.bg-ink-200{--tw-bg-opacity:1;background-color:rgb(35 38 46/var(--tw-bg-opacity,1))}.bg-ink-300{--tw-bg-opacity:1;background-color:rgb(22 24 29/var(--tw-bg-opacity,1))}.bg-ink-400{--tw-bg-opacity:1;background-color:rgb(18 19 23/var(--tw-bg-opacity,1))}.bg-ink-50{--tw-bg-opacity:1;background-color:rgb(48 53 64/var(--tw-bg-opacity,1))}.bg-juniper-1{--tw-bg-opacity:1;background-color:rgb(250 254 252/var(--tw-bg-opacity,1))}.bg-juniper-10{--tw-bg-opacity:1;background-color:rgb(30 192 143/var(--tw-bg-opacity,1))}.bg-juniper-11{--tw-bg-opacity:1;background-color:rgb(0 130 91/var(--tw-bg-opacity,1))}.bg-juniper-11\/30{background-color:#00825b4d}.bg-juniper-12{--tw-bg-opacity:1;background-color:rgb(11 61 44/var(--tw-bg-opacity,1))}.bg-juniper-2{--tw-bg-opacity:1;background-color:rgb(242 252 247/var(--tw-bg-opacity,1))}.bg-juniper-3{--tw-bg-opacity:1;background-color:rgb(224 248 237/var(--tw-bg-opacity,1))}.bg-juniper-4{--tw-bg-opacity:1;background-color:rgb(205 243 226/var(--tw-bg-opacity,1))}.bg-juniper-4\/70{background-color:#cdf3e2b3}.bg-juniper-5{--tw-bg-opacity:1;background-color:rgb(183 236 212/var(--tw-bg-opacity,1))}.bg-juniper-7{--tw-bg-opacity:1;background-color:rgb(115 211 174/var(--tw-bg-opacity,1))}.bg-juniper-9{--tw-bg-opacity:1;background-color:rgb(51 203 154/var(--tw-bg-opacity,1))}.bg-orange\/20{background-color:#ef5f0033}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-opacity-30{--tw-bg-opacity:.3}.bg-opacity-40{--tw-bg-opacity:.4}.bg-opacity-50{--tw-bg-opacity:.5}.bg-opacity-60{--tw-bg-opacity:.6}.bg-opacity-70{--tw-bg-opacity:.7}.bg-opacity-75{--tw-bg-opacity:.75}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-l{background-image:linear-gradient(to left,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.bg-gradient-to-tr{background-image:linear-gradient(to top right,var(--tw-gradient-stops))}.from-gray-1{--tw-gradient-from:#fcfcfd var(--tw-gradient-from-position);--tw-gradient-to:rgba(252,252,253,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gray-2{--tw-gradient-from:#f8f9fb var(--tw-gradient-from-position);--tw-gradient-to:rgba(248,249,251,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-gray-3{--tw-gradient-from:#eff0f4 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,240,244,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-ink-400{--tw-gradient-from:#121317 var(--tw-gradient-from-position);--tw-gradient-to:rgba(18,19,23,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-juniper-11{--tw-gradient-from:#00825b var(--tw-gradient-from-position);--tw-gradient-to:rgba(0,130,91,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-juniper-12{--tw-gradient-from:#0b3d2c var(--tw-gradient-from-position);--tw-gradient-to:rgba(11,61,44,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-juniper-8{--tw-gradient-from:#1cbf8f var(--tw-gradient-from-position);--tw-gradient-to:rgba(28,191,143,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-juniper-9{--tw-gradient-from:#33cb9a var(--tw-gradient-from-position);--tw-gradient-to:rgba(51,203,154,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white{--tw-gradient-from:#fff var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-white\/90{--tw-gradient-from:hsla(0,0%,100%,.9) var(--tw-gradient-from-position);--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-gray-1{--tw-gradient-to:rgba(252,252,253,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fcfcfd var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-juniper-1\/30{--tw-gradient-to:rgba(250,254,252,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),rgba(250,254,252,.3) var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-white\/50{--tw-gradient-to:hsla(0,0%,100%,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),hsla(0,0%,100%,.5) var(--tw-gradient-via-position),var(--tw-gradient-to)}.via-30\%{--tw-gradient-via-position:30%}.to-gray-1{--tw-gradient-to:#fcfcfd var(--tw-gradient-to-position)}.to-gray-2{--tw-gradient-to:#f8f9fb var(--tw-gradient-to-position)}.to-gray-4{--tw-gradient-to:#e6e8ed var(--tw-gradient-to-position)}.to-ink-400{--tw-gradient-to:#121317 var(--tw-gradient-to-position)}.to-juniper-10{--tw-gradient-to:#1ec08f var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-juniper-11{fill:#00825b}.stroke-2{stroke-width:2}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.object-left-top{-o-object-position:left top;object-position:left top}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-12{padding:3rem}.p-16{padding:4rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.px-16{padding-left:4rem;padding-right:4rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-24{padding-left:6rem;padding-right:6rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.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-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-20{padding-bottom:5rem;padding-top:5rem}.py-24{padding-bottom:6rem;padding-top:6rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-1{padding-bottom:.25rem}.pb-12{padding-bottom:3rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-10{padding-left:2.5rem}.pl-12{padding-left:3rem}.pl-2{padding-left:.5rem}.pl-20{padding-left:5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-12{padding-right:3rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-6{padding-right:1.5rem}.pr-\[1px\]{padding-right:1px}.pt-0{padding-top:0}.pt-12{padding-top:3rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-24{padding-top:6rem}.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}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.font-mono{font-family:Google Sans Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:Google Sans,-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif}.font-serif{font-family:Instrument Serif,Iowan Old Style,Apple Garamond,Baskerville,Times New Roman,Droid Serif,Times,Source Serif Pro,serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}.text-2xl{font-size:1.5rem;line-height:2rem}.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-6xl{font-size:3.75rem;line-height:1}.text-7xl{font-size:4.5rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[12px\]{font-size:12px}.text-\[13\.5px\]{font-size:13.5px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[2\.5rem\]{font-size:2.5rem}.text-\[80px\]{font-size:80px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[450\]{font-weight:450}.font-\[550\]{font-weight:550}.font-black{font-weight:900}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.not-italic{font-style:normal}.leading-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[22px\]{line-height:22px}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-normal{letter-spacing:0}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wide{letter-spacing:.025em}.text-\[\#1a7f37\]{--tw-text-opacity:1;color:rgb(26 127 55/var(--tw-text-opacity,1))}.text-\[\#1f2328\]{--tw-text-opacity:1;color:rgb(31 35 40/var(--tw-text-opacity,1))}.text-\[\#23C4F8\]{--tw-text-opacity:1;color:rgb(35 196 248/var(--tw-text-opacity,1))}.text-\[\#59636e\]{--tw-text-opacity:1;color:rgb(89 99 110/var(--tw-text-opacity,1))}.text-\[\#656d76\]{--tw-text-opacity:1;color:rgb(101 109 118/var(--tw-text-opacity,1))}.text-\[\#c0c1c3\]{--tw-text-opacity:1;color:rgb(192 193 195/var(--tw-text-opacity,1))}.text-\[\#f5f5f5\]{--tw-text-opacity:1;color:rgb(245 245 245/var(--tw-text-opacity,1))}.text-gray-1{--tw-text-opacity:1;color:rgb(252 252 253/var(--tw-text-opacity,1))}.text-gray-10{--tw-text-opacity:1;color:rgb(127 131 141/var(--tw-text-opacity,1))}.text-gray-11{--tw-text-opacity:1;color:rgb(96 100 109/var(--tw-text-opacity,1))}.text-gray-12{--tw-text-opacity:1;color:rgb(29 31 37/var(--tw-text-opacity,1))}.text-gray-12\/60{color:#1d1f2599}.text-gray-12\/70{color:#1d1f25b3}.text-gray-12\/90{color:#1d1f25e6}.text-gray-3{--tw-text-opacity:1;color:rgb(239 240 244/var(--tw-text-opacity,1))}.text-gray-4{--tw-text-opacity:1;color:rgb(230 232 237/var(--tw-text-opacity,1))}.text-gray-5{--tw-text-opacity:1;color:rgb(223 225 231/var(--tw-text-opacity,1))}.text-gray-6{--tw-text-opacity:1;color:rgb(215 218 225/var(--tw-text-opacity,1))}.text-gray-7{--tw-text-opacity:1;color:rgb(203 207 215/var(--tw-text-opacity,1))}.text-gray-8{--tw-text-opacity:1;color:rgb(183 188 198/var(--tw-text-opacity,1))}.text-gray-9{--tw-text-opacity:1;color:rgb(138 142 152/var(--tw-text-opacity,1))}.text-juniper-1{--tw-text-opacity:1;color:rgb(250 254 252/var(--tw-text-opacity,1))}.text-juniper-10{--tw-text-opacity:1;color:rgb(30 192 143/var(--tw-text-opacity,1))}.text-juniper-11{--tw-text-opacity:1;color:rgb(0 130 91/var(--tw-text-opacity,1))}.text-juniper-11\/80{color:#00825bcc}.text-juniper-12{--tw-text-opacity:1;color:rgb(11 61 44/var(--tw-text-opacity,1))}.text-juniper-12\/70{color:#0b3d2cb3}.text-juniper-12\/80{color:#0b3d2ccc}.text-juniper-3{--tw-text-opacity:1;color:rgb(224 248 237/var(--tw-text-opacity,1))}.text-juniper-4{--tw-text-opacity:1;color:rgb(205 243 226/var(--tw-text-opacity,1))}.text-juniper-5{--tw-text-opacity:1;color:rgb(183 236 212/var(--tw-text-opacity,1))}.text-juniper-7{--tw-text-opacity:1;color:rgb(115 211 174/var(--tw-text-opacity,1))}.text-juniper-9{--tw-text-opacity:1;color:rgb(51 203 154/var(--tw-text-opacity,1))}.text-orange{--tw-text-opacity:1;color:rgb(239 95 0/var(--tw-text-opacity,1))}.text-red{--tw-text-opacity:1;color:rgb(221 68 37/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--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 rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--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 rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--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 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.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-4{--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(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-inset{--tw-ring-inset:inset}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.ring-gray-12\/10{--tw-ring-color:rgba(29,31,37,.1)}.ring-gray-3{--tw-ring-opacity:1;--tw-ring-color:rgb(239 240 244/var(--tw-ring-opacity,1))}.ring-gray-3\/50{--tw-ring-color:rgba(239,240,244,.5)}.ring-gray-4{--tw-ring-opacity:1;--tw-ring-color:rgb(230 232 237/var(--tw-ring-opacity,1))}.ring-gray-5{--tw-ring-opacity:1;--tw-ring-color:rgb(223 225 231/var(--tw-ring-opacity,1))}.ring-gray-6{--tw-ring-opacity:1;--tw-ring-color:rgb(215 218 225/var(--tw-ring-opacity,1))}.ring-gray-7{--tw-ring-opacity:1;--tw-ring-color:rgb(203 207 215/var(--tw-ring-opacity,1))}.ring-juniper-10{--tw-ring-opacity:1;--tw-ring-color:rgb(30 192 143/var(--tw-ring-opacity,1))}.ring-juniper-11{--tw-ring-opacity:1;--tw-ring-color:rgb(0 130 91/var(--tw-ring-opacity,1))}.ring-juniper-11\/30{--tw-ring-color:rgba(0,130,91,.3)}.ring-juniper-11\/70{--tw-ring-color:rgba(0,130,91,.7)}.ring-juniper-12{--tw-ring-opacity:1;--tw-ring-color:rgb(11 61 44/var(--tw-ring-opacity,1))}.ring-juniper-2{--tw-ring-opacity:1;--tw-ring-color:rgb(242 252 247/var(--tw-ring-opacity,1))}.ring-juniper-3{--tw-ring-opacity:1;--tw-ring-color:rgb(224 248 237/var(--tw-ring-opacity,1))}.ring-juniper-4{--tw-ring-opacity:1;--tw-ring-color:rgb(205 243 226/var(--tw-ring-opacity,1))}.ring-juniper-6{--tw-ring-opacity:1;--tw-ring-color:rgb(155 226 196/var(--tw-ring-opacity,1))}.ring-juniper-9{--tw-ring-opacity:1;--tw-ring-color:rgb(51 203 154/var(--tw-ring-opacity,1))}.ring-opacity-5{--tw-ring-opacity:.05}.blur{--tw-blur:blur(8px)}.blur,.blur-3xl{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)}.blur-3xl{--tw-blur:blur(64px)}.brightness-0{--tw-brightness:brightness(0)}.brightness-0,.drop-shadow{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)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.drop-shadow-sm{--tw-drop-shadow:drop-shadow(0 1px 1px rgba(0,0,0,.05))}.drop-shadow-sm,.grayscale{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)}.grayscale{--tw-grayscale:grayscale(100%)}.invert{--tw-invert:invert(100%);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)}.\!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)!important}.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-md{-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-md{--tw-backdrop-blur:blur(12px)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px)}.backdrop-blur-sm,.backdrop-filter{-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)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[border-color\]{transition-duration:.15s;transition-property:border-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;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)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.delay-100{transition-delay:.1s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.duration-0{transition-duration:0s}.duration-100{transition-duration:.1s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.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)}.will-change-transform{will-change:transform}.surface-elevated{border:.5px solid #d7dae1;box-shadow:0 3px 6px -2px #00000006,0 1px 1px #0000000b}.surface-elevated-md{border:.5px solid #d7dae1;box-shadow:0 4px 8px -2px #00000008,0 2px 2px #0000000f}.border-fade-r{--border-fade-angle:270deg}.border-fade-b,.border-fade-r{-o-border-image:linear-gradient(var(--border-fade-angle),transparent,currentColor 50%) 1;border-image:linear-gradient(var(--border-fade-angle),transparent,currentColor 50%) 1}.border-fade-b{--border-fade-angle:0deg}.border-fade-lr{-o-border-image:linear-gradient(90deg,transparent,currentColor 25%,currentColor 75%,transparent) 1;border-image:linear-gradient(90deg,transparent,currentColor 25%,currentColor 75%,transparent) 1}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}html{scroll-padding-top:72px}body,html{height:100%}body{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));font-family:Google Sans,-apple-system,BlinkMacSystemFont,avenir next,avenir,segoe ui,helvetica neue,helvetica,Cantarell,Ubuntu,roboto,noto,arial,sans-serif;--tw-text-opacity:1;color:rgb(29 31 37/var(--tw-text-opacity,1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-optical-sizing:auto;font-variation-settings:"GRAD" 0}#__nuxt{height:100%}.placeholder\:text-gray-7::-moz-placeholder{--tw-text-opacity:1;color:rgb(203 207 215/var(--tw-text-opacity,1))}.placeholder\:text-gray-7::placeholder{--tw-text-opacity:1;color:rgb(203 207 215/var(--tw-text-opacity,1))}.placeholder\:text-gray-9::-moz-placeholder{--tw-text-opacity:1;color:rgb(138 142 152/var(--tw-text-opacity,1))}.placeholder\:text-gray-9::placeholder{--tw-text-opacity:1;color:rgb(138 142 152/var(--tw-text-opacity,1))}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-0:before{content:var(--tw-content);top:0;right:0;bottom:0;left:0}.before\:z-0:before{content:var(--tw-content);z-index:0}.before\:rounded-\[inherit\]:before{border-radius:inherit;content:var(--tw-content)}.before\:bg-\[radial-gradient\(circle_at_100\%_100\%\,_\#cdf3e2_0\%\,_\#e0f8ed_25\%\,_\#f2fcf7_50\%\,_white_80\%\)\]:before{background-image:radial-gradient(circle at 100% 100%,#cdf3e2 0,#e0f8ed,#f2fcf7 50%,#fff 80%);content:var(--tw-content)}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:transition-opacity:before{content:var(--tw-content);transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.before\:duration-300:before{content:var(--tw-content);transition-duration:.3s}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.first\:pt-0:first-child{padding-top:0}.focus-within\:text-juniper-12:focus-within{--tw-text-opacity:1;color:rgb(11 61 44/var(--tw-text-opacity,1))}.hover\:rotate-0:hover{--tw-rotate:0deg}.hover\:rotate-0:hover,.hover\:scale-105:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:border-juniper-6:hover{--tw-border-opacity:1;border-color:rgb(155 226 196/var(--tw-border-opacity,1))}.hover\:bg-gray-2:hover{--tw-bg-opacity:1;background-color:rgb(248 249 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-3:hover{--tw-bg-opacity:1;background-color:rgb(239 240 244/var(--tw-bg-opacity,1))}.hover\:bg-juniper-1:hover{--tw-bg-opacity:1;background-color:rgb(250 254 252/var(--tw-bg-opacity,1))}.hover\:bg-juniper-10:hover{--tw-bg-opacity:1;background-color:rgb(30 192 143/var(--tw-bg-opacity,1))}.hover\:bg-juniper-11:hover{--tw-bg-opacity:1;background-color:rgb(0 130 91/var(--tw-bg-opacity,1))}.hover\:bg-juniper-11\/70:hover{background-color:#00825bb3}.hover\:bg-juniper-11\/90:hover{background-color:#00825be6}.hover\:bg-juniper-2:hover{--tw-bg-opacity:1;background-color:rgb(242 252 247/var(--tw-bg-opacity,1))}.hover\:bg-juniper-3:hover{--tw-bg-opacity:1;background-color:rgb(224 248 237/var(--tw-bg-opacity,1))}.hover\:from-gray-1:hover{--tw-gradient-from:#fcfcfd var(--tw-gradient-from-position);--tw-gradient-to:rgba(252,252,253,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.hover\:to-gray-3:hover{--tw-gradient-to:#eff0f4 var(--tw-gradient-to-position)}.hover\:px-3:hover{padding-left:.75rem;padding-right:.75rem}.hover\:text-\[\#0969da\]:hover{--tw-text-opacity:1;color:rgb(9 105 218/var(--tw-text-opacity,1))}.hover\:text-\[\#1f2328\]:hover{--tw-text-opacity:1;color:rgb(31 35 40/var(--tw-text-opacity,1))}.hover\:text-gray-11:hover{--tw-text-opacity:1;color:rgb(96 100 109/var(--tw-text-opacity,1))}.hover\:text-gray-12:hover{--tw-text-opacity:1;color:rgb(29 31 37/var(--tw-text-opacity,1))}.hover\:text-juniper-1:hover{--tw-text-opacity:1;color:rgb(250 254 252/var(--tw-text-opacity,1))}.hover\:text-juniper-11:hover{--tw-text-opacity:1;color:rgb(0 130 91/var(--tw-text-opacity,1))}.hover\:text-juniper-12:hover{--tw-text-opacity:1;color:rgb(11 61 44/var(--tw-text-opacity,1))}.hover\:text-juniper-7:hover{--tw-text-opacity:1;color:rgb(115 211 174/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow:hover{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:surface-elevated-md:hover{border:.5px solid #d7dae1;box-shadow:0 4px 8px -2px #00000008,0 2px 2px #0000000f}.hover\:before\:opacity-100:hover:before{content:var(--tw-content);opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0: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(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0: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-juniper-6:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(155 226 196/var(--tw-ring-opacity,1))}.focus\:ring-juniper-8:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(28 191 143/var(--tw-ring-opacity,1))}.focus\:ring-juniper-9:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(51 203 154/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.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-juniper-9:focus-visible{outline-color:#33cb9a}.active\:cursor-grabbing:active{cursor:grabbing}.active\:shadow-inner:active{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.disabled\:opacity-50:disabled{opacity:.5}.group:focus-within .group-focus-within\:visible{visibility:visible}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:visible{visibility:visible}.group:hover .group-hover\:ml-2{margin-left:.5rem}.group:hover .group-hover\:max-w-xs{max-width:20rem}.group:hover .group-hover\:translate-x-0{--tw-translate-x:0px}.group:hover .group-hover\:translate-x-0,.group:hover .group-hover\:translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-x-1{--tw-translate-x:.25rem}.group:hover .group-hover\:translate-x-1\/4{--tw-translate-x:25%}.group:hover .group-hover\:translate-x-1\/4,.group:hover .group-hover\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:translate-y-0{--tw-translate-y:0px}.group:hover .group-hover\:translate-y-1\/4{--tw-translate-y:25%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.group:hover .group-hover\:text-gray-12{--tw-text-opacity:1;color:rgb(29 31 37/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-juniper-11{--tw-text-opacity:1;color:rgb(0 130 91/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-juniper-12{--tw-text-opacity:1;color:rgb(11 61 44/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-juniper-6{--tw-text-opacity:1;color:rgb(155 226 196/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-50{opacity:.5}.group:hover .group-hover\:grayscale-0{--tw-grayscale:grayscale(0);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)}.group:hover .group-hover\:backdrop-blur-md{--tw-backdrop-blur:blur(12px);-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)}.prose-h1\:border-b-0 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){border-bottom-width:0}.prose-h1\:text-xl :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.25rem;line-height:1.75rem}.prose-h2\:mb-0 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:0}.prose-h2\:border-b-0 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){border-bottom-width:0}.prose-h2\:border-none :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){border-style:none}.prose-h2\:font-mono :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-family:Google Sans Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.prose-h2\:text-base :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1rem;line-height:1.5rem}.prose-h2\:text-xl :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.25rem;line-height:1.75rem}.prose-h2\:font-medium :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:500}.prose-h2\:font-normal :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:400}.prose-h2\:uppercase :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){text-transform:uppercase}.prose-h2\:text-juniper-9 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(51 203 154/var(--tw-text-opacity,1))}.prose-h3\:text-base :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1rem;line-height:1.5rem}.prose-h3\:font-medium :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:500}.prose-p\:text-pretty :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){text-wrap:pretty}.prose-p\:text-sm :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}.prose-p\:text-gray-8 :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(183 188 198/var(--tw-text-opacity,1))}.prose-a\:hover\:text-juniper-9:hover :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity:1;color:rgb(51 203 154/var(--tw-text-opacity,1))}.prose-code\:text-sm :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}.prose-code\:leading-relaxed :is(:where(code):not(:where([class~=not-prose],[class~=not-prose] *))){line-height:1.625}.prose-pre\:ring-0 :is(:where(pre):not(:where([class~=not-prose],[class~=not-prose] *))){--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.prose-ul\:text-sm :is(:where(ul):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}.prose-li\:text-sm :is(:where(li):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}@media (prefers-reduced-motion:no-preference){@keyframes shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}.motion-safe\:animate-\[shimmer_2\.5s_infinite\]{animation:shimmer 2.5s infinite}}@media (min-width:640px){.sm\:absolute{position:absolute}.sm\:-left-10{left:-2.5rem}.sm\:-left-20{left:-5rem}.sm\:-top-12{top:-3rem}.sm\:left-auto{left:auto}.sm\:top-40{top:10rem}.sm\:top-\[-72px\]{top:-72px}.sm\:order-1{order:1}.sm\:order-2{order:2}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-5{grid-column:span 5/span 5}.sm\:col-span-9{grid-column:span 9/span 9}.sm\:m-0{margin:0}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:my-12{margin-bottom:3rem;margin-top:3rem}.sm\:my-8{margin-bottom:2rem;margin-top:2rem}.sm\:-mt-20{margin-top:-5rem}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-20{margin-bottom:5rem}.sm\:mb-8{margin-bottom:2rem}.sm\:ml-12{margin-left:3rem}.sm\:mt-12{margin-top:3rem}.sm\:mt-16{margin-top:4rem}.sm\:mt-8{margin-top:2rem}.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:aspect-\[2\/1\]{aspect-ratio:2/1}.sm\:h-10{height:2.5rem}.sm\:h-12{height:3rem}.sm\:h-16{height:4rem}.sm\:h-24{height:6rem}.sm\:h-4{height:1rem}.sm\:h-5{height:1.25rem}.sm\:h-64{height:16rem}.sm\:h-7{height:1.75rem}.sm\:h-8{height:2rem}.sm\:h-9{height:2.25rem}.sm\:h-96{height:24rem}.sm\:h-\[362px\]{height:362px}.sm\:h-\[500px\]{height:500px}.sm\:h-\[72px\]{height:72px}.sm\:h-auto{height:auto}.sm\:min-h-0{min-height:0}.sm\:min-h-72{min-height:18rem}.sm\:min-h-96{min-height:24rem}.sm\:min-h-\[380px\]{min-height:380px}.sm\:min-h-\[500px\]{min-height:500px}.sm\:w-12{width:3rem}.sm\:w-32{width:8rem}.sm\:w-4{width:1rem}.sm\:w-5{width:1.25rem}.sm\:w-8{width:2rem}.sm\:w-\[300px\]{width:300px}.sm\:w-auto{width:auto}.sm\:min-w-0{min-width:0}.sm\:min-w-12{min-width:3rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:-translate-y-6{--tw-translate-y:-1.5rem}.sm\:-translate-y-6,.sm\:translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-x-0{--tw-translate-x:0px}.sm\:translate-x-2{--tw-translate-x:.5rem}.sm\:translate-x-2,.sm\:translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-y-0{--tw-translate-y:0px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1}.sm\:scale-100,.sm\:scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.sm\:grid-cols-12{grid-template-columns:repeat(12,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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-end{justify-content:flex-end}.sm\:justify-center{justify-content:center}.sm\:gap-0{gap:0}.sm\:gap-12{gap:3rem}.sm\:gap-16{gap:4rem}.sm\:gap-3{gap:.75rem}.sm\:gap-4{gap:1rem}.sm\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.sm\:gap-y-0{row-gap:0}.sm\:gap-y-6{row-gap:1.5rem}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\: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))}.sm\: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)))}.sm\:space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(3rem*var(--tw-space-y-reverse));margin-top:calc(3rem*(1 - var(--tw-space-y-reverse)))}.sm\:space-y-24>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(6rem*var(--tw-space-y-reverse));margin-top:calc(6rem*(1 - var(--tw-space-y-reverse)))}.sm\: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)))}.sm\:space-y-32>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(8rem*var(--tw-space-y-reverse));margin-top:calc(8rem*(1 - var(--tw-space-y-reverse)))}.sm\: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)))}.sm\: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)))}.sm\:overflow-visible{overflow:visible}.sm\:rounded-md{border-radius:.375rem}.sm\:rounded-none{border-radius:0}.sm\:rounded-xl{border-radius:.75rem}.sm\:border-0{border-width:0}.sm\:border-x-2{border-left-width:2px;border-right-width:2px}.sm\:border-b{border-bottom-width:1px}.sm\:border-l{border-left-width:1px}.sm\:border-r{border-right-width:1px}.sm\:border-t{border-top-width:1px}.sm\:border-t-0{border-top-width:0}.sm\:border-dashed{border-style:dashed}.sm\:border-gray-7{--tw-border-opacity:1;border-color:rgb(203 207 215/var(--tw-border-opacity,1))}.sm\:border-ink-50{--tw-border-opacity:1;border-color:rgb(48 53 64/var(--tw-border-opacity,1))}.sm\:bg-juniper-2{--tw-bg-opacity:1;background-color:rgb(242 252 247/var(--tw-bg-opacity,1))}.sm\:bg-transparent{background-color:transparent}.sm\:bg-none{background-image:none}.sm\:bg-top{background-position:top}.sm\:object-contain{-o-object-fit:contain;object-fit:contain}.sm\:p-0{padding:0}.sm\:p-12{padding:3rem}.sm\:p-16{padding:4rem}.sm\:p-20{padding:5rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-20{padding-left:5rem;padding-right:5rem}.sm\:px-32{padding-left:8rem;padding-right:8rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-12{padding-bottom:3rem;padding-top:3rem}.sm\:py-16{padding-bottom:4rem;padding-top:4rem}.sm\:py-20{padding-bottom:5rem;padding-top:5rem}.sm\:py-24{padding-bottom:6rem;padding-top:6rem}.sm\:py-3{padding-bottom:.75rem;padding-top:.75rem}.sm\:py-32{padding-bottom:8rem;padding-top:8rem}.sm\:py-36{padding-bottom:9rem;padding-top:9rem}.sm\:py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\:py-8{padding-bottom:2rem;padding-top:2rem}.sm\:pb-10{padding-bottom:2.5rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pb-16{padding-bottom:4rem}.sm\:pb-20{padding-bottom:5rem}.sm\:pb-8{padding-bottom:2rem}.sm\:pl-0{padding-left:0}.sm\:pl-12{padding-left:3rem}.sm\:pl-6{padding-left:1.5rem}.sm\:pl-8{padding-left:2rem}.sm\:pr-0{padding-right:0}.sm\:pt-0{padding-top:0}.sm\:pt-12{padding-top:3rem}.sm\:pt-16{padding-top:4rem}.sm\:pt-32{padding-top:8rem}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}.sm\:text-center{text-align:center}.sm\:text-right{text-align:right}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.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-8xl{font-size:6rem;line-height:1}.sm\:text-\[11px\]{font-size:11px}.sm\:text-\[26px\]{font-size:26px}.sm\:text-\[3\.5rem\]{font-size:3.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:font-bold{font-weight:700}.sm\:font-medium{font-weight:500}.sm\:leading-6{line-height:1.5rem}.sm\:leading-8{line-height:2rem}.sm\:leading-9{line-height:2.25rem}.sm\:leading-loose{line-height:2}.sm\:leading-normal{line-height:1.5}.sm\:leading-tight{line-height:1.25}.sm\:text-gray-11{--tw-text-opacity:1;color:rgb(96 100 109/var(--tw-text-opacity,1))}.sm\:text-juniper-12{--tw-text-opacity:1;color:rgb(11 61 44/var(--tw-text-opacity,1))}.sm\: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)}.sm\:ring-0,.sm\:ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.sm\: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)}.sm\:ring-gray-3{--tw-ring-opacity:1;--tw-ring-color:rgb(239 240 244/var(--tw-ring-opacity,1))}.sm\:transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sm\:duration-300{transition-duration:.3s}.sm\:border-fade-tb{-o-border-image:linear-gradient(180deg,transparent,currentColor 25%,currentColor 75%,transparent) 1;border-image:linear-gradient(180deg,transparent,currentColor 25%,currentColor 75%,transparent) 1}.sm\:hover\:bg-juniper-1:hover{--tw-bg-opacity:1;background-color:rgb(250 254 252/var(--tw-bg-opacity,1))}.group:hover .sm\:group-hover\:scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .sm\:group-hover\:grayscale{--tw-grayscale:grayscale(100%);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)}.sm\:prose-h1\:text-2xl :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.5rem;line-height:2rem}}@media (min-width:768px){.md\:col-span-2{grid-column:span 2/span 2}.md\:mt-0{margin-top:0}.md\:block{display:block}.md\:grid{display:grid}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[200px_1fr\]{grid-template-columns:200px 1fr}.md\:gap-8{gap:2rem}.md\:px-0{padding-left:0;padding-right:0}}@media (min-width:1024px){.lg\:mx-0{margin-left:0;margin-right:0}.lg\:ml-16{margin-left:4rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:aspect-square{aspect-ratio:1/1}.lg\:h-80{height:20rem}.lg\:w-14{width:3.5rem}.lg\:w-48{width:12rem}.lg\:min-w-16{min-width:4rem}.lg\:max-w-none{max-width:none}.lg\:flex-1{flex:1 1 0%}.lg\:shrink-0{flex-shrink:0}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.lg\:grid-cols-\[270px_360px_1fr\]{grid-template-columns:270px 360px 1fr}.lg\:flex-row{flex-direction:row}.lg\:justify-end{justify-content:flex-end}.lg\:gap-6{gap:1.5rem}.lg\:px-0{padding-left:0;padding-right:0}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-8{padding-top:2rem}}@media (min-width:1280px){.xl\:mt-0{margin-top:0}.xl\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.xl\: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))}}@media print{.print\:hidden{display:none}.print\:px-0{padding-left:0;padding-right:0}.print\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.print\: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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}}.\[\&\>td\:first-child\]\:font-\[450\]>td:first-child{font-weight:450}.\[\&\>td\:not\(\:first-child\)\]\:font-mono>td:not(:first-child){font-family:Google Sans Mono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.\[\&\>td\:not\(\:first-child\)\]\:tabular-nums>td:not(:first-child){--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}.\[\&_tr\]\:border-gray-6 tr{--tw-border-opacity:1;border-color:rgb(215 218 225/var(--tw-border-opacity,1))}</style>
<style>.progressive-blur[data-v-db722764]{--blur-height:72px}.blur-layer[data-v-db722764]{height:var(--blur-height);top:0;right:0;bottom:0;left:0;position:absolute}.blur-layer-1[data-v-db722764]{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);mask-image:linear-gradient(180deg,#000 0,transparent 30%);-webkit-mask-image:linear-gradient(180deg,#000 0,transparent 30%)}.blur-layer-2[data-v-db722764]{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);mask-image:linear-gradient(180deg,#000 0,#000 20%,transparent 50%);-webkit-mask-image:linear-gradient(180deg,#000 0,#000 20%,transparent 50%)}.blur-layer-3[data-v-db722764]{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);mask-image:linear-gradient(180deg,#000 0,#000 40%,transparent 70%);-webkit-mask-image:linear-gradient(180deg,#000 0,#000 40%,transparent 70%)}.blur-layer-4[data-v-db722764]{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);mask-image:linear-gradient(180deg,#000 0,#000 60%,transparent);-webkit-mask-image:linear-gradient(180deg,#000 0,#000 60%,transparent)}</style>
<style>@media (min-width:640px){div[data-v-e2e5eed3]{height:var(--spacer-desktop,var(--spacer-mobile))}}</style>
<style>[ref=carouselContainerRef][data-v-c5aa204e]{touch-action:pan-y}</style>
<style>.github-pr-review[data-v-cbb0a08f]{font-size:.875rem;line-height:1.25rem}.github-pr-review table[data-v-cbb0a08f]{border-collapse:collapse}.mono-font[data-v-cbb0a08f]{font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace}.logo-square[data-v-cbb0a08f]{align-items:center;background:#fff;border:1px solid #d1d9e0;border-radius:6px;display:flex;flex-shrink:0;height:40px;justify-content:center;overflow:hidden;width:40px}.timeline-line-top[data-v-cbb0a08f]{flex-shrink:0;height:32px}.timeline-line[data-v-cbb0a08f],.timeline-line-top[data-v-cbb0a08f]{background-color:#d1d9e0;width:2px}.timeline-line[data-v-cbb0a08f]{flex:1}.timeline-column[data-v-cbb0a08f]{display:flex;justify-content:center}.timeline-line-vertical[data-v-cbb0a08f]{background-color:#d1d9e0;height:100%;width:2px}.eye-icon-wrapper[data-v-cbb0a08f]{align-items:center;background:#f6f8fa;border:2px solid #fff;border-radius:50%;display:flex;flex-shrink:0;height:28px;justify-content:center;position:relative;width:28px;z-index:1}.bot-badge[data-v-cbb0a08f]{background:#f6f8fa;border:1px solid #d1d9e0;border-radius:9999px;color:#59636e;font-size:12px;font-weight:500;padding:0 6px}.comment-box[data-v-cbb0a08f]{border:1px solid #d1d9e0;border-radius:6px;margin-left:-44px;margin-top:16px;overflow:hidden}.comment-header[data-v-cbb0a08f]{background:#f6f8fa;border-bottom:1px solid #d1d9e0;padding:8px 16px}.reaction-btn[data-v-cbb0a08f]{align-items:center;background:transparent;border:1px solid #d1d9e0;border-radius:50%;color:#59636e;display:flex;height:26px;justify-content:center;width:26px}.reaction-btn[data-v-cbb0a08f]:hover{background:#f6f8fa;color:#1f2328}.reaction-btn-active[data-v-cbb0a08f]{align-items:center;background:#ddf4ff;border:1px solid #0969da;border-radius:9999px;color:#0969da;display:flex;gap:4px;height:26px;justify-content:center;padding:0 8px}.annotation-card[data-v-cbb0a08f]{border:1px solid #d1d9e0;border-radius:6px;overflow:hidden}.file-header[data-v-cbb0a08f]{background:#f6f8fa;padding:8px 16px}.lines-header[data-v-cbb0a08f]{border-bottom:1px solid #d1d9e0;padding:8px 16px}.inline-code[data-v-cbb0a08f]{background:#eff1f3;border-radius:4px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;font-size:13px;font-weight:400;padding:2px 6px}.diff-line-added[data-v-cbb0a08f]{background-color:#dafbe1}.diff-line-num[data-v-cbb0a08f]{border-right:1px solid #aceebb;color:#1f232866;padding:0 12px;text-align:right;width:50px}.diff-line-num[data-v-cbb0a08f],.diff-line-sign[data-v-cbb0a08f]{background-color:#ccffd8;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:top}.diff-line-sign[data-v-cbb0a08f]{color:#1a7f37;padding:0 8px;text-align:center;width:20px}.diff-line-code[data-v-cbb0a08f]{background-color:#dafbe1;color:#1f2328;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;line-height:20px;padding:0 8px;white-space:pre}</style>
<style>.highlighted-line[data-v-67be8fd2]{background-color:#ef5f001a}.highlighted-num[data-v-67be8fd2]{background-color:#ef5f0033;--tw-text-opacity:1;color:rgb(203 207 215/var(--tw-text-opacity,1))}.diff-line-removed[data-v-67be8fd2]{background-color:#dd44251a}.diff-line-added[data-v-67be8fd2]{background-color:#33cb9a1a}.diff-num-removed[data-v-67be8fd2]{background-color:#dd442526}.diff-num-added[data-v-67be8fd2]{background-color:#33cb9a26}.diff-sign-removed[data-v-67be8fd2]{background-color:#dd442526}.diff-sign-added[data-v-67be8fd2]{background-color:#33cb9a26}.footer-btn-primary[data-v-67be8fd2]{align-items:center;border-radius:.375rem;display:flex;gap:.375rem;--tw-bg-opacity:1;background-color:rgb(0 130 91/var(--tw-bg-opacity,1));font-size:.875rem;font-weight:500;line-height:1.25rem;padding:.375rem 1rem;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1));transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.footer-btn-primary[data-v-67be8fd2]:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ripple-pulse-67be8fd2{0%{box-shadow:0 0 #00825b80}70%{box-shadow:0 0 0 10px #00825b00}to{box-shadow:0 0 #00825b00}}.cta-pulse[data-v-67be8fd2]{animation:ripple-pulse-67be8fd2 2s ease-out infinite}.cta-pulse[data-v-67be8fd2]:hover{animation:none;box-shadow:0 0 16px #00825b66}</style>
<style>.breathing-gradient[data-v-af6e62d3]{animation:gradient-breathe-af6e62d3 var(--duration,8s) ease infinite}@keyframes gradient-breathe-af6e62d3{0%{background-position:0 50%}50%{background-position:100% 50%}to{background-position:0 50%}}</style>
<style>.feature-icon[data-v-888872c6]{filter:drop-shadow(1px 1px 0 #b7bcc6) drop-shadow(1.5px 1.5px .5px #cbcfd7) drop-shadow(-1px -1px 0 white) drop-shadow(-1.5px -1.5px .5px white)}.group:hover .feature-icon[data-v-888872c6]{filter:drop-shadow(1px 1px 0 #73d3ae) drop-shadow(-1px -1px 0 #e0f8ed) drop-shadow(0 0 8px rgba(51,203,154,.5)) drop-shadow(0 0 16px rgba(51,203,154,.3))}</style>
<style>.slide-fade-enter-active[data-v-a35da1b8],.slide-fade-leave-active[data-v-a35da1b8]{transition:all .3s ease}.slide-fade-enter-from[data-v-a35da1b8]{opacity:0;transform:translate(-20px)}.slide-fade-leave-to[data-v-a35da1b8]{opacity:0;transform:translate(20px)}</style>
<link rel="stylesheet" href="/_nuxt/PrimaryNavbar.jW29nEOf.css" crossorigin>
<link rel="preload" href="/fonts/GoogleSans-Latin.woff2" as="font" type="font/woff2" crossorigin="anonymous">
<link rel="preload" as="fetch" crossorigin="anonymous" href="/_payload.json?3270ab90-8cbc-4852-b834-6c21a2a7b668">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/B7oxwfGf.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/AGGGVWRz.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/qIPmY_pD.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDvW-FwA.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bl5dyPGB.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/C2L9oZ--.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DJjF7Ups.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CayEAvHG.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/hbOoBq-x.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/1guSo630.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DpsljcxM.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CFUP8QZS.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZOAB7MS.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/EFEwO3rV.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/7Pvlxqgl.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BS3pHK8L.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/lBZuiSR4.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/rpk_3FEc.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BT9xzlrV.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/xfElaCe3.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BoxkyMlG.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwRWimdK.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DAhQDJk9.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/C2nCnLuk.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/By7CnpYe.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/D6M1x4DR.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BayZqPJr.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BrCz_Jkz.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/xIfNe5QU.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPJXn9pJ.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BD5Apa_4.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DENz-2Bw.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DvG_eCN-.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BUWd5mEo.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BV1nwedo.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CMZ6hHSI.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/ubgFC2Ld.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Ds932ypf.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CEnYjqVE.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/ydb7T9tN.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/Eyd9UuGz.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/TRoQtIsn.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CRVh1Kn4.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DzGMHo2z.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLNRn0ps.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DoPd0Zfm.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/C8et1zz8.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/W7BX6bg6.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/CIlEf5Ib.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/DMStZJn-.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/zJk9MR1q.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/N3ReadWV.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/AIFlEnsi.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/1Ee4V3kx.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BqFXD3KN.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/BIWEwRu1.js">
<link rel="modulepreload" as="script" crossorigin href="/_nuxt/C7YRwNgL.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/qIbtEKQb.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/7vwBloLq.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/Ban0ptTg.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/BkFjR8fm.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/CPA453x-.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/ByF0EqQf.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/D2-2CzZ4.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/56Tl1d_F.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/C4n3aH4V.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/C0U5_DWj.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/DYc7YY5m.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/z4dWpg0f.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/Lo3RV0bn.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/Cz7SCDXd.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/BP7WaXQS.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/DsbL7TR3.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/CftJ_WTj.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/B0cb_xqi.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/BRXaHCvh.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/1VqKjOG5.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/BVGRx9PE.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/CsergEba.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/C8xyx5cx.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/CjGv3np2.js">
<link rel="prefetch" as="script" crossorigin href="/_nuxt/CYNq6mhs.js">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/wordmark-light.CeVwEKwA.svg">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/wordmark-dark.BRIz8Re1.svg">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/ancestry.BBs6eTLz.svg">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/babbel.BiLLfM2Y.svg">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/confluence.BaLwl-wl.png">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/creditxpert.CkKyo7M0.svg">
<link rel="prefetch" as="image" type="image/webp" href="/_nuxt/intel.B9aqF4jb.webp">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/lime.B6gBFgFh.png">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/omnigo.BBzTCsP9.png">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/ordaos.C7M1bmVQ.png">
<link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/privacydynamics.C14ilKMN.svg">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/redcloud.CQT16YSK.png">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/rudderstack.ffMTcWVq.png">
<link rel="prefetch" as="image" type="image/png" href="/_nuxt/subsalt.L0wu3bcK.png">
<link rel="llms-txt" href="/llms.txt" type="text/plain">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" type="image/svg+xml" href="/favicon-dark.svg">
<link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180">
<meta name="theme-color" content="#BFEDDF">
<meta property="og:type" content="website">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta property="og:title" content="DeepSource: The AI Code Review Platform">
<meta name="description" content="Your team is writing more code with AI. DeepSource automates code reviews so you ship to production faster — catching security issues, improving code quality, and helping your team write better code. 14-day free trial.">
<meta property="og:description" content="Your team is writing more code with AI. DeepSource automates code reviews so you ship to production faster — catching security issues, improving code quality, and helping your team write better code. 14-day free trial.">
<script type="module" src="/_nuxt/B7oxwfGf.js" crossorigin></script>
<script id="unhead:payload" type="application/json">{"templateParams":{"separator":"•"}}</script>
<link rel="canonical" href="https://deepsource.com/">
<meta property="og:url" content="https://deepsource.com/">
<meta property="og:locale" content="en">
<meta property="og:site_name" content="DeepSource">
<style>:where(.i-raphael\:quote){display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' width='32' height='32'%3E%3Cpath fill='black' d='M14.505 5.873Q8.6 9.654 8.6 14.98q0 1.657.577 1.657l.396-.107q.467-.18.756-.18q1.692 0 2.825 1.23t1.134 3.036q-.001 1.736-1.225 2.947q-1.224 1.21-2.952 1.21q-2.412 0-3.98-1.983q-1.564-1.98-1.564-4.977q-.001-3.39 1.33-6.203q1.334-2.812 4.068-5.085q2.736-2.271 3.492-2.272q.504 0 .828.486q.324.485.324.845l-.107.288zm12.96 0q-5.905 3.78-5.904 9.108q0 1.657.577 1.657l.396-.107q.467-.18.756-.18q1.656 0 2.807 1.23q1.153 1.228 1.152 3.036q-.001 1.736-1.225 2.947q-1.224 1.21-2.952 1.21q-2.412 0-3.98-1.983q-1.564-1.98-1.564-4.977q-.002-3.426 1.35-6.256q1.35-2.831 4.067-5.067q2.722-2.237 3.475-2.237q.505 0 .83.486q.323.486.323.846z'/%3E%3C/svg%3E")}</style>
<link rel="preload" as="fetch" fetchpriority="low" crossorigin="anonymous" href="/_nuxt/builds/meta/3270ab90-8cbc-4852-b834-6c21a2a7b668.json"></head><body><div id="__nuxt"><div><div class="document-driven-page"><main class="relative"><div class="absolute top-0 left-0 right-0 h-[512px] opacity-30 bg-gradient-to-b from-juniper-9 to-transparent -z-10 pointer-events-none"></div><header class="fixed top-0 z-50 w-full" data-v-db722764><div class="progressive-blur pointer-events-none absolute inset-0" data-v-db722764><div class="blur-layer blur-layer-1" data-v-db722764></div><div class="blur-layer blur-layer-2" data-v-db722764></div><div class="blur-layer blur-layer-3" data-v-db722764></div><div class="blur-layer blur-layer-4" data-v-db722764></div></div><nav class="text-gray-12 relative mx-auto flex max-w-7xl space-x-6 xl:space-x-8 items-center justify-between p-6" aria-label="Global" data-v-db722764><div class="flex flex-shrink-0" data-v-db722764><a aria-current="page" href="/" class="router-link-active router-link-exact-active -m-1.5 p-1.5" data-v-db722764><span class="sr-only" data-v-db722764>DeepSource</span><img class="h-6 w-auto flex-shrink-0" src="/_nuxt/wordmark-dark.BRIz8Re1.svg" alt="DeepSource" data-v-db722764></a></div><div class="flex lg:hidden" data-v-db722764><button type="button" class="-m-2.5 inline-flex items-center justify-center rounded-md p-2.5" data-v-db722764><span class="sr-only" data-v-db722764>Open main menu</span><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="h-6 w-6 stroke-2" data-v-db722764><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path></svg></button></div><!--[--><div class="hidden lg:flex gap-x-6 xl:gap-x-8 translate-y-[2px]"><!----><!--[--><a href="/benchmarks" class="text-sm font-medium leading-6" data-v-db722764>Benchmarks</a><a href="/customers" class="text-sm font-medium leading-6" data-v-db722764>Customers</a><a href="/pricing" class="text-sm font-medium leading-6" data-v-db722764>Pricing</a><a href="https://docs.deepsource.com" rel="noopener noreferrer" class="text-sm font-medium leading-6" data-v-db722764>Docs</a><!--]--><!--[--><!--[--><div class="relative" data-headlessui-state><!--[--><button class="flex items-center gap-x-1 text-sm font-medium leading-6 outline-none" id="headlessui-popover-button-v-0-0" type="button" aria-expanded="false" data-headlessui-state> Resources <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 flex-none" data-v-db722764><path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button><!----><!--]--><!----></div><!--]--><!----><!--]--></div><div hidden style="position:fixed;top:1;left:1;width:1;height:0;padding:0;margin:-1;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none;"></div><!--]--><div class="hidden lg:flex lg:flex-1 lg:justify-end gap-x-4" data-v-db722764><a href="https://app.deepsource.com/login" class="text-sm font-medium leading-6 mr-2" data-v-db722764> Log in </a><a href="https://app.deepsource.com/signup" class="text-sm font-medium leading-6 rounded px-2.5 py-1 -my-1 shadow-sm ring-1 ring-inset bg-juniper-1 hover:bg-gray-2 ring-gray-6" data-v-db722764>Sign up</a><button class="bg-juniper-2 hover:bg-juniper-3 ring-juniper-9 text-juniper-11 text-sm font-semibold leading-6 rounded px-2.5 py-1 -my-1 shadow-sm ring-1 ring-inset cursor-pointer" data-v-db722764>Contact Sales</button></div></nav><!--[--><!----><div hidden style="position:fixed;top:1;left:1;width:1;height:0;padding:0;margin:-1;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none;"></div><!--]--></header><div class="h-[36px] sm:h-[72px]" aria-hidden="true"></div><!--[--><div><!----><div style="--spacer-mobile:4rem;--spacer-desktop:6rem;height:var(--spacer-mobile);" aria-hidden="true" data-v-e2e5eed3></div><div class="relative overflow-visible"><!----><div class="relative mx-auto max-w-7xl px-6 lg:flex flex flex-col"><div><a href="/blog/mcp-server" class="inline-flex flex-col space-y-2 sm:space-y-0 sm:flex-row sm:space-x-2 group"><span><span class="inline-flex items-center gap-x-1.5 rounded-full px-2 py-1 text-[10px] sm:text-[11px] uppercase tracking-wide font-semibold text-juniper-11 ring-1 ring-inset ring-juniper-10"><svg class="h-1.5 w-1.5 fill-juniper-11" viewBox="0 0 6 6" aria-hidden="true"><circle cx="3" cy="3" r="3"></circle></svg><span>New</span></span></span><span class="inline-flex items-center text-sm font-medium leading-6 text-juniper-12"><span>New: DeepSource MCP Server</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 text-juniper-12 group-hover:translate-x-1 transition-transform duration-150"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></span></a></div><div class="border-b border-juniper-12/40 pb-6 sm:pb-8 mb-6 sm:mb-8"><h1 class="mt-6 text-[2.5rem] leading-tight font-bold text-juniper-12 sm:text-[3.5rem] tracking-tight sm:max-w-xl">Your green light to ship with confidence.</h1></div><section class="grid grid-cols-1 sm:grid-cols-2 gap-4"><div><p class="font-semibold sm:font-medium text-xl text-juniper-12/80">AI Code Review Platform</p></div><div><p class="text-lg sm:text-xl leading-7 sm:leading-8 text-gray-12/90 tracking-tight font-[450]">Your team is writing more code with AI. DeepSource automates code reviews, so you can ship to production faster with confidence.</p><div class="mt-6 flex flex-col items-center sm:items-start gap-y-6 w-full"><!--[--><div class="flex flex-col items-stretch sm:items-start sm:flex-row gap-6 w-full sm:w-auto"><div class="relative flex flex-col items-stretch sm:items-start"><div style="width:281px;" class="hidden sm:flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-2 text-juniper-11 shadow-md ring-1 ring-inset ring-juniper-9 items-center group px-3 space-x-2"><span class="flex py-3 cursor-default">Quickstart with</span><div class="flex flex-row overflow-hidden flex-grow items-center justify-center"><!--[--><a href="https://app.deepsource.com/login?provider=gh" aria-label="Quickstart with GitHub" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitHub" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=gl" aria-label="Quickstart with GitLab" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitLab" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=bb" aria-label="Quickstart with Bitbucket" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Bitbucket" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=ads" aria-label="Quickstart with Azure" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Azure" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100"><!----></a><!--]--></div></div><button class="sm:hidden flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-2 text-juniper-11 shadow-md ring-1 ring-inset ring-juniper-9 items-center justify-center group px-3 py-3 space-x-2 w-full"><span class="flex cursor-default">Quickstart with</span><div class="flex flex-row items-center justify-center space-x-1.5"><!--[--><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitHub" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitLab" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Bitbucket" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Azure" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100"><!--]--></div></button><span class="font-sans text-sm block pt-4 text-gray-12 leading-none text-center sm:text-left"> 14-day free trial, no credit card needed </span></div><div class="flex flex-col space-y-3 items-stretch sm:items-start"><button class="flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-1 text-gray-11 hover:text-gray-12 shadow ring-1 ring-inset ring-gray-6 items-center justify-center sm:justify-start group px-3 py-3 space-x-2 transition-colors duration-150 w-full sm:w-auto"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-4 w-4 text-gray-11"><path fill-rule="evenodd" d="M3.43 2.524A41.29 41.29 0 0 1 10 2c2.236 0 4.43.18 6.57.524 1.437.231 2.43 1.49 2.43 2.902v5.148c0 1.413-.993 2.67-2.43 2.902a41.102 41.102 0 0 1-3.55.414c-.28.02-.521.18-.643.413l-1.712 3.293a.75.75 0 0 1-1.33 0l-1.713-3.293a.783.783 0 0 0-.642-.413 41.108 41.108 0 0 1-3.55-.414C1.993 13.245 1 11.986 1 10.574V5.426c0-1.413.993-2.67 2.43-2.902Z" clip-rule="evenodd"></path></svg><span>Contact Sales</span></button><span class="block sm:hidden text-sm text-gray-12 leading-none text-center"> For growing teams and enterprises </span></div></div><!----><!--]--></div><!----></div></section></div></div><div style="--spacer-mobile:4rem;--spacer-desktop:6rem;height:var(--spacer-mobile);" aria-hidden="true" data-v-e2e5eed3></div><section class="relative overflow-hidden min-h-[500px] sm:min-h-0 max-w-[84rem] mx-auto px-6"><div class="relative"><img src="/img/illustration/pr-dashboard.svg" alt="DeepSource PR dashboard showing inline code review comments, issue detection, and Autofix suggestions" width="1200" height="800" loading="lazy" decoding="async" class="opacity-0 w-full h-auto min-w-[900px] sm:min-w-0 transition-opacity duration-700 ease-out"></div><div class="absolute inset-y-0 right-0 w-24 pointer-events-none bg-gradient-to-l from-ink-400 to-transparent sm:hidden"></div></section><div style="--spacer-mobile:4rem;--spacer-desktop:6rem;height:var(--spacer-mobile);" aria-hidden="true" data-v-e2e5eed3></div><div class="overflow-hidden bg-white dark:bg-gray-950" data-v-c5aa204e><div class="mx-auto max-w-7xl" data-v-c5aa204e><!----><div class="relative w-full h-20 select-none cursor-grab active:cursor-grabbing overflow-hidden" style="--spacing:72px;" data-v-c5aa204e><!--[--><div class="flex items-center justify-center h-full text-gray-7 text-sm" data-v-c5aa204e>Ruminating…</div><!--]--><div class="absolute inset-y-0 left-0 w-16 bg-gradient-to-r from-white dark:from-gray-950 to-transparent pointer-events-none z-10" data-v-c5aa204e></div><div class="absolute inset-y-0 right-0 w-16 bg-gradient-to-l from-white dark:from-gray-950 to-transparent pointer-events-none z-10" data-v-c5aa204e></div></div></div></div><div style="--spacer-mobile:4rem;--spacer-desktop:6rem;height:var(--spacer-mobile);" aria-hidden="true" data-v-e2e5eed3></div><div class="relative w-screen left-1/2 -translate-x-1/2"><hr class="border-t border-gray-5" aria-hidden="true"></div><div class="w-full h-12 sm:h-24"></div><section class="mx-auto max-w-7xl px-6"><div><h3 class="text-base text-gray-12 uppercase font-semibold inline-flex items-center tracking-wide"><span class="bg-juniper-9 rounded-sm w-5 h-5 inline-block"></span><span class="px-3 py-1 leading-4">Platform</span></h3><div class="w-full h-4 sm:h-5"></div><div class="max-w-5xl"><h2 class="text-2xl sm:text-3xl font-semibold tracking-tight text-juniper-11">Deep code review with hybrid static analysis and AI agents. <span class="sm:block text-gray-10 font-[550] leading-snug">High-signal, low false-positive issues and structured feedback across security, quality, complexity, and coverage.</span></h2></div></div><div class="h-8 sm:h-16 w-full"></div><div class="space-y-12 sm:space-y-24"><!--[--><div class="bento-row grid grid-cols-1 sm:grid-cols-12 gap-8 sm:gap-16"><div class="sm:col-span-3 flex flex-col justify-between py-2"><div><h3 class="text-xl font-semibold tracking-tight text-gray-12">Inline review on pull requests</h3><p class="mt-2 font-medium text-base text-gray-10 leading-relaxed">Catch bugs, anti-patterns, and security vulnerabilities on every pull request. Powered by 5,000+ deterministic rules along with our state-of-the-art AI review agent.</p></div><!----></div><div class="sm:col-span-9"><!--[--><div class="github-pr-review bg-white px-6 surface-elevated rounded-md h-72 sm:h-[500px] overflow-y-auto no-scrollbar" style="font-family:-apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, &#39;Noto Sans&#39;, Helvetica, Arial, sans-serif, &#39;Apple Color Emoji&#39;,
        &#39;Segoe UI Emoji&#39;;mask-image:linear-gradient(to bottom, transparent, black 40px, black calc(100% - 40px), transparent);-webkit-mask-image:linear-gradient(to bottom, transparent, black 40px, black calc(100% - 40px), transparent);" data-v-cbb0a08f><div class="relative" data-v-cbb0a08f><div class="flex items-center" data-v-cbb0a08f><div class="flex-shrink-0 mr-3 mt-6 hidden sm:block" data-v-cbb0a08f><div class="logo-square" data-v-cbb0a08f><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-7 h-7" data-v-cbb0a08f></div></div><div class="flex flex-col items-center mr-3 flex-shrink-0" data-v-cbb0a08f><div class="timeline-line-top" data-v-cbb0a08f></div><div class="eye-icon-wrapper" data-v-cbb0a08f><svg aria-hidden="true" height="16" viewBox="0 0 16 16" width="16" class="text-[#59636e]" fill="currentColor" data-v-cbb0a08f><path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z" data-v-cbb0a08f></path></svg></div></div><div class="flex-1 flex items-center justify-between mt-8" data-v-cbb0a08f><div class="flex items-center gap-2 text-sm" data-v-cbb0a08f><span class="flex-shrink-0 font-semibold text-[#1f2328]" data-v-cbb0a08f>deepsource</span><span class="bot-badge" data-v-cbb0a08f>bot</span><span class="text-[#59636e]" data-v-cbb0a08f>reviewed</span><span href="#" class="text-[#59636e] underline flex-shrink-0 cursor-default" data-v-cbb0a08f>a few minutes ago</span></div></div></div><div class="flex" data-v-cbb0a08f><div class="flex-shrink-0 hidden sm:block" style="width:40px;margin-right:12px;" data-v-cbb0a08f></div><div class="flex-shrink-0 timeline-column" style="width:28px;margin-right:12px;" data-v-cbb0a08f><div class="timeline-line-vertical" data-v-cbb0a08f></div></div><div class="flex-1 min-w-0" data-v-cbb0a08f><div class="comment-box" data-v-cbb0a08f><div class="comment-header" data-v-cbb0a08f><div class="flex items-center justify-between" data-v-cbb0a08f><div class="flex items-center gap-1.5 text-sm" data-v-cbb0a08f><span class="font-semibold text-[#1f2328] flex-shrink-0" data-v-cbb0a08f>deepsource</span><span class="bot-badge" data-v-cbb0a08f>bot</span><span class="text-[#59636e] flex-shrink-0" data-v-cbb0a08f>left a comment</span></div><button class="text-[#59636e] hover:text-[#1f2328]" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg></button></div></div><div class="px-4 py-3 bg-white" data-v-cbb0a08f><p class="text-sm text-[#1f2328]" data-v-cbb0a08f><!--[--><!--[--><!--[-->DeepSource reviewed changes in the commit range <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>b76c8fa...63debb2</code><!--]--><!--[--><!--[--> on this pull request. Below is the summary for the review, and you can see the individual issues we found as review comments.<!--]--><!--]--><!--]--></p><div class="mt-3" data-v-cbb0a08f><button class="reaction-btn" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smile-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" x2="9.01" y1="9" y2="9"></line><line x1="15" x2="15.01" y1="9" y2="9"></line></svg></button></div></div></div><!--[--><div class="mt-4" data-v-cbb0a08f><div class="annotation-card" data-v-cbb0a08f><div class="file-header" data-v-cbb0a08f><div class="text-xs mono-font text-[#1f2328]" data-v-cbb0a08f>payments/reconciliation.py</div></div><div class="lines-header" data-v-cbb0a08f><span class="text-xs text-[#59636e]" data-v-cbb0a08f> Comment on lines <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+142</a> to <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+144</a></span></div><div class="overflow-x-auto" data-v-cbb0a08f><table class="w-full text-sm mono-font" data-v-cbb0a08f><tbody data-v-cbb0a08f><!--[--><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>142</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            for merchant_id, txn_group in groupby(<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>143</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->                pending_transactions, key=lambda txn: txn.merchant_id<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>144</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            ):<!--]--></td></tr><!--]--></tbody></table></div><div class="p-4" data-v-cbb0a08f><div class="flex gap-3" data-v-cbb0a08f><div class="flex-shrink-0 hidden sm:block" data-v-cbb0a08f><div class="logo-square" data-v-cbb0a08f><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-7 h-7" data-v-cbb0a08f></div></div><div class="flex-1 min-w-0" data-v-cbb0a08f><div class="flex items-center justify-between" data-v-cbb0a08f><div class="flex items-center gap-1.5 text-sm" data-v-cbb0a08f><span class="font-semibold text-[#1f2328]" data-v-cbb0a08f>deepsource</span><span class="bot-badge" data-v-cbb0a08f>bot</span><a href="#" class="text-[#59636e] hover:text-[#0969da] underline" data-v-cbb0a08f>a few minutes ago</a></div><button class="text-[#59636e] hover:text-[#1f2328]" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg></button></div><h4 class="mt-3 text-base font-semibold text-[#1f2328]" data-v-cbb0a08f><!--[--><!--[--><code class="inline-code" data-v-cbb0a08f>itertools.groupby</code><!--]--><!--[--><!--[--> without sorting causes incorrect grouping<!--]--><!--]--><!--]--></h4><div class="mt-2 text-sm text-[#1f2328] leading-relaxed" data-v-cbb0a08f><!--[--><p class="" data-v-cbb0a08f><!--[--><!--[--><!--[-->The code uses <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>itertools.groupby</code><!--]--><!--[--><!--[--> on <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>pending_transactions</code><!--]--><!--[--><!--[-->, a queryset without a guaranteed order. <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>groupby</code><!--]--><!--[--><!--[--> only groups consecutive elements with the same key. If transactions for the same merchant are not adjacent, they will be settled in separate batches, leading to duplicate payouts.<!--]--><!--]--><!--]--></p><p class="mt-3" data-v-cbb0a08f><!--[--><!--[--><!--[-->Add a sort operation on <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>pending_transactions</code><!--]--><!--[--><!--[--> by <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>merchant_id</code><!--]--><!--[--><!--[--> before the <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>groupby</code><!--]--><!--[--><!--[--> call. This ensures all transactions for the same merchant are grouped together for a single settlement.<!--]--><!--]--><!--]--></p><!--]--></div><div class="mt-4" data-v-cbb0a08f><button class="reaction-btn" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smile-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" x2="9.01" y1="9" y2="9"></line><line x1="15" x2="15.01" y1="9" y2="9"></line></svg></button></div></div></div></div></div></div><div class="mt-4" data-v-cbb0a08f><div class="annotation-card" data-v-cbb0a08f><div class="file-header" data-v-cbb0a08f><div class="text-xs mono-font text-[#1f2328]" data-v-cbb0a08f>invoicing/services/export.py</div></div><div class="lines-header" data-v-cbb0a08f><span class="text-xs text-[#59636e]" data-v-cbb0a08f> Comment on lines <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+78</a> to <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+81</a></span></div><div class="overflow-x-auto" data-v-cbb0a08f><table class="w-full text-sm mono-font" data-v-cbb0a08f><tbody data-v-cbb0a08f><!--[--><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>78</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->        result = subprocess.run(<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>79</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            cmd,<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>80</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            shell=True,<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>81</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            capture_output=True<!--]--></td></tr><!--]--></tbody></table></div><div class="p-4" data-v-cbb0a08f><div class="flex gap-3" data-v-cbb0a08f><div class="flex-shrink-0 hidden sm:block" data-v-cbb0a08f><div class="logo-square" data-v-cbb0a08f><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-7 h-7" data-v-cbb0a08f></div></div><div class="flex-1 min-w-0" data-v-cbb0a08f><div class="flex items-center justify-between" data-v-cbb0a08f><div class="flex items-center gap-1.5 text-sm" data-v-cbb0a08f><span class="font-semibold text-[#1f2328]" data-v-cbb0a08f>deepsource</span><span class="bot-badge" data-v-cbb0a08f>bot</span><a href="#" class="text-[#59636e] hover:text-[#0969da] underline" data-v-cbb0a08f>a few minutes ago</a></div><button class="text-[#59636e] hover:text-[#1f2328]" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg></button></div><h4 class="mt-3 text-base font-semibold text-[#1f2328]" data-v-cbb0a08f><!--[--><!--[--><!--[-->Potential command injection vulnerability with <!--]--><!--]--><!--[--><code class="inline-code" data-v-cbb0a08f>shell=True</code><!--]--><!--]--></h4><div class="mt-2 text-sm text-[#1f2328] leading-relaxed" data-v-cbb0a08f><!--[--><p class="" data-v-cbb0a08f><!--[--><!--[--><!--[-->Using <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>subprocess.run</code><!--]--><!--[--><!--[--> with <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>shell=True</code><!--]--><!--[--><!--[--> to generate invoice PDFs can lead to command injection if the <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>cmd</code><!--]--><!--[--><!--[--> variable includes merchant-supplied data such as invoice numbers or company names. This is a security risk that could allow attackers to execute arbitrary commands on the server.<!--]--><!--]--><!--]--></p><p class="mt-3" data-v-cbb0a08f><!--[--><!--[--><!--[-->Consider using <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>shell=False</code><!--]--><!--[--><!--[--> and passing the command as a list of arguments instead. This prevents shell interpretation of special characters in merchant-provided input.<!--]--><!--]--><!--]--></p><!--]--></div><div class="mt-4" data-v-cbb0a08f><button class="reaction-btn" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smile-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" x2="9.01" y1="9" y2="9"></line><line x1="15" x2="15.01" y1="9" y2="9"></line></svg></button></div></div></div></div></div></div><div class="mt-4" data-v-cbb0a08f><div class="annotation-card" data-v-cbb0a08f><div class="file-header" data-v-cbb0a08f><div class="text-xs mono-font text-[#1f2328]" data-v-cbb0a08f>api/middleware/auth.py</div></div><div class="lines-header" data-v-cbb0a08f><span class="text-xs text-[#59636e]" data-v-cbb0a08f> Comment on lines <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+53</a> to <a href="#" class="text-[#1a7f37] mono-font hover:underline" data-v-cbb0a08f>+55</a></span></div><div class="overflow-x-auto" data-v-cbb0a08f><table class="w-full text-sm mono-font" data-v-cbb0a08f><tbody data-v-cbb0a08f><!--[--><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>53</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->        api_key = request.headers.get(&quot;X-Api-Key&quot;)<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>54</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->        if api_key:<!--]--></td></tr><tr class="diff-line-added" data-v-cbb0a08f><td class="diff-line-num" data-v-cbb0a08f>55</td><td class="diff-line-sign" data-v-cbb0a08f>+</td><td class="diff-line-code" data-v-cbb0a08f><!--[-->            merchant = db.query(Merchant).filter(Merchant.api_key == api_key).first()<!--]--></td></tr><!--]--></tbody></table></div><div class="p-4" data-v-cbb0a08f><div class="flex gap-3" data-v-cbb0a08f><div class="flex-shrink-0 hidden sm:block" data-v-cbb0a08f><div class="logo-square" data-v-cbb0a08f><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-7 h-7" data-v-cbb0a08f></div></div><div class="flex-1 min-w-0" data-v-cbb0a08f><div class="flex items-center justify-between" data-v-cbb0a08f><div class="flex items-center gap-1.5 text-sm" data-v-cbb0a08f><span class="font-semibold text-[#1f2328]" data-v-cbb0a08f>deepsource</span><span class="bot-badge" data-v-cbb0a08f>bot</span><a href="#" class="text-[#59636e] hover:text-[#0969da] underline" data-v-cbb0a08f>a few minutes ago</a></div><button class="text-[#59636e] hover:text-[#1f2328]" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-ellipsis-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="1"></circle><circle cx="19" cy="12" r="1"></circle><circle cx="5" cy="12" r="1"></circle></svg></button></div><h4 class="mt-3 text-base font-semibold text-[#1f2328]" data-v-cbb0a08f><!--[--><!--[--><!--[-->API key comparison vulnerable to timing attacks<!--]--><!--]--><!--]--></h4><div class="mt-2 text-sm text-[#1f2328] leading-relaxed" data-v-cbb0a08f><!--[--><p class="" data-v-cbb0a08f><!--[--><!--[--><!--[-->The merchant API key is compared directly using <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>==</code><!--]--><!--[--><!--[--> which is vulnerable to timing attacks. An attacker could potentially recover the key character by character by measuring response time differences, compromising merchant accounts and payment data.<!--]--><!--]--><!--]--></p><p class="mt-3" data-v-cbb0a08f><!--[--><!--[--><!--[-->Use a constant-time comparison function like <!--]--><!--]--><!--[--><code class="inline-code text-xs" data-v-cbb0a08f>secrets.compare_digest()</code><!--]--><!--[--><!--[--> to prevent timing-based side-channel attacks on sensitive API key comparisons.<!--]--><!--]--><!--]--></p><!--]--></div><div class="mt-4" data-v-cbb0a08f><button class="reaction-btn" data-v-cbb0a08f><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-smile-icon w-4 h-4" data-v-cbb0a08f><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" x2="9.01" y1="9" y2="9"></line><line x1="15" x2="15.01" y1="9" y2="9"></line></svg></button></div></div></div></div></div></div><!--]--><div class="h-8 sm:h-12 w-full" data-v-cbb0a08f></div></div></div></div></div><!--]--></div><!----></div><div class="bento-row grid grid-cols-1 sm:grid-cols-12 gap-8 sm:gap-16"><div class="sm:col-span-3 flex flex-col justify-between py-2"><div><h3 class="text-xl font-semibold tracking-tight text-gray-12">Autofix™</h3><p class="mt-2 font-medium text-base text-gray-10 leading-relaxed">Verified, pre-generated patches for most issues, so you can fix issues faster without breaking your flow.</p></div><!----></div><div class="sm:col-span-9"><!--[--><section class="surface-elevated rounded-md pl-4 sm:pl-12 pt-4 sm:pt-12 overflow-clip relative z-0" data-v-67be8fd2><div class="absolute inset-0 pointer-events-none overflow-hidden z-0" data-v-67be8fd2 data-v-af6e62d3><div class="absolute inset-0 breathing-gradient" style="background:linear-gradient(135deg, #E0F8ED, #B7ECD4, #FAFEFC, #B7ECD4, #E0F8ED);background-size:200% 200%;--duration:8s;" data-v-af6e62d3></div><svg class="absolute inset-0 w-full h-full" style="opacity:0.12;" data-v-af6e62d3><filter id="breathing-noise" data-v-af6e62d3><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="4" stitchTiles="stitch" data-v-af6e62d3></feTurbulence></filter><rect width="100%" height="100%" filter="url(#breathing-noise)" data-v-af6e62d3></rect></svg></div><div class="autofix-demo rounded-tl-md overflow-hidden bg-ink-400 text-white font-mono text-[13px] relative z-10" data-v-67be8fd2><div class="px-5 pt-5 pb-4" data-v-67be8fd2><h3 class="text-[15px] font-semibold text-white font-sans leading-snug" data-v-67be8fd2> String-based query with <code class="px-1.5 py-0.5 rounded bg-ink-50 text-[13px] font-mono font-normal" data-v-67be8fd2>JSON_EXTRACT</code> risks SQL injection </h3><p class="mt-1.5 text-sm text-gray-8 font-sans leading-relaxed" data-v-67be8fd2> The code constructs an SQL DELETE statement by directly formatting self.table_name into the query string and using user-controllable parameters with JSON_EXTRACT. </p><div class="flex items-center gap-4 mt-3 text-sm font-sans" data-v-67be8fd2><span class="flex items-center gap-1.5 font-medium text-gray-7" data-v-67be8fd2><svg width="14" height="14" viewBox="0 0 16 16" fill="#dd4425" data-v-67be8fd2><rect x="1" y="10" width="3" height="5" rx="0.5" data-v-67be8fd2></rect><rect x="6" y="6" width="3" height="9" rx="0.5" data-v-67be8fd2></rect><rect x="11" y="2" width="3" height="13" rx="0.5" data-v-67be8fd2></rect></svg> Critical </span><span class="flex items-center gap-1.5 font-medium text-gray-7" data-v-67be8fd2><svg width="14" height="14" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" data-v-67be8fd2><path d="M8 1L2 4v4c0 4 2.5 6.5 6 7.5 3.5-1 6-3.5 6-7.5V4L8 1z" data-v-67be8fd2></path></svg> Security </span><span class="inline-flex h-6 items-center justify-center gap-1 rounded text-[12px] font-medium text-[#23C4F8] px-2 py-1" style="background:rgba(35, 196, 248, 0.2);border:0.5px solid rgba(35, 196, 248, 0.4);" data-v-67be8fd2><svg xmlns="http://www.w3.org/2000/svg" width="11" height="11" viewBox="0 0 9 9" fill="none" data-v-67be8fd2><path d="M3.3696 5.45639C3.33612 5.32662 3.26848 5.20818 3.17371 5.11341C3.07894 5.01864 2.9605 4.951 2.83073 4.91752L0.530102 4.32427C0.490851 4.31313 0.456305 4.28949 0.431707 4.25693C0.407108 4.22438 0.393799 4.18469 0.393799 4.14389C0.393799 4.10309 0.407108 4.0634 0.431707 4.03085C0.456305 3.9983 0.490851 3.97466 0.530102 3.96352L2.83073 3.36989C2.96046 3.33644 3.07886 3.26886 3.17363 3.17416C3.26839 3.07946 3.33606 2.9611 3.3696 2.83139L3.96285 0.530767C3.97388 0.491362 3.9975 0.456645 4.0301 0.431915C4.0627 0.407185 4.10249 0.393799 4.14341 0.393799C4.18433 0.393799 4.22413 0.407185 4.25673 0.431915C4.28933 0.456645 4.31295 0.491362 4.32398 0.530767L4.91685 2.83139C4.95033 2.96117 5.01798 3.0796 5.11275 3.17437C5.20752 3.26914 5.32595 3.33679 5.45573 3.37027L7.75635 3.96314C7.79591 3.97405 7.8308 3.99765 7.85567 4.0303C7.88053 4.06295 7.894 4.10285 7.894 4.14389C7.894 4.18493 7.88053 4.22484 7.85567 4.25749C7.8308 4.29014 7.79591 4.31373 7.75635 4.32464L5.45573 4.91752C5.32595 4.951 5.20752 5.01864 5.11275 5.11341C5.01798 5.20818 4.95033 5.32662 4.91685 5.45639L4.3236 7.75702C4.31257 7.79642 4.28896 7.83114 4.25636 7.85587C4.22376 7.8806 4.18396 7.89399 4.14304 7.89399C4.10212 7.89399 4.06232 7.8806 4.02972 7.85587C3.99712 7.83114 3.9735 7.79642 3.96248 7.75702L3.3696 5.45639Z" stroke="#23C4F8" stroke-width="0.7875" stroke-linecap="round" stroke-linejoin="round" data-v-67be8fd2></path></svg> AI REVIEW </span></div></div><div class="border-t border-ink-100 overflow-x-auto" data-v-67be8fd2><table class="w-full border-collapse" data-v-67be8fd2><tbody data-v-67be8fd2><!--[--><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>472</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->    with self._get_cursor() as cur:<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>473</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->        try:<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>474</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->            # Use JSON_EXTRACT for JSON field access<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>475</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->            cur.execute(<!--]--></td></tr><tr class="highlighted-line" data-v-67be8fd2><td class="highlighted-num w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>476</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->                f&quot;DELETE FROM `{self.table_name}` WHERE JSON_EXTRACT(meta, %s) = %s&quot;, 1<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>477</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->                (f&quot;$.{key}&quot;, value),<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>478</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->            )<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>479</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->        except Exception as e:<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>480</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->            logger.warning(&quot;Error deleting by metadata field: %s&quot;, e)<!--]--></td></tr><tr class="" data-v-67be8fd2><td class="w-[50px] pr-3 pl-3 text-right text-gray-9 select-none align-top leading-[22px] border-r border-ink-100" data-v-67be8fd2>481</td><td class="pr-4 pl-2 whitespace-pre leading-[22px] align-top" data-v-67be8fd2><!--[-->            raise<!--]--></td></tr><!--]--></tbody></table></div><div class="flex items-center justify-between px-4 py-3 border-t border-ink-100" data-v-67be8fd2><div class="flex items-center gap-2 text-sm text-gray-8 min-w-0 mr-4" data-v-67be8fd2><svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor" class="opacity-60 shrink-0" data-v-67be8fd2><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z" data-v-67be8fd2></path></svg><span class="truncate" data-v-67be8fd2>api/core/rag/datasource/vdb/doris/doris_vector.py</span></div><div class="flex items-center gap-2 font-sans" data-v-67be8fd2><button class="cta-pulse footer-btn-primary" data-v-67be8fd2><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-v-67be8fd2><path d="M6.726 1.71c.075-.28.473-.28.548 0l.872 3.238c.119.442.464.787.906.906l3.238.872c.28.075.28.473 0 .548l-3.238.872a1.28 1.28 0 0 0-.906.906l-.872 3.238c-.075.28-.473.28-.548 0l-.872-3.238a1.28 1.28 0 0 0-.906-.906L1.71 7.274c-.28-.075-.28-.473 0-.548l3.238-.872c.442-.119.787-.464.906-.906zm9.986 6.405a.308.308 0 0 1 .576 0l.898 2.359c.133.349.408.624.757.757l2.359.898c.264.1.264.475 0 .575l-2.36.899a1.3 1.3 0 0 0-.756.756l-.898 2.36a.308.308 0 0 1-.576 0l-.898-2.36a1.3 1.3 0 0 0-.757-.756l-2.359-.899a.308.308 0 0 1 0-.575l2.36-.898c.348-.133.623-.408.756-.757zm-6.465 7.309a.27.27 0 0 1 .506 0l.645 1.693c.129.339.396.606.735.735l1.693.645a.27.27 0 0 1 0 .506l-1.693.645a1.27 1.27 0 0 0-.735.735l-.645 1.693a.27.27 0 0 1-.506 0l-.645-1.693a1.27 1.27 0 0 0-.735-.735l-1.693-.645a.27.27 0 0 1 0-.506l1.693-.645a1.27 1.27 0 0 0 .735-.735z" data-v-67be8fd2></path></svg> Autofix™</button></div></div></div></section><!--]--></div><!----></div><div class="bento-row grid grid-cols-1 sm:grid-cols-12 gap-8 sm:gap-16"><div class="sm:col-span-3 flex flex-col justify-between py-2"><div><h3 class="text-xl font-semibold tracking-tight text-gray-12">Pull request gates</h3><p class="mt-2 font-medium text-base text-gray-10 leading-relaxed">Define guardrails and prevent pull requests from merging when the PR quality is not satisfactory.</p></div><!----></div><div class="sm:col-span-9"><!--[--><div class="rounded-lg text-sm min-h-[400px] sm:min-h-[380px]"><div class="text-[#1f2328] flex flex-row gap-4" style="font-family:-apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, &#39;Noto Sans&#39;, Helvetica, Arial, sans-serif, &#39;Apple Color Emoji&#39;,
          &#39;Segoe UI Emoji&#39;;"><div class="shrink-0 flex justify-center"><div class="w-10 h-10 rounded-lg bg-[#656d76] flex items-center justify-center"><svg focusable="false" viewBox="0 0 24 24" width="20" height="20" fill="white"><path d="M15 13.25a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0Zm-12.5 6a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0Zm0-14.5a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0ZM5.75 6.5a1.75 1.75 0 1 0-.001-3.501A1.75 1.75 0 0 0 5.75 6.5Zm0 14.5a1.75 1.75 0 1 0-.001-3.501A1.75 1.75 0 0 0 5.75 21Zm12.5-6a1.75 1.75 0 1 0-.001-3.501A1.75 1.75 0 0 0 18.25 15Z"></path><path d="M6.5 7.25c0 2.9 2.35 5.25 5.25 5.25h4.5V14h-4.5A6.75 6.75 0 0 1 5 7.25Z"></path><path d="M5.75 16.75A.75.75 0 0 1 5 16V8a.75.75 0 0 1 1.5 0v8a.75.75 0 0 1-.75.75Z"></path></svg></div></div><div class="flex-1 min-w-0 border-[#d1d9e0] rounded-md border overflow-hidden"><div class="flex items-start gap-3 p-4 border-b border-[#d1d9e0]"><div class="shrink-0 mt-0.5"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="32" height="32" fill="none"><circle cx="50" cy="50" r="44" stroke="#d1d9e0" stroke-width="12"></circle><!----><!----><circle cx="50" cy="50" r="44" stroke="#bf8700" stroke-width="12" stroke-linecap="round" stroke-dasharray="262.637, 276.46" style="transform:rotate(-81deg);transform-origin:50% 50%;transition:stroke-dasharray 0.3s ease-out, transform 0.3s ease-out;"></circle></svg></div><div class="flex-1 min-w-0"><h4 class="font-semibold text-[16px] text-[#1f2328]">Some checks haven&#39;t completed yet</h4><p class="text-sm text-[#656d76]">5 pending checks</p></div><button class="shrink-0 text-[#656d76] hover:text-[#1f2328] p-1"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M12.78 6.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.28a.75.75 0 0 1 1.06-1.06L8 9.94l3.72-3.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div><div class="bg-[#f6f8fa] px-4"><!----><!--[--><div class="flex items-center justify-between py-2 text-xs text-[#656d76]"><button class="flex items-center gap-1 hover:text-[#1f2328]"><span class="font-medium">5 pending checks</span><svg width="12" height="12" viewBox="0 0 16 16" fill="currentColor"><path d="M12.78 6.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 7.28a.75.75 0 0 1 1.06-1.06L8 9.94l3.72-3.72a.75.75 0 0 1 1.06 0Z"></path></svg></button></div><div><!--[--><div class="border-b border-[#d1d9e0] flex items-center gap-3 px-2 py-2.5"><div class="w-4 h-4 flex items-center justify-center shrink-0"><div class="w-2.5 h-2.5 rounded-full bg-[#bf8700]"></div></div><div class="w-5 h-5 rounded border border-[#d1d9e0] bg-white flex items-center justify-center shrink-0 overflow-hidden"><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-3 h-3"></div><div class="flex-1 min-w-0 flex items-center gap-2"><span class="font-medium text-[#1f2328] flex-shrink-0">DeepSource: Python</span><span class="text-[#656d76] truncate font-medium text-xs tracking-tight"> Waiting for status to be reported — Analysis in progress...</span></div><!----><button class="shrink-0 text-[#656d76] hover:text-[#1f2328]"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div><div class="border-b border-[#d1d9e0] flex items-center gap-3 px-2 py-2.5"><div class="w-4 h-4 flex items-center justify-center shrink-0"><div class="w-2.5 h-2.5 rounded-full bg-[#bf8700]"></div></div><div class="w-5 h-5 rounded border border-[#d1d9e0] bg-white flex items-center justify-center shrink-0 overflow-hidden"><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-3 h-3"></div><div class="flex-1 min-w-0 flex items-center gap-2"><span class="font-medium text-[#1f2328] flex-shrink-0">DeepSource: JavaScript</span><span class="text-[#656d76] truncate font-medium text-xs tracking-tight"> Waiting for status to be reported — Analysis in progress...</span></div><!----><button class="shrink-0 text-[#656d76] hover:text-[#1f2328]"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div><div class="border-b border-[#d1d9e0] flex items-center gap-3 px-2 py-2.5"><div class="w-4 h-4 flex items-center justify-center shrink-0"><div class="w-2.5 h-2.5 rounded-full bg-[#bf8700]"></div></div><div class="w-5 h-5 rounded border border-[#d1d9e0] bg-white flex items-center justify-center shrink-0 overflow-hidden"><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-3 h-3"></div><div class="flex-1 min-w-0 flex items-center gap-2"><span class="font-medium text-[#1f2328] flex-shrink-0">DeepSource: Test coverage</span><span class="text-[#656d76] truncate font-medium text-xs tracking-tight"> Waiting for status to be reported — Analysis in progress...</span></div><!----><button class="shrink-0 text-[#656d76] hover:text-[#1f2328]"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div><div class="border-b border-[#d1d9e0] flex items-center gap-3 px-2 py-2.5"><div class="w-4 h-4 flex items-center justify-center shrink-0"><div class="w-2.5 h-2.5 rounded-full bg-[#bf8700]"></div></div><div class="w-5 h-5 rounded border border-[#d1d9e0] bg-white flex items-center justify-center shrink-0 overflow-hidden"><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-3 h-3"></div><div class="flex-1 min-w-0 flex items-center gap-2"><span class="font-medium text-[#1f2328] flex-shrink-0">DeepSource: Secrets</span><span class="text-[#656d76] truncate font-medium text-xs tracking-tight"> Waiting for status to be reported — Analysis in progress...</span></div><!----><button class="shrink-0 text-[#656d76] hover:text-[#1f2328]"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div><div class="flex items-center gap-3 px-2 py-2.5"><div class="w-4 h-4 flex items-center justify-center shrink-0"><div class="w-2.5 h-2.5 rounded-full bg-[#bf8700]"></div></div><div class="w-5 h-5 rounded border border-[#d1d9e0] bg-white flex items-center justify-center shrink-0 overflow-hidden"><img src="data:image/svg+xml,%3csvg%20width=&#39;28&#39;%20height=&#39;32&#39;%20viewBox=&#39;0%200%2028%2032&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M0%2032V0H11.2568C14.7546%200%2017.6898%200.763592%2020.1422%202.3315C22.5544%203.85916%2024.4036%205.86922%2025.6099%208.32144C26.8157%2010.7737%2027.4591%2013.3466%2027.4591%2016C27.4591%2018.6937%2026.856%2021.2661%2025.6099%2023.6786C24.4036%2026.1308%2022.5544%2028.1006%2020.1422%2029.6685C17.7296%2031.1962%2014.7546%2032%2011.2568%2032H2.09068C1.46057%2032%200.193974%2032%200%2032Z&#39;%20fill=&#39;%23080808&#39;/%3e%3cpath%20d=&#39;M4.54303%207.19617H15.9608C16.9257%207.19617%2017.7296%208%2017.7296%208.96479C17.7296%209.92958%2016.9257%2010.7339%2015.9608%2010.7339H4.54303V7.19617Z&#39;%20fill=&#39;%233DDC97&#39;/%3e%3cpath%20d=&#39;M4.54303%2021.1861H18.5339C19.4988%2021.1861%2020.3027%2021.9899%2020.3027%2022.9547C20.3027%2023.9195%2019.4988%2024.7238%2018.5339%2024.7238H4.54303V21.1861Z&#39;%20fill=&#39;%23F12A1F&#39;/%3e%3cpath%20d=&#39;M4.54303%2014.1911H12.4631C13.428%2014.1911%2014.2318%2014.995%2014.2318%2015.9598C14.2318%2016.9245%2013.428%2017.7289%2012.4631%2017.7289H4.54303V14.1911Z&#39;%20fill=&#39;%23FFB400&#39;/%3e%3c/svg%3e" alt="DeepSource" class="w-3 h-3"></div><div class="flex-1 min-w-0 flex items-center gap-2"><span class="font-medium text-[#1f2328] flex-shrink-0">DeepSource: package.json</span><span class="text-[#656d76] truncate font-medium text-xs tracking-tight"> Waiting for status to be reported — SCA in progress...</span></div><!----><button class="shrink-0 text-[#656d76] hover:text-[#1f2328]"><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div><!--]--></div><!--]--><!----></div></div></div></div><!--]--></div><!----></div><div class="bento-row grid grid-cols-1 sm:grid-cols-12 gap-8 sm:gap-16"><div class="sm:col-span-3 flex flex-col justify-between py-2"><div><h3 class="text-xl font-semibold tracking-tight text-gray-12">PR Report Card</h3><p class="mt-2 font-medium text-base text-gray-10 leading-relaxed">More than just issues. Structured feedback to your AI agent to help improve quality of any pull request.</p></div><!----></div><div class="sm:col-span-9"><!--[--><section class="surface-elevated rounded-md px-6 relative z-0 pt-8 sm:pt-32 flex flex-col justify-end"><div class="absolute inset-0 pointer-events-none overflow-hidden z-0" data-v-af6e62d3><div class="absolute inset-0 breathing-gradient" style="background:linear-gradient(135deg, #E0F8ED, #B7ECD4, #FAFEFC, #B7ECD4, #E0F8ED);background-size:200% 200%;--duration:8s;" data-v-af6e62d3></div><svg class="absolute inset-0 w-full h-full" style="opacity:0.12;" data-v-af6e62d3><filter id="breathing-noise" data-v-af6e62d3><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="4" stitchTiles="stitch" data-v-af6e62d3></feTurbulence></filter><rect width="100%" height="100%" filter="url(#breathing-noise)" data-v-af6e62d3></rect></svg></div><div class="relative max-w-[700px] mx-auto z-10"><!--[--><div class="absolute bottom-0 rounded-t-md bg-ink-300 border border-ink-100 border-b-0 hidden sm:block" style="left:12px;right:12px;top:-16px;z-index:-1;opacity:0.75;"></div><div class="absolute bottom-0 rounded-t-md bg-ink-300 border border-ink-100 border-b-0 hidden sm:block" style="left:24px;right:24px;top:-32px;z-index:-2;opacity:0.5;"></div><div class="absolute bottom-0 rounded-t-md bg-ink-300 border border-ink-100 border-b-0 hidden sm:block" style="left:36px;right:36px;top:-48px;z-index:-3;opacity:0.25;"></div><div class="absolute bottom-0 rounded-t-md bg-ink-300 border border-ink-100 border-b-0 hidden sm:block" style="left:48px;right:48px;top:-64px;z-index:-4;opacity:0;"></div><div class="absolute bottom-0 rounded-t-md bg-ink-300 border border-ink-100 border-b-0 hidden sm:block" style="left:60px;right:60px;top:-80px;z-index:-5;opacity:-0.25;"></div><!--]--><div class="pr-report-card rounded-t-md overflow-hidden bg-ink-400 text-white font-sans text-[13px] border border-ink-100 border-b-0"><div class="flex items-center gap-1.5 px-4 py-3 bg-ink-300"><svg width="16" height="16" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4.66671 1.16663V3.49996M7.00004 1.16663V3.49996M9.33337 1.16663V3.49996M4.66671 5.83329H8.16671M4.66671 8.16663H9.33337M4.66671 10.5H7.58337M3.50004 2.33329H10.5C11.1444 2.33329 11.6667 2.85563 11.6667 3.49996V11.6666C11.6667 12.311 11.1444 12.8333 10.5 12.8333H3.50004C2.85571 12.8333 2.33337 12.311 2.33337 11.6666V3.49996C2.33337 2.85563 2.85571 2.33329 3.50004 2.33329Z" stroke="#EEEEEE" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="text-base font-medium text-white">PR Report Card</span></div><div class="border-t border-ink-100"></div><div class="flex flex-col sm:flex-row bg-ink-400"><div class="flex-1 min-w-0"><!--[--><div class="border-b border-ink-100 flex items-center justify-between px-4 py-3"><div class="flex items-center gap-3"><span class="shrink-0 w-4 h-4 flex items-center justify-center"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1491_8351)">
<path d="M1.33709 3.07262C3.78216 2.63402 4.79306 2.30918 6.99998 1.3125C9.20689 2.30918 10.2178 2.63402 12.6629 3.07262C13.1058 10.0934 7.42162 12.5177 6.99998 12.6875C6.57834 12.5177 0.894117 10.0934 1.33709 3.07262Z" stroke="#F5F5F5" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M7 1.3125C9.20691 2.30918 10.2178 2.63402 12.6629 3.07262C13.1059 10.0934 7.42164 12.5177 7 12.6875V1.3125Z" fill="#F5F5F5"/>
</g>
<defs>
<clipPath id="clip0_1491_8351">
<rect width="14" height="14" fill="white"/>
</clipPath>
</defs>
</svg>
</span><span class="text-[#f5f5f5] text-base">Security</span></div><div class="flex items-center gap-3"><div class="flex items-center gap-0.5"><svg width="12" height="12" viewBox="0 0 8 8" fill="none" class="text-gray-8"><path d="M1.5 1.5L6.5 6.5M6.5 1.5L1.5 6.5" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path></svg><span class="inline-flex h-4 items-center justify-center px-1 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3]">4</span></div><span class="shrink-0 h-4"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="7" width="20" height="16" rx="2" fill="#F6D87C"/>
<mask id="path-3-outside-1_1499_8570" maskUnits="userSpaceOnUse" x="12.5" y="3" width="9" height="11" fill="black">
<rect fill="white" x="12.5" y="3" width="9" height="11"/>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z"/>
</mask>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z" fill="#121317"/>
<path d="M13.6606 13H13.4106V13.25H13.6606V13ZM13.6606 3.54545V3.29545H13.4106V3.54545H13.6606ZM18.9834 3.86861L18.8759 4.09433L18.8777 4.09519L18.9834 3.86861ZM20.0036 4.74112L19.79 4.87105L19.7908 4.87234L20.0036 4.74112ZM20.1236 6.98473L20.3431 7.10444L20.3437 7.1034L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806V7.43806L19.5281 7.64489ZM18.6925 8.00959L18.6342 7.76649L18.4425 7.81249V8.00959H18.6925ZM18.6925 8.10192H18.4425V8.33853L18.6788 8.35154L18.6925 8.10192ZM19.6574 8.41122L19.5272 8.62466L19.5297 8.62616L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175V9.32175L20.4191 9.19602ZM20.3591 11.7443L20.5724 11.8747L20.5728 11.8739L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368L19.288 12.663ZM15.3733 11.5689H15.1233V11.8189H15.3733V11.5689ZM18.5586 11.2134L18.7222 11.4025L18.7224 11.4023L18.5586 11.2134ZM18.7664 9.53303L18.5528 9.66292L18.5536 9.66421L18.7664 9.53303ZM18.1755 8.99751L18.0605 9.2195L18.0626 9.22058L18.1755 8.99751ZM15.3733 8.79901V8.54901H15.1233V8.79901H15.3733ZM15.3733 7.56641H15.1233V7.81641H15.3733V7.56641ZM17.8662 7.40483L17.9696 7.63243L17.972 7.6313L17.8662 7.40483ZM18.4248 6.93857L18.2182 6.79773L18.2177 6.79842L18.4248 6.93857ZM18.2447 5.31356L18.0747 5.49685L18.0758 5.49785L18.2447 5.31356ZM15.3733 4.9581V4.7081H15.1233V4.9581H15.3733ZM13.6606 13H13.9106V3.54545H13.6606H13.4106V13H13.6606ZM13.6606 3.54545V3.79545H17.2799V3.54545V3.29545H13.6606V3.54545ZM17.2799 3.54545V3.79545C17.9387 3.79545 18.4669 3.89959 18.8759 4.09432L18.9834 3.86861L19.0908 3.64289C18.595 3.40676 17.9875 3.29545 17.2799 3.29545V3.54545ZM18.9834 3.86861L18.8777 4.09519C19.2959 4.29017 19.595 4.55042 19.79 4.87105L20.0036 4.74112L20.2172 4.61119C19.9629 4.19319 19.5818 3.87176 19.089 3.64202L18.9834 3.86861ZM20.0036 4.74112L19.7908 4.87234C19.9923 5.19913 20.0952 5.57158 20.0952 5.9968H20.3452H20.5952C20.5952 5.48642 20.4704 5.02175 20.2164 4.6099L20.0036 4.74112ZM20.3452 5.9968H20.0952C20.0952 6.34973 20.0275 6.63625 19.9036 6.86606L20.1236 6.98473L20.3437 7.1034C20.5152 6.78539 20.5952 6.41329 20.5952 5.9968H20.3452ZM20.1236 6.98473L19.9042 6.86502C19.775 7.1018 19.6032 7.29167 19.3877 7.43806L19.5281 7.64489L19.6685 7.85171C19.9515 7.65956 20.1768 7.40932 20.3431 7.10444L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806C19.1646 7.58954 18.9141 7.69931 18.6342 7.76649L18.6925 8.00959L18.7509 8.25268C19.0865 8.17214 19.3931 8.03877 19.6685 7.85171L19.5281 7.64489ZM18.6925 8.00959H18.4425V8.10192H18.6925H18.9425V8.00959H18.6925ZM18.6925 8.10192L18.6788 8.35154C18.97 8.36757 19.252 8.45679 19.5272 8.62465L19.6574 8.41122L19.7875 8.1978C19.4472 7.99018 19.0859 7.87319 18.7063 7.8523L18.6925 8.10192ZM19.6574 8.41122L19.5297 8.62616C19.8009 8.7873 20.0256 9.01683 20.203 9.32175L20.4191 9.19602L20.6352 9.0703C20.4186 8.69813 20.1355 8.40446 19.785 8.19629L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175C20.3732 9.61436 20.4645 9.97814 20.4645 10.424H20.7145H20.9645C20.9645 9.90965 20.8589 9.45477 20.6352 9.0703L20.4191 9.19602ZM20.7145 10.424H20.4645C20.4645 10.871 20.3569 11.2657 20.1453 11.6147L20.3591 11.7443L20.5728 11.8739C20.8352 11.4412 20.9645 10.9557 20.9645 10.424H20.7145ZM20.3591 11.7443L20.1457 11.614C19.9381 11.9537 19.6216 12.2296 19.1815 12.4368L19.288 12.663L19.3946 12.8892C19.9085 12.6471 20.306 12.3105 20.5724 11.8747L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368C18.7478 12.6411 18.1869 12.75 17.4876 12.75V13V13.25C18.2348 13.25 18.8742 13.1342 19.3946 12.8892L19.288 12.663ZM17.4876 13V12.75H13.6606V13V13.25H17.4876V13ZM15.3733 11.5689V11.8189H17.2152V11.5689V11.3189H15.3733V11.5689ZM17.2152 11.5689V11.8189C17.8576 11.8189 18.38 11.6985 18.7222 11.4025L18.5586 11.2134L18.3951 11.0244C18.1894 11.2023 17.8162 11.3189 17.2152 11.3189V11.5689ZM18.5586 11.2134L18.7224 11.4023C19.0557 11.1135 19.2241 10.7361 19.2241 10.2901H18.9741H18.7241C18.7241 10.5951 18.6156 10.8332 18.3949 11.0245L18.5586 11.2134ZM18.9741 10.2901H19.2241C19.2241 9.96669 19.1435 9.66839 18.9792 9.40184L18.7664 9.53303L18.5536 9.66421C18.6662 9.847 18.7241 10.0534 18.7241 10.2901H18.9741ZM18.7664 9.53303L18.98 9.40313C18.8155 9.13258 18.5822 8.92314 18.2883 8.77445L18.1755 8.99751L18.0626 9.22058C18.2796 9.33041 18.4403 9.47798 18.5528 9.66292L18.7664 9.53303ZM18.1755 8.99751L18.2905 8.77554C17.9922 8.62102 17.6463 8.54901 17.2614 8.54901V8.79901V9.04901C17.5844 9.04901 17.8478 9.10933 18.0605 9.21949L18.1755 8.99751ZM17.2614 8.79901V8.54901H15.3733V8.79901V9.04901H17.2614V8.79901ZM15.3733 8.79901H15.1233V11.5689H15.3733H15.6233V8.79901H15.3733ZM15.3733 7.56641V7.81641H17.0675V7.56641V7.31641H15.3733V7.56641ZM17.0675 7.56641V7.81641C17.3938 7.81641 17.696 7.75678 17.9696 7.63242L17.8662 7.40483L17.7627 7.17724C17.5623 7.26832 17.3321 7.31641 17.0675 7.31641V7.56641ZM17.8662 7.40483L17.972 7.6313C18.2464 7.50303 18.469 7.31922 18.6318 7.07871L18.4248 6.93857L18.2177 6.79842C18.1097 6.95801 17.9599 7.08504 17.7603 7.17836L17.8662 7.40483ZM18.4248 6.93857L18.6313 7.0794C18.8016 6.82962 18.8825 6.53903 18.8825 6.21839H18.6325H18.3825C18.3825 6.45174 18.3249 6.64126 18.2182 6.79773L18.4248 6.93857ZM18.6325 6.21839H18.8825C18.8825 5.78559 18.7264 5.41593 18.4136 5.12928L18.2447 5.31356L18.0758 5.49785C18.2801 5.68516 18.3825 5.91872 18.3825 6.21839H18.6325ZM18.2447 5.31356L18.4147 5.13029C18.096 4.83455 17.6442 4.7081 17.1044 4.7081V4.9581V5.2081C17.5741 5.2081 17.8826 5.31862 18.0747 5.49684L18.2447 5.31356ZM17.1044 4.9581V4.7081H15.3733V4.9581V5.2081H17.1044V4.9581ZM15.3733 4.9581H15.1233V7.56641H15.3733H15.6233V4.9581H15.3733Z" fill="#FBEFC8" mask="url(#path-3-outside-1_1499_8570)"/>
<rect x="28" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="35" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
</svg>
</span></div></div><div class="border-b border-ink-100 flex items-center justify-between px-4 py-3"><div class="flex items-center gap-3"><span class="shrink-0 w-4 h-4 flex items-center justify-center"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.6484 7.27351C11.3633 7.27383 11.0843 7.3566 10.8451 7.51185C10.606 7.6671 10.4168 7.8882 10.3004 8.14851H9.62117L8.88289 5.93367C8.84207 5.81204 8.76343 5.70664 8.65846 5.63287C8.55349 5.55911 8.42768 5.52084 8.29942 5.52365C8.17115 5.52646 8.04714 5.5702 7.9455 5.64849C7.84386 5.72678 7.76991 5.83552 7.73445 5.95882L6.71727 9.51898L5.40477 1.81515C5.38147 1.67936 5.31226 1.55568 5.20872 1.46478C5.10518 1.37389 4.97358 1.3213 4.83591 1.31579C4.69824 1.31028 4.56286 1.3522 4.45239 1.43453C4.34191 1.51686 4.26305 1.63462 4.22898 1.76812L2.59273 8.14851H0.875V9.35163H3.0625C3.19663 9.35162 3.3269 9.30678 3.43263 9.22425C3.53835 9.14171 3.61346 9.0262 3.64602 8.89609L4.69465 4.7032L5.96914 12.185C5.99141 12.3199 6.05896 12.4431 6.16065 12.5345C6.26234 12.6258 6.39211 12.6798 6.52859 12.6876H6.5625C6.69336 12.6875 6.82063 12.6447 6.92499 12.5658C7.02936 12.4868 7.10513 12.376 7.14082 12.2501L8.3568 8.1589L8.61684 8.94148C8.65696 9.06103 8.73364 9.16495 8.83605 9.23855C8.93845 9.31215 9.06139 9.35171 9.1875 9.35163H10.3004C10.4086 9.5943 10.5804 9.80326 10.7975 9.95647C11.0146 10.1097 11.269 10.2015 11.5339 10.2222C11.7988 10.2428 12.0644 10.1917 12.3027 10.074C12.5409 9.95633 12.743 9.77656 12.8876 9.55364C13.0322 9.33071 13.114 9.07289 13.1243 8.80737C13.1346 8.54185 13.0731 8.27847 12.9462 8.045C12.8193 7.81153 12.6318 7.61663 12.4034 7.48085C12.175 7.34507 11.9142 7.27343 11.6484 7.27351Z" fill="#F5F5F5"/>
</svg>
</span><span class="text-[#f5f5f5] text-base">Reliability</span></div><div class="flex items-center gap-3"><div class="flex items-center gap-0.5"><svg width="12" height="12" viewBox="0 0 8 8" fill="none" class="text-gray-8"><path d="M1.5 1.5L6.5 6.5M6.5 1.5L1.5 6.5" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path></svg><span class="inline-flex h-4 items-center justify-center px-1 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3]">19</span></div><span class="shrink-0 h-4"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" rx="1" fill="#EE7C4B" fill-opacity="0.2"/>
<rect x="7" width="6" height="16" rx="1" fill="#EE7C4B" fill-opacity="0.2"/>
<rect x="14" width="20" height="16" rx="2" fill="#EE7C4B"/>
<mask id="path-4-outside-1_1499_8538" maskUnits="userSpaceOnUse" x="19" y="3" width="10" height="11" fill="black">
<rect fill="white" x="19" y="3" width="10" height="11"/>
<path d="M28.1946 6.73544H26.4681C26.4188 6.4523 26.3281 6.20147 26.1957 5.98295C26.0634 5.76136 25.8987 5.57363 25.7017 5.41974C25.5048 5.26586 25.2801 5.15045 25.0277 5.07351C24.7785 4.99349 24.5092 4.95348 24.2199 4.95348C23.7059 4.95348 23.2504 5.08274 22.8534 5.34126C22.4564 5.59671 22.1455 5.97218 21.9209 6.46768C21.6962 6.96011 21.5839 7.56179 21.5839 8.27273C21.5839 8.99598 21.6962 9.60535 21.9209 10.1009C22.1486 10.5933 22.4594 10.9657 22.8534 11.218C23.2504 11.4673 23.7044 11.592 24.2152 11.592C24.4984 11.592 24.7631 11.555 25.0093 11.4812C25.2586 11.4042 25.4817 11.2919 25.6787 11.1442C25.8787 10.9964 26.0464 10.8149 26.1819 10.5994C26.3204 10.384 26.4158 10.1378 26.4681 9.8608L28.1946 9.87003C28.13 10.3194 27.99 10.741 27.7745 11.1349C27.5622 11.5289 27.2837 11.8767 26.939 12.1783C26.5943 12.4768 26.1911 12.7107 25.7294 12.88C25.2678 13.0462 24.7554 13.1293 24.1922 13.1293C23.3612 13.1293 22.6195 12.9369 21.967 12.5522C21.3146 12.1675 20.8006 11.612 20.4251 10.8857C20.0496 10.1593 19.8619 9.28835 19.8619 8.27273C19.8619 7.25402 20.0512 6.38305 20.4297 5.6598C20.8083 4.93348 21.3238 4.37796 21.9763 3.99325C22.6287 3.60855 23.3674 3.41619 24.1922 3.41619C24.7184 3.41619 25.2078 3.49006 25.6602 3.63778C26.1126 3.78551 26.5158 4.00249 26.8697 4.28871C27.2236 4.57185 27.5145 4.91963 27.7422 5.33203C27.9731 5.74136 28.1239 6.20916 28.1946 6.73544Z"/>
</mask>
<path d="M28.1946 6.73544H26.4681C26.4188 6.4523 26.3281 6.20147 26.1957 5.98295C26.0634 5.76136 25.8987 5.57363 25.7017 5.41974C25.5048 5.26586 25.2801 5.15045 25.0277 5.07351C24.7785 4.99349 24.5092 4.95348 24.2199 4.95348C23.7059 4.95348 23.2504 5.08274 22.8534 5.34126C22.4564 5.59671 22.1455 5.97218 21.9209 6.46768C21.6962 6.96011 21.5839 7.56179 21.5839 8.27273C21.5839 8.99598 21.6962 9.60535 21.9209 10.1009C22.1486 10.5933 22.4594 10.9657 22.8534 11.218C23.2504 11.4673 23.7044 11.592 24.2152 11.592C24.4984 11.592 24.7631 11.555 25.0093 11.4812C25.2586 11.4042 25.4817 11.2919 25.6787 11.1442C25.8787 10.9964 26.0464 10.8149 26.1819 10.5994C26.3204 10.384 26.4158 10.1378 26.4681 9.8608L28.1946 9.87003C28.13 10.3194 27.99 10.741 27.7745 11.1349C27.5622 11.5289 27.2837 11.8767 26.939 12.1783C26.5943 12.4768 26.1911 12.7107 25.7294 12.88C25.2678 13.0462 24.7554 13.1293 24.1922 13.1293C23.3612 13.1293 22.6195 12.9369 21.967 12.5522C21.3146 12.1675 20.8006 11.612 20.4251 10.8857C20.0496 10.1593 19.8619 9.28835 19.8619 8.27273C19.8619 7.25402 20.0512 6.38305 20.4297 5.6598C20.8083 4.93348 21.3238 4.37796 21.9763 3.99325C22.6287 3.60855 23.3674 3.41619 24.1922 3.41619C24.7184 3.41619 25.2078 3.49006 25.6602 3.63778C26.1126 3.78551 26.5158 4.00249 26.8697 4.28871C27.2236 4.57185 27.5145 4.91963 27.7422 5.33203C27.9731 5.74136 28.1239 6.20916 28.1946 6.73544Z" fill="#121317"/>
<path d="M28.1946 6.73544V6.98544H28.4805L28.4424 6.70211L28.1946 6.73544ZM26.4681 6.73544L26.2218 6.77828L26.2578 6.98544H26.4681V6.73544ZM26.1957 5.98295L25.9811 6.11114L25.9819 6.11246L26.1957 5.98295ZM25.7017 5.41974L25.8557 5.22274H25.8557L25.7017 5.41974ZM25.0277 5.07351L24.9513 5.31157L24.9548 5.31264L25.0277 5.07351ZM22.8534 5.34126L22.9887 5.55151L22.9898 5.55076L22.8534 5.34126ZM21.9209 6.46768L22.1483 6.57146L22.1485 6.57092L21.9209 6.46768ZM21.9209 10.1009L21.6932 10.2041L21.6939 10.2058L21.9209 10.1009ZM22.8534 11.218L22.7185 11.4286L22.7204 11.4298L22.8534 11.218ZM25.0093 11.4812L25.0811 11.7206L25.083 11.7201L25.0093 11.4812ZM25.6787 11.1442L25.5302 10.9431L25.5287 10.9442L25.6787 11.1442ZM26.1819 10.5994L25.9716 10.4642L25.9702 10.4664L26.1819 10.5994ZM26.4681 9.8608L26.4694 9.6108L26.2611 9.60968L26.2224 9.81439L26.4681 9.8608ZM28.1946 9.87003L28.4421 9.90562L28.483 9.62157L28.196 9.62003L28.1946 9.87003ZM27.7745 11.1349L27.5552 11.015L27.5545 11.0163L27.7745 11.1349ZM26.939 12.1783L27.1026 12.3672L27.1036 12.3664L26.939 12.1783ZM25.7294 12.88L25.8141 13.1152L25.8155 13.1147L25.7294 12.88ZM21.967 12.5522L22.094 12.3368V12.3368L21.967 12.5522ZM20.4251 10.8857L20.203 11.0005V11.0005L20.4251 10.8857ZM20.4297 5.6598L20.6512 5.77573L20.6514 5.77535L20.4297 5.6598ZM21.9763 3.99325L21.8493 3.7779V3.7779L21.9763 3.99325ZM25.6602 3.63778L25.7378 3.40013H25.7378L25.6602 3.63778ZM26.8697 4.28871L26.7125 4.4831L26.7135 4.48392L26.8697 4.28871ZM27.7422 5.33203L27.5234 5.45289L27.5245 5.45483L27.7422 5.33203ZM28.1946 6.73544V6.48544H26.4681V6.73544V6.98544H28.1946V6.73544ZM26.4681 6.73544L26.7144 6.69261C26.6605 6.38261 26.5599 6.1017 26.4096 5.85345L26.1957 5.98295L25.9819 6.11246C26.0962 6.30124 26.1772 6.52198 26.2218 6.77828L26.4681 6.73544ZM26.1957 5.98295L26.4103 5.85477C26.2627 5.60757 26.0777 5.39624 25.8557 5.22274L25.7017 5.41974L25.5478 5.61675C25.7197 5.75102 25.864 5.91516 25.9811 6.11114L26.1957 5.98295ZM25.7017 5.41974L25.8557 5.22274C25.6332 5.04893 25.3807 4.91976 25.1006 4.83438L25.0277 5.07351L24.9548 5.31264C25.1795 5.38113 25.3764 5.4828 25.5478 5.61675L25.7017 5.41974ZM25.0277 5.07351L25.1042 4.83547C24.8277 4.74674 24.5324 4.70348 24.2199 4.70348V4.95348V5.20348C24.4859 5.20348 24.7292 5.24024 24.9513 5.31155L25.0277 5.07351ZM24.2199 4.95348V4.70348C23.6617 4.70348 23.158 4.84457 22.717 5.13176L22.8534 5.34126L22.9898 5.55076C23.3428 5.32092 23.75 5.20348 24.2199 5.20348V4.95348ZM22.8534 5.34126L22.7181 5.13102C22.2747 5.41629 21.9346 5.83197 21.6932 6.36445L21.9209 6.46768L22.1485 6.57092C22.3564 6.1124 22.638 5.77713 22.9887 5.55151L22.8534 5.34126ZM21.9209 6.46768L21.6934 6.36391C21.45 6.89743 21.3339 7.53671 21.3339 8.27273H21.5839H21.8339C21.8339 7.58687 21.9424 7.02279 22.1483 6.57146L21.9209 6.46768ZM21.5839 8.27273H21.3339C21.3339 9.02043 21.4498 9.66734 21.6932 10.2041L21.9209 10.1009L22.1485 9.99761C21.9426 9.54336 21.8339 8.97152 21.8339 8.27273H21.5839ZM21.9209 10.1009L21.6939 10.2058C21.9384 10.7344 22.2784 11.1466 22.7185 11.4285L22.8534 11.218L22.9882 11.0075C22.6405 10.7848 22.3588 10.4521 22.1478 9.99591L21.9209 10.1009ZM22.8534 11.218L22.7204 11.4298C23.1608 11.7063 23.6617 11.842 24.2152 11.842V11.592V11.342C23.747 11.342 23.34 11.2284 22.9863 11.0063L22.8534 11.218ZM24.2152 11.592V11.842C24.5203 11.842 24.8094 11.8022 25.0811 11.7206L25.0093 11.4812L24.9374 11.2417C24.7168 11.3079 24.4765 11.342 24.2152 11.342V11.592ZM25.0093 11.4812L25.083 11.7201C25.3581 11.6351 25.6074 11.5102 25.8287 11.3442L25.6787 11.1442L25.5287 10.9442C25.356 11.0736 25.159 11.1733 24.9355 11.2423L25.0093 11.4812ZM25.6787 11.1442L25.8272 11.3453C26.0529 11.1786 26.2419 10.9737 26.3935 10.7325L26.1819 10.5994L25.9702 10.4664C25.851 10.656 25.7045 10.8143 25.5302 10.9431L25.6787 11.1442ZM26.1819 10.5994L26.3922 10.7346C26.5497 10.4895 26.6561 10.2126 26.7137 9.9072L26.4681 9.8608L26.2224 9.81439C26.1755 10.063 26.091 10.2785 25.9716 10.4642L26.1819 10.5994ZM26.4681 9.8608L26.4667 10.1108L28.1933 10.12L28.1946 9.87003L28.196 9.62003L26.4694 9.6108L26.4681 9.8608ZM28.1946 9.87003L27.9472 9.83444C27.8868 10.2545 27.7561 10.6476 27.5552 11.015L27.7745 11.1349L27.9939 11.2549C28.2238 10.8344 28.3733 10.3842 28.4421 9.90562L28.1946 9.87003ZM27.7745 11.1349L27.5545 11.0163C27.3566 11.3833 27.0971 11.7077 26.7743 11.9901L26.939 12.1783L27.1036 12.3664C27.4702 12.0456 27.7677 11.6744 27.9946 11.2536L27.7745 11.1349ZM26.939 12.1783L26.7753 11.9893C26.4552 12.2665 26.0788 12.4856 25.6434 12.6453L25.7294 12.88L25.8155 13.1147C26.3033 12.9358 26.7333 12.6871 27.1026 12.3672L26.939 12.1783ZM25.7294 12.88L25.6448 12.6447C25.214 12.7998 24.7307 12.8793 24.1922 12.8793V13.1293V13.3793C24.78 13.3793 25.3216 13.2925 25.8141 13.1152L25.7294 12.88ZM24.1922 13.1293V12.8793C23.4014 12.8793 22.7043 12.6967 22.094 12.3368L21.967 12.5522L21.84 12.7676C22.5346 13.1771 23.321 13.3793 24.1922 13.3793V13.1293ZM21.967 12.5522L22.094 12.3368C21.4853 11.9779 21.0028 11.4588 20.6472 10.7708L20.4251 10.8857L20.203 11.0005C20.5983 11.7651 21.1438 12.357 21.84 12.7676L21.967 12.5522ZM20.4251 10.8857L20.6472 10.7708C20.294 10.0876 20.1119 9.2579 20.1119 8.27273H19.8619H19.6119C19.6119 9.31881 19.8053 10.2311 20.203 11.0005L20.4251 10.8857ZM19.8619 8.27273H20.1119C20.1119 7.28459 20.2955 6.45542 20.6512 5.77573L20.4297 5.6598L20.2082 5.54387C19.8069 6.31068 19.6119 7.22346 19.6119 8.27273H19.8619ZM20.4297 5.6598L20.6514 5.77535C21.0102 5.08699 21.4943 4.56763 22.1032 4.2086L21.9763 3.99325L21.8493 3.7779C21.1532 4.18829 20.6064 4.77996 20.208 5.54426L20.4297 5.6598ZM21.9763 3.99325L22.1032 4.2086C22.7138 3.84858 23.4079 3.66619 24.1922 3.66619V3.41619V3.16619C23.3268 3.16619 22.5436 3.36851 21.8493 3.7779L21.9763 3.99325ZM24.1922 3.41619V3.66619C24.6948 3.66619 25.1577 3.73671 25.5826 3.87543L25.6602 3.63778L25.7378 3.40013C25.2578 3.24341 24.742 3.16619 24.1922 3.16619V3.41619ZM25.6602 3.63778L25.5826 3.87543C26.0074 4.01415 26.3833 4.21689 26.7125 4.4831L26.8697 4.28871L27.0269 4.09432C26.6482 3.78808 26.2178 3.55688 25.7378 3.40013L25.6602 3.63778ZM26.8697 4.28871L26.7135 4.48392C27.0409 4.74582 27.3108 5.06798 27.5234 5.45289L27.7422 5.33203L27.9611 5.21118C27.7181 4.77127 27.4064 4.39789 27.0259 4.09349L26.8697 4.28871ZM27.7422 5.33203L27.5245 5.45483C27.7378 5.83315 27.8798 6.26988 27.9469 6.76877L28.1946 6.73544L28.4424 6.70211C28.3679 6.14844 28.2083 5.64957 27.96 5.20923L27.7422 5.33203Z" fill="#FFBB9D" mask="url(#path-4-outside-1_1499_8538)"/>
<rect x="35" width="6" height="16" rx="1" fill="#EE7C4B" fill-opacity="0.2"/>
</svg>
</span></div></div><div class="border-b border-ink-100 flex items-center justify-between px-4 py-3"><div class="flex items-center gap-3"><span class="shrink-0 w-4 h-4 flex items-center justify-center"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.79163 2.33337C4.22913 2.33337 4.97288 2.33337 5.25404 3.8095C5.53871 5.30254 5.63788 6.66404 6.12496 7.00004C5.63788 7.33604 5.53871 8.69754 5.25404 10.1906C4.97288 11.667 4.22913 11.6667 3.79163 11.6667M10.2083 11.6667C9.77079 11.6667 9.02704 11.667 8.74588 10.1906C8.46121 8.69754 8.36204 7.33604 7.87496 7.00004C8.36204 6.66404 8.46121 5.30254 8.74588 3.8095C9.02704 2.33337 9.77079 2.33337 10.2083 2.33337" stroke="#F5F5F5" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.12496 8.16671C5.48063 8.16671 4.95829 7.64437 4.95829 7.00004C4.95829 6.35571 5.48063 5.83337 6.12496 5.83337C6.76929 5.83337 7.29163 6.35571 7.29163 7.00004C7.29163 7.64437 6.76929 8.16671 6.12496 8.16671Z" fill="#F5F5F5"/>
<path d="M7.87496 8.16671C7.23063 8.16671 6.70829 7.64437 6.70829 7.00004C6.70829 6.35571 7.23063 5.83337 7.87496 5.83337C8.51929 5.83337 9.04163 6.35571 9.04163 7.00004C9.04163 7.64437 8.51929 8.16671 7.87496 8.16671Z" fill="#F5F5F5"/>
<path d="M6.12504 7.00004H3.79171M7.87504 7.00004H10.2084M2.04171 7.00004H1.45837M12.5417 7.00004H11.9584M2.04171 2.33337H1.45837M12.5417 2.33337H11.9584M2.04171 11.6667H1.45837M12.5417 11.6667H11.9584" stroke="#F5F5F5" stroke-width="1.16667" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</span><span class="text-[#f5f5f5] text-base">Complexity</span></div><div class="flex items-center gap-3"><div class="flex items-center gap-0.5"><svg width="12" height="12" viewBox="0 0 8 8" fill="none" class="text-gray-8"><path d="M1.5 1.5L6.5 6.5M6.5 1.5L1.5 6.5" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path></svg><span class="inline-flex h-4 items-center justify-center px-1 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3]">3</span></div><span class="shrink-0 h-4"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" rx="1" fill="#D22F43" fill-opacity="0.2"/>
<rect x="7" width="6" height="16" rx="1" fill="#D22F43" fill-opacity="0.2"/>
<rect x="14" width="6" height="16" rx="1" fill="#D22F43" fill-opacity="0.2"/>
<rect x="21" width="20" height="16" rx="2" fill="#D22F43"/>
<mask id="path-5-outside-1_1499_8522" maskUnits="userSpaceOnUse" x="26" y="3" width="10" height="11" fill="black">
<rect fill="white" x="26" y="3" width="10" height="11"/>
<path d="M30.4264 13H27.2226V3.54545H30.491C31.4297 3.54545 32.2361 3.73473 32.9101 4.11328C33.5872 4.48875 34.1073 5.02888 34.4704 5.73366C34.8336 6.43845 35.0152 7.28172 35.0152 8.26349C35.0152 9.24834 34.8321 10.0947 34.4658 10.8026C34.1027 11.5104 33.5779 12.0536 32.8916 12.4322C32.2084 12.8107 31.3866 13 30.4264 13ZM28.9353 11.5181H30.3433C31.0019 11.5181 31.5513 11.3981 31.9914 11.158C32.4315 10.9149 32.7623 10.5533 32.9839 10.0732C33.2055 9.58996 33.3163 8.98674 33.3163 8.26349C33.3163 7.54025 33.2055 6.9401 32.9839 6.46307C32.7623 5.98295 32.4346 5.62441 32.0006 5.38743C31.5698 5.14737 31.0342 5.02734 30.3941 5.02734H28.9353V11.5181Z"/>
</mask>
<path d="M30.4264 13H27.2226V3.54545H30.491C31.4297 3.54545 32.2361 3.73473 32.9101 4.11328C33.5872 4.48875 34.1073 5.02888 34.4704 5.73366C34.8336 6.43845 35.0152 7.28172 35.0152 8.26349C35.0152 9.24834 34.8321 10.0947 34.4658 10.8026C34.1027 11.5104 33.5779 12.0536 32.8916 12.4322C32.2084 12.8107 31.3866 13 30.4264 13ZM28.9353 11.5181H30.3433C31.0019 11.5181 31.5513 11.3981 31.9914 11.158C32.4315 10.9149 32.7623 10.5533 32.9839 10.0732C33.2055 9.58996 33.3163 8.98674 33.3163 8.26349C33.3163 7.54025 33.2055 6.9401 32.9839 6.46307C32.7623 5.98295 32.4346 5.62441 32.0006 5.38743C31.5698 5.14737 31.0342 5.02734 30.3941 5.02734H28.9353V11.5181Z" fill="#121317"/>
<path d="M27.2226 13H26.9726V13.25H27.2226V13ZM27.2226 3.54545V3.29545H26.9726V3.54545H27.2226ZM32.9101 4.11328L32.7876 4.33126L32.7888 4.33191L32.9101 4.11328ZM34.4704 5.73366L34.2482 5.84818V5.84818L34.4704 5.73366ZM34.4658 10.8026L34.2438 10.6877L34.2434 10.6884L34.4658 10.8026ZM32.8916 12.4322L32.7709 12.2133L32.7704 12.2135L32.8916 12.4322ZM28.9353 11.5181H28.6853V11.7681H28.9353V11.5181ZM31.9914 11.158L32.1111 11.3775L32.1123 11.3769L31.9914 11.158ZM32.9839 10.0732L33.2109 10.1779L33.2112 10.1774L32.9839 10.0732ZM32.9839 6.46307L32.7569 6.56783L32.7572 6.56839L32.9839 6.46307ZM32.0006 5.38743L31.8789 5.60583L31.8808 5.60684L32.0006 5.38743ZM28.9353 5.02734V4.77734H28.6853V5.02734H28.9353ZM30.4264 13V12.75H27.2226V13V13.25H30.4264V13ZM27.2226 13H27.4726V3.54545H27.2226H26.9726V13H27.2226ZM27.2226 3.54545V3.79545H30.491V3.54545V3.29545H27.2226V3.54545ZM30.491 3.54545V3.79545C31.396 3.79545 32.1583 3.97777 32.7876 4.33125L32.9101 4.11328L33.0325 3.89531C32.3139 3.4917 31.4635 3.29545 30.491 3.29545V3.54545ZM32.9101 4.11328L32.7888 4.33191C33.4216 4.68282 33.9071 5.1862 34.2482 5.84818L34.4704 5.73366L34.6927 5.61915C34.3075 4.87157 33.7527 4.29469 33.0313 3.89465L32.9101 4.11328ZM34.4704 5.73366L34.2482 5.84818C34.5893 6.5101 34.7652 7.31224 34.7652 8.26349H35.0152H35.2652C35.2652 7.25121 35.0779 6.3668 34.6927 5.61915L34.4704 5.73366ZM35.0152 8.26349H34.7652C34.7652 9.21763 34.5878 10.0227 34.2438 10.6877L34.4658 10.8026L34.6879 10.9174C35.0763 10.1667 35.2652 9.27906 35.2652 8.26349H35.0152ZM34.4658 10.8026L34.2434 10.6884C33.9026 11.3527 33.4129 11.8591 32.7709 12.2133L32.8916 12.4322L33.0123 12.6511C33.7429 12.2481 34.3027 11.6681 34.6883 10.9167L34.4658 10.8026ZM32.8916 12.4322L32.7704 12.2135C32.1319 12.5673 31.3539 12.75 30.4264 12.75V13V13.25C31.4194 13.25 32.2849 13.0542 33.0128 12.6509L32.8916 12.4322ZM28.9353 11.5181V11.7681H30.3433V11.5181V11.2681H28.9353V11.5181ZM30.3433 11.5181V11.7681C31.0311 11.7681 31.6245 11.6429 32.1111 11.3775L31.9914 11.158L31.8717 10.9386C31.478 11.1533 30.9728 11.2681 30.3433 11.2681V11.5181ZM31.9914 11.158L32.1123 11.3769C32.6015 11.1066 32.9682 10.7037 33.2109 10.1779L32.9839 10.0732L32.7569 9.96839C32.5564 10.4028 32.2615 10.7232 31.8705 10.9392L31.9914 11.158ZM32.9839 10.0732L33.2112 10.1774C33.4521 9.65193 33.5663 9.01047 33.5663 8.26349H33.3163H33.0663C33.0663 8.96301 32.9589 9.52799 32.7567 9.96894L32.9839 10.0732ZM33.3163 8.26349H33.5663C33.5663 7.51671 33.4522 6.87772 33.2107 6.35775L32.9839 6.46307L32.7572 6.56839C32.9588 7.00249 33.0663 7.56379 33.0663 8.26349H33.3163ZM32.9839 6.46307L33.2109 6.3583C32.9685 5.83306 32.6049 5.43255 32.1204 5.16801L32.0006 5.38743L31.8808 5.60684C32.2643 5.81626 32.5562 6.13285 32.7569 6.56783L32.9839 6.46307ZM32.0006 5.38743L32.1223 5.16904C31.6448 4.90298 31.0645 4.77734 30.3941 4.77734V5.02734V5.27734C31.004 5.27734 31.4947 5.39177 31.8789 5.60582L32.0006 5.38743ZM30.3941 5.02734V4.77734H28.9353V5.02734V5.27734H30.3941V5.02734ZM28.9353 5.02734H28.6853V11.5181H28.9353H29.1853V5.02734H28.9353Z" fill="#E998A2" mask="url(#path-5-outside-1_1499_8522)"/>
</svg>
</span></div></div><div class="border-b border-ink-100 flex items-center justify-between px-4 py-3"><div class="flex items-center gap-3"><span class="shrink-0 w-4 h-4 flex items-center justify-center"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1491_8355)">
<path d="M1.51225 9.31996C1.90425 7.84996 3.10271 6.70837 4.62404 6.70837C6.05175 6.70837 7.00521 7.999 6.97371 9.42671L6.95708 10.176C6.95085 10.4551 7.00191 10.7325 7.10711 10.991C7.21231 11.2496 7.36941 11.4838 7.56871 11.6792L7.89129 11.996C8.35387 12.4501 8.08379 13.228 7.43775 13.2817C6.60183 13.3508 5.56817 13.4167 4.66662 13.4167C3.50521 13.4167 2.34408 13.3073 1.61871 13.2225C1.18937 13.1723 0.872624 12.806 0.913749 12.376C1.00708 11.3952 1.25617 10.2795 1.51225 9.31996Z" stroke="#F5F5F5" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5.83341 7.0052C6.32341 5.18812 6.84316 3.3687 7.24887 1.52974C7.31274 1.24012 7.23487 0.943492 6.9572 0.83995C6.88856 0.814713 6.81878 0.792717 6.74807 0.774034C6.67749 0.754938 6.60605 0.739171 6.53399 0.726784C6.24174 0.6772 6.02591 0.895367 5.93666 1.17799C5.36499 2.9837 4.90357 4.83024 4.4162 6.65899M13.1251 13.1249H10.2084M12.2501 10.7916H9.33341M11.3751 8.45828H8.45841M2.93103 11.0104C2.88232 11.4479 2.93103 12.527 3.51437 13.3437M4.9727 11.0833C4.9727 11.0833 4.9727 12.5416 5.83341 13.2708" stroke="#F5F5F5" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_1491_8355">
<rect width="14" height="14" fill="white"/>
</clipPath>
</defs>
</svg>
</span><span class="text-[#f5f5f5] text-base">Hygiene</span></div><div class="flex items-center gap-3"><div class="flex items-center gap-0.5"><svg width="12" height="12" viewBox="0 0 8 8" fill="none" class="text-gray-8"><path d="M1.5 1.5L6.5 6.5M6.5 1.5L1.5 6.5" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path></svg><span class="inline-flex h-4 items-center justify-center px-1 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3]">0</span></div><span class="shrink-0 h-4"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="20" height="16" rx="2" fill="#33CB9A"/>
<mask id="path-2-outside-1_1499_8449" maskUnits="userSpaceOnUse" x="5" y="3" width="10" height="11" fill="black">
<rect fill="white" x="5" y="3" width="10" height="11"/>
<path d="M7.44305 13H5.61492L8.9434 3.54545H11.0578L14.3908 13H12.5627L10.0375 5.48438H9.96365L7.44305 13ZM7.50306 9.29297H12.4889V10.6687H7.50306V9.29297Z"/>
</mask>
<path d="M7.44305 13H5.61492L8.9434 3.54545H11.0578L14.3908 13H12.5627L10.0375 5.48438H9.96365L7.44305 13ZM7.50306 9.29297H12.4889V10.6687H7.50306V9.29297Z" fill="#121317"/>
<path d="M7.44305 13V13.25H7.62289L7.68007 13.0795L7.44305 13ZM5.61492 13L5.37911 12.917L5.26187 13.25H5.61492V13ZM8.9434 3.54545V3.29545H8.76638L8.70759 3.46244L8.9434 3.54545ZM11.0578 3.54545L11.2935 3.46233L11.2347 3.29545H11.0578V3.54545ZM14.3908 13V13.25H14.7441L14.6266 12.9169L14.3908 13ZM12.5627 13L12.3257 13.0796L12.383 13.25H12.5627V13ZM10.0375 5.48438L10.2745 5.40475L10.2172 5.23438H10.0375V5.48438ZM9.96365 5.48438V5.23438H9.78381L9.72662 5.40488L9.96365 5.48438ZM7.50306 9.29297V9.04297H7.25306V9.29297H7.50306ZM12.4889 9.29297H12.7389V9.04297H12.4889V9.29297ZM12.4889 10.6687V10.9187H12.7389V10.6687H12.4889ZM7.50306 10.6687H7.25306V10.9187H7.50306V10.6687ZM7.44305 13V12.75H5.61492V13V13.25H7.44305V13ZM5.61492 13L5.85074 13.083L9.17922 3.62847L8.9434 3.54545L8.70759 3.46244L5.37911 12.917L5.61492 13ZM8.9434 3.54545V3.79545H11.0578V3.54545V3.29545H8.9434V3.54545ZM11.0578 3.54545L10.822 3.62858L14.1551 13.0831L14.3908 13L14.6266 12.9169L11.2935 3.46233L11.0578 3.54545ZM14.3908 13V12.75H12.5627V13V13.25H14.3908V13ZM12.5627 13L12.7997 12.9204L10.2745 5.40475L10.0375 5.48438L9.80053 5.564L12.3257 13.0796L12.5627 13ZM10.0375 5.48438V5.23438H9.96365V5.48438V5.73438H10.0375V5.48438ZM9.96365 5.48438L9.72662 5.40488L7.20602 12.9205L7.44305 13L7.68007 13.0795L10.2007 5.56387L9.96365 5.48438ZM7.50306 9.29297V9.54297H12.4889V9.29297V9.04297H7.50306V9.29297ZM12.4889 9.29297H12.2389V10.6687H12.4889H12.7389V9.29297H12.4889ZM12.4889 10.6687V10.4187H7.50306V10.6687V10.9187H12.4889V10.6687ZM7.50306 10.6687H7.75306V9.29297H7.50306H7.25306V10.6687H7.50306Z" fill="#94E4CA" mask="url(#path-2-outside-1_1499_8449)"/>
<rect x="21" width="6" height="16" rx="1" fill="#33CB9A" fill-opacity="0.2"/>
<rect x="28" width="6" height="16" rx="1" fill="#33CB9A" fill-opacity="0.2"/>
<rect x="35" width="6" height="16" rx="1" fill="#33CB9A" fill-opacity="0.2"/>
</svg>
</span></div></div><div class="flex items-center justify-between px-4 py-3"><div class="flex items-center gap-3"><span class="shrink-0 w-4 h-4 flex items-center justify-center"><svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1491_8360)">
<path d="M7 7.4375V11.8125C7 12.0446 6.90781 12.2671 6.74372 12.4312C6.57962 12.5953 6.35706 12.6875 6.125 12.6875C5.89294 12.6875 5.67038 12.5953 5.50628 12.4312C5.34219 12.2671 5.25 12.0446 5.25 11.8125M7 7.4375L6.73504 7.23871C6.32287 6.92964 5.81306 6.77959 5.29918 6.8161C4.78529 6.85262 4.30182 7.07325 3.9375 7.4375C3.76514 7.26513 3.56052 7.1284 3.33532 7.03512C3.11013 6.94183 2.86876 6.89382 2.625 6.89382C2.38124 6.89382 2.13987 6.94183 1.91468 7.03512C1.68948 7.1284 1.48486 7.26513 1.3125 7.4375C1.3125 4.29625 3.85875 1.75 7 1.75M7 7.4375L7.26496 7.23871C7.67713 6.92964 8.18694 6.77959 8.70082 6.8161C9.21471 6.85262 9.69818 7.07325 10.0625 7.4375C10.2349 7.26513 10.4395 7.1284 10.6647 7.03512C10.8899 6.94183 11.1312 6.89382 11.375 6.89382C11.6188 6.89382 11.8601 6.94183 12.0853 7.03512C12.3105 7.1284 12.5151 7.26513 12.6875 7.4375C12.6875 4.29625 10.1412 1.75 7 1.75M7 1.75V1.3125" stroke="#F5F5F5" stroke-width="0.875" stroke-linecap="round" stroke-linejoin="round"/>
</g>
<defs>
<clipPath id="clip0_1491_8360">
<rect width="14" height="14" fill="white"/>
</clipPath>
</defs>
</svg>
</span><span class="text-[#f5f5f5] text-base">Coverage</span></div><div class="flex items-center gap-3"><div class="flex items-center gap-0.5"><svg width="12" height="12" viewBox="0 0 8 8" fill="none" class="text-gray-8"><path d="M1.5 1.5L6.5 6.5M6.5 1.5L1.5 6.5" stroke="currentColor" stroke-width="1" stroke-linecap="round"></path></svg><span class="inline-flex h-4 items-center justify-center px-1 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3]">11</span></div><span class="shrink-0 h-4"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="7" width="20" height="16" rx="2" fill="#F6D87C"/>
<mask id="path-3-outside-1_1499_8570" maskUnits="userSpaceOnUse" x="12.5" y="3" width="9" height="11" fill="black">
<rect fill="white" x="12.5" y="3" width="9" height="11"/>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z"/>
</mask>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z" fill="#121317"/>
<path d="M13.6606 13H13.4106V13.25H13.6606V13ZM13.6606 3.54545V3.29545H13.4106V3.54545H13.6606ZM18.9834 3.86861L18.8759 4.09433L18.8777 4.09519L18.9834 3.86861ZM20.0036 4.74112L19.79 4.87105L19.7908 4.87234L20.0036 4.74112ZM20.1236 6.98473L20.3431 7.10444L20.3437 7.1034L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806V7.43806L19.5281 7.64489ZM18.6925 8.00959L18.6342 7.76649L18.4425 7.81249V8.00959H18.6925ZM18.6925 8.10192H18.4425V8.33853L18.6788 8.35154L18.6925 8.10192ZM19.6574 8.41122L19.5272 8.62466L19.5297 8.62616L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175V9.32175L20.4191 9.19602ZM20.3591 11.7443L20.5724 11.8747L20.5728 11.8739L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368L19.288 12.663ZM15.3733 11.5689H15.1233V11.8189H15.3733V11.5689ZM18.5586 11.2134L18.7222 11.4025L18.7224 11.4023L18.5586 11.2134ZM18.7664 9.53303L18.5528 9.66292L18.5536 9.66421L18.7664 9.53303ZM18.1755 8.99751L18.0605 9.2195L18.0626 9.22058L18.1755 8.99751ZM15.3733 8.79901V8.54901H15.1233V8.79901H15.3733ZM15.3733 7.56641H15.1233V7.81641H15.3733V7.56641ZM17.8662 7.40483L17.9696 7.63243L17.972 7.6313L17.8662 7.40483ZM18.4248 6.93857L18.2182 6.79773L18.2177 6.79842L18.4248 6.93857ZM18.2447 5.31356L18.0747 5.49685L18.0758 5.49785L18.2447 5.31356ZM15.3733 4.9581V4.7081H15.1233V4.9581H15.3733ZM13.6606 13H13.9106V3.54545H13.6606H13.4106V13H13.6606ZM13.6606 3.54545V3.79545H17.2799V3.54545V3.29545H13.6606V3.54545ZM17.2799 3.54545V3.79545C17.9387 3.79545 18.4669 3.89959 18.8759 4.09432L18.9834 3.86861L19.0908 3.64289C18.595 3.40676 17.9875 3.29545 17.2799 3.29545V3.54545ZM18.9834 3.86861L18.8777 4.09519C19.2959 4.29017 19.595 4.55042 19.79 4.87105L20.0036 4.74112L20.2172 4.61119C19.9629 4.19319 19.5818 3.87176 19.089 3.64202L18.9834 3.86861ZM20.0036 4.74112L19.7908 4.87234C19.9923 5.19913 20.0952 5.57158 20.0952 5.9968H20.3452H20.5952C20.5952 5.48642 20.4704 5.02175 20.2164 4.6099L20.0036 4.74112ZM20.3452 5.9968H20.0952C20.0952 6.34973 20.0275 6.63625 19.9036 6.86606L20.1236 6.98473L20.3437 7.1034C20.5152 6.78539 20.5952 6.41329 20.5952 5.9968H20.3452ZM20.1236 6.98473L19.9042 6.86502C19.775 7.1018 19.6032 7.29167 19.3877 7.43806L19.5281 7.64489L19.6685 7.85171C19.9515 7.65956 20.1768 7.40932 20.3431 7.10444L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806C19.1646 7.58954 18.9141 7.69931 18.6342 7.76649L18.6925 8.00959L18.7509 8.25268C19.0865 8.17214 19.3931 8.03877 19.6685 7.85171L19.5281 7.64489ZM18.6925 8.00959H18.4425V8.10192H18.6925H18.9425V8.00959H18.6925ZM18.6925 8.10192L18.6788 8.35154C18.97 8.36757 19.252 8.45679 19.5272 8.62465L19.6574 8.41122L19.7875 8.1978C19.4472 7.99018 19.0859 7.87319 18.7063 7.8523L18.6925 8.10192ZM19.6574 8.41122L19.5297 8.62616C19.8009 8.7873 20.0256 9.01683 20.203 9.32175L20.4191 9.19602L20.6352 9.0703C20.4186 8.69813 20.1355 8.40446 19.785 8.19629L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175C20.3732 9.61436 20.4645 9.97814 20.4645 10.424H20.7145H20.9645C20.9645 9.90965 20.8589 9.45477 20.6352 9.0703L20.4191 9.19602ZM20.7145 10.424H20.4645C20.4645 10.871 20.3569 11.2657 20.1453 11.6147L20.3591 11.7443L20.5728 11.8739C20.8352 11.4412 20.9645 10.9557 20.9645 10.424H20.7145ZM20.3591 11.7443L20.1457 11.614C19.9381 11.9537 19.6216 12.2296 19.1815 12.4368L19.288 12.663L19.3946 12.8892C19.9085 12.6471 20.306 12.3105 20.5724 11.8747L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368C18.7478 12.6411 18.1869 12.75 17.4876 12.75V13V13.25C18.2348 13.25 18.8742 13.1342 19.3946 12.8892L19.288 12.663ZM17.4876 13V12.75H13.6606V13V13.25H17.4876V13ZM15.3733 11.5689V11.8189H17.2152V11.5689V11.3189H15.3733V11.5689ZM17.2152 11.5689V11.8189C17.8576 11.8189 18.38 11.6985 18.7222 11.4025L18.5586 11.2134L18.3951 11.0244C18.1894 11.2023 17.8162 11.3189 17.2152 11.3189V11.5689ZM18.5586 11.2134L18.7224 11.4023C19.0557 11.1135 19.2241 10.7361 19.2241 10.2901H18.9741H18.7241C18.7241 10.5951 18.6156 10.8332 18.3949 11.0245L18.5586 11.2134ZM18.9741 10.2901H19.2241C19.2241 9.96669 19.1435 9.66839 18.9792 9.40184L18.7664 9.53303L18.5536 9.66421C18.6662 9.847 18.7241 10.0534 18.7241 10.2901H18.9741ZM18.7664 9.53303L18.98 9.40313C18.8155 9.13258 18.5822 8.92314 18.2883 8.77445L18.1755 8.99751L18.0626 9.22058C18.2796 9.33041 18.4403 9.47798 18.5528 9.66292L18.7664 9.53303ZM18.1755 8.99751L18.2905 8.77554C17.9922 8.62102 17.6463 8.54901 17.2614 8.54901V8.79901V9.04901C17.5844 9.04901 17.8478 9.10933 18.0605 9.21949L18.1755 8.99751ZM17.2614 8.79901V8.54901H15.3733V8.79901V9.04901H17.2614V8.79901ZM15.3733 8.79901H15.1233V11.5689H15.3733H15.6233V8.79901H15.3733ZM15.3733 7.56641V7.81641H17.0675V7.56641V7.31641H15.3733V7.56641ZM17.0675 7.56641V7.81641C17.3938 7.81641 17.696 7.75678 17.9696 7.63242L17.8662 7.40483L17.7627 7.17724C17.5623 7.26832 17.3321 7.31641 17.0675 7.31641V7.56641ZM17.8662 7.40483L17.972 7.6313C18.2464 7.50303 18.469 7.31922 18.6318 7.07871L18.4248 6.93857L18.2177 6.79842C18.1097 6.95801 17.9599 7.08504 17.7603 7.17836L17.8662 7.40483ZM18.4248 6.93857L18.6313 7.0794C18.8016 6.82962 18.8825 6.53903 18.8825 6.21839H18.6325H18.3825C18.3825 6.45174 18.3249 6.64126 18.2182 6.79773L18.4248 6.93857ZM18.6325 6.21839H18.8825C18.8825 5.78559 18.7264 5.41593 18.4136 5.12928L18.2447 5.31356L18.0758 5.49785C18.2801 5.68516 18.3825 5.91872 18.3825 6.21839H18.6325ZM18.2447 5.31356L18.4147 5.13029C18.096 4.83455 17.6442 4.7081 17.1044 4.7081V4.9581V5.2081C17.5741 5.2081 17.8826 5.31862 18.0747 5.49684L18.2447 5.31356ZM17.1044 4.9581V4.7081H15.3733V4.9581V5.2081H17.1044V4.9581ZM15.3733 4.9581H15.1233V7.56641H15.3733H15.6233V4.9581H15.3733Z" fill="#FBEFC8" mask="url(#path-3-outside-1_1499_8570)"/>
<rect x="28" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="35" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
</svg>
</span></div></div><!--]--></div><div class="w-px bg-ink-100 self-stretch hidden sm:block"></div><div class="border-t border-ink-100 sm:hidden"></div><div class="flex flex-1 flex-col gap-6 px-4 py-6 sm:py-3"><div class="flex items-center justify-between"><span class="text-base text-[#c0c1c3]">Overall PR Quality</span><span class="shrink-0"><svg width="41" height="16" viewBox="0 0 41 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="7" width="20" height="16" rx="2" fill="#F6D87C"/>
<mask id="path-3-outside-1_1499_8570" maskUnits="userSpaceOnUse" x="12.5" y="3" width="9" height="11" fill="black">
<rect fill="white" x="12.5" y="3" width="9" height="11"/>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z"/>
</mask>
<path d="M13.6606 13V3.54545H17.2799C17.9631 3.54545 18.5309 3.65317 18.9834 3.86861C19.4388 4.08097 19.7789 4.3718 20.0036 4.74112C20.2313 5.11044 20.3452 5.529 20.3452 5.9968C20.3452 6.38151 20.2714 6.71082 20.1236 6.98473C19.9759 7.25556 19.7774 7.47562 19.5281 7.64489C19.2788 7.81416 19.0003 7.93572 18.6925 8.00959V8.10192C19.028 8.12038 19.3496 8.22348 19.6574 8.41122C19.9682 8.59588 20.2221 8.85748 20.4191 9.19602C20.616 9.53456 20.7145 9.94389 20.7145 10.424C20.7145 10.9134 20.596 11.3535 20.3591 11.7443C20.1221 12.1321 19.7651 12.4383 19.288 12.663C18.811 12.8877 18.2109 13 17.4876 13H13.6606ZM15.3733 11.5689H17.2152C17.8369 11.5689 18.2847 11.4504 18.5586 11.2134C18.8356 10.9734 18.9741 10.6656 18.9741 10.2901C18.9741 10.0101 18.9049 9.75769 18.7664 9.53303C18.6279 9.30528 18.4309 9.12678 18.1755 8.99751C17.92 8.86518 17.6153 8.79901 17.2614 8.79901H15.3733V11.5689ZM15.3733 7.56641H17.0675C17.363 7.56641 17.6292 7.51255 17.8662 7.40483C18.1031 7.29403 18.2893 7.13861 18.4248 6.93857C18.5633 6.73544 18.6325 6.49538 18.6325 6.21839C18.6325 5.85215 18.5032 5.55054 18.2447 5.31356C17.9893 5.07659 17.6092 4.9581 17.1044 4.9581H15.3733V7.56641Z" fill="#121317"/>
<path d="M13.6606 13H13.4106V13.25H13.6606V13ZM13.6606 3.54545V3.29545H13.4106V3.54545H13.6606ZM18.9834 3.86861L18.8759 4.09433L18.8777 4.09519L18.9834 3.86861ZM20.0036 4.74112L19.79 4.87105L19.7908 4.87234L20.0036 4.74112ZM20.1236 6.98473L20.3431 7.10444L20.3437 7.1034L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806V7.43806L19.5281 7.64489ZM18.6925 8.00959L18.6342 7.76649L18.4425 7.81249V8.00959H18.6925ZM18.6925 8.10192H18.4425V8.33853L18.6788 8.35154L18.6925 8.10192ZM19.6574 8.41122L19.5272 8.62466L19.5297 8.62616L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175V9.32175L20.4191 9.19602ZM20.3591 11.7443L20.5724 11.8747L20.5728 11.8739L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368L19.288 12.663ZM15.3733 11.5689H15.1233V11.8189H15.3733V11.5689ZM18.5586 11.2134L18.7222 11.4025L18.7224 11.4023L18.5586 11.2134ZM18.7664 9.53303L18.5528 9.66292L18.5536 9.66421L18.7664 9.53303ZM18.1755 8.99751L18.0605 9.2195L18.0626 9.22058L18.1755 8.99751ZM15.3733 8.79901V8.54901H15.1233V8.79901H15.3733ZM15.3733 7.56641H15.1233V7.81641H15.3733V7.56641ZM17.8662 7.40483L17.9696 7.63243L17.972 7.6313L17.8662 7.40483ZM18.4248 6.93857L18.2182 6.79773L18.2177 6.79842L18.4248 6.93857ZM18.2447 5.31356L18.0747 5.49685L18.0758 5.49785L18.2447 5.31356ZM15.3733 4.9581V4.7081H15.1233V4.9581H15.3733ZM13.6606 13H13.9106V3.54545H13.6606H13.4106V13H13.6606ZM13.6606 3.54545V3.79545H17.2799V3.54545V3.29545H13.6606V3.54545ZM17.2799 3.54545V3.79545C17.9387 3.79545 18.4669 3.89959 18.8759 4.09432L18.9834 3.86861L19.0908 3.64289C18.595 3.40676 17.9875 3.29545 17.2799 3.29545V3.54545ZM18.9834 3.86861L18.8777 4.09519C19.2959 4.29017 19.595 4.55042 19.79 4.87105L20.0036 4.74112L20.2172 4.61119C19.9629 4.19319 19.5818 3.87176 19.089 3.64202L18.9834 3.86861ZM20.0036 4.74112L19.7908 4.87234C19.9923 5.19913 20.0952 5.57158 20.0952 5.9968H20.3452H20.5952C20.5952 5.48642 20.4704 5.02175 20.2164 4.6099L20.0036 4.74112ZM20.3452 5.9968H20.0952C20.0952 6.34973 20.0275 6.63625 19.9036 6.86606L20.1236 6.98473L20.3437 7.1034C20.5152 6.78539 20.5952 6.41329 20.5952 5.9968H20.3452ZM20.1236 6.98473L19.9042 6.86502C19.775 7.1018 19.6032 7.29167 19.3877 7.43806L19.5281 7.64489L19.6685 7.85171C19.9515 7.65956 20.1768 7.40932 20.3431 7.10444L20.1236 6.98473ZM19.5281 7.64489L19.3877 7.43806C19.1646 7.58954 18.9141 7.69931 18.6342 7.76649L18.6925 8.00959L18.7509 8.25268C19.0865 8.17214 19.3931 8.03877 19.6685 7.85171L19.5281 7.64489ZM18.6925 8.00959H18.4425V8.10192H18.6925H18.9425V8.00959H18.6925ZM18.6925 8.10192L18.6788 8.35154C18.97 8.36757 19.252 8.45679 19.5272 8.62465L19.6574 8.41122L19.7875 8.1978C19.4472 7.99018 19.0859 7.87319 18.7063 7.8523L18.6925 8.10192ZM19.6574 8.41122L19.5297 8.62616C19.8009 8.7873 20.0256 9.01683 20.203 9.32175L20.4191 9.19602L20.6352 9.0703C20.4186 8.69813 20.1355 8.40446 19.785 8.19629L19.6574 8.41122ZM20.4191 9.19602L20.203 9.32175C20.3732 9.61436 20.4645 9.97814 20.4645 10.424H20.7145H20.9645C20.9645 9.90965 20.8589 9.45477 20.6352 9.0703L20.4191 9.19602ZM20.7145 10.424H20.4645C20.4645 10.871 20.3569 11.2657 20.1453 11.6147L20.3591 11.7443L20.5728 11.8739C20.8352 11.4412 20.9645 10.9557 20.9645 10.424H20.7145ZM20.3591 11.7443L20.1457 11.614C19.9381 11.9537 19.6216 12.2296 19.1815 12.4368L19.288 12.663L19.3946 12.8892C19.9085 12.6471 20.306 12.3105 20.5724 11.8747L20.3591 11.7443ZM19.288 12.663L19.1815 12.4368C18.7478 12.6411 18.1869 12.75 17.4876 12.75V13V13.25C18.2348 13.25 18.8742 13.1342 19.3946 12.8892L19.288 12.663ZM17.4876 13V12.75H13.6606V13V13.25H17.4876V13ZM15.3733 11.5689V11.8189H17.2152V11.5689V11.3189H15.3733V11.5689ZM17.2152 11.5689V11.8189C17.8576 11.8189 18.38 11.6985 18.7222 11.4025L18.5586 11.2134L18.3951 11.0244C18.1894 11.2023 17.8162 11.3189 17.2152 11.3189V11.5689ZM18.5586 11.2134L18.7224 11.4023C19.0557 11.1135 19.2241 10.7361 19.2241 10.2901H18.9741H18.7241C18.7241 10.5951 18.6156 10.8332 18.3949 11.0245L18.5586 11.2134ZM18.9741 10.2901H19.2241C19.2241 9.96669 19.1435 9.66839 18.9792 9.40184L18.7664 9.53303L18.5536 9.66421C18.6662 9.847 18.7241 10.0534 18.7241 10.2901H18.9741ZM18.7664 9.53303L18.98 9.40313C18.8155 9.13258 18.5822 8.92314 18.2883 8.77445L18.1755 8.99751L18.0626 9.22058C18.2796 9.33041 18.4403 9.47798 18.5528 9.66292L18.7664 9.53303ZM18.1755 8.99751L18.2905 8.77554C17.9922 8.62102 17.6463 8.54901 17.2614 8.54901V8.79901V9.04901C17.5844 9.04901 17.8478 9.10933 18.0605 9.21949L18.1755 8.99751ZM17.2614 8.79901V8.54901H15.3733V8.79901V9.04901H17.2614V8.79901ZM15.3733 8.79901H15.1233V11.5689H15.3733H15.6233V8.79901H15.3733ZM15.3733 7.56641V7.81641H17.0675V7.56641V7.31641H15.3733V7.56641ZM17.0675 7.56641V7.81641C17.3938 7.81641 17.696 7.75678 17.9696 7.63242L17.8662 7.40483L17.7627 7.17724C17.5623 7.26832 17.3321 7.31641 17.0675 7.31641V7.56641ZM17.8662 7.40483L17.972 7.6313C18.2464 7.50303 18.469 7.31922 18.6318 7.07871L18.4248 6.93857L18.2177 6.79842C18.1097 6.95801 17.9599 7.08504 17.7603 7.17836L17.8662 7.40483ZM18.4248 6.93857L18.6313 7.0794C18.8016 6.82962 18.8825 6.53903 18.8825 6.21839H18.6325H18.3825C18.3825 6.45174 18.3249 6.64126 18.2182 6.79773L18.4248 6.93857ZM18.6325 6.21839H18.8825C18.8825 5.78559 18.7264 5.41593 18.4136 5.12928L18.2447 5.31356L18.0758 5.49785C18.2801 5.68516 18.3825 5.91872 18.3825 6.21839H18.6325ZM18.2447 5.31356L18.4147 5.13029C18.096 4.83455 17.6442 4.7081 17.1044 4.7081V4.9581V5.2081C17.5741 5.2081 17.8826 5.31862 18.0747 5.49684L18.2447 5.31356ZM17.1044 4.9581V4.7081H15.3733V4.9581V5.2081H17.1044V4.9581ZM15.3733 4.9581H15.1233V7.56641H15.3733H15.6233V4.9581H15.3733Z" fill="#FBEFC8" mask="url(#path-3-outside-1_1499_8570)"/>
<rect x="28" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
<rect x="35" width="6" height="16" rx="1" fill="#F6D87C" fill-opacity="0.2"/>
</svg>
</span></div><div class="flex items-center justify-between"><span class="text-base text-[#c0c1c3]">Focus Area</span><span class="text-base font-medium text-white">Reliability</span></div><div class="flex flex-col gap-2.5"><span class="text-base text-[#c0c1c3]">Guidance</span><p class="text-[14px] text-white leading-relaxed"> Fix the high-severity <code class="px-0.5 py-0.5 rounded-sm bg-ink-200 text-[13.5px] font-mono text-[#c0c1c3] inline"> _check_milestones </code> call outside transaction risk in contrib/referrals/team_referral.py to prevent inconsistent states. </p></div></div></div></div></div></section><!--]--></div><!----></div><div data-v-888872c6><!----><!----><section class="grid grid-cols-1 sm:grid-cols-3 gap-8" data-v-888872c6><!--[--><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>Secrets Detection <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Prevent API keys, tokens, and sensitive credentials from ever reaching production. Validated against 165+ providers.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/secrets.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/secrets.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>OSS Vulnerability Scanning <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>See which dependency vulnerabilities actually affect your code with reachability and taint analysis.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/sca.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/sca.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>Code Coverage <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Track coverage and see which lines in your code are untested. Enforce thresholds so nothing ships without tests.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/coverage.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/coverage.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>Compliance Reporting <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Stay audit-ready with security vulnerability reports mapped to OWASP® Top 10 and SANS Top 25.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/owasp.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/owasp.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>Infrastructure-as-Code Review <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Catch security misconfigurations in Terraform and CloudFormation before they become incidents.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/terraform.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/terraform.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>License Compliance <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Catch copyleft and restrictive OSS licenses before they create legal risk for your product.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/license.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/license.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>MCP Server <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Feed review insights and structured feedback directly into your AI coding agent or any MCP-compatible app.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/mcp.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/mcp.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>API &amp; Webhooks <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Bring DeepSource into your workflows with a full GraphQL API and real-time webhook events.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/api.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/api.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><div class="group relative flex flex-col justify-between surface-elevated hover:surface-elevated-md rounded-md p-8 h-52 sm:h-64 overflow-clip transition-[border-color] duration-300 hover:border-juniper-6 before:content-[&#39;&#39;] before:absolute before:inset-0 before:rounded-[inherit] before:bg-[radial-gradient(circle_at_100%_100%,_#cdf3e2_0%,_#e0f8ed_25%,_#f2fcf7_50%,_white_80%)] before:opacity-0 before:z-0 before:pointer-events-none before:transition-opacity before:duration-300 hover:before:opacity-100 cursor-default" data-v-888872c6><div class="relative z-10 flex items-start justify-between" data-v-888872c6><h3 class="text-xl font-semibold tracking-tight text-gray-12" data-v-888872c6>Full Codebase Review <!----></h3><!----></div><p class="relative z-10 font-medium text-base text-gray-11 group-hover:text-gray-12 leading-relaxed" data-v-888872c6>Go beyond pull requests. Scan your entire existing codebase and track code health and security hotspots over time.</p><div class="absolute -bottom-8 -right-8 w-64 h-64 rounded-full bg-juniper-5 opacity-0 group-hover:opacity-50 blur-3xl transition-opacity duration-300 pointer-events-none" data-v-888872c6></div><div class="feature-icon absolute bottom-0 right-0 h-48 w-48 transform translate-x-1/3 translate-y-1/3 group-hover:translate-x-1/4 group-hover:translate-y-1/4 transition-all duration-300 pointer-events-none bg-current text-gray-4 group-hover:text-juniper-6" style="webkit-mask-image:url(/img/icon/feature/repository.svg);webkit-mask-size:contain;webkit-mask-repeat:no-repeat;webkit-mask-position:center;mask-image:url(/img/icon/feature/repository.svg);mask-size:contain;mask-repeat:no-repeat;mask-position:center;" data-v-888872c6></div></div><!--]--></section></div><!--]--></div></section><div class="max-w-7xl mx-auto min-h-[550px] sm:min-h-[500px] flex flex-col justify-center relative" data-v-a35da1b8><!--[--><section class="p-12 sm:p-20 min-h-[300px] relative" data-v-a35da1b8><div class="grid grid-cols-1 sm:grid-cols-3 max-w-5xl mx-auto space-y-6 sm:space-y-0 gap-x-6 text-gray-1" data-v-a35da1b8><div class="sm:col-span-2 font-medium text-xl sm:text-[26px] leading-relaxed tracking-tight relative"><span class="iconify i-raphael:quote h-6 sm:h-12 w-6 sm:w-12 sm:absolute sm:-top-12 sm:-left-20 inline-block mr-2 text-juniper-7" aria-hidden="true" style=""></span><span class="leading-normal"><!--[-->With DeepSource&#39;s pull request analysis workflow, everything is integrated — right at the point of merge, and this has been a game changer for us.<!--]--></span></div><div class="flex flex-col justify-end sm:justify-end items-end gap-y-4 sm:gap-y-6 text-base sm:text-lg mt-32 text-juniper-3"><p class="font-[550]">Reed Wilson<span>, </span><span class="font-[450]">Engineering Manager</span></p><img src="/img/customer/ancestry.svg" alt="Reed Wilson logo" class="h-8 sm:h-10 brightness-0 invert"></div></div></section><!--]--></div><div class="relative w-screen left-1/2 -translate-x-1/2"><hr class="border-t border-gray-5" aria-hidden="true"></div><div class="w-full h-12 sm:h-24"></div><div class="max-w-7xl mx-auto px-6"><div><h3 class="text-base text-gray-12 uppercase font-semibold inline-flex items-center tracking-wide"><span class="bg-juniper-9 rounded-sm w-5 h-5 inline-block"></span><span class="px-3 py-1 leading-4">Benchmarks</span></h3><div class="w-full h-4 sm:h-5"></div><div class="max-w-5xl"><h2 class="text-2xl sm:text-3xl font-semibold tracking-tight text-juniper-11">Highest F1 score on the OpenSSF CVE Benchmark. <span class="sm:block text-gray-10 font-[550] leading-snug">The only code review engine that&#39;s simultaneously precise and thorough.</span></h2></div></div><div class="w-full h-8 sm:h-16"></div><section class="grid grid-cols-1 sm:grid-cols-3 w-full gap-8"><div class="col-span-1 sm:col-span-2"><div class="w-full mx-auto"><div class="mb-6 sm:mb-8 text-center"><h3 class="text-sm sm:text-base font-medium text-gray-11">F1 Score on OpenSSF CVE Benchmark</h3></div><div class="space-y-2 sm:space-y-3"><!--[--><div class="flex items-center gap-3 sm:gap-4"><div class="text-juniper-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">DeepSource</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-juniper-2"><div class="bg-juniper-10 ring-1 ring-juniper-11/70 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:84.51%;"></div></div><div class="text-juniper-11/80 font-bold text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">84.51% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">Cursor BugBot</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:80.45%;opacity:1;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">80.45% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">Devin Review</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:78.08%;opacity:0.92;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">78.08% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">OpenAI Codex</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:77.7%;opacity:0.84;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">77.70% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">Greptile</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:68.61%;opacity:0.76;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">68.61% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">Claude Code</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:62.4%;opacity:0.6799999999999999;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">62.40% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">Semgrep (CE)</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:36.7%;opacity:0.6;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">36.70% </div></div></div><div class="flex items-center gap-3 sm:gap-4"><div class="text-gray-11 w-24 sm:w-32 text-right text-xs sm:text-sm font-[550] leading-tight shrink-0">CodeRabbit</div><div class="flex-1 flex items-center gap-2 sm:gap-3"><div class="flex-1 relative h-7 sm:h-9 rounded-r-sm bg-gray-1"><div class="bg-gray-4 absolute inset-y-0 left-0 transition-all duration-700 ease-out" style="width:36%;opacity:0.52;"></div></div><div class="text-gray-10 font-medium text-xs sm:text-sm font-mono whitespace-nowrap shrink-0">36.00% </div></div></div><!--]--></div><!----></div></div><div class="col-span-1 flex flex-col justify-between sm:border-l border-dashed border-gray-8 sm:pl-6 gap-6 pt-4 sm:pt-0"><div class="text-sm space-y-2 text-gray-12"><span class="flex flex-row items-center gap-1"><span class="font-semibold">What&#39;s F1 Score?</span></span><div class="text-pretty"> The harmonic mean of precision and recall. F1 is the only metric that punishes both failure modes: missing real vulnerabilities and crying wolf on safe code. It can&#39;t be gamed by being too conservative or too noisy. </div></div><div class="space-y-2"><div class="font-medium tracking-tight text-sm text-gray-10">About this benchmark</div><p class="leading-relaxed text-xs text-gray-10"> The OpenSSF CVE Benchmark consists of code and metadata for over 200 real-life security vulnerabilities in JavaScript and TypeScript, which have been validated and fixed in open-source projects. </p><p class="leading-relaxed text-xs text-gray-10"> It evaluates tools on two key metrics: their ability to detect the vulnerability (avoiding false negatives) and their ability to recognize the validated patch (avoiding false positive). </p></div></div></section></div><div class="w-full h-12 sm:h-24"></div><section class="max-w-7xl mx-auto border-juniper-7 sm:border-x-2 border-y-2 sm:rounded-xl px-6 py-12 sm:p-16 relative overflow-clip"><div class="absolute inset-0 pointer-events-none overflow-hidden z-0 z-0" data-v-af6e62d3><div class="absolute inset-0 breathing-gradient" style="background:linear-gradient(135deg, #E0F8ED, #B7ECD4, #FAFEFC, #B7ECD4, #E0F8ED);background-size:200% 200%;--duration:8s;" data-v-af6e62d3></div><svg class="absolute inset-0 w-full h-full" style="opacity:0.12;" data-v-af6e62d3><filter id="breathing-noise" data-v-af6e62d3><feTurbulence type="fractalNoise" baseFrequency="0.65" numOctaves="4" stitchTiles="stitch" data-v-af6e62d3></feTurbulence></filter><rect width="100%" height="100%" filter="url(#breathing-noise)" data-v-af6e62d3></rect></svg></div><div class="z-10 relative"><h3 class="text-base text-gray-12 uppercase font-semibold inline-flex items-center tracking-wide"><span class="bg-juniper-9 rounded-sm w-5 h-5 inline-block"></span><span class="px-3 py-1 leading-4">Enterprise Ready</span></h3><div class="w-full h-4 sm:h-5"></div><div class="max-w-5xl"><h2 class="text-2xl sm:text-3xl font-semibold tracking-tight text-juniper-11">Code review intelligence for startups and Fortune 500s. <span class="sm:block text-gray-10 font-[550] leading-snug">DeepSource is secure by design and built for scale.</span></h2></div></div><div class="w-full h-8 sm:h-16"></div><div class="grid grid-cols-2 sm:grid-cols-3 gap-8 sm:gap-12 z-10 relative"><!--[--><div class="flex flex-col gap-2"><div class="text-3xl sm:text-4xl font-bold tracking-tight text-juniper-12 font-mono"><span>0</span><span class="text-gray-juniper-11">+</span></div><div class="flex items-center gap-2 text-sm sm:text-lg font-medium text-juniper-12/70 tracking-tight"><!----><span>Connected repositories</span></div></div><div class="flex flex-col gap-2"><div class="text-3xl sm:text-4xl font-bold tracking-tight text-juniper-12 font-mono"><span>0</span><span class="text-gray-juniper-11">+</span></div><div class="flex items-center gap-2 text-sm sm:text-lg font-medium text-juniper-12/70 tracking-tight"><!----><span>Teams on platform</span></div></div><div class="flex flex-col gap-2"><div class="text-3xl sm:text-4xl font-bold tracking-tight text-juniper-12 font-mono"><span>0.00</span><span class="text-gray-juniper-11">%</span></div><div class="flex items-center gap-2 text-sm sm:text-lg font-medium text-juniper-12/70 tracking-tight"><!----><span>Uptime</span></div></div><!--]--></div><div class="w-full h-8 sm:h-16"></div><div class="grid grid-cols-2 sm:grid-cols-3 gap-8 sm:gap-12 z-10 relative"><div class="flex flex-col gap-4 items-start"><img src="/img/soc2.svg" class="h-24" alt="SOC 2 Compliance"><div class="flex items-center gap-2 text-sm sm:text-lg font-medium text-juniper-12/70 tracking-tight"><span>SOC 2 Type II Compliant</span></div></div><div class="flex flex-col gap-4 items-start"><img src="/img/gdpr.svg" class="h-24" alt="GDPR Compliance"><div class="flex items-center gap-2 text-sm sm:text-lg font-medium text-juniper-12/70 tracking-tight"><span>GDPR Compliant</span></div></div></div></section><section class="py-24 sm:py-32 relative flex flex-col gap-12"><div class="absolute -mt-12 sm:-mt-20 left-0 right-0 h-full opacity-30 bg-gradient-to-t from-juniper-11 to-transparent -z-10"></div><h2 class="text-balance mx-auto max-w-5xl text-3xl font-bold text-juniper-12 sm:text-5xl sm:leading-tight tracking-tight text-center">The AI Code Review Platform for fast-moving teams and their agents.</h2><div class="mx-auto max-w-5xl flex flex-col items-center"><!--[--><div class="flex flex-col items-stretch sm:items-start sm:flex-row gap-6 w-full sm:w-auto"><div class="relative flex flex-col items-stretch sm:items-start"><div style="width:281px;" class="hidden sm:flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-2 text-juniper-11 shadow-md ring-1 ring-inset ring-juniper-9 items-center group px-3 space-x-2"><span class="flex py-3 cursor-default">Quickstart with</span><div class="flex flex-row overflow-hidden flex-grow items-center justify-center"><!--[--><a href="https://app.deepsource.com/login?provider=gh" aria-label="Quickstart with GitHub" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitHub" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=gl" aria-label="Quickstart with GitLab" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitLab" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=bb" aria-label="Quickstart with Bitbucket" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Bitbucket" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100"><!----></a><a href="https://app.deepsource.com/login?provider=ads" aria-label="Quickstart with Azure" class="flex flex-grow flex-row items-center justify-center space-x-1.5 font-medium text-juniper-12 py-2.5 hover:bg-juniper-3 overflow-hidden"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Azure" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100"><!----></a><!--]--></div></div><button class="sm:hidden flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-2 text-juniper-11 shadow-md ring-1 ring-inset ring-juniper-9 items-center justify-center group px-3 py-3 space-x-2 w-full"><span class="flex cursor-default">Quickstart with</span><div class="flex flex-row items-center justify-center space-x-1.5"><!--[--><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitHub" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgithub.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="GitLab" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fgitlab.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Bitbucket" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fbitbucket.svg&amp;w=1536&amp;q=100"><img onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Azure" data-nuxt-img srcset="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100 2x" class="h-6 w-6" src="/_vercel/image?url=%2Fimg%2Ficon%2Fintegration%2Fads.svg&amp;w=1536&amp;q=100"><!--]--></div></button><span class="font-sans text-sm block pt-4 text-gray-12 leading-none text-center sm:text-left"> 14-day free trial, no credit card needed </span></div><div class="flex flex-col space-y-3 items-stretch sm:items-start"><button class="flex flex-row text-sm font-semibold leading-6 rounded bg-juniper-1 text-gray-11 hover:text-gray-12 shadow ring-1 ring-inset ring-gray-6 items-center justify-center sm:justify-start group px-3 py-3 space-x-2 transition-colors duration-150 w-full sm:w-auto"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-4 w-4 text-gray-11"><path fill-rule="evenodd" d="M3.43 2.524A41.29 41.29 0 0 1 10 2c2.236 0 4.43.18 6.57.524 1.437.231 2.43 1.49 2.43 2.902v5.148c0 1.413-.993 2.67-2.43 2.902a41.102 41.102 0 0 1-3.55.414c-.28.02-.521.18-.643.413l-1.712 3.293a.75.75 0 0 1-1.33 0l-1.713-3.293a.783.783 0 0 0-.642-.413 41.108 41.108 0 0 1-3.55-.414C1.993 13.245 1 11.986 1 10.574V5.426c0-1.413.993-2.67 2.43-2.902Z" clip-rule="evenodd"></path></svg><span>Contact Sales</span></button><span class="block sm:hidden text-sm text-gray-12 leading-none text-center"> For growing teams and enterprises </span></div></div><!----><!--]--></div></section></div><!--]--><footer class="bg-juniper-12" aria-labelledby="footer-heading"><h2 id="footer-heading" class="sr-only">Footer</h2><div class="mx-auto max-w-7xl px-6 pb-8 pt-16 lg:px-8 relative"><div class="grid md:grid-cols-4"><div class="space-y-8"><img class="h-7" src="/_nuxt/wordmark-light.CeVwEKwA.svg" alt="DeepSource"></div><div class="sm:mt-16 gap-8 col-span-3 xl:mt-0 tracking-tight"><div class="md:grid md:grid-cols-4 md:gap-8"><!--[--><div class="mt-12 md:mt-0"><h3 class="font-semibold leading-6 text-juniper-1">Product</h3><ul role="list" class="mt-4 space-y-4"><!--[--><!--[--><li><a href="/platform/sast" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">SAST</a><!----></li><!--]--><!--[--><li><a href="/platform/sca" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">SCA</a><!----></li><!--]--><!--[--><li><a href="/platform/code-quality" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Code Quality</a><!----></li><!--]--><!--[--><li><a href="/platform/iac-security" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">IaC Security</a><!----></li><!--]--><!--[--><li><a href="/platform/code-coverage" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Code Coverage</a><!----></li><!--]--><!--[--><li><a href="/platform/ai" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Autofix™ AI</a><!----></li><!--]--><!--[--><li><a href="/pricing" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Pricing</a><!----></li><!--]--><!--[--><li><a href="/directory" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Directory</a><!----></li><!--]--><!--[--><li class="pt-4"><h4 class="font-semibold text-juniper-3 mb-3">Open Source</h4><ul class="space-y-4"><!--[--><li><a href="https://globstar.dev" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Globstar</a></li><!--]--></ul></li><!--]--><!--]--></ul></div><div class="mt-12 md:mt-0"><h3 class="font-semibold leading-6 text-juniper-1">Resources</h3><ul role="list" class="mt-4 space-y-4"><!--[--><!--[--><li><a href="https://docs.deepsource.com" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Documentation</a><!----></li><!--]--><!--[--><li><a href="/blog" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Blog</a><!----></li><!--]--><!--[--><li><a href="/changelog" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Changelog</a><!----></li><!--]--><!--[--><li><a href="/customers" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Customers</a><!----></li><!--]--><!--[--><li><a href="/glossary" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Glossary</a><!----></li><!--]--><!--[--><li><a href="/product-demo" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Product Demo</a><!----></li><!--]--><!--[--><li><a href="/legal/terms" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Terms of Service</a><!----></li><!--]--><!--[--><li><a href="/legal/privacy" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Privacy Policy</a><!----></li><!--]--><!--[--><li><a href="/legal/acceptable-use" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Acceptable Use Policy</a><!----></li><!--]--><!--[--><li><a href="/legal/pilot-evaluation" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Pilot Evaluation Agreement</a><!----></li><!--]--><!--]--></ul></div><div class="mt-12 md:mt-0"><h3 class="font-semibold leading-6 text-juniper-1">Compare</h3><ul role="list" class="mt-4 space-y-4"><!--[--><!--[--><li><a href="/sonarqube-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. SonarQube</a><!----></li><!--]--><!--[--><li><a href="/checkmarx-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Checkmarx</a><!----></li><!--]--><!--[--><li><a href="/veracode-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Veracode</a><!----></li><!--]--><!--[--><li><a href="/snyk-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Snyk</a><!----></li><!--]--><!--[--><li><a href="/semgrep-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Semgrep</a><!----></li><!--]--><!--[--><li><a href="/codeclimate-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Code Climate</a><!----></li><!--]--><!--[--><li><a href="/codacy-alternatives" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">vs. Codacy</a><!----></li><!--]--><!--]--></ul></div><div class="mt-12 md:mt-0"><h3 class="font-semibold leading-6 text-juniper-1">Company</h3><ul role="list" class="mt-4 space-y-4"><!--[--><!--[--><li><a href="/llms.txt" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">llms.txt</a><!----></li><!--]--><!--[--><li><a href="https://deepsourcestatus.com" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">System Status</a><!----></li><!--]--><!--[--><li><a href="/about" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">About</a><!----></li><!--]--><!--[--><li><a href="/contact/sales" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Contact Sales</a><!----></li><!--]--><!--[--><li><a href="https://trust.deepsource.com" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Trust Center</a><!----></li><!--]--><!--[--><li><a href="/jobs" class="text-base font-medium leading-relaxed text-juniper-5 hover:text-juniper-1">Careers</a><!----></li><!--]--><!--]--></ul></div><!--]--></div></div></div><div class="mt-16 border-t border-dashed border-juniper-11/50 pt-8 flex flex-col items-center space-y-4 sm:space-y-0 sm:flex-row"><p class="text-sm font-medium tracking-tight leading-5 text-juniper-10 flex-grow"> © 2026 DeepSource Corp. All rights reserved. </p><div class="flex space-x-6"><!--[--><a href="https://x.com/deepsourcehq" class="text-juniper-11 hover:text-juniper-7"><span class="sr-only">X</span><svg fill="currentColor" viewBox="0 0 24 24" class="h-6" aria-hidden="true"><path d="M13.6823 10.6218L20.2391 3H18.6854L12.9921 9.61788L8.44486 3H3.2002L10.0765 13.0074L3.2002 21H4.75404L10.7663 14.0113L15.5685 21H20.8131L13.6819 10.6218H13.6823ZM11.5541 13.0956L10.8574 12.0991L5.31391 4.16971H7.70053L12.1742 10.5689L12.8709 11.5655L18.6861 19.8835H16.2995L11.5541 13.096V13.0956Z"></path></svg></a><a href="https://github.com/marketplace/deepsource-io" class="text-juniper-11 hover:text-juniper-7"><span class="sr-only">GitHub</span><svg fill="currentColor" viewBox="0 0 24 24" class="h-6" aria-hidden="true"><path fill-rule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" clip-rule="evenodd"></path></svg></a><a href="https://www.youtube.com/@deepsourcehq" class="text-juniper-11 hover:text-juniper-7"><span class="sr-only">YouTube</span><svg fill="currentColor" viewBox="0 0 24 24" class="h-6" aria-hidden="true"><path fill-rule="evenodd" d="M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z" clip-rule="evenodd"></path></svg></a><!--]--></div></div></div></footer><span></span></main></div><span></span><span></span></div></div><div id="teleports"></div>
<script type="application/ld+json" data-nuxt-schema-org="true" data-hid="3437552">{"@context":"https://schema.org","@graph":[{"@id":"https://deepsource.com/#website","@type":"WebSite","description":"DeepSource is the AI Code Review Platform. Hybrid static + AI analysis with 82% accuracy on real vulnerabilities. Ship clean, secure code.","inLanguage":"en","name":"DeepSource","url":"https://deepsource.com","publisher":{"@id":"https://deepsource.com/#identity"}},{"@id":"https://deepsource.com/#webpage","@type":"WebPage","description":"Your team is writing more code with AI. DeepSource automates code reviews so you ship to production faster — catching security issues, improving code quality, and helping your team write better code. 14-day free trial.","name":"DeepSource: The AI Code Review Platform","url":"https://deepsource.com","about":{"@id":"https://deepsource.com/#identity"},"isPartOf":{"@id":"https://deepsource.com/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://deepsource.com"]}],"primaryImageOfPage":{"@id":"https://deepsource.com/#logo"}},{"@id":"https://deepsource.com/#identity","@type":"Organization","description":"AI Code Review Platform with hybrid static + AI analysis. 82% accuracy on real vulnerabilities.","name":"DeepSource","url":"https://deepsource.com","address":{"@type":"PostalAddress","streetAddress":"2261 Market St #4022","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94114","addressCountry":"US"},"sameAs":["https://x.com/deepsourcehq","https://twitter.com/deepsourcehq","https://linkedin.com/company/deepsourcelabs"]},{"@id":"https://deepsource.com/#logo","@type":"ImageObject","caption":"DeepSource","contentUrl":"https://deepsource.com/logo-schema.png","inLanguage":"en","url":"https://deepsource.com/logo-schema.png"},{"@id":"https://deepsource.com/#organization","@type":"Organization","logo":"https://deepsource.com/logo-schema.png","name":"DeepSource","url":"https://deepsource.com","address":{"@type":"PostalAddress","streetAddress":"2261 Market St #4022","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94114","addressCountry":"US"},"sameAs":["https://x.com/deepsourcehq","https://twitter.com/deepsourcehq","https://linkedin.com/company/deepsourcelabs"]}]}</script>
<script type="application/json" data-nuxt-data="nuxt-app" data-ssr="true" id="__NUXT_DATA__" data-src="/_payload.json?3270ab90-8cbc-4852-b834-6c21a2a7b668">[{"state":1,"once":1226,"_errors":1227,"serverRendered":1229,"path":7,"prerenderedAt":1230},["Reactive",2],{"$sdd-pages":3,"$sdd-surrounds":167,"$sdd-globals":188,"$sdd-navigation":190,"$scontact-sales-modal":9,"$sdemo-booking-modal":9,"$ssite-config":1220},["ShallowRef",4],["ShallowReactive",5],{"/":6},{"_path":7,"_dir":8,"_draft":9,"_partial":9,"_locale":8,"title":10,"description":11,"layout":12,"image":13,"head":14,"body":16,"_type":160,"_id":161,"_source":162,"_file":163,"_stem":164,"_extension":165,"sitemap":166},"/","",false,"DeepSource: The AI Code Review Platform","Your team is writing more code with AI. DeepSource automates code reviews so you ship to production faster — catching security issues, improving code quality, and helping your team write better code. 14-day free trial.","home","/img/meta/homepage.png",{"titleTemplate":15},"%s",{"type":17,"children":18,"toc":157},"root",[19,26,31,39,42,46,49,53,56,60,68,130,134,137,141,145,149,153],{"type":20,"tag":21,"props":22,"children":25},"element","og-image",{"component":23,"title":24},"Default","The AI Code Review Platform",[],{"type":20,"tag":27,"props":28,"children":30},"vertical-spacer",{"size":29},"lg",[],{"type":20,"tag":32,"props":33,"children":38},"landing-hero",{":latestUpdate":34,":showLatestUpdate":35,"subtitle":36,"title":37},"{\"title\":\"New: DeepSource MCP Server\",\"link\":\"/blog/mcp-server\"}","true","Your team is writing more code with AI. DeepSource automates code reviews, so you can ship to production faster with confidence.","Your green light to ship with confidence.",[],{"type":20,"tag":27,"props":40,"children":41},{"size":29},[],{"type":20,"tag":43,"props":44,"children":45},"pr-dashboard-illustration",{},[],{"type":20,"tag":27,"props":47,"children":48},{"size":29},[],{"type":20,"tag":50,"props":51,"children":52},"customer-logo-carousel",{},[],{"type":20,"tag":27,"props":54,"children":55},{"size":29},[],{"type":20,"tag":57,"props":58,"children":59},"divider",{":full-width":35},[],{"type":20,"tag":61,"props":62,"children":67},"div",{"className":63},[64,65,66],"w-full","h-12","sm:h-24",[],{"type":20,"tag":69,"props":70,"children":74},"platform-features",{"eyebrow":71,"subtitle":72,"title":73},"Platform","High-signal, low false-positive issues and structured feedback across security, quality, complexity, and coverage.","Deep code review with hybrid static analysis and AI agents.",[75,89,101,113,125],{"type":20,"tag":76,"props":77,"children":80},"platform-feature-row",{"subtitle":78,"title":79},"Catch bugs, anti-patterns, and security vulnerabilities on every pull request. Powered by 5,000+ deterministic rules along with our state-of-the-art AI review agent.","Inline review on pull requests",[81],{"type":20,"tag":82,"props":83,"children":84},"template",{"v-slot:middle":8},[85],{"type":20,"tag":86,"props":87,"children":88},"github-pr-review",{},[],{"type":20,"tag":76,"props":90,"children":93},{"subtitle":91,"title":92},"Verified, pre-generated patches for most issues, so you can fix issues faster without breaking your flow.","Autofix™",[94],{"type":20,"tag":82,"props":95,"children":96},{"v-slot:middle":8},[97],{"type":20,"tag":98,"props":99,"children":100},"autofix-demo",{},[],{"type":20,"tag":76,"props":102,"children":105},{"subtitle":103,"title":104},"Define guardrails and prevent pull requests from merging when the PR quality is not satisfactory.","Pull request gates",[106],{"type":20,"tag":82,"props":107,"children":108},{"v-slot:middle":8},[109],{"type":20,"tag":110,"props":111,"children":112},"pr-gates-demo",{},[],{"type":20,"tag":76,"props":114,"children":117},{"subtitle":115,"title":116},"More than just issues. Structured feedback to your AI agent to help improve quality of any pull request.","PR Report Card",[118],{"type":20,"tag":82,"props":119,"children":120},{"v-slot:middle":8},[121],{"type":20,"tag":122,"props":123,"children":124},"pr-report-card-demo",{},[],{"type":20,"tag":126,"props":127,"children":129},"platform-features-extended-grid",{":features":128},"[{\"title\":\"Secrets Detection\",\"description\":\"Prevent API keys, tokens, and sensitive credentials from ever reaching production. Validated against 165+ providers.\",\"icon\":\"/img/icon/feature/secrets.svg\"},{\"title\":\"OSS Vulnerability Scanning\",\"description\":\"See which dependency vulnerabilities actually affect your code with reachability and taint analysis.\",\"icon\":\"/img/icon/feature/sca.svg\"},{\"title\":\"Code Coverage\",\"description\":\"Track coverage and see which lines in your code are untested. Enforce thresholds so nothing ships without tests.\",\"icon\":\"/img/icon/feature/coverage.svg\"},{\"title\":\"Compliance Reporting\",\"description\":\"Stay audit-ready with security vulnerability reports mapped to OWASP® Top 10 and SANS Top 25.\",\"icon\":\"/img/icon/feature/owasp.svg\"},{\"title\":\"Infrastructure-as-Code Review\",\"description\":\"Catch security misconfigurations in Terraform and CloudFormation before they become incidents.\",\"icon\":\"/img/icon/feature/terraform.svg\"},{\"title\":\"License Compliance\",\"description\":\"Catch copyleft and restrictive OSS licenses before they create legal risk for your product.\",\"icon\":\"/img/icon/feature/license.svg\"},{\"title\":\"MCP Server\",\"description\":\"Feed review insights and structured feedback directly into your AI coding agent or any MCP-compatible app.\",\"icon\":\"/img/icon/feature/mcp.svg\"},{\"title\":\"API & Webhooks\",\"description\":\"Bring DeepSource into your workflows with a full GraphQL API and real-time webhook events.\",\"icon\":\"/img/icon/feature/api.svg\"},{\"title\":\"Full Codebase Review\",\"description\":\"Go beyond pull requests. Scan your entire existing codebase and track code health and security hotspots over time.\",\"icon\":\"/img/icon/feature/repository.svg\"}]",[],{"type":20,"tag":131,"props":132,"children":133},"big-testimonial-callout",{},[],{"type":20,"tag":57,"props":135,"children":136},{":full-width":35},[],{"type":20,"tag":61,"props":138,"children":140},{"className":139},[64,65,66],[],{"type":20,"tag":142,"props":143,"children":144},"benchmark-showcase",{},[],{"type":20,"tag":61,"props":146,"children":148},{"className":147},[64,65,66],[],{"type":20,"tag":150,"props":151,"children":152},"scale-and-security",{},[],{"type":20,"tag":154,"props":155,"children":156},"page-cta-block",{},[],{"title":8,"searchDepth":158,"depth":158,"links":159},2,[],"markdown","content:index.md","content","index.md","index","md",{"loc":7},["ShallowRef",168],["ShallowReactive",169],{"/":170},[171,180],{"_path":172,"_dir":8,"_draft":9,"_partial":9,"_locale":8,"title":173,"description":174,"layout":12,"head":175,"_type":160,"_id":176,"_source":162,"_file":177,"_stem":178,"_extension":165,"sitemap":179},"/greptile-alternatives","Greptile Alternative — DeepSource vs Greptile Compared (2026)","Looking for a Greptile alternative? DeepSource delivers signal, not noise — with 82% CVE accuracy, 5,000+ static rules, and a full DevSecOps platform. Free trial.",{"titleTemplate":15},"content:greptile-alternatives.md","greptile-alternatives.md","greptile-alternatives",{"loc":172},{"_path":181,"_dir":8,"_draft":9,"_partial":9,"_locale":8,"title":182,"description":183,"layout":12,"_type":160,"_id":184,"_source":162,"_file":185,"_stem":186,"_extension":165,"sitemap":187},"/jobs","Careers","Join DeepSource and help build the AI code review platform trusted by engineering teams worldwide. See open roles.","content:jobs.md","jobs.md","jobs",{"loc":181},["ShallowRef",189],{},[191,194,198,646,649,796,799,802,805,808,821,860,1105,1106,1107,1108,1137,1157,1177,1180,1183,1200,1208,1211,1214,1217],{"title":192,"_path":193,"layout":12},"About","/about",{"title":195,"_path":196,"layout":197},"Benchmarks","/benchmarks","plainpage",{"title":199,"_path":200,"children":201,"layout":205},"DeepSource Blog | Code Quality and Security Insights","/blog",[202,206,209,212,215,218,221,224,227,230,233,236,239,242,245,248,251,254,257,260,263,266,269,272,275,278,281,284,287,290,293,296,299,302,305,308,311,314,317,320,323,326,329,332,335,338,341,344,347,350,353,356,359,362,365,368,371,374,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,421,424,427,430,433,436,439,442,445,448,451,454,457,460,463,466,469,472,475,478,481,484,487,490,493,496,499,502,505,508,511,514,517,520,523,526,529,532,535,538,541,544,547,550,553,556,559,562,565,568,571,574,577,580,583,586,589,592,595,598,601,604,607,610,613,616,619,622,625,628,631,634,637,640,643],{"title":203,"_path":204,"layout":205},"Benefits of Continuous Quality","/blog/6-benefits-continuous-quality","blogpost",{"title":207,"_path":208,"layout":205},"Common anti-patterns in Python","/blog/8-new-python-antipatterns",{"title":210,"_path":211,"layout":205},"Actionable issue reporting with DeepSource","/blog/actionable-issue-reporting",{"title":213,"_path":214,"layout":205},"Every AI code review vendor benchmarks itself, and wins","/blog/ai-code-review-benchmarks",{"title":216,"_path":217,"layout":205},"DeepSource Next '21","/blog/announcing-deepsource-next-21",{"title":219,"_path":220,"layout":205},"Announcing DeepSource Startup Program","/blog/announcing-deepsource-startup-program",{"title":222,"_path":223,"layout":205},"Log4Shell: Apache Log4j Vulnerability","/blog/apache-log4j-log4shell-vulnerability",{"title":225,"_path":226,"layout":205},"Automate code formatting in Python","/blog/auto-code-formatting-python",{"title":228,"_path":229,"layout":205},"Introducing, Autofix™ AI","/blog/autofix-ai",{"title":231,"_path":232,"layout":205},"Autofix: The future of code reviews is here","/blog/autofix-future-of-code-reviews",{"title":234,"_path":235,"layout":205},"Azure DevOps Services + DeepSource","/blog/azure-devops-services",{"title":237,"_path":238,"layout":205},"Balancing code quality and developer productivity","/blog/balancing-code-quality-dev-productivity",{"title":240,"_path":241,"layout":205},"BYOK for AI Review","/blog/byok",{"title":243,"_path":244,"layout":205},"Code formatting on autopilot","/blog/code-formatting-on-autopilot",{"title":246,"_path":247,"layout":205},"Code review best practices","/blog/code-review-best-practices",{"title":249,"_path":250,"layout":205},"Common anti-patterns in Go","/blog/common-antipatterns-in-go",{"title":252,"_path":253,"layout":205},"5 Common mistakes in Go","/blog/common-mistakes-in-go",{"title":255,"_path":256},"Introducing, Community Analyzers","/blog/community-analyzers",{"title":258,"_path":259,"layout":205},"Breaking builds, baseball bats, and the code quality DNA","/blog/conversation-on-code-quality-with-badri",{"title":261,"_path":262,"layout":205},"Custom marshalers in Go: An unexpected gotcha","/blog/custom-marshalers-in-go",{"title":264,"_path":265,"layout":205},"Debugging Heisenbugs: A tale of parallel processing","/blog/debugging-heisenbugs",{"title":267,"_path":268,"layout":205},"DeepSource: 2021 In Review","/blog/deepsource-2021-in-review",{"title":270,"_path":271,"layout":205},"Code review for AI agents","/blog/deepsource-cli-with-agents",{"title":273,"_path":274,"layout":205},"DeepSource Discuss","/blog/deepsource-discuss",{"title":276,"_path":277,"layout":205},"DeepSource + GitHub Education = ♥","/blog/deepsource-gh-education",{"title":279,"_path":280,"layout":205},"DeepSource Hack 'n Camp '21","/blog/deepsource-hack-n-camp-21",{"title":282,"_path":283,"layout":205},"DeepSource: Next","/blog/deepsource-next",{"title":285,"_path":286,"layout":205},"Introducing, DeepSource SCA","/blog/deepsource-sca",{"title":288,"_path":289,"layout":205},"Announcing DeepSource’s Vanta integration","/blog/deepsource-vanta-integration-soc2",{"title":291,"_path":292,"layout":205},"Demystifying Python’s Descriptor Protocol","/blog/demystifying-python-descriptor-protocol",{"title":294,"_path":295,"layout":205},"What is Distributed Tracing?","/blog/distributed-tracing",{"title":297,"_path":298,"layout":205},"Django Async: What's new and what's next?","/blog/django-async-support",{"title":300,"_path":301,"layout":205},"Make your Dockerfile better with DeepSource","/blog/docker-analyzer",{"title":303,"_path":304,"layout":205},"Don't use Math.random()","/blog/dont-use-math-random",{"title":306,"_path":307,"layout":205},"How dynamic languages efficiently handle data types","/blog/dynamic-values",{"title":309,"_path":310,"layout":205},"Engineering Manager’s Guide to Static Analysis","/blog/engineering-manager-guide-to-static-analysis",{"title":312,"_path":313,"layout":205},"Python and Kubernetes Events: March 2019","/blog/events-bangalore-march-2019",{"title":315,"_path":316,"layout":205},"The exponential cost of fixing bugs","/blog/exponential-cost-of-fixing-bugs",{"title":318,"_path":319,"layout":205},"From Zero To Secure","/blog/from-zero-to-secure",{"title":321,"_path":322,"layout":205},"Best practices for using Git","/blog/git-best-practices",{"title":324,"_path":325,"layout":205},"Git branch naming conventions","/blog/git-branch-naming-conventions",{"title":327,"_path":328,"layout":205},"Tips for writing glob patterns in DeepSource configuration","/blog/glob-file-patterns",{"title":330,"_path":331,"layout":205},"The generics implementation of Go 1.18","/blog/go-1-18-generics-implementation",{"title":333,"_path":334,"layout":205},"Release: Go analyzer lands in beta","/blog/go-beta-release",{"title":336,"_path":337,"layout":205},"Package management in Go","/blog/go-modules",{"title":339,"_path":340,"layout":205},"7 popular web frameworks in Go","/blog/go-web-frameworks",{"title":342,"_path":343,"layout":205},"Good Code Podcast: Episode 1","/blog/good-code-podcast-episode-1",{"title":345,"_path":346,"layout":205},"Good Code Podcast: Episode 2","/blog/good-code-podcast-episode-2",{"title":348,"_path":349,"layout":205},"Good Code Podcast: Episode 3","/blog/good-code-podcast-episode-3",{"title":351,"_path":352,"layout":205},"Good Code Podcast: Episode 4","/blog/good-code-podcast-episode-4",{"title":354,"_path":355,"layout":205},"Good First Issue: August 2019","/blog/good-first-issue-aug-2019",{"title":357,"_path":358,"layout":205},"DeepSource's Guide to SAST","/blog/guide-to-sast",{"title":360,"_path":361,"layout":205},"Announcing DeepSource's partnership with Hacktoberfest","/blog/hacktoberfest-21",{"title":363,"_path":364,"layout":205},"Discover: Drive meaningful contributions this Hacktoberfest","/blog/hacktoberfest-2020-with-deepsource-discover",{"title":366,"_path":367,"layout":205},"How we ensure less than 5% false positive rate","/blog/how-deepsource-ensures-less-false-positives",{"title":369,"_path":370,"layout":205},"Importance of software documentation","/blog/importance-of-software-documentation",{"title":372,"_path":373,"layout":205},"Improve Security Posture with Static Application Security Testing (SAST)","/blog/improve-security-posture-with-sast",{"title":199,"_path":200,"layout":375},"default",{"title":377,"_path":378,"layout":205},"Integration with GitLab Pipelines","/blog/integration-with-gitlab-pipelines",{"title":380,"_path":381,"layout":205},"Introducing, DeepSource for Kotlin","/blog/introducing-deepsource-for-kotlin",{"title":383,"_path":384,"layout":205},"Introducing, DeepSource Runner","/blog/introducing-runner",{"title":386,"_path":387,"layout":205},"A hands-on introduction to static code analysis","/blog/introduction-static-code-analysis",{"title":389,"_path":390,"layout":205},"Guidelines for Java code reviews","/blog/java-code-review-guidelines",{"title":392,"_path":393,"layout":205},"JavaScript best practices to improve code quality","/blog/javascript-code-quality-best-practices",{"title":395,"_path":396,"layout":205},"Method invocation and control flow in JVM","/blog/jvm-method-invocation-control-flow",{"title":398,"_path":399,"layout":205},"Why you should use the key directive in Vue.js with v-for","/blog/key-attribute-vue-js",{"title":401,"_path":402,"layout":205},"Lightweight linting with tree-sitter","/blog/lightweight-linting",{"title":404,"_path":405,"layout":205},"Your AI toolchain is now an attack surface","/blog/litellm-supply-chain-attack",{"title":407,"_path":408,"layout":205},"Managing multiple Git profiles","/blog/managing-different-git-profiles",{"title":410,"_path":411,"layout":205},"How Masonite ships good code with DeepSource","/blog/masonite-q-and-a-joe",{"title":413,"_path":414,"layout":205},"DeepSource MCP Server","/blog/mcp-server",{"title":416,"_path":417,"layout":205},"Monadic parser combinators in Haskell","/blog/monadic-parser-combinators",{"title":419,"_path":420,"layout":205},"Introducing support for Monorepos","/blog/monorepos",{"title":422,"_path":423,"layout":205},"Comparison of new Python web frameworks","/blog/new-python-web-frameworks",{"title":425,"_path":426,"layout":205},"Parallel processing in Node.js using worker threads","/blog/nodejs-worker-threads",{"title":428,"_path":429,"layout":205},"OWASP Top 10: Broken Authentication","/blog/owasp-top-ten-broken-auth",{"title":431,"_path":432,"layout":205},"OWASP Top 10: Injection","/blog/owasp-top-ten-injection",{"title":434,"_path":435,"layout":205},"OWASP Top 10: Sensitive Data Exposure","/blog/owasp-top-ten-sensitive-data-exposure",{"title":437,"_path":438,"layout":205},"Introducing, Pinned Reports","/blog/pinned-reports",{"title":440,"_path":441,"layout":205},"Problems & pains in parsing: a story of lexer-hack","/blog/problems-and-pains-in-parsing",{"title":443,"_path":444,"layout":205},"All that happened: PyCon India 2019","/blog/pycon-india-2019-report",{"title":446,"_path":447,"layout":205},"DeepSource at PyCon India 2019","/blog/pycon-india-2019-sponsor",{"title":449,"_path":450,"layout":205},"DeepSource at PyConf Hyderabad - Experience & Reflections","/blog/pyconf-hyderabad-2019-report",{"title":452,"_path":453,"layout":205},"What's new in Python 3.8?","/blog/python-3-8-whats-new",{"title":455,"_path":456,"layout":205},"What's new in Python 3.9?","/blog/python-3-9-whats-new",{"title":458,"_path":459,"layout":205},"What's new in Python 3.10?","/blog/python-3-10-whats-new",{"title":461,"_path":462,"layout":205},"What's new in Python 3.11?","/blog/python-3-11-whats-new",{"title":464,"_path":465,"layout":205},"Learn Python ASTs by building your own linter","/blog/python-asts-by-building-your-own-linter",{"title":467,"_path":468,"layout":205},"Python code formatters","/blog/python-code-formatters",{"title":470,"_path":471,"layout":205},"Python code review checklist","/blog/python-code-review-checklist",{"title":473,"_path":474,"layout":205},"Common beginner mistakes in Python","/blog/python-common-mistakes",{"title":476,"_path":477,"layout":205},"Python gotchas to look out for","/blog/python-gotchas-to-look-out-for",{"title":479,"_path":480,"layout":205},"Easy performance optimizations in Python","/blog/python-performance-three-easy-tips",{"title":482,"_path":483,"layout":205},"Positional-only arguments in Python","/blog/python-positional-only-arguments",{"title":485,"_path":486,"layout":205},"Common Python security pitfalls, and how to avoid them","/blog/python-security-pitfalls",{"title":488,"_path":489,"layout":205},"Walrus operator in Python 3.8: a primer","/blog/python-walrus-operator",{"title":491,"_path":492,"layout":205},"How Reactivity works in Vue.js","/blog/reactivity-in-vue",{"title":494,"_path":495,"layout":205},"Redis diskless replication: What, how, why and the caveats","/blog/redis-diskless-replication",{"title":497,"_path":498,"layout":205},"(Re)Introducing DeepSource","/blog/reintroducing-deepsource",{"title":500,"_path":501,"layout":205},"Introducing Bitbucket support for DeepSource","/blog/release-bitbucket",{"title":503,"_path":504,"layout":205},"Introducing, DeepSource for C#","/blog/release-csharp-beta",{"title":506,"_path":507,"layout":205},"Release: Static analysis for Dockerfile","/blog/release-dockerfile-static-analysis",{"title":509,"_path":510,"layout":205},"Release: GitLab support, new actions on issues","/blog/release-gitlab",{"title":512,"_path":513,"layout":205},"DeepSource Go analyzer is now generally available","/blog/release-go-packages-new-issues",{"title":515,"_path":516,"layout":205},"Release: Granular analysis on diffs","/blog/release-granular-diffs",{"title":518,"_path":519,"layout":205},"Release: Ignore issues in all test files","/blog/release-ignore-issues-in-test-files",{"title":521,"_path":522,"layout":205},"Release: Improved issues interface","/blog/release-improved-issues-interface",{"title":524,"_path":525,"layout":205},"Introducing, DeepSource for Java","/blog/release-java-beta",{"title":527,"_path":528,"layout":205},"DeepSource JavaScript analyzer lands in beta","/blog/release-js-beta",{"title":530,"_path":531,"layout":205},"Release: Test coverage, meta config for analyzers","/blog/release-march-2019",{"title":533,"_path":534,"layout":205},"Release: Static type checker in Python","/blog/release-mypy",{"title":536,"_path":537,"layout":205},"Introducing DeepSource's PHP Analyzer","/blog/release-php-beta",{"title":539,"_path":540,"layout":205},"Release: Improved repository onboarding workflow","/blog/release-repo-onboarding",{"title":542,"_path":543,"layout":205},"Introducing, DeepSource for Rust","/blog/release-rust-beta",{"title":545,"_path":546,"layout":205},"Introducing, DeepSource for Scala","/blog/release-scala-beta",{"title":548,"_path":549,"layout":205},"Release: Static analysis for Terraform","/blog/release-terraform-static-analysis",{"title":551,"_path":552,"layout":205},"Automate code formatting with Transformers","/blog/release-transformers",{"title":554,"_path":555,"layout":205},"Release: Actions on issues, ignore rules","/blog/releases-issue-actions",{"title":557,"_path":558,"layout":205},"Release: Permanently silence issues in code","/blog/releases-silence-issues-in-code",{"title":560,"_path":561,"layout":205},"Introducing, DeepSource Reports","/blog/reports",{"title":563,"_path":564,"layout":205},"Using Roslyn APIs to build a .NET IL interpreter","/blog/roslyn-clr-implementation",{"title":566,"_path":567,"layout":205},"Release: DeepSource Ruby analyzer lands in beta","/blog/ruby-beta-release",{"title":569,"_path":570,"layout":205},"Ruby best practices beginners should know","/blog/ruby-dev-best-practices-for-beginners",{"title":572,"_path":573,"layout":205},"Release: DeepSource Ruby analyzer is now in GA","/blog/ruby-general-availability-release",{"title":575,"_path":576,"layout":205},"Percent notation in Ruby","/blog/ruby-percent-notation",{"title":578,"_path":579,"layout":205},"Ruby security pitfalls, and how to avoid them","/blog/ruby-security-pitfalls",{"title":581,"_path":582,"layout":205},"Ruby 3.2's WASI Integration: A Closer Look","/blog/ruby-wasi-support",{"title":584,"_path":585,"layout":205},"Rust stdlib vulnerability in fs::remove_dir_all","/blog/rust-remove-dir-all-vulnerability",{"title":587,"_path":588,"layout":205},"Rethinking SCA Pricing","/blog/sca-pricing",{"title":590,"_path":591,"layout":205},"Hybrid AI Agent for Secrets Detection","/blog/secrets-detection-hybrid-ai-agent",{"title":593,"_path":594,"layout":205},"Announcing $2.6M seed investment","/blog/seed-investment",{"title":596,"_path":597,"layout":205},"\"isn't a title of this post\" isn't a title of this post","/blog/self-referential",{"title":599,"_path":600,"layout":205},"Setup static code analysis for Python","/blog/setup-static-analysis-python",{"title":602,"_path":603,"layout":205},"How to setup Vault with Kubernetes","/blog/setup-vault-kubernetes",{"title":605,"_path":606,"layout":205},"DeepSource is now SOC 2 Type II compliant","/blog/soc2",{"title":608,"_path":609,"layout":205},"Aligning software development with business strategy","/blog/software-development-business-strategy",{"title":611,"_path":612,"layout":205},"Leveraging static code analysis in a Ruby CI pipeline","/blog/static-analysis-ci-ruby",{"title":614,"_path":615,"layout":205},"Beginner's guide to JavaScript static code analysis","/blog/static-analysis-javascript",{"title":617,"_path":618,"layout":205},"Support for Bitbucket Data Center","/blog/support-for-bitbucket-data-center",{"title":620,"_path":621,"layout":205},"Introducing, DeepSource for Swift","/blog/swift-static-analysis",{"title":623,"_path":624,"layout":205},"Tailscale at DeepSource","/blog/tailscale-at-deepsource",{"title":626,"_path":627,"layout":205},"DeepSource is now free for private repositories","/blog/team-plan-free-private-repos",{"title":629,"_path":630,"layout":205},"Release: Re-thinking test coverage","/blog/test-coverage-release",{"title":632,"_path":633,"layout":205},"Using state machine to write bug-free code","/blog/using-state-machine-to-write-bug-free-code",{"title":635,"_path":636,"layout":205},"Announcing Vanta integration for DeepSource SCA","/blog/vanta-sca",{"title":638,"_path":639,"layout":205},"What is technical debt?","/blog/what-is-technical-debt",{"title":641,"_path":642,"layout":205},"Why we're building DeepSource SCA","/blog/why-deepsource-sca",{"title":644,"_path":645,"layout":205},"Breaking down zero downtime deployments in Kubernetes","/blog/zero-downtime-deployment",{"title":647,"_path":648},"Capabilities","/capabilities",{"title":650,"_path":651,"children":652,"layout":375},"DeepSource Changelog","/changelog",[653,657,660,663,666,669,672,675,678,681,684,687,690,693,695,698,701,704,707,710,713,716,719,722,724,727,730,733,735,738,741,742,745,748,751,754,757,760,763,766,769,771,774,776,778,781,784,787,790,793],{"title":654,"_path":655,"layout":656},"Improvements to Secrets Analyzer","/changelog/2025-01-29","changelog",{"title":658,"_path":659,"layout":656},"DeepSource Directory, Globstar improvements","/changelog/2025-02-21",{"title":661,"_path":662,"layout":656},"DeepSource SCA","/changelog/2025-04-07",{"title":664,"_path":665,"layout":656},"DeepSource Agents, Autofix AI, OIDC support","/changelog/2025-05-27",{"title":667,"_path":668,"layout":656},"Bun and uv are now supported in DeepSource SCA","/changelog/2025-06-25",{"title":670,"_path":671,"layout":656},"Agentic Secrets Detection","/changelog/2025-11-03",{"title":673,"_path":674,"layout":656},"Code formatters, team invitations, performance improvements","/changelog/2025-12-15",{"title":676,"_path":677,"layout":656},"SSO multi-IDP support","/changelog/2026-01-22",{"title":679,"_path":680,"layout":656},"The AI Code Review Platform ","/changelog/2026-02-23",{"title":682,"_path":683,"layout":656},"DeepSource CLI v2","/changelog/2026-03-06",{"title":685,"_path":686,"layout":656},".NET 10, Windows CLI, and PR feedback","/changelog/2026-03-20",{"title":688,"_path":689,"layout":656},"Continuous CVE Monitoring and Alerts","/changelog/2026-03-27",{"title":691,"_path":692,"layout":656},"Bring Your Own Key (BYOK)","/changelog/2026-03-31",{"title":413,"_path":694,"layout":656},"/changelog/2026-04-06",{"title":696,"_path":697,"layout":656},"Configure New Vulnerability Alerts","/changelog/2026-04-10",{"title":699,"_path":700,"layout":656},"Upgrades to AI Review Engine","/changelog/2026-04-13",{"title":702,"_path":703,"layout":656},"OSS vulnerability scanning for monorepos","/changelog/2026-05-20",{"title":705,"_path":706,"layout":656},"6 new issues, and a new login button","/changelog/apr-5-2022",{"title":708,"_path":709,"layout":656},"Detect unexecuted code in tests","/changelog/apr-11-2022",{"title":711,"_path":712,"layout":656},"Audit Log Improvements","/changelog/apr-21-2023",{"title":714,"_path":715,"layout":656},"New webhook events","/changelog/apr-26-2022",{"title":717,"_path":718,"layout":656},"VS Code Extension","/changelog/apr-27-2023",{"title":720,"_path":721,"layout":656},"Rust Support in VS Code Extension","/changelog/aug-5-2024",{"title":717,"_path":723,"layout":656},"/changelog/aug-21-2023",{"title":725,"_path":726,"layout":656},"Analyzer Updates","/changelog/dec-2-2022",{"title":728,"_path":729,"layout":656},"Pinned Reports","/changelog/dec-9-2022",{"title":731,"_path":732,"layout":656},"Account Switcher","/changelog/dec-16-2022",{"title":714,"_path":734,"layout":656},"/changelog/dec-23-2022",{"title":736,"_path":737,"layout":656},"Improved User Settings","/changelog/feb-13-2023",{"title":739,"_path":740,"layout":656},"ClangFormat Transformer","/changelog/feb-22-2023",{"title":650,"_path":651,"layout":375},{"title":743,"_path":744,"layout":656},"Improved repository sync for GitLab","/changelog/jan-10-2022",{"title":746,"_path":747,"layout":656},"OneLogin support in DeepSource Enterprise Server","/changelog/jan-17-2023",{"title":749,"_path":750,"layout":656},"Community Analyzers","/changelog/jan-17-2024",{"title":752,"_path":753,"layout":656},"New webhooks","/changelog/jan-24-2022",{"title":755,"_path":756,"layout":656},"Improved role-based access sync from GitHub","/changelog/jan-25-2023",{"title":758,"_path":759,"layout":656},"Introducing Globstar: Open-source Static Analysis Toolkit","/changelog/jan-25-2025",{"title":761,"_path":762,"layout":656},"Retry analysis checks","/changelog/jun-1-2023",{"title":764,"_path":765,"layout":656},"Integration with Vanta","/changelog/jun-28-2023",{"title":767,"_path":768,"layout":656},"Azure DevOps","/changelog/mar-16-2023",{"title":714,"_path":770,"layout":656},"/changelog/mar-28-2022",{"title":772,"_path":773,"layout":656},"Improved commits and PRs for Autofix™️","/changelog/mar-30-2023",{"title":746,"_path":775,"layout":656},"/changelog/may-9-2024",{"title":749,"_path":777,"layout":656},"/changelog/may-13-2023",{"title":779,"_path":780,"layout":656},"Support for Java 21","/changelog/may-13-2024",{"title":782,"_path":783,"layout":656},"Slack integration, Autofix for C#, and more","/changelog/may-24-2022",{"title":785,"_path":786,"layout":656},"Support for stacked pull-requests","/changelog/nov-14-2023",{"title":788,"_path":789,"layout":656},"Code Health Trend report","/changelog/nov-18-2022",{"title":791,"_path":792,"layout":656},"Composite Test Coverage Metric","/changelog/nov-25-2022",{"title":794,"_path":795,"layout":656},"Support for Monorepos","/changelog/sep-26-2023",{"title":797,"_path":798,"layout":12},"Checkmarx Alternative (2026) — DeepSource vs Checkmarx","/checkmarx-alternatives",{"title":800,"_path":801,"layout":12},"Codacy Alternative (2026) — DeepSource vs Codacy Compared","/codacy-alternatives",{"title":803,"_path":804,"layout":12},"Code Climate Alternative (2026) — DeepSource vs Code Climate","/codeclimate-alternatives",{"title":806,"_path":807,"layout":12},"CodeRabbit Alternative — DeepSource vs CodeRabbit (2026)","/coderabbit-alternatives",{"title":809,"_path":810,"children":811},"Contact","/contact",[812,815,818],{"title":813,"_path":814,"layout":12},"Contact Sales","/contact/sales",{"title":816,"_path":817,"layout":12},"SCA Early Access","/contact/sca",{"title":819,"_path":820,"layout":12},"Contact - Success","/contact/success",{"title":822,"_path":823,"children":824,"layout":12},"Customers","/customers",[825,829,832,835,838,841,844,845,848,851,854,857],{"title":826,"_path":827,"layout":828},"Ancestry","/customers/ancestry","customerstory",{"title":830,"_path":831,"layout":828},"Babbel","/customers/babbel",{"title":833,"_path":834,"layout":828},"Code Éxitos","/customers/code-exitos",{"title":836,"_path":837,"layout":828},"Dgraph","/customers/dgraph",{"title":839,"_path":840,"layout":828},"DVC","/customers/dvc",{"title":842,"_path":843,"layout":828},"Grid AI","/customers/grid-ai",{"title":822,"_path":823,"layout":12},{"title":846,"_path":847,"layout":828},"Masonite","/customers/masonite",{"title":849,"_path":850,"layout":828},"NASA","/customers/nasa",{"title":852,"_path":853,"layout":828},"Okteto","/customers/okteto",{"title":855,"_path":856,"layout":828},"Omnigo","/customers/omnigo",{"title":858,"_path":859,"layout":828},"Qubole","/customers/qubole",{"title":861,"_path":862,"children":863,"layout":375},"Software Development Glossary","/glossary",[864,868,871,874,877,880,883,886,889,892,895,898,901,904,907,910,913,916,919,922,925,928,931,934,937,940,943,946,949,952,955,958,961,964,967,970,971,974,977,980,983,986,989,992,995,998,1001,1004,1006,1009,1012,1015,1018,1021,1024,1027,1030,1033,1036,1039,1042,1045,1048,1051,1054,1057,1060,1063,1066,1069,1072,1075,1078,1081,1084,1087,1090,1093,1096,1099,1102],{"title":865,"_path":866,"layout":867},"Agile Software Development","/glossary/agile-software-development","glossary",{"title":869,"_path":870,"layout":867},"AI Code Review","/glossary/ai-code-review",{"title":872,"_path":873,"layout":867},"Alpha Testing","/glossary/alpha-testing",{"title":875,"_path":876,"layout":867},"Application Programming Interface (API)","/glossary/application-programming-interface",{"title":878,"_path":879,"layout":867},"Abstract Syntax Tree","/glossary/ast",{"title":881,"_path":882,"layout":867},"Asynchronous Programming","/glossary/asynchronous-programming",{"title":884,"_path":885,"layout":867},"Backtracking","/glossary/backtracking",{"title":887,"_path":888,"layout":867},"Behavior-Driven Development (BDD)","/glossary/bdd",{"title":890,"_path":891,"layout":867},"Beta Testing","/glossary/beta-testing",{"title":893,"_path":894,"layout":867},"Blackbox Testing","/glossary/blackbox-testing",{"title":896,"_path":897,"layout":867},"Code Refactoring","/glossary/code-refactoring",{"title":899,"_path":900,"layout":867},"Code Smell","/glossary/code-smell",{"title":902,"_path":903,"layout":867},"Command Line Interface (CLI)","/glossary/command-line-interface",{"title":905,"_path":906,"layout":867},"Container Security","/glossary/container-security",{"title":908,"_path":909,"layout":867},"Continuous Delivery","/glossary/continuous-delivery",{"title":911,"_path":912,"layout":867},"Continuous Integration","/glossary/continuous-integration",{"title":914,"_path":915,"layout":867},"Continuous Quality","/glossary/continuous-quality",{"title":917,"_path":918,"layout":867},"Cross Browser Testing","/glossary/cross-browser-testing",{"title":920,"_path":921,"layout":867},"CVE (Common Vulnerabilities and Exposures)","/glossary/cve",{"title":923,"_path":924,"layout":867},"CWE (Common Weakness Enumeration)","/glossary/cwe",{"title":926,"_path":927,"layout":867},"Cyclomatic Complexity","/glossary/cyclomatic-complexity",{"title":929,"_path":930,"layout":867},"DAST (Dynamic Application Security Testing)","/glossary/dast",{"title":932,"_path":933,"layout":867},"Data abstraction","/glossary/data-abstraction",{"title":935,"_path":936,"layout":867},"Dependency Graph","/glossary/dependency-graph",{"title":938,"_path":939,"layout":867},"Dependency Hell","/glossary/dependency-hell",{"title":941,"_path":942,"layout":867},"Domain Name System (DNS)","/glossary/dns",{"title":944,"_path":945,"layout":867},"Dynamic Analysis","/glossary/dynamic-analysis",{"title":947,"_path":948,"layout":867},"Dynamic Programming","/glossary/dynamic-programming",{"title":950,"_path":951,"layout":867},"Exception Handling","/glossary/exception-handling",{"title":953,"_path":954,"layout":867},"False Positive Rate","/glossary/false-positive-rate",{"title":956,"_path":957,"layout":867},"Functional Programming","/glossary/functional-programming",{"title":959,"_path":960,"layout":867},"Git","/glossary/git",{"title":962,"_path":963,"layout":867},"Hybrid Code Analysis","/glossary/hybrid-code-analysis",{"title":965,"_path":966,"layout":867},"IDE","/glossary/ide",{"title":968,"_path":969,"layout":867},"Incremental Development","/glossary/incremental-development",{"title":861,"_path":862,"layout":375},{"title":972,"_path":973,"layout":867},"Infrastructure as Code Security","/glossary/infrastructure-as-code-security",{"title":975,"_path":976,"layout":867},"Integration Testing","/glossary/integration-testing",{"title":978,"_path":979,"layout":867},"Iterative Development","/glossary/iterative-development",{"title":981,"_path":982,"layout":867},"JSON","/glossary/json",{"title":984,"_path":985,"layout":867},"Machine Learning (ML)","/glossary/machine-learning",{"title":987,"_path":988,"layout":867},"MCP (Model Context Protocol)","/glossary/mcp",{"title":990,"_path":991,"layout":867},"Memory Safety","/glossary/memory-safety",{"title":993,"_path":994,"layout":867},"Object-Oriented Programming","/glossary/object-oriented-programming",{"title":996,"_path":997,"layout":867},"OWASP Top 10","/glossary/owasp-top-10",{"title":999,"_path":1000,"layout":867},"Pair Programming","/glossary/pair-programming",{"title":1002,"_path":1003,"layout":867},"Performance Testing","/glossary/performance-testing",{"title":116,"_path":1005,"layout":867},"/glossary/pr-report-card",{"title":1007,"_path":1008,"layout":867},"Procedural Programming","/glossary/procedural-programming",{"title":1010,"_path":1011,"layout":867},"Pseudocode","/glossary/pseudocode",{"title":1013,"_path":1014,"layout":867},"Rapid Prototyping","/glossary/rapid-prototyping",{"title":1016,"_path":1017,"layout":867},"Reachability Analysis","/glossary/reachability-analysis",{"title":1019,"_path":1020,"layout":867},"Reactive Programming","/glossary/reactive-programming",{"title":1022,"_path":1023,"layout":867},"Regression Testing","/glossary/regression-testing",{"title":1025,"_path":1026,"layout":867},"SANS Top 25","/glossary/sans-top-25",{"title":1028,"_path":1029,"layout":867},"SAST (Static Application Security Testing)","/glossary/sast",{"title":1031,"_path":1032,"layout":867},"SAST vs DAST","/glossary/sast-vs-dast",{"title":1034,"_path":1035,"layout":867},"SCA (Software Composition Analysis)","/glossary/sca",{"title":1037,"_path":1038,"layout":867},"Shift Left Security","/glossary/shift-left-security",{"title":1040,"_path":1041,"layout":867},"Smoke Testing","/glossary/smoke-testing",{"title":1043,"_path":1044,"layout":867},"Software Rot","/glossary/software-rot",{"title":1046,"_path":1047,"layout":867},"Spaghetti Code","/glossary/spaghetti-code",{"title":1049,"_path":1050,"layout":867},"Static Analysis","/glossary/static-analysis",{"title":1052,"_path":1053,"layout":867},"Structured Programming","/glossary/structured-programming",{"title":1055,"_path":1056,"layout":867},"Supply Chain Security","/glossary/supply-chain-security",{"title":1058,"_path":1059,"layout":867},"Synchronous programming","/glossary/synchronous-programming",{"title":1061,"_path":1062,"layout":867},"Taint analysis","/glossary/taint-analysis",{"title":1064,"_path":1065,"layout":867},"Technical Debt","/glossary/technical-debt",{"title":1067,"_path":1068,"layout":867},"Test Coverage","/glossary/test-coverage",{"title":1070,"_path":1071,"layout":867},"Test-Driven Development (TDD)","/glossary/test-driven-development",{"title":1073,"_path":1074,"layout":867},"Unit Testing","/glossary/unit-testing",{"title":1076,"_path":1077,"layout":867},"Usability Testing","/glossary/usability-testing",{"title":1079,"_path":1080,"layout":867},"User Acceptance Testing","/glossary/user-acceptance-testing",{"title":1082,"_path":1083,"layout":867},"Version Control System (VCS)","/glossary/version-control-system",{"title":1085,"_path":1086,"layout":867},"Vulnerability Management","/glossary/vulnerability-management",{"title":1088,"_path":1089,"layout":867},"Waterfall Methodology","/glossary/waterfall-methodology",{"title":1091,"_path":1092,"layout":867},"Web Framework","/glossary/web-framework",{"title":1094,"_path":1095,"layout":867},"Whitebox Testing","/glossary/whitebox-testing",{"title":1097,"_path":1098,"layout":867},"XML","/glossary/xml",{"title":1100,"_path":1101,"layout":867},"YAML","/glossary/yaml",{"title":1103,"_path":1104,"layout":867},"Zero Trust Security","/glossary/zero-trust-security",{"title":173,"_path":172,"layout":12},{"title":10,"_path":7,"layout":12},{"title":182,"_path":181,"layout":12},{"title":1109,"_path":1110,"children":1111},"L","/l",[1112,1116,1119,1122,1125,1128,1131,1134],{"title":1113,"_path":1114,"layout":1115},"DeepSource: AI Code Review Tool — Static Analysis + AI Agent","/l/ai-code-review","ad-landing",{"title":1117,"_path":1118,"layout":1115},"DeepSource: Automated Code Review — Every PR, Inline Comments, Auto-Fix","/l/automated-code-review",{"title":1120,"_path":1121,"layout":1115},"DeepSource: Code Review Tool — PR Comments, Auto-Fix, Merge Gates","/l/code-review-tool",{"title":1123,"_path":1124,"layout":1115},"DeepSource: Code Security — SAST, Secrets Detection, Vulnerability Scanning","/l/code-security",{"title":1126,"_path":1127,"layout":1115},"DeepSource: AI-Powered Static Analysis — 5,000+ Rules + AI Agent","/l/static-analysis",{"title":1129,"_path":1130,"layout":1115},"DeepSource vs CodeRabbit — 82% vs 59% on Real Vulnerabilities","/l/vs-coderabbit",{"title":1132,"_path":1133,"layout":1115},"DeepSource vs Greptile — AI Code Review with Signal, Not Noise","/l/vs-greptile",{"title":1135,"_path":1136,"layout":1115},"DeepSource vs SonarQube — AI-Native Static Analysis","/l/vs-sonarqube",{"title":1138,"_path":1139,"children":1140},"Legal","/legal",[1141,1145,1148,1151,1154],{"title":1142,"_path":1143,"layout":1144},"Acceptable Use Policy","/legal/acceptable-use","plain",{"title":1146,"_path":1147,"layout":1144},"Master Subscription Agreement","/legal/msa",{"title":1149,"_path":1150,"layout":1144},"Pilot Evaluation Agreement","/legal/pilot-evaluation",{"title":1152,"_path":1153,"layout":1144},"Privacy Policy","/legal/privacy",{"title":1155,"_path":1156,"layout":1144},"Terms of Service","/legal/terms",{"title":71,"_path":1158,"children":1159},"/platform",[1160,1163,1166,1169,1172,1175],{"title":1161,"_path":1162,"layout":12},"DeepSource Autofix™ AI","/platform/ai",{"title":1164,"_path":1165,"layout":12},"DeepSource Code Coverage","/platform/code-coverage",{"title":1167,"_path":1168,"layout":12},"DeepSource Code Quality & Static Analysis","/platform/code-quality",{"title":1170,"_path":1171,"layout":12},"DeepSource IaC Security","/platform/iac-security",{"title":1173,"_path":1174,"layout":12},"DeepSource SAST","/platform/sast",{"title":661,"_path":1176,"layout":12},"/platform/sca",{"title":1178,"_path":1179,"layout":12},"Pricing","/pricing",{"title":1181,"_path":1182,"layout":12},"Product Demo","/product-demo",{"title":1184,"_path":1185,"children":1186},"Resources","/resources",[1187,1191,1194,1197],{"title":1188,"_path":1189,"layout":1190},"7 Best AI Code Review Tools for 2026 — Compared & Benchmarked","/resources/ai-code-review-tools","resource",{"title":1192,"_path":1193,"layout":1190},"7 Best Snyk Alternatives for 2026 — Compared on Accuracy, Scope & Setup","/resources/snyk-alternatives",{"title":1195,"_path":1196,"layout":1190},"8 Best SonarQube Alternatives for 2026 — Compared & Reviewed","/resources/sonarqube-alternatives",{"title":1198,"_path":1199,"layout":1190},"9 Best Static Analysis (SAST) Tools for 2026 — Compared & Reviewed","/resources/static-analysis-tools",{"title":1201,"_path":1202,"children":1203},"Schedule","/schedule",[1204],{"title":1205,"_path":1206,"layout":1207},"Discovery Call","/schedule/discovery","empty",{"title":1209,"_path":1210,"layout":12},"Semgrep Alternative — DeepSource vs Semgrep Compared (2026)","/semgrep-alternatives",{"title":1212,"_path":1213,"layout":12},"Snyk Alternative (2026) — DeepSource vs Snyk Compared","/snyk-alternatives",{"title":1215,"_path":1216,"layout":12},"SonarQube Alternatives (2026) — DeepSource vs SonarQube Compared","/sonarqube-alternatives",{"title":1218,"_path":1219,"layout":12},"Veracode Alternative (2026) — DeepSource vs Veracode","/veracode-alternatives",{"defaultLocale":1221,"description":1222,"env":1223,"name":1224,"url":1225},"en","DeepSource is the AI Code Review Platform. Hybrid static + AI analysis with 82% accuracy on real vulnerabilities. Ship clean, secure code.","production","DeepSource","https://deepsource.com",["Set"],["ShallowReactive",1228],{},true,1779310217777]</script>
<script>window.__NUXT__={};window.__NUXT__.config={public:{contactSalesHook:"https://deepsourcecorp.retool.com/url/contact-sales",scaWaitlistHook:"https://deepsourcecorp.retool.com/url/sca-waitlist",doverOrgId:"02322923-27a3-439d-aadc-865046d47d15",googleAnalytics:{measurementId:"G-3HN42Q8F1X"},posthog:{publicKey:"phc_g1ntZTHgiEb7jHrLFyjj5l7lF1OrrtALy8yR9Zt36ib",host:"https://e.deepsource.com",uiHost:"https://us.posthog.com"},adTracking:{twitter:{pixelId:"o2ojj"},linkedin:{partnerId:"4017580"},reddit:{pixelId:"t2_hd2bcq7"}},mdc:{components:{prose:true,map:{p:"prose-p",a:"prose-a",blockquote:"prose-blockquote","code-inline":"prose-code-inline",code:"ProseCodeInline",em:"prose-em",h1:"prose-h1",h2:"prose-h2",h3:"prose-h3",h4:"prose-h4",h5:"prose-h5",h6:"prose-h6",hr:"prose-hr",img:"prose-img",ul:"prose-ul",ol:"prose-ol",li:"prose-li",strong:"prose-strong",table:"prose-table",thead:"prose-thead",tbody:"prose-tbody",td:"prose-td",th:"prose-th",tr:"prose-tr"}},headings:{anchorLinks:{h1:false,h2:true,h3:true,h4:true,h5:false,h6:false}}},content:{locales:[],defaultLocale:"",integrity:1779310147464,experimental:{stripQueryParameters:false,advanceQuery:false,clientDB:false},respectPathCase:false,api:{baseURL:"/api/_content"},navigation:{fields:["layout"]},tags:{p:"prose-p",a:"prose-a",blockquote:"prose-blockquote","code-inline":"prose-code-inline",code:"ProseCodeInline",em:"prose-em",h1:"prose-h1",h2:"prose-h2",h3:"prose-h3",h4:"prose-h4",h5:"prose-h5",h6:"prose-h6",hr:"prose-hr",img:"prose-img",ul:"prose-ul",ol:"prose-ol",li:"prose-li",strong:"prose-strong",table:"prose-table",thead:"prose-thead",tbody:"prose-tbody",td:"prose-td",th:"prose-th",tr:"prose-tr"},highlight:{theme:"github-light",langs:["python","java","go","log","diff","toml","yaml","c","rust","scheme","hs","sql","cpp","console","lisp","scala","php","csharp","ruby","javascript","js","jsx","shell","json","bash","sh","html","hcl","kotlin","dart","yaml","yml","dockerfile","docker"],highlighter:"shiki",shikiEngine:"oniguruma"},wsUrl:"",documentDriven:{page:true,navigation:true,surround:true,globals:{},layoutFallbacks:["theme"],injectPage:true},host:"",trailingSlash:false,search:"",contentHead:true,anchorLinks:{depth:4,exclude:[1]}},"seo-utils":{canonicalQueryWhitelist:["page","sort","filter","search","q","category","tag"]},"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}}},app:{baseURL:"/",buildId:"3270ab90-8cbc-4852-b834-6c21a2a7b668",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"448a7a27e8d64b1689b01f7f28a1bfce"}' crossorigin="anonymous"></script>
</body></html>