@knadh/oat
Version:
185 lines (156 loc) • 4.16 kB
CSS
@layer components {
[data-sidebar-layout] {
display: grid;
grid-template-columns: 14rem 1fr;
grid-template-rows: auto 1fr;
height: 100dvh;
> main {
grid-row: 2;
min-width: 0;
overflow-y: auto;
}
> aside[data-sidebar] {
grid-row: 2;
min-height: 0;
z-index: 1;
background-color: var(--background);
border-inline-end: 1px solid var(--border);
box-shadow: var(--shadow-medium);
display: flex;
flex-direction: column;
> :is(header, footer) {
flex-shrink: 0;
padding: var(--space-3);
}
> footer {
margin-block-start: auto;
}
> nav {
flex: 1;
min-height: 0;
overflow-y: auto;
padding: var(--space-3) var(--space-2);
font-size: var(--text-7);
ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: var(--space-1);
li {
margin: 0;
}
}
a {
display: flex;
gap: var(--space-2);
padding: var(--space-1) var(--space-3);
color: var(--foreground);
text-decoration: none;
border-radius: var(--radius-small);
transition: background-color var(--transition-fast);
&:is(:hover, [aria-current]) {
background-color: var(--accent);
}
}
details {
border: none;
overflow: visible;
& + details { margin-top: 0; }
&[open] summary { border-bottom: none; }
> ul { margin-inline-start: var(--space-4); padding: var(--space-1) 0; }
}
summary {
justify-content: flex-start;
padding: var(--space-2) var(--space-3);
border-radius: var(--radius-small);
&::after {
width: 0.75rem;
height: 0.75rem;
margin-inline-start: auto;
}
}
}
}
> nav[data-topnav] {
grid-column: 1 / -1;
}
}
nav[data-topnav] {
position: sticky;
top: 0;
z-index: 5;
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-2) var(--space-4);
background-color: var(--background);
border-bottom: 1px solid var(--border);
box-shadow: var(--shadow-small);
a {
text-decoration: none;
}
}
:is([data-sidebar-toggle], [data-sidebar-header]) {
display: none;
}
[data-sidebar-toggle] {
padding: 0 var(--space-1);
background: none;
border: 1px solid var(--border);
border-radius: var(--radius-small);
}
@media (min-width: 769px) {
[data-sidebar-layout="always"] {
transition: grid-template-columns var(--transition);
[data-sidebar-toggle] {
display: inline-block;
}
> aside[data-sidebar] {
transform: translateX(0);
opacity: 1;
transition: transform var(--transition), opacity var(--transition), visibility var(--transition);
}
&[data-sidebar-open] {
grid-template-columns: 0px 1fr;
gap: 0;
> aside[data-sidebar] {
overflow: hidden;
min-width: 0;
transform: translateX(-100%);
opacity: 0;
visibility: hidden;
border-inline-end: none;
}
}
}
}
@media (max-width: 768px) {
[data-sidebar-layout] {
grid-template-columns: 1fr;
> main {
grid-column: 1;
}
> aside[data-sidebar] {
grid-column: 1;
z-index: 2;
width: 16rem;
transform: translateX(-100%);
transition: transform var(--transition);
box-shadow: var(--shadow-large);
}
&[data-sidebar-open] > aside[data-sidebar] {
transform: translateX(0);
}
}
[data-sidebar-toggle] { display: inline-block; }
[data-sidebar-header] {
display: flex;
align-items: center;
gap: var(--space-3);
padding: var(--space-3) var(--space-4);
border-bottom: 1px solid var(--border);
}
}
}