User
Deploy theme persistence and navigation fix
e184579
Raw
History Blame Contribute Delete
39.7 kB
:root {
--brand-primary: #0F766E;
--brand-primary-hover: #115E59;
--brand-accent: #B45309;
--app-bg: #F7F8F7;
--surface: #FFFFFF;
--surface-muted: #F1F5F4;
--surface-raised: #FFFFFF;
--border: #DDE5E2;
--border-strong: #B9C8C3;
--text-primary: #17211F;
--text-muted: #64706D;
--text-soft: #8B9894;
--focus-ring: rgba(15, 118, 110, 0.24);
--status-success-bg: #DFF6EE;
--status-success-text: #0F766E;
--status-warning-bg: #FEF3D2;
--status-warning-text: #9A5B00;
--status-danger-bg: #FCE4E1;
--status-danger-text: #B42318;
--sidebar-bg: #19211F;
--sidebar-muted: #A5B2AE;
--sidebar-active: rgba(15, 118, 110, 0.22);
--sidebar-border: rgba(221, 229, 226, 0.12);
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.5rem;
--shadow-card: 0 1px 2px rgba(23, 33, 31, 0.06), 0 12px 28px rgba(23, 33, 31, 0.045);
--shadow-popover: 0 18px 44px rgba(23, 33, 31, 0.18);
}
html.dark {
--brand-primary: #5EEAD4;
--brand-primary-hover: #2DD4BF;
--brand-accent: #FCD34D;
--app-bg: #101614;
--surface: #18201E;
--surface-muted: #202A27;
--surface-raised: #1B2522;
--border: #2E3B37;
--border-strong: #43524D;
--text-primary: #F4F7F6;
--text-muted: #B4C0BC;
--text-soft: #889692;
--focus-ring: rgba(94, 234, 212, 0.28);
--status-success-bg: rgba(45, 212, 191, 0.16);
--status-success-text: #99F6E4;
--status-warning-bg: rgba(252, 211, 77, 0.16);
--status-warning-text: #FDE68A;
--status-danger-bg: rgba(248, 113, 113, 0.16);
--status-danger-text: #FCA5A5;
--sidebar-bg: #111816;
--sidebar-muted: #9DACA7;
--sidebar-active: rgba(94, 234, 212, 0.15);
--sidebar-border: rgba(221, 229, 226, 0.12);
--shadow-card: 0 1px 2px rgba(0, 0, 0, 0.34);
--shadow-popover: 0 18px 50px rgba(0, 0, 0, 0.42);
color-scheme: dark;
}
html, body {
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background-color: var(--app-bg);
color: var(--text-primary);
scrollbar-gutter: stable;
font-size: 15px;
letter-spacing: 0;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
body.tts-sidebar-open {
overflow: hidden;
}
* {
scrollbar-width: thin;
scrollbar-color: rgba(100, 116, 139, 0.72) transparent;
}
*::-webkit-scrollbar {
width: 10px;
height: 10px;
}
*::-webkit-scrollbar-track {
background: transparent;
}
*::-webkit-scrollbar-thumb {
background-color: rgba(100, 116, 139, 0.72);
border: 2px solid transparent;
border-radius: 999px;
background-clip: content-box;
min-height: 40px;
}
*::-webkit-scrollbar-thumb:hover {
background-color: rgba(71, 85, 105, 0.92);
background-clip: content-box;
}
*::-webkit-scrollbar-corner {
background: transparent;
}
a, .btn-link {
color: var(--brand-primary);
}
.btn-primary {
color: #fff;
background-color: var(--brand-primary);
border-color: var(--brand-primary);
}
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
box-shadow: 0 0 0 0.1rem var(--surface), 0 0 0 0.25rem var(--focus-ring);
}
.content {
padding-top: 1.1rem;
}
h1:focus {
outline: none;
}
.valid.modified:not([type=checkbox]) {
outline: 1px solid #111827;
}
.invalid {
outline: 1px solid #991B1B;
}
.validation-message {
color: #991B1B;
}
.blazor-error-boundary {
background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC51NDUgOTIuNzk1IDI5MC5hNTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNjg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyICcuODc5IDY5LjMxNzkgMjY3LjgyOSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA5Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #240046;
padding: 1rem 1rem 1rem 3.7rem;
color: white;
}
.blazor-error-boundary::after {
content: "An error has occurred."
}
.darker-border-checkbox.form-check-input {
border-color: #929292;
}
html.dark a,
html.dark .btn-link {
color: #93C5FD;
}
html.dark,
html.dark body {
background-color: var(--app-bg);
color: var(--text-primary);
scrollbar-color: rgba(148, 163, 184, 0.82) rgba(15, 23, 42, 0.9);
}
html.dark *::-webkit-scrollbar-track {
background: rgba(15, 23, 42, 0.9);
}
html.dark *::-webkit-scrollbar-thumb {
background-color: rgba(148, 163, 184, 0.82);
}
html.dark *::-webkit-scrollbar-thumb:hover {
background-color: rgba(226, 232, 240, 0.9);
}
html.dark .bg-white,
html.dark .bg-card,
html.dark .bg-popover {
background-color: #111827 !important;
}
html.dark .bg-slate-50,
html.dark .bg-slate-50\/50,
html.dark .bg-slate-50\/60,
html.dark .bg-slate-50\/70,
html.dark .bg-muted {
background-color: #1E293B !important;
}
html.dark .bg-background,
html.dark .bg-slate-100,
html.dark .bg-slate-100\/50,
html.dark .bg-slate-200,
html.dark .bg-slate-300 {
background-color: #334155 !important;
}
html.dark .bg-slate-400,
html.dark .bg-slate-500 {
background-color: #475569 !important;
}
html.dark .bg-slate-800,
html.dark .bg-slate-900,
html.dark .bg-slate-950 {
background-color: #0F172A !important;
}
html.dark .text-foreground,
html.dark .text-card-foreground,
html.dark .text-popover-foreground,
html.dark .text-primary,
html.dark .text-slate-950,
html.dark .text-slate-900,
html.dark .text-slate-800,
html.dark .text-slate-700 {
color: #F8FAFC !important;
}
html.dark .text-slate-600,
html.dark .text-slate-500 {
color: #CBD5E1 !important;
}
html.dark .text-muted-foreground,
html.dark .text-muted,
html.dark .text-slate-400,
html.dark .text-slate-300 {
color: #94A3B8 !important;
}
html.dark .border-slate-100,
html.dark .border-slate-200,
html.dark .border-slate-300,
html.dark .border-slate-800,
html.dark .border-border,
html.dark .divide-slate-100,
html.dark .divide-slate-200 {
border-color: #334155 !important;
}
html.dark .border-red-500,
html.dark .border-rose-500 {
border-color: #FB7185 !important;
}
html.dark .border-violet-500,
html.dark .border-violet-600,
html.dark .border-indigo-500,
html.dark .border-indigo-600 {
border-color: #93C5FD !important;
}
html.dark input,
html.dark select,
html.dark textarea,
html.dark .form-control,
html.dark .form-select {
background-color: #0F172A !important;
color: #F8FAFC !important;
border-color: #334155 !important;
}
html.dark input::placeholder,
html.dark textarea::placeholder {
color: #94A3B8 !important;
}
html.dark input[type="checkbox"],
html.dark input[type="radio"] {
accent-color: #2563EB;
}
html.dark .btn-primary,
html.dark .bg-primary,
html.dark .bg-violet-500,
html.dark .bg-violet-600,
html.dark .bg-purple-500,
html.dark .bg-purple-600,
html.dark .bg-indigo-500,
html.dark .bg-indigo-600 {
background-color: #2563EB !important;
border-color: #4338CA !important;
color: #FFFFFF !important;
}
html.dark .bg-violet-700,
html.dark .bg-purple-700,
html.dark .bg-indigo-700 {
background-color: #4338CA !important;
color: #FFFFFF !important;
}
html.dark .bg-violet-400,
html.dark .bg-purple-400,
html.dark .bg-indigo-400 {
background-color: #93C5FD !important;
}
html.dark .bg-violet-50,
html.dark .bg-violet-50\/40,
html.dark .bg-violet-50\/70,
html.dark .bg-violet-100,
html.dark .bg-violet-200,
html.dark .bg-purple-50,
html.dark .bg-purple-100,
html.dark .bg-indigo-100 {
background-color: rgba(129, 140, 248, 0.18) !important;
}
html.dark .text-violet-500,
html.dark .text-violet-600,
html.dark .text-violet-700,
html.dark .text-purple-600,
html.dark .text-purple-700,
html.dark .text-indigo-600,
html.dark .text-indigo-700 {
color: #93C5FD !important;
}
html.dark .bg-rose-50,
html.dark .bg-rose-100,
html.dark .bg-rose-500\/10,
html.dark .bg-red-50,
html.dark .bg-red-100 {
background-color: rgba(244, 63, 94, 0.18) !important;
}
html.dark .text-rose-500,
html.dark .text-rose-600,
html.dark .text-rose-700,
html.dark .text-red-500,
html.dark .text-red-600,
html.dark .text-red-700 {
color: #FDA4AF !important;
}
html.dark .bg-amber-50,
html.dark .bg-amber-100,
html.dark .bg-amber-500\/10,
html.dark .bg-yellow-50,
html.dark .bg-yellow-100,
html.dark .bg-orange-50,
html.dark .bg-orange-100 {
background-color: rgba(245, 158, 11, 0.18) !important;
}
html.dark .text-amber-500,
html.dark .text-amber-600,
html.dark .text-amber-700,
html.dark .text-amber-800,
html.dark .text-yellow-600,
html.dark .text-yellow-700,
html.dark .text-orange-600,
html.dark .text-orange-700 {
color: #FCD34D !important;
}
html.dark .bg-emerald-50,
html.dark .bg-emerald-100,
html.dark .bg-emerald-500\/10,
html.dark .bg-green-50,
html.dark .bg-green-100 {
background-color: rgba(16, 185, 129, 0.18) !important;
}
html.dark .text-emerald-500,
html.dark .text-emerald-600,
html.dark .text-emerald-700,
html.dark .text-green-500,
html.dark .text-green-600,
html.dark .text-green-700 {
color: #6EE7B7 !important;
}
html.dark .bg-blue-50,
html.dark .bg-blue-100,
html.dark .bg-sky-50,
html.dark .bg-cyan-50,
html.dark .bg-teal-50 {
background-color: rgba(14, 165, 233, 0.18) !important;
}
html.dark .text-blue-600,
html.dark .text-blue-700,
html.dark .text-sky-600,
html.dark .text-cyan-600,
html.dark .text-teal-600 {
color: #7DD3FC !important;
}
html.dark .hover\:bg-white:hover,
html.dark .hover\:bg-slate-50:hover,
html.dark .hover\:bg-slate-50\/50:hover,
html.dark .hover\:bg-slate-50\/60:hover,
html.dark .hover\:bg-slate-100:hover {
background-color: #1E293B !important;
}
html.dark .hover\:bg-violet-500:hover,
html.dark .hover\:bg-violet-600:hover,
html.dark .hover\:bg-violet-700:hover,
html.dark .hover\:bg-purple-700:hover,
html.dark .hover\:bg-indigo-100:hover {
background-color: #4338CA !important;
color: #FFFFFF !important;
}
html.dark .hover\:bg-violet-50:hover {
background-color: rgba(129, 140, 248, 0.22) !important;
}
html.dark .hover\:bg-amber-50:hover {
background-color: rgba(245, 158, 11, 0.22) !important;
}
html.dark .hover\:bg-rose-50:hover,
html.dark .hover\:bg-red-50:hover {
background-color: rgba(244, 63, 94, 0.22) !important;
}
html.dark .hover\:text-slate-600:hover,
html.dark .hover\:text-slate-700:hover,
html.dark .hover\:text-slate-800:hover,
html.dark .hover\:text-slate-900:hover {
color: #F8FAFC !important;
}
html.dark .hover\:text-violet-500:hover,
html.dark .hover\:text-violet-600:hover,
html.dark .hover\:text-violet-700:hover,
html.dark .hover\:text-violet-800:hover {
color: #93C5FD !important;
}
html.dark .hover\:text-amber-600:hover {
color: #FCD34D !important;
}
html.dark .hover\:text-rose-500:hover,
html.dark .hover\:text-rose-600:hover,
html.dark .hover\:text-red-600:hover {
color: #FDA4AF !important;
}
html.dark .focus\:ring-slate-400:focus,
html.dark .focus\:ring-slate-900:focus,
html.dark .focus\:ring-violet-600:focus,
html.dark .focus\:ring-red-500:focus {
--tw-ring-color: #93C5FD !important;
}
html.dark .shadow-sm {
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35) !important;
}
html.dark .shadow-lg,
html.dark .shadow-lg {
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.28) !important;
}
html.dark .flatpickr-calendar {
background: #111827;
border-color: #334155;
box-shadow: 0 18px 50px rgba(0, 0, 0, 0.35);
}
html.dark .flatpickr-months,
html.dark .flatpickr-weekdays,
html.dark .flatpickr-current-month,
html.dark .flatpickr-weekday,
html.dark .flatpickr-day {
color: #E2E8F0;
}
html.dark .flatpickr-day:hover,
html.dark .flatpickr-day:focus {
background: #1E293B;
border-color: #334155;
}
html.dark .flatpickr-day.selected,
html.dark .flatpickr-day.startRange,
html.dark .flatpickr-day.endRange {
background: var(--brand-primary);
border-color: var(--brand-primary);
color: #FFFFFF;
}
/* Taskify UI system */
.app-shell {
--app-sidebar-width: 18rem;
display: flex;
min-height: 100vh;
background: var(--app-bg);
color: var(--text-primary);
overflow: hidden;
}
.app-sidebar {
position: relative;
display: flex;
width: var(--app-sidebar-width);
min-height: 100vh;
flex-shrink: 0;
flex-direction: column;
overflow: hidden;
border-right: 1px solid var(--sidebar-border);
background: var(--sidebar-bg);
color: #FFFFFF;
}
.app-sidebar::before {
position: absolute;
inset: 0;
pointer-events: none;
content: "";
background: transparent;
}
.app-sidebar > * {
position: relative;
z-index: 1;
}
.app-sidebar-brand {
display: flex;
min-height: 4.75rem;
align-items: center;
gap: 0.75rem;
padding: 1rem 1.25rem;
}
.app-sidebar-logo {
display: inline-flex;
height: 2.4rem;
width: 2.4rem;
align-items: center;
justify-content: center;
border-radius: var(--radius-lg);
background: var(--brand-primary);
color: #FFFFFF;
box-shadow: 0 10px 28px rgba(37, 99, 235, 0.28);
}
.app-sidebar-title {
display: flex;
flex-direction: column;
line-height: 1.15;
}
.app-sidebar-title strong {
font-size: 1.1rem;
letter-spacing: 0;
}
.app-sidebar-title span {
margin-top: 0.15rem;
color: var(--sidebar-muted);
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.app-sidebar-user {
flex-shrink: 0;
border-top: 1px solid var(--sidebar-border);
padding: 0.875rem;
}
.app-main {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.app-topbar {
display: flex;
min-height: 4rem;
align-items: center;
justify-content: space-between;
gap: 1rem;
border-bottom: 1px solid var(--border);
background: color-mix(in srgb, var(--surface) 92%, transparent);
padding: 0 1.5rem;
backdrop-filter: blur(12px);
}
.app-topbar-title {
min-width: 0;
}
.app-topbar-title h1 {
margin: 0;
color: var(--text-primary);
font-size: 1.05rem;
font-weight: 750;
letter-spacing: 0;
}
.app-topbar-title p {
margin: 0.1rem 0 0;
color: var(--text-muted);
font-size: 0.78rem;
font-weight: 500;
}
.app-content {
flex: 1;
overflow-y: auto;
padding: clamp(1rem, 2vw, 2rem);
}
@media (min-width: 960px) {
.app-shell {
height: 100dvh;
min-height: 100dvh;
padding-left: var(--app-sidebar-width);
}
.app-shell .app-sidebar {
position: fixed;
inset: 0 auto 0 0;
height: 100dvh;
min-height: 100dvh;
transform: translateX(0) !important;
width: var(--app-sidebar-width) !important;
}
.app-main {
height: 100dvh;
min-height: 100dvh;
}
}
/* Tiered responsive scaling for laptops & smaller screens (e.g. 13.3" HP EliteBook G6) */
@media (min-width: 1366px) and (max-width: 1536px) {
:root {
font-size: 13.75px;
}
.app-shell {
--app-sidebar-width: 15.75rem;
}
.app-content {
padding: 1.25rem !important;
}
}
@media (min-width: 1150px) and (max-width: 1365px) {
:root {
font-size: 13px;
}
.app-shell {
--app-sidebar-width: 14.75rem;
}
.app-content {
padding: 1rem !important;
}
.app-topbar {
min-height: 3.5rem !important;
padding: 0 1.25rem !important;
}
.app-sidebar-brand {
min-height: 4rem !important;
padding: 0.75rem 1rem !important;
}
}
/* Compact scaling for 13.3" displays with 150% scaling or 960px-1149px viewports */
@media (min-width: 960px) and (max-width: 1149px) {
:root {
font-size: 12.25px;
}
.app-shell {
--app-sidebar-width: 13.75rem;
}
.app-content {
padding: 0.85rem !important;
}
.app-topbar {
min-height: 3.25rem !important;
padding: 0 1rem !important;
}
.app-topbar-title h1 {
font-size: 0.95rem !important;
}
.app-sidebar-brand {
min-height: 3.75rem !important;
padding: 0.65rem 0.85rem !important;
}
.app-sidebar-logo {
height: 2rem !important;
width: 2rem !important;
}
main td, main th {
padding-top: 0.45rem !important;
padding-bottom: 0.45rem !important;
}
}
.mobile-sidebar-toggle,
.mobile-sidebar-close {
display: none;
}
.sidebar-scrim {
display: none;
}
.control-button {
display: inline-flex;
height: 2.35rem;
min-width: 2.35rem;
align-items: center;
justify-content: center;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
background: var(--surface);
color: var(--text-muted);
box-shadow: var(--shadow-card);
transition: background-color 0.16s ease, border-color 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
}
.control-button:hover {
border-color: var(--border-strong);
background: var(--surface-muted);
color: var(--brand-primary);
}
.control-button:focus-visible {
outline: none;
box-shadow: 0 0 0 4px var(--focus-ring);
}
.surface-panel {
border: 1px solid var(--border);
border-radius: var(--radius-lg);
background: var(--surface);
box-shadow: var(--shadow-card);
}
.page-kicker {
color: var(--brand-primary);
font-size: 0.74rem;
font-weight: 750;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.text-balance {
text-wrap: balance;
}
main :is(input, select, textarea, .form-control, .form-select) {
border-color: var(--border) !important;
border-radius: var(--radius-lg) !important;
background-color: var(--surface) !important;
color: var(--text-primary) !important;
}
main :is(input, select, textarea, .form-control, .form-select):focus {
border-color: var(--brand-primary) !important;
outline: none !important;
box-shadow: 0 0 0 4px var(--focus-ring) !important;
}
main :is(input, textarea)::placeholder {
color: var(--text-soft) !important;
}
main table {
width: 100%;
border-collapse: separate;
border-spacing: 0;
}
main thead tr {
background: var(--surface-muted) !important;
}
main th {
color: var(--text-muted) !important;
white-space: nowrap;
}
main td {
vertical-align: middle;
}
main tbody tr {
transition: background-color 0.14s ease;
}
main tbody tr:hover {
background: var(--surface-muted) !important;
}
main .shadow-\[0_18px_50px_rgba\(15\,23\,42\,0\.08\)\],
main .shadow-\[0_18px_50px_rgba\(15\,23\,42\,0\.12\)\] {
box-shadow: var(--shadow-card) !important;
}
main .rounded-\[32px\],
main .rounded-\[28px\],
main .rounded-\[24px\] {
border-radius: var(--radius-lg) !important;
}
.flatpickr-calendar {
border-color: var(--border);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-popover);
}
html.dark a,
html.dark .btn-link,
html.dark .text-violet-500,
html.dark .text-violet-600,
html.dark .text-violet-700,
html.dark .text-purple-600,
html.dark .text-purple-700,
html.dark .text-indigo-600,
html.dark .text-indigo-700 {
color: var(--brand-primary) !important;
}
html.dark .bg-white,
html.dark .bg-card,
html.dark .bg-popover {
background-color: var(--surface) !important;
}
html.dark .bg-slate-50,
html.dark .bg-slate-50\/40,
html.dark .bg-slate-50\/50,
html.dark .bg-slate-50\/60,
html.dark .bg-slate-50\/70,
html.dark .bg-muted {
background-color: var(--surface-muted) !important;
}
html.dark .border-slate-100,
html.dark .border-slate-200,
html.dark .border-slate-300,
html.dark .border-border,
html.dark .divide-slate-100,
html.dark .divide-slate-200 {
border-color: var(--border) !important;
}
html.dark .text-slate-950,
html.dark .text-slate-900,
html.dark .text-slate-800,
html.dark .text-slate-700,
html.dark .text-foreground,
html.dark .text-card-foreground,
html.dark .text-popover-foreground {
color: var(--text-primary) !important;
}
html.dark .text-slate-600,
html.dark .text-slate-500,
html.dark .text-muted,
html.dark .text-muted-foreground {
color: var(--text-muted) !important;
}
html.dark .text-slate-400,
html.dark .text-slate-300 {
color: var(--text-soft) !important;
}
html.dark .btn-primary,
html.dark .bg-primary,
html.dark .bg-violet-500,
html.dark .bg-violet-600,
html.dark .bg-violet-700,
html.dark .bg-purple-500,
html.dark .bg-purple-600,
html.dark .bg-indigo-500,
html.dark .bg-indigo-600 {
background-color: var(--brand-primary) !important;
border-color: var(--brand-primary) !important;
color: #FFFFFF !important;
}
html.dark .hover\:bg-violet-600:hover,
html.dark .hover\:bg-violet-700:hover,
html.dark .hover\:bg-purple-700:hover,
html.dark .hover\:bg-indigo-100:hover {
background-color: var(--brand-primary-hover) !important;
color: #FFFFFF !important;
}
@media (max-width: 959px) {
.app-shell {
display: block;
min-height: 100vh;
overflow: auto;
padding-left: 0 !important;
}
.app-sidebar {
position: fixed;
inset: 0 auto 0 0;
z-index: 60;
width: min(18rem, calc(100vw - 3rem)) !important;
transform: translateX(-100%);
transition: transform 0.22s ease;
}
body.tts-sidebar-open .app-sidebar {
transform: translateX(0) !important;
}
.sidebar-scrim {
position: fixed;
inset: 0;
z-index: 50;
display: none;
border: 0;
background: rgba(15, 23, 42, 0.48);
}
body.tts-sidebar-open .sidebar-scrim {
display: block;
}
.mobile-sidebar-toggle,
.mobile-sidebar-close {
display: inline-flex !important;
}
.app-main {
min-height: 100vh;
}
.app-topbar {
min-height: 3.5rem;
padding: 0 1rem;
}
.app-content {
padding: 1rem !important;
}
.app-topbar-title p {
display: none;
}
}
@media (max-width: 640px) {
html,
body {
font-size: 14px;
}
.app-content {
padding: 0.875rem;
}
main table {
min-width: 760px;
}
}
/* ==========================================
UNIVERSAL DARK MODE OVERRIDES
========================================== */
html.dark,
html.dark body,
html.dark .app-shell,
html.dark .app-main,
html.dark .app-content {
background-color: #0B1120 !important;
color: #F8FAFC !important;
}
html.dark .bg-white,
html.dark .bg-card,
html.dark .bg-popover,
html.dark [class*="bg-white"] {
background-color: #111827 !important;
color: #F8FAFC !important;
}
html.dark .bg-slate-50,
html.dark .bg-slate-50\/40,
html.dark .bg-slate-50\/50,
html.dark .bg-slate-50\/60,
html.dark .bg-slate-50\/70,
html.dark .bg-slate-50\/95,
html.dark .bg-slate-100,
html.dark .bg-slate-100\/50,
html.dark .bg-muted {
background-color: #182235 !important;
color: #F8FAFC !important;
}
html.dark .bg-slate-200,
html.dark .bg-slate-300 {
background-color: #263449 !important;
}
html.dark .text-slate-950,
html.dark .text-slate-900,
html.dark .text-slate-800,
html.dark .text-slate-700,
html.dark .text-foreground,
html.dark .text-card-foreground,
html.dark .text-popover-foreground {
color: #F8FAFC !important;
}
html.dark .text-slate-600,
html.dark .text-slate-500,
html.dark .text-muted,
html.dark .text-muted-foreground {
color: #CBD5E1 !important;
}
html.dark .text-slate-400,
html.dark .text-slate-300 {
color: #94A3B8 !important;
}
html.dark .border-slate-100,
html.dark .border-slate-200,
html.dark .border-slate-300,
html.dark .border-border,
html.dark .divide-slate-100,
html.dark .divide-slate-200 {
border-color: #263449 !important;
}
html.dark .shadow-slate-200\/60,
html.dark .shadow-slate-200\/50,
html.dark .shadow-slate-200\/70,
html.dark .shadow-sm,
html.dark .shadow-md,
html.dark .shadow-lg {
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.45) !important;
}
html.dark svg line[stroke="#e2e8f0"],
html.dark svg line[stroke="#E2E8F0"] {
stroke: #263449 !important;
}
html.dark input,
html.dark select,
html.dark textarea,
html.dark .form-control,
html.dark .form-select {
background-color: #111827 !important;
color: #F8FAFC !important;
border-color: #263449 !important;
}
/* ==========================================
PROFESSIONAL UI REFRESH
========================================== */
body {
background: var(--app-bg);
}
::selection {
background: rgba(15, 118, 110, 0.18);
color: var(--text-primary);
}
.app-shell {
background: var(--app-bg);
}
.app-shell .app-sidebar {
background: var(--sidebar-bg);
}
.app-sidebar::before {
background: transparent;
}
.app-sidebar-logo {
background: #0F766E;
box-shadow: 0 12px 28px rgba(15, 118, 110, 0.24);
}
.app-topbar {
background: color-mix(in srgb, var(--surface) 94%, transparent);
}
.app-content {
background: transparent;
}
.control-button,
main button,
main a[class*="inline-flex"],
main .btn {
border-radius: var(--radius-lg) !important;
}
.control-button {
background: color-mix(in srgb, var(--surface) 96%, var(--brand-primary) 4%);
}
.btn-primary,
main .bg-violet-500,
main .bg-violet-600,
main .bg-violet-700,
main .bg-purple-500,
main .bg-purple-600,
main .bg-indigo-500,
main .bg-indigo-600,
main .bg-blue-600 {
background-color: #0F766E !important;
border-color: #0F766E !important;
color: #FFFFFF !important;
}
.btn-primary:hover,
main .hover\:bg-violet-500:hover,
main .hover\:bg-violet-600:hover,
main .hover\:bg-violet-700:hover,
main .hover\:bg-purple-700:hover,
main .hover\:bg-blue-600:hover,
main .hover\:bg-blue-700:hover {
background-color: #115E59 !important;
border-color: #115E59 !important;
color: #FFFFFF !important;
}
main .text-violet-500,
main .text-violet-600,
main .text-violet-700,
main .text-purple-600,
main .text-purple-700,
main .text-indigo-600,
main .text-indigo-700,
main .text-blue-600,
main .text-blue-700 {
color: #0F766E !important;
}
main .hover\:text-violet-500:hover,
main .hover\:text-violet-600:hover,
main .hover\:text-violet-700:hover,
main .hover\:text-violet-800:hover,
main .hover\:text-blue-600:hover,
main .hover\:text-blue-700:hover {
color: #115E59 !important;
}
main .bg-violet-50,
main .bg-violet-50\/10,
main .bg-violet-50\/40,
main .bg-violet-50\/60,
main .bg-violet-50\/70,
main .bg-violet-100,
main .bg-purple-50,
main .bg-purple-100,
main .bg-indigo-50,
main .bg-indigo-100,
main .bg-blue-50,
main .bg-blue-100 {
background-color: #E6F4F1 !important;
}
main .border-violet-100,
main .border-violet-200,
main .border-violet-300,
main .border-indigo-100,
main .border-indigo-200,
main .border-blue-100,
main .border-blue-200 {
border-color: #B7DAD4 !important;
}
main .focus\:ring-violet-100:focus,
main .focus\:ring-violet-500:focus,
main .focus\:ring-violet-600:focus,
main .focus\:ring-slate-900:focus {
--tw-ring-color: var(--focus-ring) !important;
}
main .focus\:border-violet-400:focus,
main .focus\:border-violet-600:focus {
border-color: var(--brand-primary) !important;
}
main .accent-violet-600,
html.dark main .accent-violet-600 {
accent-color: #0F766E !important;
}
main .bg-white,
main .bg-card,
main .bg-popover {
background-color: var(--surface) !important;
color: var(--text-primary) !important;
}
main .bg-slate-50,
main .bg-slate-50\/40,
main .bg-slate-50\/50,
main .bg-slate-50\/60,
main .bg-slate-50\/70,
main .bg-slate-50\/95,
main .bg-muted {
background-color: var(--surface-muted) !important;
}
main .border-slate-100,
main .border-slate-200,
main .border-slate-300,
main .border-border,
main .divide-slate-100,
main .divide-slate-200 {
border-color: var(--border) !important;
}
main .text-slate-950,
main .text-slate-900,
main .text-slate-800,
main .text-slate-700,
main .text-foreground,
main .text-card-foreground,
main .text-popover-foreground {
color: var(--text-primary) !important;
}
main .text-slate-600,
main .text-slate-500,
main .text-muted,
main .text-muted-foreground {
color: var(--text-muted) !important;
}
main .text-slate-400,
main .text-slate-300 {
color: var(--text-soft) !important;
}
main .shadow-sm,
main .shadow-md,
main .shadow-lg,
main .shadow-slate-200\/50,
main .shadow-slate-200\/60,
main .shadow-slate-200\/70 {
box-shadow: var(--shadow-card) !important;
}
main :is(.rounded-xl, .rounded-2xl, .rounded-3xl, .rounded-\[24px\], .rounded-\[28px\], .rounded-\[32px\]) {
border-radius: var(--radius-lg) !important;
}
main :is(table, .surface-panel),
main :is(.border-slate-200.bg-white, .border-slate-100.bg-white) {
box-shadow: var(--shadow-card);
}
main thead tr {
background: color-mix(in srgb, var(--surface-muted) 88%, var(--brand-primary) 12%) !important;
}
main th {
font-size: 0.72rem !important;
letter-spacing: 0.06em !important;
}
main tbody tr:hover {
background: color-mix(in srgb, var(--surface-muted) 84%, var(--brand-primary) 16%) !important;
}
main :is(input, select, textarea, .form-control, .form-select) {
min-height: 2.45rem;
}
main label {
color: var(--text-muted) !important;
font-weight: 650;
}
main [class*="bg-emerald-100"],
main [class*="bg-green-100"] {
background-color: var(--status-success-bg) !important;
color: var(--status-success-text) !important;
}
main [class*="bg-amber-100"],
main [class*="bg-yellow-100"],
main [class*="bg-orange-100"] {
background-color: var(--status-warning-bg) !important;
color: var(--status-warning-text) !important;
}
main [class*="bg-red-100"],
main [class*="bg-rose-100"] {
background-color: var(--status-danger-bg) !important;
color: var(--status-danger-text) !important;
}
main svg line[stroke="#e2e8f0"],
main svg line[stroke="#E2E8F0"] {
stroke: var(--border) !important;
}
main svg path[stroke="#2563eb"],
main svg path[stroke="#3b82f6"] {
stroke: var(--brand-primary) !important;
}
main svg circle[fill="#2563eb"],
main svg circle[fill="#3b82f6"] {
fill: var(--brand-primary) !important;
}
html.dark,
html.dark body,
html.dark .app-shell,
html.dark .app-main,
html.dark .app-content {
background-color: var(--app-bg) !important;
color: var(--text-primary) !important;
}
html.dark body {
background: var(--app-bg);
}
html.dark .app-shell {
background: var(--app-bg);
}
html.dark main .bg-white,
html.dark main .bg-card,
html.dark main .bg-popover,
html.dark main [class*="bg-white"] {
background-color: var(--surface) !important;
color: var(--text-primary) !important;
}
html.dark main .bg-slate-50,
html.dark main .bg-slate-50\/40,
html.dark main .bg-slate-50\/50,
html.dark main .bg-slate-50\/60,
html.dark main .bg-slate-50\/70,
html.dark main .bg-slate-50\/95,
html.dark main .bg-slate-100,
html.dark main .bg-slate-100\/50,
html.dark main .bg-muted {
background-color: var(--surface-muted) !important;
color: var(--text-primary) !important;
}
html.dark main .bg-slate-200,
html.dark main .bg-slate-300 {
background-color: #2E3B37 !important;
}
html.dark main .text-slate-950,
html.dark main .text-slate-900,
html.dark main .text-slate-800,
html.dark main .text-slate-700,
html.dark main .text-foreground,
html.dark main .text-card-foreground,
html.dark main .text-popover-foreground {
color: var(--text-primary) !important;
}
html.dark main .text-slate-600,
html.dark main .text-slate-500,
html.dark main .text-muted,
html.dark main .text-muted-foreground {
color: var(--text-muted) !important;
}
html.dark main .text-slate-400,
html.dark main .text-slate-300 {
color: var(--text-soft) !important;
}
html.dark main .border-slate-100,
html.dark main .border-slate-200,
html.dark main .border-slate-300,
html.dark main .border-border,
html.dark main .divide-slate-100,
html.dark main .divide-slate-200 {
border-color: var(--border) !important;
}
html.dark main .bg-violet-50,
html.dark main .bg-violet-50\/10,
html.dark main .bg-violet-50\/40,
html.dark main .bg-violet-50\/60,
html.dark main .bg-violet-50\/70,
html.dark main .bg-violet-100,
html.dark main .bg-purple-50,
html.dark main .bg-purple-100,
html.dark main .bg-indigo-50,
html.dark main .bg-indigo-100,
html.dark main .bg-blue-50,
html.dark main .bg-blue-100 {
background-color: rgba(94, 234, 212, 0.13) !important;
}
html.dark main .text-violet-500,
html.dark main .text-violet-600,
html.dark main .text-violet-700,
html.dark main .text-purple-600,
html.dark main .text-purple-700,
html.dark main .text-indigo-600,
html.dark main .text-indigo-700,
html.dark main .text-blue-600,
html.dark main .text-blue-700 {
color: var(--brand-primary) !important;
}
html.dark main .btn-primary,
html.dark main .bg-primary,
html.dark main .bg-violet-500,
html.dark main .bg-violet-600,
html.dark main .bg-violet-700,
html.dark main .bg-purple-500,
html.dark main .bg-purple-600,
html.dark main .bg-indigo-500,
html.dark main .bg-indigo-600,
html.dark main .bg-blue-600 {
background-color: #0F766E !important;
border-color: #0F766E !important;
color: #FFFFFF !important;
}
html.dark input,
html.dark select,
html.dark textarea,
html.dark .form-control,
html.dark .form-select {
background-color: var(--surface-raised) !important;
color: var(--text-primary) !important;
border-color: var(--border) !important;
}
/* ==========================================
SHELL + DASHBOARD QUALITY GUARD
Loaded after Tailwind so layout-critical rules always win.
========================================== */
:root {
--app-sidebar-width: 16.25rem;
--chart-primary: #0F766E;
--chart-secondary: #38BDF8;
--chart-success: #10B981;
--chart-warning: #B45309;
--chart-danger: #DC2626;
}
html,
body {
width: 100%;
min-width: 0;
overflow-x: hidden;
}
body.tts-sidebar-open {
overflow: auto;
}
.app-shell {
display: flex !important;
gap: 1rem !important;
min-width: 0 !important;
width: 100% !important;
background: var(--app-bg) !important;
}
.app-shell .app-sidebar {
position: sticky !important;
inset: 0 auto auto 0 !important;
z-index: 40 !important;
width: var(--app-sidebar-width) !important;
height: 100dvh !important;
min-height: 100dvh !important;
max-width: var(--app-sidebar-width) !important;
transform: translateX(0) !important;
background: var(--sidebar-bg) !important;
}
.app-main {
min-width: 0 !important;
width: 100% !important;
flex: 1 1 auto !important;
margin-left: 1rem !important;
}
.app-topbar {
position: sticky;
top: 0;
z-index: 30;
min-height: 4.1rem !important;
background: color-mix(in srgb, var(--surface) 96%, transparent) !important;
}
.app-topbar > div:last-child {
position: relative;
z-index: 45;
pointer-events: auto;
}
.app-topbar .control-button,
.app-topbar [data-theme-toggle] {
position: relative;
z-index: 46;
cursor: pointer;
pointer-events: auto !important;
}
.app-content {
width: 100% !important;
min-width: 0 !important;
padding: clamp(1.25rem, 1.8vw, 1.75rem) !important;
}
.mobile-sidebar-toggle,
.mobile-sidebar-close,
.sidebar-scrim {
display: none !important;
}
main > .space-y-8,
main > .space-y-6 {
max-width: 96rem;
margin-right: auto;
margin-left: auto;
}
main :is(.grid) {
min-width: 0;
}
main :is(.rounded-xl.border, .rounded-lg.border, .surface-panel) {
border-color: var(--border) !important;
}
main :is(.rounded-xl.border.border-slate-200.bg-white, .rounded-lg.border.border-slate-200.bg-white) {
background: var(--surface) !important;
}
main :is(h2, h3) {
letter-spacing: 0 !important;
}
main .page-kicker,
main .uppercase.tracking-\[0\.08em\],
main .uppercase.tracking-wider {
color: var(--brand-primary) !important;
}
main a,
main button {
touch-action: manipulation;
}
main button,
main a[class*="inline-flex"] {
min-height: 2.75rem;
}
main svg [stroke="#2563eb"],
main svg [stroke="#3b82f6"],
main svg [stroke="#06b6d4"] {
stroke: var(--chart-primary) !important;
}
main svg [fill="#2563eb"],
main svg [fill="#3b82f6"],
main svg [fill="#06b6d4"] {
fill: var(--chart-primary) !important;
}
main svg stop[stop-color="#2563eb"],
main svg stop[stop-color="#3b82f6"] {
stop-color: var(--chart-primary) !important;
}
main svg [stroke="#ef4444"],
main svg [fill="#ef4444"] {
stroke: var(--chart-danger) !important;
fill: var(--chart-danger) !important;
}
@media (min-width: 960px) {
body.tts-sidebar-open {
overflow: auto !important;
}
.app-shell {
height: 100dvh !important;
min-height: 100dvh !important;
padding-left: 0 !important;
overflow: hidden !important;
gap: 1rem !important;
}
.app-main {
height: 100dvh !important;
min-height: 100dvh !important;
}
.app-content {
overflow-y: auto !important;
}
}
@media (min-width: 1366px) and (max-width: 1536px) {
:root {
--app-sidebar-width: 15rem;
}
}
@media (min-width: 1150px) and (max-width: 1365px) {
:root {
--app-sidebar-width: 14.25rem;
}
}
@media (min-width: 960px) and (max-width: 1149px) {
:root {
--app-sidebar-width: 13.25rem;
}
}
@media (max-width: 959px) {
body.tts-sidebar-open {
overflow: hidden !important;
}
.app-shell {
display: block !important;
min-height: 100dvh !important;
padding-left: 0 !important;
overflow: auto !important;
gap: 0 !important;
}
.app-sidebar {
width: min(18rem, calc(100vw - 3rem)) !important;
transform: translateX(-100%) !important;
transition: transform 0.22s ease !important;
}
body.tts-sidebar-open .app-sidebar {
transform: translateX(0) !important;
}
.sidebar-scrim {
position: fixed !important;
inset: 0 !important;
z-index: 50 !important;
display: none !important;
border: 0 !important;
background: rgba(16, 22, 20, 0.54) !important;
}
body.tts-sidebar-open .sidebar-scrim {
display: block !important;
}
.mobile-sidebar-toggle,
.mobile-sidebar-close {
display: inline-flex !important;
}
.app-main {
min-height: 100dvh !important;
margin-left: 0 !important;
}
.app-topbar {
min-height: 3.6rem !important;
}
}