diff --git a/frontend/src/components/Layout.css b/frontend/src/components/Layout.css index 87606d3..bf32738 100644 --- a/frontend/src/components/Layout.css +++ b/frontend/src/components/Layout.css @@ -2,64 +2,174 @@ min-height: 100vh; display: flex; flex-direction: column; + background: var(--bg-primary); } +/* Header */ .header { - background-color: var(--primary); - color: white; - padding: 1rem 0; - box-shadow: 0 2px 4px rgba(0,0,0,0.1); + background: var(--bg-secondary); + border-bottom: 1px solid var(--border-primary); + padding: 0; + position: sticky; + top: 0; + z-index: 100; + backdrop-filter: blur(12px); + background: rgba(17, 17, 19, 0.85); } .header-content { display: flex; justify-content: space-between; align-items: center; + height: 64px; } +/* Logo */ .logo { display: flex; align-items: center; - gap: 0.5rem; - color: white; - font-size: 1.5rem; - font-weight: bold; + gap: 12px; + color: var(--text-primary); + font-size: 1.25rem; + font-weight: 600; text-decoration: none; + transition: opacity var(--transition-fast); } .logo:hover { - text-decoration: none; + opacity: 0.9; + color: var(--text-primary); } .logo-icon { - font-size: 2rem; + display: flex; + align-items: center; + justify-content: center; + width: 40px; + height: 40px; + background: var(--accent-gradient); + border-radius: var(--radius-md); + color: white; + box-shadow: var(--shadow-glow); } +.logo-text { + letter-spacing: -0.02em; +} + +/* Navigation */ .nav { display: flex; - gap: 1.5rem; + gap: 8px; } .nav a { - color: white; - opacity: 0.9; + display: flex; + align-items: center; + gap: 8px; + padding: 8px 16px; + color: var(--text-primary); + font-size: 0.875rem; + font-weight: 500; + border-radius: var(--radius-md); + transition: all var(--transition-fast); } .nav a:hover { - opacity: 1; - text-decoration: none; + color: var(--text-primary); + background: var(--bg-hover); } +.nav a.active { + color: var(--accent-primary); + background: rgba(16, 185, 129, 0.1); +} + +.nav a svg { + opacity: 0.8; +} + +.nav a:hover svg, +.nav a.active svg { + opacity: 1; +} + +.nav-link-muted { + opacity: 0.7; +} + +/* Main content */ .main { flex: 1; - padding: 2rem 0; + padding: 32px 0 64px; } +/* Footer */ .footer { - background-color: var(--primary-dark); - color: white; - padding: 1rem 0; - text-align: center; - opacity: 0.9; + background: var(--bg-secondary); + border-top: 1px solid var(--border-primary); + padding: 24px 0; +} + +.footer-content { + display: flex; + justify-content: space-between; + align-items: center; +} + +.footer-brand { + display: flex; + align-items: center; + gap: 12px; +} + +.footer-logo { + font-weight: 600; + color: var(--text-primary); +} + +.footer-tagline { + color: var(--text-secondary); font-size: 0.875rem; } + +.footer-links { + display: flex; + gap: 24px; +} + +.footer-links a { + color: var(--text-secondary); + font-size: 0.875rem; + transition: color var(--transition-fast); +} + +.footer-links a:hover { + color: var(--text-primary); +} + +/* Responsive */ +@media (max-width: 640px) { + .header-content { + height: 56px; + } + + .logo-text { + display: none; + } + + .nav a span { + display: none; + } + + .footer-content { + flex-direction: column; + gap: 16px; + text-align: center; + } + + .footer-brand { + flex-direction: column; + gap: 4px; + } +} diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index e4672d5..f9a4bb8 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -1,5 +1,5 @@ import { ReactNode } from 'react'; -import { Link } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import './Layout.css'; interface LayoutProps { @@ -7,16 +7,48 @@ interface LayoutProps { } function Layout({ children }: LayoutProps) { + const location = useLocation(); + return (