*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:#f5f7fb;color:#1e293b;font-family:Microsoft YaHei,PingFang SC,Hiragino Sans GB,Source Han Sans SC,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d5deeb;border-radius:8px}::-webkit-scrollbar-track{background:transparent}.app-shell{height:100vh;overflow:hidden}.app-shell .ant-layout{min-width:0}.app-sider{height:100vh;overflow:auto;border-right:1px solid #eaeff7;box-shadow:0 0 24px #0f172a08}.app-brand{display:flex;align-items:center;gap:12px;padding:20px 18px 18px}.app-brand-mark{width:42px;height:42px;border-radius:14px;background:linear-gradient(135deg,#2563eb,#38bdf8);color:#fff;font-size:15px;font-weight:700;letter-spacing:1px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 18px #2563eb47}.app-brand-title{font-size:15px;font-weight:700;color:#16233a;line-height:1.35}.app-brand-sub{font-size:11px;color:#94a3b8;margin-top:2px;letter-spacing:.4px}.app-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 26px;height:64px;border-bottom:1px solid #eef2f8;background:#fff;position:relative;z-index:5;overflow:hidden;flex:0 0 64px}.app-header>div:first-child{min-width:0;flex:1 1 auto}.app-header-title{font-size:16px;font-weight:600;color:#16233a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header-sub{font-size:12px;color:#94a3b8;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-user{display:flex;align-items:center;gap:10px;padding:6px 12px;border-radius:999px;cursor:pointer;transition:background .2s ease;flex:0 0 auto}.app-user:hover{background:#f2f6ff}.app-content{flex:1 1 auto;min-width:0;min-height:0;overflow:auto;padding:22px 26px 12px}.app-footer{flex:0 0 auto;text-align:center;color:#9aa7b8;font-size:12px;padding:14px 0 16px;letter-spacing:.3px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap}.page-title{font-size:20px;font-weight:700;color:#16233a;display:flex;align-items:center;gap:10px}.page-desc{font-size:13px;color:#7c8aa0;margin-top:6px;line-height:1.6}.panel{background:#fff;border:1px solid #eef2f8;border-radius:16px;padding:20px 22px;box-shadow:0 8px 22px #0f172a0a;margin-bottom:18px}.panel-title{font-size:15px;font-weight:600;color:#1e2a41;display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.panel-title-left{display:flex;align-items:center;gap:8px}.panel-note{font-size:12px;color:#94a3b8;font-weight:400}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:16px;margin-bottom:18px}.stat-card{background:#fff;border:1px solid #eef2f8;border-radius:16px;padding:18px 20px;box-shadow:0 8px 22px #0f172a0a;position:relative;overflow:hidden}.stat-card:after{content:"";position:absolute;right:-28px;top:-28px;width:82px;height:82px;border-radius:50%;opacity:.14;background:currentColor}.stat-label{font-size:13px;color:#7c8aa0;display:flex;align-items:center;gap:6px}.stat-value{font-size:26px;font-weight:700;color:#16233a;margin-top:10px;line-height:1.2}.stat-unit{font-size:13px;font-weight:500;color:#94a3b8;margin-left:4px}.stat-foot{margin-top:8px;font-size:12px;color:#9aa7b8}.soft-tag{display:inline-flex;align-items:center;gap:4px;border-radius:999px;padding:2px 12px;font-size:12px;line-height:20px;background:#eef4ff;color:#2563eb;border:1px solid rgba(37,99,235,.12)}.soft-tag.green{background:#eafaf0;color:#16a34a;border-color:#16a34a24}.soft-tag.amber{background:#fff7e8;color:#d97706;border-color:#d9770629}.soft-tag.red{background:#fdeeee;color:#dc2626;border-color:#dc262624}.soft-tag.slate{background:#f2f5f9;color:#64748b;border-color:#64748b24}.soft-tag.violet{background:#f4f0ff;color:#7c3aed;border-color:#7c3aed24}.login-page{min-height:100vh;display:flex;background:linear-gradient(135deg,#eef4ff,#f7fbfd 45%,#eaf6f1);position:relative;overflow:hidden}.login-page:before,.login-page:after{content:"";position:absolute;border-radius:50%;filter:blur(6px)}.login-page:before{width:460px;height:460px;background:#2563eb1f;top:-160px;right:-120px}.login-page:after{width:380px;height:380px;background:#0ea5e91f;bottom:-150px;left:-110px}.login-visual{flex:1.1;padding:56px 60px;display:flex;flex-direction:column;justify-content:center;position:relative;z-index:2}.login-visual h1{font-size:30px;font-weight:700;color:#16233a;margin:0 0 12px;letter-spacing:.5px}.login-visual p{color:#64748b;font-size:14px;line-height:1.9;max-width:520px;margin:0}.login-feature{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:28px;max-width:560px}.login-feature-item{background:#ffffffd1;border:1px solid #e6edf8;border-radius:14px;padding:14px 16px;box-shadow:0 10px 24px #0f172a0a}.login-feature-item strong{display:block;font-size:13px;color:#1e2a41;margin-bottom:4px}.login-feature-item span{font-size:12px;color:#8494a8;line-height:1.6}.login-panel{flex:.9;display:flex;align-items:center;justify-content:center;padding:40px;position:relative;z-index:2}.login-card{width:100%;max-width:400px;background:#fff;border-radius:20px;padding:34px 34px 26px;box-shadow:0 22px 60px #0f172a1f;border:1px solid #eef2f8}.login-card h2{font-size:19px;margin:0 0 6px;color:#16233a}.login-card .login-tip{font-size:12px;color:#94a3b8;margin-bottom:22px}.login-footer{text-align:center;color:#9aa7b8;font-size:12px;margin-top:22px}.drawing-frame{background:#fff;border:1px solid #e6edf8;border-radius:14px;padding:10px;overflow:auto;min-height:260px;display:flex;align-items:center;justify-content:center}.drawing-frame img{width:100%;height:auto;display:block;border-radius:8px}.drawing-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-wrap:wrap}.chart-box{width:100%;background:#fff;border:1px solid #eef2f8;border-radius:14px;padding:12px}.line-list{display:flex;flex-direction:column;gap:10px}.line-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-radius:12px;background:#f9fbfe;border:1px solid #eef2f8}.line-item-title{font-size:13px;color:#1e2a41;font-weight:600}.line-item-sub{font-size:12px;color:#94a3b8;margin-top:3px}.value-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px 18px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:16px}.form-grid .ant-form-item{margin-bottom:14px}.form-grid .form-grid-wide{grid-column:1 / -1}@media (max-width: 480px){.form-grid{grid-template-columns:minmax(0,1fr)}}.value-cell{background:#f9fbfe;border:1px solid #eef2f8;border-radius:12px;padding:10px 12px}.value-cell-label{font-size:12px;color:#8494a8}.value-cell-value{font-size:15px;font-weight:600;color:#16233a;margin-top:4px}.viewer-wrap{position:relative;width:100%;height:460px;border-radius:14px;overflow:hidden;border:1px solid #eef2f8;background:linear-gradient(180deg,#fbfdff,#f2f6fc)}.viewer-canvas{width:100%;height:100%;display:block}.viewer-overlay{position:absolute;left:14px;bottom:14px;background:#ffffffe6;border:1px solid #e6edf8;border-radius:12px;padding:10px 12px;font-size:12px;color:#64748b;line-height:1.7;box-shadow:0 8px 20px #0f172a0f}.legend{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:12px;color:#64748b}.legend-item{display:flex;align-items:center;gap:6px}.legend-dot{width:12px;height:12px;border-radius:4px}.mono{font-family:JetBrains Mono,Consolas,Courier New,monospace;font-size:12px}.text-muted{color:#8494a8;font-size:12px}.workflow-step{display:flex;gap:12px;padding:12px 4px;border-bottom:1px dashed #eef2f8}.workflow-step:last-child{border-bottom:none}.workflow-index{width:26px;height:26px;border-radius:9px;background:#eef4ff;color:#2563eb;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;flex:0 0 26px}.workflow-body strong{font-size:13px;color:#1e2a41}.workflow-body p{margin:4px 0 0;font-size:12px;color:#8494a8;line-height:1.7}.progress-row{display:flex;align-items:center;gap:12px}.progress-row .ant-progress{margin:0}@media (max-width: 1100px){.login-visual{display:none}.login-panel{flex:1}}
