Modernize UI with glass morphism and refined styling

- Add backdrop-filter blur effects to sidebar, cards, and dropdowns
- Replace flat button colors with gradients
- Implement softer multi-layer shadows
- Add new CSS variables: --color-overlay, --color-card-outline, --color-focus-ring
- Modernize transitions with smoother easing curves
- Add loading spinner animation
- Add hexToRgbString() for --color-accent-rgb variable

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-15 16:45:49 +01:00
parent 41c41adb98
commit 04a0fe4b27
14 changed files with 361 additions and 132 deletions

View File

@@ -25,6 +25,19 @@
/* Subtle border */
}
@supports (color: color-mix(in srgb, black, transparent)) {
.sidebar {
background: color-mix(in srgb, var(--color-bg-sidebar) 88%, transparent);
}
/* Avoid backdrop-filter on collapsed sidebar: it can break fixed-position dropdowns */
.sidebar:not(.collapsed),
.sidebar.dynamic.collapsed.expanded-force,
.sidebar.open {
backdrop-filter: blur(18px) saturate(1.15);
}
}
.sidebar.clickable {
cursor: pointer;
}
@@ -204,7 +217,7 @@
.sidebar-header {
padding: 1rem;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
border-bottom: 1px solid var(--color-sidebar-border);
height: 70px;
display: flex;
align-items: center;
@@ -313,7 +326,7 @@
.nav-section-bottom {
margin-top: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid var(--color-sidebar-border);
}
.nav-section-title {
@@ -350,8 +363,12 @@
/* Ensure no gap affects centering */
}
.sidebar.collapsed .nav-item.active::before {
display: none;
}
.nav-item:hover {
background: rgba(255, 255, 255, 0.1);
background: rgba(var(--color-accent-rgb), 0.10);
color: var(--color-text-sidebar) !important;
}
@@ -361,25 +378,32 @@
}
.sidebar:not(.collapsed) .nav-item:hover {
transform: translateX(4px);
transform: translateX(2px);
}
.nav-item.active {
background: var(--color-accent);
/* Use accent color for active state */
font-weight: 600;
color: white !important;
box-shadow: var(--shadow-md);
background: rgba(var(--color-accent-rgb), 0.16);
border: 1px solid rgba(var(--color-accent-rgb), 0.22);
font-weight: 650;
color: var(--color-text-sidebar) !important;
box-shadow: none;
}
.nav-item.active .nav-icon,
.nav-item.active .nav-label {
color: white !important;
color: var(--color-text-sidebar) !important;
}
.nav-item.active::before {
display: none;
/* Remove the side bar indicator */
content: '';
position: absolute;
left: 8px;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 58%;
border-radius: 999px;
background: var(--color-accent);
}
.nav-icon {
@@ -400,7 +424,7 @@
.sidebar-footer {
padding: 0.75rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
border-top: 1px solid var(--color-sidebar-border);
flex-shrink: 0;
display: flex;
flex-direction: column;
@@ -423,7 +447,7 @@
gap: 0.75rem;
padding: 0.75rem;
background: transparent;
border: none;
border: 1px solid transparent;
border-radius: var(--radius-md);
color: var(--color-text-sidebar);
cursor: pointer;
@@ -434,7 +458,8 @@
}
.view-mode-toggle:hover {
background: rgba(255, 255, 255, 0.1);
background: rgba(var(--color-accent-rgb), 0.10);
border-color: rgba(var(--color-accent-rgb), 0.18);
color: var(--color-text-sidebar) !important;
}
@@ -450,13 +475,13 @@
}
.view-mode-toggle.user-mode {
background: rgba(var(--color-accent-rgb), 0.2);
border-color: rgba(var(--color-accent-rgb), 0.3);
background: rgba(var(--color-accent-rgb), 0.16);
border-color: rgba(var(--color-accent-rgb), 0.22);
}
.view-mode-toggle.user-mode:hover {
background: rgba(var(--color-accent-rgb), 0.3);
border-color: rgba(var(--color-accent-rgb), 0.4);
background: rgba(var(--color-accent-rgb), 0.20);
border-color: rgba(var(--color-accent-rgb), 0.28);
}
.sidebar.collapsed .view-mode-toggle {
@@ -468,7 +493,8 @@
.user-info-compact {
padding: 0.5rem;
background: rgba(255, 255, 255, 0.1);
background: rgba(255, 255, 255, 0.06);
border: 1px solid var(--color-sidebar-border);
border-radius: var(--radius-md);
margin: 0;
transition: padding 0.3s ease;
@@ -516,7 +542,7 @@
margin: 0;
font-size: 0.85rem;
font-weight: 700;
background: rgba(255, 255, 255, 0.3);
background: rgba(var(--color-accent-rgb), 0.25);
border-radius: 50%;
flex-shrink: 0;
color: var(--color-text-sidebar);
@@ -669,10 +695,8 @@
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.3);
/* Lighter overlay */
backdrop-filter: blur(2px);
/* Blur the content behind */
background: var(--color-overlay);
backdrop-filter: blur(6px);
z-index: 1000;
visibility: hidden;
opacity: 0;
@@ -729,7 +753,7 @@
.user-menu-trigger:hover,
.user-menu-trigger.active {
background: rgba(255, 255, 255, 0.1);
background: rgba(var(--color-accent-rgb), 0.10);
}
.sidebar.dynamic.collapsed .user-menu-trigger:hover,
@@ -751,7 +775,7 @@
}
.sidebar.dynamic.collapsed .user-menu-trigger .user-info-compact:hover {
background: rgba(255, 255, 255, 0.1);
background: rgba(var(--color-accent-rgb), 0.10);
}
.user-menu-trigger .chevron {
@@ -773,14 +797,20 @@
transform: translateX(-50%);
transform-origin: bottom center;
background: var(--color-bg-card);
border: 1px solid var(--color-border);
border: 1px solid var(--color-card-outline);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-xl);
z-index: 1100;
overflow: hidden;
animation: slideUpFade 0.25s cubic-bezier(0.4, 0, 0.2, 1);
width: 244px;
border-color: var(--color-border);
}
@supports (color: color-mix(in srgb, black, transparent)) {
.user-menu-dropdown {
background: color-mix(in srgb, var(--color-bg-card) 86%, transparent);
backdrop-filter: blur(16px) saturate(1.15);
}
}
.sidebar.collapsed .user-menu-dropdown {
@@ -842,8 +872,8 @@
font-size: 0.85rem;
font-weight: 500;
white-space: nowrap;
box-shadow: var(--shadow-lg);
border: 1px solid var(--color-border);
box-shadow: var(--shadow-md);
border: 1px solid var(--color-card-outline);
z-index: 1100;
pointer-events: none;
animation: tooltipFadeIn 0.2s ease forwards;
@@ -857,7 +887,7 @@
transform: translateY(-50%);
border-width: 5px 5px 5px 0;
border-style: solid;
border-color: transparent var(--color-border) transparent transparent;
border-color: transparent var(--color-card-outline) transparent transparent;
}
.sidebar-tooltip::after {
@@ -956,7 +986,7 @@
}
.user-menu-item:hover {
background: var(--color-bg-elevated);
background: rgba(var(--color-accent-rgb), 0.08);
color: var(--color-accent);
}
@@ -1032,4 +1062,4 @@
[data-theme='dark'][data-accent='auto'] .nav-item.active .nav-icon,
[data-theme='dark'][data-accent='auto'] .nav-item.active .nav-label {
color: #111827 !important;
}
}