Files
finance-duck/web/src/styles.css
T

2684 lines
45 KiB
CSS

:root {
font-family:
Inter,
ui-sans-serif,
-apple-system,
BlinkMacSystemFont,
"Segoe UI",
sans-serif;
color: #243245;
background: #f4f6f9;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
--navy: #111f30;
--emerald: #168465;
--emerald-dark: #0d6d52;
--muted: #748091;
--line: #e6ebf0;
--surface: #fff;
--danger: #b94343;
font-size: 14px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
}
button,
input,
select,
textarea {
font: inherit;
}
button,
a,
input,
select,
textarea {
-webkit-tap-highlight-color: transparent;
}
button {
cursor: pointer;
}
button:disabled {
cursor: not-allowed;
opacity: 0.48;
}
button:focus-visible,
a:focus-visible,
summary:focus-visible {
outline: 3px solid #53bba0;
outline-offset: 3px;
}
input:focus,
select:focus,
textarea:focus {
outline: 2px solid #9ed8c7;
outline-offset: 1px;
border-color: #248e70;
}
button {
transition:
background 0.15s,
color 0.15s,
box-shadow 0.15s;
}
a {
color: inherit;
text-decoration: none;
}
h1,
h2,
h3,
h4,
p {
margin: 0;
}
h2 {
font-size: 26px;
letter-spacing: -0.85px;
font-weight: 650;
line-height: 1.3;
color: #192a3d;
}
h3 {
font-size: 16px;
letter-spacing: -0.25px;
line-height: 1.4;
font-weight: 650;
}
h4 {
font-size: 14px;
line-height: 1.5;
}
p {
line-height: 1.7;
}
small {
font-size: 12px;
line-height: 1.5;
}
svg {
flex-shrink: 0;
vertical-align: middle;
}
code {
font-size: 12px;
overflow-wrap: anywhere;
}
.app {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 238px;
background: var(--navy);
color: #a5b1c0;
position: fixed;
inset: 0 auto 0 0;
display: flex;
flex-direction: column;
z-index: 40;
padding: 34px 18px 20px;
}
.brand {
display: flex;
align-items: center;
gap: 11px;
color: #fff;
margin: 0 12px 43px;
font-family: Montserrat, Inter, ui-sans-serif, sans-serif;
font-size: 23px;
font-weight: 700;
letter-spacing: -0.9px;
}
.brand-mark {
display: grid;
place-items: center;
width: 39px;
height: 42px;
}
.brand-light {
color: #d0dbdf;
}
.brand small {
display: block;
font-size: 8px;
font-weight: 500;
letter-spacing: 0.4em;
text-transform: uppercase;
color: #7f90a4;
margin-top: 6px;
}
.nav-label {
font-size: 9px;
letter-spacing: 1.8px;
font-weight: 650;
margin: 0 17px 15px;
color: #677a91;
}
.nav-item {
width: 100%;
border: 0;
background: transparent;
color: #9caabd;
display: flex;
align-items: center;
gap: 12px;
text-align: left;
padding: 13px 15px;
margin-bottom: 5px;
border-radius: 7px;
font-size: 13px;
font-weight: 500;
}
.nav-item:hover {
background: #1b2c40;
color: #fff;
}
.nav-item.active {
background: #203b3d;
color: #75d6b7;
box-shadow: inset 3px 0 #58bd9b;
}
.nav-item.active svg {
color: #75d6b7;
}
.nav-settings {
border-top: 1px solid #243348;
border-radius: 0;
margin-top: 22px;
padding-top: 23px;
}
.nav-ai {
font-size: 9px;
color: #7db6a9;
border: 1px solid #3b575c;
padding: 2px 4px;
border-radius: 4px;
margin-left: auto;
}
.sidebar-bottom {
margin-top: auto;
border-top: 1px solid #243348;
padding: 23px 12px 2px;
display: flex;
gap: 11px;
color: #5f9c8d;
}
.sidebar-bottom strong {
display: block;
font-size: 11px;
color: #acb9c8;
font-weight: 500;
}
.sidebar-bottom span {
display: block;
font-size: 10px;
color: #6c7d92;
margin-top: 5px;
}
.main-shell {
margin-left: 238px;
width: calc(100% - 238px);
min-width: 0;
}
.topbar {
height: 78px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 38px;
border-bottom: 1px solid var(--line);
background: #ffffffdc;
gap: 15px;
}
.breadcrumb {
display: flex;
gap: 15px;
align-items: center;
font-size: 12px;
color: #8390a0;
}
.breadcrumb strong {
font-weight: 500;
color: #344258;
}
.breadcrumb-divider {
color: #c5cdd6;
}
.topbar-actions {
display: flex;
align-items: center;
gap: 20px;
}
.local-status {
font-size: 11px;
color: #657689;
display: flex;
align-items: center;
gap: 7px;
}
.local-status > span {
height: 6px;
width: 6px;
background: #36a682;
border-radius: 50%;
box-shadow: 0 0 0 3px #eaf7f1;
}
.avatar {
border: 1px solid #dce8e2;
width: 34px;
height: 34px;
background: #eaf3ef;
border-radius: 50%;
color: #39816a;
display: grid;
place-items: center;
}
main {
padding: 36px 38px 0;
max-width: 1800px;
margin: 0 auto;
outline: none;
min-height: calc(100vh - 78px);
}
.section-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
margin-bottom: 27px;
}
.section-heading p {
color: var(--muted);
font-size: 13px;
margin-top: 7px;
}
.button {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 8px;
border: 1px solid transparent;
border-radius: 6px;
min-height: 38px;
padding: 9px 15px;
font-size: 12px;
font-weight: 600;
white-space: nowrap;
}
.button.primary {
background: var(--emerald);
color: #fff;
box-shadow: 0 2px 3px #123a2610;
}
.button.primary:hover:not(:disabled) {
background: var(--emerald-dark);
}
.button.secondary {
background: #fff;
color: #415164;
border-color: #dde3ea;
box-shadow: 0 1px 2px #10203805;
}
.button.secondary:hover:not(:disabled) {
background: #f7f9fb;
border-color: #becad6;
}
.button.subtle {
background: transparent;
color: #667688;
padding: 7px 10px;
}
.button.subtle:hover:not(:disabled) {
background: #edf3f3;
color: #137a5b;
}
.button.destructive {
background: var(--danger);
color: #fff;
}
.icon-button {
display: inline-grid;
place-items: center;
width: 32px;
height: 32px;
border: 0;
background: transparent;
color: #758394;
border-radius: 5px;
padding: 5px;
}
.icon-button:hover:not(:disabled) {
background: #edf2f6;
color: #263d55;
}
.icon-button.danger:hover {
background: #fff0ef;
color: var(--danger);
}
.filters {
display: flex;
align-items: end;
gap: 12px;
flex-wrap: wrap;
padding: 17px 18px;
background: #fff;
border: 1px solid var(--line);
border-radius: 9px;
margin-bottom: 24px;
box-shadow: 0 1px 2px #1c314705;
}
.filters .field {
flex: 1;
min-width: 126px;
max-width: 250px;
gap: 6px;
}
.filters .field > span {
font-size: 10px;
font-weight: 600;
letter-spacing: 0.3px;
color: #7d8797;
}
.filters input,
.filters select {
height: 35px;
font-size: 11px;
padding: 7px 9px;
background: #fcfdfe;
}
.filter-reset {
height: 35px;
min-height: 35px;
margin-left: auto;
}
.field {
display: flex;
flex-direction: column;
gap: 8px;
color: #35485c;
font-size: 12px;
font-weight: 550;
}
.field small {
font-weight: 400;
color: var(--muted);
font-size: 11px;
}
.field input,
.field select,
.field textarea {
border: 1px solid #dbe2ea;
border-radius: 5px;
min-height: 39px;
padding: 10px 11px;
width: 100%;
min-width: 0;
color: #33445a;
background: #fff;
font-weight: 400;
}
.field input[readonly] {
background: #f4f6f8;
color: #738090;
}
.field textarea {
resize: vertical;
line-height: 1.6;
}
.field input[type="file"] {
font-size: 12px;
background: #f8fafb;
border-style: dashed;
padding: 20px 12px;
}
.field input[type="file"]::file-selector-button {
background: #fff;
border: 1px solid #cfdadf;
border-radius: 4px;
padding: 8px 10px;
color: #3b5265;
margin-right: 12px;
}
.panel {
background: var(--surface);
border: 1px solid var(--line);
border-radius: 9px;
box-shadow: 0 2px 4px #10223403;
min-width: 0;
margin-bottom: 24px;
overflow: hidden;
}
.panel-heading {
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
padding: 22px 24px;
}
.panel-heading h3 svg {
margin-right: 6px;
color: #6e8d87;
}
.panel-heading p {
color: #8b95a2;
font-size: 11px;
margin-top: 5px;
}
.panel-heading > svg {
color: #8eaaa0;
}
.stat-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(178px, 1fr));
gap: 20px;
}
.stat {
padding: 22px 24px;
}
.stat-top {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 12px;
color: #7b8797;
}
.stat-icon {
width: 33px;
height: 33px;
display: grid;
place-items: center;
border-radius: 8px;
background: #edf7f2;
color: #3d9b7e;
}
.stat-icon.expenses {
background: #faf0eb;
color: #c18466;
}
.stat-icon.net {
background: #eff2fa;
color: #7985b2;
}
.stat-value {
display: block;
font-weight: 650;
font-size: 27px;
letter-spacing: -0.8px;
margin: 15px 0 11px;
overflow-wrap: anywhere;
font-variant-numeric: tabular-nums;
}
.stat small {
color: #8d98a7;
font-size: 10px;
}
.positive {
color: var(--emerald);
}
.dashboard-grid {
display: grid;
grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
gap: 24px;
}
.dashboard-grid.thirds {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.dashboard-grid.flipped {
grid-template-columns: minmax(0, 1fr) minmax(0, 1.35fr);
}
.dashboard-grid.even {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.chart-panel {
overflow: hidden;
}
.dashboard-grid .panel {
height: calc(100% - 24px);
}
.eyebrow {
display: block;
font-size: 10px;
letter-spacing: 1.4px;
text-transform: uppercase;
font-weight: 650;
color: #819387;
}
.group-list {
padding: 0 24px 16px;
}
.group-row {
border: 0;
background: transparent;
width: 100%;
text-align: left;
padding: 8px 0 11px;
display: block;
border-radius: 4px;
}
.group-row:hover {
background: #f7faf9;
}
.group-row > div:first-child {
display: flex;
justify-content: space-between;
gap: 15px;
font-size: 11px;
margin-bottom: 9px;
color: #56667b;
}
.group-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.group-row strong {
font-size: 11px;
font-weight: 600;
white-space: nowrap;
color: #42556a;
}
.group-track {
height: 5px;
background: #edf3f1;
border-radius: 10px;
overflow: hidden;
}
.group-track span {
display: block;
height: 100%;
background: #64b99c;
border-radius: 10px;
}
.group-row small {
display: block;
font-size: 9px;
color: #93a0ac;
margin-top: 5px;
}
.compact-empty {
padding: 34px 24px 43px;
color: #929ba7;
text-align: center;
font-size: 12px;
}
.welcome {
display: flex;
align-items: center;
justify-content: space-between;
background: linear-gradient(110deg, #f3faf6, #fff);
padding: 35px 40px;
}
.welcome-copy {
max-width: 480px;
}
.welcome h3 {
font-size: 31px;
font-weight: 600;
letter-spacing: -1px;
color: #23483d;
margin: 14px 0;
}
.welcome p {
font-size: 12px;
color: #74897e;
margin-bottom: 21px;
}
.welcome-art {
display: flex;
flex-direction: column;
align-items: center;
gap: 26px;
color: #56a486;
padding: 35px;
}
.welcome-art > svg {
box-sizing: content-box;
padding: 30px;
border: 1px solid #dceee4;
border-radius: 30px;
background: #e8f4ed;
transform: rotate(-7deg);
}
.welcome-art span {
font-size: 10px;
letter-spacing: 1px;
}
.empty {
padding: 53px 24px;
text-align: center;
display: flex;
align-items: center;
flex-direction: column;
gap: 10px;
}
.empty-icon {
color: #8ea7a0;
width: 62px;
height: 62px;
background: #f0f6f3;
border-radius: 18px;
display: grid;
place-items: center;
margin-bottom: 7px;
}
.empty h3 {
font-size: 15px;
color: #526878;
}
.empty > div:last-child {
color: #8a96a4;
font-size: 12px;
line-height: 1.8;
max-width: 360px;
}
.muted {
color: var(--muted);
}
.small {
font-size: 11px;
}
.small svg {
margin-right: 5px;
}
.text-danger {
color: var(--danger);
}
.badge {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 4px 7px;
background: #edf7f1;
color: #528471;
border-radius: 4px;
font-size: 10px;
font-weight: 500;
white-space: nowrap;
}
.badge.neutral {
background: #f0f3f7;
color: #7c8999;
}
.chips {
display: flex;
flex-wrap: wrap;
gap: 4px;
margin-top: 5px;
}
.panel-toolbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
padding: 17px 23px;
border-bottom: 1px solid var(--line);
}
.search {
display: flex;
align-items: center;
gap: 9px;
max-width: 460px;
flex: 1;
color: #9aa6b3;
}
.search input {
border: 0;
outline: none;
background: transparent;
min-width: 0;
width: 100%;
font-size: 12px;
color: #46596a;
padding: 7px 0;
}
.search:focus-within {
outline: 2px solid #9ed8c7;
outline-offset: 5px;
border-radius: 3px;
}
.search input::placeholder {
color: #9aa6b3;
}
.toolbar-select {
height: 35px;
font-size: 11px;
padding: 0 9px;
border: 1px solid #dbe2ea;
border-radius: 5px;
background: #fff;
color: #46596a;
flex-shrink: 0;
}
.table-scroll {
overflow-x: auto;
}
table {
border-collapse: collapse;
width: 100%;
text-align: left;
font-size: 12px;
}
th {
background: #fbfcfd;
font-size: 9px;
text-transform: uppercase;
letter-spacing: 0.8px;
font-weight: 600;
color: #8792a1;
padding: 14px 23px;
white-space: nowrap;
border-bottom: 1px solid var(--line);
}
td {
padding: 17px 23px;
border-bottom: 1px solid #edf1f4;
vertical-align: middle;
color: #607084;
}
tr:last-child td {
border-bottom: 0;
}
td small {
display: block;
color: #9aa4b1;
font-size: 10px;
margin-top: 5px;
}
tbody tr:hover {
background: #fcfefd;
}
.numeric {
text-align: right;
}
.money {
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
.nowrap {
white-space: nowrap;
}
.transaction-link {
display: flex;
gap: 12px;
align-items: center;
background: none;
border: 0;
padding: 0;
text-align: left;
color: #45596e;
}
.transaction-link strong {
display: block;
font-size: 12px;
font-weight: 550;
}
.transaction-link:hover strong {
color: var(--emerald);
text-decoration: underline;
}
.transaction-icon {
width: 34px;
height: 34px;
background: #f0f3f7;
border-radius: 9px;
display: grid;
place-items: center;
flex-shrink: 0;
color: #899aab;
}
.transaction-icon.income {
background: #eef7f1;
color: #72a58c;
}
.transaction-icon.transfer {
background: #f0effa;
color: #9992bb;
}
.description {
max-width: 310px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.pagination {
display: flex;
justify-content: space-between;
align-items: center;
padding: 14px 22px;
border-top: 1px solid var(--line);
font-size: 10px;
color: #8994a2;
}
.pagination > div {
display: flex;
align-items: center;
gap: 12px;
}
.registry {
padding: 7px 24px;
}
.registry-row {
display: flex;
gap: 20px;
align-items: center;
min-height: 74px;
border-bottom: 1px solid #edf1f4;
}
.registry-row:last-child {
border-bottom: 0;
}
.registry-label {
display: flex;
align-items: center;
gap: 13px;
flex: 1;
min-width: 0;
}
.registry-label svg {
color: #86a095;
}
.registry-label strong {
font-size: 13px;
font-weight: 550;
display: block;
overflow-wrap: anywhere;
}
.registry-label small {
display: block;
color: #9aa4af;
margin-top: 4px;
font-size: 10px;
}
.registry-detail {
font-size: 11px;
max-width: 30%;
}
.row-actions {
display: flex;
gap: 5px;
align-items: center;
}
.modal {
border: 1px solid #dce5eb;
border-radius: 12px;
padding: 0;
color: #34495d;
width: 520px;
max-width: calc(100vw - 30px);
max-height: calc(100dvh - 40px);
box-shadow: 0 25px 100px #08162155;
overflow: auto;
}
.modal.wide {
width: 800px;
}
.modal::backdrop {
background: #0c1c32a6;
backdrop-filter: blur(3px);
}
.modal-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 21px 25px;
border-bottom: 1px solid var(--line);
position: sticky;
top: 0;
background: #fff;
z-index: 2;
}
.modal-header h2 {
font-size: 19px;
letter-spacing: -0.4px;
}
.form-body {
display: flex;
flex-direction: column;
gap: 20px;
padding: 24px;
}
.form-body > p {
font-size: 12px;
}
.form-actions {
display: flex;
gap: 10px;
justify-content: flex-end;
align-items: center;
padding: 18px 24px;
border-top: 1px solid var(--line);
background: #fafcfd;
position: sticky;
bottom: 0;
z-index: 1;
}
.two-columns {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 18px;
}
.tag-picker {
border: 1px solid var(--line);
border-radius: 6px;
padding: 13px;
display: flex;
flex-wrap: wrap;
gap: 8px;
margin: 0;
}
.tag-picker legend {
font-size: 12px;
color: #546779;
padding: 0 5px;
}
/* Inline tag creation inside the picker: a small input plus one button, so a
missing tag never forces a detour through the Tags page. */
.tag-add {
display: inline-flex;
align-items: center;
gap: 5px;
}
.tag-add input {
width: 140px;
padding: 6px 9px;
font-size: 12px;
}
.tag-add-error {
flex-basis: 100%;
color: var(--danger);
font-size: 12px;
}
.check-chip {
display: inline-flex;
align-items: center;
gap: 7px;
padding: 7px 10px;
background: #f6f9f8;
border: 1px solid #e1eae6;
border-radius: 5px;
font-size: 11px;
}
.checkbox {
display: flex;
align-items: flex-start;
gap: 9px;
font-size: 12px;
line-height: 1.7;
color: #526578;
}
.checkbox input,
.check-chip input,
.preview-row > input {
accent-color: var(--emerald);
width: 15px;
height: 15px;
flex-shrink: 0;
margin: 2px 0;
}
.alert {
display: flex;
align-items: center;
gap: 12px;
padding: 15px 18px;
border-radius: 7px;
font-size: 12px;
margin-bottom: 20px;
line-height: 1.6;
overflow-wrap: anywhere;
}
.alert p {
font-size: 12px;
}
.alert.error {
background: #fff1ef;
border: 1px solid #f2d8d3;
color: #a44e43;
}
.alert.warning {
background: #fff9e9;
border: 1px solid #eadfb8;
color: #9b7e40;
}
.alert > span,
.alert > div {
flex: 1;
}
.alert .button {
margin-left: auto;
}
.form-body .alert {
margin-bottom: 0;
}
.toast {
display: flex;
align-items: center;
gap: 10px;
padding: 13px 17px;
background: #eaf7f0;
border: 1px solid #cbe7d9;
border-radius: 7px;
color: #287557;
font-size: 12px;
margin-bottom: 20px;
}
.toast span {
flex: 1;
}
.transaction-summary {
display: flex;
justify-content: space-between;
align-items: center;
gap: 20px;
background: #f6f9f8;
padding: 20px;
border-radius: 7px;
}
.transaction-summary h3 {
margin: 7px 0;
font-size: 15px;
overflow-wrap: anywhere;
}
.transaction-summary p {
color: #8b98a5;
font-size: 11px;
}
/* A headline figure with the split that produced it underneath: the smaller
line has to leave the money's line rather than flow beside it. */
.figure {
text-align: right;
}
.figure small {
display: block;
margin-top: 5px;
color: #8b95a2;
font-size: 11px;
}
.large-money {
font-size: 22px;
font-weight: 600;
white-space: nowrap;
letter-spacing: -0.5px;
}
details {
border: 1px solid var(--line);
border-radius: 6px;
padding: 14px;
}
summary {
font-size: 12px;
font-weight: 550;
cursor: pointer;
color: #617286;
}
summary .badge {
margin-left: 8px;
}
.facts {
margin: 18px 0 0;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 13px 20px;
}
.facts > div {
min-width: 0;
}
.facts dt {
font-size: 10px;
text-transform: capitalize;
color: #97a1ad;
margin-bottom: 4px;
}
.facts dd {
margin: 0;
font-size: 11px;
line-height: 1.6;
overflow-wrap: anywhere;
color: #627185;
}
.account-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 20px;
}
.account-card {
padding: 23px 23px 12px;
}
.account-card-heading {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 18px;
}
.account-icon {
width: 42px;
height: 42px;
display: grid;
place-items: center;
background: #f0f6f4;
color: #6d9b8d;
border-radius: 10px;
}
.account-card > p {
font-size: 11px;
color: #93a0ad;
margin-top: 5px;
}
.account-iban {
display: block;
font-size: 10px;
color: #9da8b2;
overflow-wrap: anywhere;
margin-top: 10px;
}
.balance-area {
padding: 24px 0;
min-height: 65px;
}
.balance-area > div + div {
margin-top: 10px;
}
.balance-area small {
font-size: 10px;
color: #91a196;
display: block;
text-transform: capitalize;
}
.balance-area strong {
font-size: 23px;
font-weight: 600;
color: #35584e;
letter-spacing: -0.5px;
overflow-wrap: anywhere;
}
.account-actions {
display: flex;
align-items: center;
justify-content: space-between;
border-top: 1px solid var(--line);
padding-top: 10px;
}
.session-list {
padding: 0 24px 15px;
}
.session {
display: flex;
justify-content: space-between;
gap: 20px;
padding: 17px 0;
border-top: 1px solid var(--line);
}
.session strong {
font-size: 12px;
}
.session small {
display: block;
color: #8293a0;
font-size: 10px;
margin: 6px 0;
}
.session code {
font-size: 10px;
color: #9ca8b1;
}
.session > div:last-child {
display: flex;
gap: 5px;
flex-wrap: wrap;
align-content: center;
}
.privacy-banner {
display: flex;
gap: 16px;
padding: 21px 24px;
background: #ecf5f1;
border: 1px solid #d7e8df;
color: #568272;
border-radius: 8px;
margin-bottom: 25px;
}
.privacy-banner > svg {
margin-top: 2px;
}
.privacy-banner strong {
font-size: 13px;
color: #3f6e5e;
}
.privacy-banner p {
font-size: 11px;
margin-top: 6px;
max-width: 850px;
}
.classification-setup {
max-width: 760px;
}
.classification-setup .form-body {
padding-top: 3px;
}
.preview-summary {
display: flex;
flex-wrap: wrap;
gap: 28px;
padding: 10px 0 27px;
color: #8995a3;
font-size: 11px;
}
.preview-summary strong {
font-size: 21px;
font-weight: 600;
margin-right: 5px;
color: #425e50;
}
.preview-row {
display: flex;
align-items: flex-start;
gap: 14px;
padding: 23px;
border-top: 1px solid var(--line);
cursor: pointer;
}
.preview-row.selected {
background: #fbfefc;
}
.preview-row > div {
flex: 1;
min-width: 0;
}
.preview-row > div > strong {
font-size: 12px;
display: block;
overflow-wrap: anywhere;
}
.preview-row > div > small {
font-size: 9px;
display: block;
margin-top: 5px;
overflow-wrap: anywhere;
}
.diff {
display: grid;
grid-template-columns: 1fr 18px 1fr;
gap: 18px;
align-items: center;
margin-top: 20px;
}
.diff > svg {
color: #a6b3ac;
}
.diff-value {
padding: 14px;
background: #f4f6f8;
border: 1px solid #e8edf0;
border-radius: 6px;
align-self: stretch;
}
.diff-value:last-child {
background: #eef8f2;
border-color: #daede2;
}
.diff-value dl {
font-size: 11px;
margin-bottom: 0;
}
.diff-value dl > div {
margin-top: 10px;
}
.diff-value dt {
font-size: 9px;
color: #919caa;
margin-bottom: 3px;
}
.diff-value dd {
margin: 0;
overflow-wrap: anywhere;
color: #587063;
}
.privacy-copy {
padding-top: 4px;
gap: 8px;
}
.privacy-copy h4:not(:first-child) {
margin-top: 9px;
}
.privacy-copy h4 {
font-size: 12px;
color: #62786c;
}
.privacy-copy p {
font-size: 11px;
color: #8a97a3;
line-height: 1.8;
}
.health-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 24px;
padding: 0 24px 26px;
}
.health {
display: flex;
gap: 12px;
align-items: flex-start;
}
.health strong {
font-size: 12px;
font-weight: 550;
}
.health p {
font-size: 11px;
color: #8e9ba9;
overflow-wrap: anywhere;
margin-top: 5px;
}
.index-controls {
border-top: 1px solid var(--line);
padding: 24px;
display: flex;
align-items: center;
gap: 25px;
justify-content: space-between;
}
.index-controls h4 {
font-size: 13px;
}
.index-controls h4 svg {
margin-right: 7px;
color: #8d9f95;
}
.index-controls p {
font-size: 11px;
color: #8c98a4;
margin-top: 6px;
max-width: 650px;
}
.revision-details {
margin: 0 24px 24px;
}
.revision-details code {
display: block;
margin: 15px 0 10px;
}
.loading-block {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
min-height: 330px;
color: #7b8c9b;
font-size: 13px;
}
.spinner {
width: 22px;
height: 22px;
border: 2px solid #e1e9e5;
border-top-color: var(--emerald);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
.spin {
animation: spin 1.2s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.progress-track {
height: 8px;
border-radius: 4px;
background: #e1e9e5;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: 4px;
background: var(--emerald);
transition: width 0.6s ease;
}
footer {
display: flex;
justify-content: space-between;
padding: 20px 0 27px;
margin-top: 15px;
border-top: 1px solid #e6ebf0;
font-size: 9px;
color: #a2abb6;
letter-spacing: 0.3px;
}
footer span:first-child {
font-weight: 600;
color: #8f9daa;
}
.mobile-toggle {
display: none;
}
.skip-link {
position: fixed;
top: -80px;
left: 255px;
padding: 14px;
background: #fff;
color: #1b7558;
z-index: 100;
border-radius: 5px;
}
.skip-link:focus {
top: 10px;
}
.nav-backdrop {
display: none;
}
.fatal {
max-width: 700px;
margin: 12vh auto;
padding: 30px;
}
.fatal h1 {
font-size: 24px;
margin-bottom: 18px;
}
.fatal p {
color: #77899b;
margin-bottom: 20px;
}
@media (min-width: 1600px) {
main {
padding: 42px 55px 0;
}
.topbar {
padding: 0 55px;
}
.filters {
flex-wrap: nowrap;
}
.filters .field {
min-width: 115px;
}
.stat-value {
font-size: 32px;
}
}
@media (max-width: 1200px) {
.sidebar {
width: 210px;
padding-left: 13px;
padding-right: 13px;
}
.brand {
margin-left: 8px;
font-size: 22px;
}
.main-shell {
margin-left: 210px;
width: calc(100% - 210px);
}
main {
padding: 28px 25px 0;
}
.topbar {
padding: 0 25px;
}
.filters .field {
min-width: 135px;
max-width: none;
}
.stat {
padding: 18px;
}
.stat-value {
font-size: 23px;
}
.dashboard-grid {
grid-template-columns: 1.2fr 1fr;
gap: 18px;
}
.dashboard-grid.flipped,
.dashboard-grid.even {
gap: 18px;
}
.dashboard-grid.thirds {
grid-template-columns: 1fr 1fr;
}
.dashboard-grid.thirds > .panel:last-child {
grid-column: 1 / -1;
}
.account-grid {
grid-template-columns: 1fr 1fr;
}
.panel-heading {
padding: 20px;
}
.group-list {
padding-left: 20px;
padding-right: 20px;
}
.description {
max-width: 220px;
}
.registry-detail {
display: none;
}
}
@media (max-width: 900px) {
.sidebar {
width: 188px;
}
.brand {
font-size: 19px;
gap: 6px;
margin-left: 2px;
}
.brand small {
font-size: 7px;
}
.nav-item {
font-size: 11px;
padding: 12px 11px;
gap: 9px;
}
.main-shell {
margin-left: 188px;
width: calc(100% - 188px);
}
main {
padding: 25px 20px 0;
}
.topbar {
padding: 0 20px;
}
.section-heading {
align-items: flex-start;
}
.section-heading h2 {
font-size: 23px;
}
.section-heading p {
font-size: 11px;
}
.stat-grid {
gap: 12px;
}
.stat-value {
font-size: 19px;
}
.stat {
padding: 15px;
}
.stat-top {
font-size: 10px;
}
.stat small {
font-size: 9px;
}
.dashboard-grid,
.dashboard-grid.flipped,
.dashboard-grid.even {
grid-template-columns: 1fr;
}
.dashboard-grid.thirds {
grid-template-columns: 1fr 1fr;
}
.dashboard-grid .panel {
height: auto;
margin-bottom: 0;
}
.dashboard-grid {
margin-bottom: 24px;
}
.panel-toolbar > .small {
display: none;
}
.welcome {
padding: 25px;
}
.welcome-art {
display: none;
}
.preview-summary {
gap: 18px;
}
.account-grid {
gap: 15px;
}
.account-card {
padding: 19px 16px 10px;
}
.balance-area strong {
font-size: 20px;
}
.two-columns {
gap: 13px;
}
.transaction-summary {
flex-direction: column;
align-items: flex-start;
}
.health-grid {
gap: 20px;
}
}
@media (max-width: 680px) {
.sidebar {
transform: translateX(-100%);
width: 238px;
transition: transform 0.2s;
}
/* With the classification select beside the review toggle, the search
would shrink to a sliver on phones; give it its own full-width row. */
.panel-toolbar {
flex-wrap: wrap;
}
.search {
flex-basis: 100%;
max-width: none;
}
.sidebar.open {
transform: translateX(0);
}
.brand {
font-size: 23px;
margin-left: 12px;
}
.brand small {
font-size: 8px;
}
.nav-item {
font-size: 13px;
padding: 13px 15px;
gap: 12px;
}
.main-shell {
margin: 0;
width: 100%;
}
.mobile-toggle {
display: inline-grid;
}
.topbar {
height: 65px;
padding: 0 16px;
}
.breadcrumb {
gap: 10px;
font-size: 11px;
}
.breadcrumb > span:first-of-type,
.breadcrumb-divider {
display: none;
}
.topbar-actions {
gap: 10px;
}
.local-status {
display: none;
}
main {
padding: 24px 16px 0;
}
.section-heading {
gap: 13px;
margin-bottom: 22px;
}
.section-heading h2 {
font-size: 22px;
}
.section-heading > .button {
padding: 8px 10px;
font-size: 10px;
min-height: 35px;
}
.section-heading > div {
min-width: 0;
}
.section-heading p {
font-size: 11px;
line-height: 1.6;
}
.filters {
padding: 13px;
gap: 11px;
border-radius: 7px;
}
.filters .field {
min-width: calc(50% - 12px);
}
.filter-reset {
min-width: calc(50% - 12px);
}
.stat-grid {
grid-template-columns: 1fr;
gap: 0;
}
.stat {
padding: 18px 21px;
position: relative;
margin-bottom: 12px;
}
.stat-value {
font-size: 26px;
margin: 9px 0 6px;
}
.stat-top {
font-size: 11px;
}
.stat-icon {
position: absolute;
right: 21px;
top: 22px;
width: 36px;
height: 36px;
}
.stat small {
font-size: 10px;
}
.stat-grid {
margin-bottom: 12px;
}
.dashboard-grid.thirds {
grid-template-columns: 1fr;
}
.dashboard-grid.thirds > .panel:last-child {
grid-column: auto;
}
.panel-heading {
padding: 19px 18px;
align-items: flex-start;
}
.panel-heading p {
font-size: 10px;
}
.panel-heading .badge {
font-size: 8px;
}
.panel {
border-radius: 8px;
margin-bottom: 20px;
}
.group-list {
padding: 0 18px 15px;
}
.form-body {
padding: 20px;
gap: 18px;
}
.form-actions {
padding: 15px 20px;
gap: 9px;
}
.form-actions .button {
font-size: 11px;
}
.registry {
padding: 5px 13px;
}
.registry-row {
gap: 6px;
}
.registry-label {
gap: 8px;
}
.registry-label strong {
font-size: 12px;
}
.registry-label svg {
width: 15px;
}
.registry-row .icon-button {
width: 28px;
}
.registry-label small {
font-size: 9px;
max-width: 160px;
overflow: hidden;
text-overflow: ellipsis;
}
.account-grid {
grid-template-columns: 1fr;
gap: 0;
}
.account-card {
padding: 21px 22px 12px;
}
.account-card-heading {
margin-bottom: 13px;
}
.balance-area {
padding: 17px 0;
}
.account-actions {
margin-top: 5px;
}
.two-columns {
grid-template-columns: 1fr;
}
.facts {
grid-template-columns: 1fr;
}
.diff {
grid-template-columns: 1fr;
gap: 9px;
}
.diff > svg {
transform: rotate(90deg);
justify-self: center;
}
.preview-row {
padding: 18px 15px;
gap: 10px;
}
.preview-summary {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 18px;
font-size: 10px;
}
.preview-summary strong {
font-size: 20px;
}
.privacy-banner {
padding: 18px;
gap: 12px;
}
.privacy-banner > svg {
width: 20px;
}
.privacy-banner p {
font-size: 10px;
}
.privacy-banner strong {
font-size: 12px;
}
.health-grid {
grid-template-columns: 1fr;
padding: 0 20px 24px;
}
.index-controls {
flex-direction: column;
align-items: flex-start;
padding: 20px;
gap: 17px;
}
.revision-details {
margin: 0 20px 20px;
}
.session {
flex-direction: column;
gap: 12px;
}
.session-list {
padding: 0 20px 15px;
}
.modal {
max-width: calc(100vw - 20px);
max-height: calc(100dvh - 20px);
}
.modal-header {
padding: 17px 20px;
}
.modal-header h2 {
font-size: 18px;
}
.alert {
flex-wrap: wrap;
padding: 13px;
font-size: 11px;
gap: 9px;
}
.alert p {
font-size: 11px;
}
.toast {
font-size: 11px;
padding: 10px 12px;
}
.alert .button {
margin-left: 0;
}
.nav-backdrop {
display: block;
position: fixed;
inset: 0;
z-index: 35;
background: #0c1c32a6;
border: 0;
backdrop-filter: blur(2px);
}
.skip-link {
left: 15px;
}
.welcome h3 {
font-size: 27px;
}
.welcome {
padding: 25px;
}
.panel-toolbar {
padding: 14px 17px;
}
th,
td {
padding-left: 18px;
padding-right: 18px;
}
footer {
font-size: 8px;
padding-top: 15px;
}
.large-money {
font-size: 22px;
}
.loading-block {
min-height: 260px;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
transition: none !important;
scroll-behavior: auto !important;
}
}
.connection-status {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 9px;
margin-top: 17px;
}
.connection-status small {
font-size: 10px;
color: #8b98a5;
overflow-wrap: anywhere;
}
.connection-status .text-danger {
color: var(--danger);
}
.connection-warning {
background: #fff4dd;
color: #9c743c;
}
.connection-status .button {
font-size: 10px;
min-height: 30px;
padding: 6px 10px;
}
.callback-details {
margin: 0 24px;
padding: 17px;
background: #f5f8fa;
border: 1px solid var(--line);
border-radius: 6px;
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
.callback-details .field {
width: 100%;
}
.callback-details input {
font-family: ui-monospace, monospace;
font-size: 10px;
}
.callback-details p {
font-size: 10px;
color: #8b98a5;
}
.callback-details code {
font-size: 10px;
}
.combo {
position: relative;
}
.combo > input {
width: 100%;
padding-right: 40px;
border: 1px solid #dbe2ea;
border-radius: 5px;
min-height: 39px;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 11px;
min-width: 0;
color: #33445a;
background: #fff;
font-weight: 400;
}
.combo-adornment {
position: absolute;
right: 11px;
top: 50%;
transform: translateY(-50%);
pointer-events: none;
display: flex;
}
.combo-adornment img,
.combo-adornment svg {
width: 22px;
height: 22px;
object-fit: contain;
}
.combo-options {
position: absolute;
z-index: 30;
top: calc(100% + 4px);
left: 0;
right: 0;
margin: 0;
padding: 4px;
list-style: none;
background: #fff;
border: 1px solid #dbe2ea;
border-radius: 8px;
box-shadow: 0 10px 30px #10223418;
max-height: 264px;
overflow-y: auto;
}
.combo-option {
display: flex;
width: 100%;
align-items: center;
gap: 10px;
padding: 8px 10px;
border: 0;
background: none;
border-radius: 6px;
cursor: pointer;
text-align: left;
font-size: 13px;
color: inherit;
}
.combo-option:hover,
.combo-option.active,
.combo-option[aria-selected="true"] {
background: #f0f7f4;
}
.combo-option img,
.combo-option svg {
width: 22px;
height: 22px;
object-fit: contain;
flex: none;
color: var(--muted);
}
.combo-empty {
padding: 8px 10px;
color: var(--muted);
font-size: 12px;
}
.combo-option.create {
color: var(--emerald);
font-weight: 600;
}
.combo-option.create svg {
width: 14px;
height: 14px;
}
.combo-empty.error {
color: var(--danger);
}
/* The proposed side of a review row is editable in place: compact combobox
inputs so a correction fits the diff card, removable chips for tags. */
.diff-value .combo > input {
min-height: 31px;
padding: 6px 24px 6px 9px;
font-size: 12px;
}
.diff-value .combo-option {
font-size: 12px;
padding: 6px 9px;
}
.diff-edit-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
min-height: 22px;
}
.diff-edit-head .button {
padding: 2px 8px;
font-size: 10px;
}
.tag-edit {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
}
.tag-edit .combo {
flex: 1;
min-width: 130px;
}
.tag-chip {
display: inline-flex;
align-items: center;
gap: 5px;
border: 1px solid #cfe4da;
background: #fff;
color: #2c6d57;
border-radius: 20px;
padding: 3px 5px 3px 10px;
font-size: 11px;
font-weight: 600;
}
.tag-chip svg {
color: #7fa295;
}
.tag-chip:hover svg {
color: var(--danger);
}
.date-select {
position: relative;
}
.date-trigger {
display: flex;
align-items: center;
gap: 8px;
width: 100%;
min-height: 39px;
padding: 10px 11px;
border: 1px solid #dbe2ea;
border-radius: 5px;
background: #fff;
color: #33445a;
font-weight: 400;
cursor: pointer;
text-align: left;
}
.date-trigger:hover {
border-color: #c2d3ce;
}
.date-trigger svg {
color: #8ba59d;
}
.filters .date-trigger {
height: 35px;
min-height: 35px;
font-size: 11px;
padding: 7px 9px;
background: #fcfdfe;
}
.date-placeholder {
color: #93a0ad;
}
.date-popover {
position: absolute;
z-index: 30;
top: calc(100% + 4px);
left: 0;
width: 252px;
padding: 10px;
background: #fff;
border: 1px solid #dbe2ea;
border-radius: 8px;
box-shadow: 0 10px 30px #10223418;
}
.date-nav {
display: flex;
align-items: center;
gap: 5px;
margin-bottom: 8px;
}
.date-nav select {
flex: 1;
min-width: 0;
height: 30px;
min-height: 30px;
padding: 4px 6px;
border: 1px solid #e3e9ef;
border-radius: 5px;
background: #fff;
color: #33445a;
font-size: 12px;
font-weight: 400;
}
.date-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 2px;
}
.date-weekday {
text-align: center;
font-size: 10px;
font-weight: 600;
color: #93a0ad;
padding-bottom: 3px;
}
.date-day {
height: 29px;
border: 0;
border-radius: 5px;
background: none;
color: #35485c;
font-size: 12px;
cursor: pointer;
}
.date-day:hover:not(:disabled) {
background: #f0f7f4;
}
.date-day:disabled {
color: #c4ccd4;
cursor: not-allowed;
}
.date-day.today {
box-shadow: inset 0 0 0 1px #b9ded0;
}
.date-day.selected {
background: var(--emerald);
color: #fff;
font-weight: 600;
}
.date-actions {
display: flex;
gap: 6px;
margin-top: 8px;
}
.date-actions .button {
flex: 1;
min-height: 30px;
font-size: 11px;
}
.category-tree {
padding: 0 17px 23px;
}
.category-line {
display: flex;
align-items: center;
gap: 3px;
min-height: 43px;
border-bottom: 1px solid #f0f3f5;
}
.category-line .icon-button {
width: 24px;
height: 28px;
}
.tree-spacer {
width: 24px;
flex-shrink: 0;
}
.category-drill {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
flex: 1;
min-width: 0;
background: none;
border: 0;
text-align: left;
padding: 8px 0;
color: #5f7366;
font-size: 11px;
}
.category-drill:hover {
color: var(--emerald);
}
.category-drill > span:first-child {
overflow-wrap: anywhere;
}
.category-drill strong {
font-size: 10px;
font-weight: 550;
display: block;
line-height: 1.8;
color: #687b88;
}
.category-drill > span:last-child {
text-align: right;
}
.category-node .button.subtle {
font-size: 10px;
}
.negative {
color: var(--danger);
}
.link {
border: 0;
background: transparent;
padding: 0;
color: #2b6f8a;
font: inherit;
text-align: left;
border-radius: 3px;
}
.link:hover {
color: var(--emerald-dark);
text-decoration: underline;
}
.filter-bar {
background: var(--surface);
border: 1px solid var(--line);
border-radius: 9px;
margin-bottom: 24px;
box-shadow: 0 1px 2px #1c314705;
}
.range-row {
display: flex;
align-items: center;
gap: 13px;
padding: 14px 18px 0;
}
.range-row .chips {
margin-top: 0;
gap: 5px;
}
.range-row .filter-reset {
margin-left: auto;
}
.filter-bar .filters {
border: 0;
box-shadow: none;
border-radius: 0;
margin-bottom: 0;
padding-top: 13px;
background: transparent;
}
.chip {
border: 1px solid #dde4ea;
background: #fcfdfe;
color: #61717f;
border-radius: 20px;
padding: 5px 12px;
font-size: 11px;
font-weight: 600;
letter-spacing: 0.2px;
}
.chip:hover:not(.active) {
border-color: #b9cfc6;
color: #2c6d57;
}
.chip.active {
background: var(--emerald);
border-color: var(--emerald);
color: #fff;
}
.currency-switch {
display: flex;
gap: 6px;
margin-bottom: 18px;
}
.stat-icon.rate {
background: #f3f0fa;
color: #8a7fb0;
}
.stat-trend {
display: inline-flex;
align-items: center;
gap: 5px;
font-size: 10px;
color: #8d98a7;
}
.stat-trend strong {
font-weight: 650;
font-variant-numeric: tabular-nums;
}
.stat-trend.better {
color: #2e8064;
}
.stat-trend.worse {
color: #a9554f;
}
/* Charts are drawn at measured pixel width, so the body only needs to be a
positioning context for the hover tooltip and to clip a stale wide SVG. */
.chart-body {
position: relative;
padding: 4px 20px 22px;
overflow: hidden;
}
.chart-body svg {
display: block;
overflow: visible;
}
.chart-axis {
font-size: 10px;
fill: #8e99a7;
font-variant-numeric: tabular-nums;
}
.chart-axis.strong {
font-size: 11px;
font-weight: 600;
fill: #56667b;
}
.chart-tip {
position: absolute;
top: 4px;
transform: translateX(-50%);
background: #16283c;
color: #eef3f7;
border-radius: 7px;
padding: 9px 11px;
font-size: 11px;
min-width: 178px;
pointer-events: none;
box-shadow: 0 6px 18px #10223426;
z-index: 2;
}
.chart-tip strong {
display: block;
font-size: 11px;
font-weight: 650;
margin-bottom: 6px;
}
.chart-tip span {
display: flex;
align-items: center;
gap: 7px;
color: #b9c6d2;
line-height: 1.85;
}
.chart-tip span b {
margin-left: auto;
color: #fff;
font-weight: 600;
font-variant-numeric: tabular-nums;
}
.chart-tip i {
width: 8px;
height: 8px;
border-radius: 2px;
flex: none;
}
.chart-tip em {
display: block;
margin-top: 5px;
font-style: normal;
color: #8ea0b1;
font-size: 10px;
}
.flow-node.drill {
cursor: pointer;
}
.flow-node.drill:hover rect {
opacity: 0.75;
}
.flow-node.drill:hover .flow-name {
fill: var(--emerald-dark);
}
.flow-name {
font-size: 11px;
font-weight: 600;
fill: #37495d;
}
.flow-value {
font-size: 10px;
fill: #8b96a4;
font-variant-numeric: tabular-nums;
}
.flow-trunk {
font-size: 11px;
font-weight: 650;
fill: #46586c;
font-variant-numeric: tabular-nums;
}
.share-body {
display: flex;
align-items: center;
gap: 26px;
padding: 6px 24px 24px;
flex-wrap: wrap;
}
.share-body svg {
flex: none;
}
.donut-total {
font-size: 17px;
font-weight: 700;
fill: var(--navy);
font-variant-numeric: tabular-nums;
}
.donut-caption {
font-size: 10px;
letter-spacing: 1.2px;
text-transform: uppercase;
fill: #94a0ad;
}
.share-legend {
flex: 1;
min-width: 190px;
}
.share-row {
display: flex;
align-items: center;
gap: 9px;
width: 100%;
border: 0;
background: transparent;
text-align: left;
padding: 6px 4px;
border-radius: 4px;
font-size: 11px;
color: #50606f;
}
.share-row:hover:not(:disabled) {
background: #f7faf9;
}
.share-row i {
width: 9px;
height: 9px;
border-radius: 2px;
flex: none;
}
.share-row span {
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.share-row b {
font-weight: 650;
color: var(--navy);
font-variant-numeric: tabular-nums;
}
.share-row em {
font-style: normal;
color: #8b96a4;
font-size: 10px;
min-width: 84px;
text-align: right;
font-variant-numeric: tabular-nums;
}
.mover-list {
padding: 0 24px 16px;
}
.mover-row {
border: 0;
background: transparent;
width: 100%;
text-align: left;
padding: 9px 0 11px;
display: block;
border-radius: 4px;
}
.mover-row:hover {
background: #f7faf9;
}
.mover-row small {
color: #93a0ad;
font-size: 10px;
font-variant-numeric: tabular-nums;
}
.mover-head {
display: flex;
justify-content: space-between;
gap: 14px;
font-size: 11px;
margin-bottom: 8px;
color: #46586c;
}
.mover-head > span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-weight: 550;
}
.mover-head strong {
font-size: 11px;
font-weight: 650;
white-space: nowrap;
}
.mover-track {
height: 5px;
background: #eef2f5;
border-radius: 10px;
overflow: hidden;
margin-bottom: 6px;
}
.mover-track span {
display: block;
height: 100%;
border-radius: 10px;
}
.mover-track span.up {
background: #d09090;
}
.mover-track span.down {
background: #7cc0a8;
}
.group-track span.out {
background: #d09090;
}
.stat-notes {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 3px;
}
@media (max-width: 680px) {
.range-row {
flex-wrap: wrap;
padding: 13px 13px 0;
gap: 9px;
}
.range-row .filter-reset {
margin-left: 0;
}
.chart-body {
padding: 4px 12px 18px;
}
.share-body {
padding: 6px 16px 20px;
gap: 16px;
justify-content: center;
}
.mover-list {
padding: 0 18px 15px;
}
.chart-tip {
min-width: 150px;
font-size: 10px;
}
}
.anchor-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}