rebuild(stage-4): deliver shared shell and account interfaces
This commit is contained in:
@@ -0,0 +1,327 @@
|
||||
.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;
|
||||
}
|
||||
Reference in New Issue
Block a user