:root{--brand-primary: #2f6f4f;--brand-accent: #4c9a70;--brand-font: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--bg: #f4f6f8;--surface: #ffffff;--surface-2: #fafbfc;--sidebar: #ffffff;--border: #e3e7ec;--border-strong: #d3d9e0;--text: #1a2233;--text-2: #4d5768;--muted: #78839a;--primary: var(--brand-primary);--primary-weak: rgba(47, 111, 79, .09);--danger: #c0392b;--danger-weak: #fdecea;--warn: #b26a00;--warn-weak: #fdf3e0;--ok: #1d7a4d;--ok-weak: #e6f4ec;--info: #2563a8;--info-weak: #eaf2fb;--radius: 10px;--radius-sm: 7px;--shadow: 0 1px 2px rgba(20, 30, 50, .05), 0 4px 14px rgba(20, 30, 50, .045);--sidebar-w: 238px;--topbar-h: 58px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--brand-font);color:var(--text);background:var(--bg);font-size:14px;-webkit-font-smoothing:antialiased}.layout{display:flex;min-height:100vh}aside.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--sidebar);border-right:1px solid var(--border);position:fixed;inset:0 auto 0 0;display:flex;flex-direction:column;z-index:30}.brand-block{height:var(--topbar-h);display:flex;align-items:center;gap:9px;padding:0 18px;border-bottom:1px solid var(--border);font-weight:700;font-size:15.5px;color:var(--primary);letter-spacing:.2px}.brand-block img{height:24px;width:auto}.brand-block .plan{margin-left:auto;font-size:10.5px;font-weight:600;color:var(--muted);border:1px solid var(--border);padding:2px 7px;border-radius:20px;text-transform:uppercase}nav.menu{flex:1;overflow-y:auto;padding:14px 10px 24px}.menu-group{margin-bottom:16px}.menu-group>.group-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);padding:0 10px 6px}.nav-item{display:flex;align-items:center;gap:9px;width:100%;border:0;background:transparent;text-align:left;padding:7px 11px;margin-bottom:2px;border-radius:var(--radius-sm);font-size:13.5px;color:var(--text-2);cursor:pointer;position:relative;font-family:inherit}.nav-item:hover{background:var(--surface-2);color:var(--text)}.nav-item.active{background:var(--primary-weak);color:var(--primary);font-weight:600}.nav-item.active:before{content:"";position:absolute;left:-10px;top:6px;bottom:6px;width:3px;border-radius:0 3px 3px 0;background:var(--primary)}.nav-item .ico{width:16px;text-align:center;opacity:.75;flex:0 0 16px}.nav-item .pill{margin-left:auto;font-size:10.5px;font-weight:700;background:var(--warn-weak);color:var(--warn);border-radius:20px;padding:1px 7px}.sidebar-foot{border-top:1px solid var(--border);padding:12px 14px;font-size:11.5px;color:var(--muted)}main.main{flex:1;min-width:0;margin-left:var(--sidebar-w);display:flex;flex-direction:column}header.topbar{height:var(--topbar-h);position:sticky;top:0;z-index:20;background:#ffffffeb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 22px}.topbar .crumb{font-size:13px;color:var(--muted)}.topbar .spacer{flex:1}.content{padding:22px 24px 48px;max-width:1440px;width:100%}.page-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:18px}.page-head h1{margin:0 0 3px;font-size:20px;font-weight:700;letter-spacing:-.2px}.page-head .sub{color:var(--muted);font-size:13px;max-width:760px}.page-head .actions{margin-left:auto;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:17px 18px;margin-bottom:16px}.card.flat{box-shadow:none}.card h3{margin:0 0 12px;font-size:13.5px;font-weight:650;color:var(--text);display:flex;align-items:center;gap:10px}.card h3 .right{margin-left:auto;font-weight:400}.card>.basis{margin:-6px 0 12px;font-size:11.5px;color:var(--muted);background:var(--surface-2);border:1px dashed var(--border);border-radius:var(--radius-sm);padding:6px 10px}.grid{display:grid;gap:16px}.grid.cols-2{grid-template-columns:1fr 1fr}.grid.cols-3{grid-template-columns:repeat(3,1fr)}@media (max-width: 1100px){.grid.cols-2,.grid.cols-3{grid-template-columns:1fr}}.row{display:flex;gap:16px;flex-wrap:wrap;align-items:center}.kpi-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media (max-width: 1100px){.kpi-grid{grid-template-columns:repeat(2,1fr)}}.kpi-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px 15px}.kpi-card .label{font-size:11.5px;color:var(--muted);font-weight:600;letter-spacing:.3px}.kpi-card .num{font-size:26px;font-weight:700;margin-top:5px;font-variant-numeric:tabular-nums;letter-spacing:-.5px}.kpi-card .foot{font-size:11.5px;color:var(--muted);margin-top:4px}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border)}th{color:var(--muted);font-weight:600;font-size:11.5px;letter-spacing:.4px;text-transform:uppercase;position:sticky;top:0;background:var(--surface)}tbody tr:hover{background:var(--surface-2)}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}.tbl-wrap{overflow:auto;max-height:560px;border:1px solid var(--border);border-radius:var(--radius-sm)}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;border-radius:20px;font-size:11.5px;font-weight:600;white-space:nowrap}.badge:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.badge.ok,.badge.bound,.badge.succeeded{background:var(--ok-weak);color:var(--ok)}.badge.warn,.badge.review,.badge.dlq,.badge.pending{background:var(--warn-weak);color:var(--warn)}.badge.muted,.badge.unclassified,.badge.draft{background:#f0f1f4;color:#6b7383}.badge.info{background:var(--info-weak);color:var(--info)}.badge.danger,.badge.failed{background:var(--danger-weak);color:var(--danger)}input,select,textarea{padding:7px 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);font-size:13.5px;font-family:inherit;background:var(--surface);color:var(--text)}input:focus,select:focus,textarea:focus{outline:2px solid var(--primary-weak);border-color:var(--primary)}textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}label.field{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--text-2);font-weight:600}button{font-family:inherit;font-size:13.5px;border-radius:var(--radius-sm);cursor:pointer;padding:7px 14px;border:1px solid transparent;transition:background .14s,border-color .14s}button.primary{background:var(--primary);color:#fff}button.primary:hover{filter:brightness(1.07)}button.primary:disabled{opacity:.45;cursor:not-allowed}button.secondary{background:var(--surface);color:var(--text-2);border-color:var(--border-strong)}button.secondary:hover{background:var(--surface-2);color:var(--text)}button.danger{background:var(--surface);color:var(--danger);border-color:#f0c8c2}button.danger:hover{background:var(--danger-weak)}button.ghost{background:transparent;color:var(--muted)}button.ghost:hover{color:var(--text);background:var(--surface-2)}button.sm{padding:4px 10px;font-size:12.5px}.muted{color:var(--muted);font-size:13px}.small{font-size:12px}.error{color:var(--danger);font-size:13px;margin:8px 0}.ok-text{color:var(--ok)}.warn-text{color:var(--warn)}.danger-text{color:var(--danger)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px}.code-block{display:block;background:#f5f7f9;border:1px solid var(--border);padding:9px 11px;border-radius:var(--radius-sm);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;white-space:pre-wrap;word-break:break-all}.chart{width:100%;height:300px}.chart.tall{height:380px}.empty{text-align:center;color:var(--muted);padding:34px 12px;font-size:13px}.empty .ico{font-size:26px;opacity:.4;display:block;margin-bottom:8px}.skeleton{color:var(--muted);padding:20px 4px;font-size:13px}.callout{border-left:3px solid var(--info);background:var(--info-weak);padding:9px 13px;border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:12.5px;color:var(--text-2);margin-bottom:14px}.progress{height:7px;background:#ebeef1;border-radius:4px;overflow:hidden}.progress>i{display:block;height:100%;border-radius:4px;background:var(--primary);transition:width .3s}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg)}.login{width:380px;max-width:calc(100vw - 32px);background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow);padding:28px 26px}.login h2{margin:0 0 4px;font-size:19px}.login .brand-line{display:flex;align-items:center;gap:8px;margin-bottom:18px;font-weight:700;color:var(--primary)}.login .brand-line img{height:24px}.tabs{display:flex;gap:4px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:3px}.tab{flex:1;border:0;background:transparent;color:var(--muted);font-size:13px;padding:7px 8px;border-radius:8px;cursor:pointer}.tab:hover{color:var(--text)}.tab.active{background:var(--surface);color:var(--text);font-weight:600;box-shadow:var(--shadow)}.funnel-step{display:flex;align-items:center;gap:12px;margin-bottom:9px}.funnel-step .idx{width:22px;height:22px;border-radius:50%;background:var(--primary-weak);color:var(--primary);font-size:11.5px;font-weight:700;display:grid;place-items:center;flex:0 0 22px}.funnel-step .bar{flex:1;min-width:0}.funnel-step .bar .track{height:26px;background:#ebeef1;border-radius:5px;overflow:hidden}.funnel-step .bar .track>i{display:block;height:100%;background:var(--primary);border-radius:5px;transition:width .35s}.funnel-step .val{width:132px;flex:0 0 132px;text-align:right;font-variant-numeric:tabular-nums}.funnel-step .val b{font-size:13.5px}.funnel-step .val span{display:block;font-size:11.5px;color:var(--muted)}.heat-grid{display:grid;gap:2px}.heat-cell{aspect-ratio:1;border-radius:2px;background:#f0f3f6}.heat-legend{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--muted)}.heat-legend .grad{width:110px;height:9px;border-radius:4px;background:linear-gradient(90deg,#eef2ef,var(--primary))}footer.powered{text-align:center;color:var(--muted);font-size:12px;padding:14px}.landing{min-height:100vh;background:var(--bg)}.landing-header{display:flex;align-items:center;justify-content:space-between;padding:16px 32px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--panel);z-index:10}.landing-header nav{display:flex;gap:16px;align-items:center}.landing-header nav a{color:var(--text);text-decoration:none;font-size:14px}.hero{text-align:center;padding:96px 24px 72px;max-width:820px;margin:0 auto}.hero h1{font-size:40px;line-height:1.25;margin:0 0 16px}.hero h1 strong{color:var(--accent, #2d7d5f)}.hero-sub{font-size:18px;color:var(--muted, #6b7a72);line-height:1.7}.btn{display:inline-block;padding:8px 16px;border-radius:8px;text-decoration:none;font-size:14px;cursor:pointer;border:1px solid transparent}.btn.primary{background:var(--accent, #2d7d5f);color:#fff}.btn.secondary{border-color:var(--border);color:var(--text);background:var(--panel)}.btn.lg{padding:12px 28px;font-size:16px}.btn.sm{padding:6px 12px;font-size:13px}.landing-section{padding:72px 24px;max-width:1080px;margin:0 auto}.landing-section.alt{background:var(--shade, #f4f6f4)}.landing-section h2{text-align:center;font-size:28px;margin:0 0 12px}.landing-section>.muted{text-align:center;max-width:640px;margin:0 auto 8px}.feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-top:32px}.feature-grid .card h3{margin-top:0}.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px;margin-top:32px;max-width:900px;margin-inline:auto}.steps div{text-align:center}.step-num{display:inline-block;width:40px;height:40px;line-height:40px;border-radius:50%;background:var(--accent, #2d7d5f);color:#fff;font-size:18px;margin-bottom:12px}.steps p{color:var(--text)}.price{font-size:36px;font-weight:700;margin:8px 0 4px}.feature-list{padding-left:20px;font-size:14px;line-height:1.9;color:var(--muted, #6b7a72)}.price-card-featured{border-color:var(--accent, #2d7d5f);position:relative;box-shadow:0 4px 24px #2d7d5f1f}.landing-footer{text-align:center;padding:48px 24px;border-top:1px solid var(--border);color:var(--muted, #6b7a72)}.landing-footer a{color:var(--text)}.price-card-featured:after{content:"最受欢迎";position:absolute;top:-12px;left:50%;transform:translate(-50%);background:var(--accent, #2d7d5f);color:#fff;font-size:12px;padding:2px 12px;border-radius:999px}.demo-banner{background:#2d7d5f;color:#fff;padding:8px 16px;border-radius:8px;font-size:13px;margin-bottom:12px}.demo-banner a{color:#fff;text-decoration:underline}.lang-switch{flex-shrink:0}
