+
{/* Mobile header */}
-
+
UMBRA
-
+
diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx
index 6d826aa..f7312b1 100644
--- a/frontend/src/components/ui/button.tsx
+++ b/frontend/src/components/ui/button.tsx
@@ -9,7 +9,7 @@ const buttonVariants = cva(
variant: {
default: 'bg-accent text-accent-foreground hover:bg-accent/90',
destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',
- outline: 'border border-input bg-background hover:bg-accent/10 hover:text-accent',
+ outline: 'border border-input bg-transparent hover:bg-accent/10 hover:text-accent',
secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',
ghost: 'hover:bg-accent/10 hover:text-accent',
link: 'text-accent underline-offset-4 hover:underline',
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 93454d8..83ce23f 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -6,10 +6,10 @@
:root {
--background: 0 0% 3.9%;
--foreground: 0 0% 98%;
- --card: 0 0% 5%;
+ --card: 0 0% 8%;
--card-foreground: 0 0% 98%;
- --card-elevated: 0 0% 7%;
- --popover: 0 0% 5%;
+ --card-elevated: 0 0% 11%;
+ --popover: 0 0% 8%;
--popover-foreground: 0 0% 98%;
--primary: var(--accent-h) var(--accent-s) var(--accent-l);
--primary-foreground: 0 0% 98%;
@@ -93,8 +93,8 @@
--fc-event-bg-color: hsl(var(--accent-color));
--fc-event-border-color: hsl(var(--accent-color));
--fc-event-text-color: hsl(0 0% 98%);
- --fc-page-bg-color: hsl(0 0% 3.9%);
- --fc-neutral-bg-color: hsl(0 0% 5%);
+ --fc-page-bg-color: transparent;
+ --fc-neutral-bg-color: hsl(0 0% 8% / 0.65);
--fc-neutral-text-color: hsl(0 0% 98%);
--fc-list-event-hover-bg-color: hsl(0 0% 10%);
--fc-today-bg-color: hsl(var(--accent-color) / 0.08);
@@ -144,7 +144,7 @@
}
.fc .fc-col-header-cell {
- background-color: hsl(0 0% 5%);
+ background-color: hsl(0 0% 8% / 0.65);
border-color: var(--fc-border-color);
}
@@ -195,7 +195,9 @@
/* ── FullCalendar "+more" popover fixes ── */
.fc .fc-more-popover {
- background-color: hsl(0 0% 5%);
+ background-color: hsl(0 0% 8% / 0.85);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
border-color: hsl(0 0% 14.9%);
border-radius: 0.5rem;
min-width: 220px;
@@ -203,7 +205,7 @@
}
.fc .fc-more-popover .fc-popover-header {
- background-color: hsl(0 0% 7%);
+ background-color: hsl(0 0% 11% / 0.8);
color: hsl(0 0% 98%);
padding: 8px 12px;
border-radius: 0.5rem 0.5rem 0 0;
@@ -455,6 +457,25 @@ form[data-submitted] input:invalid + button {
.animate-slide-in-row { animation: slide-in-row 250ms ease-out both; }
.animate-content-reveal { animation: content-reveal 400ms ease-out both; }
+/* ── Dashboard ambient layers ── */
+
+/* Glassmorphism — cards become semi-transparent to let ambient show through */
+.ambient-glass .bg-card {
+ background-color: hsl(0 0% 8% / 0.65) !important;
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+}
+
+/* Card breathing glow — data-aware "alive" pulse for urgent cards */
+@keyframes card-breathe {
+ 0%, 100% { box-shadow: 0 0 0 0 hsl(var(--accent-color) / 0.05); }
+ 50% { box-shadow: 0 0 16px 2px hsl(var(--accent-color) / 0.10); }
+}
+
+.animate-card-breathe {
+ animation: card-breathe 4s ease-in-out infinite;
+}
+
/* Respect reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {