Files
xiaobaifupan/next/frontend/src/shared/styles/shell.css
T

328 lines
6.5 KiB
CSS

.app-loading {
min-height: 100vh;
display: grid;
place-items: center;
color: var(--color-text-secondary);
background: var(--color-canvas);
}
.loading-stack {
display: grid;
justify-items: center;
gap: var(--s-12);
}
.app-shell {
min-height: 100vh;
padding-left: var(--shell-sidebar-width);
padding-bottom: var(--shell-status-height);
background: var(--color-canvas);
}
.sidebar {
position: fixed;
inset: 0 auto 0 0;
z-index: var(--z-sidebar);
width: var(--shell-sidebar-width);
display: flex;
flex-direction: column;
border-right: var(--s-1) solid var(--color-border);
background: var(--color-surface);
}
.brand {
height: var(--shell-topbar-height);
display: flex;
align-items: center;
gap: var(--s-8);
padding: 0 var(--s-16);
border-bottom: var(--s-1) solid var(--color-divider);
}
.brand-mark {
width: var(--s-26);
height: var(--s-26);
display: grid;
place-items: center;
border-radius: var(--control-radius);
color: var(--c-gray-050);
background: var(--color-primary);
font-size: var(--font-14);
font-weight: var(--weight-700);
}
.brand-name {
font-size: var(--font-15);
font-weight: var(--weight-700);
}
.sidebar-nav {
flex: 1;
overflow-y: auto;
padding: var(--s-8);
}
.nav-group-label {
padding: var(--s-12) var(--s-10) var(--s-4);
color: var(--color-text-faint);
font-size: var(--font-11);
}
.nav-item {
min-height: var(--s-32);
display: flex;
align-items: center;
gap: var(--s-8);
margin-bottom: var(--s-1);
padding: var(--s-6) var(--s-10);
border-radius: var(--control-radius);
color: var(--color-text-secondary);
font-size: var(--font-13);
transition: color var(--duration-fast) var(--ease-standard),
background var(--duration-fast) var(--ease-standard);
}
.nav-item:hover {
color: var(--color-text);
background: var(--color-surface-muted);
}
.nav-item.router-link-active {
color: var(--color-primary);
background: var(--color-primary-soft);
font-weight: var(--weight-600);
}
.nav-mark {
width: var(--s-20);
color: var(--color-text-faint);
font-size: var(--font-11);
text-align: center;
}
.nav-item.router-link-active .nav-mark {
color: var(--color-primary);
}
.shell-main {
min-width: 0;
}
.topbar {
position: sticky;
top: 0;
z-index: var(--z-topbar);
height: var(--shell-topbar-height);
display: flex;
align-items: center;
gap: var(--s-10);
padding: 0 var(--s-16);
border-bottom: var(--s-1) solid var(--color-border);
background: var(--color-surface);
}
.topbar-title {
min-width: 0;
font-size: var(--font-14);
font-weight: var(--weight-700);
white-space: nowrap;
}
.topbar-spacer {
flex: 1;
}
.date-control {
display: inline-flex;
align-items: center;
gap: var(--s-4);
}
.date-input {
height: var(--s-32);
padding: var(--s-4) var(--s-8);
border: var(--s-1) solid var(--color-border);
border-radius: var(--control-radius);
color: var(--color-text);
background: var(--color-surface);
font-size: var(--font-12);
font-variant-numeric: tabular-nums;
}
.identity-cluster {
display: inline-flex;
align-items: center;
gap: var(--s-6);
}
.account-menu-wrap {
position: relative;
}
.account-trigger {
max-width: var(--s-200);
}
.account-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.mobile-account-label {
display: none;
}
.account-menu {
position: absolute;
top: calc(100% + var(--s-8));
right: 0;
z-index: var(--z-popover);
width: var(--s-200);
padding: var(--s-6);
border: var(--s-1) solid var(--color-border);
border-radius: var(--control-radius);
background: var(--color-surface-raised);
box-shadow: var(--shadow-float);
}
.account-menu button {
width: 100%;
min-height: var(--s-32);
padding: var(--s-6) var(--s-10);
border-radius: var(--radius-5);
color: var(--color-text-secondary);
background: var(--c-transparent);
text-align: left;
}
.account-menu button:hover {
color: var(--color-text);
background: var(--color-surface-muted);
}
.market-strip {
border-bottom: var(--s-1) solid var(--color-border);
background: var(--color-surface);
}
.market-strip-row {
min-height: var(--shell-summary-height);
display: flex;
align-items: center;
gap: var(--s-18);
padding: var(--s-6) var(--s-16);
color: var(--color-text-secondary);
font-size: var(--font-12);
}
.market-emotion {
display: inline-flex;
align-items: center;
gap: var(--s-6);
color: var(--color-text-secondary);
}
.emotion-dot {
width: var(--s-8);
height: var(--s-8);
border-radius: var(--radius-round);
background: var(--color-text-faint);
animation: emotion-pulse 2.2s var(--ease-standard) infinite;
}
@keyframes emotion-pulse {
50% {
opacity: var(--opacity-muted);
transform: scale(var(--scale-pulse));
}
}
.market-toggle {
margin-left: auto;
color: var(--color-primary);
background: var(--c-transparent);
font-size: var(--font-12);
}
.market-details {
display: grid;
grid-template-columns: repeat(7, minmax(0, 1fr));
border-top: var(--s-1) solid var(--color-divider);
background: var(--color-divider);
gap: var(--s-1);
}
.market-cell {
min-height: var(--s-64);
padding: var(--s-10) var(--s-16);
background: var(--color-surface);
}
.market-cell-label {
color: var(--color-text-faint);
font-size: var(--font-11);
}
.market-cell-value {
min-height: var(--s-24);
padding-top: var(--s-4);
font-size: var(--font-18);
font-weight: var(--weight-700);
font-variant-numeric: tabular-nums;
}
.page-frame {
width: min(100%, var(--s-content-max));
min-height: calc(100vh - var(--shell-topbar-height) - var(--shell-summary-height) - var(--shell-status-height));
margin: 0 auto;
padding: var(--page-padding-y) var(--page-padding-x);
}
.page-header {
display: flex;
align-items: baseline;
gap: var(--s-12);
margin-bottom: var(--s-12);
}
.page-header h1 {
font-size: var(--font-17);
font-weight: var(--weight-800);
}
.page-subtitle {
color: var(--color-text-faint);
font-size: var(--font-12);
}
.statusbar {
position: fixed;
right: 0;
bottom: 0;
left: var(--shell-sidebar-width);
z-index: var(--z-status);
height: var(--shell-status-height);
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
gap: var(--s-12);
padding: 0 var(--s-16);
border-top: var(--s-1) solid var(--color-border);
color: var(--color-text-faint);
background: var(--color-surface);
font-size: var(--font-11);
}
.statusbar-center {
color: var(--color-text-secondary);
}
.statusbar-right {
text-align: right;
}
.mobile-nav {
display: none;
}