diff --git a/src/app/globals.css b/src/app/globals.css index b6b7ebf..8b6441d 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -69,12 +69,24 @@ body { left: 0; bottom: 0; z-index: 100; - transition: transform 0.3s ease; + transition: width 0.3s cubic-bezier(0.16, 1, 0.3, 1), transform 0.3s ease; +} + +.sidebar.collapsed { + width: 76px; } .sidebar-header { - padding: 24px 20px; + padding: 20px 16px; border-bottom: 1px solid var(--border-color); + display: flex; + align-items: center; + justify-content: space-between; +} + +.sidebar.collapsed .sidebar-header { + justify-content: center; + padding: 20px 10px; } .sidebar-logo { @@ -84,77 +96,41 @@ body { text-decoration: none; } -.logo-icon { - width: 40px; - height: 40px; - background: var(--gradient-primary); - border-radius: var(--radius-md); - display: flex; - align-items: center; - justify-content: center; - font-size: 20px; - color: white; - box-shadow: var(--shadow-glow); -} - -.logo-text { - font-size: 20px; - font-weight: 800; - background: var(--gradient-primary); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - letter-spacing: -0.5px; -} - -.sidebar-nav { - flex: 1; - padding: 16px 12px; - overflow-y: auto; -} - -.nav-section-title { - font-size: 11px; - font-weight: 600; - color: var(--text-muted); - text-transform: uppercase; - letter-spacing: 1.2px; - padding: 16px 12px 8px; -} - -.nav-item { - display: flex; - align-items: center; - gap: 12px; - padding: 10px 12px; - border-radius: var(--radius-sm); +.desktop-collapse-btn { color: var(--text-secondary); - text-decoration: none; - font-size: 14px; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; - border: none; - background: none; - width: 100%; - text-align: left; } -.nav-item:hover { - background: var(--bg-card); +.desktop-collapse-btn:hover { color: var(--text-primary); + background: rgba(255, 255, 255, 0.1); } -.nav-item.active { - background: var(--accent-glow); - color: var(--accent); - box-shadow: inset 3px 0 0 var(--accent); +.mobile-close-btn { + display: none; } -.nav-item svg { width: 20px; height: 20px; flex-shrink: 0; } +.nav-section-divider { + height: 1px; + background: var(--border-color); + margin: 16px 12px; +} -.sidebar-footer { - padding: 16px; - border-top: 1px solid var(--border-color); +.sidebar.collapsed .nav-item { + justify-content: center; + padding: 12px; +} + +.sidebar.collapsed .nav-item svg { + margin: 0; +} + +.sidebar.collapsed .plan-badge { + justify-content: center; + padding: 10px; +} + +.sidebar.collapsed .sidebar-footer { + padding: 16px 10px; } .plan-badge { @@ -174,6 +150,11 @@ body { flex: 1; margin-left: 260px; min-height: 100vh; + transition: margin-left 0.3s cubic-bezier(0.16, 1, 0.3, 1); +} + +.main-content.collapsed { + margin-left: 76px; } .topbar { @@ -997,3 +978,41 @@ tr:hover td { background: var(--bg-card-hover); } transform: translateY(0) scale(1); } } + +/* === VIEW MODE SELECTOR === */ +.view-mode-selector { + display: inline-flex; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); + padding: 3px; + gap: 3px; +} + +.view-mode-btn { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 14px; + border-radius: 4px; + border: none; + background: transparent; + color: var(--text-secondary); + font-size: 13px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + font-family: inherit; +} + +.view-mode-btn:hover { + color: var(--text-primary); + background: rgba(255, 255, 255, 0.06); +} + +.view-mode-btn.active { + background: var(--accent); + color: white; + font-weight: 600; + box-shadow: 0 2px 10px rgba(108, 99, 255, 0.4); +} diff --git a/src/app/page.tsx b/src/app/page.tsx index f776a62..e9739ae 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -36,8 +36,24 @@ export default function Home() { const [currentPlan, setCurrentPlan] = useState('Professional'); const [isLocked, setIsLocked] = useState(false); const [loadingSubscription, setLoadingSubscription] = useState(true); + const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false); const router = useRouter(); + useEffect(() => { + const savedCollapse = localStorage.getItem('agendapro_sidebar_collapsed'); + if (savedCollapse === 'true') { + setIsSidebarCollapsed(true); + } + }, []); + + const toggleSidebarCollapse = () => { + setIsSidebarCollapsed(prev => { + const next = !prev; + localStorage.setItem('agendapro_sidebar_collapsed', String(next)); + return next; + }); + }; + const checkSubscriptionStatus = async () => { const slug = localStorage.getItem('agendapro_tenant_slug') || 'barbearia-premium'; @@ -130,7 +146,7 @@ export default function Home() { } return ( -