/* ======================================== MainLayout - Apple HIG Admin Interface Uses global CSS variables from app.css ======================================== */ .page { position: relative; display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; } main { flex: 1; display: flex; flex-direction: column; background: var(--color-bg); -webkit-font-smoothing: antialiased; } /* ======================================== Auth States ======================================== */ .auth-icon { font-family: var(--font-family-emoji); font-size: 3rem; line-height: 1; margin-bottom: var(--space-4); } /* ======================================== App Layout ======================================== */ .app-layout { min-height: 100vh; min-height: 100dvh; background: var(--color-bg); } /* ======================================== App Header - Responsive ======================================== */ .app-header { position: sticky; top: 0; z-index: var(--z-sticky); background: rgba(0, 0, 0, 0.85); backdrop-filter: saturate(180%) blur(20px); -webkit-backdrop-filter: saturate(180%) blur(20px); border-bottom: 0.5px solid var(--border-default); } .header-container { max-width: 1600px; margin: 0 auto; padding: 0 var(--space-2); height: 56px; display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); } @media (min-width: 480px) { .header-container { padding: 0 var(--space-4); gap: var(--space-4); } } @media (min-width: 768px) { .header-container { height: 60px; gap: var(--space-6); } } @media (min-width: 1024px) { .header-container { padding: 0 var(--space-6); height: 64px; } } .header-brand { display: flex; flex-direction: column; text-decoration: none; flex-shrink: 0; transition: opacity var(--duration-fast) var(--ease-out); } .header-brand:hover { opacity: 0.9; } .header-brand:active { opacity: 0.7; } .header-brand .brand-name { font-family: var(--font-family-heading); font-weight: var(--font-weight-bold); font-size: clamp(0.9rem, 2.5vw, 1.2rem); color: var(--text-primary); line-height: var(--line-height-tight); } .header-brand .brand-sub { font-family: var(--font-family-base); font-size: clamp(0.6rem, 1.5vw, 0.7rem); color: var(--text-secondary); } /* ======================================== Header Navigation - Responsive ======================================== */ .header-nav { display: none; align-items: center; gap: 4px; background: rgba(255, 255, 255, 0.06); padding: 4px; border-radius: var(--radius-lg); width: fit-content; } @media (min-width: 768px) { .header-nav { display: flex; } } @media (min-width: 1200px) { .header-nav { gap: 6px; } } .nav-item { display: flex; align-items: center; gap: 4px; padding: 8px 10px; border-radius: var(--radius-md); text-decoration: none; color: var(--text-secondary); font-family: var(--font-family-base); font-weight: var(--font-weight-medium); font-size: 0.8rem; transition: all var(--duration-fast) var(--ease-out); white-space: nowrap; } @media (min-width: 768px) { .nav-item { padding: 8px 12px; font-size: 0.85rem; } } @media (min-width: 1024px) { .nav-item { padding: 10px 16px; gap: 6px; font-size: 0.9rem; } } @media (min-width: 1200px) { .nav-item { padding: 10px 18px; font-size: 0.95rem; } } .nav-item:hover { color: var(--text-primary); background: rgba(255, 255, 255, 0.08); text-decoration: none; } .nav-item:active { transform: scale(0.96); } .nav-item.active { color: var(--text-primary); background: var(--surface-secondary); box-shadow: var(--shadow-sm); } .nav-item svg { flex-shrink: 0; width: 14px; height: 14px; } @media (min-width: 1024px) { .nav-item svg { width: 16px; height: 16px; } } /* Hide nav text on smaller tablets */ @media (min-width: 768px) and (max-width: 899px) { .nav-item span { display: none; } .nav-item { padding: 10px 12px; } .nav-item svg { width: 18px; height: 18px; } } /* ======================================== User Dropdown - Responsive ======================================== */ .header-user { display: none; align-items: center; flex-shrink: 0; gap: 12px; } @media (min-width: 768px) { .header-user { display: flex; } } .user-dropdown { position: relative; } .user-dropdown-toggle { display: flex; align-items: center; gap: 10px; padding: 8px 14px; background: rgba(255, 255, 255, 0.06); border: 0.5px solid rgba(255, 255, 255, 0.08); border-radius: var(--radius-lg); cursor: pointer; transition: all var(--duration-fast) var(--ease-out); } .user-dropdown-toggle:hover { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.15); } .user-dropdown-toggle:active { transform: scale(0.97); } .user-dropdown-toggle .user-info { display: flex; flex-direction: column; align-items: flex-end; text-align: right; } .user-dropdown-toggle .user-name { font-family: var(--font-family-base); font-weight: var(--font-weight-semibold); color: var(--text-primary); font-size: 0.9rem; line-height: var(--line-height-tight); } .user-dropdown-toggle .user-role { font-family: var(--font-family-base); font-size: 0.7rem; color: var(--text-secondary); background: none; padding: 0; } .user-dropdown-toggle svg { color: var(--text-secondary); width: 14px; height: 14px; transition: transform var(--duration-fast) var(--ease-out); } .user-dropdown-toggle svg.rotated { transform: rotate(180deg); } .user-dropdown-menu { position: absolute; top: calc(100% + 10px); right: 0; min-width: 220px; background: var(--surface-primary); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 0.5px solid var(--border-default); border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); z-index: var(--z-dropdown); overflow: hidden; animation: dropdownIn var(--duration-normal) var(--ease-spring); } @keyframes dropdownIn { from { opacity: 0; transform: scale(0.95) translateY(-8px); } to { opacity: 1; transform: scale(1) translateY(0); } } .dropdown-item { display: flex; align-items: center; gap: 12px; width: 100%; padding: 14px 18px; background: transparent; border: none; color: var(--text-primary); font-family: var(--font-family-base); font-size: 1rem; cursor: pointer; transition: background var(--duration-fast) var(--ease-out); text-align: left; } .dropdown-item:hover { background: rgba(255, 255, 255, 0.06); } .dropdown-item:active { background: rgba(255, 255, 255, 0.1); } .dropdown-item svg { width: 18px; height: 18px; color: var(--text-secondary); } .dropdown-item-danger { color: var(--color-error-light); background: rgba(220, 38, 38, 0.08); border-top: 0.5px solid rgba(255, 255, 255, 0.06); margin-top: 4px; } .dropdown-item-danger:hover { background: rgba(220, 38, 38, 0.15); } .dropdown-item-danger svg { color: var(--color-error-light); } .dropdown-divider { height: 0.5px; background: var(--border-default); margin: 6px 0; } /* ======================================== Mobile Menu - Enhanced Responsive ======================================== */ .mobile-menu-toggle { display: flex; align-items: center; justify-content: center; width: var(--touch-target); height: var(--touch-target); background: transparent; border: none; border-radius: var(--radius-lg); color: var(--text-primary); cursor: pointer; transition: all var(--duration-fast) var(--ease-out); -webkit-tap-highlight-color: transparent; } .mobile-menu-toggle:active { transform: scale(0.9); background: rgba(255, 255, 255, 0.1); } @media (min-width: 768px) { .mobile-menu-toggle { display: none; } } .mobile-menu { background: rgba(0, 0, 0, 0.98); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); padding: var(--space-4); border-top: 0.5px solid var(--border-default); animation: mobileMenuIn var(--duration-normal) var(--ease-out); max-height: calc(100vh - 60px); max-height: calc(100dvh - 60px); overflow-y: auto; } @keyframes mobileMenuIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .mobile-nav-item { display: flex; align-items: center; padding: 14px 16px; color: var(--text-primary); text-decoration: none; font-family: var(--font-family-emoji), var(--font-family-base); font-weight: var(--font-weight-medium); font-size: 1rem; border-radius: var(--radius-lg); transition: background var(--duration-fast) var(--ease-out); -webkit-tap-highlight-color: transparent; min-height: 48px; } @media (min-width: 480px) { .mobile-nav-item { padding: 16px 18px; font-size: 1.05rem; } } .mobile-nav-item:active { background: rgba(255, 255, 255, 0.08); } .mobile-user-info { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--space-2); padding: var(--space-6) var(--space-4); margin-top: var(--space-2); border-top: 0.5px solid var(--border-default); color: var(--text-secondary); font-family: var(--font-family-base); font-size: 1rem; } .mobile-user-actions { display: flex; align-items: center; gap: var(--space-2); } /* ======================================== Main Content - Responsive ======================================== */ .app-main { padding: 0; } /* ======================================== Form Controls - Responsive ======================================== */ .form-group { margin-bottom: var(--space-4); } .form-group:last-child { margin-bottom: 0; } /* Reduced motion: inherited from app.css (section 17) */