:root{--bg: #0b0e14;--text: #e6edf3;--dim: #aab7c4;--accent: #ffc83d;--line: #2a3550}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Microsoft YaHei,sans-serif}a{color:var(--accent);text-decoration:none}.lab{min-height:100vh;display:flex;flex-direction:column}.top{display:flex;align-items:center;justify-content:space-between;padding:18px 32px;border-bottom:1px solid var(--line)}.top .brand{color:var(--text);font-weight:700;font-size:18px}.top nav a{margin-left:18px;color:var(--dim)}.top nav a:hover{color:var(--accent)}.hero{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 24px}.k{color:#8fb0c8;letter-spacing:2px;font-size:14px;margin:0 0 14px}h1{margin:0 0 14px;font-size:34px}.p{color:var(--dim);font-size:16px;line-height:1.8;margin:0 0 28px;max-width:460px}code{color:var(--accent)}.btn{border:1px solid var(--line);padding:10px 20px;border-radius:8px;font-weight:600}.btn:hover{background:#182033}.app-main{flex:1;display:flex;flex-direction:column;padding:12px 16px 16px}.app-main .k{margin:0 0 8px}.lab-body{flex:1;display:flex;gap:14px;min-height:0}.palette,.side{width:210px;background:#121826;border:1px solid var(--line);border-radius:10px;padding:14px;overflow:auto;flex-shrink:0}.palette h3,.side h3{margin:0 0 10px;font-size:14px;color:#8fb0c8;letter-spacing:1px}.palette ul,.side ul{list-style:none;margin:0;padding:0}.part-btn{width:100%;display:flex;align-items:center;gap:8px;background:#1b2433;border:1px solid var(--line);color:var(--text);border-radius:8px;padding:8px 10px;margin-bottom:8px;cursor:pointer;font-size:14px;text-align:left}.part-btn:hover{border-color:var(--accent);background:#223049}.part-btn .swatch{width:14px;height:14px;border-radius:4px;display:inline-block;flex-shrink:0;border:1px solid rgba(255,255,255,.2)}.part-btn span{flex:1}.part-btn em{font-style:normal;color:var(--dim);font-size:12px}.workbench{flex:1;position:relative;background:#0c1220;border:1px solid var(--line);border-radius:10px;overflow:hidden;min-width:0}.canvas{position:absolute;top:0;right:0;bottom:0;left:0}.canvas canvas{display:block}.toolbar{position:absolute;left:12px;top:12px;z-index:3}.toolbar .hint{background:#121826d9;border:1px solid var(--line);color:var(--dim);border-radius:8px;padding:6px 10px;font-size:12px}.side .placed li{display:flex;align-items:center;gap:6px;padding:5px 6px;border-radius:6px;font-size:13px}.side .placed li.sel{background:#22334f}.side .placed .grow{flex:1}.side .placed button{background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:6px;font-size:11px;padding:2px 6px;cursor:pointer}.side .placed button:hover{color:var(--accent);border-color:var(--accent)}.side .placed button.on{background:#2f6b3a;border-color:#46995a;color:#e8f5ea}.side .placed button.off{background:#6b2f2f;border-color:#994646;color:#f5e8e8}.side .placed .empty{color:var(--dim);font-size:13px}.side .joints{margin-top:12px;display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--dim);border-top:1px solid var(--line);padding-top:10px}.side .rotate{margin-top:10px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--dim)}.side .rotate button{background:#1b2433;border:1px solid var(--line);color:var(--text);border-radius:6px;padding:3px 8px;cursor:pointer}.side .rotate button:hover{border-color:var(--accent);color:var(--accent)}.side .layers{list-style:none;margin:0 0 10px;padding:0}.side .layers li{display:flex;align-items:center;gap:6px;padding:5px 6px;border-radius:6px;font-size:13px}.side .layers li.sel{background:#22334f}.side .layers .grow{flex:1}.side .layers button.vis{background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:6px;font-size:13px;padding:1px 6px;cursor:pointer}.side .layers button.act{background:transparent;border:1px solid var(--line);color:var(--dim);border-radius:6px;font-size:11px;padding:2px 6px;cursor:pointer}.side .layers button.act:hover{color:var(--accent);border-color:var(--accent)}.props{border-bottom:1px solid var(--line);padding-bottom:10px;margin-bottom:12px}.props h3{margin:0 0 8px}.props .row{font-size:12.5px;color:var(--dim);margin:3px 0;line-height:1.4;word-break:break-all}.props .row b{color:var(--text)}.props .row em{font-style:normal;color:#8fb0c8;margin-left:6px}.props .act-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.props .act-row button{background:#1b2433;border:1px solid var(--line);color:var(--text);border-radius:6px;padding:3px 8px;font-size:12px;cursor:pointer}.props .act-row button:hover{border-color:var(--accent);color:var(--accent)}.props .act-row button.on{background:#2f6b3a;border-color:#46995a;color:#e8f5ea}.props .act-row button.off{background:#6b2f2f;border-color:#994646;color:#f5e8e8}.props .empty{color:var(--dim);font-size:12.5px}
