328 lines
6.5 KiB
CSS
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;
|
|
}
|