/* ============================================================ Elegant Work — Layout CSS ============================================================ */ /* ── App Shell ──────────────────────────────────────────── */ #app { min-height: 100vh; } #login-screen { min-height: 100vh; } .app-layout { display: flex; min-height: 100vh; } /* ── Sidebar ────────────────────────────────────────────── */ .sidebar { width: var(--sidebar-w); min-height: 100vh; background: var(--sidebar); display: flex; flex-direction: column; flex-shrink: 0; position: fixed; left: 0; top: 0; bottom: 0; z-index: 200; transition: transform var(--duration) var(--ease); } .sidebar-logo { padding: 1.25rem 1.5rem; border-bottom: 1px solid rgba(255, 255, 255, .07); display: flex; align-items: center; gap: .75rem; } .sidebar-logo-mark { width: 36px; height: 36px; background: var(--secondary); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 1.1rem; color: #fff; font-weight: 400; flex-shrink: 0; box-shadow: 0 2px 8px rgba(240, 165, 0, .4); } .sidebar-logo-text { font-family: var(--font-display); font-size: 1.05rem; color: #fff; letter-spacing: -.01em; } .sidebar-logo-sub { font-family: var(--font-body); font-size: .65rem; font-weight: 500; color: rgba(255, 255, 255, .4); text-transform: uppercase; letter-spacing: .1em; display: block; margin-top: -2px; } .sidebar-nav { flex: 1; overflow-y: auto; padding: .75rem 0; } .nav-group { margin-bottom: .25rem; } .nav-group-label { font-size: .65rem; font-weight: 600; text-transform: uppercase; letter-spacing: .1em; color: rgba(255, 255, 255, .25); padding: 1rem 1.5rem .375rem; } .nav-item { display: flex; align-items: center; gap: .75rem; padding: .625rem 1.25rem .625rem 1.5rem; color: rgba(255, 255, 255, .65); font-size: .875rem; font-weight: 500; border-radius: 0; transition: all var(--duration) var(--ease); cursor: pointer; border-left: 3px solid transparent; position: relative; } .nav-item:hover { color: #fff; background: rgba(255, 255, 255, .06); } .nav-item.active { color: #fff; background: rgba(27, 75, 138, .6); border-left-color: var(--secondary); } .nav-item.active .nav-icon { color: var(--secondary); } .nav-icon { width: 18px; height: 18px; flex-shrink: 0; opacity: .8; } .nav-item.active .nav-icon, .nav-item:hover .nav-icon { opacity: 1; } .nav-badge { margin-left: auto; background: var(--danger); color: #fff; font-size: .65rem; font-weight: 700; padding: .1em .45em; border-radius: 99px; min-width: 18px; text-align: center; } /* Sidebar user */ .sidebar-user { padding: 1rem 1.25rem; border-top: 1px solid rgba(255, 255, 255, .07); display: flex; align-items: center; gap: .75rem; cursor: pointer; transition: background var(--duration); } .sidebar-user:hover { background: rgba(255, 255, 255, .05); } .user-avatar { width: 36px; height: 36px; border-radius: 50%; background: var(--primary-light); display: flex; align-items: center; justify-content: center; font-size: .8rem; font-weight: 600; color: #fff; flex-shrink: 0; overflow: hidden; } .user-name { font-size: .8125rem; font-weight: 600; color: #fff; } .user-role { font-size: .7rem; color: rgba(255, 255, 255, .4); } /* ── Main Content ───────────────────────────────────────── */ .main-content { margin-left: var(--sidebar-w); flex: 1; display: flex; flex-direction: column; min-height: 100vh; } /* ── Top Header ─────────────────────────────────────────── */ .top-header { height: var(--header-h); background: var(--surface); border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 1rem; padding: 0 1.75rem; position: sticky; top: 0; z-index: 100; box-shadow: 0 1px 0 var(--border); } .page-title-area { flex: 1; } .page-title { font-size: 1.0625rem; font-weight: 600; color: var(--text); } .page-breadcrumb { font-size: .75rem; color: var(--text-muted); } .header-actions { display: flex; align-items: center; gap: .5rem; } .header-btn { width: 36px; height: 36px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: transparent; display: flex; align-items: center; justify-content: center; color: var(--text-muted); transition: all var(--duration) var(--ease); position: relative; } .header-btn:hover { background: var(--bg); color: var(--text); border-color: var(--border-dark); } .notif-dot { position: absolute; top: 6px; right: 6px; width: 7px; height: 7px; border-radius: 50%; background: var(--danger); border: 1.5px solid var(--surface); } /* ── Page Content ───────────────────────────────────────── */ .page-content { flex: 1; padding: 1.75rem; animation: fadeInUp .25s var(--ease) both; } @media (max-width: 768px) { .page-content { padding: .75rem; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* ── Mobile overlay ─────────────────────────────────────── */ .sidebar-overlay { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, .5); z-index: 199; } /* ── Mobile ─────────────────────────────────────────────── */ @media (max-width: 768px) { .sidebar { transform: translateX(-100%); } .sidebar.open { transform: translateX(0); box-shadow: var(--shadow-xl); } .sidebar-overlay.visible { display: block; } .main-content { margin-left: 0; width: 100%; max-width: 100vw; overflow-x: hidden; box-sizing: border-box; } .page-content { width: 100%; max-width: 100%; box-sizing: border-box; overflow-x: hidden; } .top-header { padding: 0 .875rem; width: 100%; box-sizing: border-box; } .mobile-menu-btn { display: flex !important; } } .mobile-menu-btn { display: none; }