.workbench { --hero-padding-top: 26px; --hero-padding-bottom: 26px; --hero-title-size: 34px; --hero-copy-gap: 6px; --hero-title-bottom-gap: 18px; --trend-card-min-height: 260px; --capability-row-height: 116px; --workbench-ink: var(--ink, #1e293b); --workbench-text: var(--text, #334155); --workbench-muted: var(--muted, #64748b); --workbench-line: var(--line, #e2e8f0); --workbench-line-strong: var(--line-strong, #cbd5e1); --workbench-line-soft: color-mix(in srgb, var(--line, #e2e8f0) 58%, #fff); --workbench-surface: var(--surface, #fff); --workbench-surface-soft: var(--surface-soft, #f9fbff); --workbench-primary: var(--theme-primary, #3a7ca5); --workbench-primary-active: var(--theme-primary-active, #255b7d); --workbench-primary-soft: var(--theme-primary-soft, #eaf4fa); --workbench-secondary: var(--theme-secondary, #4f6f9f); --workbench-chart-blue: var(--chart-blue, #4f6f9f); --workbench-chart-purple: var(--chart-purple, #6e7fa6); --workbench-chart-amber: var(--chart-amber, #b58b4c); width: 100%; max-width: 1680px; margin: 0 auto; height: 100%; min-width: 0; display: flex; flex-direction: column; gap: 10px; overflow: visible; color: var(--workbench-ink); /* 恢复极简纯净的页面底层 */ background: transparent; background-color: var(--workbench-surface-soft); } .workbench :where(button) { font: inherit; } .workbench, .workbench * { box-sizing: border-box; } .workbench :where(button) { border: 0; background: transparent; cursor: pointer; } .workbench :where(button:disabled) { cursor: not-allowed; opacity: 0.7; } .workbench-trend-hero { position: relative; z-index: 2; flex: 0 0 var(--trend-card-min-height); height: var(--trend-card-min-height); min-height: 0; padding: 24px 28px; overflow: hidden; border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.16); border-radius: 12px; background: linear-gradient(120deg, rgba(255, 255, 255, 0.85), rgba(249, 252, 255, 0.7)), linear-gradient(135deg, rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08), transparent 68%); backdrop-filter: blur(12px) saturate(140%); -webkit-backdrop-filter: blur(12px) saturate(140%); box-shadow: 0 16px 32px rgba(15, 23, 42, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.94); animation: workbenchItemIn 520ms var(--ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both; animation-delay: 0ms; } .workbench-trend-card { position: relative; z-index: 1; display: grid; grid-template-columns: minmax(200px, 0.28fr) minmax(0, 1fr); align-items: stretch; gap: 16px; width: 100%; height: 100%; min-height: 0; padding: 0; overflow: hidden; border: 0; border-radius: 0; background: transparent; box-shadow: none; } .trend-summary-panel { display: flex; flex-direction: column; gap: 8px; min-width: 0; } .trend-summary-panel h1 { margin: 0 0 44px 0; color: var(--workbench-ink); font-size: var(--hero-title-size); line-height: 1.16; font-weight: 880; } .trend-summary-panel p { margin: 0 0 4px; color: var(--workbench-muted); font-size: 14px; font-weight: 650; } .trend-total { background: linear-gradient(110deg, var(--workbench-ink) 20%, var(--workbench-primary-active) 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; color: var(--workbench-ink); font-size: clamp(38px, 3.3vw, 54px); line-height: 1; font-weight: 860; letter-spacing: -0.5px; filter: drop-shadow(0 2px 8px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.12)); } .trend-change { display: inline-flex; align-items: center; gap: 5px; min-height: 26px; color: var(--workbench-primary-active); font-size: 13px; font-weight: 800; } .trend-change.is-down { color: #b45309; } .trend-summary-panel small { color: color-mix(in srgb, var(--workbench-muted) 80%, #ffffff); font-size: 12px; font-weight: 650; } .trend-chart-panel { display: grid; grid-template-rows: auto minmax(0, 1fr); align-content: stretch; gap: 8px; min-width: 0; min-height: 0; } .trend-chart-head { display: flex; align-items: center; justify-content: space-between; gap: 14px; min-width: 0; color: var(--workbench-ink); } .trend-chart-head strong { font-size: 15px; font-weight: 850; } .trend-chart-source { color: var(--workbench-muted); font-size: 13px; font-weight: 700; white-space: nowrap; } .workbench-trend-chart { min-height: 0; } .capability-grid { position: relative; z-index: 1; flex: 0 0 var(--capability-row-height); display: grid; gap: 16px; min-height: 0; } .capability-grid--privileged { grid-template-columns: repeat(6, minmax(0, 1fr)); } .capability-grid--standard { grid-template-columns: repeat(4, minmax(0, 1fr)); } .capability-card { position: relative; isolation: isolate; display: grid; grid-template-columns: 44px minmax(0, 1fr) 18px; align-items: center; gap: 16px; min-height: 0; padding: 18px 20px 18px 24px; overflow: visible; text-align: left; border: 1px solid rgba(255, 255, 255, 0.9); border-left: 3px solid color-mix(in srgb, var(--capability-color) 80%, rgba(255, 255, 255, 0.9)); min-width: 0; background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.15); border-radius: 4px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.03), inset 0 1px 0 rgba(255, 255, 255, 1); color: var(--workbench-ink); text-decoration: none; animation: workbenchItemIn 560ms var(--ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both; animation-delay: var(--delay, 100ms); transition: border-color 180ms var(--ease), box-shadow 180ms var(--ease), color 180ms var(--ease), transform 180ms var(--ease); } .capability-card:hover { transform: translateY(-2px); border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.4); box-shadow: 0 16px 32px rgba(15, 23, 42, 0.06), inset 0 1px 0 rgba(255, 255, 255, 1); } .capability-card > * { position: relative; z-index: 1; } .capability-icon { --workbench-list-icon-size: 44px; --workbench-list-icon-art-size: 26px; width: 44px; height: 44px; color: var(--capability-color); } .capability-copy { min-width: 0; display: grid; justify-items: start; gap: 4px; text-align: left; } .capability-copy strong { color: var(--workbench-ink); font-size: 15px; font-weight: 850; line-height: 1.25; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-align: left; } .capability-copy small { overflow: hidden; color: var(--workbench-muted); font-size: 12.5px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; text-align: left; } .capability-arrow { justify-self: end; display: inline-flex; align-items: center; justify-content: center; width: 18px; min-width: 18px; color: color-mix(in srgb, var(--workbench-muted) 68%, #ffffff); font-size: 18px; line-height: 1; } .capability-card--green { --capability-color: var(--workbench-primary); --capability-soft: var(--workbench-primary-soft); } .capability-card--blue { --capability-color: var(--workbench-primary); --capability-soft: var(--workbench-primary-soft); } .capability-card--emerald { --capability-color: var(--workbench-primary); --capability-soft: var(--workbench-primary-soft); } .capability-card--violet { --capability-color: var(--workbench-primary); --capability-soft: var(--workbench-primary-soft); } .capability-card--cyan { --capability-color: var(--workbench-primary); --capability-soft: var(--workbench-primary-soft); } .capability-card--amber { --capability-color: var(--workbench-chart-amber); --capability-soft: color-mix(in srgb, var(--workbench-chart-amber) 12%, #ffffff); } .workbench-content-grid { flex: 1 1 auto; display: grid; grid-template-columns: minmax(640px, 1.8fr) minmax(260px, 0.55fr); gap: 14px; align-items: stretch; min-height: 0; overflow: hidden; } .workbench-card { position: relative; isolation: isolate; min-height: 0; height: 100%; padding: 12px 14px; background: rgba(255, 255, 255, 0.96); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.15); border-radius: 4px; box-shadow: 0 12px 28px rgba(15, 23, 42, 0.04), inset 0 1px 0 rgba(255, 255, 255, 1); animation: workbenchItemIn 560ms var(--ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both; animation-delay: var(--delay, 200ms); } .workbench-card > * { position: relative; z-index: 2; } .progress-panel, .side-panel { display: grid; grid-template-rows: auto minmax(0, 1fr); } .section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 24px; margin-bottom: 5px; } .section-head h2 { margin: 0; color: var(--workbench-ink); font-size: 16px; line-height: 1.25; font-weight: 850; } .progress-section-head { align-items: center; } .progress-range-select { width: 124px; flex: 0 0 124px; } .progress-range-select .el-select__wrapper { min-height: 32px; border-radius: 4px; box-shadow: 0 0 0 1px var(--workbench-line) inset; background: rgba(255, 255, 255, 0.86); } .progress-range-select .el-select__wrapper.is-focused, .progress-range-select .el-select__wrapper:hover { box-shadow: 0 0 0 1px rgba(var(--theme-primary-rgb, 58, 124, 165), 0.38) inset; } .title-with-badge { display: inline-flex; align-items: center; gap: 8px; min-width: 0; } .soft-badge { min-width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; padding: 0 7px; border-radius: 4px; background: var(--workbench-primary-soft); color: var(--workbench-primary-active); font-size: 13px; font-weight: 850; } .insight-metric-row { display: flex; align-items: center; gap: 10px; padding: 6px 14px; border-radius: 4px; background: color-mix(in srgb, var(--insight-color) 4%, transparent); transition: transform 180ms var(--ease), background-color 180ms var(--ease); animation: workbenchItemIn 480ms var(--ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both; animation-delay: calc(400ms + var(--item-index, 0) * 80ms); } .link-action { display: inline-flex; align-items: center; gap: 4px; color: var(--workbench-muted); font-size: 13px; font-weight: 800; white-space: nowrap; } .muted-link { color: var(--workbench-muted); } .progress-list { display: grid; min-height: 0; height: 100%; align-content: start; grid-auto-rows: minmax(56px, auto); overflow-x: hidden; overflow-y: auto; padding-right: 4px; scrollbar-width: thin; scrollbar-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.28) transparent; } .progress-list::-webkit-scrollbar { width: 6px; } .progress-list::-webkit-scrollbar-thumb { border-radius: 999px; background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.24); } .progress-empty-state { min-height: 220px; height: 100%; display: grid; place-items: center; align-content: center; gap: 8px; padding: 28px 18px; border: 1px dashed rgba(var(--theme-primary-rgb, 58, 124, 165), 0.22); border-radius: 4px; background: linear-gradient(180deg, rgba(255, 255, 255, 0.68), rgba(255, 255, 255, 0.42)), rgba(var(--theme-primary-rgb, 58, 124, 165), 0.025); color: var(--workbench-muted); text-align: center; } .progress-empty-icon { width: 42px; height: 42px; display: grid; place-items: center; border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18); border-radius: 4px; background: var(--workbench-primary-soft); color: var(--workbench-primary-active); font-size: 22px; } .progress-empty-state strong { color: var(--workbench-ink); font-size: 14px; font-weight: 850; } .progress-empty-state p { max-width: 260px; margin: 0; color: var(--workbench-muted); font-size: 12px; line-height: 1.55; } .progress-row:first-child { padding-top: 2px; border-top: 0; } .progress-row { animation: workbenchItemIn 480ms var(--ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both; animation-delay: calc(300ms + var(--item-index, 0) * 80ms); } .progress-identity { display: flex; flex-direction: column; gap: 2px; } .progress-result { display: flex; align-items: center; justify-content: flex-end; padding-right: 12px; } .progress-identity strong { margin-bottom: 2px; } .progress-identity strong, .progress-result strong { overflow: hidden; color: var(--workbench-ink); font-size: 13px; font-weight: bold; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; } .progress-identity small { overflow: hidden; color: var(--workbench-muted); font-size: 11.5px; line-height: 1.25; text-overflow: ellipsis; white-space: nowrap; } .progress-type { min-width: 0; display: grid; justify-self: stretch; justify-items: center; gap: 3px; text-align: center; } .progress-type small { color: var(--workbench-muted); font-size: 10px; font-weight: 750; line-height: 1.2; } .progress-type strong { max-width: 100%; overflow: hidden; display: inline-flex; align-items: center; justify-content: center; min-height: 22px; padding: 0 8px; border: 1px solid rgba(var(--theme-primary-rgb, 58, 124, 165), 0.18); border-radius: 4px; background: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.08); color: var(--workbench-primary-active); font-size: 11.5px; font-weight: 850; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; } .progress-status { display: inline-flex; align-items: center; justify-content: center; min-height: 20px; padding: 0 7px; border-radius: 4px; font-size: 11.5px; font-weight: 850; white-space: nowrap; } .progress-status--warning { background: var(--warning-soft, #fff7ed); color: var(--warning, #ea580c); } .progress-status--success { background: var(--workbench-primary-soft, #eaf4fa); color: var(--workbench-primary-active, #255b7d); } .progress-status--muted { background: var(--info-soft, #f1f5f9); color: var(--workbench-muted, #64748b); } .progress-status--danger { background: var(--danger-soft, #fef2f2); color: var(--danger, #dc2626); } .progress-row { position: relative; display: grid; grid-template-columns: minmax(118px, 0.58fr) minmax(132px, 0.74fr) minmax(84px, 0.42fr) minmax(260px, 1.28fr) minmax(92px, auto); align-items: center; gap: 12px; width: 100%; padding: 1px 0; border-top: 1px solid var(--workbench-line-soft); text-align: left; } .progress-time-wrapper { display: flex; align-items: center; gap: 14px; min-width: 0; } .expense-type-icon { display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; border-radius: 12px; font-size: 22px; flex-shrink: 0; position: relative; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.9), inset 0 -1px 0 rgba(0, 0, 0, 0.03); } .expense-type-icon::before { content: ""; position: absolute; inset: 0; background: linear-gradient(135deg, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%); border-radius: inherit; z-index: 0; } .expense-type-icon i { position: relative; z-index: 1; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.12)); } .expense-type-icon--blue { background: linear-gradient(135deg, color-mix(in srgb, var(--workbench-primary, #3a7ca5) 12%, #ffffff) 0%, color-mix(in srgb, var(--workbench-primary, #3a7ca5) 3%, #ffffff) 100%); border: 1px solid color-mix(in srgb, var(--workbench-primary, #3a7ca5) 20%, #ffffff); color: var(--workbench-primary, #3a7ca5); } .expense-type-icon--amber { background: linear-gradient(135deg, color-mix(in srgb, var(--workbench-chart-amber, #b58b4c) 12%, #ffffff) 0%, color-mix(in srgb, var(--workbench-chart-amber, #b58b4c) 3%, #ffffff) 100%); border: 1px solid color-mix(in srgb, var(--workbench-chart-amber, #b58b4c) 20%, #ffffff); color: var(--workbench-chart-amber, #b58b4c); } .expense-type-icon--emerald { background: linear-gradient(135deg, color-mix(in srgb, #0f8f68 12%, #ffffff) 0%, color-mix(in srgb, #0f8f68 3%, #ffffff) 100%); border: 1px solid color-mix(in srgb, #0f8f68 20%, #ffffff); color: #0f8f68; } .expense-type-icon--violet { background: linear-gradient(135deg, color-mix(in srgb, #6d5bd0 12%, #ffffff) 0%, color-mix(in srgb, #6d5bd0 3%, #ffffff) 100%); border: 1px solid color-mix(in srgb, #6d5bd0 20%, #ffffff); color: #6d5bd0; } .expense-type-icon--cyan { background: linear-gradient(135deg, color-mix(in srgb, #0788a2 12%, #ffffff) 0%, color-mix(in srgb, #0788a2 3%, #ffffff) 100%); border: 1px solid color-mix(in srgb, #0788a2 20%, #ffffff); color: #0788a2; } .expense-type-icon--muted { background: linear-gradient(135deg, var(--info-soft, #f1f5f9) 0%, #ffffff 100%); border: 1px solid var(--workbench-line); color: var(--workbench-muted, #64748b); } .progress-time, .progress-identity, .progress-type, .progress-result { min-width: 0; display: grid; gap: 2px; } .progress-time { color: var(--workbench-muted); justify-items: center; } .progress-time time { min-width: 0; overflow: hidden; color: var(--workbench-ink); font-size: 12px; font-weight: 850; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; } .progress-time small { color: var(--workbench-muted); font-size: 10px; font-weight: 750; line-height: 1.2; } .progress-time .time-capsule { margin-top: 4px; padding: 2px 6px; border-radius: 999px; background: var(--danger-soft, #fef2f2); color: var(--danger, #dc2626); font-weight: 850; line-height: 1.2; } .progress-result { justify-items: end; } .progress-steps { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: start; } .progress-step { position: relative; display: grid; justify-items: center; gap: 1px; color: color-mix(in srgb, var(--workbench-muted) 64%, #ffffff); } .progress-step::before { content: ""; position: absolute; top: 8px; left: calc(-50% + 12px); right: calc(50% + 12px); height: 2px; background: var(--workbench-line); } .progress-step:first-child::before { display: none; } .progress-step.is-done::before, .progress-step.is-current::before { background: var(--workbench-primary); } .progress-step i { position: relative; z-index: 1; width: 16px; height: 16px; display: grid; place-items: center; border: 2px solid var(--workbench-line); border-radius: 999px; background: var(--workbench-surface); color: var(--workbench-line-strong, #cbd5e1); font-size: 12px; line-height: 1; } .progress-step.is-done i { border-color: var(--workbench-primary); background: var(--workbench-primary-soft); color: var(--workbench-primary-active); } .progress-step.is-current i { border-color: var(--workbench-primary-active); background: var(--theme-primary-light-9); color: var(--workbench-primary-active); } .progress-step small { color: currentColor; font-size: 10px; font-weight: 750; line-height: 1.2; white-space: nowrap; } .progress-step.is-done, .progress-step.is-current { color: var(--workbench-ink); } .capability-card:hover, .progress-row:hover { border-color: rgba(var(--theme-primary-rgb, 58, 124, 165), 0.24); color: var(--workbench-primary-active); } @keyframes workbenchItemIn { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } @media (prefers-reduced-motion: reduce) { .workbench-trend-hero, .capability-card, .workbench-card { animation: none !important; } }