:root{font-family:Microsoft YaHei,Noto Sans CJK SC,system-ui,sans-serif;color:#21313c;background:#edf3f5}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{border:0;border-radius:7px;padding:.55rem .9rem;background:#087f78;color:#fff;cursor:pointer}button:disabled{background:#9faeb2;cursor:not-allowed}.secondary{background:#536b79}.danger{background:#a84040}input,select{border:1px solid #bccbd0;border-radius:5px;padding:.45rem;background:#fff;max-width:100%}.shell{max-width:1500px;margin:auto;padding:18px}.top{display:flex;align-items:center;justify-content:space-between;gap:12px}.top h1{font-size:1.5rem;margin:.4rem 0}.layout{display:grid;grid-template-columns:minmax(290px,370px) minmax(0,1fr);gap:14px}.card{background:#fff;border-radius:10px;padding:17px;margin:0 0 14px;box-shadow:0 2px 12px #19303911}.card h2{font-size:1.07rem;margin:0 0 14px}.field{display:grid;grid-template-columns:120px 1fr;align-items:center;gap:8px;margin:8px 0}.field input,.field select{width:100%}.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.muted{color:#647781;font-size:.9rem}.warning{color:#a04423}.good{color:#117454}.hidden{display:none!important}#route,#cam{width:100%;height:270px;background:#f9fbfb;border:1px solid #d2dfe1;border-radius:5px}#viewer,#phaseViewer{width:100%;height:520px;background:#10191e;border-radius:6px;display:block}#phaseViewer{height:380px}table{width:100%;border-collapse:collapse}th,td{padding:9px;border-bottom:1px solid #dce5e8;text-align:left;vertical-align:middle;font-size:.9rem}th{background:#f2f6f7}.status{background:#eef6f5;padding:10px;border-left:4px solid #087f78;margin:9px 0;white-space:pre-wrap}.tabs{display:flex;gap:7px;margin-bottom:12px}.tabs button{background:#647c87}.tabs button.active{background:#087f78}.auth{max-width:470px;margin:8vh auto}.auth .field{grid-template-columns:85px 1fr}.split{display:grid;grid-template-columns:1fr 1fr;gap:10px}.full{grid-column:1/-1}#trace{width:100%;height:220px;background:#f9fbfb}.footer{color:#657680;margin:20px 0;font-size:.88rem}@media (max-width:900px){.layout,.split{display:block}.field{grid-template-columns:110px 1fr}#viewer{height:390px}}.plot-caption{margin-top:8px;line-height:1.5}.legend-start{color:#087f78}.legend-end{color:#d65443}.legend-stake{color:#cf6945}.cam-preview{display:grid;grid-template-columns:minmax(250px,1fr) minmax(190px,240px);gap:14px;align-items:stretch}#cam{height:300px}.cam-stats{display:flex;flex-direction:column;justify-content:center;gap:12px;background:#f4f8f8;border:1px solid #e0e9e9;border-radius:6px;padding:18px}.cam-stats strong{font-size:1rem;color:#21313c}@media (max-width:1120px){.cam-preview{grid-template-columns:1fr}.cam-stats{flex-direction:row;flex-wrap:wrap;justify-content:flex-start}}.example-downloads{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:10px 0 12px;font-size:.9rem}.example-downloads span{color:#647781}.example-downloads a{color:#087f78;text-decoration:underline;text-underline-offset:2px}.example-downloads a:hover{color:#075f5a}.legend-sensor{color:#a16d1d}#sensorVisualFields{margin-top:14px;padding-top:10px;border-top:1px solid #e1e9eb}#sensorVisualFields .muted{margin:8px 0 4px;line-height:1.5}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:30px;background:radial-gradient(circle at 10% 8%,#d8eeee 0,transparent 38%),radial-gradient(circle at 90% 90%,#dce7ee 0,transparent 42%),#edf3f5}.auth-shell{display:grid;grid-template-columns:1.08fr .92fr;width:min(1080px,100%);min-height:620px;overflow:hidden;border:1px solid #d7e4e7;border-radius:24px;background:#fff;box-shadow:0 25px 75px #25445022}.auth-showcase{position:relative;display:flex;flex-direction:column;overflow:hidden;padding:40px 45px;background:linear-gradient(145deg,#102d39,#15545b 58%,#087f78);color:#fff}.auth-showcase:before{content:"";position:absolute;width:460px;height:460px;right:-230px;top:-250px;border:1px solid #ffffff35;border-radius:50%;box-shadow:0 0 0 85px #ffffff0b,0 0 0 170px #ffffff08}.auth-brand{z-index:1;display:flex;align-items:center;gap:12px;font-size:1.12rem;font-weight:700;letter-spacing:.08em}.auth-brand-mark{display:grid;place-items:center;width:42px;height:42px;border-radius:11px;background:#e2faf3;color:#11666a;font-size:.88rem;letter-spacing:0}.auth-intro{z-index:1;margin-top:78px}.auth-overline{color:#8ce3dc;font-size:.78rem;font-weight:700;letter-spacing:.22em}.auth-intro h1{margin:18px 0;font-size:clamp(2.5rem,4vw,4rem);line-height:1.17;letter-spacing:.035em}.auth-intro p{max-width:340px;color:#d2e9eb;line-height:1.8}.auth-illustration{z-index:1;width:100%;max-height:220px;margin:auto 0 15px;filter:drop-shadow(0 14px 25px #061e2888)}.auth-flow{z-index:1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:#c6e4e2;font-size:.82rem}.auth-flow i{width:22px;height:1px;background:#8ce3dc99}.auth-panel{display:flex;align-items:center;padding:54px 58px}.auth-panel-inner{width:100%;max-width:370px;margin:auto}.auth-panel-tag{display:inline-block;padding:6px 10px;border-radius:20px;background:#e8f5f1;color:#087f78;font-size:.8rem;font-weight:700}.auth-panel h2{margin:18px 0 6px;font-size:2rem;letter-spacing:.03em}.auth-panel p{margin:0 0 28px;color:#6b7d84;line-height:1.6}.auth-panel form{display:flex;flex-direction:column;gap:10px}.auth-panel label{margin-top:9px;font-weight:700;font-size:.9rem;color:#33464f}.auth-panel input{width:100%;height:47px;padding:0 14px;border:1px solid #c9d8dc;border-radius:9px;outline:none;transition:border-color .2s,box-shadow .2s}.auth-panel input:focus{border-color:#078c84;box-shadow:0 0 0 4px #078c8420}.auth-login{height:47px;margin-top:17px;border-radius:9px;font-weight:700;background:#087f78}.auth-login:hover{background:#056f69}.auth-register{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:21px;color:#6b7d84;font-size:.88rem}.auth-register-button{padding:0;background:transparent;color:#087f78;font-weight:700}.auth-register-button:hover{text-decoration:underline}.auth-panel .auth-message{margin:16px 0 0;min-height:1.5em;font-size:.88rem}@media (max-width:760px){.auth-page{padding:12px;align-items:flex-start}.auth-shell{grid-template-columns:1fr;min-height:0}.auth-showcase{min-height:215px;padding:25px}.auth-intro{margin-top:30px}.auth-intro h1{font-size:2rem;margin:8px 0}.auth-intro p,.auth-illustration,.auth-flow{display:none}.auth-panel{padding:32px 26px 40px}}:root{color:#193856;background:#f1f6fd}button{background:#1769bd}button:hover:not(:disabled){background:#0e57a4}button:disabled{background:#a7bbcc}.secondary,.tabs button{background:#526f8f}.secondary:hover:not(:disabled),.tabs button:hover:not(:disabled){background:#3d5d7e}.danger{background:#ad464d}.danger:hover:not(:disabled){background:#97343b}input,select{border-color:#bdcfe1;color:#193856}input:focus,select:focus{outline:2px solid #8abdf0;outline-offset:1px}.card{border:1px solid #e3edf8;box-shadow:0 4px 18px #1e4f8710}.card h2,.top h1,.cam-stats strong{color:#153b66}.muted,.footer{color:#5d7590}.good{color:#1f6ea9}#route,#cam,#trace{background:#f9fbff;border-color:#d5e3f1}th{background:#eef5fd}th,td{border-bottom-color:#dce8f4}.status{background:#eaf4ff;border-left-color:#2477c9}.tabs button.active{background:#1769bd}.cam-stats{background:#f2f7fd;border-color:#d9e7f6}.example-downloads span{color:#5d7590}.example-downloads a{color:#1769bd}.example-downloads a:hover{color:#0e57a4}#sensorVisualFields{border-top-color:#dce8f4}.legend-start{color:#1769bd}.legend-end{color:#b95460}.legend-stake{color:#d3734e}.legend-sensor{color:#7759ac}.user-identity{display:inline-flex;align-items:center;gap:7px;padding:7px 11px;border:1px solid #d7e5f5;border-radius:9px;background:#fff;color:#193856;font-weight:600}.user-identity-label{color:#59769a;font-size:.85rem;font-weight:500}.user-identity-label:after{content:"："}.user-role{margin-left:3px;padding:2px 6px;border-radius:4px;background:#e7f1fc;color:#1a65b0;font-size:.77rem}.auth-page{background:radial-gradient(circle at 10% 8%,#d9eaff 0,transparent 38%),radial-gradient(circle at 90% 90%,#e2edfa 0,transparent 42%),#f1f6fd}.auth-shell{border-color:#d5e3f2;box-shadow:0 25px 75px #183b6a24}.auth-showcase{background:linear-gradient(145deg,#0b2547,#164a85 58%,#166fc3)}.auth-page{flex-direction:column;gap:18px}.auth-logo-hero{width:min(650px,100%);height:145px;display:flex;align-items:center;justify-content:center}.auth-logo-hero img{display:block;width:100%;height:100%;object-fit:contain}.auth-intro{margin-top:54px}.auth-overline{color:#a7d6ff}.auth-illustration{filter:drop-shadow(0 14px 25px #061c4288)}.auth-flow{color:#d1e8ff}.auth-flow i{background:#9bcefa99}.auth-panel-tag{background:#e8f2ff;color:#1769bd}.auth-panel h2,.auth-panel label{color:#193856}.auth-panel p,.auth-register{color:#5d7590}.auth-panel input{border-color:#c5d7e9}.auth-panel input:focus{border-color:#2477c9;box-shadow:0 0 0 4px #2477c925}.auth-login{background:#1769bd}.auth-login:hover{background:#0e57a4}.auth-register-button{color:#1769bd;background:transparent}.auth-register-button:hover:not(:disabled){background:transparent}#cam{cursor:zoom-in}.auth-university{display:flex;flex-direction:column;gap:8px}.auth-university-picker{position:relative}.auth-university-options{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:10;max-height:190px;overflow-y:auto;overscroll-behavior:contain;background:#fff;border:1px solid #c5d7e9;border-radius:9px;box-shadow:0 12px 30px #163b6829}.auth-university-option,.auth-university-empty{padding:8px 13px;font-size:.9rem;line-height:1.35}.auth-university-option{cursor:pointer}.auth-university-option:hover,.auth-university-option[aria-selected=true]{background:#e8f2ff;color:#1769bd}.auth-university-empty{color:#5d7590}@media (max-width:760px){.auth-page{gap:12px}.auth-logo-hero{height:105px}.auth-intro{margin-top:24px}}#jobTable{overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}#jobTable thead th{position:sticky;top:0;z-index:1;background:#eef5fd}@media (min-width:901px){#generatePage>div:last-child{display:flex;flex-direction:column}#generatePage>div:last-child>.card:last-child{flex:1}}.generation-dialog{width:min(460px,calc(100vw - 32px));border:1px solid #d0e0f2;border-top:5px solid #1769bd;border-radius:13px;padding:25px 27px;background:#fff;color:#193856;box-shadow:0 24px 70px #1332534d}.generation-dialog::backdrop{background:#102b4d88}.generation-dialog.generation-failed{border-top-color:#bd4141}.generation-dialog h2{margin:0 0 12px;font-size:1.3rem}.generation-dialog p{margin:0 0 20px;line-height:1.6;white-space:pre-wrap;overflow-wrap:anywhere}.generation-dialog-links{display:flex;gap:14px;flex-wrap:wrap;margin:0 0 20px}.generation-dialog-links:empty{display:none}.generation-dialog-links a{color:#1769bd;font-weight:700}.generation-dialog button{background:#1769bd}.auth-gear-rotor{transform-box:view-box;transform-origin:50% 50%;animation:auth-gear-spin 16s linear infinite}@keyframes auth-gear-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.auth-gear-rotor{animation:none}}.parameter-section{margin-top:16px;padding-top:12px;border-top:1px solid #dce8f4}.parameter-section h3{margin:0 0 10px;color:#24578e;font-size:.95rem}#sensorVisualFields{margin-top:0;padding-top:0;border-top:0}#cam{cursor:grab;touch-action:none}#cam.dragging{cursor:grabbing}
