Some checks failed
Build and Deploy LittleShop / Build TeleBot Docker Image (push) Failing after 11s
Build and Deploy LittleShop / Build LittleShop Docker Image (push) Failing after 15s
Build and Deploy LittleShop / Deploy to Production VPS (Manual Only) (push) Has been skipped
Build and Deploy LittleShop / Deploy to Pre-Production (CT109) (push) Has been skipped
Major Feature Additions: - Customer management: Full CRUD with data export and privacy compliance - Payment management: Centralized payment tracking and administration - Push notification subscriptions: Manage and track web push subscriptions Security Enhancements: - IP whitelist middleware for administrative endpoints - Data retention service with configurable policies - Enhanced push notification security documentation - Security fixes progress tracking (2025-11-14) UI/UX Improvements: - Enhanced navigation with improved mobile responsiveness - Updated admin dashboard with order status counts - Improved product CRUD forms - New customer and payment management interfaces Backend Improvements: - Extended customer service with data export capabilities - Enhanced order service with status count queries - Improved crypto payment service with better error handling - Updated validators and configuration Documentation: - DEPLOYMENT_NGINX_GUIDE.md: Nginx deployment instructions - IP_STORAGE_ANALYSIS.md: IP storage security analysis - PUSH_NOTIFICATION_SECURITY.md: Push notification security guide - UI_UX_IMPROVEMENT_PLAN.md: Planned UI/UX enhancements - UI_UX_IMPROVEMENTS_COMPLETED.md: Completed improvements Cleanup: - Removed temporary database WAL files - Removed stale commit message file 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
313 lines
6.5 KiB
CSS
313 lines
6.5 KiB
CSS
/*
|
||
* Enhanced Navigation Styles for TeleShop Admin
|
||
* Improves dropdown menus and active state highlighting
|
||
*/
|
||
|
||
/* ========================================
|
||
NAVIGATION BAR
|
||
======================================== */
|
||
|
||
/* Modern Navbar Styling */
|
||
.navbar {
|
||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
|
||
border-bottom: 1px solid #e5e7eb;
|
||
}
|
||
|
||
.navbar-brand {
|
||
font-weight: 700;
|
||
font-size: 1.25rem;
|
||
color: #2563eb !important;
|
||
transition: all 0.2s ease;
|
||
}
|
||
|
||
.navbar-brand:hover {
|
||
transform: scale(1.05);
|
||
}
|
||
|
||
.navbar-brand i {
|
||
margin-right: 0.5rem;
|
||
}
|
||
|
||
/* ========================================
|
||
NAVIGATION LINKS
|
||
======================================== */
|
||
|
||
.nav-link {
|
||
font-weight: 500;
|
||
color: #4b5563 !important;
|
||
transition: all 0.2s ease;
|
||
border-radius: 0.375rem;
|
||
margin: 0 0.25rem;
|
||
padding: 0.5rem 1rem !important;
|
||
}
|
||
|
||
.nav-link:hover {
|
||
color: #2563eb !important;
|
||
background-color: #eff6ff;
|
||
}
|
||
|
||
.nav-link.active {
|
||
color: #2563eb !important;
|
||
background-color: #dbeafe;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.nav-link i {
|
||
margin-right: 0.5rem;
|
||
font-size: 0.875rem;
|
||
}
|
||
|
||
/* ========================================
|
||
DROPDOWN MENUS
|
||
======================================== */
|
||
|
||
.dropdown-menu {
|
||
border: 1px solid #e5e7eb;
|
||
border-radius: 0.5rem;
|
||
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||
0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||
padding: 0.5rem;
|
||
min-width: 220px;
|
||
margin-top: 0.5rem;
|
||
}
|
||
|
||
.dropdown-item {
|
||
border-radius: 0.375rem;
|
||
padding: 0.625rem 1rem;
|
||
font-weight: 500;
|
||
color: #4b5563;
|
||
transition: all 0.15s ease;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.dropdown-item i {
|
||
margin-right: 0.75rem;
|
||
width: 1.25rem;
|
||
text-align: center;
|
||
color: #6b7280;
|
||
transition: color 0.15s ease;
|
||
}
|
||
|
||
.dropdown-item:hover {
|
||
background-color: #eff6ff;
|
||
color: #2563eb;
|
||
transform: translateX(2px);
|
||
}
|
||
|
||
.dropdown-item:hover i {
|
||
color: #2563eb;
|
||
}
|
||
|
||
.dropdown-item:active {
|
||
background-color: #dbeafe;
|
||
}
|
||
|
||
.dropdown-divider {
|
||
margin: 0.5rem 0;
|
||
border-color: #e5e7eb;
|
||
}
|
||
|
||
/* ========================================
|
||
DROPDOWN TOGGLE INDICATOR
|
||
======================================== */
|
||
|
||
.dropdown-toggle::after {
|
||
margin-left: 0.5rem;
|
||
vertical-align: 0.1em;
|
||
transition: transform 0.2s ease;
|
||
}
|
||
|
||
.dropdown-toggle[aria-expanded="true"]::after {
|
||
transform: rotate(180deg);
|
||
}
|
||
|
||
/* ========================================
|
||
ACTIVE DROPDOWN HIGHLIGHTING
|
||
======================================== */
|
||
|
||
/* Highlight dropdown parent when child page is active */
|
||
.nav-item.dropdown .nav-link.active {
|
||
background-color: #dbeafe;
|
||
color: #2563eb !important;
|
||
}
|
||
|
||
.nav-item.dropdown .nav-link.active::before {
|
||
content: "";
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
width: 80%;
|
||
height: 3px;
|
||
background: linear-gradient(90deg, transparent, #2563eb, transparent);
|
||
border-radius: 2px 2px 0 0;
|
||
}
|
||
|
||
.nav-item.dropdown {
|
||
position: relative;
|
||
}
|
||
|
||
/* ========================================
|
||
RESPONSIVE IMPROVEMENTS
|
||
======================================== */
|
||
|
||
@media (max-width: 768px) {
|
||
.navbar-collapse {
|
||
background-color: white;
|
||
border-radius: 0.5rem;
|
||
margin-top: 0.5rem;
|
||
padding: 1rem;
|
||
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
||
}
|
||
|
||
.nav-link {
|
||
padding: 0.75rem 1rem !important;
|
||
margin: 0.25rem 0;
|
||
}
|
||
|
||
.dropdown-menu {
|
||
border: none;
|
||
box-shadow: none;
|
||
padding-left: 1rem;
|
||
margin-top: 0;
|
||
background-color: #f9fafb;
|
||
}
|
||
|
||
.dropdown-item {
|
||
font-size: 0.9rem;
|
||
}
|
||
}
|
||
|
||
/* ========================================
|
||
BREADCRUMB NAVIGATION (Future Enhancement)
|
||
======================================== */
|
||
|
||
.breadcrumb {
|
||
background-color: transparent;
|
||
padding: 0.5rem 0;
|
||
margin-bottom: 1rem;
|
||
font-size: 0.875rem;
|
||
}
|
||
|
||
.breadcrumb-item {
|
||
color: #6b7280;
|
||
}
|
||
|
||
.breadcrumb-item.active {
|
||
color: #2563eb;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.breadcrumb-item + .breadcrumb-item::before {
|
||
content: "›";
|
||
color: #9ca3af;
|
||
padding: 0 0.5rem;
|
||
}
|
||
|
||
.breadcrumb-item a {
|
||
color: #6b7280;
|
||
text-decoration: none;
|
||
transition: color 0.2s ease;
|
||
}
|
||
|
||
.breadcrumb-item a:hover {
|
||
color: #2563eb;
|
||
}
|
||
|
||
/* ========================================
|
||
ACCESSIBILITY ENHANCEMENTS
|
||
======================================== */
|
||
|
||
.nav-link:focus,
|
||
.dropdown-item:focus {
|
||
outline: 2px solid #2563eb;
|
||
outline-offset: 2px;
|
||
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
|
||
}
|
||
|
||
/* Keyboard navigation indicator */
|
||
.nav-link:focus-visible,
|
||
.dropdown-item:focus-visible {
|
||
outline: 2px solid #2563eb;
|
||
outline-offset: 2px;
|
||
}
|
||
|
||
/* ========================================
|
||
ANIMATION & MICRO-INTERACTIONS
|
||
======================================== */
|
||
|
||
@keyframes slideDown {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(-10px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
.dropdown-menu.show {
|
||
animation: slideDown 0.2s ease-out;
|
||
}
|
||
|
||
/* Hover effect for dropdown parent */
|
||
.nav-item.dropdown:hover .nav-link {
|
||
background-color: #f3f4f6;
|
||
}
|
||
|
||
/* ========================================
|
||
NOTIFICATION BADGES (For Future Use)
|
||
======================================== */
|
||
|
||
.nav-link .badge {
|
||
position: absolute;
|
||
top: 0.25rem;
|
||
right: 0.25rem;
|
||
font-size: 0.625rem;
|
||
padding: 0.2rem 0.4rem;
|
||
border-radius: 0.75rem;
|
||
background-color: #ef4444;
|
||
color: white;
|
||
font-weight: 700;
|
||
min-width: 1.25rem;
|
||
text-align: center;
|
||
}
|
||
|
||
/* ========================================
|
||
LOADING STATE (For Future Enhancement)
|
||
======================================== */
|
||
|
||
.nav-link.loading {
|
||
opacity: 0.6;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.nav-link.loading::after {
|
||
content: "";
|
||
display: inline-block;
|
||
width: 0.75rem;
|
||
height: 0.75rem;
|
||
margin-left: 0.5rem;
|
||
border: 2px solid currentColor;
|
||
border-right-color: transparent;
|
||
border-radius: 50%;
|
||
animation: spin 0.6s linear infinite;
|
||
}
|
||
|
||
@keyframes spin {
|
||
to {
|
||
transform: rotate(360deg);
|
||
}
|
||
}
|
||
|
||
/* ========================================
|
||
PWA INSTALL ALERT (Inline Dashboard Content)
|
||
======================================== */
|
||
|
||
/* PWA install alert is now inline Bootstrap alert component */
|
||
/* No custom styles needed - using standard Bootstrap alert-info */
|
||
/* Dismiss functionality handled via Bootstrap's data-bs-dismiss */
|
||
/* Visibility controlled by JavaScript based on localStorage */
|