body:has(#theatre.workshop-mode){padding:0;overflow:hidden}.workshop-mode{width:min(100vw,calc(100dvh * 390 / 844),480px);height:auto;aspect-ratio:390/844;max-height:100dvh;background:#21170e}.workshop-mode #app{position:absolute;inset:0;padding:0;overflow:hidden}.workshop-mode #scene-footer,.workshop-mode .background-fx,.workshop-mode .mini-brand,.workshop-mode .topbar>button:first-child{display:none!important}.workshop-mode .topbar{top:3%;z-index:30;pointer-events:none;justify-content:flex-end}.workshop-mode .topbar .sound-btn{margin-left:auto;pointer-events:auto;width:8cqw;height:8cqw;background:#2c1b10c7;border-color:#bc9858;box-shadow:none}.workshop-mode .music-note{font-size:4cqw}
.w-workshop{position:absolute;inset:0;isolation:isolate;overflow:hidden;container-type:inline-size;touch-action:none;user-select:none;-webkit-user-select:none;color:#f6e4bc;font-family:var(--serif)}.w-workshop [hidden]{display:none!important}.w-world{position:absolute;width:390px;height:844px;transform-origin:0 0}.w-camera{position:absolute;inset:0;transform-origin:50% 35%;animation:wEnter 1s ease-out both}.w-background{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:fill;pointer-events:none}.w-room-shade{position:absolute;inset:0;background:linear-gradient(#190c0477,transparent 24%,transparent 55%,#160e06a3);pointer-events:none}.w-backlight{position:absolute;left:26px;top:120px;width:340px;height:450px;background:radial-gradient(ellipse,#ffe5a9c4,#f3bf6050 45%,transparent 72%);opacity:0;mix-blend-mode:screen;pointer-events:none}.w-subject,.w-shadow{position:absolute;left:75px;top:112px;width:240px;height:400px;transform-origin:52% 50%;will-change:transform}.w-subject{z-index:4;transition:opacity .65s}.w-shadow{z-index:3;opacity:0;mix-blend-mode:multiply;pointer-events:none;filter:blur(.6px)}.w-character,.w-shadow canvas,.w-costume-ghost{position:absolute;inset:0;width:100%;height:100%;display:block}.w-costume-ghost{pointer-events:none;z-index:2}.w-character{cursor:pointer}.w-markers{position:absolute;inset:0;pointer-events:none;z-index:5}.w-markers button{pointer-events:auto;touch-action:manipulation}.w-joint{position:absolute;transform:translate(-50%,-50%);width:32px;height:32px;display:grid;place-items:center;border:1px solid #fce0a1;border-radius:50%;background:#83592bde;color:#fff3c9;font:13px var(--serif);box-shadow:0 0 14px #ffda7b66}.w-joint:disabled{opacity:.4}.w-joint.confirmed{background:#395d48}.w-paint-point{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px;display:grid;place-items:center;border:1px solid #ffe2a2;border-radius:50%;background:#48271688;box-shadow:0 0 12px #e2b35c55}.w-paint-point i{width:7px;height:7px;border:1px solid #ffe8b4;border-radius:50%;background:#ffe8b477}.w-paint-point.chosen{border-width:2px;box-shadow:0 0 12px #fff1bb}.w-header{position:absolute;z-index:15;top:3.3%;left:8%;right:16%;text-shadow:0 1px 5px #170c05}.w-header>span{font-size:2.5cqw;letter-spacing:2px;color:#e6cea0}.w-header i{font-style:normal;margin-left:12px;padding-left:12px;border-left:1px solid #b7a075}.w-header h1{font:5.8cqw/1.4 var(--serif);letter-spacing:2px;margin:8px 0}.w-progress{display:flex;gap:5px}.w-progress i{width:12px;height:2px;background:#ad956355}.w-progress i.done{background:#e7c684}.w-caption{position:absolute;z-index:16;left:7%;right:7%;bottom:3%;min-height:8%;display:flex;justify-content:center;align-items:center;padding:2% 4%;box-sizing:border-box;border-top:1px solid #bb995d77;color:#ffe9bd;background:linear-gradient(90deg,transparent,#22140cd9 18% 82%,transparent);pointer-events:none}.w-caption p{margin:0;text-align:center;white-space:pre-line;font:3.05cqw/1.8 var(--serif);letter-spacing:.5px;text-shadow:0 1px 3px #180c04}.w-loading{position:absolute;z-index:35;top:40%;left:10%;right:10%;padding:14px;text-align:center;background:#3b2716e8;border:1px solid #c1a16e;font:3.5cqw var(--serif)}
.w-controls{position:absolute;inset:0;z-index:8;pointer-events:none}.w-controls button{pointer-events:auto;touch-action:manipulation;font-family:var(--serif)}.w-paper{position:absolute;left:14px;right:14px;top:548px;border:1px solid #9e6938;border-radius:3px;background:radial-gradient(ellipse at 30% 10%,#f8e6bb,#e5c997);box-shadow:0 0 0 3px #d9b17b44,0 8px 28px #170c0880;color:#50321d;pointer-events:auto}.w-primary,.w-secondary{min-height:40px;padding:8px 17px;border:1px solid #e9c486;border-radius:20px 3px;background:linear-gradient(130deg,#a33923,#7a2519);color:#ffe8b7;box-shadow:inset 0 0 0 3px #b98a3f55,0 3px 8px #1c0c0480;font:15px var(--serif);letter-spacing:1px;cursor:pointer}.w-primary:disabled{opacity:.55;cursor:default}.w-secondary{background:#3e2a1ce8;border-color:#b48b51}.w-text{border:0;border-bottom:1px solid #9d753c70;border-radius:0;background:transparent;color:#704a25;padding:7px 10px;font:12px var(--serif)}.w-primary:focus-visible,.w-secondary:focus-visible,.w-item:focus-visible{outline:2px solid #f4d895;outline-offset:3px}.w-action-panel{position:absolute;left:35px;right:35px;top:660px;display:flex;justify-content:center;gap:8px}.w-action-panel .w-primary{min-width:215px}.w-base-note{position:absolute;left:35px;top:557px;display:flex;gap:12px}.w-base-note span{font-size:12px;color:#eed6a4;border-bottom:1px solid #c4a05b;padding:5px 0;text-shadow:0 1px 4px #291509}.w-joint-progress{position:absolute;top:572px;left:60px;right:60px;display:flex;justify-content:space-between}.w-joint-progress>span{font:17px var(--serif);display:flex;flex-direction:column;align-items:center;gap:6px;color:#c3a16b}.w-joint-progress i{font-style:normal;font-size:15px}.w-joint-progress .done{color:#e9d3a0}.w-joint-progress .current{color:#fff0c4;text-shadow:0 0 8px #eec36c}
.w-category-tabs{display:flex;border-bottom:1px solid #b78b4d;padding:7px 8px 0;gap:4px}.w-category-tabs button{flex:1;border:0;border-radius:4px 4px 0 0;background:#d9b17b44;color:#6b4b2c;font-size:13px;padding:6px 3px 8px;display:flex;gap:4px;align-items:center;justify-content:center}.w-category-tabs button>span{width:20px;height:20px}.w-category-tabs svg{display:block;width:100%;height:100%}.w-category-tabs button.chosen{background:#a83424;color:#fbe2b0;box-shadow:inset 0 0 0 1px #d8a959}.w-item-row{display:flex;gap:8px;padding:10px 10px 7px;min-height:109px}.w-item{position:relative;flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:5px 4px;border:1px solid #bc945d;border-radius:4px;background:linear-gradient(130deg,#f4dfb6,#e4c48c);color:#58351c;overflow:hidden}.w-item img{width:84px;height:73px;object-fit:contain;pointer-events:none}.w-item small{font:11px/1.5 var(--serif);white-space:nowrap}.w-item.chosen{border:2px solid #a93423;padding:4px 3px;box-shadow:0 0 0 1px #d5a25f,inset 0 0 14px #b95a2533}.w-item i{display:none;position:absolute;right:2px;bottom:19px;width:16px;height:16px;line-height:16px;border-radius:50%;background:#9c3421;color:#ffe7b6;font-style:normal;font-size:11px}.w-item.chosen i{display:block}.w-missing{font-size:13px;color:#9b7b4e;gap:8px;background:#cdae7933;border-style:dashed}.w-missing small{font-size:10px}.w-tools{display:flex;gap:6px;align-items:center;justify-content:space-between;padding:4px 10px 10px}.w-tools .w-primary{font-size:12px;min-height:35px;padding:6px 14px}.w-tools .w-text{font-size:11px;padding:6px}.w-zone-tabs{display:flex;gap:3px;padding:8px;border-bottom:1px solid #b88b4555}.w-zone-tabs button{flex:1;border:0;background:#b68a4530;color:#785331;border-radius:2px;padding:6px 2px;font:10px var(--serif)}.w-zone-tabs button.chosen{background:#9b3e27;color:#ffe5b2}.w-pigments{display:flex;justify-content:space-around;padding:10px 9px}.w-pigments button{display:flex;flex-direction:column;align-items:center;gap:5px;border:0;background:transparent;color:#674423;font-size:11px;padding:4px}.w-pigments i{display:block;width:27px;height:27px;border-radius:50%;background:var(--pigment);box-shadow:inset 0 0 0 3px #ddc595,inset 0 0 0 4px #603e23,0 2px 3px #6e482855}.w-pigments .chosen i{outline:2px solid #9c3321;outline-offset:3px}.w-pattern-row{display:flex;justify-content:space-around;padding:10px 5px}.w-pattern-row button{display:flex;flex-direction:column;gap:4px;border:1px solid #a8854a66;background:#ecd29d;color:#795126;border-radius:3px;font-size:11px;padding:7px 10px}.w-pattern-row b{font:28px Georgia}.w-pattern-row .chosen{background:#9e3925;color:#ffe0a3}.w-loupe{position:absolute;z-index:10;right:21px;top:186px;width:88px;height:88px;border:2px solid #f5d38e;border-radius:50%;background:#ebcf98;box-shadow:0 4px 20px #1b0d0777;pointer-events:none}.w-rod{position:absolute;z-index:9;left:288px;top:522px;width:48px;height:114px;padding:0;border:0;background:transparent;box-shadow:none;touch-action:none;cursor:grab}.w-rod svg{display:block;width:100%;height:100%;pointer-events:none}.w-rod:active{cursor:grabbing}.w-rod-target{position:absolute;transform:translate(-50%,-50%);width:34px;height:34px;display:grid;place-items:center;border:1px dashed #fff0b6;border-radius:50%;font-size:20px;color:#fff0b6;background:#71572555;transition:box-shadow .2s}.w-rod-target.near{box-shadow:0 0 18px #ffdc87;border-style:solid;background:#bc8a3e88}.w-rod-line{position:absolute;inset:0;width:390px;height:844px;z-index:5;opacity:0;pointer-events:none}.w-rod-line path{fill:none;stroke:#51391e;stroke-width:2;filter:drop-shadow(1px 0 0 #c79b56)}.w-workshop[data-workshop-phase=RODS].rod-installed .w-rod-line,.w-workshop[data-workshop-phase=PREVIEW] .w-rod-line{opacity:1}.w-preview-note{position:absolute;top:600px;left:20px;right:20px;text-align:center;font-size:12px;color:#f4dba8;text-shadow:0 1px 3px #2f1708}.w-result-tools{position:absolute;left:30px;right:30px;top:595px;display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.w-result-tools button{font-size:13px;padding:10px 14px}.w-result-tools button:last-child{width:80%}.w-save-image{position:absolute;z-index:30;top:95px;left:25px;right:25px;height:460px;display:block;background:#23170e;pointer-events:auto;border:1px solid #bf9b61}.w-save-image img{width:100%;height:100%;object-fit:contain}.w-save-image:after{content:'长按保存 · 轻触查看原图';position:absolute;bottom:7px;left:0;right:0;text-align:center;font-size:12px;color:#f1d9a7}.w-workshop[data-workshop-phase=INTRO] .w-subject{opacity:0}.w-workshop[data-workshop-phase=PREVIEW] .w-room-shade{background:#160d0755}.w-calibration{position:absolute;z-index:50;top:11%;left:4%;width:168px;max-height:70%;overflow:auto;padding:10px;background:#271c13ed;border:1px solid #c3a56d;font:10px sans-serif;color:#f1dab1;touch-action:pan-y}.w-calibration label{display:flex;align-items:center;justify-content:space-between;gap:4px;margin:5px 0}.w-calibration input[type=number]{width:64px}.w-calibration select,.w-calibration textarea{width:100%;box-sizing:border-box}.w-calibration textarea{height:90px;font-size:9px}.w-calibration input,.w-calibration select,.w-calibration textarea{background:#f0dfbd;color:#362718;border:1px solid #a18355;padding:3px}.w-calibration button{background:#7b3822;color:#ffe7b5;border:1px solid #bb915b;padding:6px}.w-cal-anchor{position:absolute;font:12px sans-serif;color:#f2ff9c;transform:translate(-50%,-50%);text-shadow:0 1px 3px #111;white-space:nowrap}
@keyframes wEnter{from{opacity:0;transform:scale(1.025)}to{opacity:1;transform:scale(1)}}@media(prefers-reduced-motion:reduce){.w-workshop *{animation:none!important;transition:none!important}}

.w-workshop[aria-busy=true] .w-controls button{pointer-events:none;opacity:.6}

.fx-paused .w-camera{animation:none}

/* One continuous rod, with a shared wrist anchor and an accessible handle. */
.w-rod{z-index:12!important;border:1px dashed #f3d58e55!important;border-radius:18px!important;background:#e4b76509!important;transform:none!important;box-shadow:none!important;touch-action:none!important;min-width:44px;min-height:44px}
.w-rod:hover,.w-rod:focus-visible,.rod-dragging .w-rod{border-color:#ffe2a9!important;background:#e4b76522!important;outline:none}
.w-rod-line{z-index:6;opacity:0;overflow:visible}
.w-workshop[data-workshop-phase=RODS] .w-rod-line,.w-workshop[data-workshop-phase=PREVIEW] .w-rod-line{opacity:1}
.w-rod-line path{stroke:#39271b;stroke-width:3.5;stroke-linecap:round;filter:drop-shadow(1px 0 #c39a5c)}
.w-rod-grip{stroke:#c79e60;stroke-width:7;stroke-linecap:round}
.w-rod-pin{fill:#bd8e45;stroke:#ffe5a3;stroke-width:1.3}
.w-rod-tools{position:absolute;top:610px;left:32px;right:32px;display:flex;gap:14px;justify-content:center}
.w-rod-tools button{min-height:44px;font-size:12px;padding:7px 16px}
