:root{color-scheme:light;--paper:#f3f0e9;--panel:#faf8f3;--white:#fff;--ink:#252c32;--muted:#5c6266;--line:#b9b9b4;--blue:#1764a0;--pale:#e7f0f8;--danger:#9b3028;--focus:#12558a;font-family:"Segoe UI","Microsoft YaHei",sans-serif;font-size:14px;color:var(--ink);background:#e9e7e2}
*{box-sizing:border-box}body{margin:0;padding:22px}button,input,select,textarea{font:inherit;color:inherit}button{min-height:34px;padding:6px 13px;background:#f7f7f5;border:1px solid #9b9e9e;border-radius:3px;cursor:pointer}button:hover:not(:disabled){background:#e9eef2;border-color:#6c879b}button:active:not(:disabled){background:#d8e4ee}button:disabled{color:#777;background:#ecece9;border-color:#c6c7c4;cursor:not-allowed}button.primary{background:var(--blue);border-color:var(--blue);color:white}button.primary:hover:not(:disabled){background:#105486}input,select,textarea{padding:6px 8px;border:1px solid #9ba2a6;border-radius:2px;background:var(--white);min-height:34px;max-width:100%}input[type=checkbox]{min-height:16px;width:16px;height:16px;accent-color:var(--blue)}input[type=number]{font-variant-numeric:tabular-nums}input::placeholder{color:#697277}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--focus);outline-offset:3px}::selection{background:#cce2f5;color:#143e60}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#b2b9bc;border:2px solid #f0f1ee;border-radius:5px}
.workbench{max-width:1160px;min-width:0;margin:auto;background:var(--paper);border:1px solid #aeb0ad;border-radius:5px;overflow:hidden}.app-header{padding:20px 24px;display:flex;justify-content:space-between;align-items:center;gap:20px;border-bottom:1px solid var(--line);background:#f9f8f4}.app-header h1{font-size:21px;font-weight:600;margin:0 0 5px}.app-header p{color:var(--muted);margin:0;font-size:13px}.family-switch{display:flex;gap:0;flex-shrink:0}.family-switch button{border-radius:0;min-height:38px}.family-switch button:first-child{border-radius:4px 0 0 4px}.family-switch button:last-child{border-radius:0 4px 4px 0;border-left:0}.family-switch button.active{background:var(--blue);color:white;border-color:var(--blue)}.task-strip{display:flex;align-items:center;gap:12px;margin:18px 20px}.task-strip label{white-space:nowrap;font-weight:600}.task-strip input{flex:1;min-width:80px}.status-text{font-size:13px;white-space:nowrap;color:#275345}.notice{margin:0 20px 14px;padding:10px 12px;border:1px solid #c7a66a;background:#fff5dd;line-height:1.6;white-space:pre-wrap}.notice.error{border-color:#cfaaa4;background:#fff0ec;color:var(--danger)}
.tabs{display:flex;gap:3px;margin:0 20px;border-bottom:1px solid #929b9f;overflow:auto}.tabs button{border-radius:4px 4px 0 0;background:#e7e5df;border-bottom:0;white-space:nowrap;padding:9px 16px}.tabs button[aria-selected=true]{background:var(--panel);color:#164c76;border-top:3px solid var(--blue);padding-top:7px;font-weight:600}.tab-panel{padding:18px 20px;min-height:500px;background:var(--panel);border-bottom:1px solid var(--line)}fieldset{margin:0 0 18px;padding:13px 14px 12px;border:1px solid #b6b8b3;min-width:0}legend{padding:0 7px;font-weight:600;color:#3b4244}.package-load{display:flex;gap:8px;margin-bottom:10px}.package-load input{flex:1;min-width:100px}.list-box{min-height:100px;background:white;border:1px solid var(--line);padding:9px;overflow:auto;line-height:1.8}.environment-list{max-height:150px}.environment-item{display:flex;justify-content:space-between;gap:16px;padding:3px 6px;border-bottom:1px solid #ebeeec}.environment-item.selected{background:var(--pale)}.environment-item span:last-child{color:var(--muted);font-size:13px}.button-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}.button-row.end{justify-content:flex-end}.button-row a{margin-left:8px;color:var(--blue);text-underline-offset:3px}.table-note,.field-note{margin:12px 0 7px;color:var(--muted);font-size:13px;line-height:1.6}.table-wrap{overflow:auto;border:1px solid var(--line);background:white;min-height:110px}.routes-wrap{max-height:265px}.ports-wrap{max-height:205px}.table-wrap table{width:100%;border-collapse:collapse;text-align:left;white-space:nowrap}.table-wrap th{background:#eeefec;color:#3b454b;position:sticky;top:0;font-weight:600;font-size:13px;border-bottom:1px solid var(--line);padding:10px 11px}.table-wrap td{padding:9px 11px;border-bottom:1px solid #e4e7e4;font-variant-numeric:tabular-nums}.table-wrap tr.selected td{background:#e8f1f9}.table-wrap tbody tr[data-index],.table-wrap tbody tr[data-group]{cursor:pointer}.table-wrap tbody tr:hover td:not(.empty){background:#f0f5f8}.empty{padding:30px!important;color:#687177;text-align:center}.status-pass{color:#206048}.status-fail{color:var(--danger)}.status-warn{color:#815713}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px 26px}.form-field{display:grid;grid-template-columns:minmax(130px,1fr) minmax(95px,1fr);align-items:center;gap:12px}.form-field input,.form-field select{width:100%}.inline-field{display:flex;gap:12px;align-items:center;margin:10px 0}.inline-field input{flex:1;min-width:80px}.check-field{display:flex;gap:8px;align-items:center;margin:0 0 14px}.advanced{margin-top:20px}.advanced summary{cursor:pointer;color:#35566f;padding:7px 0}.advanced .form-grid{margin-top:12px}pre{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.65;max-height:250px;overflow:auto;background:#f0f1ee;padding:12px}.result-details{max-height:320px}.geometry-preview{margin-top:15px;background:#fff;border:1px solid var(--line)}.geometry-preview svg{display:block;width:100%;min-height:250px}.geometry-preview p{margin:8px 12px 12px;font-size:12px;color:var(--muted)}.harness-actions{padding:0 20px 18px}.harness-actions .inline-field{flex:1}
.progress-area{padding:15px 20px 18px;background:#eeeae1}.progress-labels{display:flex;justify-content:space-between;gap:15px;font-size:13px;margin-bottom:7px}.progress-labels span{color:var(--muted)}progress{width:100%;height:17px;accent-color:var(--blue)}.status-grid{display:grid;grid-template-columns:75px 1fr;gap:7px 12px;margin-top:12px;font-size:13px;align-items:center}.status-grid output{padding:7px 9px;min-width:0;overflow-wrap:anywhere;background:#f9faf7;border:1px solid #c4c8c5}.status-grid label{font-weight:600}dialog{border:1px solid #86939b;border-radius:5px;padding:22px;max-width:620px;width:calc(100% - 40px);box-shadow:0 12px 42px #1c283733}dialog::backdrop{background:#192b3d66}dialog h2{font-size:18px;margin:0 0 18px}#edit-fields{display:grid;gap:12px}#edit-fields label{display:grid;gap:6px}#edit-fields textarea{min-height:120px}#edit-error{color:var(--danger);font-size:13px}[hidden]{display:none!important}
@media(max-width:760px){body{padding:8px}.app-header{padding:16px;align-items:flex-start;flex-direction:column;gap:12px}.app-header h1{font-size:19px}.task-strip{margin:14px 12px;flex-wrap:wrap}.task-strip input{min-width:170px}.status-text{width:100%;padding-left:68px}.tabs{margin:0 12px}.tabs button{padding-left:12px;padding-right:12px}.tab-panel{padding:14px 12px;min-height:440px}.form-grid{grid-template-columns:1fr;gap:11px}.package-load{flex-wrap:wrap}.package-load input{width:100%;flex-basis:100%}.environment-item{flex-direction:column;gap:0}.progress-area{padding:14px 12px}.notice{margin-left:12px;margin-right:12px}.harness-actions{padding-left:12px;padding-right:12px}.harness-actions .inline-field{flex-basis:100%}.button-row{gap:6px}.button-row button{padding-left:10px;padding-right:10px}}
.harness-report{margin:0 20px 18px}.harness-report summary{cursor:pointer;color:#35566f;padding:8px 0}
.preview-workspace{margin:0 20px 16px}.preview-workspace .button-row{gap:7px}.preview-workspace strong{margin-right:4px}.preview-workspace .check-field{margin:0 0 0 5px}.model-viewer{height:430px;min-height:280px;background:#f1f3f3;border:1px solid var(--line);position:relative}.model-viewer canvas{display:block;width:100%;height:100%;touch-action:none;outline:none}.json-workbench{margin:0 20px 18px}.json-workbench summary{cursor:pointer;color:#35566f;font-weight:600;padding:9px 0}.json-workbench textarea{display:block;width:100%;margin-top:7px;font-family:Consolas,monospace;font-size:12px;resize:vertical;line-height:1.6}.json-workbench .field-note{display:block}.preview-workspace:has(.model-viewer:not([hidden])) .button-row{margin-bottom:9px}@media(max-width:760px){.preview-workspace,.json-workbench{margin-left:12px;margin-right:12px}.model-viewer{height:350px}}
#task-input{margin:0 20px 18px}.task-input-heading{display:flex;align-items:center;justify-content:space-between;gap:10px 20px;flex-wrap:wrap;margin-bottom:11px}.task-input-heading h2{font-size:16px;font-weight:600;line-height:1.4;margin:0}.task-input-heading .task-json-toolbar{margin-top:0;gap:7px}.task-environment{margin:0 0 8px;padding:11px 13px}.task-environment #environment-source-note{margin:0 0 5px;color:var(--ink);overflow-wrap:anywhere}.environment-details summary{cursor:pointer;color:#35566f;font-weight:600;padding:6px 0}.environment-source-choices{gap:10px 24px;margin:7px 0 12px}.environment-source-choices .check-field{margin:0}.task-environment input[type=radio]{width:16px;height:16px;min-height:16px;accent-color:var(--blue)}#package-environment-pane .package-load{margin:0 0 8px}#package-environment-pane .environment-list{min-height:0;max-height:110px;padding:6px 8px}#imported-environment-pane #reference-models:empty{display:none}#task-input #json-workbench{margin:0}#task-input #json-workbench summary{padding:7px 0}#task-input #json-workbench .field-note{margin:3px 0 7px}#task-input #json-editor{margin-top:0;max-height:330px}#task-input #environment-importer>.button-row:first-child{margin-top:0}@media(max-width:760px){#task-input{margin-left:12px;margin-right:12px}.task-input-heading{align-items:flex-start;flex-direction:column;gap:9px}.task-input-heading .task-json-toolbar{display:grid;grid-template-columns:1fr 1fr;width:100%}.task-json-toolbar button{white-space:normal}.task-environment{padding:9px 10px}.environment-source-choices{align-items:flex-start;flex-direction:column;gap:9px}#package-environment-pane .package-load{margin-bottom:8px}#task-input #json-workbench{margin:0}}
#task-source-note{margin:0 0 10px;line-height:1.6}.task-example{margin:0 0 14px}.task-example a{color:var(--blue);text-underline-offset:3px;line-height:1.6}.task-example .field-note{margin:3px 0 0}.optional-task-directory{margin-top:9px}.optional-task-directory summary{font-size:13px;font-weight:400}.optional-task-directory .package-load{margin-top:8px!important}.optional-task-directory .package-load button{white-space:normal}
