diff --git a/SIDEBAR_DESIGN_REVIEW.md b/SIDEBAR_DESIGN_REVIEW.md deleted file mode 100644 index d477892..0000000 --- a/SIDEBAR_DESIGN_REVIEW.md +++ /dev/null @@ -1,320 +0,0 @@ -# Comprehensive Sidebar Design Review - OTS Signage Theme - -## Executive Summary -The sidebar is well-structured with a modern dark-mode design, but has several areas for refinement: -- **Padding**: Generally good, but can be more consistent -- **Icon Arrangement**: Icons are properly centered and sized, but scaling between states could be improved -- **Overall Style**: Cohesive and modern, with good dark mode aesthetics - ---- - -## 1. SIDEBAR DIMENSIONS & STRUCTURE - -### CSS Variables (in `override.css`): -```css ---ots-sidebar-width: 256px /* Full width */ ---ots-sidebar-collapsed-width: 64px /* Collapsed width */ ---ots-sidebar-header-height: 64px /* Header section */ ---ots-sidebar-item-height: 44px /* Nav item height */ ---ots-sidebar-item-radius: 10px /* Border radius */ ---ots-sidebar-item-padding-x: 12px /* Horizontal padding */ -``` - -### Layout Analysis: -- **Full Width**: 256px (reasonable for desktop, matches common patterns) -- **Collapsed Width**: 64px (good for icon-only display) -- **Responsive Break**: Changes to overlay at 768px (mobile-first, good) - -**Issue #1**: When collapsed, icons still have adequate space (20px icon + padding), but text labels are 100% hidden. Consider adding a tooltip system for discoverability. - ---- - -## 2. PADDING ANALYSIS - -### Sidebar Header (`.sidebar-header`) -```css -padding: 20px 16px; /* Vertical: 20px | Horizontal: 16px */ -``` -- **Assessment**: ✅ Good - balanced and symmetrical -- **Component**: Contains logo (32px icon) + brand text + toggle button -- **Vertical Alignment**: Properly centered with `align-items: center` - -### Sidebar Content (`.sidebar-content`) -```css -padding: 12px 0; /* Vertical: 12px | Horizontal: 0 */ -``` -- **Assessment**: ⚠️ Inconsistent - no horizontal padding here -- **Issue**: Padding is applied at the list item level instead (see nav items) - -### Sidebar Navigation (`.sidebar-nav`) -```css -padding: 72px 0 120px; /* Top: 72px | Bottom: 120px | Sides: 0 */ -``` -- **Assessment**: ⚠️ **PROBLEM AREA** - padding is excessive for top/bottom - - 72px top padding assumes a fixed header height, could be dynamic - - 120px bottom padding creates large blank space (mobile unfriendly) - - No horizontal padding means nav items extend to edge - -### Navigation Items (`.ots-sidebar li.sidebar-list > a`) -```css -padding: 6px 10px; /* Item content padding */ -margin: 3px 10px; /* Outer margin/spacing */ -border-radius: 12px; -min-height: 40px; -``` -- **Assessment**: ⚠️ Mixed padding/margin approach - - **Inner padding (6px 10px)**: Good for text breathing room - - **Outer margin (3px 10px)**: Creates 10px left/right space from sidebar edge - - **Min-height (40px)**: Good touch target size - -**Recommendation**: The left margin (10px) combined with border-radius (12px) creates a nice inset look. Could be intentional and good. - ---- - -## 3. ICON ARRANGEMENT - -### Icon Container (`.ots-nav-icon`) -```css -width: 24px; -height: 24px; -display: flex; -align-items: center; -justify-content: center; -font-size: 16px; -color: currentColor; -justify-self: center; -``` -- **Assessment**: ✅ Excellent - - Square container with centered content - - `justify-self: center` ensures centering in CSS Grid layout - - `color: currentColor` inherits link color for active/hover states - -### Nav Item Grid Layout -```css -display: grid; -grid-template-columns: 20px 1fr; /* Icon: 20px fixed | Text: flex */ -align-items: center; -column-gap: 12px; -``` -- **Assessment**: ✅ Good grid-based approach - - Consistent 12px gap between icon and text - - Icon column is tight (20px), text is flexible - - **Issue**: 20px icon container is narrower than 24px icon element - could cause slight misalignment - -**Recommendation**: Change to `grid-template-columns: 24px 1fr` to match the icon container size. - -### Active Item Styling -```css -.ots-sidebar li.sidebar-list.active > a { - color: #0b1221; /* Dark text on light bg */ - background-color: #ffffff; - font-weight: 600; - box-shadow: 0 8px 18px rgba(15, 23, 42, 0.25); -} -``` -- **Assessment**: ✅ Strong visual feedback - - High contrast (white background + dark text) - - Shadow adds depth - - Icon inherits dark color via `currentColor` - ---- - -## 4. OVERALL STYLE & DESIGN CONSISTENCY - -### Color Palette (Dark Mode) -```css ---ots-sidebar-bg: #08132a; /* Very dark blue */ ---ots-sidebar-link: #f9fbff; /* Nearly white text */ ---ots-sidebar-link-hover-bg: rgba(255,255,255,0.08); ---ots-sidebar-active-bg: rgba(255,255,255,0.06); ---ots-sidebar-active-text: #ffffff; ---ots-sidebar-muted-text: #8ea4c7; /* Muted section headers */ -``` -- **Assessment**: ✅ Excellent contrast and hierarchy - - Background: Deep navy (#08132a) - - Primary text: Nearly white (#f9fbff) - - Hover: 8% white overlay (subtle) - - Active: 6% white overlay (subtle) - - Section headers: Medium blue (#8ea4c7) - - **Accessibility**: WCAG AA compliant (>4.5:1 contrast) - -### Section Headers (`.sidebar-title`) -```css -display: block; -font-size: 10px; -font-weight: 700; -text-transform: uppercase; -color: #8ea4c7; -letter-spacing: 0.12em; -padding: 12px 14px 4px; -``` -- **Assessment**: ✅ Good hierarchy - - Small, uppercase, muted color clearly distinguishes from regular nav items - - Letter spacing adds visual interest - - Adequate padding separates sections - -### Sidebar Footer (`.sidebar-footer`) -```css -border-top: 1px solid var(--color-border); -padding: 16px; -background-color: rgba(59, 130, 246, 0.05); /* Slight blue tint */ -``` -- **Assessment**: ✅ Good - - Separated with border - - Subtle background color differentiates from main nav - - 16px padding consistent with other components - ---- - -## 5. RESPONSIVE BEHAVIOR - -### Mobile Override (@media max-width: 768px) -```css -.ots-sidebar { - transform: translateX(-100%); - transition: transform var(--transition-base); - width: 280px; -} -.ots-sidebar.active { - transform: translateX(0); - box-shadow: 2px 0 8px rgba(0, 0, 0, 0.3); -} -.ots-main { - margin-left: 0; -} -``` -- **Assessment**: ✅ Good mobile experience - - Slides in from left (drawer pattern) - - Shadow adds depth when open - - Content isn't pushed aside (overlay instead) - - **Issue**: Sidebar width changes from 256px → 280px on mobile (should be 280px, maybe even narrower for mobile) - ---- - -## 6. COLLAPSED STATE STYLING - -### Collapsed Class -```css -.ots-sidebar.collapsed { - /* No explicit width override - uses CSS variable */ -} -``` -- **Assessment**: ⚠️ Lacks dedicated styling - - When `.collapsed` is added, only width changes (via CSS variable) - - No visual indicator (badge, animation) that it's collapsed - - Icon-only display works but lacks affordance - -### Collapsed Item Styling (`.sidebar-collapsed-item-bg`) -```css ---ots-sidebar-collapsed-item-bg: rgba(255, 255, 255, 0.08); ---ots-sidebar-collapsed-item-hover-bg: rgba(255, 255, 255, 0.16); -``` -- **Assessment**: ⚠️ Variables defined but not actively used in CSS rules - - These variables exist but I don't see them applied to `.collapsed` state styling - - **Action Item**: Verify if collapsed items have proper styling - ---- - -## 7. KEY ISSUES & RECOMMENDATIONS - -### 🔴 HIGH PRIORITY - -1. **Icon/Grid Mismatch** - - Icon container: 24px, but grid column: 20px - - **Fix**: Change `grid-template-columns: 20px 1fr` → `grid-template-columns: 24px 1fr` - -2. **Excessive Nav Padding** - - `.sidebar-nav { padding: 72px 0 120px }` is too much - - **Fix**: Use dynamic sizing based on header height (JavaScript or CSS custom property) - - **Suggestion**: `padding: var(--ots-sidebar-header-height) 0 60px` (60px is enough for footer breathing room) - -3. **Collapsed State Styling** - - Collapsed items have CSS variables defined but not used - - **Fix**: Add active rules like: - ```css - .ots-sidebar.collapsed li.sidebar-list.active > a { - background-color: rgba(255, 255, 255, 0.12); - } - ``` - -### 🟡 MEDIUM PRIORITY - -4. **Icon Discoverability When Collapsed** - - No tooltips or labels appear when sidebar is collapsed - - **Suggestion**: Add `title` attributes to nav items or implement CSS tooltips - -5. **Sidebar Header Button Spacing** - - Header has "toggle" button but spacing could be tighter on mobile - - **Suggestion**: When collapsed, header could be more compact - -6. **Mobile Width Inconsistency** - - Sidebar is 256px full-width but 280px on mobile (why wider?) - - **Suggestion**: Keep consistent at 256px or make it responsive (e.g., 90vw max 280px on small phones) - -### 🟢 LOW PRIORITY - -7. **Brand Icon & Text** - - Logo + text look good but could use more breathing room - - **Current**: `gap: 12px` - consider `gap: 16px` for more visual separation - ---- - -## 8. VISUAL SPACING SUMMARY - -| Component | Padding | Margin | Assessment | -|-----------|---------|--------|------------| -| Header | 20px V, 16px H | — | ✅ Good | -| Content Wrapper | 12px V, 0 H | — | ⚠️ Inconsistent | -| Nav List | 72px T, 120px B | — | 🔴 Excessive | -| Nav Items | 6px V, 10px H | 3px V, 10px H | ✅ Good | -| Section Headers | 12px T, 14px H | — | ✅ Good | -| Footer | 16px | — | ✅ Consistent | - ---- - -## 9. ICON SIZING CONSISTENCY - -| Element | Width | Height | Font Size | Usage | -|---------|-------|--------|-----------|-------| -| Nav Icon | 24px | 24px | 16px | Primary nav items | -| Brand Icon | 32px | 32px | 24px | Logo in header | -| Topbar Icon | 20px | 20px | 16px | Topbar controls | - -**Assessment**: ✅ Good hierarchy and clarity - ---- - -## 10. RECOMMENDATIONS FOR NEXT PHASE - -1. ✅ Fix grid column width mismatch (20px → 24px) -2. ✅ Refactor `.sidebar-nav` padding (use CSS variables or dynamic) -3. ✅ Add collapsed state active item styling -4. ✅ Add `title` attributes to nav items for tooltip support -5. ⚠️ Consider adding a visual "collapse indicator" (e.g., chevron or light pulsing border) -6. ⚠️ Standardize mobile sidebar width -7. ⚠️ Add more breathing room in header (gap: 16px instead of 12px for brand icon) - ---- - -## Summary - -**Overall Grade: B+ (85/100)** - -### Strengths: -- ✅ Modern, cohesive dark-mode aesthetic -- ✅ Good color contrast and accessibility -- ✅ Proper icon sizing and centering -- ✅ Responsive mobile overlay pattern -- ✅ Clear visual hierarchy (headers, active states, hover) - -### Weaknesses: -- ⚠️ Excessive bottom padding in nav list -- ⚠️ Grid icon column width mismatch -- ⚠️ Lacking visual affordance when collapsed -- ⚠️ Icon discoverability issues - -### Quick Wins (implement first): -1. Change `grid-template-columns: 20px 1fr` → `24px 1fr` -2. Change `.sidebar-nav padding: 72px 0 120px` → `64px 0 60px` -3. Add collapsed state styling for active items - diff --git a/custom/otssignange/css/override-dark.css b/custom/otssignange/css/override-dark.css index 22e4ae5..f9e158b 100644 --- a/custom/otssignange/css/override-dark.css +++ b/custom/otssignange/css/override-dark.css @@ -485,7 +485,7 @@ html::before, html::after, body::before, body::after, #page-wrapper::before, #pa } /* Defensive: override any explicit white panel backgrounds that leak outside their container */ -.card, .panel, .panel-body, .dashboard-card, .ots-sidebar li.sidebar-list.active > a { +.card, .panel, .panel-body, .dashboard-card, .content-card, .ots-sidebar li.sidebar-list.active > a { background-color: var(--color-surface) !important; color: var(--color-text-primary) !important; } @@ -1341,7 +1341,7 @@ body.login-page *::after { /* EXTRA DEFENSIVE: ensure no white background shows through on long pages */ -html, body, #page-wrapper, .ots-shell, .ots-main, #content-wrapper, .content-wrapper, .ots-content, .page-content, .container, .container-fluid, .dashboard-page, .dashboard, .dashboard-card, .page { +html, body, #page-wrapper, .ots-shell, .ots-main, #content-wrapper, .content-wrapper, .ots-content, .page-content, .container, .container-fluid, .dashboard-page, .dashboard, .dashboard-card, .content-card, .page { background-color: var(--color-background) !important; background-image: none !important; background-repeat: no-repeat !important; diff --git a/custom/otssignange/css/override.css b/custom/otssignange/css/override.css index 2bbda53..97e3cbb 100644 --- a/custom/otssignange/css/override.css +++ b/custom/otssignange/css/override.css @@ -438,7 +438,8 @@ body.ots-light-mode .ots-topbar .nav-link:hover { color: #2563eb; } -body.ots-light-mode .dashboard-card { +body.ots-light-mode .dashboard-card, +body.ots-light-mode .content-card { background: linear-gradient(180deg, rgba(255, 255, 255, 0.95), rgba(241, 245, 249, 0.95)); border-color: #e2e8f0; } @@ -480,6 +481,7 @@ html, body, #page-wrapper, .ots-main, .ots-content, .page-content { .ots-topbar, .ots-footer, .dashboard-card, +.content-card, .dropdown-menu, .dropdown-right, .modal-content { @@ -3772,16 +3774,20 @@ body.ots-sidebar-open .ots-topbar { DASHBOARD PAGE ============================================================================ */ -.dashboard-card { +.dashboard-card, +.content-card { background: linear-gradient(180deg, rgba(30, 41, 59, 0.92), rgba(15, 23, 42, 0.92)); border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 16px; box-shadow: 0 18px 40px rgba(8, 15, 30, 0.35); backdrop-filter: blur(6px); - transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base); overflow: hidden; } +.dashboard-card { + transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base); +} + .dashboard-card:hover { transform: translateY(-2px); box-shadow: 0 22px 50px rgba(8, 15, 30, 0.45); @@ -3789,7 +3795,9 @@ body.ots-sidebar-open .ots-topbar { } .dashboard-card .panel-header, -.dashboard-card .widget-title { +.dashboard-card .widget-title, +.content-card .panel-header, +.content-card .widget-title { background: linear-gradient(90deg, rgba(59, 130, 246, 0.16), rgba(99, 102, 241, 0.12)); border-bottom: 1px solid rgba(148, 163, 184, 0.2); padding: 18px 20px; @@ -3799,13 +3807,19 @@ body.ots-sidebar-open .ots-topbar { .dashboard-card .panel-header h3, .dashboard-card .widget-title h3, .dashboard-card .panel-header h4, -.dashboard-card .widget-title h4 { +.dashboard-card .widget-title h4, +.content-card .panel-header h3, +.content-card .widget-title h3, +.content-card .panel-header h4, +.content-card .widget-title h4 { color: var(--color-text-primary); font-weight: 700; } .dashboard-card .panel-body, -.dashboard-card .widget-body { +.dashboard-card .widget-body, +.content-card .panel-body, +.content-card .widget-body { padding: 20px; min-width: 0; width: 100%; @@ -4320,7 +4334,8 @@ body.ots-sidebar-open .ots-topbar { .panel.panel-white, .panel.box, .widget, -.dashboard-card { +.dashboard-card, +.content-card { background-color: var(--color-surface) !important; color: var(--color-text-primary) !important; border: 1px solid var(--color-border) !important; @@ -6809,6 +6824,17 @@ body.ots-light-mode .ots-displays-page #datatable-container .XiboData table.data will-change: auto !important; } +/* Content cards are static – no hover animation */ +.content-card { + transition: none !important; +} + +.content-card:hover { + transform: none !important; + box-shadow: 0 18px 40px rgba(8, 15, 30, 0.35) !important; + border-color: rgba(148, 163, 184, 0.18) !important; +} + /* Ensure the very bottom of the page follows the theme variables (light/dark) by forcing html/body and shell containers to use the variable-driven background. This prevents residual dark bars under the footer. */ diff --git a/custom/otssignange/views/applications-page.twig b/custom/otssignange/views/applications-page.twig index caf3df9..59f6fe8 100644 --- a/custom/otssignange/views/applications-page.twig +++ b/custom/otssignange/views/applications-page.twig @@ -18,10 +18,10 @@
{% trans "Manage API applications and connectors." %}
-