| |
| |
| |
|
|
| |
| :root { |
| |
| --md-sys-color-primary: #6750A4; |
| --md-sys-color-on-primary: #FFFFFF; |
| --md-sys-color-primary-container: #EADDFF; |
| --md-sys-color-on-primary-container: #21005D; |
|
|
| --md-sys-color-secondary: #625B71; |
| --md-sys-color-on-secondary: #FFFFFF; |
| --md-sys-color-secondary-container: #E8DEF8; |
| --md-sys-color-on-secondary-container: #1D192B; |
|
|
| --md-sys-color-tertiary: #7D5260; |
| --md-sys-color-on-tertiary: #FFFFFF; |
| --md-sys-color-tertiary-container: #FFD8E4; |
| --md-sys-color-on-tertiary-container: #31111D; |
|
|
| --md-sys-color-error: #B3261E; |
| --md-sys-color-on-error: #FFFFFF; |
| --md-sys-color-error-container: #F9DEDC; |
| --md-sys-color-on-error-container: #410E0B; |
|
|
| --md-sys-color-surface: #FFFBFE; |
| --md-sys-color-on-surface: #1C1B1F; |
| --md-sys-color-surface-variant: #E7E0EC; |
| --md-sys-color-on-surface-variant: #49454F; |
| --md-sys-color-outline: #79747E; |
| --md-sys-color-outline-variant: #CAC4D0; |
|
|
| --md-sys-color-background: #FFFBFE; |
| --md-sys-color-on-background: #1C1B1F; |
|
|
| --md-sys-color-surface-container-low: #F7F2FA; |
| --md-sys-color-surface-container: #F3EDF7; |
| --md-sys-color-surface-container-high: #ECE6F0; |
|
|
| |
| --md-elevation-level0: none; |
| --md-elevation-level1: 0 1px 2px 0 rgba(0,0,0,.3), 0 1px 3px 1px rgba(0,0,0,.15); |
| --md-elevation-level2: 0 1px 2px 0 rgba(0,0,0,.3), 0 2px 6px 2px rgba(0,0,0,.15); |
| --md-elevation-level3: 0 1px 3px 0 rgba(0,0,0,.3), 0 4px 8px 3px rgba(0,0,0,.15); |
|
|
| |
| --md-shape-corner-extra-small: 4px; |
| --md-shape-corner-small: 8px; |
| --md-shape-corner-medium: 12px; |
| --md-shape-corner-large: 16px; |
| --md-shape-corner-extra-large: 28px; |
| --md-shape-corner-full: 999px; |
|
|
| |
| --md-typescale-display-small: 400 2.25rem / 2.75rem Roboto, sans-serif; |
| --md-typescale-headline-medium: 400 1.75rem / 2.25rem Roboto, sans-serif; |
| --md-typescale-title-large: 400 1.375rem / 1.75rem Roboto, sans-serif; |
| --md-typescale-title-medium: 500 1rem / 1.5rem Roboto, sans-serif; |
| --md-typescale-title-small: 500 .875rem / 1.25rem Roboto, sans-serif; |
| --md-typescale-body-large: 400 1rem / 1.5rem Roboto, sans-serif; |
| --md-typescale-body-medium: 400 .875rem / 1.25rem Roboto, sans-serif; |
| --md-typescale-body-small: 400 .75rem / 1rem Roboto, sans-serif; |
| --md-typescale-label-large: 500 .875rem / 1.25rem Roboto, sans-serif; |
| --md-typescale-label-medium: 500 .75rem / 1rem Roboto, sans-serif; |
| --md-typescale-label-small: 500 .6875rem / 1rem Roboto, sans-serif; |
|
|
| --transition-standard: 200ms cubic-bezier(0.2, 0, 0, 1); |
| } |
|
|
| |
| @media (prefers-color-scheme: dark) { |
| :root { |
| --md-sys-color-primary: #D0BCFF; |
| --md-sys-color-on-primary: #381E72; |
| --md-sys-color-primary-container: #4F378B; |
| --md-sys-color-on-primary-container: #EADDFF; |
|
|
| --md-sys-color-secondary: #CCC2DC; |
| --md-sys-color-on-secondary: #332D41; |
| --md-sys-color-secondary-container: #4A4458; |
| --md-sys-color-on-secondary-container: #E8DEF8; |
|
|
| --md-sys-color-tertiary: #EFB8C8; |
| --md-sys-color-on-tertiary: #492532; |
| --md-sys-color-tertiary-container: #633B48; |
| --md-sys-color-on-tertiary-container: #FFD8E4; |
|
|
| --md-sys-color-error: #F2B8B5; |
| --md-sys-color-on-error: #601410; |
| --md-sys-color-error-container: #8C1D18; |
| --md-sys-color-on-error-container: #F9DEDC; |
|
|
| --md-sys-color-surface: #1C1B1F; |
| --md-sys-color-on-surface: #E6E1E5; |
| --md-sys-color-surface-variant: #49454F; |
| --md-sys-color-on-surface-variant: #CAC4D0; |
| --md-sys-color-outline: #938F99; |
| --md-sys-color-outline-variant: #49454F; |
|
|
| --md-sys-color-background: #1C1B1F; |
| --md-sys-color-on-background: #E6E1E5; |
|
|
| --md-sys-color-surface-container-low: #242329; |
| --md-sys-color-surface-container: #2B2930; |
| --md-sys-color-surface-container-high: #36343B; |
|
|
| --md-elevation-level1: 0 1px 2px 0 rgba(0,0,0,.3), 0 1px 3px 1px rgba(0,0,0,.15); |
| --md-elevation-level2: 0 1px 2px 0 rgba(0,0,0,.3), 0 2px 6px 2px rgba(0,0,0,.15); |
| --md-elevation-level3: 0 4px 8px 3px rgba(0,0,0,.15), 0 1px 3px 0 rgba(0,0,0,.3); |
| } |
| } |
|
|
| |
| *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } |
|
|
| body { |
| font: var(--md-typescale-body-medium); |
| color: var(--md-sys-color-on-background); |
| background: var(--md-sys-color-background); |
| -webkit-font-smoothing: antialiased; |
| } |
|
|
| .app { |
| min-height: 100dvh; |
| display: flex; |
| flex-direction: column; |
| } |
|
|
| |
| .top-bar { |
| position: sticky; top: 0; z-index: 10; |
| display: flex; align-items: center; justify-content: space-between; |
| height: 64px; padding: 0 24px; |
| background: var(--md-sys-color-surface-container); |
| border-bottom: 1px solid var(--md-sys-color-outline-variant); |
| } |
| .top-bar__start { display: flex; align-items: center; gap: 16px; } |
| .top-bar__title { |
| font: var(--md-typescale-title-large); |
| color: var(--md-sys-color-on-surface); |
| } |
| .top-bar__end { display: flex; align-items: center; gap: 12px; } |
|
|
| .icon--large { font-size: 28px !important; color: var(--md-sys-color-primary); } |
|
|
| .top-bar__refresh { |
| display: flex; align-items: center; justify-content: center; |
| width: 40px; height: 40px; border-radius: var(--md-shape-corner-full); |
| cursor: pointer; transition: background var(--transition-standard); |
| color: var(--md-sys-color-on-surface-variant); |
| } |
| .top-bar__refresh:hover { background: var(--md-sys-color-surface-variant); } |
| .top-bar__refresh:active { background: var(--md-sys-color-surface-container-high); } |
| .top-bar__refresh.spinning .material-symbols-rounded { |
| animation: spin 0.8s linear infinite; |
| } |
| @keyframes spin { to { transform: rotate(360deg); } } |
|
|
| |
| .chip { |
| display: inline-flex; align-items: center; gap: 6px; |
| padding: 4px 12px; height: 32px; |
| border: 1px solid var(--md-sys-color-outline); |
| border-radius: var(--md-shape-corner-small); |
| font: var(--md-typescale-label-large); |
| color: var(--md-sys-color-on-surface-variant); |
| background: transparent; |
| } |
| .chip .material-symbols-rounded { font-size: 18px; } |
| .chip--active { |
| border-color: var(--md-sys-color-primary); |
| color: var(--md-sys-color-primary); |
| background: var(--md-sys-color-primary-container); |
| transition: all var(--transition-standard); |
| } |
| .chip--active.has-connections { |
| border-color: var(--md-sys-color-error); |
| color: var(--md-sys-color-on-error-container); |
| background: var(--md-sys-color-error-container); |
| animation: pulse-chip 2s ease-in-out infinite; |
| } |
| @keyframes pulse-chip { |
| 0%, 100% { box-shadow: 0 0 0 0 rgba(179,38,30,0.4); } |
| 50% { box-shadow: 0 0 0 6px rgba(179,38,30,0); } |
| } |
| .chip__suffix { font: var(--md-typescale-label-small); opacity: 0.7; } |
|
|
| |
| .main-content { |
| flex: 1; |
| max-width: 1200px; width: 100%; |
| margin: 0 auto; padding: 24px; |
| display: flex; flex-direction: column; gap: 32px; |
| } |
|
|
| |
| .section { display: flex; flex-direction: column; gap: 16px; } |
| .section__header { |
| display: flex; align-items: center; justify-content: space-between; |
| } |
| .section__title { |
| font: var(--md-typescale-title-large); |
| color: var(--md-sys-color-on-surface); |
| } |
|
|
| |
| .segmented-btn-group { |
| display: flex; |
| border: 1px solid var(--md-sys-color-outline); |
| border-radius: var(--md-shape-corner-full); |
| overflow: hidden; |
| background: var(--md-sys-color-surface); |
| } |
| .segmented-btn { |
| all: unset; |
| display: flex; align-items: center; justify-content: center; |
| height: 36px; padding: 0 16px; |
| font: var(--md-typescale-label-large); |
| color: var(--md-sys-color-on-surface); |
| cursor: pointer; |
| transition: background var(--transition-standard), color var(--transition-standard); |
| position: relative; |
| } |
| .segmented-btn:hover { background: var(--md-sys-color-surface-variant); } |
| .segmented-btn.active { |
| background: var(--md-sys-color-secondary-container); |
| color: var(--md-sys-color-on-secondary-container); |
| } |
| .segmented-btn + .segmented-btn { border-left: 1px solid var(--md-sys-color-outline); } |
|
|
| |
| .card-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); |
| gap: 16px; |
| } |
| .chart-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); |
| gap: 16px; |
| } |
|
|
| @media (max-width: 480px) { |
| .card-grid { grid-template-columns: 1fr; } |
| .chart-grid { grid-template-columns: 1fr; } |
| } |
|
|
| |
| .card { |
| border-radius: var(--md-shape-corner-medium); |
| padding: 16px; |
| display: flex; flex-direction: column; gap: 12px; |
| } |
| .card--elevated { |
| background: var(--md-sys-color-surface-container-low); |
| box-shadow: var(--md-elevation-level1); |
| } |
| .card--filled { |
| background: var(--md-sys-color-surface-container-low); |
| } |
| .card__icon { |
| width: 40px; height: 40px; |
| display: flex; align-items: center; justify-content: center; |
| border-radius: var(--md-shape-corner-full); |
| } |
| .card__icon .material-symbols-rounded { font-size: 20px; } |
| .card__body { display: flex; flex-direction: column; } |
| .card__label { |
| font: var(--md-typescale-label-medium); |
| color: var(--md-sys-color-on-surface-variant); |
| } |
| .card__value { |
| font: var(--md-typescale-display-small); |
| color: var(--md-sys-color-on-surface); |
| } |
| .card__sub { |
| font: var(--md-typescale-body-small); |
| color: var(--md-sys-color-on-surface-variant); |
| margin-top: 4px; |
| } |
|
|
| .card__body--row { |
| flex-direction: row; align-items: baseline; gap: 8px; |
| } |
|
|
| .card__inout { |
| display: flex; gap: 6px; margin-top: 6px; font: var(--md-typescale-label-small); |
| } |
| .inout-item { |
| display: flex; align-items: center; gap: 4px; |
| padding: 2px 8px; border-radius: var(--md-shape-corner-extra-small); |
| } |
| .inout-item--in { |
| background: #D0E4FF; color: #1A3A6B; |
| } |
| .inout-item--out { |
| background: #D4EDDA; color: #155724; |
| } |
| @media (prefers-color-scheme: dark) { |
| .inout-item--in { |
| background: #1A3A6B; color: #D0E4FF; |
| } |
| .inout-item--out { |
| background: #155724; color: #D4EDDA; |
| } |
| } |
|
|
| |
| .chart-card { padding: 20px; min-height: 320px; } |
| .chart-title { |
| font: var(--md-typescale-title-medium); |
| color: var(--md-sys-color-on-surface); |
| margin-bottom: 8px; |
| } |
| .chart-wrap { flex: 1; position: relative; min-height: 0; } |
|
|
| |
| .table-card { padding: 0; overflow: hidden; } |
| .table-wrapper { overflow-x: auto; } |
|
|
| |
| .md-table { |
| width: 100%; border-collapse: collapse; |
| font: var(--md-typescale-body-medium); |
| } |
| .md-table thead { background: var(--md-sys-color-surface-container-high); } |
| .md-table th { |
| font: var(--md-typescale-label-medium); |
| color: var(--md-sys-color-on-surface-variant); |
| text-align: left; padding: 12px 16px; |
| white-space: nowrap; |
| } |
| .md-table th.r { text-align: right; } |
| .md-table td { |
| padding: 12px 16px; |
| color: var(--md-sys-color-on-surface); |
| border-bottom: 1px solid var(--md-sys-color-outline-variant); |
| white-space: nowrap; |
| } |
| .md-table td.r { |
| text-align: right; |
| font-family: 'Roboto Mono', monospace; |
| } |
| .md-table tbody tr:last-child td { border-bottom: none; } |
| .md-table tbody tr:hover { background: var(--md-sys-color-surface-variant); } |
| .md-table .empty { text-align: center; color: var(--md-sys-color-on-surface-variant); padding: 32px; } |
|
|
| .token-bar { |
| display: inline-block; |
| height: 6px; |
| border-radius: 3px; |
| background: var(--md-sys-color-primary); |
| vertical-align: middle; |
| margin-right: 6px; |
| } |
|
|
| |
| @media (max-width: 768px) { |
| .top-bar { padding: 0 16px; } |
| .main-content { padding: 16px; gap: 24px; } |
| .top-bar__title { font-size: 1.1rem; } |
| .card__value { font-size: 1.75rem; line-height: 2.25rem; } |
| } |
|
|