/* Self-hosted variable fonts — never call a font CDN (the app runs local-only).
 * Display = Space Grotesk (titles, KPI numerals); UI = Geist; Mono = JetBrains
 * Mono (scores, IDs, hashes, token counts). Must precede the @tailwind layers. */
/* geist-cyrillic-wght-normal */
@font-face {
  font-family: 'Geist Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2) format('woff2-variations');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
/* geist-latin-ext-wght-normal */
@font-face {
  font-family: 'Geist Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2) format('woff2-variations');
  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;
}
/* geist-latin-wght-normal */
@font-face {
  font-family: 'Geist Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/geist-latin-wght-normal-Dm3htQBi.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,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;
}
/* space-grotesk-vietnamese-wght-normal */
@font-face {
  font-family: 'Space Grotesk Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 300 700;
  src: url(/assets/space-grotesk-vietnamese-wght-normal-D0rl6rjA.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}
/* space-grotesk-latin-ext-wght-normal */
@font-face {
  font-family: 'Space Grotesk Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 300 700;
  src: url(/assets/space-grotesk-latin-ext-wght-normal-D9tNdqV9.woff2) format('woff2-variations');
  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;
}
/* space-grotesk-latin-wght-normal */
@font-face {
  font-family: 'Space Grotesk Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 300 700;
  src: url(/assets/space-grotesk-latin-wght-normal-BhU9QXUp.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,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;
}
/* jetbrains-mono-cyrillic-ext-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA) format('woff2-variations');
  unicode-range: U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;
}
/* jetbrains-mono-cyrillic-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2) format('woff2-variations');
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
/* jetbrains-mono-greek-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2) format('woff2-variations');
  unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;
}
/* jetbrains-mono-vietnamese-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}
/* jetbrains-mono-latin-ext-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2) format('woff2-variations');
  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;
}
/* jetbrains-mono-latin-wght-normal */
@font-face {
  font-family: 'JetBrains Mono Variable';
  font-style: normal;
  font-display: swap;
  font-weight: 100 800;
  src: url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,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;
}
/* Fraunces (italic) — used ONLY for the Velocity logo wordmark. */
/* fraunces-vietnamese-standard-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-vietnamese-standard-italic-DxWqP7Ku.woff2) format('woff2-variations');
  unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;
}
/* fraunces-latin-ext-standard-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-ext-standard-italic-CGbN9UgK.woff2) format('woff2-variations');
  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;
}
/* fraunces-latin-standard-italic */
@font-face {
  font-family: 'Fraunces Variable';
  font-style: italic;
  font-display: swap;
  font-weight: 100 900;
  src: url(/assets/fraunces-latin-standard-italic-lSdLDfvT.woff2) format('woff2-variations');
  unicode-range: U+0000-00FF,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;
}
*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-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: rgb(59 130 246 / 0.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: rgb(59 130 246 / 0.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.19 | MIT License | https://tailwindcss.com */
/*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/
*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #e5e7eb; /* 2 */
}
::before,
::after {
  --tw-content: '';
}
/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/
html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  -o-tab-size: 4;
     tab-size: 4; /* 3 */
  font-family: var(--font-sans); /* 4 */
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}
/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/
body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}
/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/
hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}
/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/
abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}
/*
Remove the default font size and weight for headings.
*/
h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}
/*
Reset links to optimize for opt-in styling instead of opt-out.
*/
a {
  color: inherit;
  text-decoration: inherit;
}
/*
Add the correct font weight in Edge and Safari.
*/
b,
strong {
  font-weight: bolder;
}
/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp,
pre {
  font-family: var(--font-mono); /* 1 */
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}
/*
Add the correct font size in all browsers.
*/
small {
  font-size: 80%;
}
/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}
/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/
table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}
/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/
button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}
/*
Remove the inheritance of text transform in Edge and Firefox.
*/
button,
select {
  text-transform: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/
button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}
/*
Use the modern Firefox focus style for all focusable elements.
*/
:-moz-focusring {
  outline: auto;
}
/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/
:-moz-ui-invalid {
  box-shadow: none;
}
/*
Add the correct vertical alignment in Chrome and Firefox.
*/
progress {
  vertical-align: baseline;
}
/*
Correct the cursor style of increment and decrement buttons in Safari.
*/
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}
/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}
/*
Remove the inner padding in Chrome and Safari on macOS.
*/
::-webkit-search-decoration {
  -webkit-appearance: none;
}
/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}
/*
Add the correct display in Chrome and Safari.
*/
summary {
  display: list-item;
}
/*
Removes the default spacing and border for appropriate elements.
*/
blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}
fieldset {
  margin: 0;
  padding: 0;
}
legend {
  padding: 0;
}
ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}
/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}
/*
Prevent resizing textareas horizontally by default.
*/
textarea {
  resize: vertical;
}
/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/
input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}
input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}
/*
Set the default cursor for buttons.
*/
button,
[role="button"] {
  cursor: pointer;
}
/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}
/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/
img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}
/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/
img,
video {
  max-width: 100%;
  height: auto;
}
/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
:root {
    /* Typography */
    --font-display: "Space Grotesk Variable", ui-sans-serif, system-ui, sans-serif;
    --font-sans: "Geist Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
    --font-mono: "JetBrains Mono Variable", ui-monospace, "SFMono-Regular", Menlo, monospace;

    /* Surfaces & ink — cool gray-blue, never stark */
    --background: 214 24% 96%;
    --surface: 214 22% 94%;
    --foreground: 213 38% 13%;
    --card: 0 0% 100%;
    --card-foreground: 213 38% 13%;

    --primary: 213 53% 26%;          /* IEPA navy */
    --primary-foreground: 0 0% 100%;
    --secondary: 213 24% 93%;
    --secondary-foreground: 213 53% 26%;
    --muted: 214 22% 95%;
    --muted-foreground: 213 14% 44%;
    --accent: 213 28% 92%;           /* shadcn subtle-bg accent (hover states) */
    --accent-foreground: 213 53% 26%;
    --brand: 208 60% 42%;            /* structured-blue accent: links, eyebrows */
    --brand-foreground: 0 0% 100%;
    --destructive: 0 72% 48%;
    --destructive-foreground: 0 0% 100%;
    --border: 214 22% 89%;
    --border-strong: 214 20% 82%;
    --input: 214 22% 89%;
    --ring: 213 53% 36%;

    /* Radius */
    --radius: 0.5rem;                /* 8px — cards/panels */
    --radius-report: 14px;           /* softer, client-facing report surfaces */

    /* Semantic status (WCAG-AA text on its -bg) */
    --status-clear: 157 68% 27%;      --status-clear-bg: 152 44% 92%;
    --status-risk: 22 76% 39%;        --status-risk-bg: 28 82% 93%;
    --status-review: 242 52% 53%;     --status-review-bg: 244 70% 96%;
    --status-pending: 213 14% 45%;    --status-pending-bg: 214 24% 94%;
    --status-processing: 205 84% 38%; --status-processing-bg: 205 68% 94%;

    /* Lead grades (A1/A2/B1/nurture) */
    --grade-a1: 157 68% 25%;          --grade-a1-bg: 152 44% 91%;
    --grade-a2: 213 53% 30%;          --grade-a2-bg: 213 40% 93%;
    --grade-b1: 38 74% 28%;           --grade-b1-bg: 44 82% 90%;
    --grade-nurture: 213 14% 45%;     --grade-nurture-bg: 214 24% 93%;

    /* Elevation — crisp + diffuse (cool navy-tinted) */
    --elev-1: 0 1px 2px hsl(213 32% 18% / 0.06), 0 1px 1px hsl(213 32% 18% / 0.04);
    --elev-2: 0 2px 6px -1px hsl(213 32% 18% / 0.08), 0 1px 2px hsl(213 32% 18% / 0.05);
    --elev-3: 0 10px 28px -8px hsl(213 32% 18% / 0.14), 0 2px 6px -2px hsl(213 32% 18% / 0.06);
    --elev-report: 0 4px 20px -6px hsl(213 40% 28% / 0.16), 0 2px 8px -3px hsl(213 40% 28% / 0.08);

    /* App shell (sidebar) */
    --sidebar: 213 48% 15%;
    --sidebar-foreground: 210 25% 90%;
    --sidebar-accent: 213 40% 26%;
    --sidebar-muted: 213 15% 62%;
  }
body {
  background-color: hsl(var(--background));
  color: hsl(var(--foreground));
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
    font-family: var(--font-sans);
}
h1, h2, h3, h4 {
    font-family: var(--font-display);
    letter-spacing: -0.015em;
  }
.container {
  width: 100%;
  margin-right: auto;
  margin-left: auto;
  padding-right: 2rem;
  padding-left: 2rem;
}
@media (min-width: 1400px) {
  .container {
    max-width: 1400px;
  }
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}
.pointer-events-none {
  pointer-events: none;
}
.visible {
  visibility: visible;
}
.invisible {
  visibility: hidden;
}
.collapse {
  visibility: collapse;
}
.static {
  position: static;
}
.fixed {
  position: fixed;
}
.absolute {
  position: absolute;
}
.relative {
  position: relative;
}
.sticky {
  position: sticky;
}
.inset-0 {
  inset: 0px;
}
.inset-y-0 {
  top: 0px;
  bottom: 0px;
}
.-bottom-1 {
  bottom: -0.25rem;
}
.-left-\[7px\] {
  left: -7px;
}
.bottom-0 {
  bottom: 0px;
}
.bottom-5 {
  bottom: 1.25rem;
}
.left-0 {
  left: 0px;
}
.left-2 {
  left: 0.5rem;
}
.left-2\.5 {
  left: 0.625rem;
}
.left-3 {
  left: 0.75rem;
}
.right-0 {
  right: 0px;
}
.right-5 {
  right: 1.25rem;
}
.top-0 {
  top: 0px;
}
.top-1\.5 {
  top: 0.375rem;
}
.top-1\/2 {
  top: 50%;
}
.top-3 {
  top: 0.75rem;
}
.z-10 {
  z-index: 10;
}
.z-40 {
  z-index: 40;
}
.z-50 {
  z-index: 50;
}
.z-\[60\] {
  z-index: 60;
}
.col-span-2 {
  grid-column: span 2 / span 2;
}
.-mx-2 {
  margin-left: -0.5rem;
  margin-right: -0.5rem;
}
.-mx-3 {
  margin-left: -0.75rem;
  margin-right: -0.75rem;
}
.mx-4 {
  margin-left: 1rem;
  margin-right: 1rem;
}
.mx-auto {
  margin-left: auto;
  margin-right: auto;
}
.my-4 {
  margin-top: 1rem;
  margin-bottom: 1rem;
}
.mb-1 {
  margin-bottom: 0.25rem;
}
.mb-1\.5 {
  margin-bottom: 0.375rem;
}
.mb-2 {
  margin-bottom: 0.5rem;
}
.mb-3 {
  margin-bottom: 0.75rem;
}
.mb-4 {
  margin-bottom: 1rem;
}
.mb-6 {
  margin-bottom: 1.5rem;
}
.mb-8 {
  margin-bottom: 2rem;
}
.ml-1 {
  margin-left: 0.25rem;
}
.ml-1\.5 {
  margin-left: 0.375rem;
}
.ml-2 {
  margin-left: 0.5rem;
}
.ml-3 {
  margin-left: 0.75rem;
}
.ml-4 {
  margin-left: 1rem;
}
.ml-auto {
  margin-left: auto;
}
.mr-1 {
  margin-right: 0.25rem;
}
.mr-1\.5 {
  margin-right: 0.375rem;
}
.mr-2 {
  margin-right: 0.5rem;
}
.mr-auto {
  margin-right: auto;
}
.mt-0\.5 {
  margin-top: 0.125rem;
}
.mt-1 {
  margin-top: 0.25rem;
}
.mt-1\.5 {
  margin-top: 0.375rem;
}
.mt-10 {
  margin-top: 2.5rem;
}
.mt-12 {
  margin-top: 3rem;
}
.mt-16 {
  margin-top: 4rem;
}
.mt-2 {
  margin-top: 0.5rem;
}
.mt-3 {
  margin-top: 0.75rem;
}
.mt-4 {
  margin-top: 1rem;
}
.mt-6 {
  margin-top: 1.5rem;
}
.mt-8 {
  margin-top: 2rem;
}
.mt-auto {
  margin-top: auto;
}
.mt-px {
  margin-top: 1px;
}
.line-clamp-4 {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 4;
}
.block {
  display: block;
}
.inline-block {
  display: inline-block;
}
.inline {
  display: inline;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.table {
  display: table;
}
.grid {
  display: grid;
}
.contents {
  display: contents;
}
.hidden {
  display: none;
}
.h-1\.5 {
  height: 0.375rem;
}
.h-10 {
  height: 2.5rem;
}
.h-11 {
  height: 2.75rem;
}
.h-12 {
  height: 3rem;
}
.h-14 {
  height: 3.5rem;
}
.h-16 {
  height: 4rem;
}
.h-2 {
  height: 0.5rem;
}
.h-2\.5 {
  height: 0.625rem;
}
.h-20 {
  height: 5rem;
}
.h-24 {
  height: 6rem;
}
.h-3 {
  height: 0.75rem;
}
.h-3\.5 {
  height: 0.875rem;
}
.h-32 {
  height: 8rem;
}
.h-4 {
  height: 1rem;
}
.h-40 {
  height: 10rem;
}
.h-48 {
  height: 12rem;
}
.h-5 {
  height: 1.25rem;
}
.h-6 {
  height: 1.5rem;
}
.h-64 {
  height: 16rem;
}
.h-7 {
  height: 1.75rem;
}
.h-8 {
  height: 2rem;
}
.h-9 {
  height: 2.25rem;
}
.h-96 {
  height: 24rem;
}
.h-\[1px\] {
  height: 1px;
}
.h-\[calc\(100vh-8rem\)\] {
  height: calc(100vh - 8rem);
}
.h-auto {
  height: auto;
}
.h-full {
  height: 100%;
}
.max-h-32 {
  max-height: 8rem;
}
.max-h-64 {
  max-height: 16rem;
}
.max-h-72 {
  max-height: 18rem;
}
.max-h-80 {
  max-height: 20rem;
}
.max-h-96 {
  max-height: 24rem;
}
.max-h-\[500px\] {
  max-height: 500px;
}
.max-h-\[600px\] {
  max-height: 600px;
}
.max-h-\[70vh\] {
  max-height: 70vh;
}
.max-h-\[90vh\] {
  max-height: 90vh;
}
.min-h-\[11in\] {
  min-height: 11in;
}
.min-h-\[160px\] {
  min-height: 160px;
}
.min-h-\[80px\] {
  min-height: 80px;
}
.min-h-screen {
  min-height: 100vh;
}
.w-1\.5 {
  width: 0.375rem;
}
.w-1\/2 {
  width: 50%;
}
.w-1\/3 {
  width: 33.333333%;
}
.w-10 {
  width: 2.5rem;
}
.w-10\/12 {
  width: 83.333333%;
}
.w-11\/12 {
  width: 91.666667%;
}
.w-12 {
  width: 3rem;
}
.w-16 {
  width: 4rem;
}
.w-2 {
  width: 0.5rem;
}
.w-2\.5 {
  width: 0.625rem;
}
.w-2\/3 {
  width: 66.666667%;
}
.w-20 {
  width: 5rem;
}
.w-24 {
  width: 6rem;
}
.w-28 {
  width: 7rem;
}
.w-3 {
  width: 0.75rem;
}
.w-3\.5 {
  width: 0.875rem;
}
.w-3\/4 {
  width: 75%;
}
.w-32 {
  width: 8rem;
}
.w-36 {
  width: 9rem;
}
.w-4 {
  width: 1rem;
}
.w-4\/6 {
  width: 66.666667%;
}
.w-40 {
  width: 10rem;
}
.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-60 {
  width: 15rem;
}
.w-64 {
  width: 16rem;
}
.w-72 {
  width: 18rem;
}
.w-8 {
  width: 2rem;
}
.w-9 {
  width: 2.25rem;
}
.w-9\/12 {
  width: 75%;
}
.w-\[1px\] {
  width: 1px;
}
.w-auto {
  width: auto;
}
.w-full {
  width: 100%;
}
.w-max {
  width: -moz-max-content;
  width: max-content;
}
.min-w-0 {
  min-width: 0px;
}
.min-w-40 {
  min-width: 10rem;
}
.min-w-\[10rem\] {
  min-width: 10rem;
}
.min-w-\[12rem\] {
  min-width: 12rem;
}
.min-w-\[32rem\] {
  min-width: 32rem;
}
.min-w-\[52rem\] {
  min-width: 52rem;
}
.min-w-\[8rem\] {
  min-width: 8rem;
}
.min-w-max {
  min-width: -moz-max-content;
  min-width: max-content;
}
.max-w-2xl {
  max-width: 42rem;
}
.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-\[16rem\] {
  max-width: 16rem;
}
.max-w-\[180px\] {
  max-width: 180px;
}
.max-w-\[20rem\] {
  max-width: 20rem;
}
.max-w-\[220px\] {
  max-width: 220px;
}
.max-w-\[24rem\] {
  max-width: 24rem;
}
.max-w-\[280px\] {
  max-width: 280px;
}
.max-w-\[420px\] {
  max-width: 420px;
}
.max-w-\[75\%\] {
  max-width: 75%;
}
.max-w-\[8\.5in\] {
  max-width: 8.5in;
}
.max-w-\[80\%\] {
  max-width: 80%;
}
.max-w-\[85\%\] {
  max-width: 85%;
}
.max-w-\[92\%\] {
  max-width: 92%;
}
.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-screen-2xl {
  max-width: 1536px;
}
.max-w-xs {
  max-width: 20rem;
}
.flex-1 {
  flex: 1 1 0%;
}
.flex-shrink-0 {
  flex-shrink: 0;
}
.shrink-0 {
  flex-shrink: 0;
}
.grow {
  flex-grow: 1;
}
.basis-full {
  flex-basis: 100%;
}
.border-collapse {
  border-collapse: collapse;
}
.border-separate {
  border-collapse: separate;
}
.border-spacing-x-2 {
  --tw-border-spacing-x: 0.5rem;
  border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
}
.border-spacing-y-1 {
  --tw-border-spacing-y: 0.25rem;
  border-spacing: var(--tw-border-spacing-x) var(--tw-border-spacing-y);
}
.-translate-y-1\/2 {
  --tw-translate-y: -50%;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.-rotate-90 {
  --tw-rotate: -90deg;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
@keyframes pulse {
  50% {
    opacity: .5;
  }
}
.animate-pulse {
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
.animate-spin {
  animation: spin 1s linear infinite;
}
.cursor-default {
  cursor: default;
}
.cursor-grabbing {
  cursor: grabbing;
}
.cursor-not-allowed {
  cursor: not-allowed;
}
.cursor-pointer {
  cursor: pointer;
}
.select-none {
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}
.resize-none {
  resize: none;
}
.list-inside {
  list-style-position: inside;
}
.list-decimal {
  list-style-type: decimal;
}
.list-disc {
  list-style-type: disc;
}
.grid-cols-1 {
  grid-template-columns: repeat(1, 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-6 {
  grid-template-columns: repeat(6, minmax(0, 1fr));
}
.grid-cols-\[180px_140px_auto\] {
  grid-template-columns: 180px 140px auto;
}
.grid-cols-\[1fr_auto\] {
  grid-template-columns: 1fr auto;
}
.flex-row {
  flex-direction: row;
}
.flex-col {
  flex-direction: column;
}
.flex-wrap {
  flex-wrap: wrap;
}
.place-items-center {
  place-items: center;
}
.items-start {
  align-items: flex-start;
}
.items-end {
  align-items: flex-end;
}
.items-center {
  align-items: center;
}
.items-baseline {
  align-items: baseline;
}
.justify-end {
  justify-content: flex-end;
}
.justify-center {
  justify-content: center;
}
.justify-between {
  justify-content: space-between;
}
.gap-1 {
  gap: 0.25rem;
}
.gap-1\.5 {
  gap: 0.375rem;
}
.gap-2 {
  gap: 0.5rem;
}
.gap-3 {
  gap: 0.75rem;
}
.gap-4 {
  gap: 1rem;
}
.gap-5 {
  gap: 1.25rem;
}
.gap-6 {
  gap: 1.5rem;
}
.gap-8 {
  gap: 2rem;
}
.gap-x-6 {
  -moz-column-gap: 1.5rem;
       column-gap: 1.5rem;
}
.gap-y-2 {
  row-gap: 0.5rem;
}
.space-x-1 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.25rem * var(--tw-space-x-reverse));
  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-x-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-x-reverse: 0;
  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
}
.space-y-0 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0px * var(--tw-space-y-reverse));
}
.space-y-0\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.125rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.125rem * var(--tw-space-y-reverse));
}
.space-y-1 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
}
.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
}
.space-y-10 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(2.5rem * var(--tw-space-y-reverse));
}
.space-y-2 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
}
.space-y-3 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
}
.space-y-4 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
}
.space-y-5 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.25rem * var(--tw-space-y-reverse));
}
.space-y-6 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
}
.space-y-8 > :not([hidden]) ~ :not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(2rem * var(--tw-space-y-reverse));
}
.divide-y > :not([hidden]) ~ :not([hidden]) {
  --tw-divide-y-reverse: 0;
  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));
}
.divide-border > :not([hidden]) ~ :not([hidden]) {
  border-color: hsl(var(--border));
}
.self-center {
  align-self: center;
}
.overflow-auto {
  overflow: auto;
}
.overflow-hidden {
  overflow: hidden;
}
.overflow-x-auto {
  overflow-x: auto;
}
.overflow-y-auto {
  overflow-y: auto;
}
.truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.whitespace-nowrap {
  white-space: nowrap;
}
.whitespace-pre-line {
  white-space: pre-line;
}
.whitespace-pre-wrap {
  white-space: pre-wrap;
}
.break-words {
  overflow-wrap: break-word;
}
.break-all {
  word-break: break-all;
}
.rounded {
  border-radius: 0.25rem;
}
.rounded-2xl {
  border-radius: 1rem;
}
.rounded-full {
  border-radius: 9999px;
}
.rounded-lg {
  border-radius: var(--radius);
}
.rounded-md {
  border-radius: calc(var(--radius) - 2px);
}
.rounded-report {
  border-radius: var(--radius-report);
}
.rounded-sm {
  border-radius: calc(var(--radius) - 4px);
}
.rounded-xl {
  border-radius: 0.75rem;
}
.rounded-r {
  border-top-right-radius: 0.25rem;
  border-bottom-right-radius: 0.25rem;
}
.rounded-t-md {
  border-top-left-radius: calc(var(--radius) - 2px);
  border-top-right-radius: calc(var(--radius) - 2px);
}
.rounded-tl-sm {
  border-top-left-radius: calc(var(--radius) - 4px);
}
.rounded-tr-sm {
  border-top-right-radius: calc(var(--radius) - 4px);
}
.border {
  border-width: 1px;
}
.border-2 {
  border-width: 2px;
}
.border-b {
  border-bottom-width: 1px;
}
.border-l {
  border-left-width: 1px;
}
.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-amber-200 {
  --tw-border-opacity: 1;
  border-color: rgb(253 230 138 / var(--tw-border-opacity, 1));
}
.border-amber-300 {
  --tw-border-opacity: 1;
  border-color: rgb(252 211 77 / var(--tw-border-opacity, 1));
}
.border-background {
  border-color: hsl(var(--background));
}
.border-blue-200 {
  --tw-border-opacity: 1;
  border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
}
.border-blue-700 {
  --tw-border-opacity: 1;
  border-color: rgb(29 78 216 / var(--tw-border-opacity, 1));
}
.border-border {
  border-color: hsl(var(--border));
}
.border-border-strong {
  border-color: hsl(var(--border-strong));
}
.border-border\/60 {
  border-color: hsl(var(--border) / 0.6);
}
.border-brand {
  border-color: hsl(var(--brand));
}
.border-brand\/40 {
  border-color: hsl(var(--brand) / 0.4);
}
.border-destructive {
  border-color: hsl(var(--destructive));
}
.border-destructive\/30 {
  border-color: hsl(var(--destructive) / 0.3);
}
.border-destructive\/40 {
  border-color: hsl(var(--destructive) / 0.4);
}
.border-destructive\/50 {
  border-color: hsl(var(--destructive) / 0.5);
}
.border-destructive\/60 {
  border-color: hsl(var(--destructive) / 0.6);
}
.border-emerald-300 {
  --tw-border-opacity: 1;
  border-color: rgb(110 231 183 / var(--tw-border-opacity, 1));
}
.border-input {
  border-color: hsl(var(--input));
}
.border-muted {
  border-color: hsl(var(--muted));
}
.border-muted-foreground\/25 {
  border-color: hsl(var(--muted-foreground) / 0.25);
}
.border-muted-foreground\/40 {
  border-color: hsl(var(--muted-foreground) / 0.4);
}
.border-muted-foreground\/50 {
  border-color: hsl(var(--muted-foreground) / 0.5);
}
.border-orange-200 {
  --tw-border-opacity: 1;
  border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));
}
.border-primary {
  border-color: hsl(var(--primary));
}
.border-primary\/25 {
  border-color: hsl(var(--primary) / 0.25);
}
.border-primary\/30 {
  border-color: hsl(var(--primary) / 0.3);
}
.border-primary\/40 {
  border-color: hsl(var(--primary) / 0.4);
}
.border-red-200 {
  --tw-border-opacity: 1;
  border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));
}
.border-red-300 {
  --tw-border-opacity: 1;
  border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));
}
.border-sidebar-accent\/40 {
  border-color: hsl(var(--sidebar-accent) / 0.4);
}
.border-sidebar-accent\/60 {
  border-color: hsl(var(--sidebar-accent) / 0.6);
}
.border-status-clear\/30 {
  border-color: hsl(var(--status-clear) / 0.3);
}
.border-status-clear\/40 {
  border-color: hsl(var(--status-clear) / 0.4);
}
.border-status-pending\/30 {
  border-color: hsl(var(--status-pending) / 0.3);
}
.border-status-processing\/30 {
  border-color: hsl(var(--status-processing) / 0.3);
}
.border-status-review {
  border-color: hsl(var(--status-review));
}
.border-status-review\/30 {
  border-color: hsl(var(--status-review) / 0.3);
}
.border-status-risk {
  border-color: hsl(var(--status-risk));
}
.border-status-risk\/30 {
  border-color: hsl(var(--status-risk) / 0.3);
}
.border-status-risk\/40 {
  border-color: hsl(var(--status-risk) / 0.4);
}
.border-status-risk\/60 {
  border-color: hsl(var(--status-risk) / 0.6);
}
.border-transparent {
  border-color: transparent;
}
.border-white\/20 {
  border-color: rgb(255 255 255 / 0.2);
}
.border-white\/30 {
  border-color: rgb(255 255 255 / 0.3);
}
.bg-accent {
  background-color: hsl(var(--accent));
}
.bg-amber-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(254 243 199 / var(--tw-bg-opacity, 1));
}
.bg-amber-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(255 251 235 / var(--tw-bg-opacity, 1));
}
.bg-amber-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(245 158 11 / var(--tw-bg-opacity, 1));
}
.bg-background {
  background-color: hsl(var(--background));
}
.bg-background\/95 {
  background-color: hsl(var(--background) / 0.95);
}
.bg-black\/30 {
  background-color: rgb(0 0 0 / 0.3);
}
.bg-black\/50 {
  background-color: rgb(0 0 0 / 0.5);
}
.bg-blue-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
}
.bg-border {
  background-color: hsl(var(--border));
}
.bg-border-strong {
  background-color: hsl(var(--border-strong));
}
.bg-brand {
  background-color: hsl(var(--brand));
}
.bg-brand\/10 {
  background-color: hsl(var(--brand) / 0.1);
}
.bg-brand\/5 {
  background-color: hsl(var(--brand) / 0.05);
}
.bg-card {
  background-color: hsl(var(--card));
}
.bg-destructive {
  background-color: hsl(var(--destructive));
}
.bg-destructive\/10 {
  background-color: hsl(var(--destructive) / 0.1);
}
.bg-destructive\/15 {
  background-color: hsl(var(--destructive) / 0.15);
}
.bg-destructive\/5 {
  background-color: hsl(var(--destructive) / 0.05);
}
.bg-emerald-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(209 250 229 / var(--tw-bg-opacity, 1));
}
.bg-emerald-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(236 253 245 / var(--tw-bg-opacity, 1));
}
.bg-emerald-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(16 185 129 / var(--tw-bg-opacity, 1));
}
.bg-foreground\/40 {
  background-color: hsl(var(--foreground) / 0.4);
}
.bg-grade-a1-bg {
  background-color: hsl(var(--grade-a1-bg));
}
.bg-grade-a2-bg {
  background-color: hsl(var(--grade-a2-bg));
}
.bg-grade-b1-bg {
  background-color: hsl(var(--grade-b1-bg));
}
.bg-grade-nurture-bg {
  background-color: hsl(var(--grade-nurture-bg));
}
.bg-muted {
  background-color: hsl(var(--muted));
}
.bg-muted-foreground\/50 {
  background-color: hsl(var(--muted-foreground) / 0.5);
}
.bg-muted\/20 {
  background-color: hsl(var(--muted) / 0.2);
}
.bg-muted\/30 {
  background-color: hsl(var(--muted) / 0.3);
}
.bg-muted\/40 {
  background-color: hsl(var(--muted) / 0.4);
}
.bg-muted\/50 {
  background-color: hsl(var(--muted) / 0.5);
}
.bg-muted\/60 {
  background-color: hsl(var(--muted) / 0.6);
}
.bg-orange-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));
}
.bg-primary {
  background-color: hsl(var(--primary));
}
.bg-primary\/10 {
  background-color: hsl(var(--primary) / 0.1);
}
.bg-primary\/5 {
  background-color: hsl(var(--primary) / 0.05);
}
.bg-red-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
}
.bg-red-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
}
.bg-red-500 {
  --tw-bg-opacity: 1;
  background-color: rgb(239 68 68 / var(--tw-bg-opacity, 1));
}
.bg-secondary {
  background-color: hsl(var(--secondary));
}
.bg-sidebar {
  background-color: hsl(var(--sidebar));
}
.bg-sidebar-accent {
  background-color: hsl(var(--sidebar-accent));
}
.bg-sidebar-accent\/30 {
  background-color: hsl(var(--sidebar-accent) / 0.3);
}
.bg-sidebar-accent\/40 {
  background-color: hsl(var(--sidebar-accent) / 0.4);
}
.bg-sidebar-accent\/60 {
  background-color: hsl(var(--sidebar-accent) / 0.6);
}
.bg-sky-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(224 242 254 / var(--tw-bg-opacity, 1));
}
.bg-slate-100 {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249 / var(--tw-bg-opacity, 1));
}
.bg-slate-50 {
  --tw-bg-opacity: 1;
  background-color: rgb(248 250 252 / var(--tw-bg-opacity, 1));
}
.bg-status-clear {
  background-color: hsl(var(--status-clear));
}
.bg-status-clear-bg {
  background-color: hsl(var(--status-clear-bg));
}
.bg-status-clear\/5 {
  background-color: hsl(var(--status-clear) / 0.05);
}
.bg-status-pending-bg {
  background-color: hsl(var(--status-pending-bg));
}
.bg-status-processing-bg {
  background-color: hsl(var(--status-processing-bg));
}
.bg-status-review {
  background-color: hsl(var(--status-review));
}
.bg-status-review-bg {
  background-color: hsl(var(--status-review-bg));
}
.bg-status-review-bg\/50 {
  background-color: hsl(var(--status-review-bg) / 0.5);
}
.bg-status-review-bg\/60 {
  background-color: hsl(var(--status-review-bg) / 0.6);
}
.bg-status-risk {
  background-color: hsl(var(--status-risk));
}
.bg-status-risk-bg {
  background-color: hsl(var(--status-risk-bg));
}
.bg-status-risk\/5 {
  background-color: hsl(var(--status-risk) / 0.05);
}
.bg-surface {
  background-color: hsl(var(--surface));
}
.bg-transparent {
  background-color: transparent;
}
.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
}
.bg-white\/10 {
  background-color: rgb(255 255 255 / 0.1);
}
.bg-white\/15 {
  background-color: rgb(255 255 255 / 0.15);
}
.bg-white\/95 {
  background-color: rgb(255 255 255 / 0.95);
}
.bg-white\/\[0\.06\] {
  background-color: rgb(255 255 255 / 0.06);
}
.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));
}
.from-card {
  --tw-gradient-from: hsl(var(--card)) var(--tw-gradient-from-position);
  --tw-gradient-to: hsl(var(--card) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}
.from-muted {
  --tw-gradient-from: hsl(var(--muted)) var(--tw-gradient-from-position);
  --tw-gradient-to: hsl(var(--muted) / 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
}
.to-secondary {
  --tw-gradient-to: hsl(var(--secondary)) 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);
}
.fill-current {
  fill: currentColor;
}
.p-0 {
  padding: 0px;
}
.p-0\.5 {
  padding: 0.125rem;
}
.p-1 {
  padding: 0.25rem;
}
.p-1\.5 {
  padding: 0.375rem;
}
.p-10 {
  padding: 2.5rem;
}
.p-12 {
  padding: 3rem;
}
.p-2 {
  padding: 0.5rem;
}
.p-2\.5 {
  padding: 0.625rem;
}
.p-3 {
  padding: 0.75rem;
}
.p-4 {
  padding: 1rem;
}
.p-5 {
  padding: 1.25rem;
}
.p-6 {
  padding: 1.5rem;
}
.p-8 {
  padding: 2rem;
}
.px-0 {
  padding-left: 0px;
  padding-right: 0px;
}
.px-1 {
  padding-left: 0.25rem;
  padding-right: 0.25rem;
}
.px-1\.5 {
  padding-left: 0.375rem;
  padding-right: 0.375rem;
}
.px-2 {
  padding-left: 0.5rem;
  padding-right: 0.5rem;
}
.px-2\.5 {
  padding-left: 0.625rem;
  padding-right: 0.625rem;
}
.px-3 {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.px-3\.5 {
  padding-left: 0.875rem;
  padding-right: 0.875rem;
}
.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-top: 0.125rem;
  padding-bottom: 0.125rem;
}
.py-1 {
  padding-top: 0.25rem;
  padding-bottom: 0.25rem;
}
.py-1\.5 {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem;
}
.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}
.py-14 {
  padding-top: 3.5rem;
  padding-bottom: 3.5rem;
}
.py-2 {
  padding-top: 0.5rem;
  padding-bottom: 0.5rem;
}
.py-2\.5 {
  padding-top: 0.625rem;
  padding-bottom: 0.625rem;
}
.py-3 {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
}
.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem;
}
.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem;
}
.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem;
}
.pb-12 {
  padding-bottom: 3rem;
}
.pb-2 {
  padding-bottom: 0.5rem;
}
.pb-24 {
  padding-bottom: 6rem;
}
.pb-3 {
  padding-bottom: 0.75rem;
}
.pb-5 {
  padding-bottom: 1.25rem;
}
.pb-6 {
  padding-bottom: 1.5rem;
}
.pl-1\.5 {
  padding-left: 0.375rem;
}
.pl-11 {
  padding-left: 2.75rem;
}
.pl-2 {
  padding-left: 0.5rem;
}
.pl-3 {
  padding-left: 0.75rem;
}
.pl-4 {
  padding-left: 1rem;
}
.pl-5 {
  padding-left: 1.25rem;
}
.pl-6 {
  padding-left: 1.5rem;
}
.pl-7 {
  padding-left: 1.75rem;
}
.pl-8 {
  padding-left: 2rem;
}
.pl-9 {
  padding-left: 2.25rem;
}
.pr-2 {
  padding-right: 0.5rem;
}
.pr-3 {
  padding-right: 0.75rem;
}
.pt-0 {
  padding-top: 0px;
}
.pt-1 {
  padding-top: 0.25rem;
}
.pt-2 {
  padding-top: 0.5rem;
}
.pt-3 {
  padding-top: 0.75rem;
}
.pt-4 {
  padding-top: 1rem;
}
.pt-6 {
  padding-top: 1.5rem;
}
.pt-\[15vh\] {
  padding-top: 15vh;
}
.text-left {
  text-align: left;
}
.text-center {
  text-align: center;
}
.text-right {
  text-align: right;
}
.text-justify {
  text-align: justify;
}
.align-top {
  vertical-align: top;
}
.font-display {
  font-family: var(--font-display);
}
.font-mono {
  font-family: var(--font-mono);
}
.font-sans {
  font-family: var(--font-sans);
}
.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-\[0\.85em\] {
  font-size: 0.85em;
}
.text-\[10px\] {
  font-size: 10px;
}
.text-\[11px\] {
  font-size: 11px;
}
.text-\[8pt\] {
  font-size: 8pt;
}
.text-\[9pt\] {
  font-size: 9pt;
}
.text-base {
  font-size: 1rem;
  line-height: 1.5rem;
}
.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem;
}
.text-sm {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem;
}
.text-xs {
  font-size: 0.75rem;
  line-height: 1rem;
}
.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;
}
.capitalize {
  text-transform: capitalize;
}
.italic {
  font-style: italic;
}
.tabular-nums {
  --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);
}
.leading-none {
  line-height: 1;
}
.leading-relaxed {
  line-height: 1.625;
}
.leading-snug {
  line-height: 1.375;
}
.leading-tight {
  line-height: 1.25;
}
.tracking-\[0\.16em\] {
  letter-spacing: 0.16em;
}
.tracking-\[0\.18em\] {
  letter-spacing: 0.18em;
}
.tracking-tight {
  letter-spacing: -0.025em;
}
.tracking-wide {
  letter-spacing: 0.025em;
}
.tracking-wider {
  letter-spacing: 0.05em;
}
.tracking-widest {
  letter-spacing: 0.1em;
}
.text-accent-foreground {
  color: hsl(var(--accent-foreground));
}
.text-amber-300 {
  --tw-text-opacity: 1;
  color: rgb(252 211 77 / var(--tw-text-opacity, 1));
}
.text-amber-600 {
  --tw-text-opacity: 1;
  color: rgb(217 119 6 / var(--tw-text-opacity, 1));
}
.text-amber-700 {
  --tw-text-opacity: 1;
  color: rgb(180 83 9 / var(--tw-text-opacity, 1));
}
.text-amber-800 {
  --tw-text-opacity: 1;
  color: rgb(146 64 14 / var(--tw-text-opacity, 1));
}
.text-amber-900 {
  --tw-text-opacity: 1;
  color: rgb(120 53 15 / var(--tw-text-opacity, 1));
}
.text-blue-700 {
  --tw-text-opacity: 1;
  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
}
.text-blue-800 {
  --tw-text-opacity: 1;
  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
}
.text-blue-900 {
  --tw-text-opacity: 1;
  color: rgb(30 58 138 / var(--tw-text-opacity, 1));
}
.text-border {
  color: hsl(var(--border));
}
.text-brand {
  color: hsl(var(--brand));
}
.text-card-foreground {
  color: hsl(var(--card-foreground));
}
.text-destructive {
  color: hsl(var(--destructive));
}
.text-destructive-foreground {
  color: hsl(var(--destructive-foreground));
}
.text-emerald-300 {
  --tw-text-opacity: 1;
  color: rgb(110 231 183 / var(--tw-text-opacity, 1));
}
.text-emerald-700 {
  --tw-text-opacity: 1;
  color: rgb(4 120 87 / var(--tw-text-opacity, 1));
}
.text-emerald-800 {
  --tw-text-opacity: 1;
  color: rgb(6 95 70 / var(--tw-text-opacity, 1));
}
.text-foreground {
  color: hsl(var(--foreground));
}
.text-foreground\/80 {
  color: hsl(var(--foreground) / 0.8);
}
.text-foreground\/85 {
  color: hsl(var(--foreground) / 0.85);
}
.text-foreground\/90 {
  color: hsl(var(--foreground) / 0.9);
}
.text-grade-a1 {
  color: hsl(var(--grade-a1));
}
.text-grade-a2 {
  color: hsl(var(--grade-a2));
}
.text-grade-b1 {
  color: hsl(var(--grade-b1));
}
.text-grade-nurture {
  color: hsl(var(--grade-nurture));
}
.text-indigo-700 {
  --tw-text-opacity: 1;
  color: rgb(67 56 202 / var(--tw-text-opacity, 1));
}
.text-indigo-900 {
  --tw-text-opacity: 1;
  color: rgb(49 46 129 / var(--tw-text-opacity, 1));
}
.text-muted-foreground {
  color: hsl(var(--muted-foreground));
}
.text-muted-foreground\/60 {
  color: hsl(var(--muted-foreground) / 0.6);
}
.text-muted-foreground\/70 {
  color: hsl(var(--muted-foreground) / 0.7);
}
.text-muted-foreground\/80 {
  color: hsl(var(--muted-foreground) / 0.8);
}
.text-orange-800 {
  --tw-text-opacity: 1;
  color: rgb(154 52 18 / var(--tw-text-opacity, 1));
}
.text-primary {
  color: hsl(var(--primary));
}
.text-primary-foreground {
  color: hsl(var(--primary-foreground));
}
.text-red-700 {
  --tw-text-opacity: 1;
  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
}
.text-red-800 {
  --tw-text-opacity: 1;
  color: rgb(153 27 27 / var(--tw-text-opacity, 1));
}
.text-secondary-foreground {
  color: hsl(var(--secondary-foreground));
}
.text-sidebar-foreground {
  color: hsl(var(--sidebar-foreground));
}
.text-sidebar-foreground\/70 {
  color: hsl(var(--sidebar-foreground) / 0.7);
}
.text-sidebar-foreground\/75 {
  color: hsl(var(--sidebar-foreground) / 0.75);
}
.text-sidebar-foreground\/80 {
  color: hsl(var(--sidebar-foreground) / 0.8);
}
.text-sidebar-foreground\/85 {
  color: hsl(var(--sidebar-foreground) / 0.85);
}
.text-sidebar-muted {
  color: hsl(var(--sidebar-muted));
}
.text-sky-800 {
  --tw-text-opacity: 1;
  color: rgb(7 89 133 / var(--tw-text-opacity, 1));
}
.text-slate-500 {
  --tw-text-opacity: 1;
  color: rgb(100 116 139 / var(--tw-text-opacity, 1));
}
.text-slate-600 {
  --tw-text-opacity: 1;
  color: rgb(71 85 105 / var(--tw-text-opacity, 1));
}
.text-slate-700 {
  --tw-text-opacity: 1;
  color: rgb(51 65 85 / var(--tw-text-opacity, 1));
}
.text-status-clear {
  color: hsl(var(--status-clear));
}
.text-status-pending {
  color: hsl(var(--status-pending));
}
.text-status-processing {
  color: hsl(var(--status-processing));
}
.text-status-review {
  color: hsl(var(--status-review));
}
.text-status-risk {
  color: hsl(var(--status-risk));
}
.text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.text-white\/45 {
  color: rgb(255 255 255 / 0.45);
}
.text-white\/50 {
  color: rgb(255 255 255 / 0.5);
}
.text-white\/55 {
  color: rgb(255 255 255 / 0.55);
}
.text-white\/60 {
  color: rgb(255 255 255 / 0.6);
}
.text-white\/70 {
  color: rgb(255 255 255 / 0.7);
}
.text-white\/75 {
  color: rgb(255 255 255 / 0.75);
}
.text-white\/85 {
  color: rgb(255 255 255 / 0.85);
}
.underline {
  text-decoration-line: underline;
}
.decoration-dotted {
  text-decoration-style: dotted;
}
.underline-offset-2 {
  text-underline-offset: 2px;
}
.underline-offset-4 {
  text-underline-offset: 4px;
}
.accent-brand {
  accent-color: hsl(var(--brand));
}
.accent-primary {
  accent-color: hsl(var(--primary));
}
.opacity-40 {
  opacity: 0.4;
}
.opacity-50 {
  opacity: 0.5;
}
.opacity-60 {
  opacity: 0.6;
}
.opacity-70 {
  opacity: 0.7;
}
.opacity-75 {
  opacity: 0.75;
}
.shadow {
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-card {
  --tw-shadow: var(--elev-1);
  --tw-shadow-colored: var(--elev-1);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-elev-1 {
  --tw-shadow: var(--elev-1);
  --tw-shadow-colored: var(--elev-1);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-elev-2 {
  --tw-shadow: var(--elev-2);
  --tw-shadow-colored: var(--elev-2);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-elev-3 {
  --tw-shadow: var(--elev-3);
  --tw-shadow-colored: var(--elev-3);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-lg {
  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-report {
  --tw-shadow: var(--elev-report);
  --tw-shadow-colored: var(--elev-report);
  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 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 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);
}
.shadow-soft {
  --tw-shadow: 0 1px 2px 0 rgb(15 23 42 / 0.04), 0 1px 3px 0 rgb(15 23 42 / 0.06);
  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color), 0 1px 3px 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);
}
.shadow-xl {
  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.shadow-card {
  --tw-shadow-color: hsl(var(--card));
  --tw-shadow: var(--tw-shadow-colored);
}
.outline {
  outline-style: solid;
}
.ring {
  --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(3px + 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-1 {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.ring-2 {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.ring-primary {
  --tw-ring-color: hsl(var(--primary));
}
.ring-primary\/30 {
  --tw-ring-color: hsl(var(--primary) / 0.3);
}
.ring-primary\/50 {
  --tw-ring-color: hsl(var(--primary) / 0.5);
}
.ring-offset-background {
  --tw-ring-offset-color: hsl(var(--background));
}
.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);
}
.backdrop-blur {
  --tw-backdrop-blur: blur(8px);
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
}
.backdrop-blur-sm {
  --tw-backdrop-blur: blur(4px);
  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 {
  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-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-\[box-shadow\2c border-color\2c transform\] {
  transition-property: box-shadow,border-color,transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-colors {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-opacity {
  transition-property: opacity;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.transition-transform {
  transition-property: transform;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}
.duration-200 {
  transition-duration: 200ms;
}
.duration-700 {
  transition-duration: 700ms;
}
.ease-out {
  transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
}
/* ── Design tokens ("Precision Navy") ──────────────────────────────────────
 * Colors are stored as HSL components (shadcn convention) and referenced as
 * `hsl(var(--token))` in tailwind.config. Elevation/shadow tokens are full
 * CSS strings referenced verbatim. One coherent system: cool navy-anchored
 * neutrals, a structured-blue accent, a semantic status + lead-grade palette,
 * a layered elevation scale (+ a softer `report` variant for client-facing
 * diagnostic surfaces — Direction B's warmth grafted in). */
/* Screen-only baseline: hide nodes that should ONLY appear in print. */
.print-only {
  display: none;
}
/* Native <option> elements ignore most CSS but Chrome/Edge respect
 * background-color + color set directly on the element. Without this,
 * users with OS-level dark-mode preferences see white-on-white in the
 * dropdown popup when the page itself is light-themed. */
option {
  background-color: white;
  color: hsl(213 40% 14%);
}
option:disabled {
  color: hsl(213 16% 42%);
}
/* ── Velocity logo (sidebar) ────────────────────────────────────────────────
 * The metallic Velocity lockup (wordmark + "Full Exit Planning Suite"), cut to
 * transparency, sits on the navy rail. A soft highlight sweeps across it every
 * few seconds — masked to the wordmark's own shape so the glint only rides the
 * metal, never the transparent gaps. Honors prefers-reduced-motion. */
.velocity-logo {
  position: relative;
  display: inline-block;
  line-height: 0;
}
.velocity-logo-shine {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(
    105deg,
    transparent 42%,
    rgba(255, 255, 255, 0.85) 50%,
    transparent 58%
  );
  background-size: 250% 100%;
  background-position: 200% 0;
  /* Clip the shine to the wordmark's alpha so it glints only on the letters. */
  -webkit-mask-image: url(/velocity-wordmark.webp);
  mask-image: url(/velocity-wordmark.webp);
  -webkit-mask-size: 100% 100%;
  mask-size: 100% 100%;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  mix-blend-mode: screen;
  animation: velocity-shine 5.5s ease-in-out infinite;
}
@keyframes velocity-shine {
  /* Sweep across quickly, then rest off-screen for the remainder of the cycle. */
  0% {
    background-position: 200% 0;
  }
  35% {
    background-position: -60% 0;
  }
  100% {
    background-position: -60% 0;
  }
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .velocity-logo-shine {
    display: none;
  }
}
/* ── Home intent tiles ─────────────────────────────────────────────
 * One staggered reveal on load (animation-delay set per tile in LandingPage)
 * rather than scattered micro-interactions: the grid resolves top-left to
 * bottom-right so the eye lands on the primary tile first. Disabled entirely
 * under prefers-reduced-motion — the tiles are simply there. */
@keyframes home-tile-in {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.home-tile {
  animation: home-tile-in 340ms cubic-bezier(0.22, 1, 0.36, 1) both;
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .home-tile {
    animation: none;
  }
}
/* ── Home masthead ─────────────────────────────────────────────────────────
 * The greeting band is the ONE full-navy surface in the content column, and it
 * deliberately draws its ink from the sidebar (--sidebar 213 48% 15%) rather
 * than from --primary, so the shell reads as a single product instead of a
 * navy rail beside a white page. The overlay grid is masked out toward the
 * bottom-right so it never competes with the status chips sitting on it. */
.home-masthead {
  position: relative;
  overflow: hidden;
  background:
    radial-gradient(120% 150% at 85% -40%, hsl(208 66% 46% / 0.5) 0%, transparent 60%),
    linear-gradient(135deg, hsl(213 48% 14%) 0%, hsl(213 52% 25%) 100%);
}
.home-masthead::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(hsl(0 0% 100% / 0.05) 1px, transparent 1px),
    linear-gradient(90deg, hsl(0 0% 100% / 0.05) 1px, transparent 1px);
  background-size: 34px 34px;
  -webkit-mask-image: linear-gradient(155deg, #000 0%, transparent 70%);
  mask-image: linear-gradient(155deg, #000 0%, transparent 70%);
}
/* ── Home tile rail ────────────────────────────────────────────────────────
 * Replaces the 2px navy TOP border the hero cards wore since the first build.
 * That border was identical on every card and identical to the pre-intent-tile
 * page, which is why the redesign read as unchanged at a glance. A left rail
 * that grows to full height on hover gives the grid a reading direction and
 * makes the hover target unmistakable without touching the palette. */
.home-tile {
  position: relative;
  overflow: hidden;
}
.home-tile::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: hsl(var(--primary));
  transform: scaleY(0.32);
  transform-origin: top;
  transition:
    transform 280ms cubic-bezier(0.22, 1, 0.36, 1),
    background-color 200ms ease;
}
.home-tile:hover::before,
.home-tile:focus-visible::before {
  transform: scaleY(1);
  background: hsl(var(--brand));
}
/* The feature tile is navy-filled, so a navy rail would vanish into it. */
.home-tile--feature::before {
  background: hsl(0 0% 100% / 0.32);
  transform: scaleY(1);
}
.home-tile--feature:hover::before,
.home-tile--feature:focus-visible::before {
  background: hsl(0 0% 100% / 0.72);
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .home-tile::before {
    transform: scaleY(1);
    transition: none;
  }
}
/* ── Section eyebrow rule ──────────────────────────────────────────────────
 * A hairline that runs from the heading to the right edge. Cheap, and it is
 * what gives the page vertical rhythm once the tiles stop being uniform. */
.home-rule {
  flex: 1;
  height: 1px;
  background: linear-gradient(90deg, hsl(var(--border-strong)) 0%, transparent 100%);
}
/* ── Book of Business dashboard animations ─────────────────────────────────
 * Mild, premium, one-shot on load: constellation dots bloom in (staggered via
 * inline animation-delay), distribution bars fill, the sparkline draws itself.
 * All disabled under prefers-reduced-motion. */
@keyframes bob-dot-bloom {
  0% {
    opacity: 0;
    transform: scale(0);
  }
  70% {
    opacity: 1;
    transform: scale(1.35);
  }
  100% {
    opacity: 1;
    transform: scale(1);
  }
}
.bob-dot {
  opacity: 0;
  transform-origin: center;
  transform-box: fill-box;
  animation: bob-dot-bloom 0.55s cubic-bezier(0.34, 1.4, 0.44, 1) both;
}
.bob-dot:hover circle:last-child {
  r: 7;
}
@keyframes bob-bar-fill {
  from {
    transform: scaleX(0);
  }
  to {
    transform: scaleX(1);
  }
}
.bob-bar {
  transform-origin: left;
  animation: bob-bar-fill 0.7s cubic-bezier(0.22, 0.68, 0.2, 1) both;
}
@keyframes bob-spark-draw {
  from {
    stroke-dashoffset: 1;
  }
  to {
    stroke-dashoffset: 0;
  }
}
.bob-spark {
  stroke-dasharray: 1;
  animation: bob-spark-draw 1.1s ease-out 0.3s both;
}
/* ── Live/ambient motion — continuous, subtle, "the dashboard is breathing" ──
 * Layered ON TOP of the one-shot load animations above. Each dot's core softly
 * twinkles and its halo breathes (staggered per-dot delay so the field shimmers
 * organically, never in lockstep); two nebula glows drift slowly behind the
 * field for depth; the Live pill and the sparkline head pulse. Everything here
 * is opacity/transform/r only (GPU-cheap) and fully disabled under
 * prefers-reduced-motion. */
@keyframes bob-twinkle {
  0%, 100% { opacity: 0.7; }
  50% { opacity: 1; }
}
.bob-star {
  animation: bob-twinkle 3.8s ease-in-out infinite;
}
@keyframes bob-halo-breathe {
  0%, 100% { opacity: 0.45; transform: scale(0.9); }
  50% { opacity: 0.85; transform: scale(1.12); }
}
.bob-halo {
  transform-origin: center;
  transform-box: fill-box;
  animation: bob-halo-breathe 4.6s ease-in-out infinite;
}
@keyframes bob-drift-a {
  0%, 100% { transform: translate(0, 0) scale(1); }
  50% { transform: translate(3.5%, 3%) scale(1.08); }
}
@keyframes bob-drift-b {
  0%, 100% { transform: translate(0, 0) scale(1.06); }
  50% { transform: translate(-3%, -3.5%) scale(1); }
}
.bob-nebula-a,
.bob-nebula-b {
  transform-origin: center;
  transform-box: fill-box;
}
.bob-nebula-a { animation: bob-drift-a 26s ease-in-out infinite; }
.bob-nebula-b { animation: bob-drift-b 32s ease-in-out infinite; }
@keyframes bob-live-pulse {
  0% { box-shadow: 0 0 0 0 hsl(152 65% 45% / 0.5); }
  70% { box-shadow: 0 0 0 5px hsl(152 65% 45% / 0); }
  100% { box-shadow: 0 0 0 0 hsl(152 65% 45% / 0); }
}
.bob-live-dot { animation: bob-live-pulse 2.4s ease-out infinite; }
@keyframes bob-spark-pulse {
  0%, 100% { r: 3.5; opacity: 1; }
  50% { r: 4.6; opacity: 0.7; }
}
.bob-spark-head { animation: bob-spark-pulse 2.2s ease-in-out infinite; }
@keyframes bob-spark-halo {
  0% { r: 3.5; opacity: 0.5; }
  70%, 100% { r: 11; opacity: 0; }
}
.bob-spark-halo { animation: bob-spark-halo 2.2s ease-out infinite; }
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .bob-dot,
  html:not(.force-motion) .bob-bar,
  html:not(.force-motion) .bob-spark {
    animation: none;
    opacity: 1;
    transform: none;
    stroke-dashoffset: 0;
  }
  html:not(.force-motion) .bob-star,
  html:not(.force-motion) .bob-halo,
  html:not(.force-motion) .bob-nebula-a,
  html:not(.force-motion) .bob-nebula-b,
  html:not(.force-motion) .bob-live-dot,
  html:not(.force-motion) .bob-spark-head,
  html:not(.force-motion) .bob-spark-halo {
    animation: none;
  }
}
/* ── Ops "office wall" motion — a live activity crawl + a monitoring sweep ────
 * The ticker track is duplicated in the DOM and translated -50% for a seamless
 * loop; hovering the crawl pauses it so a value can be read. The constellation
 * scan is a soft cyan bar that sweeps the field like a live monitor. Both off
 * under reduced-motion. */
@keyframes bob-ticker {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-50%);
  }
}
.bob-ticker-track {
  animation: bob-ticker 38s linear infinite;
}
[data-testid="bob-ticker"]:hover .bob-ticker-track {
  animation-play-state: paused;
}
@keyframes bob-scan {
  0% {
    transform: translateX(0);
    opacity: 0;
  }
  10%,
  90% {
    opacity: 1;
  }
  100% {
    transform: translateX(740px);
    opacity: 0;
  }
}
.bob-scan {
  animation: bob-scan 8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .bob-ticker-track,
  html:not(.force-motion) .bob-scan {
    animation: none;
  }
  html:not(.force-motion) .bob-scan {
    opacity: 0;
  }
}
/* ── Funnel (pipeline reporting) — bars fill on load, a sheen flows down them ─ */
.funnel-bar {
  transform-box: fill-box;
  transform-origin: left center;
  animation: bob-bar-fill 0.7s cubic-bezier(0.22, 0.68, 0.2, 1) both;
}
@keyframes funnel-flow {
  0% {
    transform: translateX(-70px);
  }
  60%,
  100% {
    transform: translateX(var(--flow-dist, 400px));
  }
}
.funnel-flow {
  animation: funnel-flow 2.8s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .funnel-bar {
    animation: none;
  }
  html:not(.force-motion) .funnel-flow {
    animation: none;
    opacity: 0;
  }
}
/* ── App heartbeat — one shared, slow pulse that makes the program feel alive ──
 * A calm ~3.2s swell + soft glow (NOT an EKG). Carried by the always-present
 * assistant launcher so every screen has the same quiet pulse of life while the
 * assistant sits idle. `filter: drop-shadow` is used (not box-shadow) so the
 * button keeps its own elevation shadow. Disabled under reduced-motion. */
@keyframes app-heartbeat {
  0%, 100% {
    transform: scale(1);
    filter: drop-shadow(0 0 0 hsl(210 90% 60% / 0));
  }
  42% {
    transform: scale(1.035);
    filter: drop-shadow(0 0 9px hsl(210 90% 62% / 0.6));
  }
}
.app-pulse {
  animation: app-heartbeat 3.2s ease-in-out infinite;
}
/* ── Force-motion override (demo/booth) ──────────────────────────────────────
 * Accessibility default: every block above honors prefers-reduced-motion. But a
 * booth machine driven over RDP / a locked-down kiosk often FORCES reduced-motion
 * on the *viewing* device, which would gut the live-ops wow. Setting
 * localStorage['iepa.forceMotion']='1' (or the URL param ?motion=on) adds
 * `.force-motion` to <html>; the kill-switches above are scoped
 * `html:not(.force-motion)` so the override re-enables motion WITHOUT changing
 * the a11y default. See frontend/src/lib/forceMotion.ts. */
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .app-pulse {
    animation: none;
  }
}
/* ── Exit Quadrant chart — client-facing "money shot" entrance ──────────────
 * The chart a business owner watches resolve in the first meeting. One-shot on
 * mount, sub-second, settle-and-stop (NOT looping): the axes draw themselves in,
 * the frame fades up, the active quadrant blooms a soft radial glow, and the
 * owner's dot drops from above and settles with a single ripple + halo pulse on
 * landing. Shares the house `bob-*` motion feel (cubic-bezier overshoot, halo
 * breathe). Position/geometry is parity-locked in QuadrantChart.tsx — every rule
 * here is opacity / transform / stroke-dashoffset / r only, so it never moves
 * where the dot lands. All disabled under prefers-reduced-motion (with the
 * shared html:not(.force-motion) escape hatch) AND under @media print. */
/* The two main axes (each 320 user-units long) draw themselves in. */
@keyframes quadrant-axis-draw {
  from { stroke-dashoffset: 320; }
  to   { stroke-dashoffset: 0; }
}
.quadrant-axis {
  stroke-dasharray: 320;
  animation: quadrant-axis-draw 0.5s cubic-bezier(0.22, 0.68, 0.2, 1) 0.05s both;
}
/* Plot box, gridlines, ticks, and labels fade up together, just behind the dot. */
@keyframes quadrant-frame-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}
.quadrant-frame {
  animation: quadrant-frame-in 0.55s ease-out both;
}
/* Active quadrant blooms a soft radial glow from its center. */
@keyframes quadrant-glow-in {
  from { opacity: 0; transform: scale(0.85); }
  to   { opacity: 1; transform: scale(1); }
}
.quadrant-active-glow {
  transform-box: fill-box;
  transform-origin: center;
  animation: quadrant-glow-in 0.7s ease-out 0.1s both;
}
/* The owner's dot drops from above and settles with a gentle overshoot. Ends at
 * translate(0)/scale(1) — identity — so the resting position is untouched. */
@keyframes quadrant-dot-drop {
  0%   { opacity: 0; transform: translateY(-26px) scale(0.6); }
  55%  { opacity: 1; transform: translateY(3px) scale(1.12); }
  100% { opacity: 1; transform: translateY(0) scale(1); }
}
.quadrant-dot-drop {
  transform-box: fill-box;
  transform-origin: center;
  animation: quadrant-dot-drop 0.5s cubic-bezier(0.34, 1.4, 0.44, 1) 0.28s both;
}
/* A single ripple ring expands out of the landing point, then vanishes. */
@keyframes quadrant-ripple {
  0%   { r: 10; opacity: 0; }
  25%  { opacity: 0.5; }
  100% { r: 34; opacity: 0; }
}
.quadrant-ripple {
  opacity: 0;
  animation: quadrant-ripple 0.65s ease-out 0.6s both;
}
/* A soft halo blooms once under the dot as it lands, then holds faint. */
@keyframes quadrant-halo {
  0%   { opacity: 0; transform: scale(0.4); }
  55%  { opacity: 0.75; transform: scale(1.15); }
  100% { opacity: 0.4; transform: scale(1); }
}
.quadrant-halo {
  transform-box: fill-box;
  transform-origin: center;
  opacity: 0;
  animation: quadrant-halo 0.7s ease-out 0.5s both;
}
/* Subject pill rises in after the dot has landed. */
@keyframes quadrant-pill-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}
.quadrant-pill-in {
  transform-box: fill-box;
  transform-origin: center;
  animation: quadrant-pill-in 0.4s ease-out 0.62s both;
}
@media (prefers-reduced-motion: reduce) {
  /* Structural reveals settle to their final, fully-visible state instantly. */
  html:not(.force-motion) .quadrant-axis,
  html:not(.force-motion) .quadrant-frame,
  html:not(.force-motion) .quadrant-active-glow,
  html:not(.force-motion) .quadrant-dot-drop,
  html:not(.force-motion) .quadrant-pill-in {
    animation: none;
    opacity: 1;
    transform: none;
  }
  html:not(.force-motion) .quadrant-axis {
    stroke-dasharray: none;
    stroke-dashoffset: 0;
  }
  /* Ripple + halo are motion-only decoration — drop them entirely. */
  html:not(.force-motion) .quadrant-ripple,
  html:not(.force-motion) .quadrant-halo {
    animation: none;
    opacity: 0;
  }
}
/* ---------------------------------------------------------------------------
 * Print stylesheet — Diagnostic leave-behind PDF (spec §11.6).
 *
 * Strategy: hide the app shell (sidebar, top header, bottom footer, action
 * buttons) via the `.no-print` class. Reveal `.print-only` blocks (AI
 * disclaimer footer). Enforce comfortable type, white background, and
 * grayscale-friendly chart colors so the browser's "Print to PDF" output
 * is a clean three-page client deliverable.
 * ------------------------------------------------------------------------- */
@media print {
  /* Hide the sidebar, app header, app footer, action buttons, and any
   * other element explicitly opted out of print. */
  .no-print {
    display: none !important;
  }

  /* Reveal print-only blocks (e.g. AI-disclaimer footer). */
  .print-only {
    display: block !important;
  }

  /* Clean white paper background. */
  html,
  body {
    background: white !important;
    color: black !important;
  }

  /* Comfortable font size for paper. */
  body {
    font-size: 12pt;
  }

  /* Reset page-level chrome / containers so content flows full-width. */
  main {
    padding: 0 !important;
    max-width: none !important;
  }

  /* Page break management. `.page-break` forces a hard break AFTER the
   * element; `.page-break-before` forces a break BEFORE. */
  .page-break {
    page-break-after: always;
    -moz-column-break-after: page;
         break-after: page;
  }
  .page-break-before {
    page-break-before: always;
    -moz-column-break-before: page;
         break-before: page;
  }
  /* Keep cards from splitting awkwardly across pages. */
  .print-keep-together {
    page-break-inside: avoid;
    -moz-column-break-inside: avoid;
         break-inside: avoid;
  }

  /* Quadrant chart: grayscale-friendly dot + axes for B&W printers. */
  svg circle.quadrant-dot,
  svg circle[data-print-dot="true"] {
    fill: black !important;
    stroke: black !important;
  }

  /* Exit Quadrant entrance animation: freeze to the final static state so the
   * printed deliverable is clean and identical to the pre-animation render.
   * Structural elements snap fully visible; the screen-only glow/ripple/halo
   * (which would print as odd gradient blobs on B&W) are removed outright. */
  svg .quadrant-axis,
  svg .quadrant-frame,
  svg .quadrant-dot-drop,
  svg .quadrant-pill-in {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    stroke-dasharray: none !important;
    stroke-dashoffset: 0 !important;
  }
  svg .quadrant-active-glow,
  svg .quadrant-ripple,
  svg .quadrant-halo {
    display: none !important;
  }

  /* Set a reasonable page margin. */
  @page {
    margin: 0.6in 0.5in;
  }
}
/* ── Velocity splash — "Swipe & Shimmer" over a converging constellation ──────
 * v1 (swipe-in wordmark + masked metallic shine + tagline) layered over v2's
 * star-field (stars streak inward and coalesce as the wordmark arrives, then a
 * few keep twinkling). Scoped under .splash-*; fills its positioned parent
 * (the fullscreen overlay in-app, or the 960x560 preview stage). Honors
 * prefers-reduced-motion (collapses to the resting composition). */
.splash-root {
  position: absolute;
  inset: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(120% 90% at 50% 42%, #16324f 0%, #0e2440 55%, #0b1b2e 100%);
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
/* ── Constellation background (from v2, logo-ignite removed) ───────────────── */
.splash-field {
  position: absolute;
  inset: 0;
  animation: splash-field-fade 3.2s ease-out both;
}
@keyframes splash-field-fade {
  0% { opacity: 0; }
  14% { opacity: 1; }
  100% { opacity: 1; }
}
.splash-star {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 2px;
  height: 2px;
  border-radius: 50%;
  background: #dbeafe;
  box-shadow: 0 0 4px 1px rgba(147, 197, 253, 0.7);
  opacity: 0;
  --tx: 0px; --ty: 0px;
  transform: translate(-50%, -50%) translate(var(--tx), var(--ty));
  animation: splash-streak 2.5s cubic-bezier(0.22, 0.61, 0.24, 1) both;
}
/* Streak from a scattered offset toward center, fading as it arrives. */
@keyframes splash-streak {
  0% { opacity: 0; transform: translate(-50%, -50%) translate(var(--tx), var(--ty)) scale(1.4); }
  18% { opacity: 0.85; }
  70% { opacity: 0.9; }
  100% { opacity: 0; transform: translate(-50%, -50%) translate(0px, 0px) scale(0.2); }
}
.splash-s1  { --tx: -360px; --ty: -150px; animation-delay: 0.02s; }
.splash-s2  { --tx:  340px; --ty: -180px; animation-delay: 0.10s; }
.splash-s3  { --tx: -300px; --ty:  170px; animation-delay: 0.06s; }
.splash-s4  { --tx:  320px; --ty:  150px; animation-delay: 0.14s; }
.splash-s5  { --tx: -420px; --ty:   40px; animation-delay: 0.00s; }
.splash-s6  { --tx:  430px; --ty:  -30px; animation-delay: 0.09s; }
.splash-s7  { --tx: -180px; --ty: -220px; animation-delay: 0.16s; }
.splash-s8  { --tx:  200px; --ty:  220px; animation-delay: 0.04s; }
.splash-s9  { --tx: -250px; --ty:  -60px; animation-delay: 0.20s; }
.splash-s10 { --tx:  270px; --ty:   70px; animation-delay: 0.12s; }
.splash-s11 { --tx: -120px; --ty:  210px; animation-delay: 0.18s; }
.splash-s12 { --tx:  150px; --ty: -200px; animation-delay: 0.07s; }
.splash-s13 { --tx: -390px; --ty:  -90px; animation-delay: 0.23s; }
.splash-s14 { --tx:  400px; --ty:  110px; animation-delay: 0.15s; }
/* Resting twinkles that fade in after the stars have converged. */
.splash-twinkle {
  position: absolute;
  width: 2px;
  height: 2px;
  border-radius: 50%;
  background: #eaf2ff;
  box-shadow: 0 0 5px 1px rgba(160, 200, 255, 0.8);
  opacity: 0;
  animation: splash-twinkle 4.2s ease-in-out infinite;
}
.splash-t1 { top: 24%; left: 20%; animation-delay: 3.2s; }
.splash-t2 { top: 70%; left: 78%; animation-delay: 4.0s; }
.splash-t3 { top: 32%; left: 82%; animation-delay: 3.6s; }
.splash-t4 { top: 60%; left: 16%; animation-delay: 4.4s; }
.splash-t5 { top: 20%; left: 62%; animation-delay: 3.9s; }
@keyframes splash-twinkle {
  0%, 100% { opacity: 0; transform: scale(0.6); }
  50% { opacity: 0.9; transform: scale(1.1); }
}
/* ── Foreground: swipe-in wordmark + shine + tagline (from v1) ─────────────── */
.splash-stage {
  position: relative;
  z-index: 1;
  width: 720px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.splash-glow {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 620px;
  height: 300px;
  transform: translate(-50%, -70%);
  background: radial-gradient(60% 60% at 50% 50%,
      hsla(208, 60%, 52%, 0.28) 0%,
      hsla(208, 60%, 42%, 0.12) 40%,
      transparent 72%);
  filter: blur(6px);
  opacity: 0;
  animation: splash-glow-in 1200ms 700ms cubic-bezier(0.16, 0.84, 0.28, 1) forwards,
             splash-glow-pulse 6000ms 2600ms ease-in-out infinite;
}
.splash-mark {
  position: relative;
  width: 560px;
  height: 191px;
  opacity: 0;
  transform: translateX(-120px);
  animation: splash-swipe 1050ms 120ms cubic-bezier(0.16, 0.9, 0.22, 1) forwards;
}
.splash-wordmark {
  display: block;
  width: 560px;
  height: 191px;
  -o-object-fit: contain;
     object-fit: contain;
  filter: drop-shadow(0 6px 22px rgba(0, 0, 0, 0.45));
}
.splash-trail {
  position: absolute;
  inset: 0;
  background-image: url(/velocity-wordmark.webp);
  background-size: 560px 191px;
  background-repeat: no-repeat;
  background-position: center;
  opacity: 0;
  filter: blur(3px) brightness(1.4) saturate(0);
  transform: translateX(-40px);
  animation: splash-trail 900ms 120ms cubic-bezier(0.16, 0.9, 0.22, 1) forwards;
}
.splash-shine {
  position: absolute;
  inset: 0;
  -webkit-mask-image: url(/velocity-wordmark.webp);
  mask-image: url(/velocity-wordmark.webp);
  -webkit-mask-size: 560px 191px;
  mask-size: 560px 191px;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  background: linear-gradient(105deg,
      transparent 38%,
      hsla(0, 0%, 100%, 0.15) 46%,
      hsla(0, 0%, 100%, 0.92) 50%,
      hsla(208, 70%, 88%, 0.55) 54%,
      transparent 62%);
  background-size: 260% 100%;
  background-repeat: no-repeat;
  background-position: 160% 0;
  opacity: 0;
  mix-blend-mode: screen;
  animation:
    splash-shine-intro 1300ms 1150ms cubic-bezier(0.3, 0.1, 0.2, 1) forwards,
    splash-shine-loop 6000ms 3400ms linear infinite;
}
.splash-tagline {
  margin-top: 22px;
  color: hsl(208, 45%, 82%);
  font-size: 15px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 2px;
  /* "Artificial Intelligence for Exit Plan Advisors" sets to ~540px uppercase at
     this tracking. The cap is 560px because that is the <img> BOX width — not the
     lockup: the .webp carries transparent margin, and the visible VELOCITY
     lettering measures 383px rendered. So this bounds an overflow, it does not
     match the line to the logo, and the tagline does sit wider than the lettering
     above it (the previous one, at ~280px, sat narrower). Deliberate and left as
     JM saw it; if it ever reads wrong, drop this to ~420px and let text-wrap
     below break it into two balanced lines. */
  max-width: 560px;
  text-align: center;
  text-wrap: balance;
  opacity: 0;
  transform: translateY(8px);
  text-shadow: 0 1px 10px hsla(208, 60%, 42%, 0.4);
  animation: splash-tagline-in 900ms 1450ms cubic-bezier(0.16, 0.84, 0.28, 1) forwards;
}
.splash-rule {
  margin-top: 16px;
  width: 0;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg,
      transparent,
      hsl(208, 60%, 52%) 30%,
      hsl(208, 70%, 68%) 50%,
      hsl(208, 60%, 52%) 70%,
      transparent);
  opacity: 0;
  animation: splash-rule-in 1000ms 1650ms cubic-bezier(0.16, 0.84, 0.28, 1) forwards;
}
@keyframes splash-swipe {
  0% { opacity: 0; transform: translateX(-120px); }
  60% { opacity: 1; }
  100% { opacity: 1; transform: translateX(0); }
}
@keyframes splash-trail {
  0% { opacity: 0; transform: translateX(-40px); }
  35% { opacity: 0.35; }
  100% { opacity: 0; transform: translateX(28px); }
}
@keyframes splash-glow-in {
  0% { opacity: 0; }
  100% { opacity: 1; }
}
@keyframes splash-glow-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.72; }
}
@keyframes splash-shine-intro {
  0% { opacity: 0; background-position: 160% 0; }
  12% { opacity: 1; }
  88% { opacity: 1; }
  100% { opacity: 0; background-position: -60% 0; }
}
@keyframes splash-shine-loop {
  0% { opacity: 0; background-position: 160% 0; }
  4% { opacity: 1; }
  20% { opacity: 1; background-position: -60% 0; }
  22% { opacity: 0; background-position: -60% 0; }
  100% { opacity: 0; background-position: 160% 0; }
}
@keyframes splash-tagline-in {
  0% { opacity: 0; transform: translateY(8px); letter-spacing: 2px; }
  100% { opacity: 1; transform: translateY(0); letter-spacing: 6px; }
}
@keyframes splash-rule-in {
  0% { opacity: 0; width: 0; }
  100% { opacity: 1; width: 320px; }
}
/* Small screens: scale the fixed-size lockup down so it never overflows. */
@media (max-width: 640px) {
  .splash-stage { transform: scale(0.58); }
}
/* Honor prefers-reduced-motion — but let the `.force-motion` conference/RDP
 * escape hatch (lib/forceMotion) keep the animation, matching every other
 * gated animation in this file. Collapses to the final resting composition. */
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .splash-field { animation: none; opacity: 1; }
  html:not(.force-motion) .splash-star { animation: none; opacity: 0; }
  html:not(.force-motion) .splash-twinkle { animation: none; opacity: 0; }
  html:not(.force-motion) .splash-glow { opacity: 1; animation: none; }
  html:not(.force-motion) .splash-mark { opacity: 1; transform: translateX(0); animation: none; }
  html:not(.force-motion) .splash-trail { opacity: 0; animation: none; }
  html:not(.force-motion) .splash-shine { opacity: 0; animation: none; }
  html:not(.force-motion) .splash-tagline { opacity: 1; transform: translateY(0); letter-spacing: 6px; animation: none; }
  html:not(.force-motion) .splash-rule { opacity: 1; width: 320px; animation: none; }
}
/* ── Velocity splash overlay (app entry) ─────────────────────────────────────
 * SplashScreen (components/SplashScreen.tsx) mounts this fixed overlay over the
 * whole app on load, then fades out and unmounts. The animation itself is the
 * .splash-* block above (shared verbatim with the /splash-preview.html reference). */
.splash-overlay {
  position: fixed;
  inset: 0;
  z-index: 9999;
  opacity: 1;
  transition: opacity 650ms ease;
}
.splash-overlay--leaving {
  opacity: 0;
  pointer-events: none;
}
.splash-skip {
  position: absolute;
  right: 26px;
  bottom: 22px;
  color: hsl(208 28% 58%);
  font-size: 12px;
  letter-spacing: 1px;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  opacity: 0;
  animation: splash-skip-in 700ms 1600ms ease forwards;
}
@keyframes splash-skip-in {
  from { opacity: 0; }
  to { opacity: 0.75; }
}
@media (prefers-reduced-motion: reduce) {
  html:not(.force-motion) .splash-skip { animation: none; opacity: 0.75; }
  html:not(.force-motion) .splash-overlay { transition: none; }
}
.file\:mr-3::file-selector-button {
  margin-right: 0.75rem;
}
.file\:rounded-md::file-selector-button {
  border-radius: calc(var(--radius) - 2px);
}
.file\:border-0::file-selector-button {
  border-width: 0px;
}
.file\:bg-primary::file-selector-button {
  background-color: hsl(var(--primary));
}
.file\:bg-transparent::file-selector-button {
  background-color: transparent;
}
.file\:px-3::file-selector-button {
  padding-left: 0.75rem;
  padding-right: 0.75rem;
}
.file\:py-1\.5::file-selector-button {
  padding-top: 0.375rem;
  padding-bottom: 0.375rem;
}
.file\:text-sm::file-selector-button {
  font-size: 0.875rem;
  line-height: 1.25rem;
}
.file\:text-xs::file-selector-button {
  font-size: 0.75rem;
  line-height: 1rem;
}
.file\:font-medium::file-selector-button {
  font-weight: 500;
}
.file\:text-primary-foreground::file-selector-button {
  color: hsl(var(--primary-foreground));
}
.placeholder\:text-muted-foreground::-moz-placeholder {
  color: hsl(var(--muted-foreground));
}
.placeholder\:text-muted-foreground::placeholder {
  color: hsl(var(--muted-foreground));
}
.placeholder\:text-sidebar-muted::-moz-placeholder {
  color: hsl(var(--sidebar-muted));
}
.placeholder\:text-sidebar-muted::placeholder {
  color: hsl(var(--sidebar-muted));
}
.last\:border-0:last-child {
  border-width: 0px;
}
.last\:border-b-0:last-child {
  border-bottom-width: 0px;
}
.hover\:border-border-strong:hover {
  border-color: hsl(var(--border-strong));
}
.hover\:border-primary\/40:hover {
  border-color: hsl(var(--primary) / 0.4);
}
.hover\:border-primary\/60:hover {
  border-color: hsl(var(--primary) / 0.6);
}
.hover\:border-white\/40:hover {
  border-color: rgb(255 255 255 / 0.4);
}
.hover\:bg-accent:hover {
  background-color: hsl(var(--accent));
}
.hover\:bg-accent\/40:hover {
  background-color: hsl(var(--accent) / 0.4);
}
.hover\:bg-accent\/50:hover {
  background-color: hsl(var(--accent) / 0.5);
}
.hover\:bg-accent\/60:hover {
  background-color: hsl(var(--accent) / 0.6);
}
.hover\:bg-destructive:hover {
  background-color: hsl(var(--destructive));
}
.hover\:bg-destructive\/10:hover {
  background-color: hsl(var(--destructive) / 0.1);
}
.hover\:bg-destructive\/5:hover {
  background-color: hsl(var(--destructive) / 0.05);
}
.hover\:bg-destructive\/80:hover {
  background-color: hsl(var(--destructive) / 0.8);
}
.hover\:bg-destructive\/90:hover {
  background-color: hsl(var(--destructive) / 0.9);
}
.hover\:bg-muted:hover {
  background-color: hsl(var(--muted));
}
.hover\:bg-muted\/30:hover {
  background-color: hsl(var(--muted) / 0.3);
}
.hover\:bg-muted\/40:hover {
  background-color: hsl(var(--muted) / 0.4);
}
.hover\:bg-muted\/60:hover {
  background-color: hsl(var(--muted) / 0.6);
}
.hover\:bg-primary:hover {
  background-color: hsl(var(--primary));
}
.hover\:bg-primary\/5:hover {
  background-color: hsl(var(--primary) / 0.05);
}
.hover\:bg-primary\/80:hover {
  background-color: hsl(var(--primary) / 0.8);
}
.hover\:bg-primary\/90:hover {
  background-color: hsl(var(--primary) / 0.9);
}
.hover\:bg-secondary\/80:hover {
  background-color: hsl(var(--secondary) / 0.8);
}
.hover\:bg-sidebar-accent\/40:hover {
  background-color: hsl(var(--sidebar-accent) / 0.4);
}
.hover\:bg-sidebar-accent\/60:hover {
  background-color: hsl(var(--sidebar-accent) / 0.6);
}
.hover\:bg-status-clear:hover {
  background-color: hsl(var(--status-clear));
}
.hover\:bg-status-clear-bg:hover {
  background-color: hsl(var(--status-clear-bg));
}
.hover\:bg-status-clear\/80:hover {
  background-color: hsl(var(--status-clear) / 0.8);
}
.hover\:bg-status-risk:hover {
  background-color: hsl(var(--status-risk));
}
.hover\:bg-status-risk-bg:hover {
  background-color: hsl(var(--status-risk-bg));
}
.hover\:bg-status-risk\/80:hover {
  background-color: hsl(var(--status-risk) / 0.8);
}
.hover\:bg-transparent:hover {
  background-color: transparent;
}
.hover\:bg-white\/10:hover {
  background-color: rgb(255 255 255 / 0.1);
}
.hover\:bg-white\/20:hover {
  background-color: rgb(255 255 255 / 0.2);
}
.hover\:bg-white\/90:hover {
  background-color: rgb(255 255 255 / 0.9);
}
.hover\:text-accent-foreground:hover {
  color: hsl(var(--accent-foreground));
}
.hover\:text-destructive:hover {
  color: hsl(var(--destructive));
}
.hover\:text-foreground:hover {
  color: hsl(var(--foreground));
}
.hover\:text-primary:hover {
  color: hsl(var(--primary));
}
.hover\:text-primary\/80:hover {
  color: hsl(var(--primary) / 0.8);
}
.hover\:text-sidebar-foreground:hover {
  color: hsl(var(--sidebar-foreground));
}
.hover\:text-sidebar-foreground\/85:hover {
  color: hsl(var(--sidebar-foreground) / 0.85);
}
.hover\:text-sidebar-foreground\/90:hover {
  color: hsl(var(--sidebar-foreground) / 0.9);
}
.hover\:text-white:hover {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.hover\:underline:hover {
  text-decoration-line: underline;
}
.hover\:shadow-elev-2:hover {
  --tw-shadow: var(--elev-2);
  --tw-shadow-colored: var(--elev-2);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.hover\:shadow-elev-3:hover {
  --tw-shadow: var(--elev-3);
  --tw-shadow-colored: var(--elev-3);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
}
.hover\:file\:bg-primary\/90::file-selector-button:hover {
  background-color: hsl(var(--primary) / 0.9);
}
.focus\:outline-none:focus {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus\:ring-2:focus {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus\:ring-ring:focus {
  --tw-ring-color: hsl(var(--ring));
}
.focus\:ring-white\/30:focus {
  --tw-ring-color: rgb(255 255 255 / 0.3);
}
.focus\:ring-offset-2:focus {
  --tw-ring-offset-width: 2px;
}
.focus-visible\:outline-none:focus-visible {
  outline: 2px solid transparent;
  outline-offset: 2px;
}
.focus-visible\:ring-1:focus-visible {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus-visible\:ring-2:focus-visible {
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
}
.focus-visible\:ring-ring:focus-visible {
  --tw-ring-color: hsl(var(--ring));
}
.focus-visible\:ring-white\/60:focus-visible {
  --tw-ring-color: rgb(255 255 255 / 0.6);
}
.focus-visible\:ring-offset-2:focus-visible {
  --tw-ring-offset-width: 2px;
}
.disabled\:pointer-events-none:disabled {
  pointer-events: none;
}
.disabled\:cursor-not-allowed:disabled {
  cursor: not-allowed;
}
.disabled\:opacity-40:disabled {
  opacity: 0.4;
}
.disabled\:opacity-50:disabled {
  opacity: 0.5;
}
.group:hover .group-hover\:-translate-y-0\.5 {
  --tw-translate-y: -0.125rem;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.group:hover .group-hover\:translate-x-0\.5 {
  --tw-translate-x: 0.125rem;
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
}
.group:hover .group-hover\:bg-primary\/15 {
  background-color: hsl(var(--primary) / 0.15);
}
.group:hover .group-hover\:text-brand {
  color: hsl(var(--brand));
}
.group:hover .group-hover\:text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
}
.peer:disabled ~ .peer-disabled\:cursor-not-allowed {
  cursor: not-allowed;
}
.peer:disabled ~ .peer-disabled\:opacity-70 {
  opacity: 0.7;
}
.data-\[state\=active\]\:bg-background[data-state="active"] {
  background-color: hsl(var(--background));
}
.data-\[state\=active\]\:text-foreground[data-state="active"] {
  color: hsl(var(--foreground));
}
.data-\[state\=active\]\:shadow-sm[data-state="active"] {
  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --tw-shadow-colored: 0 1px 2px 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);
}
@supports (backdrop-filter: var(--tw)) {
  .supports-\[backdrop-filter\]\:bg-background\/80 {
    background-color: hsl(var(--background) / 0.8);
  }
}
@media (prefers-reduced-motion: no-preference) {
  @keyframes spin {
    to {
      transform: rotate(360deg);
    }
  }
  .motion-safe\:animate-spin {
    animation: spin 1s linear infinite;
  }
}
.dark\:bg-amber-950:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(69 26 3 / var(--tw-bg-opacity, 1));
}
.dark\:bg-sky-950:is(.dark *) {
  --tw-bg-opacity: 1;
  background-color: rgb(8 47 73 / var(--tw-bg-opacity, 1));
}
.dark\:text-amber-200:is(.dark *) {
  --tw-text-opacity: 1;
  color: rgb(253 230 138 / var(--tw-text-opacity, 1));
}
.dark\:text-sky-200:is(.dark *) {
  --tw-text-opacity: 1;
  color: rgb(186 230 253 / var(--tw-text-opacity, 1));
}
@media (min-width: 640px) {
  .sm\:col-span-2 {
    grid-column: span 2 / span 2;
  }
  .sm\:inline {
    display: inline;
  }
  .sm\:w-\[420px\] {
    width: 420px;
  }
  .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\:flex-row {
    flex-direction: row;
  }
  .sm\:gap-4 {
    gap: 1rem;
  }
  .sm\:p-7 {
    padding: 1.75rem;
  }
  .sm\:text-\[2rem\] {
    font-size: 2rem;
  }
}
@media (min-width: 768px) {
  .md\:col-span-4 {
    grid-column: span 4 / span 4;
  }
  .md\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .md\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .md\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr));
  }
  .md\:grid-cols-\[1\.5fr_1fr_1fr_1fr_1fr_auto\] {
    grid-template-columns: 1.5fr 1fr 1fr 1fr 1fr auto;
  }
  .md\:grid-cols-\[180px_140px_1fr_auto\] {
    grid-template-columns: 180px 140px 1fr auto;
  }
  .md\:text-5xl {
    font-size: 3rem;
    line-height: 1;
  }
  .md\:text-lg {
    font-size: 1.125rem;
    line-height: 1.75rem;
  }
}
@media (min-width: 1024px) {
  .lg\:col-span-2 {
    grid-column: span 2 / span 2;
  }
  .lg\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
  .lg\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .lg\:grid-cols-5 {
    grid-template-columns: repeat(5, minmax(0, 1fr));
  }
  .lg\:grid-cols-\[280px_1fr\] {
    grid-template-columns: 280px 1fr;
  }
  .lg\:grid-cols-\[300px_1fr\] {
    grid-template-columns: 300px 1fr;
  }
  .lg\:grid-cols-\[360px_minmax\(0\2c 1fr\)\] {
    grid-template-columns: 360px minmax(0,1fr);
  }
  .lg\:flex-row {
    flex-direction: row;
  }
  .lg\:items-end {
    align-items: flex-end;
  }
  .lg\:justify-between {
    justify-content: space-between;
  }
}
@media (min-width: 1280px) {
  .xl\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}
@media (min-width: 1536px) {
  .\32xl\:grid-cols-\[minmax\(0\2c 3fr\)_minmax\(0\2c 2fr\)\] {
    grid-template-columns: minmax(0,3fr) minmax(0,2fr);
  }
}
@media print {
  .print\:border-0 {
    border-width: 0px;
  }
  .print\:p-0 {
    padding: 0px;
  }
  .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);
  }
}
