*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:#f4f7fc;color:#26334d;font-family:PingFang SC,Microsoft YaHei,Hiragino Sans GB,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#ccd7e8;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:#b4c4dc}::-webkit-scrollbar-track{background:transparent}.app-shell{min-height:100vh;background:linear-gradient(180deg,#f6f9fe,#f1f5fb)}.app-sider{border-right:1px solid #e9eef7;box-shadow:0 0 24px #254a850a}.app-brand{display:flex;align-items:center;gap:12px;padding:22px 20px 18px}.app-brand-mark{width:42px;height:42px;border-radius:14px;background:linear-gradient(135deg,#2f6fd0,#4b90e6);color:#fff;font-weight:700;font-size:17px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 18px #2f6fd047;flex-shrink:0}.app-brand-title{font-size:15px;font-weight:700;color:#1f3b63;line-height:1.35}.app-brand-sub{font-size:12px;color:#8c96a8;margin-top:2px}.app-header{display:flex;align-items:center;justify-content:space-between;padding:0 26px;height:64px;line-height:1.4;gap:16px;background:#fff;border-bottom:1px solid #e9eef7;position:sticky;top:0;z-index:20}.app-header-main{min-width:0;flex:1 1 auto;overflow:hidden}.app-header-user{flex-shrink:0}.app-header-title{font-size:17px;font-weight:600;color:#22345a;line-height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header-sub{font-size:12px;color:#8c96a8;margin-top:2px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-content{padding:22px 26px 8px;min-width:0}.app-footer{text-align:center;color:#9aa4b2;font-size:12px;letter-spacing:.4px;padding:18px 0 24px}.soft-card{background:#fff;border:1px solid #e9eef7;border-radius:16px;box-shadow:0 8px 22px #254a850d}.page-block{margin-bottom:18px}.section-title{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:14px;min-width:0}.section-title h3{margin:0;font-size:15px;font-weight:700;color:#22345a;min-width:0}.section-title span.hint{font-size:12px;color:#8c96a8;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-card{position:relative;overflow:hidden;padding:18px 20px;border-radius:16px;background:#fff;border:1px solid #e9eef7;box-shadow:0 8px 22px #254a850d;height:100%}.stat-card:after{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#4b90e6,#2f6fd0)}.stat-label{font-size:13px;color:#7b879c}.stat-value{font-size:26px;font-weight:700;color:#1f3b63;margin-top:8px;line-height:1.1}.stat-extra{font-size:12px;color:#8c96a8;margin-top:8px}.soft-tag{display:inline-flex;align-items:center;gap:6px;padding:2px 10px;border-radius:10px;font-size:12px;line-height:20px;background:#eef3fb;color:#4a5c7d}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 20px;background:radial-gradient(circle at 15% 20%,#e8f0fd,#f6f9fe 45%,#f1f5fb)}.login-card{width:100%;max-width:1020px;display:grid;grid-template-columns:1.05fr .95fr;border-radius:22px;overflow:hidden;background:#fff;border:1px solid #e6edf8;box-shadow:0 22px 60px #1f4b8c1f}.login-left{padding:46px 40px;background:linear-gradient(150deg,#2f6fd0,#4f95e8 58%,#61b0dd);color:#fff;display:flex;flex-direction:column;justify-content:space-between}.login-left h1{font-size:25px;line-height:1.4;margin:0 0 14px;font-weight:700}.login-left p{margin:0;font-size:13px;line-height:1.9;color:#ffffffe0}.login-feature{display:flex;align-items:flex-start;gap:10px;font-size:13px;color:#fffffff0;margin-top:12px}.login-feature-dot{width:7px;height:7px;border-radius:50%;background:#ffffffd9;margin-top:7px;flex-shrink:0}.login-right{padding:46px 42px;display:flex;flex-direction:column;justify-content:center}.login-title{font-size:21px;font-weight:700;color:#1f3b63;margin-bottom:6px}.login-sub{font-size:13px;color:#8c96a8;margin-bottom:26px}.demo-box{margin-top:20px;border-radius:12px;background:#f6f9fe;border:1px dashed #cddcf1;padding:12px 14px;font-size:12px;color:#5c6b85;line-height:1.9}.viewer-shell{position:relative;height:640px;border-radius:16px;overflow:hidden;background:linear-gradient(180deg,#f8fbff,#eef3fb);border:1px solid #e3e9f2}.viewer-canvas{width:100%;height:100%;display:block}.viewer-toolbar{position:absolute;top:14px;left:14px;display:flex;flex-wrap:wrap;gap:8px;max-width:calc(100% - 28px);padding:8px 10px;border-radius:14px;background:#ffffffeb;border:1px solid #e3e9f2;box-shadow:0 8px 20px #254a8514;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.viewer-legend{position:absolute;bottom:14px;left:14px;display:flex;gap:14px;padding:8px 14px;border-radius:14px;background:#ffffffeb;border:1px solid #e3e9f2;box-shadow:0 8px 20px #254a8514;font-size:12px;color:#5c6b85}.legend-item{display:flex;align-items:center;gap:6px}.legend-dot{width:10px;height:10px;border-radius:50%}.viewer-label{position:absolute;transform:translate(-50%,-50%);padding:1px 8px;border-radius:9px;background:#ffffffe6;border:1px solid #dbe5f4;color:#3d5178;font-size:11px;pointer-events:none;white-space:nowrap}.panel-scroll{max-height:640px;overflow-y:auto;padding-right:4px}.connection-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;border-radius:12px;border:1px solid #e9eef7;background:#fff;margin-bottom:10px;cursor:pointer;transition:all .18s ease}.connection-row:hover{border-color:#b9d2f3;box-shadow:0 8px 18px #2f6fd01a;transform:translateY(-1px)}.connection-row.active{border-color:#7fb0ea;background:#f5f9ff}.connection-code{font-size:13px;font-weight:600;color:#22345a}.connection-meta{font-size:12px;color:#8c96a8;margin-top:3px}.measure-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:9px;background:#f2f6fd;color:#4a5c7d;font-size:12px;margin-right:6px}.chart-bar-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}.chart-bar-label{width:96px;font-size:12px;color:#5c6b85;text-align:right;flex-shrink:0}.chart-bar-track{flex:1;height:10px;border-radius:8px;background:#f0f4fa;overflow:hidden}.chart-bar-fill{height:100%;border-radius:8px;background:linear-gradient(90deg,#6ba4ea,#2f6fd0)}.chart-bar-value{width:56px;font-size:12px;color:#5c6b85}.donut-wrap{display:flex;align-items:center;flex-wrap:wrap;gap:20px}.donut-legend{display:flex;flex-direction:column;gap:10px}.donut-legend-item{display:flex;align-items:center;gap:8px;font-size:13px;color:#5c6b85}.verdict-badge{display:inline-flex;align-items:center;gap:6px;padding:2px 12px;border-radius:10px;font-size:12px;font-weight:600}.info-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px 18px}.info-item-label{font-size:12px;color:#8c96a8;margin-bottom:4px}.info-item-value{font-size:14px;color:#2a3a5e;font-weight:500;word-break:break-all}.problem-card{border-radius:12px;border:1px solid #f0dfe0;background:snow;padding:12px 14px;margin-bottom:10px}.problem-card.warn{border-color:#f4e6cd;background:#fffcf6}.problem-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}.problem-code{font-size:13px;font-weight:600;color:#33456b;white-space:nowrap}.problem-parts{font-size:12px;color:#8c96a8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.problem-metrics{display:flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0}.problem-item{font-size:12px;color:#5c6b85;background:#f2f6fd;border-radius:9px;padding:2px 10px;white-space:nowrap}.problem-value{font-size:13px;font-weight:700;min-width:88px;text-align:right;white-space:nowrap}.problem-meta{display:flex;align-items:center;gap:6px 18px;flex-wrap:wrap;margin-top:8px;font-size:12px;color:#7b879c;line-height:1.7}.problem-meta span{white-space:nowrap}.problem-cause{font-size:12px;color:#7b879c;line-height:1.8;margin-top:6px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.ant-table-wrapper .ant-table{border-radius:14px}.ant-table-wrapper{max-width:100%}.ant-table-wrapper .ant-table-content{overflow-x:auto}.ant-card{border:1px solid #e9eef7;box-shadow:0 8px 22px #254a850d}.ant-tabs-nav{margin-bottom:18px!important}.mono{font-family:JetBrains Mono,Consolas,Courier New,monospace;font-size:12.5px}@media (max-width: 1024px){.login-card{grid-template-columns:1fr}.login-left{display:none}.app-content{padding:16px 14px 8px}.app-header{padding:0 14px;gap:10px}.app-header-user-meta,.app-header-user-tag{display:none}.viewer-toolbar{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.viewer-toolbar::-webkit-scrollbar{display:none}.viewer-toolbar>*{flex-shrink:0}}
