From 9ba650b3456c44c39f54b58a3f491d0d4c3e92ee Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Sun, 17 May 2026 16:00:26 +0200 Subject: [PATCH] feat(18): restyle sidebar and header to match production design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sidebar: Tailwind utilities, French labels (Aperçu/Tâches/Projets/Planning/Discussions/Fichiers), hr separators, collapse button on group hover, tablo list with circle icons, org footer with avatar + "1 membre" - Header: 75px height, border-b #EAECF0, search input left, bell + avatar-dropdown right (no breadcrumb visible — retained sr-only for a11y + tests) - Layout: flex instead of grid, dashboard-main no padding, dashboard-main-content wrapper at 2rem - Tests updated for new search-input assertion Co-Authored-By: Claude Sonnet 4.6 (1M context) --- backend/internal/web/handlers_tablos_test.go | 5 +- backend/internal/web/ui/app.css | 41 +- backend/static/tailwind.css | 4194 +----------------- backend/templates/app_layout.templ | 253 +- backend/templates/app_layout_helpers.go | 68 +- 5 files changed, 196 insertions(+), 4365 deletions(-) diff --git a/backend/internal/web/handlers_tablos_test.go b/backend/internal/web/handlers_tablos_test.go index 048f0fe..2de1959 100644 --- a/backend/internal/web/handlers_tablos_test.go +++ b/backend/internal/web/handlers_tablos_test.go @@ -679,8 +679,9 @@ func TestTablosDashboard_Header(t *testing.T) { if !strings.Contains(body, "Dashboard") { t.Errorf("body missing breadcrumb label 'Dashboard'; body: %.300s", body) } - if !strings.Contains(body, "header-search-placeholder") { - t.Errorf("body missing 'header-search-placeholder'; body: %.300s", body) + // Search input is present (placeholder="Search...") + if !strings.Contains(body, `placeholder="Search..."`) { + t.Errorf("body missing search input; body: %.300s", body) } } diff --git a/backend/internal/web/ui/app.css b/backend/internal/web/ui/app.css index bedfafa..011097d 100644 --- a/backend/internal/web/ui/app.css +++ b/backend/internal/web/ui/app.css @@ -9,15 +9,22 @@ .dashboard-shell { background: var(--gradient-shell); color: var(--foreground); - display: grid; - grid-template-columns: minmax(16rem, 18rem) 1fr; + display: flex; min-height: 100vh; } .dashboard-sidebar { + width: 12rem; /* w-48 = 192px */ + flex-shrink: 0; + transition: width 0.3s ease; padding-left: env(safe-area-inset-left, 0px); } +/* Collapsed sidebar */ +.dashboard-shell.sidebar-is-collapsed .dashboard-sidebar { + width: 4rem; +} + /* ============================================================ Section 2 — Sidebar nav shell ============================================================ */ @@ -358,25 +365,10 @@ } /* ── Page header bar ───────────────────────────────────────────────── */ - +/* Styling is now handled via Tailwind utilities in PageHeader templ component. */ +/* This class is retained for test assertions. */ .page-header { - display: flex; - align-items: center; - gap: 1rem; - padding: 0.75rem 1.5rem; - background: var(--color-surface-elevated); - border-bottom: 1px solid var(--color-border-panel); - margin: -2rem -2rem 1.5rem -2rem; /* cancel .dashboard-main padding on three sides, add bottom gap */ -} - -.page-header-left { - flex: 0 0 auto; -} - -.page-header-center { - flex: 1 1 auto; - display: flex; - justify-content: center; + /* Tailwind handles layout; this class is an anchor for tests */ } .page-header-right { @@ -573,9 +565,16 @@ .dashboard-main { display: flex; flex-direction: column; - gap: 1.5rem; + flex: 1; min-width: 0; +} + +.dashboard-main-content { + display: flex; + flex-direction: column; + gap: 1.5rem; padding: 2rem; + flex: 1; } /* ============================================================ diff --git a/backend/static/tailwind.css b/backend/static/tailwind.css index c129647..1b24e84 100644 --- a/backend/static/tailwind.css +++ b/backend/static/tailwind.css @@ -1,4194 +1,2 @@ /*! tailwindcss v4.0.0 | MIT License | https://tailwindcss.com */ -@layer theme, base, components, utilities; -@layer theme { - :root { - --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', - 'Segoe UI Symbol', 'Noto Color Emoji'; - --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif; - --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', - 'Courier New', monospace; - --color-red-50: oklch(0.971 0.013 17.38); - --color-red-100: oklch(0.936 0.032 17.717); - --color-red-200: oklch(0.885 0.062 18.334); - --color-red-300: oklch(0.808 0.114 19.571); - --color-red-400: oklch(0.704 0.191 22.216); - --color-red-500: oklch(0.637 0.237 25.331); - --color-red-600: oklch(0.577 0.245 27.325); - --color-red-700: oklch(0.505 0.213 27.518); - --color-red-800: oklch(0.444 0.177 26.899); - --color-red-900: oklch(0.396 0.141 25.723); - --color-red-950: oklch(0.258 0.092 26.042); - --color-orange-50: oklch(0.98 0.016 73.684); - --color-orange-100: oklch(0.954 0.038 75.164); - --color-orange-200: oklch(0.901 0.076 70.697); - --color-orange-300: oklch(0.837 0.128 66.29); - --color-orange-400: oklch(0.75 0.183 55.934); - --color-orange-500: oklch(0.705 0.213 47.604); - --color-orange-600: oklch(0.646 0.222 41.116); - --color-orange-700: oklch(0.553 0.195 38.402); - --color-orange-800: oklch(0.47 0.157 37.304); - --color-orange-900: oklch(0.408 0.123 38.172); - --color-orange-950: oklch(0.266 0.079 36.259); - --color-amber-50: oklch(0.987 0.022 95.277); - --color-amber-100: oklch(0.962 0.059 95.617); - --color-amber-200: oklch(0.924 0.12 95.746); - --color-amber-300: oklch(0.879 0.169 91.605); - --color-amber-400: oklch(0.828 0.189 84.429); - --color-amber-500: oklch(0.769 0.188 70.08); - --color-amber-600: oklch(0.666 0.179 58.318); - --color-amber-700: oklch(0.555 0.163 48.998); - --color-amber-800: oklch(0.473 0.137 46.201); - --color-amber-900: oklch(0.414 0.112 45.904); - --color-amber-950: oklch(0.279 0.077 45.635); - --color-yellow-50: oklch(0.987 0.026 102.212); - --color-yellow-100: oklch(0.973 0.071 103.193); - --color-yellow-200: oklch(0.945 0.129 101.54); - --color-yellow-300: oklch(0.905 0.182 98.111); - --color-yellow-400: oklch(0.852 0.199 91.936); - --color-yellow-500: oklch(0.795 0.184 86.047); - --color-yellow-600: oklch(0.681 0.162 75.834); - --color-yellow-700: oklch(0.554 0.135 66.442); - --color-yellow-800: oklch(0.476 0.114 61.907); - --color-yellow-900: oklch(0.421 0.095 57.708); - --color-yellow-950: oklch(0.286 0.066 53.813); - --color-lime-50: oklch(0.986 0.031 120.757); - --color-lime-100: oklch(0.967 0.067 122.328); - --color-lime-200: oklch(0.938 0.127 124.321); - --color-lime-300: oklch(0.897 0.196 126.665); - --color-lime-400: oklch(0.841 0.238 128.85); - --color-lime-500: oklch(0.768 0.233 130.85); - --color-lime-600: oklch(0.648 0.2 131.684); - --color-lime-700: oklch(0.532 0.157 131.589); - --color-lime-800: oklch(0.453 0.124 130.933); - --color-lime-900: oklch(0.405 0.101 131.063); - --color-lime-950: oklch(0.274 0.072 132.109); - --color-green-50: oklch(0.982 0.018 155.826); - --color-green-100: oklch(0.962 0.044 156.743); - --color-green-200: oklch(0.925 0.084 155.995); - --color-green-300: oklch(0.871 0.15 154.449); - --color-green-400: oklch(0.792 0.209 151.711); - --color-green-500: oklch(0.723 0.219 149.579); - --color-green-600: oklch(0.627 0.194 149.214); - --color-green-700: oklch(0.527 0.154 150.069); - --color-green-800: oklch(0.448 0.119 151.328); - --color-green-900: oklch(0.393 0.095 152.535); - --color-green-950: oklch(0.266 0.065 152.934); - --color-emerald-50: oklch(0.979 0.021 166.113); - --color-emerald-100: oklch(0.95 0.052 163.051); - --color-emerald-200: oklch(0.905 0.093 164.15); - --color-emerald-300: oklch(0.845 0.143 164.978); - --color-emerald-400: oklch(0.765 0.177 163.223); - --color-emerald-500: oklch(0.696 0.17 162.48); - --color-emerald-600: oklch(0.596 0.145 163.225); - --color-emerald-700: oklch(0.508 0.118 165.612); - --color-emerald-800: oklch(0.432 0.095 166.913); - --color-emerald-900: oklch(0.378 0.077 168.94); - --color-emerald-950: oklch(0.262 0.051 172.552); - --color-teal-50: oklch(0.984 0.014 180.72); - --color-teal-100: oklch(0.953 0.051 180.801); - --color-teal-200: oklch(0.91 0.096 180.426); - --color-teal-300: oklch(0.855 0.138 181.071); - --color-teal-400: oklch(0.777 0.152 181.912); - --color-teal-500: oklch(0.704 0.14 182.503); - --color-teal-600: oklch(0.6 0.118 184.704); - --color-teal-700: oklch(0.511 0.096 186.391); - --color-teal-800: oklch(0.437 0.078 188.216); - --color-teal-900: oklch(0.386 0.063 188.416); - --color-teal-950: oklch(0.277 0.046 192.524); - --color-cyan-50: oklch(0.984 0.019 200.873); - --color-cyan-100: oklch(0.956 0.045 203.388); - --color-cyan-200: oklch(0.917 0.08 205.041); - --color-cyan-300: oklch(0.865 0.127 207.078); - --color-cyan-400: oklch(0.789 0.154 211.53); - --color-cyan-500: oklch(0.715 0.143 215.221); - --color-cyan-600: oklch(0.609 0.126 221.723); - --color-cyan-700: oklch(0.52 0.105 223.128); - --color-cyan-800: oklch(0.45 0.085 224.283); - --color-cyan-900: oklch(0.398 0.07 227.392); - --color-cyan-950: oklch(0.302 0.056 229.695); - --color-sky-50: oklch(0.977 0.013 236.62); - --color-sky-100: oklch(0.951 0.026 236.824); - --color-sky-200: oklch(0.901 0.058 230.902); - --color-sky-300: oklch(0.828 0.111 230.318); - --color-sky-400: oklch(0.746 0.16 232.661); - --color-sky-500: oklch(0.685 0.169 237.323); - --color-sky-600: oklch(0.588 0.158 241.966); - --color-sky-700: oklch(0.5 0.134 242.749); - --color-sky-800: oklch(0.443 0.11 240.79); - --color-sky-900: oklch(0.391 0.09 240.876); - --color-sky-950: oklch(0.293 0.066 243.157); - --color-blue-50: oklch(0.97 0.014 254.604); - --color-blue-100: oklch(0.932 0.032 255.585); - --color-blue-200: oklch(0.882 0.059 254.128); - --color-blue-300: oklch(0.809 0.105 251.813); - --color-blue-400: oklch(0.707 0.165 254.624); - --color-blue-500: oklch(0.623 0.214 259.815); - --color-blue-600: oklch(0.546 0.245 262.881); - --color-blue-700: oklch(0.488 0.243 264.376); - --color-blue-800: oklch(0.424 0.199 265.638); - --color-blue-900: oklch(0.379 0.146 265.522); - --color-blue-950: oklch(0.282 0.091 267.935); - --color-indigo-50: oklch(0.962 0.018 272.314); - --color-indigo-100: oklch(0.93 0.034 272.788); - --color-indigo-200: oklch(0.87 0.065 274.039); - --color-indigo-300: oklch(0.785 0.115 274.713); - --color-indigo-400: oklch(0.673 0.182 276.935); - --color-indigo-500: oklch(0.585 0.233 277.117); - --color-indigo-600: oklch(0.511 0.262 276.966); - --color-indigo-700: oklch(0.457 0.24 277.023); - --color-indigo-800: oklch(0.398 0.195 277.366); - --color-indigo-900: oklch(0.359 0.144 278.697); - --color-indigo-950: oklch(0.257 0.09 281.288); - --color-violet-50: oklch(0.969 0.016 293.756); - --color-violet-100: oklch(0.943 0.029 294.588); - --color-violet-200: oklch(0.894 0.057 293.283); - --color-violet-300: oklch(0.811 0.111 293.571); - --color-violet-400: oklch(0.702 0.183 293.541); - --color-violet-500: oklch(0.606 0.25 292.717); - --color-violet-600: oklch(0.541 0.281 293.009); - --color-violet-700: oklch(0.491 0.27 292.581); - --color-violet-800: oklch(0.432 0.232 292.759); - --color-violet-900: oklch(0.38 0.189 293.745); - --color-violet-950: oklch(0.283 0.141 291.089); - --color-purple-50: oklch(0.977 0.014 308.299); - --color-purple-100: oklch(0.946 0.033 307.174); - --color-purple-200: oklch(0.902 0.063 306.703); - --color-purple-300: oklch(0.827 0.119 306.383); - --color-purple-400: oklch(0.714 0.203 305.504); - --color-purple-500: oklch(0.627 0.265 303.9); - --color-purple-600: oklch(0.558 0.288 302.321); - --color-purple-700: oklch(0.496 0.265 301.924); - --color-purple-800: oklch(0.438 0.218 303.724); - --color-purple-900: oklch(0.381 0.176 304.987); - --color-purple-950: oklch(0.291 0.149 302.717); - --color-fuchsia-50: oklch(0.977 0.017 320.058); - --color-fuchsia-100: oklch(0.952 0.037 318.852); - --color-fuchsia-200: oklch(0.903 0.076 319.62); - --color-fuchsia-300: oklch(0.833 0.145 321.434); - --color-fuchsia-400: oklch(0.74 0.238 322.16); - --color-fuchsia-500: oklch(0.667 0.295 322.15); - --color-fuchsia-600: oklch(0.591 0.293 322.896); - --color-fuchsia-700: oklch(0.518 0.253 323.949); - --color-fuchsia-800: oklch(0.452 0.211 324.591); - --color-fuchsia-900: oklch(0.401 0.17 325.612); - --color-fuchsia-950: oklch(0.293 0.136 325.661); - --color-pink-50: oklch(0.971 0.014 343.198); - --color-pink-100: oklch(0.948 0.028 342.258); - --color-pink-200: oklch(0.899 0.061 343.231); - --color-pink-300: oklch(0.823 0.12 346.018); - --color-pink-400: oklch(0.718 0.202 349.761); - --color-pink-500: oklch(0.656 0.241 354.308); - --color-pink-600: oklch(0.592 0.249 0.584); - --color-pink-700: oklch(0.525 0.223 3.958); - --color-pink-800: oklch(0.459 0.187 3.815); - --color-pink-900: oklch(0.408 0.153 2.432); - --color-pink-950: oklch(0.284 0.109 3.907); - --color-rose-50: oklch(0.969 0.015 12.422); - --color-rose-100: oklch(0.941 0.03 12.58); - --color-rose-200: oklch(0.892 0.058 10.001); - --color-rose-300: oklch(0.81 0.117 11.638); - --color-rose-400: oklch(0.712 0.194 13.428); - --color-rose-500: oklch(0.645 0.246 16.439); - --color-rose-600: oklch(0.586 0.253 17.585); - --color-rose-700: oklch(0.514 0.222 16.935); - --color-rose-800: oklch(0.455 0.188 13.697); - --color-rose-900: oklch(0.41 0.159 10.272); - --color-rose-950: oklch(0.271 0.105 12.094); - --color-slate-50: oklch(0.984 0.003 247.858); - --color-slate-100: oklch(0.968 0.007 247.896); - --color-slate-200: oklch(0.929 0.013 255.508); - --color-slate-300: oklch(0.869 0.022 252.894); - --color-slate-400: oklch(0.704 0.04 256.788); - --color-slate-500: oklch(0.554 0.046 257.417); - --color-slate-600: oklch(0.446 0.043 257.281); - --color-slate-700: oklch(0.372 0.044 257.287); - --color-slate-800: oklch(0.279 0.041 260.031); - --color-slate-900: oklch(0.208 0.042 265.755); - --color-slate-950: oklch(0.129 0.042 264.695); - --color-gray-50: oklch(0.985 0.002 247.839); - --color-gray-100: oklch(0.967 0.003 264.542); - --color-gray-200: oklch(0.928 0.006 264.531); - --color-gray-300: oklch(0.872 0.01 258.338); - --color-gray-400: oklch(0.707 0.022 261.325); - --color-gray-500: oklch(0.551 0.027 264.364); - --color-gray-600: oklch(0.446 0.03 256.802); - --color-gray-700: oklch(0.373 0.034 259.733); - --color-gray-800: oklch(0.278 0.033 256.848); - --color-gray-900: oklch(0.21 0.034 264.665); - --color-gray-950: oklch(0.13 0.028 261.692); - --color-zinc-50: oklch(0.985 0 0); - --color-zinc-100: oklch(0.967 0.001 286.375); - --color-zinc-200: oklch(0.92 0.004 286.32); - --color-zinc-300: oklch(0.871 0.006 286.286); - --color-zinc-400: oklch(0.705 0.015 286.067); - --color-zinc-500: oklch(0.552 0.016 285.938); - --color-zinc-600: oklch(0.442 0.017 285.786); - --color-zinc-700: oklch(0.37 0.013 285.805); - --color-zinc-800: oklch(0.274 0.006 286.033); - --color-zinc-900: oklch(0.21 0.006 285.885); - --color-zinc-950: oklch(0.141 0.005 285.823); - --color-neutral-50: oklch(0.985 0 0); - --color-neutral-100: oklch(0.97 0 0); - --color-neutral-200: oklch(0.922 0 0); - --color-neutral-300: oklch(0.87 0 0); - --color-neutral-400: oklch(0.708 0 0); - --color-neutral-500: oklch(0.556 0 0); - --color-neutral-600: oklch(0.439 0 0); - --color-neutral-700: oklch(0.371 0 0); - --color-neutral-800: oklch(0.269 0 0); - --color-neutral-900: oklch(0.205 0 0); - --color-neutral-950: oklch(0.145 0 0); - --color-stone-50: oklch(0.985 0.001 106.423); - --color-stone-100: oklch(0.97 0.001 106.424); - --color-stone-200: oklch(0.923 0.003 48.717); - --color-stone-300: oklch(0.869 0.005 56.366); - --color-stone-400: oklch(0.709 0.01 56.259); - --color-stone-500: oklch(0.553 0.013 58.071); - --color-stone-600: oklch(0.444 0.011 73.639); - --color-stone-700: oklch(0.374 0.01 67.558); - --color-stone-800: oklch(0.268 0.007 34.298); - --color-stone-900: oklch(0.216 0.006 56.043); - --color-stone-950: oklch(0.147 0.004 49.25); - --color-black: #000; - --color-white: #fff; - --spacing: 0.25rem; - --breakpoint-sm: 40rem; - --breakpoint-md: 48rem; - --breakpoint-lg: 64rem; - --breakpoint-xl: 80rem; - --breakpoint-2xl: 96rem; - --container-3xs: 16rem; - --container-2xs: 18rem; - --container-xs: 20rem; - --container-sm: 24rem; - --container-md: 28rem; - --container-lg: 32rem; - --container-xl: 36rem; - --container-2xl: 42rem; - --container-3xl: 48rem; - --container-4xl: 56rem; - --container-5xl: 64rem; - --container-6xl: 72rem; - --container-7xl: 80rem; - --text-xs: 0.75rem; - --text-xs--line-height: calc(1 / 0.75); - --text-sm: 0.875rem; - --text-sm--line-height: calc(1.25 / 0.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; - --text-7xl: 4.5rem; - --text-7xl--line-height: 1; - --text-8xl: 6rem; - --text-8xl--line-height: 1; - --text-9xl: 8rem; - --text-9xl--line-height: 1; - --font-weight-thin: 100; - --font-weight-extralight: 200; - --font-weight-light: 300; - --font-weight-normal: 400; - --font-weight-medium: 500; - --font-weight-semibold: 600; - --font-weight-bold: 700; - --font-weight-extrabold: 800; - --font-weight-black: 900; - --tracking-tighter: -0.05em; - --tracking-tight: -0.025em; - --tracking-normal: 0em; - --tracking-wide: 0.025em; - --tracking-wider: 0.05em; - --tracking-widest: 0.1em; - --leading-tight: 1.25; - --leading-snug: 1.375; - --leading-normal: 1.5; - --leading-relaxed: 1.625; - --leading-loose: 2; - --radius-xs: 0.125rem; - --radius-sm: 0.25rem; - --radius-md: 0.375rem; - --radius-lg: 0.5rem; - --radius-xl: 0.75rem; - --radius-2xl: 1rem; - --radius-3xl: 1.5rem; - --radius-4xl: 2rem; - --shadow-2xs: 0 1px rgb(0 0 0 / 0.05); - --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05); - --shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); - --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); - --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); - --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25); - --inset-shadow-2xs: inset 0 1px rgb(0 0 0 / 0.05); - --inset-shadow-xs: inset 0 1px 1px rgb(0 0 0 / 0.05); - --inset-shadow-sm: inset 0 2px 4px rgb(0 0 0 / 0.05); - --drop-shadow-xs: 0 1px 1px rgb(0 0 0 / 0.05); - --drop-shadow-sm: 0 1px 2px rgb(0 0 0 / 0.15); - --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12); - --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15); - --drop-shadow-xl: 0 9px 7px rgb(0 0 0 / 0.1); - --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15); - --ease-in: cubic-bezier(0.4, 0, 1, 1); - --ease-out: cubic-bezier(0, 0, 0.2, 1); - --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); - --animate-spin: spin 1s linear infinite; - --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite; - --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; - --animate-bounce: bounce 1s infinite; - --blur-xs: 4px; - --blur-sm: 8px; - --blur-md: 12px; - --blur-lg: 16px; - --blur-xl: 24px; - --blur-2xl: 40px; - --blur-3xl: 64px; - --perspective-dramatic: 100px; - --perspective-near: 300px; - --perspective-normal: 500px; - --perspective-midrange: 800px; - --perspective-distant: 1200px; - --aspect-video: 16 / 9; - --default-transition-duration: 150ms; - --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); - --default-font-family: var(--font-sans); - --default-font-feature-settings: var(--font-sans--font-feature-settings); - --default-font-variation-settings: var(--font-sans--font-variation-settings); - --default-mono-font-family: var(--font-mono); - --default-mono-font-feature-settings: var(--font-mono--font-feature-settings); - --default-mono-font-variation-settings: var(--font-mono--font-variation-settings); - } -} -@layer base { - *, ::after, ::before, ::backdrop, ::file-selector-button { - box-sizing: border-box; - margin: 0; - padding: 0; - border: 0 solid; - } - html, :host { - line-height: 1.5; - -webkit-text-size-adjust: 100%; - tab-size: 4; - 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; - } - body { - line-height: inherit; - } - hr { - height: 0; - color: inherit; - border-top-width: 1px; - } - abbr:where([title]) { - -webkit-text-decoration: underline dotted; - text-decoration: underline dotted; - } - h1, h2, h3, h4, h5, h6 { - font-size: inherit; - font-weight: inherit; - } - a { - color: inherit; - -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 { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - sub { - bottom: -0.25em; - } - sup { - top: -0.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 { - display: block; - vertical-align: middle; - } - img, video { - max-width: 100%; - height: auto; - } - button, input, select, optgroup, textarea, ::file-selector-button { - font: inherit; - font-feature-settings: inherit; - font-variation-settings: inherit; - letter-spacing: inherit; - color: inherit; - border-radius: 0; - background-color: transparent; - opacity: 1; - } - :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; - 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, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { - padding-block: 0; - } - :-moz-ui-invalid { - box-shadow: none; - } - button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button { - appearance: button; - } - ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { - height: auto; - } - [hidden]:where(:not([hidden='until-found'])) { - display: none !important; - } -} -@layer utilities { - .collapse { - visibility: collapse; - } - .visible { - visibility: visible; - } - .absolute { - position: absolute; - } - .fixed { - position: fixed; - } - .relative { - position: relative; - } - .static { - position: static; - } - .sticky { - position: sticky; - } - .top-0 { - top: calc(var(--spacing) * 0); - } - .top-10 { - top: calc(var(--spacing) * 10); - } - .left-10 { - left: calc(var(--spacing) * 10); - } - .z-40 { - z-index: 40; - } - .\!container { - width: 100% !important; - @media (width >= 40rem) { - max-width: 40rem !important; - } - @media (width >= 48rem) { - max-width: 48rem !important; - } - @media (width >= 64rem) { - max-width: 64rem !important; - } - @media (width >= 80rem) { - max-width: 80rem !important; - } - @media (width >= 96rem) { - max-width: 96rem !important; - } - } - .container { - width: 100%; - @media (width >= 40rem) { - max-width: 40rem; - } - @media (width >= 48rem) { - max-width: 48rem; - } - @media (width >= 64rem) { - max-width: 64rem; - } - @media (width >= 80rem) { - max-width: 80rem; - } - @media (width >= 96rem) { - max-width: 96rem; - } - } - .mx-auto { - margin-inline: auto; - } - .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); - } - .mb-1 { - margin-bottom: calc(var(--spacing) * 1); - } - .mb-4 { - margin-bottom: calc(var(--spacing) * 4); - } - .mb-6 { - margin-bottom: calc(var(--spacing) * 6); - } - .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; - } - .table { - display: table; - } - .size-10 { - width: calc(var(--spacing) * 10); - height: calc(var(--spacing) * 10); - } - .size-11 { - width: calc(var(--spacing) * 11); - height: calc(var(--spacing) * 11); - } - .size-12 { - width: calc(var(--spacing) * 12); - height: calc(var(--spacing) * 12); - } - .size-13 { - width: calc(var(--spacing) * 13); - height: calc(var(--spacing) * 13); - } - .size-14 { - width: calc(var(--spacing) * 14); - height: calc(var(--spacing) * 14); - } - .size-15 { - width: calc(var(--spacing) * 15); - height: calc(var(--spacing) * 15); - } - .size-16 { - width: calc(var(--spacing) * 16); - height: calc(var(--spacing) * 16); - } - .size-18 { - width: calc(var(--spacing) * 18); - height: calc(var(--spacing) * 18); - } - .size-20 { - width: calc(var(--spacing) * 20); - height: calc(var(--spacing) * 20); - } - .h-2\.5 { - height: calc(var(--spacing) * 2.5); - } - .h-4 { - height: calc(var(--spacing) * 4); - } - .min-h-11 { - min-height: calc(var(--spacing) * 11); - } - .min-h-24 { - min-height: calc(var(--spacing) * 24); - } - .min-h-screen { - min-height: 100vh; - } - .w-2\.5 { - width: calc(var(--spacing) * 2.5); - } - .w-4 { - width: calc(var(--spacing) * 4); - } - .w-full { - width: 100%; - } - .max-w-5xl { - max-width: var(--container-5xl); - } - .max-w-xl { - max-width: var(--container-xl); - } - .min-w-0 { - min-width: calc(var(--spacing) * 0); - } - .min-w-6 { - min-width: calc(var(--spacing) * 6); - } - .min-w-\[680px\] { - min-width: 680px; - } - .flex-shrink { - flex-shrink: 1; - } - .flex-shrink-0 { - flex-shrink: 0; - } - .transform { - transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y); - } - .cursor-pointer { - cursor: pointer; - } - .grid-cols-7 { - grid-template-columns: repeat(7, minmax(0, 1fr)); - } - .flex-col { - flex-direction: column; - } - .flex-wrap { - flex-wrap: wrap; - } - .items-center { - align-items: center; - } - .items-start { - align-items: flex-start; - } - .justify-between { - justify-content: space-between; - } - .justify-center { - justify-content: center; - } - .justify-end { - justify-content: flex-end; - } - .gap-1 { - gap: calc(var(--spacing) * 1); - } - .gap-2 { - gap: calc(var(--spacing) * 2); - } - .gap-3 { - gap: calc(var(--spacing) * 3); - } - .gap-4 { - gap: calc(var(--spacing) * 4); - } - .gap-px { - gap: 1px; - } - .space-y-1 { - :where(& > :not(:last-child)) { - --tw-space-y-reverse: 0; - margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); - margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); - } - } - .space-y-2 { - :where(& > :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))); - } - } - .space-y-3 { - :where(& > :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))); - } - } - .space-y-4 { - :where(& > :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))); - } - } - .space-y-6 { - :where(& > :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))); - } - } - .divide-y { - :where(& > :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))); - } - } - .divide-slate-100 { - :where(& > :not(:last-child)) { - border-color: var(--color-slate-100); - } - } - .truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } - .overflow-x-auto { - overflow-x: auto; - } - .rounded { - border-radius: 0.25rem; - } - .rounded-full { - border-radius: calc(infinity * 1px); - } - .border { - border-style: var(--tw-border-style); - border-width: 1px; - } - .border-y { - border-block-style: var(--tw-border-style); - border-block-width: 1px; - } - .border-t { - border-top-style: var(--tw-border-style); - border-top-width: 1px; - } - .border-b { - border-bottom-style: var(--tw-border-style); - border-bottom-width: 1px; - } - .border-blue-200 { - border-color: var(--color-blue-200); - } - .border-red-200 { - border-color: var(--color-red-200); - } - .border-red-300 { - border-color: var(--color-red-300); - } - .border-slate-200 { - border-color: var(--color-slate-200); - } - .border-slate-300 { - border-color: var(--color-slate-300); - } - .border-slate-800 { - border-color: var(--color-slate-800); - } - .bg-red-50 { - background-color: var(--color-red-50); - } - .bg-slate-50 { - background-color: var(--color-slate-50); - } - .bg-slate-100 { - background-color: var(--color-slate-100); - } - .bg-slate-200 { - background-color: var(--color-slate-200); - } - .bg-slate-900 { - background-color: var(--color-slate-900); - } - .bg-white { - background-color: var(--color-white); - } - .p-2 { - padding: calc(var(--spacing) * 2); - } - .p-3 { - padding: calc(var(--spacing) * 3); - } - .p-4 { - padding: calc(var(--spacing) * 4); - } - .p-6 { - padding: calc(var(--spacing) * 6); - } - .px-1\.5 { - padding-inline: calc(var(--spacing) * 1.5); - } - .px-2 { - padding-inline: calc(var(--spacing) * 2); - } - .px-3 { - padding-inline: calc(var(--spacing) * 3); - } - .px-4 { - padding-inline: calc(var(--spacing) * 4); - } - .py-0\.5 { - padding-block: calc(var(--spacing) * 0.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-6 { - padding-block: calc(var(--spacing) * 6); - } - .py-8 { - padding-block: calc(var(--spacing) * 8); - } - .py-12 { - padding-block: calc(var(--spacing) * 12); - } - .py-16 { - padding-block: calc(var(--spacing) * 16); - } - .pt-4 { - padding-top: calc(var(--spacing) * 4); - } - .pt-6 { - padding-top: calc(var(--spacing) * 6); - } - .pb-1 { - padding-bottom: calc(var(--spacing) * 1); - } - .pb-4 { - padding-bottom: calc(var(--spacing) * 4); - } - .pb-8 { - padding-bottom: calc(var(--spacing) * 8); - } - .text-center { - text-align: center; - } - .text-left { - text-align: left; - } - .text-2xl { - font-size: var(--text-2xl); - line-height: var(--tw-leading, var(--text-2xl--line-height)); - } - .text-base { - font-size: var(--text-base); - line-height: var(--tw-leading, var(--text-base--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); - } - .leading-none { - --tw-leading: 1; - line-height: 1; - } - .leading-snug { - --tw-leading: var(--leading-snug); - line-height: var(--leading-snug); - } - .leading-tight { - --tw-leading: var(--leading-tight); - line-height: var(--leading-tight); - } - .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); - } - .whitespace-nowrap { - white-space: nowrap; - } - .text-blue-600 { - color: var(--color-blue-600); - } - .text-blue-700 { - color: var(--color-blue-700); - } - .text-red-700 { - color: var(--color-red-700); - } - .text-red-800 { - color: var(--color-red-800); - } - .text-slate-400 { - color: var(--color-slate-400); - } - .text-slate-500 { - color: var(--color-slate-500); - } - .text-slate-600 { - color: var(--color-slate-600); - } - .text-slate-700 { - color: var(--color-slate-700); - } - .text-slate-800 { - color: var(--color-slate-800); - } - .text-slate-900 { - color: var(--color-slate-900); - } - .text-white { - color: var(--color-white); - } - .lowercase { - text-transform: lowercase; - } - .uppercase { - text-transform: uppercase; - } - .italic { - font-style: italic; - } - .antialiased { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - .placeholder-slate-400 { - &::placeholder { - color: var(--color-slate-400); - } - } - .opacity-50 { - opacity: 50%; - } - .shadow-sm { - --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); - box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - } - .filter { - filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); - } - .transition { - transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter; - 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)); - } - .file\:mr-3 { - &::file-selector-button { - margin-right: calc(var(--spacing) * 3); - } - } - .file\:rounded { - &::file-selector-button { - border-radius: 0.25rem; - } - } - .file\:border-0 { - &::file-selector-button { - border-style: var(--tw-border-style); - border-width: 0px; - } - } - .file\:bg-slate-200 { - &::file-selector-button { - background-color: var(--color-slate-200); - } - } - .file\:px-3 { - &::file-selector-button { - padding-inline: calc(var(--spacing) * 3); - } - } - .file\:py-1 { - &::file-selector-button { - padding-block: calc(var(--spacing) * 1); - } - } - .file\:text-sm { - &::file-selector-button { - font-size: var(--text-sm); - line-height: var(--tw-leading, var(--text-sm--line-height)); - } - } - .file\:font-medium { - &::file-selector-button { - --tw-font-weight: var(--font-weight-medium); - font-weight: var(--font-weight-medium); - } - } - .hover\:border-slate-400 { - &:hover { - @media (hover: hover) { - border-color: var(--color-slate-400); - } - } - } - .hover\:bg-slate-50 { - &:hover { - @media (hover: hover) { - background-color: var(--color-slate-50); - } - } - } - .hover\:text-slate-600 { - &:hover { - @media (hover: hover) { - color: var(--color-slate-600); - } - } - } - .hover\:text-slate-800 { - &:hover { - @media (hover: hover) { - color: var(--color-slate-800); - } - } - } - .hover\:underline { - &:hover { - @media (hover: hover) { - text-decoration-line: underline; - } - } - } - .hover\:file\:bg-slate-300 { - &:hover { - @media (hover: hover) { - &::file-selector-button { - background-color: var(--color-slate-300); - } - } - } - } - .focus\:border-blue-600 { - &:focus { - border-color: var(--color-blue-600); - } - } - .focus\:border-slate-500 { - &:focus { - border-color: var(--color-slate-500); - } - } - .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-blue-600 { - &:focus { - --tw-ring-color: var(--color-blue-600); - } - } - .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; - } - } - .sm\:mt-0 { - @media (width >= 40rem) { - margin-top: calc(var(--spacing) * 0); - } - } - .sm\:flex { - @media (width >= 40rem) { - display: flex; - } - } - .sm\:grid-cols-3 { - @media (width >= 40rem) { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } - } - .sm\:flex-row { - @media (width >= 40rem) { - flex-direction: row; - } - } - .sm\:items-center { - @media (width >= 40rem) { - align-items: center; - } - } - .sm\:justify-between { - @media (width >= 40rem) { - justify-content: space-between; - } - } - .sm\:gap-3 { - @media (width >= 40rem) { - gap: calc(var(--spacing) * 3); - } - } - .sm\:px-6 { - @media (width >= 40rem) { - padding-inline: calc(var(--spacing) * 6); - } - } - .sm\:text-right { - @media (width >= 40rem) { - text-align: right; - } - } - .md\:text-3xl { - @media (width >= 48rem) { - font-size: var(--text-3xl); - line-height: var(--tw-leading, var(--text-3xl--line-height)); - } - } -} -:root { - --color-text-primary: hsl(0 0% 9%); - --color-text-secondary: #475467; - --color-text-muted: hsl(0 0% 43.5%); - --color-text-faint: #9ca3af; - --color-text-inverse: #ffffff; - --color-text-brand: #804eec; - --color-text-brand-hover: #6f3fd4; - --color-text-brand-strong: #7c3aed; - --color-text-brand-accent: #7f56d9; - --color-text-heading-alt: #1f2937; - --color-text-body-subtle: #374151; - --color-text-google: #1f1f1f; - --color-text-overlay: #344054; - --color-text-disabled: #667085; - --color-surface-page: hsl(0 0% 100%); - --color-surface-default: #ffffff; - --color-surface-card: rgba(255, 255, 255, 0.8); - --color-surface-subtle: hsl(0 0% 96.1%); - --color-surface-muted: #f3f4f6; - --color-surface-muted-hover: #e5e7eb; - --color-surface-muted-active: #d1d5db; - --color-surface-muted-inverse: #111827; - --color-surface-elevated: rgba(255, 255, 255, 0.92); - --color-surface-elevated-strong: rgba(255, 255, 255, 0.95); - --color-surface-elevated-soft: rgba(255, 255, 255, 0.9); - --color-surface-overlay: rgba(255, 255, 255, 0.88); - --color-surface-overlay-strong: rgba(255, 255, 255, 0.96); - --color-surface-brand-soft: #ede9fe; - --color-surface-brand-soft-hover: #ddd6fe; - --color-surface-brand-soft-active: #c4b5fd; - --color-surface-brand-muted: #f4f3ff; - --color-surface-neutral-hover: rgba(249, 250, 251, 0.9); - --color-surface-page-tint: #f8f7ff; - --color-surface-page-tint-alt: #f4f7fb; - --color-border-default: hsl(0 0% 90.9%); - --color-border-strong: #d1d5db; - --color-border-muted: #e5e7eb; - --color-border-subtle: #d0d5dd; - --color-border-google: #747775; - --color-border-panel: rgba(30, 27, 46, 0.08); - --color-border-panel-muted: rgba(107, 114, 128, 0.22); - --color-border-panel-strong: rgba(107, 114, 128, 0.35); - --color-border-overlay: rgba(148, 163, 184, 0.22); - --color-border-overlay-strong: rgba(148, 163, 184, 0.3); - --color-brand-ink: #1e1b2e; - --color-brand-primary: #804eec; - --color-brand-primary-hover: #6d28d9; - --color-brand-primary-active: #5b21b6; - --color-brand-secondary: #a855f7; - --color-brand-accent: #3b82f6; - --color-focus-ring: rgba(124, 58, 237, 0.2); - --color-focus-ring-strong: rgba(139, 92, 246, 0.16); - --color-ring-subtle: rgba(30, 27, 46, 0.35); - --color-status-info-soft-bg: #eff6ff; - --color-status-info-soft-border: #bfdbfe; - --color-status-info-foreground: #2563eb; - --color-status-warning-soft-bg: #fff4e2; - --color-status-warning-soft-border: #db9729; - --color-status-warning-foreground: #db9729; - --color-status-warning-strong: #db9729; - --color-status-warning-strong-hover: #c37f12; - --color-status-warning-strong-active: #a9670c; - --color-status-warning-strong-foreground: #ffffff; - --color-status-warning-soft-foreground-strong: #b86e00; - --color-status-warning-soft-bg-hover: #fee6b7; - --color-status-warning-soft-bg-active: #fdd58e; - --color-status-warning-emphasis-bg: #fffbeb; - --color-status-warning-emphasis-border: #fde68a; - --color-status-warning-emphasis-foreground: #ca8a04; - --color-status-success-soft-bg: #ecfdf3; - --color-status-success-soft-border: #bbf7d0; - --color-status-success-foreground: #16a34a; - --color-status-success-strong: #16a34a; - --color-status-success-strong-hover: #15803d; - --color-status-success-strong-active: #166534; - --color-status-success-strong-foreground: #ffffff; - --color-status-success-soft-foreground-strong: #15803d; - --color-status-success-soft-bg-hover: #d1fadf; - --color-status-success-soft-bg-active: #a6f4c5; - --color-status-success-banner-bg: hsl(143 85% 96%); - --color-status-success-banner-border: hsl(145 92% 87%); - --color-status-success-banner-foreground: hsl(140 100% 27%); - --color-status-danger-soft-bg: #fef2f2; - --color-status-danger-soft-bg-alt: #fef3f2; - --color-status-danger-soft-border: #fecaca; - --color-status-danger-foreground: #dc2626; - --color-status-danger-strong: #dc2626; - --color-status-danger-strong-hover: #b91c1c; - --color-status-danger-strong-active: #991b1b; - --color-status-danger-strong-foreground: #ffffff; - --color-status-danger-soft-foreground-strong: #b42318; - --color-status-danger-soft-bg-hover: #fee4e2; - --color-status-danger-soft-bg-active: #fecdca; - --color-status-danger-icon-hover: #ef4444; - --color-status-danger-banner-bg: hsl(359 100% 97%); - --color-status-danger-banner-border: hsl(359 100% 94%); - --color-status-danger-banner-foreground: hsl(360 100% 45%); - --overlay-backdrop-default: rgba(17, 24, 39, 0.52); - --overlay-dark-soft: rgba(30, 27, 46, 0.05); - --overlay-dark-soft-alt: rgba(30, 27, 46, 0.06); - --overlay-dark-border: rgba(30, 27, 46, 0.08); - --overlay-dark-strong: rgba(30, 27, 46, 0.14); - --overlay-brand-soft: rgba(124, 58, 237, 0.1); - --overlay-brand-soft-strong: rgba(124, 58, 237, 0.14); - --overlay-brand-muted: rgba(128, 78, 236, 0.08); - --overlay-brand-faint: rgba(128, 78, 236, 0.04); - --overlay-brand-glow: rgba(128, 78, 236, 0.1); - --overlay-google-state: #303030; - --shadow-auth-card: 0 20px 45px rgba(0, 0, 0, 0.1); - --shadow-surface-sm: 0 10px 30px rgba(15, 23, 42, 0.05); - --shadow-surface-md: 0 10px 30px rgba(15, 23, 42, 0.06); - --shadow-surface-hover: 0 12px 30px rgba(15, 23, 42, 0.08); - --shadow-surface-lg: 0 24px 48px rgba(15, 23, 42, 0.18); - --shadow-surface-xl: 0 32px 70px rgba(15, 23, 42, 0.12); - --shadow-sidebar: 20px 0 45px rgba(30, 27, 46, 0.06); - --shadow-floating-control: 0 10px 24px rgba(30, 27, 46, 0.14); - --shadow-google-button: 0 1px 2px 0 rgba(60, 64, 67, 0.3), - 0 1px 3px 1px rgba(60, 64, 67, 0.15); - --shadow-brand-action: 0 18px 35px rgba(124, 58, 237, 0.25); - --gradient-shell: linear-gradient(135deg, var(--overlay-brand-muted), transparent 30%), - linear-gradient(160deg, var(--overlay-dark-soft), transparent 42%), - linear-gradient(to bottom right, var(--overlay-dark-border), var(--color-surface-page), var(--overlay-brand-faint)); - --gradient-card-glow: linear-gradient(to bottom right, rgba(30, 27, 46, 0.1), var(--overlay-dark-soft), var(--overlay-brand-glow)); - --gradient-overview-badge: linear-gradient(to right, var(--color-brand-secondary), var(--color-brand-accent)); - --gradient-app-surface: linear-gradient(180deg, var(--color-surface-overlay-strong) 0%, var(--color-surface-default) 100%); - --gradient-not-found-bg: radial-gradient(circle at top, var(--overlay-brand-soft-strong), transparent 35%), - linear-gradient(180deg, var(--color-surface-page-tint) 0%, var(--color-surface-page-tint-alt) 100%); - --gradient-not-found-primary: linear-gradient(135deg, var(--color-text-brand-strong) 0%, var(--color-status-info-foreground) 100%); - --color-project-fallback: #3b82f6; - --color-project-accent-purple: #a855f7; - --color-project-accent-red: #ef4444; - --background: var(--color-surface-page); - --foreground: var(--color-text-primary); - --muted-foreground: var(--color-text-muted); - --border: var(--color-border-default); - --input: var(--color-border-default); - --card: var(--color-surface-card); - --accent: var(--color-surface-subtle); - --primary: var(--color-brand-ink); - --primary-foreground: var(--color-text-inverse); - --secondary: var(--color-brand-primary); - --ring: var(--color-ring-subtle); -} -* { - box-sizing: border-box; -} -html, body { - margin: 0; - min-height: 100%; -} -body { - background: var(--background); - color: var(--foreground); - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; -} -a { - color: inherit; - text-decoration: none; -} -button, input { - font: inherit; -} -.light-only { - display: block; -} -.dark-only { - display: none; -} -.visually-hidden { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.login-screen { - align-items: center; - background: var(--gradient-shell); - display: flex; - justify-content: center; - min-height: 100vh; - overflow: hidden; - padding: 2rem 1rem; - position: relative; -} -.background-layer { - inset: 0; - overflow: hidden; - pointer-events: none; - position: absolute; -} -.background-logo { - position: absolute; -} -.logo-asset { - display: block; - height: auto; - object-fit: contain; - width: 100%; -} -.size-06 { - width: 1.5rem; - height: 1.5rem; -} -.size-07 { - width: 1.75rem; - height: 1.75rem; -} -.size-08 { - width: 2rem; - height: 2rem; -} -.size-09 { - width: 2.25rem; - height: 2.25rem; -} -.size-10 { - width: 2.5rem; - height: 2.5rem; -} -.size-11 { - width: 2.75rem; - height: 2.75rem; -} -.size-12 { - width: 3rem; - height: 3rem; -} -.size-13 { - width: 3.25rem; - height: 3.25rem; -} -.size-14 { - width: 3.5rem; - height: 3.5rem; -} -.size-15 { - width: 3.75rem; - height: 3.75rem; -} -.size-16 { - width: 4rem; - height: 4rem; -} -.size-18 { - width: 4.5rem; - height: 4.5rem; -} -.size-20 { - width: 5rem; - height: 5rem; -} -.opacity-02 { - opacity: 0.2; -} -.opacity-03 { - opacity: 0.3; -} -.opacity-04 { - opacity: 0.4; -} -.opacity-05 { - opacity: 0.5; -} -.bg-01 { - top: 25%; - left: 0; -} -.bg-02 { - top: 33%; - left: 0; -} -.bg-03 { - top: 50%; - left: 0; -} -.bg-04 { - top: 66%; - left: 0; -} -.bg-05 { - top: 75%; - left: 0; -} -.bg-06 { - top: 0; - left: 25%; -} -.bg-07 { - top: 0; - left: 50%; -} -.bg-08 { - top: 0; - left: 75%; -} -.bg-09 { - top: 0; - left: 16.66%; -} -.bg-10 { - top: 0; - left: 83.33%; -} -.bg-11, .bg-12, .bg-13, .bg-14, .bg-15 { - left: 50%; - top: 50%; -} -.bg-16 { - top: 25%; - left: 0; -} -.bg-17 { - top: 50%; - left: 0; -} -.bg-18 { - top: 75%; - left: 0; -} -.bg-19 { - top: 0; - left: 25%; -} -.bg-20 { - top: 0; - left: 75%; -} -.bg-21 { - top: 16.66%; - left: 33.33%; -} -.bg-22 { - top: 33.33%; - left: 66.66%; -} -.bg-23 { - top: 66.66%; - left: 25%; -} -.bg-24 { - top: 83.33%; - left: 75%; -} -.bg-25 { - top: 12.5%; - left: 0; -} -.bg-26 { - top: 37.5%; - left: 0; -} -.bg-27 { - top: 62.5%; - left: 0; -} -.bg-28 { - top: 87.5%; - left: 0; -} -.bg-29 { - top: 0; - left: 0; -} -.bg-30 { - top: 0; - right: 0; -} -.bg-31 { - bottom: 0; - left: 0; -} -.bg-32 { - bottom: 0; - right: 0; -} -.bg-33 { - top: 20%; - left: 20%; -} -.bg-34 { - top: 40%; - left: 80%; -} -.bg-35 { - top: 80%; - left: 40%; -} -.card-wrap { - max-width: 32rem; - position: relative; - transition: transform 0.2s ease-out; - width: 100%; - z-index: 1; -} -.card-glow { - background: var(--gradient-card-glow); - border-radius: 1rem; - filter: blur(24px); - inset: 0; - position: absolute; - z-index: -1; -} -.auth-card-shell { - backdrop-filter: blur(12px); - background: var(--card); - border: 1px solid var(--border); - border-radius: 1rem; - box-shadow: var(--shadow-auth-card); - padding: 1.25rem; - position: relative; -} -.auth-card-topbar { - align-items: center; - display: flex; - justify-content: space-between; - margin-bottom: 1.5rem; -} -.brand-header { - display: flex; - justify-content: center; - margin-bottom: 1.5rem; -} -.brand-logo { - display: block; - height: 4rem; - object-fit: contain; - width: 4rem; -} -.title-group { - margin-bottom: 1.5rem; - text-align: center; -} -.title-group h1 { - font-size: clamp(1.5rem, 4vw, 1.875rem); - font-weight: 700; - margin: 0; -} -.auth-body { - align-items: center; - display: flex; - flex-direction: column; - gap: 1rem; -} -.login-form { - display: flex; - flex-direction: column; - gap: 1rem; - margin: 0 auto; - max-width: 28rem; - width: 100%; -} -.divider-row { - align-items: center; - display: flex; - gap: 0.25rem; - margin: 0.5rem 0 0; - position: relative; - width: 100%; -} -.divider-line { - border-top: 1px solid var(--border); - flex: 1; -} -.divider-pill { - background: var(--background); - border-radius: 999px; - color: var(--muted-foreground); - font-size: 0.875rem; - font-weight: 500; - padding: 0.25rem 1rem; - position: relative; - z-index: 1; -} -.signup-copy { - color: var(--muted-foreground); - font-size: 0.875rem; - margin: 0; - text-align: center; -} -.signup-link { - border-radius: 0.375rem; - color: var(--foreground); - display: inline-block; - font-weight: 500; - margin-left: 0.2rem; - padding: 0.25rem 0.5rem; - transition: color 0.2s ease, background-color 0.2s ease; -} -.signup-link:hover { - background: var(--accent); -} -.status-slot { - min-height: 0.25rem; -} -.status-banner { - border: 1px solid; - border-radius: 0.5rem; - font-size: 0.875rem; - padding: 0.75rem 0.875rem; -} -.status-success { - background: var(--color-status-success-banner-bg); - border-color: var(--color-status-success-banner-border); - color: var(--color-status-success-banner-foreground); -} -.status-error { - background: var(--color-status-danger-banner-bg); - border-color: var(--color-status-danger-banner-border); - color: var(--color-status-danger-banner-foreground); -} -.gsi-material-button { - -moz-user-select: none; - -ms-user-select: none; - -webkit-appearance: none; - -webkit-user-select: none; - background-color: var(--color-surface-default); - background-image: none; - border: 1px solid var(--color-border-google); - border-radius: 20px; - box-sizing: border-box; - color: var(--color-text-google); - cursor: pointer; - display: block; - font-family: "Roboto", Arial, sans-serif; - font-size: 14px; - height: 40px; - letter-spacing: 0.25px; - margin: 0 auto; - min-width: min-content; - outline: none; - overflow: hidden; - padding: 0 12px; - position: relative; - text-align: center; - text-decoration: none; - transition: background-color 0.218s, border-color 0.218s, box-shadow 0.218s; - vertical-align: middle; - white-space: nowrap; - width: max-content; -} -.gsi-material-button .gsi-material-button-icon { - height: 20px; - margin-right: 12px; - min-width: 20px; - width: 20px; -} -.gsi-material-button .gsi-material-button-icon svg { - display: block; - height: 100%; - width: 100%; -} -.gsi-material-button .gsi-material-button-content-wrapper { - align-items: center; - display: flex; - flex-direction: row; - flex-wrap: nowrap; - height: 100%; - justify-content: space-between; - position: relative; - width: 100%; -} -.gsi-material-button .gsi-material-button-contents { - flex-grow: 0; - font-family: "Roboto", Arial, sans-serif; - font-weight: 500; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: top; -} -.gsi-material-button .gsi-material-button-state { - bottom: 0; - left: 0; - opacity: 0; - position: absolute; - right: 0; - top: 0; - transition: opacity 0.218s; -} -.gsi-material-button:not(:disabled):active .gsi-material-button-state, .gsi-material-button:not(:disabled):focus .gsi-material-button-state { - background-color: var(--overlay-google-state); - opacity: 0.12; -} -.gsi-material-button:not(:disabled):hover { - box-shadow: var(--shadow-google-button); -} -.gsi-material-button:not(:disabled):hover .gsi-material-button-state { - background-color: var(--overlay-google-state); - opacity: 0.08; -} -.auth-provider-stack { - display: grid; - gap: 8px; - margin-bottom: 16px; -} -.auth-provider-button { - display: inline-flex; - min-height: 44px; - width: 100%; - align-items: center; - justify-content: center; - border-radius: 0.375rem; - border: 1px solid #e2e8f0; - background-color: #ffffff; - padding: 0.625rem 1rem; - color: #0f172a; - font-size: 1rem; - font-weight: 600; - line-height: 1.25; - text-align: center; - text-decoration: none; -} -.auth-provider-button:hover { - background-color: #f8fafc; -} -.auth-provider-button:focus-visible { - outline: 2px solid #2563eb; - outline-offset: 2px; -} -.auth-provider-button-disabled, .auth-provider-button-disabled:hover { - background-color: #f1f5f9; - color: #94a3b8; - cursor: not-allowed; -} -.auth-provider-separator { - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: center; - gap: 8px; - margin: 16px 0; - color: #64748b; - font-size: 0.875rem; - line-height: 1.4; -} -.auth-provider-separator span { - height: 1px; - background-color: #e2e8f0; -} -.auth-provider-separator em { - font-style: normal; -} -@keyframes move-right-slow { - from { - transform: translateX(-6rem); - } - to { - transform: translateX(calc(100vw + 6rem)); - } -} -@keyframes move-right-medium { - from { - transform: translateX(-5rem); - } - to { - transform: translateX(calc(100vw + 5rem)); - } -} -@keyframes move-right-fast { - from { - transform: translateX(-7rem); - } - to { - transform: translateX(calc(100vw + 7rem)); - } -} -@keyframes move-down-slow { - from { - transform: translateY(-6rem); - } - to { - transform: translateY(calc(100vh + 6rem)); - } -} -@keyframes move-down-medium { - from { - transform: translateY(-5rem); - } - to { - transform: translateY(calc(100vh + 5rem)); - } -} -@keyframes move-diagonal-1 { - from { - transform: translate(-4rem, -4rem); - } - to { - transform: translate(52vw, 70vh); - } -} -@keyframes move-diagonal-2 { - from { - transform: translate(0, -4rem); - } - to { - transform: translate(-18vw, 76vh); - } -} -@keyframes move-diagonal-3 { - from { - transform: translate(0, -4rem); - } - to { - transform: translate(12vw, 72vh); - } -} -@keyframes orbit-1 { - from { - transform: translate(-50%, -50%) rotate(0deg) translateX(11rem); - } - to { - transform: translate(-50%, -50%) rotate(360deg) translateX(11rem); - } -} -@keyframes orbit-2 { - from { - transform: translate(-50%, -50%) rotate(0deg) translateX(7rem); - } - to { - transform: translate(-50%, -50%) rotate(-360deg) translateX(7rem); - } -} -@keyframes orbit-3 { - from { - transform: translate(-50%, -50%) rotate(0deg) translateX(5rem); - } - to { - transform: translate(-50%, -50%) rotate(360deg) translateX(5rem); - } -} -@keyframes orbit-4 { - from { - transform: translate(-50%, -50%) rotate(0deg) translateX(15rem); - } - to { - transform: translate(-50%, -50%) rotate(360deg) translateX(15rem); - } -} -@keyframes orbit-5 { - from { - transform: translate(-50%, -50%) rotate(0deg) translateX(8rem); - } - to { - transform: translate(-50%, -50%) rotate(-360deg) translateX(8rem); - } -} -@keyframes zigzag-1 { - 0% { - transform: translateX(-6rem) translateY(0); - } - 25% { - transform: translateX(25vw) translateY(-3rem); - } - 50% { - transform: translateX(50vw) translateY(3rem); - } - 75% { - transform: translateX(75vw) translateY(-2rem); - } - 100% { - transform: translateX(calc(100vw + 6rem)) translateY(1rem); - } -} -@keyframes zigzag-2 { - 0% { - transform: translateX(-5rem) translateY(0); - } - 25% { - transform: translateX(25vw) translateY(2rem); - } - 50% { - transform: translateX(50vw) translateY(-3rem); - } - 75% { - transform: translateX(75vw) translateY(1.5rem); - } - 100% { - transform: translateX(calc(100vw + 5rem)) translateY(0); - } -} -@keyframes zigzag-3 { - 0% { - transform: translateX(-7rem) translateY(0); - } - 20% { - transform: translateX(20vw) translateY(-4rem); - } - 40% { - transform: translateX(40vw) translateY(4rem); - } - 60% { - transform: translateX(60vw) translateY(-2rem); - } - 80% { - transform: translateX(80vw) translateY(3rem); - } - 100% { - transform: translateX(calc(100vw + 7rem)) translateY(0); - } -} -@keyframes spiral-1 { - 0% { - transform: translate(0, 0) rotate(0deg) scale(0.6); - } - 100% { - transform: translate(90vw, 90vh) rotate(360deg) scale(1.3); - } -} -@keyframes spiral-2 { - 0% { - transform: translate(0, 0) rotate(0deg) scale(1.4); - } - 100% { - transform: translate(-70vw, 90vh) rotate(-360deg) scale(0.7); - } -} -@keyframes float-random-1 { - 0%, 100% { - transform: translate(0, 0); - } - 50% { - transform: translate(1.4rem, -1rem); - } -} -@keyframes float-random-2 { - 0%, 100% { - transform: translate(0, 0); - } - 50% { - transform: translate(-1.2rem, 1.1rem); - } -} -@keyframes float-random-3 { - 0%, 100% { - transform: translate(0, 0); - } - 50% { - transform: translate(0.9rem, -1.4rem); - } -} -@keyframes float-random-4 { - 0%, 100% { - transform: translate(0, 0); - } - 50% { - transform: translate(-1rem, 0.8rem); - } -} -@keyframes wave-1 { - from { - transform: translateX(-4rem); - } - to { - transform: translateX(calc(100vw + 4rem)); - } -} -@keyframes wave-2 { - from { - transform: translateX(-5rem); - } - to { - transform: translateX(calc(100vw + 5rem)); - } -} -@keyframes wave-3 { - from { - transform: translateX(-4rem); - } - to { - transform: translateX(calc(100vw + 4rem)); - } -} -@keyframes wave-4 { - from { - transform: translateX(-6rem); - } - to { - transform: translateX(calc(100vw + 6rem)); - } -} -@keyframes corner-shoot-1 { - from { - transform: translate(0, 0); - } - to { - transform: translate(110vw, 110vh); - } -} -@keyframes corner-shoot-2 { - from { - transform: translate(0, 0); - } - to { - transform: translate(-110vw, 110vh); - } -} -@keyframes corner-shoot-3 { - from { - transform: translate(0, 0); - } - to { - transform: translate(110vw, -110vh); - } -} -@keyframes corner-shoot-4 { - from { - transform: translate(0, 0); - } - to { - transform: translate(-110vw, -110vh); - } -} -@keyframes bounce-ball-1 { - 0%, 100% { - transform: translateY(0) translateX(0); - } - 50% { - transform: translateY(-5rem) translateX(2rem); - } -} -@keyframes bounce-ball-2 { - 0%, 100% { - transform: translateY(0) translateX(0); - } - 50% { - transform: translateY(4rem) translateX(-2rem); - } -} -@keyframes bounce-ball-3 { - 0%, 100% { - transform: translateY(0) translateX(0); - } - 50% { - transform: translateY(-4rem) translateX(1.5rem); - } -} -@keyframes spin-slow { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} -@keyframes spin-reverse { - from { - transform: rotate(0deg); - } - to { - transform: rotate(-360deg); - } -} -@keyframes bounce-gentle { - 0%, 100% { - transform: translateY(0); - } - 50% { - transform: translateY(-0.6rem); - } -} -@keyframes pulse-gentle { - 0%, 100% { - transform: scale(1); - opacity: 1; - } - 50% { - transform: scale(1.08); - opacity: 0.85; - } -} -@keyframes wiggle { - 0%, 100% { - transform: rotate(0deg); - } - 25% { - transform: rotate(-4deg); - } - 75% { - transform: rotate(4deg); - } -} -@keyframes float-gentle { - 0%, 100% { - transform: translateY(0); - } - 50% { - transform: translateY(-0.8rem); - } -} -@keyframes scale-gentle { - 0%, 100% { - transform: scale(1); - } - 50% { - transform: scale(1.12); - } -} -@keyframes rotate-gentle { - 0%, 100% { - transform: rotate(0deg); - } - 50% { - transform: rotate(12deg); - } -} -@keyframes bounce-soft { - 0%, 100% { - transform: translateY(0); - } - 50% { - transform: translateY(-0.9rem); - } -} -@keyframes sway { - 0%, 100% { - transform: translateX(0); - } - 50% { - transform: translateX(0.8rem); - } -} -@keyframes spin-fast { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} -@keyframes pulse-fast { - 0%, 100% { - transform: scale(1); - } - 50% { - transform: scale(1.2); - } -} -@keyframes wobble { - 0%, 100% { - transform: translateX(0); - } - 15% { - transform: translateX(-0.35rem) rotate(-5deg); - } - 30% { - transform: translateX(0.25rem) rotate(4deg); - } - 45% { - transform: translateX(-0.2rem) rotate(-2deg); - } - 60% { - transform: translateX(0.12rem) rotate(1deg); - } -} -@keyframes shake { - 0%, 100% { - transform: translateX(0); - } - 25% { - transform: translateX(-0.12rem); - } - 75% { - transform: translateX(0.12rem); - } -} -@keyframes bounce-crazy { - 0%, 100% { - transform: translateY(0) scale(1); - } - 25% { - transform: translateY(-0.5rem) scale(1.05); - } - 75% { - transform: translateY(0.2rem) scale(0.98); - } -} -@keyframes spin-wobble { - 0% { - transform: rotate(0deg) scale(1); - } - 50% { - transform: rotate(180deg) scale(1.12); - } - 100% { - transform: rotate(360deg) scale(1); - } -} -@keyframes flip { - 0%, 100% { - transform: rotateY(0deg); - } - 50% { - transform: rotateY(180deg); - } -} -@keyframes twirl { - 0%, 100% { - transform: rotate(0deg) scale(1); - } - 50% { - transform: rotate(180deg) scale(1.15); - } -} -@keyframes dance { - 0%, 100% { - transform: translateY(0) rotate(0deg); - } - 25% { - transform: translateY(-0.3rem) rotate(-6deg); - } - 75% { - transform: translateY(0.3rem) rotate(6deg); - } -} -@keyframes jiggle { - 0%, 100% { - transform: translateX(0); - } - 25% { - transform: translateX(-0.18rem); - } - 50% { - transform: translateX(0.18rem); - } - 75% { - transform: translateX(-0.1rem); - } -} -@keyframes vibrate { - 0%, 100% { - transform: translate(0); - } - 20% { - transform: translate(-1px, 1px); - } - 40% { - transform: translate(1px, -1px); - } - 60% { - transform: translate(-1px, -1px); - } - 80% { - transform: translate(1px, 1px); - } -} -@keyframes swing { - 0%, 100% { - transform: rotate(0deg); - } - 50% { - transform: rotate(10deg); - } -} -@keyframes pendulum { - 0%, 100% { - transform: rotate(-8deg); - } - 50% { - transform: rotate(8deg); - } -} -@keyframes elastic { - 0%, 100% { - transform: scale(1); - } - 30% { - transform: scale(1.15, 0.9); - } - 60% { - transform: scale(0.95, 1.08); - } -} -@keyframes rubber { - 0%, 100% { - transform: scale(1); - } - 35% { - transform: scale(1.2, 0.9); - } - 65% { - transform: scale(0.9, 1.15); - } -} -@keyframes rocket { - 0%, 100% { - transform: translateY(0) rotate(-8deg); - } - 50% { - transform: translateY(-0.8rem) rotate(-12deg); - } -} -@keyframes comet { - 0%, 100% { - transform: translateX(0) rotate(12deg); - } - 50% { - transform: translateX(0.8rem) rotate(18deg); - } -} -@keyframes meteor { - 0%, 100% { - transform: translateY(0) rotate(8deg); - } - 50% { - transform: translateY(-0.7rem) rotate(14deg); - } -} -@keyframes blast { - 0%, 100% { - transform: scale(1); - } - 50% { - transform: scale(1.2) rotate(10deg); - } -} -@keyframes spin-bounce { - 0%, 100% { - transform: rotate(0deg) translateY(0); - } - 50% { - transform: rotate(180deg) translateY(-0.5rem); - } -} -@keyframes flip-bounce { - 0%, 100% { - transform: rotateY(0deg) translateY(0); - } - 50% { - transform: rotateY(180deg) translateY(-0.5rem); - } -} -@keyframes scale-bounce { - 0%, 100% { - transform: scale(1) translateY(0); - } - 50% { - transform: scale(1.14) translateY(-0.55rem); - } -} -.animate-move-right-slow { - animation: move-right-slow 25s linear infinite; -} -.animate-move-right-medium { - animation: move-right-medium 20s linear infinite; -} -.animate-move-right-fast { - animation: move-right-fast 15s linear infinite; -} -.animate-move-down-slow { - animation: move-down-slow 30s linear infinite; -} -.animate-move-down-medium { - animation: move-down-medium 25s linear infinite; -} -.animate-move-diagonal-1 { - animation: move-diagonal-1 35s linear infinite; -} -.animate-move-diagonal-2 { - animation: move-diagonal-2 28s linear infinite; -} -.animate-move-diagonal-3 { - animation: move-diagonal-3 32s linear infinite; -} -.animate-orbit-1 { - animation: orbit-1 20s linear infinite; -} -.animate-orbit-2 { - animation: orbit-2 25s linear infinite reverse; -} -.animate-orbit-3 { - animation: orbit-3 15s linear infinite; -} -.animate-orbit-4 { - animation: orbit-4 22s linear infinite; -} -.animate-orbit-5 { - animation: orbit-5 18s linear infinite; -} -.animate-zigzag-1 { - animation: zigzag-1 18s linear infinite; -} -.animate-zigzag-2 { - animation: zigzag-2 22s linear infinite; -} -.animate-zigzag-3 { - animation: zigzag-3 16s linear infinite; -} -.animate-spiral-1 { - animation: spiral-1 30s linear infinite; -} -.animate-spiral-2 { - animation: spiral-2 25s linear infinite; -} -.animate-float-random-1 { - animation: float-random-1 8s ease-in-out infinite; -} -.animate-float-random-2 { - animation: float-random-2 10s ease-in-out infinite; -} -.animate-float-random-3 { - animation: float-random-3 12s ease-in-out infinite; -} -.animate-float-random-4 { - animation: float-random-4 9s ease-in-out infinite; -} -.animate-wave-1 { - animation: wave-1 20s linear infinite; -} -.animate-wave-2 { - animation: wave-2 24s linear infinite; -} -.animate-wave-3 { - animation: wave-3 18s linear infinite; -} -.animate-wave-4 { - animation: wave-4 26s linear infinite; -} -.animate-corner-shoot-1 { - animation: corner-shoot-1 15s linear infinite; -} -.animate-corner-shoot-2 { - animation: corner-shoot-2 18s linear infinite; -} -.animate-corner-shoot-3 { - animation: corner-shoot-3 20s linear infinite; -} -.animate-corner-shoot-4 { - animation: corner-shoot-4 16s linear infinite; -} -.animate-bounce-ball-1 { - animation: bounce-ball-1 12s ease-in-out infinite; -} -.animate-bounce-ball-2 { - animation: bounce-ball-2 14s ease-in-out infinite; -} -.animate-bounce-ball-3 { - animation: bounce-ball-3 10s ease-in-out infinite; -} -.animate-spin-slow { - animation: spin-slow 8s linear infinite; -} -.animate-spin-reverse { - animation: spin-reverse 6s linear infinite; -} -.animate-bounce-gentle { - animation: bounce-gentle 3s ease-in-out infinite; -} -.animate-bounce-soft { - animation: bounce-soft 4s ease-in-out infinite; -} -.animate-pulse-gentle { - animation: pulse-gentle 4s ease-in-out infinite; -} -.animate-wiggle { - animation: wiggle 2s ease-in-out infinite; -} -.animate-float-gentle { - animation: float-gentle 5s ease-in-out infinite; -} -.animate-scale-gentle { - animation: scale-gentle 6s ease-in-out infinite; -} -.animate-rotate-gentle { - animation: rotate-gentle 8s ease-in-out infinite; -} -.animate-sway { - animation: sway 3s ease-in-out infinite; -} -.animate-spin-fast { - animation: spin-fast 2s linear infinite; -} -.animate-pulse-fast { - animation: pulse-fast 1.5s ease-in-out infinite; -} -.animate-wobble { - animation: wobble 2s ease-in-out infinite; -} -.animate-shake { - animation: shake 0.5s ease-in-out infinite; -} -.animate-bounce-crazy { - animation: bounce-crazy 1s ease-in-out infinite; -} -.animate-spin-wobble { - animation: spin-wobble 4s ease-in-out infinite; -} -.animate-flip { - animation: flip 3s ease-in-out infinite; -} -.animate-twirl { - animation: twirl 5s ease-in-out infinite; -} -.animate-dance { - animation: dance 3s ease-in-out infinite; -} -.animate-jiggle { - animation: jiggle 1s ease-in-out infinite; -} -.animate-vibrate { - animation: vibrate 0.3s ease-in-out infinite; -} -.animate-swing { - animation: swing 2.8s ease-in-out infinite; -} -.animate-pendulum { - animation: pendulum 2.4s ease-in-out infinite; -} -.animate-elastic { - animation: elastic 2.2s ease-in-out infinite; -} -.animate-rubber { - animation: rubber 2.5s ease-in-out infinite; -} -.animate-rocket { - animation: rocket 1.8s ease-in-out infinite; -} -.animate-comet { - animation: comet 2s ease-in-out infinite; -} -.animate-meteor { - animation: meteor 1.7s ease-in-out infinite; -} -.animate-blast { - animation: blast 2.2s ease-in-out infinite; -} -.animate-spin-bounce { - animation: spin-bounce 2.4s ease-in-out infinite; -} -.animate-flip-bounce { - animation: flip-bounce 2.6s ease-in-out infinite; -} -.animate-scale-bounce { - animation: scale-bounce 2.1s ease-in-out infinite; -} -.ui-button { - align-items: center; - border: 0; - border-radius: 0.35rem; - cursor: pointer; - display: inline-flex; - font-weight: 600; - gap: 0.5rem; - justify-content: center; - line-height: 1; - min-height: 44px; - text-decoration: none; - transition: background-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease; -} -.ui-button-icon, .ui-button-icon svg { - height: 1rem; - width: 1rem; -} -.ui-button:focus-visible { - box-shadow: 0 0 0 3px var(--color-focus-ring); - outline: none; -} -.ui-button-sm { - font-size: 0.875rem; - min-height: 40px; - padding: 0.625rem 0.9rem; -} -.ui-button-md { - font-size: 0.95rem; - padding: 0.7rem 1rem; -} -.ui-button-lg { - font-size: 1rem; - padding: 0.82rem 1.15rem; -} -.ui-button-solid.ui-button-default { - background: var(--color-brand-primary); - color: var(--color-brand-foreground, var(--color-text-inverse)); -} -.ui-button-solid.ui-button-default:hover { - background: var(--color-brand-primary-hover); -} -.ui-button-solid.ui-button-default:active { - background: var(--color-brand-primary-active); -} -.ui-button-solid.ui-button-neutral { - background: var(--color-surface-muted); - color: var(--color-text-primary); -} -.ui-button-solid.ui-button-neutral:hover { - background: var(--color-surface-muted-hover); -} -.ui-button-solid.ui-button-neutral:active { - background: var(--color-surface-muted-active); -} -.ui-button-solid.ui-button-warning { - background: var(--color-status-warning-strong); - color: var(--color-status-warning-strong-foreground); -} -.ui-button-solid.ui-button-warning:hover { - background: var(--color-status-warning-strong-hover); -} -.ui-button-solid.ui-button-warning:active { - background: var(--color-status-warning-strong-active); -} -.ui-button-solid.ui-button-success { - background: var(--color-status-success-strong); - color: var(--color-status-success-strong-foreground); -} -.ui-button-solid.ui-button-success:hover { - background: var(--color-status-success-strong-hover); -} -.ui-button-solid.ui-button-success:active { - background: var(--color-status-success-strong-active); -} -.ui-button-solid.ui-button-danger { - background: var(--color-status-danger-strong); - color: var(--color-status-danger-strong-foreground); -} -.ui-button-solid.ui-button-danger:hover { - background: var(--color-status-danger-strong-hover); -} -.ui-button-solid.ui-button-danger:active { - background: var(--color-status-danger-strong-active); -} -.ui-button-soft.ui-button-default { - background: var(--color-surface-brand-soft); - color: var(--color-brand-primary-hover); -} -.ui-button-soft.ui-button-default:hover { - background: var(--color-surface-brand-soft-hover); -} -.ui-button-soft.ui-button-default:active { - background: var(--color-surface-brand-soft-active); -} -.ui-button-soft.ui-button-warning { - background: var(--color-status-warning-soft-bg); - color: var(--color-status-warning-soft-foreground-strong); -} -.ui-button-soft.ui-button-warning:hover { - background: var(--color-status-warning-soft-bg-hover); -} -.ui-button-soft.ui-button-warning:active { - background: var(--color-status-warning-soft-bg-active); -} -.ui-button-soft.ui-button-success { - background: var(--color-status-success-soft-bg); - color: var(--color-status-success-soft-foreground-strong); -} -.ui-button-soft.ui-button-success:hover { - background: var(--color-status-success-soft-bg-hover); -} -.ui-button-soft.ui-button-success:active { - background: var(--color-status-success-soft-bg-active); -} -.ui-button-soft.ui-button-danger { - background: var(--color-status-danger-soft-bg-alt); - color: var(--color-status-danger-soft-foreground-strong); -} -.ui-button-soft.ui-button-danger:hover { - background: var(--color-status-danger-soft-bg-hover); -} -.ui-button-soft.ui-button-danger:active { - background: var(--color-status-danger-soft-bg-active); -} -.ui-button-ghost { - background: transparent; - color: var(--color-brand-primary); -} -.ui-button-ghost:hover { - background: var(--color-surface-brand-soft); -} -.ui-button-ghost:focus-visible { - box-shadow: 0 0 0 3px var(--color-focus-ring); - outline: none; -} -.ui-button-soft.ui-button-neutral { - background: var(--color-surface-muted); - color: var(--color-text-secondary); -} -.ui-button-soft.ui-button-neutral:hover { - background: var(--color-surface-muted-hover); -} -.ui-button-soft.ui-button-neutral:active { - background: var(--color-surface-muted-active); -} -.ui-badge { - border: 1px solid transparent; - border-radius: 999px; - display: inline-flex; - font-size: 0.75rem; - font-weight: 600; - line-height: 1.2; - padding: 0.3rem 0.75rem; -} -.ui-badge-info { - background: var(--color-status-info-soft-bg); - border-color: var(--color-status-info-soft-border); - color: var(--color-status-info-foreground); -} -.ui-badge-warning { - background: var(--color-status-warning-soft-bg); - border-color: var(--color-status-warning-soft-border); - color: var(--color-status-warning-foreground); -} -.ui-badge-success { - background: var(--color-status-success-soft-bg); - border-color: var(--color-status-success-soft-border); - color: var(--color-status-success-foreground); -} -.ui-badge-danger { - background: var(--color-status-danger-soft-bg); - border-color: var(--color-status-danger-soft-border); - color: var(--color-status-danger-foreground); -} -.ui-badge-primary { - background: var(--color-surface-brand-soft); - border-color: rgba(128, 78, 236, 0.3); - color: var(--color-text-brand); -} -.ui-card { - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 1rem; - box-shadow: var(--shadow-surface-md); -} -.ui-card-header, .ui-card-body, .ui-card-footer { - padding: 1.25rem 1.5rem; -} -.ui-card-header, .ui-card-footer { - border-color: var(--color-border-default); -} -.ui-card-header { - border-bottom-style: solid; - border-bottom-width: 1px; -} -.ui-card-footer { - border-top-style: solid; - border-top-width: 1px; -} -.ui-input { - appearance: none; - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 0.75rem; - color: var(--color-text-primary); - font: inherit; - line-height: 1.4; - min-height: 44px; - padding: 0.75rem 0.95rem; - width: 100%; -} -.ui-input::placeholder { - color: var(--color-text-faint); -} -.ui-input:focus { - border-color: var(--color-brand-focus); - box-shadow: 0 0 0 3px var(--color-focus-ring-strong); - outline: none; -} -.ui-textarea { - appearance: none; - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 0.75rem; - color: var(--color-text-primary); - font: inherit; - line-height: 1.4; - min-height: 7rem; - padding: 0.85rem 0.95rem; - resize: vertical; - width: 100%; -} -.ui-textarea::placeholder { - color: var(--color-text-faint); -} -.ui-textarea:focus { - border-color: var(--color-brand-focus); - box-shadow: 0 0 0 3px var(--color-focus-ring-strong); - outline: none; -} -.ui-select { - position: relative; - width: 100%; -} -.ui-select-native { - height: 0; - left: 0; - opacity: 0; - pointer-events: none; - position: absolute; - top: 0; - width: 0; -} -.ui-select-control { - align-items: center; - appearance: none; - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 0.75rem; - color: var(--color-text-primary); - cursor: pointer; - display: flex; - gap: 0.75rem; - justify-content: space-between; - min-height: 44px; - padding: 0.55rem 0.75rem 0.55rem 0.95rem; - text-align: left; - transition: border-color 0.2s ease, box-shadow 0.2s ease; - width: 100%; -} -.ui-select-control:focus-visible { - border-color: var(--color-brand-focus); - box-shadow: 0 0 0 3px var(--color-focus-ring-strong); - outline: none; -} -.ui-select-control:disabled { - color: var(--color-text-faint); - cursor: not-allowed; -} -.ui-select-value-wrapper { - align-items: center; - display: flex; - flex: 1 1 auto; - flex-wrap: wrap; - gap: 0.35rem; - min-width: 0; -} -.ui-select-placeholder { - color: var(--color-text-faint); -} -.ui-select-chip { - background: var(--color-surface-muted); - border-radius: 999px; - color: var(--color-text-primary); - display: inline-flex; - font-size: 0.875rem; - line-height: 1; - padding: 0.35rem 0.6rem; -} -.ui-select-arrow-zone { - align-items: center; - color: var(--color-text-secondary); - display: inline-flex; - flex: 0 0 auto; - justify-content: center; -} -.ui-select-arrow-icon { - height: 1rem; - transition: transform 0.2s ease; - width: 1rem; -} -.ui-select.is-open .ui-select-arrow-icon { - transform: rotate(180deg); -} -.ui-select-menu { - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 0.9rem; - box-shadow: var(--shadow-surface-md); - display: grid; - gap: 0.25rem; - left: 0; - margin-top: 0.45rem; - max-height: 16rem; - overflow-y: auto; - padding: 0.4rem; - position: absolute; - right: 0; - top: 100%; - z-index: 30; -} -.ui-select-menu[hidden] { - display: none; -} -.ui-select-option { - align-items: center; - appearance: none; - background: transparent; - border: 0; - border-radius: 0.7rem; - color: var(--color-text-primary); - cursor: pointer; - display: flex; - font: inherit; - gap: 0.75rem; - justify-content: space-between; - padding: 0.7rem 0.8rem; - text-align: left; - width: 100%; -} -.ui-select-option:hover, .ui-select-option:focus-visible { - background: var(--color-surface-muted); - outline: none; -} -.ui-select-option.is-selected { - background: var(--color-status-info-soft-bg); - color: var(--color-text-brand); -} -.ui-select-option:disabled { - color: var(--color-text-faint); - cursor: not-allowed; -} -.ui-select-option-text { - flex: 1 1 auto; -} -.ui-select-option-check { - color: currentColor; - opacity: 0; -} -.ui-select-option.is-selected .ui-select-option-check { - opacity: 1; -} -.ui-modal-backdrop { - align-items: center; - background: var(--overlay-backdrop-default); - display: flex; - inset: 0; - justify-content: center; - padding: 1rem; - position: fixed; - z-index: 40; -} -.ui-modal-panel { - background: var(--color-surface-default); - border: 1px solid var(--color-border-default); - border-radius: 1rem; - box-shadow: var(--shadow-surface-lg); - max-width: 32rem; - width: min(100%, 32rem); -} -.ui-modal-header, .ui-modal-body, .ui-modal-actions { - padding-left: 1.5rem; - padding-right: 1.5rem; -} -.ui-modal-header { - border-bottom: 1px solid var(--color-border-default); - padding-bottom: 1rem; - padding-top: 1.25rem; -} -.ui-modal-header h2 { - color: var(--color-text-primary); - font-size: 1.125rem; - font-weight: 700; - margin: 0; -} -.ui-modal-body { - padding-bottom: 1.25rem; - padding-top: 1.25rem; -} -.ui-modal-actions { - border-top: 1px solid var(--color-border-default); - display: flex; - gap: 0.75rem; - justify-content: flex-end; - padding-bottom: 1rem; - padding-top: 1rem; -} -.ui-empty-state { - align-items: center; - border: 1px dashed var(--color-border-subtle); - border-radius: 1rem; - color: var(--color-text-muted); - display: flex; - flex-direction: column; - gap: 0.75rem; - justify-content: center; - padding: 3rem 1.5rem; - text-align: center; -} -.ui-empty-state-title { - color: var(--color-text-primary); - font-size: 1.125rem; - font-weight: 700; - margin: 0; -} -.ui-empty-state-icon { - align-items: center; - background: var(--color-surface-muted); - border-radius: 999px; - color: var(--color-text-faint); - display: inline-flex; - height: 4rem; - justify-content: center; - width: 4rem; -} -.ui-empty-state-icon svg { - height: 2rem; - width: 2rem; -} -.ui-empty-state-description { - margin: 0; - max-width: 32rem; -} -.ui-table-shell { - overflow-x: auto; - width: 100%; -} -.ui-table { - border-collapse: collapse; - min-width: 100%; - width: 100%; -} -.ui-icon-button { - align-items: center; - appearance: none; - background: transparent; - border: 0; - border-radius: 0.5rem; - cursor: pointer; - display: inline-flex; - justify-content: center; - min-height: 44px; - min-width: 44px; - padding: 0.5rem; - transition: background-color 0.2s ease, color 0.2s ease; -} -.ui-icon-button:focus-visible, .borderless-icon-button:focus-visible { - box-shadow: 0 0 0 3px var(--color-focus-ring); - outline: none; -} -.ui-icon-button-solid.ui-icon-button-neutral { - color: var(--color-text-muted); -} -.ui-icon-button-solid.ui-icon-button-danger { - color: var(--color-status-danger-foreground); -} -.ui-icon-button-solid.ui-icon-button-warning { - color: var(--color-status-warning-foreground); -} -.ui-icon-button-solid.ui-icon-button-success { - color: var(--color-status-success-foreground); -} -.ui-icon-button-solid.ui-icon-button-neutral:hover { - color: var(--color-text-primary); -} -.ui-icon-button-solid.ui-icon-button-danger:hover { - color: var(--color-status-danger-strong-hover); -} -.ui-icon-button-solid.ui-icon-button-warning:hover { - color: var(--color-status-warning-strong-hover); -} -.ui-icon-button-solid.ui-icon-button-success:hover { - color: var(--color-status-success-strong-hover); -} -.borderless-icon-button { - appearance: none; - background: transparent; - border: 0; - box-shadow: none; - cursor: pointer; - outline: none; -} -.ui-icon-button-ghost.ui-icon-button-neutral { - color: var(--color-text-faint); -} -.ui-icon-button-ghost.ui-icon-button-danger { - color: var(--color-text-faint); -} -.ui-icon-button-ghost.ui-icon-button-warning { - color: var(--color-text-faint); -} -.ui-icon-button-ghost.ui-icon-button-success { - color: var(--color-text-faint); -} -.ui-icon-button-ghost.ui-icon-button-neutral:hover { - color: var(--color-text-primary); -} -.ui-icon-button-ghost.ui-icon-button-danger:hover { - color: var(--color-status-danger-icon-hover); -} -.ui-icon-button-ghost.ui-icon-button-warning:hover { - color: var(--color-status-warning-strong); -} -.ui-icon-button-ghost.ui-icon-button-success:hover { - color: var(--color-status-success-strong); -} -.borderless-icon-button svg { - height: 1rem; - width: 1rem; -} -.ui-form-field { - display: grid; - gap: 0.5rem; -} -.ui-form-label { - color: var(--color-text-primary); - font-size: 0.95rem; - font-weight: 600; -} -.ui-form-hint { - color: var(--color-text-muted); - font-size: 0.875rem; - margin: 0; -} -.ui-form-error { - color: var(--color-status-danger-foreground); - font-size: 0.875rem; - margin: 0; -} -.ui-space-x { - display: inline-block; - flex-shrink: 0; -} -.ui-space-y { - display: block; -} -.ui-space-x-xs { - width: 0.25rem; -} -.ui-space-x-sm { - width: 0.5rem; -} -.ui-space-x-md { - width: 0.75rem; -} -.ui-space-x-lg { - width: 1rem; -} -.ui-space-x-xl { - width: 1.5rem; -} -.ui-space-y-xs { - height: 0.25rem; -} -.ui-space-y-sm { - height: 0.5rem; -} -.ui-space-y-md { - height: 0.75rem; -} -.ui-space-y-lg { - height: 1rem; -} -.ui-space-y-xl { - height: 1.5rem; -} -.dashboard-shell { - background: var(--gradient-shell); - color: var(--foreground); - display: grid; - grid-template-columns: minmax(16rem, 18rem) 1fr; - min-height: 100vh; -} -.dashboard-sidebar { - padding-left: env(safe-area-inset-left, 0px); -} -.sidebar-nav-shell { - background: var(--color-surface-elevated); - border-right: 1px solid var(--color-border-panel); - box-shadow: var(--shadow-sidebar); - display: flex; - flex-direction: column; - height: 100vh; - overflow-x: hidden; - overflow-y: auto; - padding: env(safe-area-inset-top, 0px) 0.75rem env(safe-area-inset-bottom, 0px) 0; - position: sticky; - top: 0; -} -.sidebar-brand { - align-items: center; - display: flex; - justify-content: center; - padding: 0.75rem 0.5rem; - position: relative; -} -.sidebar-brand-link { - align-items: center; - display: flex; - flex-direction: column; - gap: 0.5rem; - width: 100%; -} -.sidebar-brand-logo { - border-radius: 0.75rem; - height: 4rem; - object-fit: cover; - width: 4rem; -} -.sidebar-brand-title { - color: var(--color-text-heading-alt); - font-size: 1.125rem; - font-weight: 700; - margin: 0; -} -.sidebar-collapse-button { - align-items: center; - background: var(--color-surface-elevated-strong); - border: 0; - border-radius: 999px; - box-shadow: var(--shadow-floating-control); - color: var(--color-text-muted); - cursor: pointer; - display: inline-flex; - height: 1.5rem; - justify-content: center; - padding: 0.25rem; - position: absolute; - right: 0.75rem; - top: 0.5rem; - width: 1.5rem; -} -.sidebar-collapse-button svg { - height: 1rem; - width: 1rem; -} -.sidebar-primary { - display: flex; - flex: 1; - flex-direction: column; -} -.sidebar-list { - display: grid; - gap: 0; - list-style: none; - margin: 0; - padding: 0.75rem 0 0; -} -.sidebar-divider { - margin: 0.5rem 0; - padding: 0 0.875rem; -} -.sidebar-divider hr, .sidebar-projects hr { - border: 0; - border-top: 1px solid var(--color-border-panel-muted); - margin: 0; -} -.sidebar-nav-item { - border-radius: 0.9rem; - color: var(--color-text-muted); - font-weight: 500; - margin: 0 0.5rem; - padding: 0.15rem 0; - transition: background-color 0.2s ease, color 0.2s ease; -} -.sidebar-nav-item:hover { - background: var(--overlay-dark-soft); - color: var(--color-surface-muted-inverse); -} -.sidebar-nav-item.is-active { - background: var(--overlay-brand-soft-strong); - color: var(--color-text-brand); - font-weight: 600; -} -.sidebar-nav-link { - display: block; - width: 100%; -} -.sidebar-nav-link-inner { - align-items: center; - display: flex; - gap: 0.75rem; - padding: 0.6rem 0.95rem; -} -.sidebar-nav-icon { - align-items: center; - display: inline-flex; - justify-content: center; -} -.sidebar-nav-icon svg { - height: 1.35rem; - width: 1.35rem; -} -.sidebar-nav-label { - font-size: 1rem; -} -.sidebar-projects { - margin-top: 0.4rem; - padding: 0 0.75rem 0.75rem; -} -.sidebar-section-label { - color: var(--color-text-muted); - font-size: 0.625rem; - font-weight: 700; - letter-spacing: 0.14em; - margin: 0.9rem 0 0.65rem; - padding: 0 0.5rem; - text-transform: uppercase; -} -.sidebar-project-list { - display: grid; - gap: 0.1rem; - list-style: none; - margin: 0; - padding: 0; -} -.sidebar-project-link { - align-items: center; - border-radius: 0.85rem; - color: var(--color-text-muted); - display: flex; - gap: 0.65rem; - padding: 0.48rem 0.5rem; - transition: background-color 0.2s ease, color 0.2s ease; -} -.sidebar-project-link:hover { - background: var(--overlay-dark-soft); - color: var(--color-surface-muted-inverse); -} -.sidebar-project-icon { - align-items: center; - border: 1px solid var(--color-border-panel-strong); - border-radius: 999px; - display: inline-flex; - flex-shrink: 0; - height: 1.55rem; - justify-content: center; - width: 1.55rem; -} -.sidebar-project-icon svg { - height: 0.9rem; - width: 0.9rem; -} -.sidebar-project-label { - flex: 1; - font-size: 0.9rem; - min-width: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.sidebar-footer-links { - margin-top: auto; - padding-bottom: 0.25rem; -} -.sidebar-organization { - background: var(--color-surface-elevated); - padding: 0 0.5rem 0.9rem; -} -.organization-button { - align-items: center; - background: transparent; - border: 0; - border-radius: 0.95rem; - cursor: pointer; - display: flex; - gap: 0.65rem; - padding: 0.55rem 0.65rem; - text-align: left; - transition: background-color 0.2s ease; - width: 100%; -} -.organization-button:hover { - background: var(--overlay-dark-soft); -} -.organization-avatar { - border-radius: 999px; - display: inline-flex; - flex-shrink: 0; - height: 1.75rem; - overflow: hidden; - width: 1.75rem; -} -.organization-avatar img { - aspect-ratio: 1; - height: 100%; - object-fit: cover; - width: 100%; -} -.organization-copy { - display: flex; - flex-direction: column; - min-width: 0; -} -.organization-name { - color: var(--color-text-body-subtle); - font-size: 0.95rem; - font-weight: 600; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.organization-meta { - color: var(--color-text-muted); - font-size: 0.75rem; -} -.dashboard-shell.sidebar-is-collapsed { - grid-template-columns: 4rem 1fr; -} -.dashboard-shell.sidebar-is-collapsed .sidebar-brand-title, .dashboard-shell.sidebar-is-collapsed .sidebar-section-label, .dashboard-shell.sidebar-is-collapsed .sidebar-nav-label, .dashboard-shell.sidebar-is-collapsed .sidebar-project-label { - display: none; -} -.dashboard-shell.sidebar-is-collapsed .sidebar-nav-link-inner { - justify-content: center; -} -.dashboard-shell.sidebar-is-collapsed .sidebar-project-list { - display: none; -} -.dashboard-shell.sidebar-is-collapsed .sidebar-collapse-button svg { - transform: rotate(180deg); -} -.page-header { - display: flex; - align-items: center; - gap: 1rem; - padding: 0.75rem 1.5rem; - background: var(--color-surface-elevated); - border-bottom: 1px solid var(--color-border-panel); - margin: -2rem -2rem 1.5rem -2rem; -} -.page-header-left { - flex: 0 0 auto; -} -.page-header-center { - flex: 1 1 auto; - display: flex; - justify-content: center; -} -.page-header-right { - flex: 0 0 auto; - display: flex; - align-items: center; - gap: 0.5rem; -} -.page-header-actions { - flex: 0 0 auto; - margin-left: auto; -} -.breadcrumb { - display: flex; - align-items: center; - gap: 0.375rem; - font-size: 0.875rem; -} -.breadcrumb-separator { - color: var(--color-text-muted); - user-select: none; -} -.breadcrumb-item { - color: var(--color-text-muted); - font-weight: 500; -} -.breadcrumb-item--link { - color: var(--color-text-brand); - text-decoration: none; -} -.breadcrumb-item--link:hover { - text-decoration: underline; -} -.breadcrumb-item--current { - color: var(--color-text-muted); -} -.header-search-placeholder { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.375rem 0.75rem; - border: 1px solid var(--color-border-panel); - border-radius: 0.375rem; - background: var(--color-surface-muted-inverse); - color: var(--color-text-muted); - font-size: 0.875rem; - min-width: 16rem; - max-width: 28rem; - width: 100%; - cursor: default; -} -.header-icon-button { - display: flex; - align-items: center; - justify-content: center; - width: 2rem; - height: 2rem; - border-radius: 0.375rem; - border: none; - background: transparent; - color: var(--color-text-muted); - cursor: pointer; -} -.header-icon-button:hover { - background: var(--overlay-dark-soft); -} -.header-icon-button:disabled { - opacity: 0.5; - cursor: not-allowed; -} -.header-avatar-menu { - position: relative; -} -.header-avatar-menu > summary { - list-style: none; - cursor: pointer; -} -.header-avatar-menu > summary::-webkit-details-marker { - display: none; -} -.header-avatar-button { - display: flex; - align-items: center; - justify-content: center; - width: 2rem; - height: 2rem; - border-radius: 50%; - background: var(--color-text-brand); - color: #fff; - font-size: 0.8125rem; - font-weight: 600; - cursor: pointer; - border: none; - outline: none; -} -.header-avatar-initial { - text-transform: uppercase; - line-height: 1; - pointer-events: none; -} -.header-avatar-dropdown { - position: absolute; - right: 0; - top: calc(100% + 0.5rem); - min-width: 14rem; - background: var(--color-surface-elevated); - border: 1px solid var(--color-border-panel); - border-radius: 0.5rem; - box-shadow: var(--shadow-floating-control); - z-index: 50; - overflow: hidden; -} -.avatar-dropdown-workspace { - padding: 0.75rem 1rem; - display: flex; - flex-direction: column; - gap: 0.125rem; -} -.avatar-dropdown-workspace-name { - font-size: 0.875rem; - font-weight: 600; - color: var(--color-text-muted); - word-break: break-all; -} -.avatar-dropdown-workspace-meta { - font-size: 0.75rem; - color: var(--color-text-muted); - opacity: 0.7; -} -.avatar-dropdown-divider { - border: none; - border-top: 1px solid var(--color-border-panel-muted); - margin: 0; -} -.avatar-dropdown-item { - display: block; - width: 100%; - padding: 0.625rem 1rem; - font-size: 0.875rem; - color: var(--color-text-muted); - text-decoration: none; - background: transparent; - border: none; - text-align: left; - cursor: pointer; -} -.avatar-dropdown-item:hover { - background: var(--overlay-dark-soft); -} -.avatar-dropdown-item--danger { - color: #dc2626; -} -.avatar-dropdown-item--danger:hover { - background: #fef2f2; -} -.avatar-dropdown-logout-form { - display: contents; -} -.dashboard-main { - display: flex; - flex-direction: column; - gap: 1.5rem; - min-width: 0; - padding: 2rem; -} -.overview-section { - padding: 0.25rem 0 0; -} -.overview-section-heading { - align-items: center; - display: flex; - justify-content: space-between; - margin-bottom: 1.5rem; -} -.overview-section-heading h1, .overview-section-heading h3, .tasks-section-header h3 { - color: var(--color-surface-muted-inverse); - font-size: 1.6rem; - font-weight: 600; - margin: 0; -} -.project-grid { - display: grid; - gap: 1.25rem; - grid-template-columns: repeat(3, minmax(0, 1fr)); -} -.project-card { - background: var(--color-surface-default); - border: 1px solid var(--color-border-subtle); - border-radius: 1rem; - cursor: pointer; - padding: 1rem; - transition: box-shadow 0.2s ease; -} -.project-card-top { - align-items: center; - display: flex; - justify-content: space-between; - margin-bottom: 1rem; -} -.project-card-top .borderless-icon-button { - padding: 0; -} -.project-card-top .ui-icon-button-ghost.ui-icon-button-neutral:hover { - color: var(--color-text-primary); -} -.project-card-top .ui-icon-button-ghost.ui-icon-button-danger:hover { - color: var(--color-status-danger-icon-hover); -} -.project-card-title-row { - align-items: center; - display: flex; - gap: 0.75rem; - margin-bottom: 1rem; -} -.project-avatar { - align-items: center; - background: var(--project-color, var(--color-project-fallback)); - border-radius: 0.85rem; - color: var(--color-text-inverse); - display: inline-flex; - flex-shrink: 0; - font-size: 1.1rem; - font-weight: 700; - height: 3rem; - justify-content: center; - width: 3rem; -} -.project-avatar > svg { - height: 1.25rem; - width: 1.25rem; -} -.project-date-row { - align-items: center; - color: var(--color-text-muted); - display: flex; - font-size: 0.875rem; - gap: 0.5rem; - margin-bottom: 1rem; -} -.tasks-section { - background: var(--color-surface-default); - border: 1px solid var(--color-border-subtle); - border-radius: 1rem; - overflow: hidden; -} -.tasks-section-header { - align-items: center; - border-bottom: 1px solid var(--color-border-muted); - display: flex; - justify-content: space-between; - padding: 1.2rem 1rem; -} -.tasks-add-button { - align-items: center; - background: var(--color-surface-default); - border: 1px solid var(--color-border-muted); - border-radius: 0.7rem; - color: var(--color-text-secondary); - cursor: pointer; - display: inline-flex; - font-weight: 500; - gap: 0.5rem; - min-height: 2.75rem; - padding: 0.7rem 1rem; -} -.task-list { - display: flex; - flex-direction: column; -} -.task-drag-handle { - color: var(--color-text-faint); - cursor: grab; - flex-shrink: 0; - line-height: 1; - user-select: none; -} -.task-drag-handle:active { - cursor: grabbing; -} -.task-row { - align-items: center; - border-bottom: 1px solid var(--color-border-muted); - cursor: pointer; - display: flex; - gap: 0.75rem; - padding: 0.9rem 1rem; - transition: background-color 0.2s ease; -} -.task-row:hover { - background: var(--color-surface-neutral-hover); -} -.task-check { - align-items: center; - background: var(--color-surface-default); - border: 2px solid var(--color-border-strong); - border-radius: 999px; - color: var(--color-text-inverse); - cursor: pointer; - display: inline-flex; - flex-shrink: 0; - height: 2rem; - justify-content: center; - width: 2rem; -} -.task-check.is-complete { - background: var(--color-text-brand-strong); - border-color: var(--color-text-brand-strong); -} -.task-body { - flex: 1; - min-width: 0; -} -.task-body p { - color: var(--color-surface-muted-inverse); - font-size: 0.95rem; - font-weight: 500; - margin: 0; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} -.task-row.is-complete .task-body p { - color: var(--color-text-faint); - text-decoration: line-through; -} -.task-meta { - align-items: center; - color: var(--color-text-muted); - display: flex; - flex-wrap: wrap; - font-size: 0.75rem; - gap: 0.45rem; - margin-top: 0.3rem; -} -.project-progress-track { - background: var(--color-surface-muted); - border-radius: 999px; - height: 0.5rem; - overflow: hidden; -} -.project-progress-bar { - background: var(--project-color, var(--color-project-fallback)); - border-radius: 999px; - height: 100%; -} -.tab-nav { - align-items: center; - border-bottom: 1px solid var(--color-border-muted); - display: flex; - gap: 1.5rem; - margin-bottom: 1.5rem; - overflow-x: auto; -} -.tab-nav-item { - align-items: center; - border-bottom: 2px solid transparent; - color: var(--color-text-muted); - display: flex; - font-size: 0.875rem; - font-weight: 400; - gap: 0.5rem; - min-height: 44px; - padding-bottom: 0.75rem; - padding-inline: 0.25rem; - transition: color 0.15s ease, border-color 0.15s ease; -} -.tab-nav-item.is-active { - border-bottom-color: var(--color-brand-primary); - color: var(--color-text-brand); - font-weight: 600; -} -.tab-nav-item:hover:not(.is-active) { - color: var(--color-text-primary); -} -.tablo-metadata-row { - align-items: center; - border-bottom: 1px solid var(--color-border-muted); - display: flex; - flex-wrap: wrap; - gap: 1rem; - margin-bottom: 1rem; - padding-bottom: 1rem; -} -.tablo-metadata-date { - align-items: center; - color: var(--color-text-muted); - display: flex; - font-size: 0.875rem; - gap: 0.5rem; -} -.tablo-metadata-date svg { - height: 1rem; - width: 1rem; -} -.kanban-column { - flex-shrink: 0; - width: 18rem; -} -.kanban-column .tasks-section-header h3 { - font-size: 1rem; -} -.etape-group-header { - align-items: center; - background: var(--color-surface-muted); - border-bottom: 1px solid var(--color-border-muted); - display: flex; - gap: 0.5rem; - padding: 0.5rem 1rem; -} -.etape-group-color-dot { - background: var(--project-color, var(--color-project-fallback)); - border-radius: 999px; - flex-shrink: 0; - height: 0.5rem; - width: 0.5rem; -} -.etape-group-label { - color: var(--color-text-secondary); - font-size: 0.875rem; - font-weight: 600; -} -.etape-group-label.is-unassigned { - color: var(--color-text-muted); - font-weight: 400; -} -.task-list-empty { - color: var(--color-text-faint); - font-size: 0.875rem; - font-style: italic; - padding: 0.75rem 1rem; -} -#discussion-messages { - max-height: 32rem; - overflow-y: auto; - scroll-behavior: smooth; -} -.message-row { - display: flex; - flex-direction: column; - padding: 0.75rem 1rem; -} -.message-row.message-own { - align-items: flex-end; -} -.message-row.message-other { - align-items: flex-start; -} -.message-meta { - display: flex; - align-items: baseline; - gap: 0.5rem; - margin-bottom: 0.25rem; -} -.message-author { - color: var(--color-text-primary); - font-size: 0.875rem; - font-weight: 600; -} -.message-timestamp { - color: var(--color-text-muted); - font-size: 0.75rem; -} -.message-bubble { - border-radius: 0.25rem 0.75rem 0.75rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - max-width: 70%; - padding: 0.75rem 1rem; - white-space: pre-wrap; - word-break: break-words; -} -.message-row.message-own .message-bubble { - background-color: color-mix(in srgb, var(--color-brand-primary) 10%, transparent); - border-radius: 0.75rem 0.75rem 0.25rem 0.75rem; - color: var(--color-text-primary); -} -.message-row.message-other .message-bubble { - background-color: var(--color-surface-default, #ffffff); - border: 1px solid var(--color-border-default, #e2e8f0); - color: var(--color-text-primary); -} -@keyframes spin { - to { - transform: rotate(360deg); - } -} -@keyframes ping { - 75%, 100% { - transform: scale(2); - opacity: 0; - } -} -@keyframes pulse { - 50% { - opacity: 0.5; - } -} -@keyframes bounce { - 0%, 100% { - transform: translateY(-25%); - animation-timing-function: cubic-bezier(0.8, 0, 1, 1); - } - 50% { - transform: none; - animation-timing-function: cubic-bezier(0, 0, 0.2, 1); - } -} -@property --tw-rotate-x { - syntax: "*"; - inherits: false; - initial-value: rotateX(0); -} -@property --tw-rotate-y { - syntax: "*"; - inherits: false; - initial-value: rotateY(0); -} -@property --tw-rotate-z { - syntax: "*"; - inherits: false; - initial-value: rotateZ(0); -} -@property --tw-skew-x { - syntax: "*"; - inherits: false; - initial-value: skewX(0); -} -@property --tw-skew-y { - syntax: "*"; - inherits: false; - initial-value: skewY(0); -} -@property --tw-space-y-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-leading { - syntax: "*"; - inherits: false; -} -@property --tw-font-weight { - syntax: "*"; - inherits: false; -} -@property --tw-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-shadow-color { - syntax: "*"; - inherits: false; -} -@property --tw-inset-shadow { - syntax: "*"; - inherits: false; - initial-value: 0 0 #0000; -} -@property --tw-inset-shadow-color { - syntax: "*"; - inherits: false; -} -@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: 0px; -} -@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; -} +@layer theme{:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(.971 .013 17.38);--color-red-100:oklch(.936 .032 17.717);--color-red-200:oklch(.885 .062 18.334);--color-red-300:oklch(.808 .114 19.571);--color-red-400:oklch(.704 .191 22.216);--color-red-500:oklch(.637 .237 25.331);--color-red-600:oklch(.577 .245 27.325);--color-red-700:oklch(.505 .213 27.518);--color-red-800:oklch(.444 .177 26.899);--color-red-900:oklch(.396 .141 25.723);--color-red-950:oklch(.258 .092 26.042);--color-orange-50:oklch(.98 .016 73.684);--color-orange-100:oklch(.954 .038 75.164);--color-orange-200:oklch(.901 .076 70.697);--color-orange-300:oklch(.837 .128 66.29);--color-orange-400:oklch(.75 .183 55.934);--color-orange-500:oklch(.705 .213 47.604);--color-orange-600:oklch(.646 .222 41.116);--color-orange-700:oklch(.553 .195 38.402);--color-orange-800:oklch(.47 .157 37.304);--color-orange-900:oklch(.408 .123 38.172);--color-orange-950:oklch(.266 .079 36.259);--color-amber-50:oklch(.987 .022 95.277);--color-amber-100:oklch(.962 .059 95.617);--color-amber-200:oklch(.924 .12 95.746);--color-amber-300:oklch(.879 .169 91.605);--color-amber-400:oklch(.828 .189 84.429);--color-amber-500:oklch(.769 .188 70.08);--color-amber-600:oklch(.666 .179 58.318);--color-amber-700:oklch(.555 .163 48.998);--color-amber-800:oklch(.473 .137 46.201);--color-amber-900:oklch(.414 .112 45.904);--color-amber-950:oklch(.279 .077 45.635);--color-yellow-50:oklch(.987 .026 102.212);--color-yellow-100:oklch(.973 .071 103.193);--color-yellow-200:oklch(.945 .129 101.54);--color-yellow-300:oklch(.905 .182 98.111);--color-yellow-400:oklch(.852 .199 91.936);--color-yellow-500:oklch(.795 .184 86.047);--color-yellow-600:oklch(.681 .162 75.834);--color-yellow-700:oklch(.554 .135 66.442);--color-yellow-800:oklch(.476 .114 61.907);--color-yellow-900:oklch(.421 .095 57.708);--color-yellow-950:oklch(.286 .066 53.813);--color-lime-50:oklch(.986 .031 120.757);--color-lime-100:oklch(.967 .067 122.328);--color-lime-200:oklch(.938 .127 124.321);--color-lime-300:oklch(.897 .196 126.665);--color-lime-400:oklch(.841 .238 128.85);--color-lime-500:oklch(.768 .233 130.85);--color-lime-600:oklch(.648 .2 131.684);--color-lime-700:oklch(.532 .157 131.589);--color-lime-800:oklch(.453 .124 130.933);--color-lime-900:oklch(.405 .101 131.063);--color-lime-950:oklch(.274 .072 132.109);--color-green-50:oklch(.982 .018 155.826);--color-green-100:oklch(.962 .044 156.743);--color-green-200:oklch(.925 .084 155.995);--color-green-300:oklch(.871 .15 154.449);--color-green-400:oklch(.792 .209 151.711);--color-green-500:oklch(.723 .219 149.579);--color-green-600:oklch(.627 .194 149.214);--color-green-700:oklch(.527 .154 150.069);--color-green-800:oklch(.448 .119 151.328);--color-green-900:oklch(.393 .095 152.535);--color-green-950:oklch(.266 .065 152.934);--color-emerald-50:oklch(.979 .021 166.113);--color-emerald-100:oklch(.95 .052 163.051);--color-emerald-200:oklch(.905 .093 164.15);--color-emerald-300:oklch(.845 .143 164.978);--color-emerald-400:oklch(.765 .177 163.223);--color-emerald-500:oklch(.696 .17 162.48);--color-emerald-600:oklch(.596 .145 163.225);--color-emerald-700:oklch(.508 .118 165.612);--color-emerald-800:oklch(.432 .095 166.913);--color-emerald-900:oklch(.378 .077 168.94);--color-emerald-950:oklch(.262 .051 172.552);--color-teal-50:oklch(.984 .014 180.72);--color-teal-100:oklch(.953 .051 180.801);--color-teal-200:oklch(.91 .096 180.426);--color-teal-300:oklch(.855 .138 181.071);--color-teal-400:oklch(.777 .152 181.912);--color-teal-500:oklch(.704 .14 182.503);--color-teal-600:oklch(.6 .118 184.704);--color-teal-700:oklch(.511 .096 186.391);--color-teal-800:oklch(.437 .078 188.216);--color-teal-900:oklch(.386 .063 188.416);--color-teal-950:oklch(.277 .046 192.524);--color-cyan-50:oklch(.984 .019 200.873);--color-cyan-100:oklch(.956 .045 203.388);--color-cyan-200:oklch(.917 .08 205.041);--color-cyan-300:oklch(.865 .127 207.078);--color-cyan-400:oklch(.789 .154 211.53);--color-cyan-500:oklch(.715 .143 215.221);--color-cyan-600:oklch(.609 .126 221.723);--color-cyan-700:oklch(.52 .105 223.128);--color-cyan-800:oklch(.45 .085 224.283);--color-cyan-900:oklch(.398 .07 227.392);--color-cyan-950:oklch(.302 .056 229.695);--color-sky-50:oklch(.977 .013 236.62);--color-sky-100:oklch(.951 .026 236.824);--color-sky-200:oklch(.901 .058 230.902);--color-sky-300:oklch(.828 .111 230.318);--color-sky-400:oklch(.746 .16 232.661);--color-sky-500:oklch(.685 .169 237.323);--color-sky-600:oklch(.588 .158 241.966);--color-sky-700:oklch(.5 .134 242.749);--color-sky-800:oklch(.443 .11 240.79);--color-sky-900:oklch(.391 .09 240.876);--color-sky-950:oklch(.293 .066 243.157);--color-blue-50:oklch(.97 .014 254.604);--color-blue-100:oklch(.932 .032 255.585);--color-blue-200:oklch(.882 .059 254.128);--color-blue-300:oklch(.809 .105 251.813);--color-blue-400:oklch(.707 .165 254.624);--color-blue-500:oklch(.623 .214 259.815);--color-blue-600:oklch(.546 .245 262.881);--color-blue-700:oklch(.488 .243 264.376);--color-blue-800:oklch(.424 .199 265.638);--color-blue-900:oklch(.379 .146 265.522);--color-blue-950:oklch(.282 .091 267.935);--color-indigo-50:oklch(.962 .018 272.314);--color-indigo-100:oklch(.93 .034 272.788);--color-indigo-200:oklch(.87 .065 274.039);--color-indigo-300:oklch(.785 .115 274.713);--color-indigo-400:oklch(.673 .182 276.935);--color-indigo-500:oklch(.585 .233 277.117);--color-indigo-600:oklch(.511 .262 276.966);--color-indigo-700:oklch(.457 .24 277.023);--color-indigo-800:oklch(.398 .195 277.366);--color-indigo-900:oklch(.359 .144 278.697);--color-indigo-950:oklch(.257 .09 281.288);--color-violet-50:oklch(.969 .016 293.756);--color-violet-100:oklch(.943 .029 294.588);--color-violet-200:oklch(.894 .057 293.283);--color-violet-300:oklch(.811 .111 293.571);--color-violet-400:oklch(.702 .183 293.541);--color-violet-500:oklch(.606 .25 292.717);--color-violet-600:oklch(.541 .281 293.009);--color-violet-700:oklch(.491 .27 292.581);--color-violet-800:oklch(.432 .232 292.759);--color-violet-900:oklch(.38 .189 293.745);--color-violet-950:oklch(.283 .141 291.089);--color-purple-50:oklch(.977 .014 308.299);--color-purple-100:oklch(.946 .033 307.174);--color-purple-200:oklch(.902 .063 306.703);--color-purple-300:oklch(.827 .119 306.383);--color-purple-400:oklch(.714 .203 305.504);--color-purple-500:oklch(.627 .265 303.9);--color-purple-600:oklch(.558 .288 302.321);--color-purple-700:oklch(.496 .265 301.924);--color-purple-800:oklch(.438 .218 303.724);--color-purple-900:oklch(.381 .176 304.987);--color-purple-950:oklch(.291 .149 302.717);--color-fuchsia-50:oklch(.977 .017 320.058);--color-fuchsia-100:oklch(.952 .037 318.852);--color-fuchsia-200:oklch(.903 .076 319.62);--color-fuchsia-300:oklch(.833 .145 321.434);--color-fuchsia-400:oklch(.74 .238 322.16);--color-fuchsia-500:oklch(.667 .295 322.15);--color-fuchsia-600:oklch(.591 .293 322.896);--color-fuchsia-700:oklch(.518 .253 323.949);--color-fuchsia-800:oklch(.452 .211 324.591);--color-fuchsia-900:oklch(.401 .17 325.612);--color-fuchsia-950:oklch(.293 .136 325.661);--color-pink-50:oklch(.971 .014 343.198);--color-pink-100:oklch(.948 .028 342.258);--color-pink-200:oklch(.899 .061 343.231);--color-pink-300:oklch(.823 .12 346.018);--color-pink-400:oklch(.718 .202 349.761);--color-pink-500:oklch(.656 .241 354.308);--color-pink-600:oklch(.592 .249 .584);--color-pink-700:oklch(.525 .223 3.958);--color-pink-800:oklch(.459 .187 3.815);--color-pink-900:oklch(.408 .153 2.432);--color-pink-950:oklch(.284 .109 3.907);--color-rose-50:oklch(.969 .015 12.422);--color-rose-100:oklch(.941 .03 12.58);--color-rose-200:oklch(.892 .058 10.001);--color-rose-300:oklch(.81 .117 11.638);--color-rose-400:oklch(.712 .194 13.428);--color-rose-500:oklch(.645 .246 16.439);--color-rose-600:oklch(.586 .253 17.585);--color-rose-700:oklch(.514 .222 16.935);--color-rose-800:oklch(.455 .188 13.697);--color-rose-900:oklch(.41 .159 10.272);--color-rose-950:oklch(.271 .105 12.094);--color-slate-50:oklch(.984 .003 247.858);--color-slate-100:oklch(.968 .007 247.896);--color-slate-200:oklch(.929 .013 255.508);--color-slate-300:oklch(.869 .022 252.894);--color-slate-400:oklch(.704 .04 256.788);--color-slate-500:oklch(.554 .046 257.417);--color-slate-600:oklch(.446 .043 257.281);--color-slate-700:oklch(.372 .044 257.287);--color-slate-800:oklch(.279 .041 260.031);--color-slate-900:oklch(.208 .042 265.755);--color-slate-950:oklch(.129 .042 264.695);--color-gray-50:oklch(.985 .002 247.839);--color-gray-100:oklch(.967 .003 264.542);--color-gray-200:oklch(.928 .006 264.531);--color-gray-300:oklch(.872 .01 258.338);--color-gray-400:oklch(.707 .022 261.325);--color-gray-500:oklch(.551 .027 264.364);--color-gray-600:oklch(.446 .03 256.802);--color-gray-700:oklch(.373 .034 259.733);--color-gray-800:oklch(.278 .033 256.848);--color-gray-900:oklch(.21 .034 264.665);--color-gray-950:oklch(.13 .028 261.692);--color-zinc-50:oklch(.985 0 0);--color-zinc-100:oklch(.967 .001 286.375);--color-zinc-200:oklch(.92 .004 286.32);--color-zinc-300:oklch(.871 .006 286.286);--color-zinc-400:oklch(.705 .015 286.067);--color-zinc-500:oklch(.552 .016 285.938);--color-zinc-600:oklch(.442 .017 285.786);--color-zinc-700:oklch(.37 .013 285.805);--color-zinc-800:oklch(.274 .006 286.033);--color-zinc-900:oklch(.21 .006 285.885);--color-zinc-950:oklch(.141 .005 285.823);--color-neutral-50:oklch(.985 0 0);--color-neutral-100:oklch(.97 0 0);--color-neutral-200:oklch(.922 0 0);--color-neutral-300:oklch(.87 0 0);--color-neutral-400:oklch(.708 0 0);--color-neutral-500:oklch(.556 0 0);--color-neutral-600:oklch(.439 0 0);--color-neutral-700:oklch(.371 0 0);--color-neutral-800:oklch(.269 0 0);--color-neutral-900:oklch(.205 0 0);--color-neutral-950:oklch(.145 0 0);--color-stone-50:oklch(.985 .001 106.423);--color-stone-100:oklch(.97 .001 106.424);--color-stone-200:oklch(.923 .003 48.717);--color-stone-300:oklch(.869 .005 56.366);--color-stone-400:oklch(.709 .01 56.259);--color-stone-500:oklch(.553 .013 58.071);--color-stone-600:oklch(.444 .011 73.639);--color-stone-700:oklch(.374 .01 67.558);--color-stone-800:oklch(.268 .007 34.298);--color-stone-900:oklch(.216 .006 56.043);--color-stone-950:oklch(.147 .004 49.25);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-3xs:16rem;--container-2xs:18rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--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;--text-7xl:4.5rem;--text-7xl--line-height:1;--text-8xl:6rem;--text-8xl--line-height:1;--text-9xl:8rem;--text-9xl--line-height:1;--font-weight-thin:100;--font-weight-extralight:200;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-4xl:2rem;--shadow-2xs:0 1px #0000000d;--shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--shadow-xl:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;--shadow-2xl:0 25px 50px -12px #00000040;--inset-shadow-2xs:inset 0 1px #0000000d;--inset-shadow-xs:inset 0 1px 1px #0000000d;--inset-shadow-sm:inset 0 2px 4px #0000000d;--drop-shadow-xs:0 1px 1px #0000000d;--drop-shadow-sm:0 1px 2px #00000026;--drop-shadow-md:0 3px 3px #0000001f;--drop-shadow-lg:0 4px 4px #00000026;--drop-shadow-xl:0 9px 7px #0000001a;--drop-shadow-2xl:0 25px 25px #00000026;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,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;--animate-bounce:bounce 1s infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--blur-2xl:40px;--blur-3xl:64px;--perspective-dramatic:100px;--perspective-near:300px;--perspective-normal:500px;--perspective-midrange:800px;--perspective-distant:1200px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(--font-sans--font-variation-settings);--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(--font-mono--font-feature-settings);--default-mono-font-variation-settings:var(--font-mono--font-variation-settings)}}@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}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-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;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}:-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}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);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}.top-0{top:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-10{top:calc(var(--spacing)*10)}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-10{left:calc(var(--spacing)*10)}.isolate{isolation:isolate}.z-40{z-index:40}.z-50{z-index:50}.\!container{width:100%!important}@media (width>=40rem){.\!container{max-width:40rem!important}}@media (width>=48rem){.\!container{max-width:48rem!important}}@media (width>=64rem){.\!container{max-width:64rem!important}}@media (width>=80rem){.\!container{max-width:80rem!important}}@media (width>=96rem){.\!container{max-width:96rem!important}}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.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-auto{margin-top:auto}.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)}.ml-1{margin-left:calc(var(--spacing)*1)}.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}.table{display:table}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-11{width:calc(var(--spacing)*11);height:calc(var(--spacing)*11)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-13{width:calc(var(--spacing)*13);height:calc(var(--spacing)*13)}.size-14{width:calc(var(--spacing)*14);height:calc(var(--spacing)*14)}.size-15{width:calc(var(--spacing)*15);height:calc(var(--spacing)*15)}.size-16{width:calc(var(--spacing)*16);height:calc(var(--spacing)*16)}.size-18{width:calc(var(--spacing)*18);height:calc(var(--spacing)*18)}.size-20{width:calc(var(--spacing)*20);height:calc(var(--spacing)*20)}.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-10{height:calc(var(--spacing)*10)}.h-16{height:calc(var(--spacing)*16)}.h-\[75px\]{height:75px}.h-auto{height:auto}.h-full{height:100%}.min-h-11{min-height:calc(var(--spacing)*11)}.min-h-24{min-height:calc(var(--spacing)*24)}.min-h-screen{min-height:100vh}.\!w-16{width:calc(var(--spacing)*16)!important}.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-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-10{width:calc(var(--spacing)*10)}.w-16{width:calc(var(--spacing)*16)}.w-56{width:calc(var(--spacing)*56)}.w-full{width:100%}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[7rem\]{max-width:7rem}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-6{min-width:calc(var(--spacing)*6)}.min-w-\[680px\]{min-width:680px}.flex-1{flex:1}.flex-shrink{flex-shrink:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x)var(--tw-rotate-y)var(--tw-rotate-z)var(--tw-skew-x)var(--tw-skew-y)}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.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-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-px{gap:1px}.gap-x-2\.5{column-gap:calc(var(--spacing)*2.5)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}: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)))}: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-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[8px\]{border-radius:8px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[\#EAECF0\]{border-color:#eaecf0}.border-blue-200{border-color:var(--color-blue-200)}.border-gray-100{border-color:var(--color-gray-100)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-red-200{border-color:var(--color-red-200)}.border-red-300{border-color:var(--color-red-300)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-800{border-color:var(--color-slate-800)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.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-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.py-16{padding-block:calc(var(--spacing)*16)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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))}.text-\[10px\]{font-size:10px}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.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-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.text-\[\#0C111D\]{color:#0c111d}.text-\[\#804EEC\]{color:#804eec}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.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-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-400::placeholder{color:var(--color-gray-400)}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.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-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)}.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{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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))}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:mr-3::file-selector-button{margin-right:calc(var(--spacing)*3)}.file\:rounded::file-selector-button{border-radius:.25rem}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-slate-200::file-selector-button{background-color:var(--color-slate-200)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing)*3)}.file\:py-1::file-selector-button{padding-block:calc(var(--spacing)*1)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}@media (hover:hover){.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-slate-400:hover{border-color:var(--color-slate-400)}.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:text-gray-900:hover{color:var(--color-gray-900)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}.hover\:underline:hover{text-decoration-line:underline}.hover\:file\:bg-slate-300:hover::file-selector-button{background-color:var(--color-slate-300)}}.focus\:border-blue-600:focus{border-color:var(--color-blue-600)}.focus\:border-slate-500:focus{border-color:var(--color-slate-500)}.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-blue-600:focus{--tw-ring-color:var(--color-blue-600)}.focus\:ring-purple-500:focus{--tw-ring-color:var(--color-purple-500)}.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 (width>=40rem){.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:flex{display:flex}.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\:justify-between{justify-content:space-between}.sm\:gap-3{gap:calc(var(--spacing)*3)}.sm\:px-6{padding-inline:calc(var(--spacing)*6)}.sm\:text-right{text-align:right}}@media (width>=48rem){.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}}.\[\&\>svg\]\:h-5>svg{height:calc(var(--spacing)*5)}.\[\&\>svg\]\:w-5>svg{width:calc(var(--spacing)*5)}}:root{--color-text-primary:#171717;--color-text-secondary:#475467;--color-text-muted:#6f6f6f;--color-text-faint:#9ca3af;--color-text-inverse:#fff;--color-text-brand:#804eec;--color-text-brand-hover:#6f3fd4;--color-text-brand-strong:#7c3aed;--color-text-brand-accent:#7f56d9;--color-text-heading-alt:#1f2937;--color-text-body-subtle:#374151;--color-text-google:#1f1f1f;--color-text-overlay:#344054;--color-text-disabled:#667085;--color-surface-page:#fff;--color-surface-default:#fff;--color-surface-card:#fffc;--color-surface-subtle:#f5f5f5;--color-surface-muted:#f3f4f6;--color-surface-muted-hover:#e5e7eb;--color-surface-muted-active:#d1d5db;--color-surface-muted-inverse:#111827;--color-surface-elevated:#ffffffeb;--color-surface-elevated-strong:#fffffff2;--color-surface-elevated-soft:#ffffffe6;--color-surface-overlay:#ffffffe0;--color-surface-overlay-strong:#fffffff5;--color-surface-brand-soft:#ede9fe;--color-surface-brand-soft-hover:#ddd6fe;--color-surface-brand-soft-active:#c4b5fd;--color-surface-brand-muted:#f4f3ff;--color-surface-neutral-hover:#f9fafbe6;--color-surface-page-tint:#f8f7ff;--color-surface-page-tint-alt:#f4f7fb;--color-border-default:#e8e8e8;--color-border-strong:#d1d5db;--color-border-muted:#e5e7eb;--color-border-subtle:#d0d5dd;--color-border-google:#747775;--color-border-panel:#1e1b2e14;--color-border-panel-muted:#6b728038;--color-border-panel-strong:#6b728059;--color-border-overlay:#94a3b838;--color-border-overlay-strong:#94a3b84d;--color-brand-ink:#1e1b2e;--color-brand-primary:#804eec;--color-brand-primary-hover:#6d28d9;--color-brand-primary-active:#5b21b6;--color-brand-secondary:#a855f7;--color-brand-accent:#3b82f6;--color-focus-ring:#7c3aed33;--color-focus-ring-strong:#8b5cf629;--color-ring-subtle:#1e1b2e59;--color-status-info-soft-bg:#eff6ff;--color-status-info-soft-border:#bfdbfe;--color-status-info-foreground:#2563eb;--color-status-warning-soft-bg:#fff4e2;--color-status-warning-soft-border:#db9729;--color-status-warning-foreground:#db9729;--color-status-warning-strong:#db9729;--color-status-warning-strong-hover:#c37f12;--color-status-warning-strong-active:#a9670c;--color-status-warning-strong-foreground:#fff;--color-status-warning-soft-foreground-strong:#b86e00;--color-status-warning-soft-bg-hover:#fee6b7;--color-status-warning-soft-bg-active:#fdd58e;--color-status-warning-emphasis-bg:#fffbeb;--color-status-warning-emphasis-border:#fde68a;--color-status-warning-emphasis-foreground:#ca8a04;--color-status-success-soft-bg:#ecfdf3;--color-status-success-soft-border:#bbf7d0;--color-status-success-foreground:#16a34a;--color-status-success-strong:#16a34a;--color-status-success-strong-hover:#15803d;--color-status-success-strong-active:#166534;--color-status-success-strong-foreground:#fff;--color-status-success-soft-foreground-strong:#15803d;--color-status-success-soft-bg-hover:#d1fadf;--color-status-success-soft-bg-active:#a6f4c5;--color-status-success-banner-bg:#ecfdf3;--color-status-success-banner-border:#bffcd9;--color-status-success-banner-foreground:#008a2e;--color-status-danger-soft-bg:#fef2f2;--color-status-danger-soft-bg-alt:#fef3f2;--color-status-danger-soft-border:#fecaca;--color-status-danger-foreground:#dc2626;--color-status-danger-strong:#dc2626;--color-status-danger-strong-hover:#b91c1c;--color-status-danger-strong-active:#991b1b;--color-status-danger-strong-foreground:#fff;--color-status-danger-soft-foreground-strong:#b42318;--color-status-danger-soft-bg-hover:#fee4e2;--color-status-danger-soft-bg-active:#fecdca;--color-status-danger-icon-hover:#ef4444;--color-status-danger-banner-bg:#fff0f0;--color-status-danger-banner-border:#ffe0e1;--color-status-danger-banner-foreground:#e60000;--overlay-backdrop-default:#11182785;--overlay-dark-soft:#1e1b2e0d;--overlay-dark-soft-alt:#1e1b2e0f;--overlay-dark-border:#1e1b2e14;--overlay-dark-strong:#1e1b2e24;--overlay-brand-soft:#7c3aed1a;--overlay-brand-soft-strong:#7c3aed24;--overlay-brand-muted:#804eec14;--overlay-brand-faint:#804eec0a;--overlay-brand-glow:#804eec1a;--overlay-google-state:#303030;--shadow-auth-card:0 20px 45px #0000001a;--shadow-surface-sm:0 10px 30px #0f172a0d;--shadow-surface-md:0 10px 30px #0f172a0f;--shadow-surface-hover:0 12px 30px #0f172a14;--shadow-surface-lg:0 24px 48px #0f172a2e;--shadow-surface-xl:0 32px 70px #0f172a1f;--shadow-sidebar:20px 0 45px #1e1b2e0f;--shadow-floating-control:0 10px 24px #1e1b2e24;--shadow-google-button:0 1px 2px 0 #3c40434d,0 1px 3px 1px #3c404326;--shadow-brand-action:0 18px 35px #7c3aed40;--gradient-shell:linear-gradient(135deg,var(--overlay-brand-muted),transparent 30%),linear-gradient(160deg,var(--overlay-dark-soft),transparent 42%),linear-gradient(to bottom right,var(--overlay-dark-border),var(--color-surface-page),var(--overlay-brand-faint));--gradient-card-glow:linear-gradient(to bottom right,#1e1b2e1a,var(--overlay-dark-soft),var(--overlay-brand-glow));--gradient-overview-badge:linear-gradient(to right,var(--color-brand-secondary),var(--color-brand-accent));--gradient-app-surface:linear-gradient(180deg,var(--color-surface-overlay-strong)0%,var(--color-surface-default)100%);--gradient-not-found-bg:radial-gradient(circle at top,var(--overlay-brand-soft-strong),transparent 35%),linear-gradient(180deg,var(--color-surface-page-tint)0%,var(--color-surface-page-tint-alt)100%);--gradient-not-found-primary:linear-gradient(135deg,var(--color-text-brand-strong)0%,var(--color-status-info-foreground)100%);--color-project-fallback:#3b82f6;--color-project-accent-purple:#a855f7;--color-project-accent-red:#ef4444;--background:var(--color-surface-page);--foreground:var(--color-text-primary);--muted-foreground:var(--color-text-muted);--border:var(--color-border-default);--input:var(--color-border-default);--card:var(--color-surface-card);--accent:var(--color-surface-subtle);--primary:var(--color-brand-ink);--primary-foreground:var(--color-text-inverse);--secondary:var(--color-brand-primary);--ring:var(--color-ring-subtle)}*{box-sizing:border-box}html,body{min-height:100%;margin:0}body{background:var(--background);color:var(--foreground);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}a{color:inherit;text-decoration:none}button,input{font:inherit}.light-only{display:block}.dark-only{display:none}.visually-hidden{clip:rect(0 0 0 0);border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.login-screen{background:var(--gradient-shell);justify-content:center;align-items:center;min-height:100vh;padding:2rem 1rem;display:flex;position:relative;overflow:hidden}.background-layer{pointer-events:none;position:absolute;inset:0;overflow:hidden}.background-logo{position:absolute}.logo-asset{object-fit:contain;width:100%;height:auto;display:block}.size-06{width:1.5rem;height:1.5rem}.size-07{width:1.75rem;height:1.75rem}.size-08{width:2rem;height:2rem}.size-09{width:2.25rem;height:2.25rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-13{width:3.25rem;height:3.25rem}.size-14{width:3.5rem;height:3.5rem}.size-15{width:3.75rem;height:3.75rem}.size-16{width:4rem;height:4rem}.size-18{width:4.5rem;height:4.5rem}.size-20{width:5rem;height:5rem}.opacity-02{opacity:.2}.opacity-03{opacity:.3}.opacity-04{opacity:.4}.opacity-05{opacity:.5}.bg-01{top:25%;left:0}.bg-02{top:33%;left:0}.bg-03{top:50%;left:0}.bg-04{top:66%;left:0}.bg-05{top:75%;left:0}.bg-06{top:0;left:25%}.bg-07{top:0;left:50%}.bg-08{top:0;left:75%}.bg-09{top:0;left:16.66%}.bg-10{top:0;left:83.33%}.bg-11,.bg-12,.bg-13,.bg-14,.bg-15{top:50%;left:50%}.bg-16{top:25%;left:0}.bg-17{top:50%;left:0}.bg-18{top:75%;left:0}.bg-19{top:0;left:25%}.bg-20{top:0;left:75%}.bg-21{top:16.66%;left:33.33%}.bg-22{top:33.33%;left:66.66%}.bg-23{top:66.66%;left:25%}.bg-24{top:83.33%;left:75%}.bg-25{top:12.5%;left:0}.bg-26{top:37.5%;left:0}.bg-27{top:62.5%;left:0}.bg-28{top:87.5%;left:0}.bg-29{top:0;left:0}.bg-30{top:0;right:0}.bg-31{bottom:0;left:0}.bg-32{bottom:0;right:0}.bg-33{top:20%;left:20%}.bg-34{top:40%;left:80%}.bg-35{top:80%;left:40%}.card-wrap{z-index:1;width:100%;max-width:32rem;transition:transform .2s ease-out;position:relative}.card-glow{background:var(--gradient-card-glow);filter:blur(24px);z-index:-1;border-radius:1rem;position:absolute;inset:0}.auth-card-shell{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:var(--card);border:1px solid var(--border);box-shadow:var(--shadow-auth-card);border-radius:1rem;padding:1.25rem;position:relative}.auth-card-topbar{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.brand-header{justify-content:center;margin-bottom:1.5rem;display:flex}.brand-logo{object-fit:contain;width:4rem;height:4rem;display:block}.title-group{text-align:center;margin-bottom:1.5rem}.title-group h1{margin:0;font-size:clamp(1.5rem,4vw,1.875rem);font-weight:700}.auth-body{flex-direction:column;align-items:center;gap:1rem;display:flex}.login-form{flex-direction:column;gap:1rem;width:100%;max-width:28rem;margin:0 auto;display:flex}.divider-row{align-items:center;gap:.25rem;width:100%;margin:.5rem 0 0;display:flex;position:relative}.divider-line{border-top:1px solid var(--border);flex:1}.divider-pill{background:var(--background);color:var(--muted-foreground);z-index:1;border-radius:999px;padding:.25rem 1rem;font-size:.875rem;font-weight:500;position:relative}.signup-copy{color:var(--muted-foreground);text-align:center;margin:0;font-size:.875rem}.signup-link{color:var(--foreground);border-radius:.375rem;margin-left:.2rem;padding:.25rem .5rem;font-weight:500;transition:color .2s,background-color .2s;display:inline-block}.signup-link:hover{background:var(--accent)}.status-slot{min-height:.25rem}.status-banner{border:1px solid;border-radius:.5rem;padding:.75rem .875rem;font-size:.875rem}.status-success{background:var(--color-status-success-banner-bg);border-color:var(--color-status-success-banner-border);color:var(--color-status-success-banner-foreground)}.status-error{background:var(--color-status-danger-banner-bg);border-color:var(--color-status-danger-banner-border);color:var(--color-status-danger-banner-foreground)}.gsi-material-button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-appearance:none;background-color:var(--color-surface-default);border:1px solid var(--color-border-google);box-sizing:border-box;color:var(--color-text-google);cursor:pointer;letter-spacing:.25px;text-align:center;vertical-align:middle;white-space:nowrap;background-image:none;border-radius:20px;outline:none;width:max-content;min-width:min-content;height:40px;margin:0 auto;padding:0 12px;font-family:Roboto,Arial,sans-serif;font-size:14px;text-decoration:none;transition:background-color .218s,border-color .218s,box-shadow .218s;display:block;position:relative;overflow:hidden}.gsi-material-button .gsi-material-button-icon{width:20px;min-width:20px;height:20px;margin-right:12px}.gsi-material-button .gsi-material-button-icon svg{width:100%;height:100%;display:block}.gsi-material-button .gsi-material-button-content-wrapper{flex-flow:row;justify-content:space-between;align-items:center;width:100%;height:100%;display:flex;position:relative}.gsi-material-button .gsi-material-button-contents{text-overflow:ellipsis;vertical-align:top;flex-grow:0;font-family:Roboto,Arial,sans-serif;font-weight:500;overflow:hidden}.gsi-material-button .gsi-material-button-state{opacity:0;transition:opacity .218s;position:absolute;inset:0}.gsi-material-button:not(:disabled):active .gsi-material-button-state,.gsi-material-button:not(:disabled):focus .gsi-material-button-state{background-color:var(--overlay-google-state);opacity:.12}.gsi-material-button:not(:disabled):hover{box-shadow:var(--shadow-google-button)}.gsi-material-button:not(:disabled):hover .gsi-material-button-state{background-color:var(--overlay-google-state);opacity:.08}.auth-provider-stack{gap:8px;margin-bottom:16px;display:grid}.auth-provider-button{color:#0f172a;text-align:center;background-color:#fff;border:1px solid #e2e8f0;border-radius:.375rem;justify-content:center;align-items:center;width:100%;min-height:44px;padding:.625rem 1rem;font-size:1rem;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}.auth-provider-button:hover{background-color:#f8fafc}.auth-provider-button:focus-visible{outline-offset:2px;outline:2px solid #2563eb}.auth-provider-button-disabled,.auth-provider-button-disabled:hover{color:#94a3b8;cursor:not-allowed;background-color:#f1f5f9}.auth-provider-separator{color:#64748b;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;margin:16px 0;font-size:.875rem;line-height:1.4;display:grid}.auth-provider-separator span{background-color:#e2e8f0;height:1px}.auth-provider-separator em{font-style:normal}@keyframes move-right-slow{0%{transform:translate(-6rem)}to{transform:translate(calc(100vw + 6rem))}}@keyframes move-right-medium{0%{transform:translate(-5rem)}to{transform:translate(calc(100vw + 5rem))}}@keyframes move-right-fast{0%{transform:translate(-7rem)}to{transform:translate(calc(100vw + 7rem))}}@keyframes move-down-slow{0%{transform:translateY(-6rem)}to{transform:translateY(calc(100vh + 6rem))}}@keyframes move-down-medium{0%{transform:translateY(-5rem)}to{transform:translateY(calc(100vh + 5rem))}}@keyframes move-diagonal-1{0%{transform:translate(-4rem,-4rem)}to{transform:translate(52vw,70vh)}}@keyframes move-diagonal-2{0%{transform:translateY(-4rem)}to{transform:translate(-18vw,76vh)}}@keyframes move-diagonal-3{0%{transform:translateY(-4rem)}to{transform:translate(12vw,72vh)}}@keyframes orbit-1{0%{transform:translate(-50%,-50%)rotate(0)translate(11rem)}to{transform:translate(-50%,-50%)rotate(360deg)translate(11rem)}}@keyframes orbit-2{0%{transform:translate(-50%,-50%)rotate(0)translate(7rem)}to{transform:translate(-50%,-50%)rotate(-360deg)translate(7rem)}}@keyframes orbit-3{0%{transform:translate(-50%,-50%)rotate(0)translate(5rem)}to{transform:translate(-50%,-50%)rotate(360deg)translate(5rem)}}@keyframes orbit-4{0%{transform:translate(-50%,-50%)rotate(0)translate(15rem)}to{transform:translate(-50%,-50%)rotate(360deg)translate(15rem)}}@keyframes orbit-5{0%{transform:translate(-50%,-50%)rotate(0)translate(8rem)}to{transform:translate(-50%,-50%)rotate(-360deg)translate(8rem)}}@keyframes zigzag-1{0%{transform:translate(-6rem)translateY(0)}25%{transform:translate(25vw)translateY(-3rem)}50%{transform:translate(50vw)translateY(3rem)}75%{transform:translate(75vw)translateY(-2rem)}to{transform:translate(calc(100vw + 6rem))translateY(1rem)}}@keyframes zigzag-2{0%{transform:translate(-5rem)translateY(0)}25%{transform:translate(25vw)translateY(2rem)}50%{transform:translate(50vw)translateY(-3rem)}75%{transform:translate(75vw)translateY(1.5rem)}to{transform:translate(calc(100vw + 5rem))translateY(0)}}@keyframes zigzag-3{0%{transform:translate(-7rem)translateY(0)}20%{transform:translate(20vw)translateY(-4rem)}40%{transform:translate(40vw)translateY(4rem)}60%{transform:translate(60vw)translateY(-2rem)}80%{transform:translate(80vw)translateY(3rem)}to{transform:translate(calc(100vw + 7rem))translateY(0)}}@keyframes spiral-1{0%{transform:translate(0)rotate(0)scale(.6)}to{transform:translate(90vw,90vh)rotate(360deg)scale(1.3)}}@keyframes spiral-2{0%{transform:translate(0)rotate(0)scale(1.4)}to{transform:translate(-70vw,90vh)rotate(-360deg)scale(.7)}}@keyframes float-random-1{0%,to{transform:translate(0)}50%{transform:translate(1.4rem,-1rem)}}@keyframes float-random-2{0%,to{transform:translate(0)}50%{transform:translate(-1.2rem,1.1rem)}}@keyframes float-random-3{0%,to{transform:translate(0)}50%{transform:translate(.9rem,-1.4rem)}}@keyframes float-random-4{0%,to{transform:translate(0)}50%{transform:translate(-1rem,.8rem)}}@keyframes wave-1{0%{transform:translate(-4rem)}to{transform:translate(calc(100vw + 4rem))}}@keyframes wave-2{0%{transform:translate(-5rem)}to{transform:translate(calc(100vw + 5rem))}}@keyframes wave-3{0%{transform:translate(-4rem)}to{transform:translate(calc(100vw + 4rem))}}@keyframes wave-4{0%{transform:translate(-6rem)}to{transform:translate(calc(100vw + 6rem))}}@keyframes corner-shoot-1{0%{transform:translate(0)}to{transform:translate(110vw,110vh)}}@keyframes corner-shoot-2{0%{transform:translate(0)}to{transform:translate(-110vw,110vh)}}@keyframes corner-shoot-3{0%{transform:translate(0)}to{transform:translate(110vw,-110vh)}}@keyframes corner-shoot-4{0%{transform:translate(0)}to{transform:translate(-110vw,-110vh)}}@keyframes bounce-ball-1{0%,to{transform:translateY(0)translate(0)}50%{transform:translateY(-5rem)translate(2rem)}}@keyframes bounce-ball-2{0%,to{transform:translateY(0)translate(0)}50%{transform:translateY(4rem)translate(-2rem)}}@keyframes bounce-ball-3{0%,to{transform:translateY(0)translate(0)}50%{transform:translateY(-4rem)translate(1.5rem)}}@keyframes spin-slow{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes spin-reverse{0%{transform:rotate(0)}to{transform:rotate(-360deg)}}@keyframes bounce-gentle{0%,to{transform:translateY(0)}50%{transform:translateY(-.6rem)}}@keyframes pulse-gentle{0%,to{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.08)}}@keyframes wiggle{0%,to{transform:rotate(0)}25%{transform:rotate(-4deg)}75%{transform:rotate(4deg)}}@keyframes float-gentle{0%,to{transform:translateY(0)}50%{transform:translateY(-.8rem)}}@keyframes scale-gentle{0%,to{transform:scale(1)}50%{transform:scale(1.12)}}@keyframes rotate-gentle{0%,to{transform:rotate(0)}50%{transform:rotate(12deg)}}@keyframes bounce-soft{0%,to{transform:translateY(0)}50%{transform:translateY(-.9rem)}}@keyframes sway{0%,to{transform:translate(0)}50%{transform:translate(.8rem)}}@keyframes spin-fast{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse-fast{0%,to{transform:scale(1)}50%{transform:scale(1.2)}}@keyframes wobble{0%,to{transform:translate(0)}15%{transform:translate(-.35rem)rotate(-5deg)}30%{transform:translate(.25rem)rotate(4deg)}45%{transform:translate(-.2rem)rotate(-2deg)}60%{transform:translate(.12rem)rotate(1deg)}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-.12rem)}75%{transform:translate(.12rem)}}@keyframes bounce-crazy{0%,to{transform:translateY(0)scale(1)}25%{transform:translateY(-.5rem)scale(1.05)}75%{transform:translateY(.2rem)scale(.98)}}@keyframes spin-wobble{0%{transform:rotate(0)scale(1)}50%{transform:rotate(180deg)scale(1.12)}to{transform:rotate(360deg)scale(1)}}@keyframes flip{0%,to{transform:rotateY(0)}50%{transform:rotateY(180deg)}}@keyframes twirl{0%,to{transform:rotate(0)scale(1)}50%{transform:rotate(180deg)scale(1.15)}}@keyframes dance{0%,to{transform:translateY(0)rotate(0)}25%{transform:translateY(-.3rem)rotate(-6deg)}75%{transform:translateY(.3rem)rotate(6deg)}}@keyframes jiggle{0%,to{transform:translate(0)}25%{transform:translate(-.18rem)}50%{transform:translate(.18rem)}75%{transform:translate(-.1rem)}}@keyframes vibrate{0%,to{transform:translate(0)}20%{transform:translate(-1px,1px)}40%{transform:translate(1px,-1px)}60%{transform:translate(-1px,-1px)}80%{transform:translate(1px,1px)}}@keyframes swing{0%,to{transform:rotate(0)}50%{transform:rotate(10deg)}}@keyframes pendulum{0%,to{transform:rotate(-8deg)}50%{transform:rotate(8deg)}}@keyframes elastic{0%,to{transform:scale(1)}30%{transform:scale(1.15,.9)}60%{transform:scale(.95,1.08)}}@keyframes rubber{0%,to{transform:scale(1)}35%{transform:scale(1.2,.9)}65%{transform:scale(.9,1.15)}}@keyframes rocket{0%,to{transform:translateY(0)rotate(-8deg)}50%{transform:translateY(-.8rem)rotate(-12deg)}}@keyframes comet{0%,to{transform:translate(0)rotate(12deg)}50%{transform:translate(.8rem)rotate(18deg)}}@keyframes meteor{0%,to{transform:translateY(0)rotate(8deg)}50%{transform:translateY(-.7rem)rotate(14deg)}}@keyframes blast{0%,to{transform:scale(1)}50%{transform:scale(1.2)rotate(10deg)}}@keyframes spin-bounce{0%,to{transform:rotate(0)translateY(0)}50%{transform:rotate(180deg)translateY(-.5rem)}}@keyframes flip-bounce{0%,to{transform:rotateY(0)translateY(0)}50%{transform:rotateY(180deg)translateY(-.5rem)}}@keyframes scale-bounce{0%,to{transform:scale(1)translateY(0)}50%{transform:scale(1.14)translateY(-.55rem)}}.animate-move-right-slow{animation:25s linear infinite move-right-slow}.animate-move-right-medium{animation:20s linear infinite move-right-medium}.animate-move-right-fast{animation:15s linear infinite move-right-fast}.animate-move-down-slow{animation:30s linear infinite move-down-slow}.animate-move-down-medium{animation:25s linear infinite move-down-medium}.animate-move-diagonal-1{animation:35s linear infinite move-diagonal-1}.animate-move-diagonal-2{animation:28s linear infinite move-diagonal-2}.animate-move-diagonal-3{animation:32s linear infinite move-diagonal-3}.animate-orbit-1{animation:20s linear infinite orbit-1}.animate-orbit-2{animation:25s linear infinite reverse orbit-2}.animate-orbit-3{animation:15s linear infinite orbit-3}.animate-orbit-4{animation:22s linear infinite orbit-4}.animate-orbit-5{animation:18s linear infinite orbit-5}.animate-zigzag-1{animation:18s linear infinite zigzag-1}.animate-zigzag-2{animation:22s linear infinite zigzag-2}.animate-zigzag-3{animation:16s linear infinite zigzag-3}.animate-spiral-1{animation:30s linear infinite spiral-1}.animate-spiral-2{animation:25s linear infinite spiral-2}.animate-float-random-1{animation:8s ease-in-out infinite float-random-1}.animate-float-random-2{animation:10s ease-in-out infinite float-random-2}.animate-float-random-3{animation:12s ease-in-out infinite float-random-3}.animate-float-random-4{animation:9s ease-in-out infinite float-random-4}.animate-wave-1{animation:20s linear infinite wave-1}.animate-wave-2{animation:24s linear infinite wave-2}.animate-wave-3{animation:18s linear infinite wave-3}.animate-wave-4{animation:26s linear infinite wave-4}.animate-corner-shoot-1{animation:15s linear infinite corner-shoot-1}.animate-corner-shoot-2{animation:18s linear infinite corner-shoot-2}.animate-corner-shoot-3{animation:20s linear infinite corner-shoot-3}.animate-corner-shoot-4{animation:16s linear infinite corner-shoot-4}.animate-bounce-ball-1{animation:12s ease-in-out infinite bounce-ball-1}.animate-bounce-ball-2{animation:14s ease-in-out infinite bounce-ball-2}.animate-bounce-ball-3{animation:10s ease-in-out infinite bounce-ball-3}.animate-spin-slow{animation:8s linear infinite spin-slow}.animate-spin-reverse{animation:6s linear infinite spin-reverse}.animate-bounce-gentle{animation:3s ease-in-out infinite bounce-gentle}.animate-bounce-soft{animation:4s ease-in-out infinite bounce-soft}.animate-pulse-gentle{animation:4s ease-in-out infinite pulse-gentle}.animate-wiggle{animation:2s ease-in-out infinite wiggle}.animate-float-gentle{animation:5s ease-in-out infinite float-gentle}.animate-scale-gentle{animation:6s ease-in-out infinite scale-gentle}.animate-rotate-gentle{animation:8s ease-in-out infinite rotate-gentle}.animate-sway{animation:3s ease-in-out infinite sway}.animate-spin-fast{animation:2s linear infinite spin-fast}.animate-pulse-fast{animation:1.5s ease-in-out infinite pulse-fast}.animate-wobble{animation:2s ease-in-out infinite wobble}.animate-shake{animation:.5s ease-in-out infinite shake}.animate-bounce-crazy{animation:1s ease-in-out infinite bounce-crazy}.animate-spin-wobble{animation:4s ease-in-out infinite spin-wobble}.animate-flip{animation:3s ease-in-out infinite flip}.animate-twirl{animation:5s ease-in-out infinite twirl}.animate-dance{animation:3s ease-in-out infinite dance}.animate-jiggle{animation:1s ease-in-out infinite jiggle}.animate-vibrate{animation:.3s ease-in-out infinite vibrate}.animate-swing{animation:2.8s ease-in-out infinite swing}.animate-pendulum{animation:2.4s ease-in-out infinite pendulum}.animate-elastic{animation:2.2s ease-in-out infinite elastic}.animate-rubber{animation:2.5s ease-in-out infinite rubber}.animate-rocket{animation:1.8s ease-in-out infinite rocket}.animate-comet{animation:2s ease-in-out infinite comet}.animate-meteor{animation:1.7s ease-in-out infinite meteor}.animate-blast{animation:2.2s ease-in-out infinite blast}.animate-spin-bounce{animation:2.4s ease-in-out infinite spin-bounce}.animate-flip-bounce{animation:2.6s ease-in-out infinite flip-bounce}.animate-scale-bounce{animation:2.1s ease-in-out infinite scale-bounce}.ui-button{cursor:pointer;border:0;border-radius:.35rem;justify-content:center;align-items:center;gap:.5rem;min-height:44px;font-weight:600;line-height:1;text-decoration:none;transition:background-color .2s,color .2s,box-shadow .2s,opacity .2s;display:inline-flex}.ui-button-icon,.ui-button-icon svg{width:1rem;height:1rem}.ui-button:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.ui-button-sm{min-height:40px;padding:.625rem .9rem;font-size:.875rem}.ui-button-md{padding:.7rem 1rem;font-size:.95rem}.ui-button-lg{padding:.82rem 1.15rem;font-size:1rem}.ui-button-solid.ui-button-default{background:var(--color-brand-primary);color:var(--color-brand-foreground,var(--color-text-inverse))}.ui-button-solid.ui-button-default:hover{background:var(--color-brand-primary-hover)}.ui-button-solid.ui-button-default:active{background:var(--color-brand-primary-active)}.ui-button-solid.ui-button-neutral{background:var(--color-surface-muted);color:var(--color-text-primary)}.ui-button-solid.ui-button-neutral:hover{background:var(--color-surface-muted-hover)}.ui-button-solid.ui-button-neutral:active{background:var(--color-surface-muted-active)}.ui-button-solid.ui-button-warning{background:var(--color-status-warning-strong);color:var(--color-status-warning-strong-foreground)}.ui-button-solid.ui-button-warning:hover{background:var(--color-status-warning-strong-hover)}.ui-button-solid.ui-button-warning:active{background:var(--color-status-warning-strong-active)}.ui-button-solid.ui-button-success{background:var(--color-status-success-strong);color:var(--color-status-success-strong-foreground)}.ui-button-solid.ui-button-success:hover{background:var(--color-status-success-strong-hover)}.ui-button-solid.ui-button-success:active{background:var(--color-status-success-strong-active)}.ui-button-solid.ui-button-danger{background:var(--color-status-danger-strong);color:var(--color-status-danger-strong-foreground)}.ui-button-solid.ui-button-danger:hover{background:var(--color-status-danger-strong-hover)}.ui-button-solid.ui-button-danger:active{background:var(--color-status-danger-strong-active)}.ui-button-soft.ui-button-default{background:var(--color-surface-brand-soft);color:var(--color-brand-primary-hover)}.ui-button-soft.ui-button-default:hover{background:var(--color-surface-brand-soft-hover)}.ui-button-soft.ui-button-default:active{background:var(--color-surface-brand-soft-active)}.ui-button-soft.ui-button-warning{background:var(--color-status-warning-soft-bg);color:var(--color-status-warning-soft-foreground-strong)}.ui-button-soft.ui-button-warning:hover{background:var(--color-status-warning-soft-bg-hover)}.ui-button-soft.ui-button-warning:active{background:var(--color-status-warning-soft-bg-active)}.ui-button-soft.ui-button-success{background:var(--color-status-success-soft-bg);color:var(--color-status-success-soft-foreground-strong)}.ui-button-soft.ui-button-success:hover{background:var(--color-status-success-soft-bg-hover)}.ui-button-soft.ui-button-success:active{background:var(--color-status-success-soft-bg-active)}.ui-button-soft.ui-button-danger{background:var(--color-status-danger-soft-bg-alt);color:var(--color-status-danger-soft-foreground-strong)}.ui-button-soft.ui-button-danger:hover{background:var(--color-status-danger-soft-bg-hover)}.ui-button-soft.ui-button-danger:active{background:var(--color-status-danger-soft-bg-active)}.ui-button-ghost{color:var(--color-brand-primary);background:0 0}.ui-button-ghost:hover{background:var(--color-surface-brand-soft)}.ui-button-ghost:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.ui-button-soft.ui-button-neutral{background:var(--color-surface-muted);color:var(--color-text-secondary)}.ui-button-soft.ui-button-neutral:hover{background:var(--color-surface-muted-hover)}.ui-button-soft.ui-button-neutral:active{background:var(--color-surface-muted-active)}.ui-badge{border:1px solid #0000;border-radius:999px;padding:.3rem .75rem;font-size:.75rem;font-weight:600;line-height:1.2;display:inline-flex}.ui-badge-info{background:var(--color-status-info-soft-bg);border-color:var(--color-status-info-soft-border);color:var(--color-status-info-foreground)}.ui-badge-warning{background:var(--color-status-warning-soft-bg);border-color:var(--color-status-warning-soft-border);color:var(--color-status-warning-foreground)}.ui-badge-success{background:var(--color-status-success-soft-bg);border-color:var(--color-status-success-soft-border);color:var(--color-status-success-foreground)}.ui-badge-danger{background:var(--color-status-danger-soft-bg);border-color:var(--color-status-danger-soft-border);color:var(--color-status-danger-foreground)}.ui-badge-primary{background:var(--color-surface-brand-soft);color:var(--color-text-brand);border-color:#804eec4d}.ui-card{background:var(--color-surface-default);border:1px solid var(--color-border-default);box-shadow:var(--shadow-surface-md);border-radius:1rem}.ui-card-header,.ui-card-body,.ui-card-footer{padding:1.25rem 1.5rem}.ui-card-header,.ui-card-footer{border-color:var(--color-border-default)}.ui-card-header{border-bottom-style:solid;border-bottom-width:1px}.ui-card-footer{border-top-style:solid;border-top-width:1px}.ui-input{appearance:none;background:var(--color-surface-default);border:1px solid var(--color-border-default);color:var(--color-text-primary);font:inherit;border-radius:.75rem;width:100%;min-height:44px;padding:.75rem .95rem;line-height:1.4}.ui-input::placeholder{color:var(--color-text-faint)}.ui-input:focus{border-color:var(--color-brand-focus);box-shadow:0 0 0 3px var(--color-focus-ring-strong);outline:none}.ui-textarea{appearance:none;background:var(--color-surface-default);border:1px solid var(--color-border-default);color:var(--color-text-primary);font:inherit;resize:vertical;border-radius:.75rem;width:100%;min-height:7rem;padding:.85rem .95rem;line-height:1.4}.ui-textarea::placeholder{color:var(--color-text-faint)}.ui-textarea:focus{border-color:var(--color-brand-focus);box-shadow:0 0 0 3px var(--color-focus-ring-strong);outline:none}.ui-select{width:100%;position:relative}.ui-select-native{opacity:0;pointer-events:none;width:0;height:0;position:absolute;top:0;left:0}.ui-select-control{appearance:none;background:var(--color-surface-default);border:1px solid var(--color-border-default);color:var(--color-text-primary);cursor:pointer;text-align:left;border-radius:.75rem;justify-content:space-between;align-items:center;gap:.75rem;width:100%;min-height:44px;padding:.55rem .75rem .55rem .95rem;transition:border-color .2s,box-shadow .2s;display:flex}.ui-select-control:focus-visible{border-color:var(--color-brand-focus);box-shadow:0 0 0 3px var(--color-focus-ring-strong);outline:none}.ui-select-control:disabled{color:var(--color-text-faint);cursor:not-allowed}.ui-select-value-wrapper{flex-wrap:wrap;flex:auto;align-items:center;gap:.35rem;min-width:0;display:flex}.ui-select-placeholder{color:var(--color-text-faint)}.ui-select-chip{background:var(--color-surface-muted);color:var(--color-text-primary);border-radius:999px;padding:.35rem .6rem;font-size:.875rem;line-height:1;display:inline-flex}.ui-select-arrow-zone{color:var(--color-text-secondary);flex:none;justify-content:center;align-items:center;display:inline-flex}.ui-select-arrow-icon{width:1rem;height:1rem;transition:transform .2s}.ui-select.is-open .ui-select-arrow-icon{transform:rotate(180deg)}.ui-select-menu{background:var(--color-surface-default);border:1px solid var(--color-border-default);box-shadow:var(--shadow-surface-md);z-index:30;border-radius:.9rem;gap:.25rem;max-height:16rem;margin-top:.45rem;padding:.4rem;display:grid;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.ui-select-menu[hidden]{display:none}.ui-select-option{appearance:none;color:var(--color-text-primary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:.7rem;justify-content:space-between;align-items:center;gap:.75rem;width:100%;padding:.7rem .8rem;display:flex}.ui-select-option:hover,.ui-select-option:focus-visible{background:var(--color-surface-muted);outline:none}.ui-select-option.is-selected{background:var(--color-status-info-soft-bg);color:var(--color-text-brand)}.ui-select-option:disabled{color:var(--color-text-faint);cursor:not-allowed}.ui-select-option-text{flex:auto}.ui-select-option-check{color:currentColor;opacity:0}.ui-select-option.is-selected .ui-select-option-check{opacity:1}.ui-modal-backdrop{background:var(--overlay-backdrop-default);z-index:40;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.ui-modal-panel{background:var(--color-surface-default);border:1px solid var(--color-border-default);box-shadow:var(--shadow-surface-lg);border-radius:1rem;width:min(100%,32rem);max-width:32rem}.ui-modal-header,.ui-modal-body,.ui-modal-actions{padding-left:1.5rem;padding-right:1.5rem}.ui-modal-header{border-bottom:1px solid var(--color-border-default);padding-top:1.25rem;padding-bottom:1rem}.ui-modal-header h2{color:var(--color-text-primary);margin:0;font-size:1.125rem;font-weight:700}.ui-modal-body{padding-top:1.25rem;padding-bottom:1.25rem}.ui-modal-actions{border-top:1px solid var(--color-border-default);justify-content:flex-end;gap:.75rem;padding-top:1rem;padding-bottom:1rem;display:flex}.ui-empty-state{border:1px dashed var(--color-border-subtle);color:var(--color-text-muted);text-align:center;border-radius:1rem;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding:3rem 1.5rem;display:flex}.ui-empty-state-title{color:var(--color-text-primary);margin:0;font-size:1.125rem;font-weight:700}.ui-empty-state-icon{background:var(--color-surface-muted);color:var(--color-text-faint);border-radius:999px;justify-content:center;align-items:center;width:4rem;height:4rem;display:inline-flex}.ui-empty-state-icon svg{width:2rem;height:2rem}.ui-empty-state-description{max-width:32rem;margin:0}.ui-table-shell{width:100%;overflow-x:auto}.ui-table{border-collapse:collapse;width:100%;min-width:100%}.ui-icon-button{appearance:none;cursor:pointer;background:0 0;border:0;border-radius:.5rem;justify-content:center;align-items:center;min-width:44px;min-height:44px;padding:.5rem;transition:background-color .2s,color .2s;display:inline-flex}.ui-icon-button:focus-visible,.borderless-icon-button:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.ui-icon-button-solid.ui-icon-button-neutral{color:var(--color-text-muted)}.ui-icon-button-solid.ui-icon-button-danger{color:var(--color-status-danger-foreground)}.ui-icon-button-solid.ui-icon-button-warning{color:var(--color-status-warning-foreground)}.ui-icon-button-solid.ui-icon-button-success{color:var(--color-status-success-foreground)}.ui-icon-button-solid.ui-icon-button-neutral:hover{color:var(--color-text-primary)}.ui-icon-button-solid.ui-icon-button-danger:hover{color:var(--color-status-danger-strong-hover)}.ui-icon-button-solid.ui-icon-button-warning:hover{color:var(--color-status-warning-strong-hover)}.ui-icon-button-solid.ui-icon-button-success:hover{color:var(--color-status-success-strong-hover)}.borderless-icon-button{appearance:none;box-shadow:none;cursor:pointer;background:0 0;border:0;outline:none}.ui-icon-button-ghost.ui-icon-button-neutral,.ui-icon-button-ghost.ui-icon-button-danger,.ui-icon-button-ghost.ui-icon-button-warning,.ui-icon-button-ghost.ui-icon-button-success{color:var(--color-text-faint)}.ui-icon-button-ghost.ui-icon-button-neutral:hover{color:var(--color-text-primary)}.ui-icon-button-ghost.ui-icon-button-danger:hover{color:var(--color-status-danger-icon-hover)}.ui-icon-button-ghost.ui-icon-button-warning:hover{color:var(--color-status-warning-strong)}.ui-icon-button-ghost.ui-icon-button-success:hover{color:var(--color-status-success-strong)}.borderless-icon-button svg{width:1rem;height:1rem}.ui-form-field{gap:.5rem;display:grid}.ui-form-label{color:var(--color-text-primary);font-size:.95rem;font-weight:600}.ui-form-hint{color:var(--color-text-muted);margin:0;font-size:.875rem}.ui-form-error{color:var(--color-status-danger-foreground);margin:0;font-size:.875rem}.ui-space-x{flex-shrink:0;display:inline-block}.ui-space-y{display:block}.ui-space-x-xs{width:.25rem}.ui-space-x-sm{width:.5rem}.ui-space-x-md{width:.75rem}.ui-space-x-lg{width:1rem}.ui-space-x-xl{width:1.5rem}.ui-space-y-xs{height:.25rem}.ui-space-y-sm{height:.5rem}.ui-space-y-md{height:.75rem}.ui-space-y-lg{height:1rem}.ui-space-y-xl{height:1.5rem}.dashboard-shell{background:var(--gradient-shell);color:var(--foreground);min-height:100vh;display:flex}.dashboard-sidebar{width:12rem;padding-left:env(safe-area-inset-left,0px);flex-shrink:0;transition:width .3s}.dashboard-shell.sidebar-is-collapsed .dashboard-sidebar{width:4rem}.sidebar-nav-shell{background:var(--color-surface-elevated);border-right:1px solid var(--color-border-panel);box-shadow:var(--shadow-sidebar);height:100vh;padding:env(safe-area-inset-top,0px).75rem env(safe-area-inset-bottom,0px)0;flex-direction:column;display:flex;position:sticky;top:0;overflow:hidden auto}.sidebar-brand{justify-content:center;align-items:center;padding:.75rem .5rem;display:flex;position:relative}.sidebar-brand-link{flex-direction:column;align-items:center;gap:.5rem;width:100%;display:flex}.sidebar-brand-logo{object-fit:cover;border-radius:.75rem;width:4rem;height:4rem}.sidebar-brand-title{color:var(--color-text-heading-alt);margin:0;font-size:1.125rem;font-weight:700}.sidebar-collapse-button{background:var(--color-surface-elevated-strong);box-shadow:var(--shadow-floating-control);color:var(--color-text-muted);cursor:pointer;border:0;border-radius:999px;justify-content:center;align-items:center;width:1.5rem;height:1.5rem;padding:.25rem;display:inline-flex;position:absolute;top:.5rem;right:.75rem}.sidebar-collapse-button svg{width:1rem;height:1rem}.sidebar-primary{flex-direction:column;flex:1;display:flex}.sidebar-list{gap:0;margin:0;padding:.75rem 0 0;list-style:none;display:grid}.sidebar-divider{margin:.5rem 0;padding:0 .875rem}.sidebar-divider hr,.sidebar-projects hr{border:0;border-top:1px solid var(--color-border-panel-muted);margin:0}.sidebar-nav-item{color:var(--color-text-muted);border-radius:.9rem;margin:0 .5rem;padding:.15rem 0;font-weight:500;transition:background-color .2s,color .2s}.sidebar-nav-item:hover{background:var(--overlay-dark-soft);color:var(--color-surface-muted-inverse)}.sidebar-nav-item.is-active{background:var(--overlay-brand-soft-strong);color:var(--color-text-brand);font-weight:600}.sidebar-nav-link{width:100%;display:block}.sidebar-nav-link-inner{align-items:center;gap:.75rem;padding:.6rem .95rem;display:flex}.sidebar-nav-icon{justify-content:center;align-items:center;display:inline-flex}.sidebar-nav-icon svg{width:1.35rem;height:1.35rem}.sidebar-nav-label{font-size:1rem}.sidebar-projects{margin-top:.4rem;padding:0 .75rem .75rem}.sidebar-section-label{color:var(--color-text-muted);letter-spacing:.14em;text-transform:uppercase;margin:.9rem 0 .65rem;padding:0 .5rem;font-size:.625rem;font-weight:700}.sidebar-project-list{gap:.1rem;margin:0;padding:0;list-style:none;display:grid}.sidebar-project-link{color:var(--color-text-muted);border-radius:.85rem;align-items:center;gap:.65rem;padding:.48rem .5rem;transition:background-color .2s,color .2s;display:flex}.sidebar-project-link:hover{background:var(--overlay-dark-soft);color:var(--color-surface-muted-inverse)}.sidebar-project-icon{border:1px solid var(--color-border-panel-strong);border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:1.55rem;height:1.55rem;display:inline-flex}.sidebar-project-icon svg{width:.9rem;height:.9rem}.sidebar-project-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.9rem;overflow:hidden}.sidebar-footer-links{margin-top:auto;padding-bottom:.25rem}.sidebar-organization{background:var(--color-surface-elevated);padding:0 .5rem .9rem}.organization-button{cursor:pointer;text-align:left;background:0 0;border:0;border-radius:.95rem;align-items:center;gap:.65rem;width:100%;padding:.55rem .65rem;transition:background-color .2s;display:flex}.organization-button:hover{background:var(--overlay-dark-soft)}.organization-avatar{border-radius:999px;flex-shrink:0;width:1.75rem;height:1.75rem;display:inline-flex;overflow:hidden}.organization-avatar img{aspect-ratio:1;object-fit:cover;width:100%;height:100%}.organization-copy{flex-direction:column;min-width:0;display:flex}.organization-name{color:var(--color-text-body-subtle);text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;font-weight:600;overflow:hidden}.organization-meta{color:var(--color-text-muted);font-size:.75rem}.dashboard-shell.sidebar-is-collapsed{grid-template-columns:4rem 1fr}.dashboard-shell.sidebar-is-collapsed .sidebar-brand-title,.dashboard-shell.sidebar-is-collapsed .sidebar-section-label,.dashboard-shell.sidebar-is-collapsed .sidebar-nav-label,.dashboard-shell.sidebar-is-collapsed .sidebar-project-label{display:none}.dashboard-shell.sidebar-is-collapsed .sidebar-nav-link-inner{justify-content:center}.dashboard-shell.sidebar-is-collapsed .sidebar-project-list{display:none}.dashboard-shell.sidebar-is-collapsed .sidebar-collapse-button svg{transform:rotate(180deg)}.page-header-right{flex:none;align-items:center;gap:.5rem;display:flex}.page-header-actions{flex:none;margin-left:auto}.breadcrumb{align-items:center;gap:.375rem;font-size:.875rem;display:flex}.breadcrumb-separator{color:var(--color-text-muted);-webkit-user-select:none;user-select:none}.breadcrumb-item{color:var(--color-text-muted);font-weight:500}.breadcrumb-item--link{color:var(--color-text-brand);text-decoration:none}.breadcrumb-item--link:hover{text-decoration:underline}.breadcrumb-item--current{color:var(--color-text-muted)}.header-search-placeholder{border:1px solid var(--color-border-panel);background:var(--color-surface-muted-inverse);color:var(--color-text-muted);cursor:default;border-radius:.375rem;align-items:center;gap:.5rem;width:100%;min-width:16rem;max-width:28rem;padding:.375rem .75rem;font-size:.875rem;display:flex}.header-icon-button{width:2rem;height:2rem;color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;border-radius:.375rem;justify-content:center;align-items:center;display:flex}.header-icon-button:hover{background:var(--overlay-dark-soft)}.header-icon-button:disabled{opacity:.5;cursor:not-allowed}.header-avatar-menu{position:relative}.header-avatar-menu>summary{cursor:pointer;list-style:none}.header-avatar-menu>summary::-webkit-details-marker{display:none}.header-avatar-button{background:var(--color-text-brand);color:#fff;cursor:pointer;border:none;border-radius:50%;outline:none;justify-content:center;align-items:center;width:2rem;height:2rem;font-size:.8125rem;font-weight:600;display:flex}.header-avatar-initial{text-transform:uppercase;pointer-events:none;line-height:1}.header-avatar-dropdown{background:var(--color-surface-elevated);border:1px solid var(--color-border-panel);min-width:14rem;box-shadow:var(--shadow-floating-control);z-index:50;border-radius:.5rem;position:absolute;top:calc(100% + .5rem);right:0;overflow:hidden}.avatar-dropdown-workspace{flex-direction:column;gap:.125rem;padding:.75rem 1rem;display:flex}.avatar-dropdown-workspace-name{color:var(--color-text-muted);word-break:break-all;font-size:.875rem;font-weight:600}.avatar-dropdown-workspace-meta{color:var(--color-text-muted);opacity:.7;font-size:.75rem}.avatar-dropdown-divider{border:none;border-top:1px solid var(--color-border-panel-muted);margin:0}.avatar-dropdown-item{width:100%;color:var(--color-text-muted);text-align:left;cursor:pointer;background:0 0;border:none;padding:.625rem 1rem;font-size:.875rem;text-decoration:none;display:block}.avatar-dropdown-item:hover{background:var(--overlay-dark-soft)}.avatar-dropdown-item--danger{color:#dc2626}.avatar-dropdown-item--danger:hover{background:#fef2f2}.avatar-dropdown-logout-form{display:contents}.dashboard-main{flex-direction:column;flex:1;min-width:0;display:flex}.dashboard-main-content{flex-direction:column;flex:1;gap:1.5rem;padding:2rem;display:flex}.overview-section{padding:.25rem 0 0}.overview-section-heading{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.overview-section-heading h1,.overview-section-heading h3,.tasks-section-header h3{color:var(--color-surface-muted-inverse);margin:0;font-size:1.6rem;font-weight:600}.project-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem;display:grid}.project-card{background:var(--color-surface-default);border:1px solid var(--color-border-subtle);cursor:pointer;border-radius:1rem;padding:1rem;transition:box-shadow .2s}.project-card-top{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.project-card-top .borderless-icon-button{padding:0}.project-card-top .ui-icon-button-ghost.ui-icon-button-neutral:hover{color:var(--color-text-primary)}.project-card-top .ui-icon-button-ghost.ui-icon-button-danger:hover{color:var(--color-status-danger-icon-hover)}.project-card-title-row{align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.project-avatar{background:var(--project-color,var(--color-project-fallback));color:var(--color-text-inverse);border-radius:.85rem;flex-shrink:0;justify-content:center;align-items:center;width:3rem;height:3rem;font-size:1.1rem;font-weight:700;display:inline-flex}.project-avatar>svg{width:1.25rem;height:1.25rem}.project-date-row{color:var(--color-text-muted);align-items:center;gap:.5rem;margin-bottom:1rem;font-size:.875rem;display:flex}.tasks-section{background:var(--color-surface-default);border:1px solid var(--color-border-subtle);border-radius:1rem;overflow:hidden}.tasks-section-header{border-bottom:1px solid var(--color-border-muted);justify-content:space-between;align-items:center;padding:1.2rem 1rem;display:flex}.tasks-add-button{background:var(--color-surface-default);border:1px solid var(--color-border-muted);color:var(--color-text-secondary);cursor:pointer;border-radius:.7rem;align-items:center;gap:.5rem;min-height:2.75rem;padding:.7rem 1rem;font-weight:500;display:inline-flex}.task-list{flex-direction:column;display:flex}.task-drag-handle{color:var(--color-text-faint);cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0;line-height:1}.task-drag-handle:active{cursor:grabbing}.task-row{border-bottom:1px solid var(--color-border-muted);cursor:pointer;align-items:center;gap:.75rem;padding:.9rem 1rem;transition:background-color .2s;display:flex}.task-row:hover{background:var(--color-surface-neutral-hover)}.task-check{background:var(--color-surface-default);border:2px solid var(--color-border-strong);color:var(--color-text-inverse);cursor:pointer;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;display:inline-flex}.task-check.is-complete{background:var(--color-text-brand-strong);border-color:var(--color-text-brand-strong)}.task-body{flex:1;min-width:0}.task-body p{color:var(--color-surface-muted-inverse);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:.95rem;font-weight:500;overflow:hidden}.task-row.is-complete .task-body p{color:var(--color-text-faint);text-decoration:line-through}.task-meta{color:var(--color-text-muted);flex-wrap:wrap;align-items:center;gap:.45rem;margin-top:.3rem;font-size:.75rem;display:flex}.project-progress-track{background:var(--color-surface-muted);border-radius:999px;height:.5rem;overflow:hidden}.project-progress-bar{background:var(--project-color,var(--color-project-fallback));border-radius:999px;height:100%}.tab-nav{border-bottom:1px solid var(--color-border-muted);align-items:center;gap:1.5rem;margin-bottom:1.5rem;display:flex;overflow-x:auto}.tab-nav-item{color:var(--color-text-muted);padding-bottom:.75rem;border-bottom:2px solid #0000;align-items:center;gap:.5rem;min-height:44px;padding-inline:.25rem;font-size:.875rem;font-weight:400;transition:color .15s,border-color .15s;display:flex}.tab-nav-item.is-active{border-bottom-color:var(--color-brand-primary);color:var(--color-text-brand);font-weight:600}.tab-nav-item:hover:not(.is-active){color:var(--color-text-primary)}.tablo-metadata-row{border-bottom:1px solid var(--color-border-muted);flex-wrap:wrap;align-items:center;gap:1rem;margin-bottom:1rem;padding-bottom:1rem;display:flex}.tablo-metadata-date{color:var(--color-text-muted);align-items:center;gap:.5rem;font-size:.875rem;display:flex}.tablo-metadata-date svg{width:1rem;height:1rem}.kanban-column{flex-shrink:0;width:18rem}.kanban-column .tasks-section-header h3{font-size:1rem}.etape-group-header{background:var(--color-surface-muted);border-bottom:1px solid var(--color-border-muted);align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.etape-group-color-dot{background:var(--project-color,var(--color-project-fallback));border-radius:999px;flex-shrink:0;width:.5rem;height:.5rem}.etape-group-label{color:var(--color-text-secondary);font-size:.875rem;font-weight:600}.etape-group-label.is-unassigned{color:var(--color-text-muted);font-weight:400}.task-list-empty{color:var(--color-text-faint);padding:.75rem 1rem;font-size:.875rem;font-style:italic}#discussion-messages{scroll-behavior:smooth;max-height:32rem;overflow-y:auto}.message-row{flex-direction:column;padding:.75rem 1rem;display:flex}.message-row.message-own{align-items:flex-end}.message-row.message-other{align-items:flex-start}.message-meta{align-items:baseline;gap:.5rem;margin-bottom:.25rem;display:flex}.message-author{color:var(--color-text-primary);font-size:.875rem;font-weight:600}.message-timestamp{color:var(--color-text-muted);font-size:.75rem}.message-bubble{white-space:pre-wrap;max-width:70%;word-break:break-words;border-radius:.25rem .75rem .75rem;padding:.75rem 1rem;font-size:1rem;line-height:1.5}.message-row.message-own .message-bubble{background-color:color-mix(in srgb,var(--color-brand-primary)10%,transparent);color:var(--color-text-primary);border-radius:.75rem .75rem .25rem}.message-row.message-other .message-bubble{background-color:var(--color-surface-default,#fff);border:1px solid var(--color-border-default,#e2e8f0);color:var(--color-text-primary)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@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-rotate-x{syntax:"*";inherits:false;initial-value:rotateX(0)}@property --tw-rotate-y{syntax:"*";inherits:false;initial-value:rotateY(0)}@property --tw-rotate-z{syntax:"*";inherits:false;initial-value:rotateZ(0)}@property --tw-skew-x{syntax:"*";inherits:false;initial-value:skewX(0)}@property --tw-skew-y{syntax:"*";inherits:false;initial-value:skewY(0)}@property --tw-space-y-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-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-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@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-duration{syntax:"*";inherits:false}@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} \ No newline at end of file diff --git a/backend/templates/app_layout.templ b/backend/templates/app_layout.templ index d13397b..cad052d 100644 --- a/backend/templates/app_layout.templ +++ b/backend/templates/app_layout.templ @@ -57,29 +57,29 @@ templ SidebarNavIcon(kind string) { } } -// SidebarNavItemRow renders one nav list item. -// If item.Href is empty, renders as a non-interactive div (visual-only, per D-N02). -// If item.Href is non-empty, renders as an anchor tag. +// SidebarNavItemRow renders one nav list item with Tailwind utility classes. templ SidebarNavItemRow(item sidebarNavItem) { - if item.Href == "" { -
- } // SidebarProjectsSection renders the projects list in the sidebar. @@ -121,145 +121,168 @@ templ SidebarOrganizationFooter(user *auth.User, csrfToken string) {
} -// DashboardSidebar renders the full sidebar with brand, nav, projects, and footer. -// Rebuilt in Phase 18 Plan 02 per D-07/D-08/D-09: two-section structure (GENERAL + PROJECTS), -// collapse button wired via inline JS (no server round-trip, resets on reload per D-09). -// SidebarOrganizationFooter moves to avatar dropdown in Plan 03. +// DashboardSidebar renders the full sidebar matching the production design. +// Uses Tailwind utility classes. Collapse button is revealed on group hover (D-09). templ DashboardSidebar(activePath string, tablos []sqlc.Tablo, user *auth.User, csrfToken string) { } -// PageHeader renders the full-width top bar with three zones: -// left (breadcrumb), center (search placeholder), right (bell, inbox, avatar dropdown). +// PageHeader renders the top bar matching the production design: +// left (search input), right (bell placeholder + avatar dropdown). +// Breadcrumb data is retained in AppLayout params for downstream phases but not shown visually. // The avatar dropdown uses native HTML details/summary — no Alpine.js (D-06). templ PageHeader(pageTitle string, breadcrumb []BreadcrumbItem, headerActions templ.Component, user *auth.User, csrfToken string) { -