|
658 | 658 | vertical-align: middle; margin-left: 6px; |
659 | 659 | } |
660 | 660 |
|
| 661 | + /* ── Sidebar overlay backdrop ── */ |
| 662 | + .sidebar-backdrop { |
| 663 | + display: none; position: fixed; inset: 0; |
| 664 | + background: var(--overlay); z-index: 59; |
| 665 | + } |
| 666 | + .sidebar-backdrop.active { display: block; } |
| 667 | + |
661 | 668 | /* ── Responsive ── */ |
662 | 669 | @media (max-width: 900px) { |
663 | 670 | .charts-grid { grid-template-columns: 1fr; } |
664 | | - .sidebar { width: 0; min-width: 0; } |
665 | | - .sidebar.collapsed { width: 0; min-width: 0; } |
666 | | - } |
667 | | - @media (max-width: 900px) { |
668 | 671 | .metric-cards { grid-template-columns: 1fr; } |
| 672 | + .sidebar { |
| 673 | + position: fixed; top: 0; left: 0; bottom: 0; |
| 674 | + z-index: 60; width: 240px; min-width: 240px; |
| 675 | + transform: translateX(-100%); |
| 676 | + transition: transform 0.25s ease; |
| 677 | + } |
| 678 | + .sidebar.collapsed { width: 240px; min-width: 240px; transform: translateX(-100%); } |
| 679 | + .sidebar.mobile-open { transform: translateX(0); } |
669 | 680 | } |
670 | 681 | @media (max-width: 600px) { |
671 | 682 | body { font-size: 14px; } |
|
752 | 763 | </div> |
753 | 764 | </div> |
754 | 765 | </nav> |
| 766 | +<div class="sidebar-backdrop" id="sidebar-backdrop"></div> |
755 | 767 |
|
756 | 768 | <!-- Main Area --> |
757 | 769 | <div class="app-main"> |
@@ -1600,18 +1612,35 @@ <h2>{{ t.export_title }}</h2> |
1600 | 1612 |
|
1601 | 1613 | /* ── Sidebar ── */ |
1602 | 1614 | var sidebar = document.getElementById('sidebar'); |
| 1615 | + var sidebarBackdrop = document.getElementById('sidebar-backdrop'); |
1603 | 1616 |
|
1604 | | - function collapseSidebar() { sidebar.classList.add('collapsed'); } |
1605 | | - function expandSidebar() { sidebar.classList.remove('collapsed'); } |
| 1617 | + function isMobile() { return window.matchMedia('(max-width: 900px)').matches; } |
| 1618 | + |
| 1619 | + function collapseSidebar() { |
| 1620 | + sidebar.classList.add('collapsed'); |
| 1621 | + sidebar.classList.remove('mobile-open'); |
| 1622 | + sidebarBackdrop.classList.remove('active'); |
| 1623 | + } |
| 1624 | + function expandSidebar() { |
| 1625 | + sidebar.classList.remove('collapsed'); |
| 1626 | + } |
1606 | 1627 |
|
1607 | 1628 | document.getElementById('sidebar-collapse').addEventListener('click', collapseSidebar); |
1608 | 1629 | document.getElementById('hamburger').addEventListener('click', function() { |
1609 | | - sidebar.classList.toggle('collapsed'); |
| 1630 | + if (isMobile()) { |
| 1631 | + var opening = !sidebar.classList.contains('mobile-open'); |
| 1632 | + sidebar.classList.toggle('mobile-open', opening); |
| 1633 | + sidebarBackdrop.classList.toggle('active', opening); |
| 1634 | + } else { |
| 1635 | + sidebar.classList.toggle('collapsed'); |
| 1636 | + } |
1610 | 1637 | }); |
| 1638 | + sidebarBackdrop.addEventListener('click', collapseSidebar); |
1611 | 1639 |
|
1612 | 1640 | var sidebarLinks = document.querySelectorAll('.sidebar-link[data-view]'); |
1613 | 1641 | sidebarLinks.forEach(function(link) { |
1614 | 1642 | link.addEventListener('click', function() { |
| 1643 | + if (isMobile()) { collapseSidebar(); } |
1615 | 1644 | switchView(this.getAttribute('data-view')); |
1616 | 1645 | }); |
1617 | 1646 | }); |
|
0 commit comments