:root{--ink:#172b46;--muted:#66788c;--blue:#1764cf;--line:#dfe6ef;--page:#f5f7fa;--panel:#fff;--stage:#edf2f7;--success:#268069;--radius:18px}
*{box-sizing:border-box}body{margin:0;background:var(--page);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;font-size:14px;-webkit-font-smoothing:antialiased}.header{max-width:1480px;margin:auto;padding:30px 36px 25px;display:flex;align-items:center;justify-content:space-between}.eyebrow{font-size:11px;letter-spacing:2px;font-weight:700;color:var(--blue);margin-bottom:8px}h1{font-size:27px;letter-spacing:-.5px;margin:0;font-weight:650}.header-state{display:flex;gap:14px;align-items:center}.mode{background:#e7f2ee;color:var(--success);padding:8px 12px;border-radius:30px;font-size:12px;font-weight:600;white-space:nowrap}.mode i{display:inline-block;width:6px;height:6px;background:var(--success);border-radius:50%;margin-right:7px}.version{font-size:12px;color:var(--muted)}main{max-width:1480px;margin:auto;padding:0 36px;display:grid;grid-template-columns:minmax(0,1fr) 305px;gap:22px;align-items:start}.viewer-card,.info-card{border:1px solid var(--line);background:var(--panel);border-radius:var(--radius);overflow:hidden}.viewer-heading{padding:23px 26px 20px;display:flex;align-items:center;justify-content:space-between}h2{font-size:18px;font-weight:650;line-height:1.45;margin:0}.viewer-heading p{margin:6px 0 0;color:var(--muted);font-size:13px}.small-label{color:var(--muted);font-size:12px;border:1px solid var(--line);padding:5px 8px;border-radius:6px}#viewport{position:relative;height:clamp(360px,calc(100vh - 280px),590px);background:var(--stage);touch-action:none;outline:none}#viewport:focus-visible{box-shadow:inset 0 0 0 3px var(--blue)}canvas{display:block;width:100%;height:100%;touch-action:none}.view-label{position:absolute;left:22px;top:20px;color:var(--muted);font-size:12px;pointer-events:none}.orientation{position:absolute;bottom:18px;left:22px;font-size:11px;color:var(--muted);pointer-events:none}.view-toolbar{padding:18px 22px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.view-buttons{display:flex;gap:7px;flex-wrap:wrap}button{font:inherit;font-size:12px;font-weight:600;border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:9px 13px;color:var(--ink);cursor:pointer;min-height:36px;transition:background .15s}button:hover:not(:disabled){background:#edf4ff;border-color:#b9cef0}button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #80b4ff;outline-offset:3px}button.active{color:var(--blue);background:#edf4ff;border-color:#b9cef0}button:disabled{opacity:.4;cursor:wait}.gesture-hint{font-size:11px;margin:0;color:var(--muted)}.touch-hint{display:none;font-size:11px;color:var(--muted);padding:0 20px 16px}aside{display:flex;flex-direction:column;gap:16px}.info-card{padding:23px}.section-caption{font-size:11px;letter-spacing:1px;color:var(--blue);font-weight:650;margin-bottom:12px}.body-text{color:var(--muted);font-size:12px;line-height:1.9;margin:12px 0 19px}.model-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:18px 0}.model-stats>div{display:flex;flex-direction:column;gap:5px}.model-stats strong{font-size:28px;letter-spacing:-1px;font-weight:600}.model-stats span{font-size:11px;color:var(--muted)}.model-status{font-size:11px;padding-top:14px;border-top:1px solid var(--line);color:var(--muted)}.model-status[data-state=ready]{color:var(--success)}.model-status[data-state=error]{color:#a73636}.structure-row{display:flex;align-items:center;justify-content:space-between;font-size:13px;margin:14px 0}.structure-row strong{font-weight:600}.joint-description{font-size:11px;line-height:1.7;color:var(--muted);margin:10px 0 16px}.separated{border-top:1px solid var(--line);padding-top:16px}.subtle{font-size:11px;color:var(--muted);line-height:1.85;margin:13px 0 0}details{border-top:1px solid var(--line);margin-top:18px;padding-top:13px}summary{color:var(--blue);font-size:11px;cursor:pointer}#joint-list{padding-top:12px}.joint-item{padding:8px 0;border-bottom:1px solid var(--line);font-size:11px;line-height:1.7}.joint-item code{display:block;overflow-wrap:anywhere;color:var(--muted);font-size:10px}.boundary-card p{font-size:12px;line-height:1.85;margin:0}.boundary-card p.subtle{font-size:11px;margin-top:12px}footer{max-width:1480px;margin:auto;padding:21px 36px 30px;display:flex;justify-content:space-between;gap:12px;color:var(--muted);font-size:11px;line-height:1.8}a{color:var(--muted);text-decoration:none}a:hover{color:var(--blue)}#loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;background:var(--stage);z-index:2;font-size:12px;color:var(--muted)}#loading[hidden]{display:none}#loading strong{font-size:14px;color:var(--ink);font-weight:600}.spinner{width:24px;height:24px;border-radius:50%;border:2px solid #d4dfed;border-top-color:var(--blue);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
@media(min-width:1600px){#viewport{height:clamp(420px,calc(100vh - 280px),680px)}}
@media(max-width:1000px){main{grid-template-columns:minmax(0,1fr) 270px;gap:16px;padding:0 22px}.header{padding:25px 22px 22px}.info-card{padding:20px}#viewport{height:clamp(360px,calc(100vh - 260px),530px)}footer{padding:20px 22px}.gesture-hint{display:none}}
@media(max-width:760px){.header{padding:22px 18px}h1{font-size:22px}.eyebrow{font-size:10px}.header-state{gap:8px}.mode{font-size:10px;padding:7px 9px}.version{font-size:10px}main{grid-template-columns:1fr;padding:0 14px}.viewer-heading{padding:19px 20px}#viewport{height:470px}.view-toolbar{padding:14px 16px}.view-buttons{gap:6px}button{padding:9px 11px}.touch-hint{display:block}.orientation{font-size:10px;left:17px}.view-label{left:17px}aside{display:grid;grid-template-columns:1fr;gap:14px}.model-stats{max-width:310px}footer{padding:20px 18px;flex-direction:column;gap:5px}}
@media(max-width:360px){h1{font-size:20px}.header-state{flex-direction:column;align-items:flex-end;gap:4px}#viewport{height:420px}.view-buttons{gap:5px}button{font-size:11px;padding:9px 9px}}
@media(prefers-reduced-motion:reduce){.spinner{animation:none}button{transition:none}}
.guide-card{margin-top:0}.guide-card summary{font-size:12px;font-weight:600}.guide-card ol{padding-left:18px;margin:14px 0 0;font-size:12px;line-height:1.85}.guide-card li+li{margin-top:9px}.source-card details{margin-top:0;padding-top:0;border-top:0}
.viewer-heading select,.config-bar select{font:inherit;font-size:12px;color:var(--ink);background:white;border:1px solid var(--line);border-radius:8px;padding:9px;max-width:100%}#training-panel{padding:0 24px 14px}#task-goal{font-size:13px;line-height:1.7;margin:0 0 12px}.task-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.task-metrics>div{background:var(--page);padding:10px 12px;border-radius:8px}.task-metrics span{display:block;color:var(--muted);font-size:10px;margin-bottom:5px}.task-metrics strong{font-size:16px;font-weight:650}.task-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;color:var(--muted);font-size:10px}.task-actions{display:flex;gap:8px;flex-wrap:wrap;padding:0 22px}#task-start,#task-check{background:var(--blue);color:white;border-color:var(--blue)}#task-feedback{margin:12px 22px;font-size:12px;line-height:1.7;min-height:20px}#training-panel[data-phase=passed]~#task-feedback{color:var(--success)}#task-hint{margin:10px 22px;padding:12px;background:#fff6e5;border-radius:8px;font-size:11px;line-height:1.7}#task-hint p{margin:6px 0 0}.training-scope{font-size:10px;line-height:1.7;color:var(--muted);margin:12px 22px 18px}#viewport{height:clamp(300px,calc(100vh - 480px),480px)}.config-bar{max-width:1480px;margin:0 auto 18px;padding:0 36px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;font-size:12px}.config-bar label{display:flex;align-items:center;gap:10px}.config-note{color:var(--muted);font-size:11px}
@media(max-width:760px){.config-bar{padding:0 14px;gap:10px}.viewer-heading{gap:12px;flex-wrap:wrap}#training-panel{padding:0 20px 14px}.task-metrics strong{font-size:13px}.task-actions{padding:0 20px}}
/* Joint controls */
main{grid-template-columns:minmax(0,1fr) 350px}.viewer-card{position:sticky;top:18px}.control-card{padding:21px}.control-heading{display:flex;align-items:center;justify-content:space-between;gap:8px}.control-heading .section-caption{margin-bottom:7px}.control-heading h2{font-size:17px}#reset-pose{white-space:nowrap;color:var(--blue);padding:8px 10px}.arm-direction{margin-top:12px}.arm-tabs{display:flex;background:var(--page);padding:4px;border-radius:10px;margin:16px 0 10px;gap:4px}.arm-tabs button{flex:1;border-color:transparent;background:transparent;white-space:nowrap;font-size:12px;padding:9px 6px}.arm-tabs button[aria-selected=true]{background:white;color:var(--blue);border-color:var(--line);box-shadow:0 1px 3px #172b4608}.joint-control{padding:11px 0 12px;border-bottom:1px solid var(--line)}.joint-control.is-selected .joint-label{color:var(--blue)}.joint-top{display:flex;align-items:center;justify-content:space-between;gap:8px}.joint-label{font-size:12px;font-weight:650}.joint-angle{display:flex;align-items:center;gap:5px}.angle-number{width:73px;border:1px solid var(--line);border-radius:6px;padding:6px 7px;font:inherit;font-size:12px;color:var(--ink);background:var(--panel);text-align:right}.angle-number:focus-visible{outline:2px solid #80b4ff;outline-offset:2px}.angle-unit{color:var(--muted);font-size:12px}.joint-zero{padding:3px 7px;min-height:29px;color:var(--muted);font-size:15px}.joint-range{display:block;width:100%;margin:10px 0 6px;accent-color:var(--blue);cursor:pointer;height:16px}.joint-limits{display:flex;justify-content:space-between;color:var(--muted);font-size:10px;line-height:1.5}.angle-error{font-size:10px;color:#a73636;margin:5px 0 0}.axis-setting{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px;padding-top:16px}.axis-setting label{display:flex;align-items:center;gap:5px}.axis-setting input{accent-color:var(--blue);margin:0;width:13px;height:13px}.axis-setting span{font-size:10px;color:var(--blue)}.wrist-position{background:var(--page);border-radius:8px;padding:10px;margin-top:14px;font-size:10px;color:var(--muted);line-height:1.7}.wrist-position output{display:block;color:var(--ink);font-size:11px;font-variant-numeric:tabular-nums;margin-top:3px}.selected-joint{position:absolute;right:18px;top:17px;font-size:11px;color:var(--blue);background:#ffffffdc;border:1px solid var(--line);border-radius:8px;padding:8px 10px;pointer-events:none;max-width:65%;text-align:right}.control-card .subtle{font-size:10px}input:disabled{opacity:.4;cursor:wait}
@media(max-width:1000px){main{grid-template-columns:minmax(0,1fr) 320px}.control-card{padding:18px}.control-heading h2{font-size:16px}}
@media(max-width:760px){main{grid-template-columns:1fr}.viewer-card{position:static}#viewport{height:340px}.selected-joint{font-size:10px;right:14px;top:16px;padding:6px 8px}.control-card{padding:21px}.joint-control{padding:14px 0}.angle-number{width:82px}.joint-range{height:24px}.joint-limits{font-size:11px}}
#hand-lab[hidden]{display:none}#hand-viewport{height:240px;background:var(--stage);border-radius:8px;overflow:hidden;touch-action:none}#hand-status{font-size:11px;line-height:1.7;color:var(--muted)}#hand-controls{max-height:300px;overflow-y:auto;padding:8px 0}.hand-joint{display:grid;grid-template-columns:1fr auto;gap:6px;font-size:11px;margin:12px 0}.hand-joint input{width:100%;grid-column:1/-1;accent-color:var(--blue)}.hand-joint output{color:var(--muted)}
#hand-controls{overflow-x:hidden}.hand-joint{grid-template-columns:minmax(0,1fr) auto}.hand-joint input{min-width:0;margin:0}

/* Hallmark · focused repair: existing palette; robot workspace first.
 * Pre-emit critique: Philosophy 4, Hierarchy 5, Execution 4, Specificity 5, Restraint 5, Variety 4. */
.header,.config-bar,main,footer{max-width:none}
.header{padding:14px 20px 12px}.header .eyebrow{margin-bottom:4px}h1{font-size:23px}
.config-bar{padding:0 20px;margin-bottom:12px;gap:14px}
main{padding:0 20px;gap:16px;grid-template-columns:minmax(0,1fr) 320px}
.viewer-card{display:flex;flex-direction:column;height:calc(100dvh - 134px);min-height:580px;top:10px}
.viewer-heading{padding:10px 16px;gap:12px;flex-shrink:0}.viewer-heading h2{font-size:16px}.viewer-heading p{font-size:11px;margin-top:2px}
#training-panel{padding:0 16px 8px;flex-shrink:0}#task-goal{font-size:12px;margin-bottom:6px;line-height:1.5}
.task-metrics{gap:12px}.task-metrics>div{display:flex;align-items:baseline;gap:8px;padding:6px 10px}.task-metrics span{margin:0}.task-metrics strong{font-size:14px}.task-meta{margin-top:5px}
#viewport{height:auto;min-height:300px;flex:1}.view-toolbar{padding:8px 14px;flex-shrink:0}.task-actions{padding:0 14px;flex-shrink:0}
#task-feedback{margin:7px 14px 10px;min-height:18px;font-size:11px;flex-shrink:0}
#task-hint{margin:0 14px 10px;max-height:100px;overflow:auto;flex-shrink:0}
.control-card{padding:16px}.control-heading h2{font-size:16px}.arm-tabs{margin:10px 0 4px}.arm-direction{margin-top:8px}
.joint-control{padding:8px 0}.joint-range{margin:7px 0 4px}.axis-setting{padding-top:10px}.wrist-position{margin-top:10px}
footer{padding:16px 20px}.guide-card .training-scope{margin:12px 0 0}
body.workspace-expanded{overflow:hidden}
.workspace-expanded main{position:fixed;inset:10px;z-index:20;background:var(--page);padding:0;max-width:none}
.workspace-expanded .viewer-card{position:static;height:calc(100dvh - 20px);min-height:0}
.workspace-expanded aside{height:calc(100dvh - 20px);overflow:auto;overscroll-behavior:contain;padding-bottom:12px}
@media(max-width:1000px){main{grid-template-columns:minmax(0,1fr) 290px;padding:0 14px}.header{padding-left:14px;padding-right:14px}.config-bar{padding:0 14px}.gesture-hint{display:none}.task-metrics>div{gap:4px;padding:6px}.task-metrics strong{font-size:12px}}
@media(max-width:760px){main{grid-template-columns:1fr;padding:0 10px}.header{padding:14px 12px}.config-bar{padding:0 12px}.viewer-card{height:auto;min-height:0;position:static}.viewer-heading{padding:10px 12px;flex-wrap:wrap}.viewer-heading p{display:none}#training-panel{padding:0 12px 8px}.task-metrics>div{display:block}.task-metrics span{margin-bottom:4px}.task-metrics strong{font-size:13px}#viewport{height:480px;min-height:0;flex:none}.touch-hint{padding:0 14px 8px}.gesture-hint{display:none}.control-card{padding:16px}#expand-workspace{display:none}footer{padding:16px 12px}.workspace-expanded main{position:static}.workspace-expanded .viewer-card{height:auto}.workspace-expanded aside{height:auto;overflow:visible}body.workspace-expanded{overflow:auto}}
@media(max-width:360px){#viewport{height:420px}.task-metrics{gap:6px}.config-bar label{gap:6px}}
/* Keep instructions in the control rail; the model owns the main canvas. */
.training-card{padding:14px}.training-card .section-caption{margin-bottom:8px}
.training-card #training-panel{padding:0 0 10px}.training-card .task-metrics{gap:6px}.training-card .task-metrics>div{display:block;padding:8px}.training-card .task-metrics span{margin-bottom:4px}.training-card .task-metrics strong{font-size:13px}
.training-card .task-actions{padding:0;gap:6px}.training-card #task-feedback{margin:10px 0 0}.training-card #task-hint{margin:10px 0 0;max-height:150px}
@media(min-width:761px){aside{height:calc(100dvh - 134px);min-height:580px;overflow:auto;overscroll-behavior:contain;padding-bottom:4px}.viewer-card{min-height:580px}#viewport{min-height:400px}}
@media(max-width:760px){.training-card #training-panel{padding:0 0 10px}.training-card{padding:16px}}
aside> *{flex-shrink:0}

/* Language controls follow the existing visual system; switching does not reload. */
.header{flex-wrap:wrap;gap:12px}.header-state{flex-wrap:wrap;justify-content:flex-end}.language-switch{display:flex;border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:2px;gap:2px}.language-switch button{padding:5px 9px;border:0;border-radius:5px;font-size:11px;white-space:nowrap}.language-switch button[aria-pressed=true]{background:var(--blue);color:white}.joint-label{overflow-wrap:anywhere}html[lang=en] .arm-tabs button{white-space:normal}html[lang=en] .task-metrics strong{font-size:12px}
@media(max-width:760px){.header-state{gap:8px}.language-switch button{padding:6px 9px}.header h1{font-size:21px}}
