- @{
- var roles = context.User.FindAll(ClaimTypes.Role).ToList();
-
- }
- @if (roles.Any())
+ @if (_roles.Any())
{
Roles:
@@ -141,19 +139,23 @@
.Select(c => c.Value)
.FirstOrDefault() ?? string.Empty;
- _roles = GetAllRoleClaims(state.User);
+ var roleNamespace = Configuration["Auth0:RoleClaimNamespace"] ?? string.Empty;
+ _roles = GetAllRoleClaims(state.User, roleNamespace);
}
await base.OnInitializedAsync();
}
// Helper to get all role claims for a user
- public static List GetAllRoleClaims(ClaimsPrincipal user)
+ public static List GetAllRoleClaims(ClaimsPrincipal user, string? roleClaimNamespace = null)
{
- var roleTypes = new[] { ClaimTypes.Role, "role", "roles" };
+ var roleTypesList = new List { ClaimTypes.Role, "role", "roles" };
+
+ if (!string.IsNullOrWhiteSpace(roleClaimNamespace))
+ roleTypesList.Add(roleClaimNamespace);
return user.Claims
- .Where(c => roleTypes.Contains(c.Type, StringComparer.OrdinalIgnoreCase))
+ .Where(c => roleTypesList.Contains(c.Type, StringComparer.OrdinalIgnoreCase))
.Select(c => c.Value)
.Where(v => !string.IsNullOrWhiteSpace(v))
.Distinct()
diff --git a/src/Web/appsettings.Development.json b/src/Web/appsettings.Development.json
index 4f98808..abe8d76 100644
--- a/src/Web/appsettings.Development.json
+++ b/src/Web/appsettings.Development.json
@@ -7,6 +7,9 @@
}
},
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://localhost:4317",
+ "Auth0": {
+ "RoleClaimNamespace": "https://issuetracker.com/roles"
+ },
"MongoDB": {
"ConnectionString": "",
"DatabaseName": "issuetracker-db",
diff --git a/src/Web/wwwroot/css/app.css b/src/Web/wwwroot/css/app.css
index 31baff7..1b66e7c 100644
--- a/src/Web/wwwroot/css/app.css
+++ b/src/Web/wwwroot/css/app.css
@@ -1,2 +1,2 @@
/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
-@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-neutral-50:var(--color-neutral-50);--color-neutral-100:var(--color-neutral-100);--color-neutral-200:var(--color-neutral-200);--color-neutral-300:var(--color-neutral-300);--color-neutral-400:var(--color-neutral-400);--color-neutral-500:var(--color-neutral-500);--color-neutral-600:var(--color-neutral-600);--color-neutral-700:var(--color-neutral-700);--color-neutral-800:var(--color-neutral-800);--color-neutral-900:var(--color-neutral-900);--color-neutral-950:var(--color-neutral-950);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--radius-md:.375rem;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:var(--color-primary-50);--color-primary-100:var(--color-primary-100);--color-primary-200:var(--color-primary-200);--color-primary-300:var(--color-primary-300);--color-primary-400:var(--color-primary-400);--color-primary-500:var(--color-primary-500);--color-primary-600:var(--color-primary-600);--color-primary-700:var(--color-primary-700);--color-primary-800:var(--color-primary-800);--color-primary-900:var(--color-primary-900);--color-primary-950:var(--color-primary-950);--color-accent-100:var(--color-accent-100);--color-accent-300:var(--color-accent-300);--color-accent-400:var(--color-accent-400);--color-accent-500:var(--color-accent-500);--color-accent-600:var(--color-accent-600);--color-accent-700:var(--color-accent-700);--color-accent-800:var(--color-accent-800);--color-accent-900:var(--color-accent-900)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}h1:focus{outline:none}}@layer components{@keyframes slide-in-right{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.animate-slide-in-right{animation:.3s ease-out slide-in-right}@keyframes slide-in-down{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.animate-slide-in-down{animation:.3s ease-out slide-in-down}@keyframes slide-in-up{0%{opacity:0;transform:translate(-50%)translateY(100%)}to{opacity:1;transform:translate(-50%)translateY(0)}}.animate-slide-in-up{animation:.3s ease-out slide-in-up}.valid.modified:not([type=checkbox]){outline:1px solid #26b050}.invalid{outline:1px solid #e50000}.validation-message{color:#e50000}.blazor-error-boundary{color:#fff;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) 1rem/1.8rem no-repeat,#b32121;padding:1rem 1rem 1rem 3.7rem}.blazor-error-boundary:after{content:"An error has occurred."}.darker-border-checkbox.form-check-input{border-color:#929292}.form-floating>.form-control-plaintext:focus::placeholder,.form-floating>.form-control:focus::placeholder{text-align:start}.active-theme,.active-theme:where(.dark,.dark *){background-color:var(--color-primary-400)}.btn{cursor:pointer;border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:var(--leading-tight);line-height:var(--leading-tight);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);border-width:1px;border-color:#0000;border-radius:3.40282e38px;align-items:center;display:inline-flex}.btn:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{border-style:var(--tw-border-style);background-color:var(--color-green-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-primary:hover{background-color:var(--color-green-900)}}.btn-primary:focus{--tw-ring-color:var(--color-primary-500)}.btn-primary:where(.dark,.dark *){background-color:var(--color-green-600)}@media (hover:hover){.btn-primary:where(.dark,.dark *):hover{background-color:var(--color-green-900)}}.btn-secondary{border-style:var(--tw-border-style);background-color:var(--color-orange-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-secondary:hover{background-color:var(--color-orange-900)}}.btn-secondary:where(.dark,.dark *){background-color:var(--color-orange-600)}@media (hover:hover){.btn-secondary:where(.dark,.dark *):hover{background-color:var(--color-orange-900)}}.btn-warning{border-style:var(--tw-border-style);background-color:var(--color-red-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-warning:hover{background-color:var(--color-red-900)}}.btn-warning:where(.dark,.dark *){background-color:var(--color-red-600)}@media (hover:hover){.btn-warning:where(.dark,.dark *):hover{background-color:var(--color-red-900)}}.btn-icon{border-radius:var(--radius-lg);padding:calc(var(--spacing) * 2);color:var(--color-gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.btn-icon:hover{background-color:var(--color-gray-100)}}.btn-icon:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-primary-500);--tw-outline-style:none;outline-style:none}.btn-icon:where(.dark,.dark *){color:var(--color-gray-400)}@media (hover:hover){.btn-icon:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}}.color-btn,.brightness-btn{cursor:pointer;border-style:var(--tw-border-style);background-color:var(--color-neutral-200);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-neutral-700);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;border-width:2px;border-color:#0000;border-radius:3.40282e38px;transition-duration:.2s}@media (hover:hover){:is(.color-btn,.brightness-btn):hover{background-color:var(--color-primary-300)}}:is(.color-btn,.brightness-btn):where(.dark,.dark *){background-color:var(--color-neutral-700);color:var(--color-neutral-300)}@media (hover:hover){:is(.color-btn,.brightness-btn):where(.dark,.dark *):hover{background-color:var(--color-primary-700)}}.card{border-radius:var(--radius-lg);background-color:var(--color-primary-400);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.card:where(.dark,.dark *){background-color:var(--color-primary-400)}.card-bordered{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary-300);background-color:var(--color-primary-400);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.card-bordered:where(.dark,.dark *){border-color:var(--color-primary-800);background-color:var(--color-primary-400)}.card-section{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 5)}@media (min-width:40rem){.card-section{padding:calc(var(--spacing) * 6)}}.card-footer{background-color:var(--color-primary-400);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3)}@media (min-width:40rem){.card-footer{padding-inline:calc(var(--spacing) * 6);flex-direction:row-reverse;display:flex}}.card-footer:where(.dark,.dark *){background-color:var(--color-primary-400)}.form-input{border-radius:var(--radius-md);border-color:var(--color-gray-300);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);width:100%;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);display:block}.form-input:focus{border-color:var(--color-primary-500);--tw-ring-color:var(--color-primary-500)}@media (min-width:40rem){.form-input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.form-input:where(.dark,.dark *){border-color:var(--color-gray-600);background-color:var(--color-gray-700);color:var(--color-white)}.form-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-gray-700);display:block}.form-label:where(.dark,.dark *){color:var(--color-gray-300)}.badge{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-radius:3.40282e38px;align-items:center;display:inline-flex}.link-primary{color:var(--color-primary-600)}@media (hover:hover){.link-primary:hover{text-decoration-line:underline}}.link-primary:where(.dark,.dark *){color:var(--color-primary-400)}.link-muted{color:var(--color-gray-500)}@media (hover:hover){.link-muted:hover{color:var(--color-gray-700)}}.link-muted:where(.dark,.dark *){color:var(--color-gray-400)}@media (hover:hover){.link-muted:where(.dark,.dark *):hover{color:var(--color-gray-300)}}.heading-page{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-gray-900)}.heading-page:where(.dark,.dark *){color:var(--color-white)}.heading-section{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-gray-900)}.heading-section:where(.dark,.dark *){color:var(--color-white)}.modal-overlay{inset:calc(var(--spacing) * 0);z-index:50;position:fixed;overflow-y:auto}.modal-backdrop{inset:calc(var(--spacing) * 0);background-color:#6a7282bf;position:fixed}@supports (color:color-mix(in lab, red, red)){.modal-backdrop{background-color:color-mix(in oklab, var(--color-gray-500) 75%, transparent)}}.modal-backdrop{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.modal-backdrop:where(.dark,.dark *){background-color:#101828bf}@supports (color:color-mix(in lab, red, red)){.modal-backdrop:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 75%, transparent)}}.modal-panel{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-radius:var(--radius-lg);background-color:var(--color-white);text-align:left;vertical-align:bottom;--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));display:inline-block;position:relative;overflow:hidden}@media (min-width:40rem){.modal-panel{margin-block:calc(var(--spacing) * 8);width:100%;max-width:var(--container-lg);vertical-align:middle}}.modal-panel:where(.dark,.dark *){background-color:var(--color-gray-800)}.modal-body{background-color:var(--color-white);padding-inline:calc(var(--spacing) * 4);padding-top:calc(var(--spacing) * 5);padding-bottom:calc(var(--spacing) * 4)}@media (min-width:40rem){.modal-body{padding:calc(var(--spacing) * 6);padding-bottom:calc(var(--spacing) * 4)}}.modal-body:where(.dark,.dark *){background-color:var(--color-gray-800)}h1,h2,h3,h4,h5,h6{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--color-primary-700)}:is(h1,h2,h3,h4,h5,h6):where(.dark,.dark *){color:var(--color-neutral-50)}a{padding:calc(var(--spacing) * 1);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-primary-900);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s}@media (hover:hover){a:hover{color:var(--color-primary-600)}}a:where(.dark,.dark *){color:var(--color-primary-50)}@media (hover:hover){a:where(.dark,.dark *):hover{color:var(--color-primary-800)}}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-20{top:calc(var(--spacing) * 20)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.-mt-px{margin-top:-1px}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-0\.5{margin-left:calc(var(--spacing) * -.5)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-1{height:calc(var(--spacing) * 1)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-64{height:calc(var(--spacing) * 64)}.h-full{height:100%}.min-h-\[60vh\]{min-height:60vh}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-1\/2{width:50%}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-48{width:calc(var(--spacing) * 48)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[300px\]{min-width:300px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.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))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing) * 6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-green-200{border-color:var(--color-green-200)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-primary-200{border-color:var(--color-primary-200)}.border-primary-500,.border-primary-500\/30{border-color:var(--color-primary-500)}@supports (color:color-mix(in lab, red, red)){.border-primary-500\/30{border-color:color-mix(in oklab, var(--color-primary-500) 30%, transparent)}}.border-primary-600{border-color:var(--color-primary-600)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-yellow-200{border-color:var(--color-yellow-200)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-primary-50{background-color:var(--color-primary-50)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-400{background-color:var(--color-primary-400)}.bg-primary-500{background-color:var(--color-primary-500)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.bg-white\/20{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary-500{--tw-gradient-from:var(--color-primary-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary-600{--tw-gradient-from:var(--color-primary-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-primary-700{--tw-gradient-to:var(--color-primary-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-yellow-500{--tw-gradient-to:var(--color-yellow-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-gray-50{color:var(--color-gray-50)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-900{color:var(--color-neutral-900)}.text-primary-100{color:var(--color-primary-100)}.text-primary-200{color:var(--color-primary-200)}.text-primary-500{color:var(--color-primary-500)}.text-primary-600{color:var(--color-primary-600)}.text-primary-700{color:var(--color-primary-700)}.text-primary-800{color:var(--color-primary-800)}.text-primary-900{color:var(--color-primary-900)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-800{color:var(--color-yellow-800)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.ring-green-500{--tw-ring-color:var(--color-green-500)}.ring-neutral-300{--tw-ring-color:var(--color-neutral-300)}.ring-neutral-900{--tw-ring-color:var(--color-neutral-900)}.ring-primary-500{--tw-ring-color:var(--color-primary-500)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.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,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-primary-100:hover{background-color:var(--color-primary-100)}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:text-primary-900:hover{color:var(--color-primary-900)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:opacity-75:hover{opacity:.75}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (min-width:40rem){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-0{margin-inline:calc(var(--spacing) * 0)}.sm\:mt-0{margin-top:calc(var(--spacing) * 0)}.sm\:ml-3{margin-left:calc(var(--spacing) * 3)}.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:ml-6{margin-left:calc(var(--spacing) * 6)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:h-10{height:calc(var(--spacing) * 10)}.sm\:h-screen{height:100vh}.sm\:w-10{width:calc(var(--spacing) * 10)}.sm\:w-auto{width:auto}.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\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}:where(.sm\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 8) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-0{padding:calc(var(--spacing) * 0)}.sm\:px-0{padding-inline:calc(var(--spacing) * 0)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:48rem){.md\:-mt-px{margin-top:-1px}.md\:flex{display:flex}.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))}}@media (min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}:where(.dark\:divide-gray-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-gray-700)}.dark\:border-gray-600:where(.dark,.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:where(.dark,.dark *){border-color:var(--color-gray-700)}.dark\:border-green-700:where(.dark,.dark *){border-color:var(--color-green-700)}.dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--color-neutral-700)}.dark\:border-primary-700:where(.dark,.dark *){border-color:var(--color-primary-700)}.dark\:border-red-700:where(.dark,.dark *){border-color:var(--color-red-700)}.dark\:border-red-800:where(.dark,.dark *){border-color:var(--color-red-800)}.dark\:border-yellow-700:where(.dark,.dark *){border-color:var(--color-yellow-700)}.dark\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\:bg-gray-700\/50:where(.dark,.dark *){background-color:#36415380}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-700) 50%, transparent)}}.dark\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:bg-gray-900\/30:where(.dark,.dark *){background-color:#1018284d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 30%, transparent)}}.dark\:bg-gray-900\/50:where(.dark,.dark *){background-color:#10182880}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 50%, transparent)}}.dark\:bg-green-900:where(.dark,.dark *){background-color:var(--color-green-900)}.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:#0d542b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 30%, transparent)}}.dark\:bg-green-900\/50:where(.dark,.dark *){background-color:#0d542b80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 50%, transparent)}}.dark\:bg-neutral-600:where(.dark,.dark *){background-color:var(--color-neutral-600)}.dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--color-neutral-800)}.dark\:bg-primary-700:where(.dark,.dark *){background-color:var(--color-primary-700)}.dark\:bg-primary-900:where(.dark,.dark *),.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:var(--color-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-primary-900) 20%, transparent)}}.dark\:bg-primary-900\/30:where(.dark,.dark *){background-color:var(--color-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-primary-900) 30%, transparent)}}.dark\:bg-red-900:where(.dark,.dark *){background-color:var(--color-red-900)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.dark\:bg-red-900\/50:where(.dark,.dark *){background-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.dark\:bg-yellow-900:where(.dark,.dark *){background-color:var(--color-yellow-900)}.dark\:bg-yellow-900\/30:where(.dark,.dark *){background-color:#733e0a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-yellow-900) 30%, transparent)}}.dark\:from-primary-600:where(.dark,.dark *){--tw-gradient-from:var(--color-primary-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:to-primary-800:where(.dark,.dark *){--tw-gradient-to:var(--color-primary-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-green-700:where(.dark,.dark *){color:var(--color-green-700)}.dark\:text-neutral-300:where(.dark,.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:where(.dark,.dark *){color:var(--color-neutral-400)}.dark\:text-primary-50:where(.dark,.dark *){color:var(--color-primary-50)}.dark\:text-primary-200:where(.dark,.dark *){color:var(--color-primary-200)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--color-primary-300)}.dark\:text-primary-400:where(.dark,.dark *){color:var(--color-primary-400)}.dark\:text-red-200:where(.dark,.dark *){color:var(--color-red-200)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-700:where(.dark,.dark *){color:var(--color-red-700)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-200:where(.dark,.dark *){color:var(--color-yellow-200)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:text-yellow-700:where(.dark,.dark *){color:var(--color-yellow-700)}.dark\:placeholder-gray-500:where(.dark,.dark *)::placeholder{color:var(--color-gray-500)}.dark\:ring-neutral-600:where(.dark,.dark *){--tw-ring-color:var(--color-neutral-600)}.dark\:ring-white:where(.dark,.dark *){--tw-ring-color:var(--color-white)}.dark\:checked\:bg-primary-600:where(.dark,.dark *):checked{background-color:var(--color-primary-600)}@media (hover:hover){.dark\:hover\:bg-gray-600:where(.dark,.dark *):hover{background-color:var(--color-gray-600)}.dark\:hover\:bg-gray-700:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--color-neutral-700)}.dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--color-gray-300)}.dark\:hover\:text-green-300:where(.dark,.dark *):hover{color:var(--color-green-300)}.dark\:hover\:text-primary-300:where(.dark,.dark *):hover{color:var(--color-primary-300)}.dark\:hover\:text-red-300:where(.dark,.dark *):hover{color:var(--color-red-300)}}.dark\:focus\:ring-offset-gray-800:where(.dark,.dark *):focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus\:ring-offset-gray-900:where(.dark,.dark *):focus{--tw-ring-offset-color:var(--color-gray-900)}}:root.theme-blue-light{--color-primary-50:oklch(98.3% .008 264.52);--color-primary-100:oklch(96.1% .018 266.34);--color-primary-200:oklch(93.5% .035 267.89);--color-primary-300:oklch(89.8% .052 269.12);--color-primary-400:oklch(83.6% .095 270.22);--color-primary-500:oklch(77.2% .135 271.01);--color-primary-600:oklch(70.1% .156 272.45);--color-primary-700:oklch(62.4% .158 273.98);--color-primary-800:oklch(52.3% .145 274.65);--color-primary-900:oklch(42.1% .125 275.34);--color-primary-950:oklch(35.2% .095 276.12);--color-primary:var(--color-primary-600);--color-accent-100:oklch(96.8% .035 52.34);--color-accent-300:oklch(92.2% .065 52.34);--color-accent-400:oklch(90.2% .085 52.34);--color-accent-500:oklch(85.2% .125 52.34);--color-accent-600:oklch(78.5% .145 49.87);--color-accent-700:oklch(70.2% .155 49.87);--color-accent-800:oklch(62.5% .135 49.87);--color-accent-900:oklch(54.5% .125 49.87)}:root.theme-blue-dark{--color-primary-50:oklch(97.2% .016 264.52);--color-primary-100:oklch(93.5% .038 266.34);--color-primary-200:oklch(87.8% .075 267.89);--color-primary-300:oklch(79.4% .125 269.12);--color-primary-400:oklch(68.5% .195 270.22);--color-primary-500:oklch(59.7% .245 271.01);--color-primary-600:oklch(51.8% .258 272.45);--color-primary-700:oklch(43.2% .242 273.98);--color-primary-800:oklch(34.5% .215 274.65);--color-primary-900:oklch(25.8% .165 275.34);--color-primary-950:oklch(19.2% .125 276.12);--color-primary:var(--color-primary-400);--color-accent-100:oklch(92.5% .075 52.34);--color-accent-300:oklch(85.1% .145 52.34);--color-accent-400:oklch(80.1% .175 52.34);--color-accent-500:oklch(72.1% .215 52.34);--color-accent-600:oklch(65.3% .235 49.87);--color-accent-700:oklch(57.2% .245 49.87);--color-accent-800:oklch(48.8% .225 49.87);--color-accent-900:oklch(39.8% .195 49.87)}:root.theme-red-light{--color-primary-50:oklch(98.5% .006 17.38);--color-primary-100:oklch(96.2% .015 17.72);--color-primary-200:oklch(93.8% .03 18.33);--color-primary-300:oklch(90.2% .048 19.57);--color-primary-400:oklch(84.6% .08 22.22);--color-primary-500:oklch(78.5% .12 25.33);--color-primary-600:oklch(72.1% .14 27.1);--color-primary-700:oklch(65.3% .15 28.96);--color-primary-800:oklch(55.2% .12 32.46);--color-primary-900:oklch(45.1% .1 35.08);--color-primary-950:oklch(35.2% .08 36.5);--color-primary:var(--color-primary-600);--color-accent-100:oklch(95.8% .025 47.6);--color-accent-300:oklch(91.2% .048 47.6);--color-accent-400:oklch(88.2% .065 47.6);--color-accent-500:oklch(82.1% .108 47.6);--color-accent-600:oklch(76.3% .14 41.12);--color-accent-700:oklch(68.5% .15 41.12);--color-accent-800:oklch(60.3% .13 41.12);--color-accent-900:oklch(52.3% .12 41.12)}:root.theme-red-dark{--color-primary-50:oklch(97.1% .013 17.38);--color-primary-100:oklch(93.6% .032 17.72);--color-primary-200:oklch(88.5% .062 18.33);--color-primary-300:oklch(80.8% .114 19.57);--color-primary-400:oklch(70.4% .191 22.22);--color-primary-500:oklch(63.7% .237 25.33);--color-primary-600:oklch(56.2% .24 26.83);--color-primary-700:oklch(47.3% .222 27.65);--color-primary-800:oklch(38.1% .198 28.01);--color-primary-900:oklch(28.4% .145 29.23);--color-primary-950:oklch(22.1% .098 31.05);--color-primary:var(--color-primary-400);--color-accent-100:oklch(90.5% .045 47.6);--color-accent-300:oklch(84.5% .125 47.6);--color-accent-400:oklch(78.5% .165 47.6);--color-accent-500:oklch(70.5% .213 47.6);--color-accent-600:oklch(64.6% .222 41.12);--color-accent-700:oklch(56.3% .215 41.12);--color-accent-800:oklch(47.2% .195 41.12);--color-accent-900:oklch(38.2% .165 41.12)}:root.theme-green-light{--color-primary-50:oklch(98.2% .007 146.71);--color-primary-100:oklch(95.9% .018 148.45);--color-primary-200:oklch(93.1% .032 149.87);--color-primary-300:oklch(89.2% .055 151.23);--color-primary-400:oklch(82.5% .105 153.12);--color-primary-500:oklch(75.8% .142 155.34);--color-primary-600:oklch(68.3% .152 156.89);--color-primary-700:oklch(60.2% .148 158.12);--color-primary-800:oklch(49.8% .135 159.45);--color-primary-900:oklch(39.5% .115 160.67);--color-primary-950:oklch(32.1% .088 161.23);--color-primary:var(--color-primary-600);--color-accent-100:oklch(97.5% .025 89.34);--color-accent-300:oklch(94.4% .045 89.34);--color-accent-400:oklch(92.4% .065 89.34);--color-accent-500:oklch(86.4% .095 89.34);--color-accent-600:oklch(80.2% .125 87.65);--color-accent-700:oklch(72.5% .135 87.65);--color-accent-800:oklch(64.8% .115 87.65);--color-accent-900:oklch(56.8% .105 87.65)}:root.theme-green-dark{--color-primary-50:oklch(97.1% .014 146.71);--color-primary-100:oklch(93.4% .038 148.45);--color-primary-200:oklch(87.5% .068 149.87);--color-primary-300:oklch(78.9% .118 151.23);--color-primary-400:oklch(67.2% .195 153.12);--color-primary-500:oklch(57.5% .252 155.34);--color-primary-600:oklch(49.1% .268 156.89);--color-primary-700:oklch(40.3% .248 158.12);--color-primary-800:oklch(31.5% .215 159.45);--color-primary-900:oklch(23.8% .165 160.67);--color-primary-950:oklch(17.9% .125 161.23);--color-primary:var(--color-primary-400);--color-accent-100:oklch(93.5% .055 89.34);--color-accent-300:oklch(87.5% .115 89.34);--color-accent-400:oklch(82.5% .145 89.34);--color-accent-500:oklch(71.5% .185 89.34);--color-accent-600:oklch(64.8% .205 87.65);--color-accent-700:oklch(56.5% .215 87.65);--color-accent-800:oklch(47.8% .195 87.65);--color-accent-900:oklch(39.2% .165 87.65)}:root.theme-yellow-light{--color-primary-50:oklch(98.8% .004 104.23);--color-primary-100:oklch(97.2% .012 107.45);--color-primary-200:oklch(94.8% .028 109.87);--color-primary-300:oklch(91.2% .048 112.34);--color-primary-400:oklch(85.9% .09 115.12);--color-primary-500:oklch(79.6% .125 117.89);--color-primary-600:oklch(72.3% .135 119.45);--color-primary-700:oklch(64.1% .128 121.23);--color-primary-800:oklch(54.2% .115 123.12);--color-primary-900:oklch(43.8% .095 124.67);--color-primary-950:oklch(36.5% .075 125.34);--color-primary:var(--color-primary-600);--color-accent-100:oklch(95.2% .045 25.12);--color-accent-300:oklch(88.2% .095 25.12);--color-accent-400:oklch(82.2% .125 25.12);--color-accent-500:oklch(70.2% .185 25.12);--color-accent-600:oklch(62.8% .215 22.45);--color-accent-700:oklch(54.5% .225 22.45);--color-accent-800:oklch(46.2% .205 22.45);--color-accent-900:oklch(38.2% .175 22.45)}:root.theme-yellow-dark{--color-primary-50:oklch(97.3% .008 104.23);--color-primary-100:oklch(93.8% .028 107.45);--color-primary-200:oklch(88.5% .062 109.87);--color-primary-300:oklch(80.2% .108 112.34);--color-primary-400:oklch(69.4% .185 115.12);--color-primary-500:oklch(59.8% .245 117.89);--color-primary-600:oklch(51.2% .258 119.45);--color-primary-700:oklch(42.5% .242 121.23);--color-primary-800:oklch(33.8% .215 123.12);--color-primary-900:oklch(25.1% .165 124.67);--color-primary-950:oklch(18.9% .125 125.34);--color-primary:var(--color-primary-400);--color-accent-100:oklch(90.3% .095 25.12);--color-accent-300:oklch(76.3% .175 25.12);--color-accent-400:oklch(70.3% .205 25.12);--color-accent-500:oklch(58.3% .245 25.12);--color-accent-600:oklch(51.2% .265 22.45);--color-accent-700:oklch(43.2% .275 22.45);--color-accent-800:oklch(35.8% .255 22.45);--color-accent-900:oklch(28.5% .215 22.45)}:root{--color-neutral-50:oklch(97.1% .001 0);--color-neutral-100:oklch(94.2% .002 0);--color-neutral-200:oklch(89.4% .005 0);--color-neutral-300:oklch(84.1% .008 0);--color-neutral-400:oklch(76.3% .012 0);--color-neutral-500:oklch(64.2% .015 0);--color-neutral-600:oklch(52.8% .014 0);--color-neutral-700:oklch(42.3% .012 0);--color-neutral-800:oklch(30.1% .01 0);--color-neutral-900:oklch(20.2% .008 0);--color-neutral-950:oklch(10.1% .004 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
\ No newline at end of file
+@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-blue-500:oklch(62.3% .214 259.815);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-neutral-50:var(--color-neutral-50);--color-neutral-100:var(--color-neutral-100);--color-neutral-200:var(--color-neutral-200);--color-neutral-300:var(--color-neutral-300);--color-neutral-400:var(--color-neutral-400);--color-neutral-500:var(--color-neutral-500);--color-neutral-600:var(--color-neutral-600);--color-neutral-700:var(--color-neutral-700);--color-neutral-800:var(--color-neutral-800);--color-neutral-900:var(--color-neutral-900);--color-neutral-950:var(--color-neutral-950);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--radius-md:.375rem;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-primary-50:var(--color-primary-50);--color-primary-100:var(--color-primary-100);--color-primary-200:var(--color-primary-200);--color-primary-300:var(--color-primary-300);--color-primary-400:var(--color-primary-400);--color-primary-500:var(--color-primary-500);--color-primary-600:var(--color-primary-600);--color-primary-700:var(--color-primary-700);--color-primary-800:var(--color-primary-800);--color-primary-900:var(--color-primary-900);--color-primary-950:var(--color-primary-950);--color-accent-100:var(--color-accent-100);--color-accent-300:var(--color-accent-300);--color-accent-400:var(--color-accent-400);--color-accent-500:var(--color-accent-500);--color-accent-600:var(--color-accent-600);--color-accent-700:var(--color-accent-700);--color-accent-800:var(--color-accent-800);--color-accent-900:var(--color-accent-900)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}h1:focus{outline:none}}@layer components{@keyframes slide-in-right{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.animate-slide-in-right{animation:.3s ease-out slide-in-right}@keyframes slide-in-down{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}.animate-slide-in-down{animation:.3s ease-out slide-in-down}@keyframes slide-in-up{0%{opacity:0;transform:translate(-50%)translateY(100%)}to{opacity:1;transform:translate(-50%)translateY(0)}}.animate-slide-in-up{animation:.3s ease-out slide-in-up}.valid.modified:not([type=checkbox]){outline:1px solid #26b050}.invalid{outline:1px solid #e50000}.validation-message{color:#e50000}.blazor-error-boundary{color:#fff;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) 1rem/1.8rem no-repeat,#b32121;padding:1rem 1rem 1rem 3.7rem}.blazor-error-boundary:after{content:"An error has occurred."}.darker-border-checkbox.form-check-input{border-color:#929292}.form-floating>.form-control-plaintext:focus::placeholder,.form-floating>.form-control:focus::placeholder{text-align:start}.active-theme,.active-theme:where(.dark,.dark *){background-color:var(--color-primary-400)}.btn{cursor:pointer;border-style:var(--tw-border-style);padding-inline:calc(var(--spacing) * 5);padding-block:calc(var(--spacing) * 2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:var(--leading-tight);line-height:var(--leading-tight);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);border-width:1px;border-color:#0000;border-radius:3.40282e38px;align-items:center;display:inline-flex}.btn:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-outline-style:none;outline-style:none}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{border-style:var(--tw-border-style);background-color:var(--color-green-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-primary:hover{background-color:var(--color-green-900)}}.btn-primary:focus{--tw-ring-color:var(--color-primary-500)}.btn-primary:where(.dark,.dark *){background-color:var(--color-green-600)}@media (hover:hover){.btn-primary:where(.dark,.dark *):hover{background-color:var(--color-green-900)}}.btn-secondary{border-style:var(--tw-border-style);background-color:var(--color-orange-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-secondary:hover{background-color:var(--color-orange-900)}}.btn-secondary:where(.dark,.dark *){background-color:var(--color-orange-600)}@media (hover:hover){.btn-secondary:where(.dark,.dark *):hover{background-color:var(--color-orange-900)}}.btn-warning{border-style:var(--tw-border-style);background-color:var(--color-red-600);color:var(--color-white);border-width:2px;border-color:#0000}@media (hover:hover){.btn-warning:hover{background-color:var(--color-red-900)}}.btn-warning:where(.dark,.dark *){background-color:var(--color-red-600)}@media (hover:hover){.btn-warning:where(.dark,.dark *):hover{background-color:var(--color-red-900)}}.btn-icon{border-radius:var(--radius-lg);padding:calc(var(--spacing) * 2);color:var(--color-gray-500);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.btn-icon:hover{background-color:var(--color-gray-100)}}.btn-icon:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-ring-color:var(--color-primary-500);--tw-outline-style:none;outline-style:none}.btn-icon:where(.dark,.dark *){color:var(--color-gray-400)}@media (hover:hover){.btn-icon:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}}.color-btn,.brightness-btn{cursor:pointer;border-style:var(--tw-border-style);background-color:var(--color-neutral-200);padding-inline:calc(var(--spacing) * 3);padding-block:calc(var(--spacing) * 2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-neutral-700);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;border-width:2px;border-color:#0000;border-radius:3.40282e38px;transition-duration:.2s}@media (hover:hover){:is(.color-btn,.brightness-btn):hover{background-color:var(--color-primary-300)}}:is(.color-btn,.brightness-btn):where(.dark,.dark *){background-color:var(--color-neutral-700);color:var(--color-neutral-300)}@media (hover:hover){:is(.color-btn,.brightness-btn):where(.dark,.dark *):hover{background-color:var(--color-primary-700)}}.card{border-radius:var(--radius-lg);background-color:var(--color-primary-400);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.card:where(.dark,.dark *){background-color:var(--color-primary-400)}.card-bordered{border-radius:var(--radius-lg);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-primary-300);background-color:var(--color-primary-400);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.card-bordered:where(.dark,.dark *){border-color:var(--color-primary-800);background-color:var(--color-primary-400)}.card-section{padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 5)}@media (min-width:40rem){.card-section{padding:calc(var(--spacing) * 6)}}.card-footer{background-color:var(--color-primary-400);padding-inline:calc(var(--spacing) * 4);padding-block:calc(var(--spacing) * 3)}@media (min-width:40rem){.card-footer{padding-inline:calc(var(--spacing) * 6);flex-direction:row-reverse;display:flex}}.card-footer:where(.dark,.dark *){background-color:var(--color-primary-400)}.form-input{border-radius:var(--radius-md);border-color:var(--color-gray-300);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);width:100%;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);display:block}.form-input:focus{border-color:var(--color-primary-500);--tw-ring-color:var(--color-primary-500)}@media (min-width:40rem){.form-input{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.form-input:where(.dark,.dark *){border-color:var(--color-gray-600);background-color:var(--color-gray-700);color:var(--color-white)}.form-label{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-gray-700);display:block}.form-label:where(.dark,.dark *){color:var(--color-gray-300)}.badge{padding-inline:calc(var(--spacing) * 2.5);padding-block:calc(var(--spacing) * .5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);border-radius:3.40282e38px;align-items:center;display:inline-flex}.link-primary{color:var(--color-primary-600)}@media (hover:hover){.link-primary:hover{text-decoration-line:underline}}.link-primary:where(.dark,.dark *){color:var(--color-primary-400)}.link-muted{color:var(--color-gray-500)}@media (hover:hover){.link-muted:hover{color:var(--color-gray-700)}}.link-muted:where(.dark,.dark *){color:var(--color-gray-400)}@media (hover:hover){.link-muted:where(.dark,.dark *):hover{color:var(--color-gray-300)}}.heading-page{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--color-gray-900)}.heading-page:where(.dark,.dark *){color:var(--color-white)}.heading-section{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--color-gray-900)}.heading-section:where(.dark,.dark *){color:var(--color-white)}.modal-overlay{inset:calc(var(--spacing) * 0);z-index:50;position:fixed;overflow-y:auto}.modal-backdrop{inset:calc(var(--spacing) * 0);background-color:#6a7282bf;position:fixed}@supports (color:color-mix(in lab, red, red)){.modal-backdrop{background-color:color-mix(in oklab, var(--color-gray-500) 75%, transparent)}}.modal-backdrop{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.modal-backdrop:where(.dark,.dark *){background-color:#101828bf}@supports (color:color-mix(in lab, red, red)){.modal-backdrop:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 75%, transparent)}}.modal-panel{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-radius:var(--radius-lg);background-color:var(--color-white);text-align:left;vertical-align:bottom;--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));display:inline-block;position:relative;overflow:hidden}@media (min-width:40rem){.modal-panel{margin-block:calc(var(--spacing) * 8);width:100%;max-width:var(--container-lg);vertical-align:middle}}.modal-panel:where(.dark,.dark *){background-color:var(--color-gray-800)}.modal-body{background-color:var(--color-white);padding-inline:calc(var(--spacing) * 4);padding-top:calc(var(--spacing) * 5);padding-bottom:calc(var(--spacing) * 4)}@media (min-width:40rem){.modal-body{padding:calc(var(--spacing) * 6);padding-bottom:calc(var(--spacing) * 4)}}.modal-body:where(.dark,.dark *){background-color:var(--color-gray-800)}h1,h2,h3,h4,h5,h6{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--color-primary-700)}:is(h1,h2,h3,h4,h5,h6):where(.dark,.dark *){color:var(--color-neutral-50)}a{padding:calc(var(--spacing) * 1);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--color-primary-900);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s}@media (hover:hover){a:hover{color:var(--color-primary-600)}}a:where(.dark,.dark *){color:var(--color-primary-50)}@media (hover:hover){a:where(.dark,.dark *):hover{color:var(--color-primary-800)}}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-20{top:calc(var(--spacing) * 20)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.-mt-1{margin-top:calc(var(--spacing) * -1)}.-mt-px{margin-top:-1px}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-0\.5{margin-left:calc(var(--spacing) * -.5)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.h-1{height:calc(var(--spacing) * 1)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-64{height:calc(var(--spacing) * 64)}.h-full{height:100%}.min-h-\[60vh\]{min-height:60vh}.min-h-screen{min-height:100vh}.w-0{width:calc(var(--spacing) * 0)}.w-1\/2{width:50%}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-48{width:calc(var(--spacing) * 48)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[300px\]{min-width:300px}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.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))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-6>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 6) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-6{row-gap:calc(var(--spacing) * 6)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-green-200{border-color:var(--color-green-200)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-primary-200{border-color:var(--color-primary-200)}.border-primary-500{border-color:var(--color-primary-500)}.border-primary-600{border-color:var(--color-primary-600)}.border-primary-800{border-color:var(--color-primary-800)}.border-red-200{border-color:var(--color-red-200)}.border-transparent{border-color:#0000}.border-yellow-200{border-color:var(--color-yellow-200)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black{background-color:var(--color-black)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-400{background-color:var(--color-green-400)}.bg-green-500{background-color:var(--color-green-500)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-primary-50{background-color:var(--color-primary-50)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-400{background-color:var(--color-primary-400)}.bg-primary-500{background-color:var(--color-primary-500)}.bg-primary-600{background-color:var(--color-primary-600)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-500{background-color:var(--color-red-500)}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.bg-white\/20{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-primary-500{--tw-gradient-from:var(--color-primary-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-primary-600{--tw-gradient-from:var(--color-primary-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-primary-700{--tw-gradient-to:var(--color-primary-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-yellow-500{--tw-gradient-to:var(--color-yellow-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-cover{object-fit:cover}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-gray-50{color:var(--color-gray-50)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-400{color:var(--color-green-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-neutral-500{color:var(--color-neutral-500)}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-900{color:var(--color-neutral-900)}.text-primary-100{color:var(--color-primary-100)}.text-primary-200{color:var(--color-primary-200)}.text-primary-500{color:var(--color-primary-500)}.text-primary-600{color:var(--color-primary-600)}.text-primary-700{color:var(--color-primary-700)}.text-primary-800{color:var(--color-primary-800)}.text-primary-900{color:var(--color-primary-900)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-300{color:var(--color-yellow-300)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-800{color:var(--color-yellow-800)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.ring-green-500{--tw-ring-color:var(--color-green-500)}.ring-neutral-300{--tw-ring-color:var(--color-neutral-300)}.ring-neutral-900{--tw-ring-color:var(--color-neutral-900)}.ring-primary-500{--tw-ring-color:var(--color-primary-500)}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.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,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media (hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\:bg-neutral-200:hover{background-color:var(--color-neutral-200)}.hover\:bg-primary-100:hover{background-color:var(--color-primary-100)}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:text-gray-500:hover{color:var(--color-gray-500)}.hover\:text-gray-700:hover{color:var(--color-gray-700)}.hover\:text-green-600:hover{color:var(--color-green-600)}.hover\:text-green-900:hover{color:var(--color-green-900)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:text-primary-900:hover{color:var(--color-primary-900)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-red-900:hover{color:var(--color-red-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:opacity-75:hover{opacity:.75}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-green-500:focus{--tw-ring-color:var(--color-green-500)}.focus\:ring-primary-500:focus{--tw-ring-color:var(--color-primary-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-1:focus{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}@media (min-width:40rem){.sm\:col-span-1{grid-column:span 1/span 1}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-0{margin-inline:calc(var(--spacing) * 0)}.sm\:mt-0{margin-top:calc(var(--spacing) * 0)}.sm\:ml-3{margin-left:calc(var(--spacing) * 3)}.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:ml-6{margin-left:calc(var(--spacing) * 6)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:inline-block{display:inline-block}.sm\:h-10{height:calc(var(--spacing) * 10)}.sm\:h-screen{height:100vh}.sm\:w-10{width:calc(var(--spacing) * 10)}.sm\:w-auto{width:auto}.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\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}:where(.sm\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 8) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:p-0{padding:calc(var(--spacing) * 0)}.sm\:px-0{padding-inline:calc(var(--spacing) * 0)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (min-width:48rem){.md\:-mt-px{margin-top:-1px}.md\:flex{display:flex}.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))}}@media (min-width:64rem){.lg\:col-span-1{grid-column:span 1/span 1}.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}:where(.dark\:divide-gray-700:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-gray-700)}.dark\:border-gray-600:where(.dark,.dark *){border-color:var(--color-gray-600)}.dark\:border-gray-700:where(.dark,.dark *){border-color:var(--color-gray-700)}.dark\:border-green-700:where(.dark,.dark *){border-color:var(--color-green-700)}.dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--color-neutral-700)}.dark\:border-primary-700:where(.dark,.dark *){border-color:var(--color-primary-700)}.dark\:border-red-700:where(.dark,.dark *){border-color:var(--color-red-700)}.dark\:border-red-800:where(.dark,.dark *){border-color:var(--color-red-800)}.dark\:border-yellow-700:where(.dark,.dark *){border-color:var(--color-yellow-700)}.dark\:bg-gray-700:where(.dark,.dark *){background-color:var(--color-gray-700)}.dark\:bg-gray-700\/50:where(.dark,.dark *){background-color:#36415380}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-700\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-700) 50%, transparent)}}.dark\:bg-gray-800:where(.dark,.dark *){background-color:var(--color-gray-800)}.dark\:bg-gray-900:where(.dark,.dark *){background-color:var(--color-gray-900)}.dark\:bg-gray-900\/30:where(.dark,.dark *){background-color:#1018284d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 30%, transparent)}}.dark\:bg-gray-900\/50:where(.dark,.dark *){background-color:#10182880}@supports (color:color-mix(in lab, red, red)){.dark\:bg-gray-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-gray-900) 50%, transparent)}}.dark\:bg-green-900:where(.dark,.dark *){background-color:var(--color-green-900)}.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:#0d542b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 30%, transparent)}}.dark\:bg-green-900\/50:where(.dark,.dark *){background-color:#0d542b80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 50%, transparent)}}.dark\:bg-neutral-600:where(.dark,.dark *){background-color:var(--color-neutral-600)}.dark\:bg-neutral-800:where(.dark,.dark *){background-color:var(--color-neutral-800)}.dark\:bg-primary-400:where(.dark,.dark *){background-color:var(--color-primary-400)}.dark\:bg-primary-700:where(.dark,.dark *){background-color:var(--color-primary-700)}.dark\:bg-primary-900:where(.dark,.dark *),.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:var(--color-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-primary-900) 20%, transparent)}}.dark\:bg-primary-900\/30:where(.dark,.dark *){background-color:var(--color-primary-900)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-primary-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-primary-900) 30%, transparent)}}.dark\:bg-red-900:where(.dark,.dark *){background-color:var(--color-red-900)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:#82181a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 30%, transparent)}}.dark\:bg-red-900\/50:where(.dark,.dark *){background-color:#82181a80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 50%, transparent)}}.dark\:bg-yellow-900:where(.dark,.dark *){background-color:var(--color-yellow-900)}.dark\:bg-yellow-900\/30:where(.dark,.dark *){background-color:#733e0a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-yellow-900) 30%, transparent)}}.dark\:from-primary-600:where(.dark,.dark *){--tw-gradient-from:var(--color-primary-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:to-primary-800:where(.dark,.dark *){--tw-gradient-to:var(--color-primary-800);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:text-gray-100:where(.dark,.dark *){color:var(--color-gray-100)}.dark\:text-gray-200:where(.dark,.dark *){color:var(--color-gray-200)}.dark\:text-gray-300:where(.dark,.dark *){color:var(--color-gray-300)}.dark\:text-gray-400:where(.dark,.dark *){color:var(--color-gray-400)}.dark\:text-green-200:where(.dark,.dark *){color:var(--color-green-200)}.dark\:text-green-300:where(.dark,.dark *){color:var(--color-green-300)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-green-700:where(.dark,.dark *){color:var(--color-green-700)}.dark\:text-neutral-300:where(.dark,.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:where(.dark,.dark *){color:var(--color-neutral-400)}.dark\:text-primary-50:where(.dark,.dark *){color:var(--color-primary-50)}.dark\:text-primary-200:where(.dark,.dark *){color:var(--color-primary-200)}.dark\:text-primary-300:where(.dark,.dark *){color:var(--color-primary-300)}.dark\:text-primary-400:where(.dark,.dark *){color:var(--color-primary-400)}.dark\:text-red-200:where(.dark,.dark *){color:var(--color-red-200)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-red-700:where(.dark,.dark *){color:var(--color-red-700)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-200:where(.dark,.dark *){color:var(--color-yellow-200)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:text-yellow-700:where(.dark,.dark *){color:var(--color-yellow-700)}.dark\:placeholder-gray-500:where(.dark,.dark *)::placeholder{color:var(--color-gray-500)}.dark\:ring-neutral-600:where(.dark,.dark *){--tw-ring-color:var(--color-neutral-600)}.dark\:ring-white:where(.dark,.dark *){--tw-ring-color:var(--color-white)}.dark\:checked\:bg-primary-600:where(.dark,.dark *):checked{background-color:var(--color-primary-600)}@media (hover:hover){.dark\:hover\:bg-gray-600:where(.dark,.dark *):hover{background-color:var(--color-gray-600)}.dark\:hover\:bg-gray-700:where(.dark,.dark *):hover{background-color:var(--color-gray-700)}.dark\:hover\:bg-neutral-700:where(.dark,.dark *):hover{background-color:var(--color-neutral-700)}.dark\:hover\:text-gray-300:where(.dark,.dark *):hover{color:var(--color-gray-300)}.dark\:hover\:text-green-300:where(.dark,.dark *):hover{color:var(--color-green-300)}.dark\:hover\:text-primary-300:where(.dark,.dark *):hover{color:var(--color-primary-300)}.dark\:hover\:text-red-300:where(.dark,.dark *):hover{color:var(--color-red-300)}}.dark\:focus\:ring-offset-gray-800:where(.dark,.dark *):focus{--tw-ring-offset-color:var(--color-gray-800)}.dark\:focus\:ring-offset-gray-900:where(.dark,.dark *):focus{--tw-ring-offset-color:var(--color-gray-900)}}:root.theme-blue-light{--color-primary-50:oklch(98.3% .008 264.52);--color-primary-100:oklch(96.1% .018 266.34);--color-primary-200:oklch(93.5% .035 267.89);--color-primary-300:oklch(89.8% .052 269.12);--color-primary-400:oklch(83.6% .095 270.22);--color-primary-500:oklch(77.2% .135 271.01);--color-primary-600:oklch(70.1% .156 272.45);--color-primary-700:oklch(62.4% .158 273.98);--color-primary-800:oklch(52.3% .145 274.65);--color-primary-900:oklch(42.1% .125 275.34);--color-primary-950:oklch(35.2% .095 276.12);--color-primary:var(--color-primary-600);--color-accent-100:oklch(96.8% .035 52.34);--color-accent-300:oklch(92.2% .065 52.34);--color-accent-400:oklch(90.2% .085 52.34);--color-accent-500:oklch(85.2% .125 52.34);--color-accent-600:oklch(78.5% .145 49.87);--color-accent-700:oklch(70.2% .155 49.87);--color-accent-800:oklch(62.5% .135 49.87);--color-accent-900:oklch(54.5% .125 49.87)}:root.theme-blue-dark{--color-primary-50:oklch(97.2% .016 264.52);--color-primary-100:oklch(93.5% .038 266.34);--color-primary-200:oklch(87.8% .075 267.89);--color-primary-300:oklch(79.4% .125 269.12);--color-primary-400:oklch(68.5% .195 270.22);--color-primary-500:oklch(59.7% .245 271.01);--color-primary-600:oklch(51.8% .258 272.45);--color-primary-700:oklch(43.2% .242 273.98);--color-primary-800:oklch(34.5% .215 274.65);--color-primary-900:oklch(25.8% .165 275.34);--color-primary-950:oklch(19.2% .125 276.12);--color-primary:var(--color-primary-400);--color-accent-100:oklch(92.5% .075 52.34);--color-accent-300:oklch(85.1% .145 52.34);--color-accent-400:oklch(80.1% .175 52.34);--color-accent-500:oklch(72.1% .215 52.34);--color-accent-600:oklch(65.3% .235 49.87);--color-accent-700:oklch(57.2% .245 49.87);--color-accent-800:oklch(48.8% .225 49.87);--color-accent-900:oklch(39.8% .195 49.87)}:root.theme-red-light{--color-primary-50:oklch(98.5% .006 17.38);--color-primary-100:oklch(96.2% .015 17.72);--color-primary-200:oklch(93.8% .03 18.33);--color-primary-300:oklch(90.2% .048 19.57);--color-primary-400:oklch(84.6% .08 22.22);--color-primary-500:oklch(78.5% .12 25.33);--color-primary-600:oklch(72.1% .14 27.1);--color-primary-700:oklch(65.3% .15 28.96);--color-primary-800:oklch(55.2% .12 32.46);--color-primary-900:oklch(45.1% .1 35.08);--color-primary-950:oklch(35.2% .08 36.5);--color-primary:var(--color-primary-600);--color-accent-100:oklch(95.8% .025 47.6);--color-accent-300:oklch(91.2% .048 47.6);--color-accent-400:oklch(88.2% .065 47.6);--color-accent-500:oklch(82.1% .108 47.6);--color-accent-600:oklch(76.3% .14 41.12);--color-accent-700:oklch(68.5% .15 41.12);--color-accent-800:oklch(60.3% .13 41.12);--color-accent-900:oklch(52.3% .12 41.12)}:root.theme-red-dark{--color-primary-50:oklch(97.1% .013 17.38);--color-primary-100:oklch(93.6% .032 17.72);--color-primary-200:oklch(88.5% .062 18.33);--color-primary-300:oklch(80.8% .114 19.57);--color-primary-400:oklch(70.4% .191 22.22);--color-primary-500:oklch(63.7% .237 25.33);--color-primary-600:oklch(56.2% .24 26.83);--color-primary-700:oklch(47.3% .222 27.65);--color-primary-800:oklch(38.1% .198 28.01);--color-primary-900:oklch(28.4% .145 29.23);--color-primary-950:oklch(22.1% .098 31.05);--color-primary:var(--color-primary-400);--color-accent-100:oklch(90.5% .045 47.6);--color-accent-300:oklch(84.5% .125 47.6);--color-accent-400:oklch(78.5% .165 47.6);--color-accent-500:oklch(70.5% .213 47.6);--color-accent-600:oklch(64.6% .222 41.12);--color-accent-700:oklch(56.3% .215 41.12);--color-accent-800:oklch(47.2% .195 41.12);--color-accent-900:oklch(38.2% .165 41.12)}:root.theme-green-light{--color-primary-50:oklch(98.2% .007 146.71);--color-primary-100:oklch(95.9% .018 148.45);--color-primary-200:oklch(93.1% .032 149.87);--color-primary-300:oklch(89.2% .055 151.23);--color-primary-400:oklch(82.5% .105 153.12);--color-primary-500:oklch(75.8% .142 155.34);--color-primary-600:oklch(68.3% .152 156.89);--color-primary-700:oklch(60.2% .148 158.12);--color-primary-800:oklch(49.8% .135 159.45);--color-primary-900:oklch(39.5% .115 160.67);--color-primary-950:oklch(32.1% .088 161.23);--color-primary:var(--color-primary-600);--color-accent-100:oklch(97.5% .025 89.34);--color-accent-300:oklch(94.4% .045 89.34);--color-accent-400:oklch(92.4% .065 89.34);--color-accent-500:oklch(86.4% .095 89.34);--color-accent-600:oklch(80.2% .125 87.65);--color-accent-700:oklch(72.5% .135 87.65);--color-accent-800:oklch(64.8% .115 87.65);--color-accent-900:oklch(56.8% .105 87.65)}:root.theme-green-dark{--color-primary-50:oklch(97.1% .014 146.71);--color-primary-100:oklch(93.4% .038 148.45);--color-primary-200:oklch(87.5% .068 149.87);--color-primary-300:oklch(78.9% .118 151.23);--color-primary-400:oklch(67.2% .195 153.12);--color-primary-500:oklch(57.5% .252 155.34);--color-primary-600:oklch(49.1% .268 156.89);--color-primary-700:oklch(40.3% .248 158.12);--color-primary-800:oklch(31.5% .215 159.45);--color-primary-900:oklch(23.8% .165 160.67);--color-primary-950:oklch(17.9% .125 161.23);--color-primary:var(--color-primary-400);--color-accent-100:oklch(93.5% .055 89.34);--color-accent-300:oklch(87.5% .115 89.34);--color-accent-400:oklch(82.5% .145 89.34);--color-accent-500:oklch(71.5% .185 89.34);--color-accent-600:oklch(64.8% .205 87.65);--color-accent-700:oklch(56.5% .215 87.65);--color-accent-800:oklch(47.8% .195 87.65);--color-accent-900:oklch(39.2% .165 87.65)}:root.theme-yellow-light{--color-primary-50:oklch(98.8% .004 104.23);--color-primary-100:oklch(97.2% .012 107.45);--color-primary-200:oklch(94.8% .028 109.87);--color-primary-300:oklch(91.2% .048 112.34);--color-primary-400:oklch(85.9% .09 115.12);--color-primary-500:oklch(79.6% .125 117.89);--color-primary-600:oklch(72.3% .135 119.45);--color-primary-700:oklch(64.1% .128 121.23);--color-primary-800:oklch(54.2% .115 123.12);--color-primary-900:oklch(43.8% .095 124.67);--color-primary-950:oklch(36.5% .075 125.34);--color-primary:var(--color-primary-600);--color-accent-100:oklch(95.2% .045 25.12);--color-accent-300:oklch(88.2% .095 25.12);--color-accent-400:oklch(82.2% .125 25.12);--color-accent-500:oklch(70.2% .185 25.12);--color-accent-600:oklch(62.8% .215 22.45);--color-accent-700:oklch(54.5% .225 22.45);--color-accent-800:oklch(46.2% .205 22.45);--color-accent-900:oklch(38.2% .175 22.45)}:root.theme-yellow-dark{--color-primary-50:oklch(97.3% .008 104.23);--color-primary-100:oklch(93.8% .028 107.45);--color-primary-200:oklch(88.5% .062 109.87);--color-primary-300:oklch(80.2% .108 112.34);--color-primary-400:oklch(69.4% .185 115.12);--color-primary-500:oklch(59.8% .245 117.89);--color-primary-600:oklch(51.2% .258 119.45);--color-primary-700:oklch(42.5% .242 121.23);--color-primary-800:oklch(33.8% .215 123.12);--color-primary-900:oklch(25.1% .165 124.67);--color-primary-950:oklch(18.9% .125 125.34);--color-primary:var(--color-primary-400);--color-accent-100:oklch(90.3% .095 25.12);--color-accent-300:oklch(76.3% .175 25.12);--color-accent-400:oklch(70.3% .205 25.12);--color-accent-500:oklch(58.3% .245 25.12);--color-accent-600:oklch(51.2% .265 22.45);--color-accent-700:oklch(43.2% .275 22.45);--color-accent-800:oklch(35.8% .255 22.45);--color-accent-900:oklch(28.5% .215 22.45)}:root{--color-neutral-50:oklch(97.1% .001 0);--color-neutral-100:oklch(94.2% .002 0);--color-neutral-200:oklch(89.4% .005 0);--color-neutral-300:oklch(84.1% .008 0);--color-neutral-400:oklch(76.3% .012 0);--color-neutral-500:oklch(64.2% .015 0);--color-neutral-600:oklch(52.8% .014 0);--color-neutral-700:oklch(42.3% .012 0);--color-neutral-800:oklch(30.1% .01 0);--color-neutral-900:oklch(20.2% .008 0);--color-neutral-950:oklch(10.1% .004 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}
\ No newline at end of file
diff --git a/tests/Web.Tests.Bunit/Auth/Auth0ClaimsTransformationTests.cs b/tests/Web.Tests.Bunit/Auth/Auth0ClaimsTransformationTests.cs
index c8f0c1b..764b1df 100644
--- a/tests/Web.Tests.Bunit/Auth/Auth0ClaimsTransformationTests.cs
+++ b/tests/Web.Tests.Bunit/Auth/Auth0ClaimsTransformationTests.cs
@@ -120,9 +120,10 @@ public async Task TransformAsync_WithNoRoleClaims_ReturnsUnmodifiedPrincipal()
}
[Fact]
- public async Task TransformAsync_WithMissingNamespace_SkipsTransformation()
+ public async Task TransformAsync_WithNamespaceClaimButNoNamespaceConfig_ShouldAutoDetectViaPass3()
{
- // Arrange — no namespace configured
+ // Arrange — no namespace configured, but principal carries a namespaced role claim.
+ // Pass 3 auto-detects claim types ending in "/roles" and maps them.
var transformation = CreateTransformation(roleClaimNamespace: null);
var principal = CreatePrincipal(
new Claim(ClaimTypes.NameIdentifier, "user123"),
@@ -131,14 +132,15 @@ public async Task TransformAsync_WithMissingNamespace_SkipsTransformation()
// Act
var result = await transformation.TransformAsync(principal);
- // Assert — should NOT add standard role claims since namespace isn't configured
- result.HasClaim(ClaimTypes.Role, "Admin").Should().BeFalse();
+ // Assert — Pass 3 should auto-detect the "https://issuetracker.com/roles" claim
+ result.HasClaim(ClaimTypes.Role, "Admin").Should().BeTrue();
}
[Fact]
- public async Task TransformAsync_WithEmptyNamespace_SkipsTransformation()
+ public async Task TransformAsync_WithNamespaceClaimAndEmptyNamespaceConfig_ShouldAutoDetectViaPass3()
{
- // Arrange
+ // Arrange — empty namespace configured, but principal carries a namespaced role claim.
+ // Pass 3 auto-detects claim types ending in "/roles" and maps them.
var transformation = CreateTransformation(roleClaimNamespace: "");
var principal = CreatePrincipal(
new Claim(ClaimTypes.NameIdentifier, "user123"),
@@ -147,8 +149,8 @@ public async Task TransformAsync_WithEmptyNamespace_SkipsTransformation()
// Act
var result = await transformation.TransformAsync(principal);
- // Assert
- result.HasClaim(ClaimTypes.Role, "Admin").Should().BeFalse();
+ // Assert — Pass 3 should auto-detect the "https://issuetracker.com/roles" claim
+ result.HasClaim(ClaimTypes.Role, "Admin").Should().BeTrue();
}
[Fact]
@@ -254,4 +256,78 @@ public async Task TransformAsync_WithPartialExistingRoles_AddsOnlyMissingRoles()
.Should().HaveCount(1);
result.HasClaim(ClaimTypes.Role, "User").Should().BeTrue();
}
+
+ [Fact]
+ public async Task TransformAsync_WithBareRolesClaim_NoNamespaceConfig_ShouldMapToClaimTypesRole()
+ {
+ // Arrange — Pass 2 fallback: no namespace config, but user has bare "roles" claim
+ var transformation = CreateTransformation(roleClaimNamespace: null);
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user123"),
+ new Claim("roles", "Admin"));
+
+ // Act
+ var result = await transformation.TransformAsync(principal);
+
+ // Assert — Pass 2 should map bare "roles" claim to ClaimTypes.Role
+ result.HasClaim(ClaimTypes.Role, "Admin").Should().BeTrue();
+ }
+
+ [Fact]
+ public async Task TransformAsync_CalledTwice_ShouldNotAddDuplicateRoleClaims()
+ {
+ // Arrange — idempotency test: calling TransformAsync twice on same principal
+ var transformation = CreateTransformation();
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user123"),
+ new Claim(TestNamespace, "Admin"));
+
+ // Act — call TransformAsync twice
+ var firstResult = await transformation.TransformAsync(principal);
+ var secondResult = await transformation.TransformAsync(firstResult);
+
+ // Assert — should have exactly ONE ClaimTypes.Role claim with "Admin"
+ secondResult.FindAll(c => c.Type == ClaimTypes.Role && c.Value == "Admin")
+ .Should().HaveCount(1);
+ }
+
+ [Fact]
+ public async Task TransformAsync_WithMultipleNamespacedRoleClaims_Pass3_ShouldMapAll()
+ {
+ // Arrange — Pass 3 with multiple different namespaced claims ending in "/roles"
+ var transformation = CreateTransformation(roleClaimNamespace: null);
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user123"),
+ new Claim("https://schemas.auth0.com/roles", "User"),
+ new Claim("https://issuetracker.com/roles", "Admin"));
+
+ // Act
+ var result = await transformation.TransformAsync(principal);
+
+ // Assert — Pass 3 should auto-detect both claims and map them
+ result.HasClaim(ClaimTypes.Role, "User").Should().BeTrue();
+ result.HasClaim(ClaimTypes.Role, "Admin").Should().BeTrue();
+ }
+
+ [Fact]
+ public async Task TransformAsync_WithEmptyRoleValue_ShouldNotAddEmptyClaim()
+ {
+ // Arrange — namespace configured, but role value is empty/whitespace
+ var transformation = CreateTransformation();
+ var principalWithEmpty = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user123"),
+ new Claim(TestNamespace, ""));
+
+ var principalWithWhitespace = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user456"),
+ new Claim(TestNamespace, " "));
+
+ // Act
+ var resultEmpty = await transformation.TransformAsync(principalWithEmpty);
+ var resultWhitespace = await transformation.TransformAsync(principalWithWhitespace);
+
+ // Assert — no ClaimTypes.Role claims should be added for empty/whitespace values
+ resultEmpty.HasClaim(c => c.Type == ClaimTypes.Role).Should().BeFalse();
+ resultWhitespace.HasClaim(c => c.Type == ClaimTypes.Role).Should().BeFalse();
+ }
}
diff --git a/tests/Web.Tests.Bunit/Components/Pages/Admin/AdminPageLayoutTests.cs b/tests/Web.Tests.Bunit/Components/Pages/Admin/AdminPageLayoutTests.cs
new file mode 100644
index 0000000..638dc8b
--- /dev/null
+++ b/tests/Web.Tests.Bunit/Components/Pages/Admin/AdminPageLayoutTests.cs
@@ -0,0 +1,287 @@
+// =======================================================
+// Copyright (c) 2025. All rights reserved.
+// File Name : AdminPageLayoutTests.cs
+// Company : mpaulosky
+// Author : Matthew Paulosky
+// Solution Name : IssueTrackerApp
+// Project Name : Web.Tests.Bunit
+// =======================================================
+
+using System.Reflection;
+
+using Microsoft.AspNetCore.Components;
+
+using Web.Components.Pages.Admin;
+
+namespace Web.Tests.Bunit.Components.Pages.Admin;
+
+///
+/// Regression tests for AdminPageLayout component.
+/// Guards against incorrect use as @layout directive (issue #97).
+///
+public class AdminPageLayoutTests : BunitTestBase
+{
+ [Fact]
+ public void AdminPageLayout_RendersChildContent_WhenProvided()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testContent = "Hello from child content";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .AddChildContent($"{testContent}
")
+ );
+
+ // Assert
+ cut.Markup.Should().Contain(testContent,
+ "child content should be rendered in the component");
+ var testElement = cut.Find("#test");
+ testElement.Should().NotBeNull();
+ testElement.TextContent.Should().Be(testContent);
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersTitle_WhenTitleProvided()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testTitle = "Test Page Title";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .Add(p => p.Title, testTitle)
+ );
+
+ // Assert
+ var h1 = cut.Find("h1");
+ h1.Should().NotBeNull();
+ h1.TextContent.Should().Contain(testTitle,
+ "title should be rendered in h1 element");
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersDescription_WhenDescriptionProvided()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testTitle = "Test Page";
+ const string testDescription = "This is a test description";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .Add(p => p.Title, testTitle)
+ .Add(p => p.Description, testDescription)
+ );
+
+ // Assert
+ cut.Markup.Should().Contain(testDescription,
+ "description should be rendered when provided");
+ }
+
+ [Fact]
+ public void AdminPageLayout_DoesNotRenderTitleSection_WhenTitleIsNull()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+
+ // Act
+ var cut = Render(parameters => parameters
+ .AddChildContent("Content without title
")
+ );
+
+ // Assert
+ var h1Elements = cut.FindAll("h1");
+ h1Elements.Should().BeEmpty(
+ "title section should not be rendered when Title is null");
+ }
+
+ [Fact]
+ public void AdminPageLayout_DoesNotInheritLayoutComponentBase()
+ {
+ // Arrange & Act
+ var adminPageLayoutType = typeof(AdminPageLayout);
+ var isLayoutComponent = adminPageLayoutType.IsAssignableTo(typeof(LayoutComponentBase));
+
+ // Assert
+ isLayoutComponent.Should().BeFalse(
+ "AdminPageLayout must NOT inherit from LayoutComponentBase to prevent @layout directive misuse (issue #97)");
+ }
+
+ [Fact]
+ public void AdminPageLayout_HasChildContentParameter_NoBodyParameter()
+ {
+ // Arrange
+ var adminPageLayoutType = typeof(AdminPageLayout);
+
+ // Act
+ var childContentProperty = adminPageLayoutType.GetProperty("ChildContent");
+ var bodyProperty = adminPageLayoutType.GetProperty("Body");
+
+ // Assert
+ childContentProperty.Should().NotBeNull(
+ "AdminPageLayout must have a ChildContent parameter");
+ childContentProperty!.PropertyType.Should().Be(typeof(RenderFragment),
+ "ChildContent should be of type RenderFragment");
+
+ bodyProperty.Should().BeNull(
+ "AdminPageLayout must NOT have a Body parameter (that's for LayoutComponentBase)");
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersAdminPortalNavigation()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+
+ // Act
+ var cut = Render();
+
+ // Assert
+ cut.Markup.Should().Contain("Admin Portal",
+ "admin navigation bar should display 'Admin Portal' branding");
+ cut.Markup.Should().Contain("href=\"/admin\"",
+ "admin navigation should link to /admin");
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersBackToAppLink()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+
+ // Act
+ var cut = Render();
+
+ // Assert
+ cut.Markup.Should().Contain("Back to App",
+ "admin layout should provide 'Back to App' link");
+ cut.Markup.Should().Contain("href=\"/\"",
+ "'Back to App' should link to home page");
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersNavigationLinks()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+
+ // Act
+ var cut = Render();
+
+ // Assert
+ cut.Markup.Should().Contain("Dashboard", "nav should contain Dashboard link");
+ cut.Markup.Should().Contain("Analytics", "nav should contain Analytics link");
+ cut.Markup.Should().Contain("Categories", "nav should contain Categories link");
+ cut.Markup.Should().Contain("Statuses", "nav should contain Statuses link");
+ }
+
+ [Fact]
+ public void AdminPageLayout_WrapsContentInMainElement()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testContent = "Test content in main";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .AddChildContent($"{testContent}
")
+ );
+
+ // Assert
+ var mainElement = cut.Find("main");
+ mainElement.Should().NotBeNull();
+ mainElement.TextContent.Should().Contain(testContent,
+ "child content should be rendered inside element");
+ }
+
+ [Fact]
+ public void AdminPageLayout_HasParameterAttributes()
+ {
+ // Arrange
+ var adminPageLayoutType = typeof(AdminPageLayout);
+
+ // Act
+ var titleProperty = adminPageLayoutType.GetProperty("Title");
+ var descriptionProperty = adminPageLayoutType.GetProperty("Description");
+ var childContentProperty = adminPageLayoutType.GetProperty("ChildContent");
+
+ // Assert — all properties should have [Parameter] attribute
+ titleProperty.Should().NotBeNull();
+ titleProperty!.GetCustomAttribute().Should().NotBeNull(
+ "Title property should have [Parameter] attribute");
+
+ descriptionProperty.Should().NotBeNull();
+ descriptionProperty!.GetCustomAttribute().Should().NotBeNull(
+ "Description property should have [Parameter] attribute");
+
+ childContentProperty.Should().NotBeNull();
+ childContentProperty!.GetCustomAttribute().Should().NotBeNull(
+ "ChildContent property should have [Parameter] attribute");
+ }
+
+ [Fact]
+ public void AdminPageLayout_TitleAndDescriptionAreNullable()
+ {
+ // Arrange
+ var adminPageLayoutType = typeof(AdminPageLayout);
+
+ // Act
+ var titleProperty = adminPageLayoutType.GetProperty("Title");
+ var descriptionProperty = adminPageLayoutType.GetProperty("Description");
+
+ // Assert
+ titleProperty.Should().NotBeNull();
+ var titleNullabilityContext = new NullabilityInfoContext();
+ var titleNullability = titleNullabilityContext.Create(titleProperty!);
+ titleNullability.WriteState.Should().Be(NullabilityState.Nullable,
+ "Title property should be nullable");
+
+ descriptionProperty.Should().NotBeNull();
+ var descriptionNullability = titleNullabilityContext.Create(descriptionProperty!);
+ descriptionNullability.WriteState.Should().Be(NullabilityState.Nullable,
+ "Description property should be nullable");
+ }
+
+ [Fact]
+ public void AdminPageLayout_RendersWithBothTitleAndChildContent()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testTitle = "Admin Page";
+ const string testContent = "Page content here";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .Add(p => p.Title, testTitle)
+ .AddChildContent($"{testContent}
")
+ );
+
+ // Assert
+ cut.Markup.Should().Contain(testTitle, "title should be rendered");
+ cut.Markup.Should().Contain(testContent, "child content should be rendered");
+
+ var h1 = cut.Find("h1");
+ h1.TextContent.Should().Contain(testTitle);
+
+ var contentDiv = cut.Find("#content");
+ contentDiv.TextContent.Should().Be(testContent);
+ }
+
+ [Fact]
+ public void AdminPageLayout_DescriptionNotRendered_WhenTitleIsNullButDescriptionProvided()
+ {
+ // Arrange
+ SetupAuthenticatedUser(isAdmin: true);
+ const string testDescription = "Orphaned description";
+
+ // Act
+ var cut = Render(parameters => parameters
+ .Add(p => p.Description, testDescription)
+ );
+
+ // Assert
+ cut.Markup.Should().NotContain(testDescription,
+ "description should not render when Title is null (entire title section is skipped)");
+ }
+}
diff --git a/tests/Web.Tests.Bunit/Components/User/ProfileRolesTests.cs b/tests/Web.Tests.Bunit/Components/User/ProfileRolesTests.cs
new file mode 100644
index 0000000..80b701c
--- /dev/null
+++ b/tests/Web.Tests.Bunit/Components/User/ProfileRolesTests.cs
@@ -0,0 +1,188 @@
+// =======================================================
+// Copyright (c) 2025. All rights reserved.
+// File Name : ProfileRolesTests.cs
+// Company : mpaulosky
+// Author : Matthew Paulosky
+// Solution Name : IssueTrackerApp
+// Project Name : Web.Tests.Bunit
+// =======================================================
+
+using System.Security.Claims;
+
+using Microsoft.Extensions.Configuration;
+
+using Web.Components.User;
+
+namespace Web.Tests.Bunit.Components.User;
+
+///
+/// bUnit tests for Profile component roles section and GetAllRoleClaims static helper.
+///
+public class ProfileRolesTests : BunitTestBase
+{
+ private static IConfiguration CreateConfiguration(string? roleClaimNamespace = null)
+ {
+ var configValues = new Dictionary();
+ if (roleClaimNamespace is not null)
+ {
+ configValues["Auth0:RoleClaimNamespace"] = roleClaimNamespace;
+ }
+
+ return new ConfigurationBuilder()
+ .AddInMemoryCollection(configValues)
+ .Build();
+ }
+
+ private static ClaimsPrincipal CreatePrincipal(params Claim[] claims)
+ {
+ var identity = new ClaimsIdentity(claims, "TestAuth");
+ return new ClaimsPrincipal(identity);
+ }
+
+ [Fact]
+ public async Task ProfilePage_WithAdminRole_ShowsRoleInRolesSection()
+ {
+ // Arrange — set up user with ClaimTypes.Role = "Admin"
+ SetupAuthenticatedUser(isAdmin: true);
+ Services.AddSingleton(CreateConfiguration());
+
+ // Act
+ var cut = Render();
+ await cut.InvokeAsync(() => Task.Delay(50));
+
+ // Assert
+ cut.Markup.Should().Contain("Admin",
+ "Profile page should display 'Admin' in the Roles & Permissions section");
+ cut.Markup.Should().NotContain("No roles assigned",
+ "Profile page should not show 'No roles assigned' when user has roles");
+ }
+
+ [Fact]
+ public async Task ProfilePage_WithNoRoles_ShowsNoRolesAssigned()
+ {
+ // Arrange — authenticated user but with no role claims
+ SetupAuthenticatedUser();
+ Services.AddSingleton(CreateConfiguration());
+
+ // Patch: override auth context with a user that has NO role claim
+ // bUnit's SetupAuthenticatedUser always sets at least ClaimTypes.Role = "User",
+ // so we exercise the static method directly below for this scenario.
+ // Instead, verify via the static helper that an empty roles list triggers the message.
+
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user-no-roles"),
+ new Claim(ClaimTypes.Name, "No Role User"),
+ new Claim(ClaimTypes.Email, "noroles@example.com")
+ );
+
+ // Act — invoke the static method directly
+ var roles = Profile.GetAllRoleClaims(principal);
+
+ // Assert
+ roles.Should().BeEmpty("user with no role claims should have an empty roles list");
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithNamespaceClaimType_ReturnsRoles()
+ {
+ // Arrange
+ const string roleNamespace = "https://issuetracker.com/roles";
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.NameIdentifier, "user123"),
+ new Claim(ClaimTypes.Name, "Test User"),
+ new Claim(roleNamespace, "Admin"),
+ new Claim(roleNamespace, "User")
+ );
+
+ // Act
+ var roles = Profile.GetAllRoleClaims(principal, roleNamespace);
+
+ // Assert
+ roles.Should().Contain("Admin", "namespace-based role claim 'Admin' should be included");
+ roles.Should().Contain("User", "namespace-based role claim 'User' should be included");
+ roles.Should().HaveCount(2);
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithStandardClaimTypes_ReturnsRoles()
+ {
+ // Arrange
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.Role, "Admin"),
+ new Claim("role", "Moderator"),
+ new Claim("roles", "Reviewer")
+ );
+
+ // Act
+ var roles = Profile.GetAllRoleClaims(principal);
+
+ // Assert
+ roles.Should().Contain("Admin");
+ roles.Should().Contain("Moderator");
+ roles.Should().Contain("Reviewer");
+ roles.Should().HaveCount(3);
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithDuplicateRoles_ReturnsDistinct()
+ {
+ // Arrange
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.Role, "Admin"),
+ new Claim("role", "Admin")
+ );
+
+ // Act
+ var roles = Profile.GetAllRoleClaims(principal);
+
+ // Assert
+ roles.Should().ContainSingle(r => r == "Admin", "duplicate roles should be deduplicated");
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithNullNamespace_DoesNotThrow()
+ {
+ // Arrange
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.Role, "User")
+ );
+
+ // Act
+ var act = () => Profile.GetAllRoleClaims(principal, null);
+
+ // Assert
+ act.Should().NotThrow();
+ act().Should().Contain("User");
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithEmptyNamespace_IgnoresNamespace()
+ {
+ // Arrange
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.Role, "User")
+ );
+
+ // Act
+ var roles = Profile.GetAllRoleClaims(principal, string.Empty);
+
+ // Assert — empty namespace should not add extra claims lookup
+ roles.Should().ContainSingle(r => r == "User");
+ }
+
+ [Fact]
+ public void GetAllRoleClaims_WithWhitespaceValues_FiltersOutBlanks()
+ {
+ // Arrange
+ var principal = CreatePrincipal(
+ new Claim(ClaimTypes.Role, "Admin"),
+ new Claim(ClaimTypes.Role, " ")
+ );
+
+ // Act
+ var roles = Profile.GetAllRoleClaims(principal);
+
+ // Assert
+ roles.Should().ContainSingle(r => r == "Admin", "whitespace-only role values should be filtered");
+ }
+}
diff --git a/tests/Web.Tests.Bunit/Layout/FooterComponentTests.cs b/tests/Web.Tests.Bunit/Layout/FooterComponentTests.cs
index 036d000..75422a4 100644
--- a/tests/Web.Tests.Bunit/Layout/FooterComponentTests.cs
+++ b/tests/Web.Tests.Bunit/Layout/FooterComponentTests.cs
@@ -112,9 +112,9 @@ public void FooterComponent_UsesThemeColors()
// Assert — footer uses primary theme colors for border and background
var footer = cut.Find("footer");
var classes = footer.GetAttribute("class") ?? "";
- classes.Should().Contain("border-primary-500");
- classes.Should().Contain("bg-primary-50");
- classes.Should().Contain("dark:bg-gray-800");
+ classes.Should().Contain("border-primary-800");
+ classes.Should().Contain("bg-primary-400");
+ classes.Should().Contain("dark:bg-primary-400");
}
[Fact]
@@ -123,16 +123,16 @@ public void FooterComponent_LinksHaveHoverTransition()
// Arrange & Act
var cut = Render();
- // Assert
+ // Assert — links are rendered with correct structure and security attributes
var links = cut.FindAll("a");
+ links.Should().NotBeEmpty("footer should contain version and commit links");
foreach (var link in links)
{
- var classes = link.GetAttribute("class") ?? "";
- classes.Should().Contain("hover:text-primary-500",
- "links should use primary theme color on hover");
- classes.Should().Contain("transition-colors",
- "links should have smooth color transitions");
+ link.GetAttribute("rel").Should().Contain("noopener",
+ "links should maintain security attributes");
}
+ cut.Markup.Should().Contain("font-mono",
+ "version and commit links container should use monospace font");
}
[Fact]
diff --git a/tests/Web.Tests.Bunit/Layout/LayoutComponentTests.cs b/tests/Web.Tests.Bunit/Layout/LayoutComponentTests.cs
index f779291..2176008 100644
--- a/tests/Web.Tests.Bunit/Layout/LayoutComponentTests.cs
+++ b/tests/Web.Tests.Bunit/Layout/LayoutComponentTests.cs
@@ -201,7 +201,7 @@ public void LoginDisplay_WhenAuthenticated_ShowsGreeting()
var cut = Render();
// Assert
- cut.Markup.Should().Contain("Hello, John Doe!");
+ cut.Markup.Should().Contain("Hey John Doe!");
}
[Fact]
@@ -299,7 +299,7 @@ public void LoginDisplay_WithAuthenticatedAdmin_ShowsCorrectUserName()
var cut = Render();
// Assert
- cut.Markup.Should().Contain("Hello, Admin User!");
+ cut.Markup.Should().Contain("Hey Admin User!");
}
[Fact]
@@ -382,9 +382,7 @@ public void LoginDisplay_ShowsUserGreetingWithCorrectFormatting()
var cut = Render();
// Assert
- cut.Markup.Should().Contain("Hello, Jane Smith!");
- cut.Markup.Should().Contain("text-sm");
- cut.Markup.Should().Contain("text-gray-700");
+ cut.Markup.Should().Contain("Hey Jane Smith!");
}
[Fact]
diff --git a/tests/Web.Tests.Bunit/Layout/NavMenuComponentTests.cs b/tests/Web.Tests.Bunit/Layout/NavMenuComponentTests.cs
index 0516db1..889c62a 100644
--- a/tests/Web.Tests.Bunit/Layout/NavMenuComponentTests.cs
+++ b/tests/Web.Tests.Bunit/Layout/NavMenuComponentTests.cs
@@ -199,4 +199,32 @@ public void NavMenu_IsHiddenOnMobileByDefault()
classes.Should().Contain("hidden md:flex",
"nav should be hidden on mobile and shown on medium+ screens");
}
+
+ [Fact]
+ public void NavMenu_WithAdminRole_RendersAdminNavLink()
+ {
+ // Arrange — explicitly set ClaimTypes.Role = "Admin" via isAdmin helper
+ SetupAuthenticatedUser(isAdmin: true);
+
+ // Act
+ var cut = Render();
+
+ // Assert
+ cut.Markup.Should().Contain("href=\"/admin\"",
+ "user with Admin role should see /admin nav link");
+ }
+
+ [Fact]
+ public void NavMenu_WithUserRoleOnly_DoesNotRenderAdminNavLink()
+ {
+ // Arrange — standard user with ClaimTypes.Role = "User" only
+ SetupAuthenticatedUser(isAdmin: false);
+
+ // Act
+ var cut = Render();
+
+ // Assert
+ cut.Markup.Should().NotContain("href=\"/admin\"",
+ "user with only User role should not see /admin nav link");
+ }
}