Files
michaelschiemer/resources/css/admin/05-objects/_layout.css
2025-11-24 21:28:25 +01:00

145 lines
3.4 KiB
CSS

/**
* Layout Primitives - Admin Interface
*
* Mobile-First Grid Layout mit progressiver Verbesserung für Tablet/Desktop.
*/
@layer layout {
/**
* Main Admin Layout Grid
*
* Mobile: Stacked (header, sidebar, content)
* Tablet+: Side-by-side (sidebar + header/content)
*/
.admin-layout {
display: grid;
min-height: 100vh;
/* Mobile Layout (default) */
grid-template-columns: 1fr;
grid-template-rows: auto auto 1fr;
grid-template-areas:
"header"
"sidebar"
"content";
/* Tablet+ Layout (768px+) */
@media (min-width: 768px) {
grid-template-columns: var(--sidebar-width, var(--spacing-sidebar)) 1fr;
grid-template-rows: auto 1fr;
grid-template-areas:
"sidebar header"
"sidebar content";
}
/* Wide Screen Layout (1440px+) */
@media (min-width: 1440px) {
grid-template-columns: var(--sidebar-width, var(--spacing-sidebar-wide)) 1fr;
}
}
/**
* Sidebar Area - Grid Positioning Only
*
* Note: Detailed sidebar styling is in _sidebar.css component file.
* This only defines grid positioning for the layout system.
*/
.admin-sidebar {
grid-area: sidebar;
}
/**
* Header Area
*
* Note: Detailed header styling is in _header.css component file.
* This only defines grid positioning and basic layout.
*/
.admin-header {
grid-area: header;
}
/**
* Content Area
*
* Note: Detailed content styling is in _content.css component file.
* This only defines grid positioning.
*/
.admin-content {
grid-area: content;
}
/**
* Mobile Menu Overlay
*
* Backdrop für off-canvas Sidebar auf Mobile.
*/
.admin-mobile-overlay {
display: none;
@media (max-width: 767px) {
&[data-mobile-menu-open="true"] {
display: block;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: oklch(0% 0 0 / 0.5);
z-index: calc(var(--z-sidebar) - 1);
backdrop-filter: blur(2px);
}
}
}
/**
* Skip Link (Accessibility)
*/
.admin-skip-link {
position: absolute;
top: -999px;
left: -999px;
z-index: var(--z-toast);
padding: var(--spacing-sm) var(--spacing-md);
background-color: var(--accent-primary);
color: white;
text-decoration: none;
border-radius: var(--radius-md);
&:focus {
top: var(--spacing-sm);
left: var(--spacing-sm);
}
}
/**
* Container Width Utilities
*/
.admin-container {
width: 100%;
max-width: var(--container-mobile);
margin: 0 auto;
padding: 0 var(--spacing-md);
@media (min-width: 768px) {
max-width: var(--container-tablet);
}
@media (min-width: 1024px) {
max-width: var(--container-desktop);
}
@media (min-width: 1440px) {
max-width: var(--container-wide);
}
}
.admin-container--narrow {
max-width: 960px;
}
.admin-container--wide {
max-width: 100%;
}
}