Files
HMDesign/packages/ui/src/theme/dashboard-layout.css
T

155 lines
6.3 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Dashboard Mode owns its internal navigation and scroll frame. No GNB/LNB CSS variable or responsive dependency. */
:root, [data-hm-theme] {
--hm-dashboard-height: 100dvh;
--hm-dashboard-background: var(--hm-sem-palette-green-light-2);
--hm-dashboard-content-background: var(--hm-sem-bg-content);
--hm-dashboard-content-top-radius: 12px;
--hm-dashboard-content-side-radius: 18px;
--hm-dashboard-sidebar-width: 272px;
--hm-dashboard-min-width: 960px;
--hm-dashboard-header-background: linear-gradient(180deg, var(--hm-sem-action-surface-stop-0) 0%, var(--hm-sem-action-surface-stop-30) 30%, var(--hm-sem-action-surface-stop-65) 65%, var(--hm-sem-action-surface-stop-100) 100%);
/* Compact 48px source surface; independent of shared action/GNB/LNB gradients. */
--hm-dashboard-compact-background:
linear-gradient(270deg, rgba(18, 66, 51, 0.4) 0%, rgba(20, 112, 95, 0.4) 100%),
linear-gradient(178deg, #103D2E 1.07%, #2A6652 11.07%, #12352A 87.72%);
--hm-dashboard-nav-text: var(--hm-sem-on-action-primary);
--hm-dashboard-nav-text-secondary: var(--hm-sem-palette-green-tint);
--hm-dashboard-nav-text-stroke-width: 1px;
--hm-dashboard-nav-text-stroke-color: color-mix(in srgb, var(--hm-sem-palette-black) 30%, transparent);
--hm-dashboard-nav-focus-outline: 2px solid var(--hm-sem-on-action-primary);
--hm-dashboard-padding: 34px;
--hm-dashboard-gap: 24px;
--hm-dashboard-content-shadow-top: 0 -8px 18px color-mix(in srgb, var(--hm-sem-palette-green-dark-2) 18%, transparent);
--hm-dashboard-content-shadow-side: -8px 0 18px color-mix(in srgb, var(--hm-sem-palette-green-dark-2) 18%, transparent);
}
[data-slot="dashboard-scroll"] {
box-sizing: border-box;
height: var(--hm-dashboard-height);
min-width: 0;
max-width: 100%;
overflow: auto;
}
[data-slot="dashboard-layout"] {
box-sizing: border-box;
height: 100%;
/* 4 × 200px KPI cards + 3 × 24px gaps + 2 × 34px padding + 20px scrollbar allowance.
Also fits the measured 549px compact status bar, its wings and the 125px brand without overlap. */
min-width: var(--hm-dashboard-min-width, 960px);
}
[data-slot="dashboard-layout"][data-sidebar] {
min-width: calc(var(--hm-dashboard-min-width) + var(--hm-dashboard-sidebar-width));
}
[data-slot="dashboard-body"] {
flex: 1 1 0;
min-height: 0;
min-width: 0;
background: var(--hm-dashboard-background);
}
[data-slot="dashboard-header"] {
display: flex;
flex: none;
align-items: center;
justify-content: space-between;
gap: 24px;
height: 48px;
padding: 0 20px;
background: var(--hm-dashboard-header-background);
color: var(--hm-dashboard-nav-text);
}
[data-slot="dashboard-body"] > [data-slot="dashboard-sidebar"] {
flex: none;
width: var(--hm-dashboard-sidebar-width);
min-height: 0;
padding: 28px 20px 22px;
gap: 22px;
background: linear-gradient(90deg, var(--hm-sem-action-primary) 0%, var(--hm-sem-palette-green-light-1) 30%, var(--hm-sem-palette-green-light-2) 50%, var(--hm-sem-palette-green-light-3) 90%, var(--hm-sem-palette-green-light-2) 100%);
color: var(--hm-dashboard-nav-text);
}
[data-slot="dashboard-sidebar"] > nav {
flex: 1 1 auto;
min-height: 0;
overflow-y: auto;
}
[data-slot="dashboard-sidebar"] [data-slot="button"] {
justify-content: flex-start;
width: 100%;
min-height: 44px;
height: auto;
white-space: normal;
color: var(--hm-dashboard-nav-text);
}
[data-slot="dashboard-sidebar"] [data-slot="button"]:hover {
background: color-mix(in srgb, var(--hm-sem-palette-black) 10%, transparent);
}
[data-slot="dashboard-sidebar"] [data-slot="button"][aria-expanded="true"] {
background: color-mix(in srgb, var(--hm-sem-palette-black) 20%, transparent);
}
[data-slot="dashboard-sidebar"] [data-slot="collapsible"][data-current] > [data-slot="button"] {
color: var(--hm-sem-palette-yellow-accent);
}
[data-slot="dashboard-sidebar"] [data-slot="button"][aria-expanded="true"] > svg {
transform: rotate(90deg);
}
[data-slot="dashboard-sidebar"] [aria-current="page"],
[data-slot="dashboard-sidebar"] [aria-current="page"]:hover {
background: var(--hm-dashboard-content-background);
color: var(--hm-sem-action-primary);
}
[data-slot="dashboard-sidebar"] [data-slot="button"]:focus-visible {
outline: var(--hm-dashboard-nav-focus-outline);
}
[data-slot="dashboard-sidebar"] [aria-current="page"]:focus-visible {
outline-color: var(--hm-sem-action-primary);
}
/* Content surface and vertical scroll container, positioned after Dashboard's internal navigation. */
[data-slot="dashboard-main"] {
position: relative;
box-sizing: border-box;
flex: 1 1 0;
min-width: 0;
min-height: 0;
padding: var(--hm-dashboard-padding);
overflow-x: auto;
overflow-y: auto;
/* Let horizontal wheel/touch gestures chain to the outer Dashboard frame. */
overscroll-behavior-y: contain;
background: var(--hm-dashboard-content-background);
}
/* Dashboard header and sidebar use Dashboard-owned radii. */
[data-slot="dashboard-layout"][data-header] [data-slot="dashboard-main"] {
border-radius: var(--hm-dashboard-content-top-radius) var(--hm-dashboard-content-top-radius) 0 0;
box-shadow: var(--hm-dashboard-content-shadow-top);
}
[data-slot="dashboard-content"] {
gap: var(--hm-dashboard-gap);
min-width: 0;
}
[data-slot="dashboard-content"] > * {
min-width: 0;
}
/* Preserve the desktop filter row inside the minimum-width frame, independent of the viewport's mobile Filter Bar rules. */
[data-slot="dashboard-layout"] [data-slot="filter-bar"] {
flex-wrap: nowrap;
}
[data-slot="dashboard-layout"] [data-slot="filter-bar"][data-layout] { flex-wrap: wrap; }
[data-slot="dashboard-layout"] [data-slot="filter-bar-search"] {
flex: 0 0 var(--hm-filter-bar-search-width);
}
[data-slot="dashboard-layout"] [data-slot="filter-bar"] > :is([data-slot="select-trigger"], [data-slot="combobox-trigger"], [data-slot="date-picker-trigger"], [data-slot="input"]) {
flex: 0 0 var(--hm-filter-bar-control-width);
width: var(--hm-filter-bar-control-width);
}
[data-slot="dashboard-layout"] [data-slot="filter-bar-actions"] {
flex: 0 0 auto;
}
/* The sidebar remains inside the Dashboard minimum-width frame at every viewport width. */
[data-slot="dashboard-layout"][data-sidebar] [data-slot="dashboard-main"] {
border-radius: var(--hm-dashboard-content-side-radius) 0 0 var(--hm-dashboard-content-side-radius);
box-shadow: var(--hm-dashboard-content-shadow-side);
}