:root{--bg: #f5f7fa;--panel: #ffffff;--primary: #2563eb;--primary-soft: #eff4ff;--text: #1f2937;--muted: #6b7280;--border: #e5e7eb;--critical: #dc2626;--warning: #d97706;--info: #2563eb;--success: #16a34a;--shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.04)}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background:var(--bg);color:var(--text);font-size:14px}a{color:var(--primary);text-decoration:none}button{font-family:inherit;cursor:pointer}input,select,textarea{font-family:inherit;font-size:14px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text);width:100%}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary)}.layout{display:flex;min-height:100vh}.sidebar{width:220px;background:#0f172a;color:#cbd5e1;padding:18px 12px;display:flex;flex-direction:column;gap:4px;flex-shrink:0}.sidebar .brand{color:#fff;font-weight:700;font-size:16px;padding:6px 10px 14px}.sidebar a{color:#cbd5e1;padding:10px 12px;border-radius:8px;display:block}.sidebar a:hover,.sidebar a.active{background:#1e293b;color:#fff}.sidebar .spacer{flex:1}.sidebar .nav-group{margin:2px 0}.sidebar .nav-group-head{color:#cbd5e1;padding:10px 12px 4px;font-size:13px;font-weight:600}.sidebar .nav-group-head.active{color:#fff}.sidebar .nav-group-body{display:flex;flex-direction:column;gap:2px}.sidebar a.sub{padding-left:28px;font-size:13px}.tms-cockpit-frame{width:100%;height:calc(100vh - 120px);border:none;border-radius:12px;background:#fff;box-shadow:var(--shadow)}.sidebar .langbox{padding:8px 10px;font-size:12px;color:#94a3b8;display:flex;align-items:center;gap:8px;border-top:1px solid #1e293b}.sidebar .langbox select{width:auto;padding:4px 8px;background:#1e293b;color:#e2e8f0;border-color:#334155}.sidebar .userbox{padding:10px;font-size:12px;color:#94a3b8;border-top:1px solid #1e293b}.sidebar .userbox button{margin-top:8px;background:#334155;color:#fff;border:none;padding:6px 10px;border-radius:6px;width:100%}.content{flex:1;padding:22px 26px;overflow-x:auto}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.page-head h2{margin:0;font-size:20px}.grid{display:grid;gap:16px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:14px}.card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px;box-shadow:var(--shadow)}.card .label{color:var(--muted);font-size:13px}.card .value{font-size:26px;font-weight:700;margin-top:6px}.card .sub{color:var(--muted);font-size:12px;margin-top:4px}.btn{background:var(--primary);color:#fff;border:none;padding:9px 16px;border-radius:8px;font-size:14px}.btn:hover{background:#1d4ed8}.btn.secondary{background:#fff;color:var(--primary);border:1px solid var(--primary)}.btn.ghost{background:#f1f5f9;color:var(--text);border:1px solid var(--border)}.btn.sm{padding:5px 10px;font-size:12px}.btn.danger{background:#ef4444}.btn:disabled{opacity:.5;cursor:not-allowed}table{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--border);border-radius:12px;overflow:hidden}th,td{text-align:left;padding:11px 12px;border-bottom:1px solid var(--border)}th{background:#f8fafc;color:var(--muted);font-weight:600;font-size:13px}tr:last-child td{border-bottom:none}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:12px;background:#eef2ff;color:#4338ca}.badge.green{background:#dcfce7;color:#166534}.badge.amber{background:#fef3c7;color:#92400e}.badge.red{background:#fee2e2;color:#991b1b}.badge.gray{background:#f1f5f9;color:#475569}.badge.blue{background:#dbeafe;color:#1d4ed8}.sev-critical{color:var(--critical);font-weight:700}.sev-warning{color:var(--warning);font-weight:700}.sev-info{color:var(--info);font-weight:700}.field{margin-bottom:12px}.field label{display:block;font-size:13px;color:var(--muted);margin-bottom:5px}.row{display:flex;gap:12px;flex-wrap:wrap}.row>*{flex:1;min-width:160px}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#1e3a8a,#2563eb)}.auth-card{background:#fff;border-radius:16px;padding:34px 30px;width:360px;box-shadow:0 20px 40px #0003}.auth-card h1{font-size:19px;margin:0 0 4px}.auth-card .hint{color:var(--muted);font-size:13px;margin-bottom:20px}.auth-card .err{color:var(--critical);font-size:13px;margin-top:8px;min-height:16px}.kanban{display:flex;gap:12px;overflow-x:auto;padding-bottom:8px}.kcol{background:var(--panel);border:1px solid var(--border);border-radius:12px;min-width:240px;flex:1}.kcol .khead{padding:12px;font-weight:700;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.kcol .kbody{padding:10px;display:flex;flex-direction:column;gap:8px;min-height:60px}.kitem{border:1px solid var(--border);border-radius:10px;padding:10px;background:#fff}.kitem .kt{font-weight:600}.kitem .km{color:var(--muted);font-size:12px;margin-top:4px}.kitem .kamount{color:var(--primary);font-weight:700}.kstage-detail{padding:0 10px 10px;display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--border);margin-top:6px}.kstage-item{border:1px solid var(--border);border-radius:8px;padding:6px 8px;background:#fafbff}.kstage-item .kt{font-weight:600;font-size:13px}.kstage-item .km{color:var(--muted);font-size:12px;margin-top:2px}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:50}.modal{background:#fff;border-radius:14px;padding:22px;width:520px;max-width:92vw;max-height:88vh;overflow:auto}.modal h3{margin:0 0 14px}.modal.wide{width:720px}.value.sm{font-size:15px;font-weight:600;margin-top:4px}.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:16px}.alert-item.critical{border-left:4px solid var(--critical)}.alert-item.warning{border-left:4px solid var(--warning)}.alert-item.info{border-left:4px solid var(--info)}.alert-item{background:#fff;border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px}.alert-item .at{font-weight:700}.alert-item .ar{color:var(--muted);font-size:13px;margin:6px 0}.alert-item .as{font-size:13px;background:var(--primary-soft);padding:8px 10px;border-radius:8px}.tabs{display:flex;gap:6px;margin-bottom:16px}.tabs button{background:#fff;border:1px solid var(--border);padding:7px 14px;border-radius:8px;color:var(--text)}.tabs button.active{background:var(--primary);color:#fff;border-color:var(--primary)}.muted{color:var(--muted)}.empty{text-align:center;color:var(--muted);padding:40px}.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}.tech{margin:-22px -26px;padding:22px 26px;position:relative;min-height:calc(100vh - 44px);color:#1f2937;isolation:isolate;background:radial-gradient(1100px 560px at 82% -12%,rgba(14,116,144,.07),transparent 60%),radial-gradient(900px 520px at -8% 112%,rgba(99,102,241,.06),transparent 55%),linear-gradient(160deg,#f5f7fa,#eef1f6 55%,#f3f5f9)}.tech:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;opacity:.4;background-image:linear-gradient(rgba(20,116,144,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(20,116,144,.05) 1px,transparent 1px);background-size:42px 42px;-webkit-mask-image:linear-gradient(180deg,#000 70%,transparent 100%);mask-image:linear-gradient(180deg,#000 70%,transparent 100%)}.tech .page-head h2,.tech .tech-title{color:#0f2a3a;font-weight:800;letter-spacing:.3px;text-shadow:none}.tech .tech-sub{color:#0e7490;font-weight:700;text-shadow:none;margin:6px 0 10px}.tech .card{background:#fff;border:1px solid #e2e8f0;border-radius:14px;color:#1f2937;box-shadow:0 1px 3px #0f172a0f,0 8px 24px #0f172a0d,inset 0 0 0 1px #0e74900a}.tech .card .label{color:#64748b}.tech .card .sub{color:#94a3b8}.tech .card .value{color:#0e7490;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;text-shadow:none}.tech .btn{background:#fff;color:#0e7490;border:1px solid #b6e3ef;border-radius:9px;font-weight:600;box-shadow:0 1px 2px #0f172a0d}.tech .btn:hover{background:#e6f7fb;box-shadow:0 0 0 3px #0e74901f}.tech .btn.ghost{background:transparent;color:#64748b;border-color:#cbd5e1;box-shadow:none}.tech .btn.ghost:hover{border-color:#0e7490;color:#0e7490}.tech .btn.sm{padding:5px 10px}.tech table{background:#fff;border:1px solid #e2e8f0;border-radius:12px;overflow:hidden}.tech th{background:#f1f5f9;color:#0e7490;border-bottom:1px solid #d6e2ea;font-weight:700}.tech td{border-bottom:1px solid #eef2f6;color:#1f2937}.tech tbody tr:hover{background:#f8fafc}.tech .badge{background:#ecfeff;color:#0e7490;border:1px solid #b6e3ef}.tech .badge.green{background:#ecfdf5;color:#047857;border-color:#a7f3d0}.tech .badge.amber{background:#fffbeb;color:#b45309;border-color:#fde68a}.tech .badge.red{background:#fef2f2;color:#dc2626;border-color:#fecaca}.tech .badge.blue{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe}.tech .badge.gray{background:#f1f5f9;color:#64748b;border-color:#cbd5e1}.tech .sev-critical{color:#dc2626;text-shadow:none}.tech .sev-warning{color:#d97706;text-shadow:none}.tech .sev-info{color:#0284c7;text-shadow:none}.tech .alert-item{background:#fff;border:1px solid #e2e8f0;border-radius:12px;color:#1f2937;box-shadow:0 1px 3px #0f172a0f,0 8px 24px #0f172a0d}.tech .alert-item.critical{border-left:4px solid #dc2626;box-shadow:-4px 0 18px #dc262614,0 1px 3px #0f172a0f}.tech .alert-item.warning{border-left:4px solid #d97706}.tech .alert-item.info{border-left:4px solid #0284c7}.tech .alert-item .at{color:#0f2a3a}.tech .alert-item .ar{color:#475569}.tech .alert-item .as{background:#ecfeff;color:#0e7490;border:1px solid #b6e3ef}.tech .kanban{gap:14px}.tech .kanban .kcol{background:#fff;border:1px solid #e2e8f0;border-radius:14px;box-shadow:0 1px 3px #0f172a0f,0 8px 24px #0f172a0a}.tech .kcol .khead{border-bottom:1px solid #e2e8f0;color:#0e7490}.tech .kitem{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;color:#1f2937;box-shadow:0 1px 2px #0f172a0a}.tech .kitem:hover{border-color:#0e7490;box-shadow:0 0 0 3px #0e74901f}.tech .kitem .kt{color:#0f2a3a}.tech .kitem .km{color:#64748b}.tech .kitem .kamount{color:#0e7490;text-shadow:none}.tech .kstage-item{background:#f1f5f9;border:1px solid #e2e8f0}.tech .kstage-item .kt{color:#0f2a3a}.tech .kstage-item .km{color:#64748b}.tech input,.tech select,.tech textarea{background:#fff;border:1px solid #cbd5e1;color:#1f2937;border-radius:8px}.tech input:focus,.tech select:focus,.tech textarea:focus{outline:none;border-color:#0e7490;box-shadow:0 0 0 3px #0e749026}.tech input::placeholder,.tech textarea::placeholder{color:#94a3b8}.tech .field label{color:#475569}.tech .req{color:#dc2626}.tech .modal{background:#fff;border:1px solid #b6e3ef;border-radius:16px;color:#1f2937;box-shadow:0 0 0 1px #0e74901a,0 20px 50px #0f172a2e}.tech .modal h3{color:#0f2a3a;text-shadow:none}.tech .modal-actions button.btn:not(.ghost){color:#fff;background:#0e7490;border-color:#0e7490;box-shadow:0 1px 2px #0f172a1a}.tech .modal-actions button.btn:not(.ghost):hover{background:#0891b2}.tech .muted{color:#64748b}.tech .empty{color:#94a3b8}.tech .toolbar{color:#475569}.tech ::-webkit-scrollbar{height:10px;width:10px}.tech ::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:8px}
