:root { color: #161616; background: #f5e8d8; font-family: "Microsoft YaHei", "PingFang SC", "Segoe UI", Arial, sans-serif; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } * { box-sizing: border-box; } body { min-width: 320px; min-height: 100vh; margin: 0; overflow: hidden; } button { font: inherit; } .wea-right-menu-show { display: none !important; } .wea-right-menu, .wea-right-menu-show { display: none !important; } .dashboard-shell { position: relative; min-height: 100vh; background: #f5e8d8; overflow: hidden; } .watermark-layer { position: absolute; inset: -30px; z-index: 0; display: grid; grid-template-columns: repeat(4, minmax(260px, 1fr)); grid-auto-rows: 128px; align-items: center; pointer-events: none; color: rgba(150, 140, 128, 0.2); font-size: 16px; letter-spacing: 0; transform: rotate(-18deg); } .watermark-layer span { display: block; white-space: nowrap; } .workspace { position: relative; z-index: 1; display: grid; grid-template-columns: minmax(540px, 52vw) 1fr; grid-template-rows: auto minmax(0, 1fr); gap: 12px 28px; height: 100vh; padding: 30px 28px 18px 64px; } .chart-area { display: grid; grid-template-rows: minmax(0, 1fr); min-width: 0; } .chart-title { display: flex; align-items: center; justify-content: center; gap: 6px; } .chart-title h1 { margin: 0; font-size: 16px; font-weight: 500; letter-spacing: 0; line-height: 1; } .chart-title button { display: grid; width: 18px; height: 18px; place-items: center; padding: 0; border: 1px solid rgba(95, 88, 80, 0.18); border-radius: 2px; color: #6d6258; background: rgba(255, 249, 241, 0.36); cursor: pointer; transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, transform 120ms ease, box-shadow 120ms ease; } .chart-title button:hover { border-color: rgba(0, 120, 168, 0.36); color: #0078a8; background: rgba(255, 252, 248, 0.94); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .chart-title button:active { transform: translateY(1px); } .chart-title button:focus-visible { outline: 2px solid rgba(0, 120, 168, 0.34); outline-offset: 2px; } .chart-title button span { position: relative; width: 11px; height: 11px; } .chart-title button span::before { position: absolute; top: 5px; left: 1px; width: 10px; height: 1px; background: currentColor; transform: rotate(-35deg); content: ""; } .chart-title button span::after { position: absolute; right: 1px; bottom: 1px; width: 4px; height: 1px; background: currentColor; content: ""; } .chart-frame { position: relative; min-width: 0; min-height: 0; padding: 16px 0 0; } .chart-filter-bar { display: flex; align-items: center; gap: 8px; min-width: 0; overflow: hidden; justify-content: center; } .chart-filter-bar--workspace { grid-column: 1 / -1; position: relative; z-index: 2; margin: 0 28px 0 64px; padding-right: 58px; } .chart-filter-button, .chart-filter-clear { display: inline-flex; align-items: center; gap: 6px; height: 32px; max-width: 136px; padding: 0 10px; border: 1px solid rgba(90, 82, 72, 0.18); border-radius: 3px; color: #46413b; background: rgba(255, 249, 241, 0.76); font-size: 13px; line-height: 30px; white-space: nowrap; cursor: pointer; } .chart-filter-icon { flex: 0 0 14px; width: 14px; height: 14px; display: block; color: currentColor; } .chart-filter-button span { min-width: 0; overflow: hidden; text-overflow: ellipsis; } .chart-filter-button strong { display: inline-grid; min-width: 18px; height: 18px; place-items: center; padding: 0 5px; border-radius: 9px; color: #fff; background: #0078a8; font-size: 12px; font-weight: 600; line-height: 18px; } .chart-filter-button:hover, .chart-filter-button[aria-pressed="true"], .chart-filter-clear:hover { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.96); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .chart-filter-clear { flex: 0 0 auto; color: #7a3f2b; } .workspace:fullscreen { position: relative; z-index: 10; display: grid; grid-template-columns: minmax(540px, 52vw) 1fr; grid-template-rows: auto minmax(0, 1fr); gap: 12px 28px; width: 100vw; height: 100vh; padding: 8px 28px 18px 64px; background: #f5e8d8; } .workspace:fullscreen .chart-area { min-height: 0; } .workspace:fullscreen .right-panel { display: block; min-width: 0; height: 100%; } .workspace:fullscreen .chart-filter-bar--workspace { margin: 0; padding-right: 0; } .chart-frame > div { height: 100%; } .chart-frame > .statistic-switcher-menu, .chart-frame > .chart-status { height: auto; } .chart-loading-mask { position: absolute; inset: 16px 0 0; z-index: 13; display: flex; align-items: center; justify-content: center; background: rgba(255, 248, 240, 0.58); backdrop-filter: blur(1px); } .chart-loading-panel { min-width: 120px; padding: 10px 14px; border: 1px solid rgba(90, 82, 72, 0.16); border-radius: 3px; color: #262a33; background: rgba(255, 252, 248, 0.96); box-shadow: 0 6px 18px rgba(69, 54, 36, 0.12); font-size: 14px; line-height: 1.4; } .chart-frame .ag-charts-wrapper { --ag-charts-accent-color: #0078a8; --ag-charts-button-background-color: rgba(255, 249, 241, 0.72); --ag-charts-button-border-radius: 3px; --ag-charts-border-color: rgba(90, 82, 72, 0.22); --ag-charts-chrome-background-color: rgba(255, 249, 241, 0.84); } .chart-frame .ag-charts-toolbar { gap: 8px; padding: 0; background: transparent; border: 0; box-shadow: none; } .chart-frame .ag-charts-annotations__toolbar { left: -46px; top: 24px; overflow: visible !important; } .chart-frame .ag-charts-annotations__toolbar .ag-charts-toolbar { overflow: visible !important; } .statistic-switcher-menu { position: absolute; left: 70px; top: 24px; z-index: 14; width: max-content; min-width: 86px; padding: 4px 0; border: 1px solid rgba(90, 82, 72, 0.22); border-radius: 3px; background: #fbede1; box-shadow: 0 4px 14px rgba(69, 54, 36, 0.14); } .statistic-switcher-menu-item { display: block; width: 100%; min-height: 30px; padding: 0 12px; border: 0; color: #262a33; background: transparent; font-size: 13px; line-height: 30px; text-align: left; white-space: nowrap; cursor: pointer; } .statistic-switcher-menu-item:hover, .statistic-switcher-menu-item[aria-current="true"] { color: #0078a8; background: rgba(255, 252, 248, 0.94); } .chart-frame .chart-template-button, .chart-frame .chart-indicator-button, .chart-frame .chart-statistic-button { color: #46413b; } .chart-frame .ag-charts-myButton-template, .chart-frame .ag-charts-myButton-indicator { display: block; min-width: 16px; height: 16px; font-size: 14px; font-weight: 600; line-height: 16px; text-align: center; } .chart-frame .chart-template-button[aria-expanded="true"], .chart-frame .chart-indicator-button[aria-expanded="true"], .chart-frame .chart-statistic-button[aria-expanded="true"] { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.94); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .metric-switcher { position: absolute; left: 74px; top: 272px; z-index: 12; } .metric-switcher-button { display: block; width: 22px; min-height: 112px; padding: 8px 2px; border: 1px solid rgba(90, 82, 72, 0.16); border-radius: 3px; color: #111827; background: rgba(255, 241, 229, 0.68); font-size: 12px; letter-spacing: 2px; line-height: 1.25; text-align: center; cursor: pointer; transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, box-shadow 120ms ease; writing-mode: vertical-rl; text-orientation: upright; } .metric-switcher-button:hover, .metric-switcher-button[aria-expanded="true"] { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.94); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .metric-switcher-menu { position: absolute; left: 30px; top: 8px; width: max-content; min-width: 196px; padding: 4px 0; border: 1px solid rgba(90, 82, 72, 0.22); border-radius: 3px; background: #fbede1; box-shadow: 0 4px 14px rgba(69, 54, 36, 0.14); } .metric-switcher-menu-item { display: block; width: 100%; min-height: 30px; padding: 0 12px; border: 0; color: #262a33; background: transparent; font-size: 13px; line-height: 30px; text-align: left; white-space: nowrap; cursor: pointer; } .metric-switcher-menu-item:hover, .metric-switcher-menu-item[aria-current="true"] { color: #0078a8; background: rgba(255, 252, 248, 0.94); } .chart-status { position: absolute; top: 62px; left: 74px; z-index: 11; padding: 4px 8px; border: 1px solid rgba(90, 82, 72, 0.16); border-radius: 3px; color: #262a33; background: rgba(255, 252, 248, 0.94); font-size: 12px; line-height: 18px; } .chart-frame .ag-charts-zoom-buttons { top: auto !important; right: 24px !important; bottom: 34px !important; left: auto !important; width: auto !important; height: auto !important; z-index: 8; opacity: 0; pointer-events: none; transform: translateY(4px); transition: opacity 140ms ease, transform 140ms ease; } .chart-frame:hover .ag-charts-zoom-buttons, .chart-frame:focus-within .ag-charts-zoom-buttons, .chart-frame .ag-charts-zoom-buttons:focus-within { opacity: 1; pointer-events: auto; transform: translateY(0); } .chart-frame .ag-charts-zoom-buttons .ag-charts-toolbar { position: relative !important; z-index: 9; gap: 0; padding: 0; border: 0; border-radius: 3px; background: transparent; box-shadow: none; } .chart-frame .ag-charts-toolbar__button { width: 26px; height: 26px; color: #46413b; border-color: rgba(90, 82, 72, 0.22); background: rgba(255, 249, 241, 0.72); cursor: pointer; } .chart-frame .ag-charts-zoom-buttons .ag-charts-toolbar__button { width: 26px; height: 26px; min-width: 26px; min-height: 26px; padding: 3px; background: rgba(255, 249, 241, 0.72); } .chart-frame .ag-charts-toolbar__button:hover, .chart-frame .ag-charts-toolbar__button--active { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.94); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .chart-frame .ag-charts-myButton-fullScreen { position: relative; display: block; width: 16px; height: 16px; } .chart-frame .ag-charts-myButton-fullScreen::before, .chart-frame .ag-charts-myButton-fullScreen::after { position: absolute; inset: 0; display: block; width: 16px; height: 16px; content: ""; } .chart-frame .anticon-arrow-salt::before { border-top: 1px solid currentColor; border-right: 1px solid currentColor; clip-path: polygon(54% 0, 100% 0, 100% 46%, 86% 46%, 86% 14%, 54% 14%); } .chart-frame .anticon-arrow-salt::after { border-bottom: 1px solid currentColor; border-left: 1px solid currentColor; clip-path: polygon(0 54%, 14% 54%, 14% 86%, 46% 86%, 46% 100%, 0 100%); } .chart-frame .anticon-shrink::before { top: 2px; left: 2px; width: 6px; height: 6px; border-right: 1px solid currentColor; border-bottom: 1px solid currentColor; } .chart-frame .anticon-shrink::after { right: 2px; bottom: 2px; left: auto; top: auto; width: 6px; height: 6px; border-top: 1px solid currentColor; border-left: 1px solid currentColor; } .chart-frame .ag-charts-toolbar__button:disabled { cursor: not-allowed; opacity: 0.38; } .chart-frame .ag-charts-toolbar__button[aria-disabled="true"] { cursor: not-allowed; opacity: 0.38; } .right-panel { display: grid; grid-template-rows: auto minmax(0, 1fr); min-width: 0; height: 100%; max-height: 100%; padding-top: 24px; overflow: hidden; } .content-tabs { display: flex; align-items: center; gap: 6px; min-width: 0; padding-bottom: 12px; } .content-tab { height: 32px; padding: 0 12px; border: 1px solid rgba(90, 82, 72, 0.18); border-radius: 3px; color: #46413b; background: rgba(255, 249, 241, 0.62); font-size: 14px; line-height: 30px; white-space: nowrap; cursor: pointer; } .content-tab:hover, .content-tab[aria-selected="true"] { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.94); box-shadow: 0 1px 5px rgba(69, 54, 36, 0.12); } .content-tree-panel { min-width: 0; min-height: 0; max-height: 100%; overflow-y: auto; overflow-x: hidden; padding: 14px 6px 14px 0; border-top: 1px solid rgba(90, 82, 72, 0.14); } .content-tree-title { margin-bottom: 12px; color: #262a33; font-size: 18px; font-weight: 600; line-height: 24px; } .content-tree-list { margin: 0; padding: 0; list-style: none; } .content-tree-node { margin: 0; padding: 0; } .content-tree-row { display: flex; align-items: center; width: 100%; min-height: 42px; border-radius: 3px; color: #262a33; background: transparent; font-size: 17px; line-height: 42px; text-align: left; } .content-tree-row:hover { color: #0078a8; background: rgba(255, 252, 248, 0.74); } .content-tree-caret { display: inline-grid; width: 24px; height: 24px; place-items: center; flex: 0 0 24px; padding: 0; border: 0; color: #6f665e; background: transparent; font-size: 15px; line-height: 24px; cursor: pointer; } .content-tree-caret.is-leaf { color: transparent; cursor: default; } .content-tree-select { display: flex; align-items: center; min-width: 0; flex: 1 1 auto; gap: 10px; height: 38px; padding: 0 6px 0 2px; border: 0; border-radius: 3px; color: inherit; background: transparent; text-align: left; cursor: pointer; } .content-tree-select:disabled { cursor: default; } .content-tree-select:hover, .content-tree-select[aria-pressed="true"] { color: #0078a8; background: rgba(255, 252, 248, 0.78); } .content-tree-select:disabled:hover { color: inherit; background: transparent; } .content-tree-select[aria-pressed="true"] { font-weight: 600; } .content-tree-series-mark { width: 24px; height: 4px; flex: 0 0 24px; border-radius: 2px; opacity: 0.55; } .content-tree-select[aria-pressed="true"] .content-tree-series-mark { opacity: 1; } .content-tree-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .content-tree-loading { margin-left: 8px; color: #7a7067; font-size: 14px; } .content-tree-empty { padding: 16px 0; color: #7a7067; font-size: 17px; line-height: 24px; } .filter-modal-backdrop { position: fixed; inset: 0; z-index: 40; display: flex; align-items: center; justify-content: center; padding: 28px; background: rgba(35, 30, 25, 0.28); } .filter-modal { display: grid; grid-template-rows: auto auto auto minmax(0, 1fr) auto; width: min(560px, calc(100vw - 56px)); height: min(680px, calc(100vh - 56px)); min-height: 420px; border: 1px solid rgba(90, 82, 72, 0.2); border-radius: 6px; background: #fff7ef; box-shadow: 0 18px 50px rgba(35, 30, 25, 0.22); overflow: hidden; } .filter-modal-header { display: flex; align-items: center; justify-content: space-between; min-width: 0; padding: 16px 18px 12px; border-bottom: 1px solid rgba(90, 82, 72, 0.12); } .filter-modal-header h2 { margin: 0; color: #262a33; font-size: 18px; font-weight: 600; line-height: 24px; } .filter-modal-close { display: grid; width: 30px; height: 30px; place-items: center; padding: 0; border: 1px solid transparent; border-radius: 3px; color: #6d6258; background: transparent; font-size: 24px; line-height: 1; cursor: pointer; } .filter-modal-close:hover { color: #0078a8; border-color: rgba(0, 120, 168, 0.28); background: rgba(255, 252, 248, 0.9); } .filter-modal-search { padding: 12px 18px 8px; } .filter-modal-search input { width: 100%; height: 34px; padding: 0 10px; border: 1px solid rgba(90, 82, 72, 0.2); border-radius: 3px; color: #262a33; background: #fffdfa; font-size: 14px; outline: none; } .filter-modal-search input:focus { border-color: rgba(0, 120, 168, 0.46); box-shadow: 0 0 0 2px rgba(0, 120, 168, 0.12); } .filter-modal-selected { padding: 0 18px 8px; color: #6d6258; font-size: 13px; line-height: 20px; } .filter-modal-tree { min-height: 0; overflow: auto; padding: 4px 12px 12px; border-top: 1px solid rgba(90, 82, 72, 0.1); } .filter-tree-row { min-height: 36px; font-size: 15px; line-height: 36px; } .filter-tree-select { height: 32px; gap: 8px; } .filter-tree-check { position: relative; width: 16px; height: 16px; flex: 0 0 16px; border: 1px solid rgba(90, 82, 72, 0.32); border-radius: 3px; background: rgba(255, 252, 248, 0.82); } .filter-tree-select[aria-pressed="true"] .filter-tree-check { border-color: #0078a8; background: #0078a8; } .filter-tree-select[aria-pressed="true"] .filter-tree-check::after { position: absolute; left: 4px; top: 1px; width: 5px; height: 9px; border-right: 2px solid #fff; border-bottom: 2px solid #fff; transform: rotate(45deg); content: ""; } .filter-tree-select.is-empty-data { color: #8a8279; } .filter-tree-select.is-empty-data .content-tree-label { opacity: 0.58; } .filter-tree-select.is-empty-data .filter-tree-check { opacity: 0.62; } .filter-tree-empty-badge { flex: 0 0 auto; padding: 1px 5px; border: 1px solid rgba(122, 112, 103, 0.22); border-radius: 3px; color: #7a7067; background: rgba(255, 252, 248, 0.72); font-size: 12px; line-height: 18px; white-space: nowrap; } .filter-modal-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 18px 16px; border-top: 1px solid rgba(90, 82, 72, 0.12); } .filter-modal-actions button { height: 32px; min-width: 72px; padding: 0 14px; border: 1px solid rgba(90, 82, 72, 0.18); border-radius: 3px; background: rgba(255, 249, 241, 0.76); color: #46413b; font-size: 14px; cursor: pointer; } .filter-modal-actions button:hover { color: #0078a8; border-color: rgba(0, 120, 168, 0.36); background: rgba(255, 252, 248, 0.96); } .filter-modal-confirm { color: #fff !important; border-color: #0078a8 !important; background: #0078a8 !important; } .filter-modal-confirm:hover { background: #006f9b !important; } @media (max-width: 900px) { body { overflow: auto; } .workspace { grid-template-columns: 1fr; height: auto; min-height: 100vh; padding: 8px 18px 18px 56px; } .chart-area { min-height: 520px; } .right-panel { min-height: 280px; } .content-tabs { flex-wrap: wrap; } }