:root{color-scheme:dark;font-family:system-ui,sans-serif;background:#070706}*{box-sizing:border-box}html,body,main{width:100%;height:100%;margin:0;overflow:hidden}body{min-width:320px;background:radial-gradient(circle at 50% 36%,#33291d 0,#11100d 48%,#050505 100%)}main{position:relative;isolation:isolate}main:before{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(105deg,transparent 38%,#d6974a0b 48%,#f2c27a14 50%,transparent 61%);animation:sweep 9s ease-in-out infinite alternate}#scene{position:absolute;inset:0;width:100%;height:100%;touch-action:none}#shaker{--mix:0;position:absolute;z-index:3;left:50%;bottom:max(4vh,24px);width:clamp(88px,15vw,120px);height:clamp(145px,24vw,190px);padding:0;border:0;background:transparent;transform:translateX(-50%);cursor:pointer;filter:drop-shadow(0 24px 20px #000b);touch-action:manipulation;-webkit-tap-highlight-color:transparent}#shaker:focus-visible{outline:3px solid #ffd38d;outline-offset:11px;border-radius:20px}.shaker-lid{position:absolute;left:9%;top:0;width:82%;height:18%;border-radius:10px 10px 4px 4px;background:linear-gradient(90deg,#111314,#5f625e 12%,#181a1a 42%,#7c7f79 58%,#1e2020 82%,#090a0b);border:1px solid #858984;box-shadow:inset 0 5px 6px #ffffff18,0 4px 0 #070808}.shaker-lid:after{content:"";position:absolute;left:8%;right:8%;top:48%;height:2px;background:#b9bcb52b;box-shadow:0 6px #0008}.shaker-cup{position:absolute;left:0;right:0;top:17%;bottom:0;overflow:hidden;border:2px solid #9ba3a0;border-radius:7px 7px 25px 25px;background:linear-gradient(90deg,#b8cfcb18,#e3f4ee4f 18%,#72817e29 48%,#eaf8f24a 78%,#75807e1b);box-shadow:inset 7px 0 12px #ffffff16,inset -9px 0 13px #0008}.shaker-cup:before{content:"";position:absolute;z-index:4;inset:7% 10% auto;height:45%;border-left:1px solid #c9d5d04d;border-right:1px solid #07080855;background:repeating-linear-gradient(0deg,transparent 0 18px,#e7f1ec2c 19px 20px)}.water,.powder,.mixed{position:absolute;left:4%;right:4%;bottom:3%}.water{height:55%;border-radius:8px 8px 20px 20px;background:linear-gradient(90deg,#8fc0cc88,#e7fbffbf 23%,#75a7b488 63%,#c9f3f6aa);box-shadow:inset 0 8px 12px #fff5;opacity:calc(1 - var(--mix))}.powder{left:5%;right:5%;height:calc(23% - var(--mix) * 12%);border-radius:50% 50% 19px 19px/22% 22% 13px 13px;background:linear-gradient(90deg,#8f5926,#e5bd7d 25%,#b97837 58%,#f0cb8e 80%,#75451e);box-shadow:inset 0 7px 9px #ffe8be66;opacity:calc(1 - var(--mix))}.mixed{height:55%;border-radius:8px 8px 20px 20px;background:linear-gradient(90deg,#8f5926,#d49a52 18%,#ab6b2f 55%,#e0aa64 76%,#764316);box-shadow:inset 0 8px 10px #f4c98d55;opacity:var(--mix)}.shine{position:absolute;z-index:5;left:17%;top:8%;width:12%;height:69%;border-radius:50%;background:linear-gradient(#fff7,transparent);transform:rotate(3deg)}#shaker.shake{animation:shake .34s cubic-bezier(.36,.07,.19,.97)}#shaker.shake .water,#shaker.shake .powder,#shaker.shake .mixed{animation:liquid .34s ease-out}#shaker.fly{pointer-events:none;animation:fly .88s cubic-bezier(.45,.04,.2,1) forwards}#pulse{position:absolute;z-index:2;left:50%;bottom:12vh;width:100px;height:100px;border:2px solid #d18b42;border-radius:50%;opacity:0;transform:translate(-50%,50%) scale(.4);pointer-events:none}#pulse.play{animation:pulse .65s ease-out}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@keyframes shake{15%{transform:translateX(-57%) rotate(-8deg)}35%{transform:translateX(-43%) rotate(9deg)}55%{transform:translateX(-56%) rotate(-7deg)}75%{transform:translateX(-44%) rotate(6deg)}100%{transform:translateX(-50%)}}@keyframes liquid{35%{transform:rotate(9deg) translateY(-8%)}70%{transform:rotate(-7deg) translateY(-3%)}}@keyframes fly{0%{transform:translateX(-50%) scale(1)}55%{transform:translate(-50%,-44vh) scale(.48) rotate(-18deg);opacity:1}78%{transform:translate(-50%,-48vh) scale(.25) rotate(-68deg);opacity:.9}100%{transform:translate(-50%,-46vh) scale(.08) rotate(-82deg);opacity:0}}@keyframes pulse{0%{opacity:.8}100%{opacity:0;transform:translate(-50%,50%) scale(4)}}@keyframes sweep{to{transform:translateX(8%)}}@media(max-width:600px){#shaker{bottom:max(3vh,18px)}@keyframes fly{0%{transform:translateX(-50%) scale(1)}60%{transform:translate(-50%,-49vh) scale(.4) rotate(-20deg);opacity:1}100%{transform:translate(-50%,-49vh) scale(.08) rotate(-82deg);opacity:0}}}@media(prefers-reduced-motion:reduce){main:before{animation:none}#shaker.shake,#shaker.shake .water,#shaker.shake .powder,#shaker.shake .mixed,#pulse.play{animation-duration:.01ms}#shaker.fly{animation-duration:.3s}}

#scene{cursor:grab}#scene.dragging{cursor:grabbing}.part-picker{position:absolute;z-index:5;top:max(14px,env(safe-area-inset-top));left:50%;width:min(680px,calc(100% - 28px));padding:10px 12px 12px;transform:translateX(-50%);border:1px solid #e3bd7b33;border-radius:16px;background:#0b0a08c7;box-shadow:0 12px 40px #0008,inset 0 1px #fff1;backdrop-filter:blur(12px)}.picker-head{display:flex;align-items:center;justify-content:space-between;margin:0 4px 8px;color:#dfd7c8;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.picker-head #part-level{color:#eeb86c;font-variant-numeric:tabular-nums}.part-list{display:grid;grid-template-columns:repeat(9,1fr);gap:5px}.part{min-width:0;padding:8px 4px;border:1px solid #ffffff16;border-radius:9px;color:#aaa59c;background:#ffffff09;font:700 12px/1 system-ui,sans-serif;cursor:pointer;transition:color .18s,border-color .18s,background .18s,transform .18s}.part:hover{color:#fff;border-color:#db9c535c;background:#db9c5317}.part:active{transform:scale(.96)}.part.active{color:#17110a;border-color:#f2b55e;background:linear-gradient(#f6c77e,#d99543);box-shadow:0 0 18px #d58f3840}.part:focus-visible{outline:2px solid #ffe0a4;outline-offset:2px}.rotate-hint{position:absolute;z-index:2;left:50%;bottom:calc(max(4vh,24px) + clamp(155px,25vw,200px));margin:0;transform:translateX(-50%);color:#d7c4a499;font-size:11px;font-weight:650;letter-spacing:.08em;pointer-events:none;white-space:nowrap}
@media(min-width:761px){.part-picker{top:50%;left:max(18px,calc((100vw - 1180px)/2));width:168px;transform:translateY(-50%)}.picker-head{display:block;line-height:1.55}.picker-head #part-level{display:block;margin-top:2px}.part-list{grid-template-columns:repeat(2,1fr)}.part{padding:9px 4px}}
@media(max-width:760px){.part-picker{padding:9px 9px 10px}.part-list{display:flex;overflow-x:auto;scrollbar-width:none}.part-list::-webkit-scrollbar{display:none}.part{flex:0 0 auto;min-width:58px;padding:8px}.rotate-hint{bottom:calc(max(3vh,18px) + clamp(150px,25vw,195px))}}
.selection-badge{position:absolute;z-index:5;top:max(18px,env(safe-area-inset-top));left:50%;display:flex;align-items:center;gap:10px;padding:8px 13px;transform:translateX(-50%);border:1px solid #e0a04f52;border-radius:999px;background:#0b0a08cf;box-shadow:0 8px 28px #0008,inset 0 1px #fff1;backdrop-filter:blur(12px);pointer-events:none}.selection-badge span{color:#a59d90;font-size:10px;font-weight:750;letter-spacing:.12em}.selection-badge strong{color:#f1bb6e;font-size:12px;font-variant-numeric:tabular-nums}.model-hint{position:absolute;z-index:2;left:50%;bottom:calc(max(4vh,24px) + clamp(155px,25vw,200px));margin:0;transform:translateX(-50%);color:#d7c4a499;font-size:11px;font-weight:650;letter-spacing:.06em;pointer-events:none;white-space:nowrap}@media(max-width:600px){.model-hint{bottom:calc(max(3vh,18px) + clamp(150px,25vw,195px));font-size:10px}}
#muscle-marker{position:absolute;z-index:4;width:58px;height:82px;border-radius:50%;background:radial-gradient(ellipse,#39190b3d 0,#3113072b 52%,transparent 74%);mix-blend-mode:multiply;filter:blur(1px);opacity:0;transform:translate(-50%,-50%) scale(.9);transition:left .18s ease,top .18s ease,opacity .18s,transform .18s;pointer-events:none}#muscle-marker.visible{opacity:1;transform:translate(-50%,-50%) scale(1)}#muscle-marker[data-part$="Shoulder"]{width:64px;height:58px}#muscle-marker[data-part="chest"]{width:128px;height:68px}#muscle-marker[data-part="abs"]{width:82px;height:112px}#muscle-marker[data-part="back"]{width:132px;height:150px}#muscle-marker[data-part$="Leg"]{width:66px;height:126px}
#impact-flash{position:absolute;z-index:4;width:120px;height:120px;border:3px solid #ffc46f;border-radius:50%;background:radial-gradient(circle,#ffb34b8c 0,#e58d2938 30%,transparent 66%);box-shadow:0 0 34px #ff9d3b99,inset 0 0 24px #fff5;opacity:0;transform:translate(-50%,-50%) scale(.18);pointer-events:none}#impact-flash.play{animation:muscle-impact 1.35s cubic-bezier(.1,.72,.18,1) forwards}@keyframes muscle-impact{0%{opacity:0;transform:translate(-50%,-50%) scale(.18)}12%{opacity:1}55%{opacity:.52}100%{opacity:0;transform:translate(-50%,-50%) scale(2.25)}}
.control-dock{position:absolute;z-index:6;top:max(18px,env(safe-area-inset-top));right:max(18px,env(safe-area-inset-right));display:flex;gap:8px}.icon-button{display:grid;width:46px;height:46px;padding:0;place-items:center;border:1px solid #e0a04f3d;border-radius:14px;color:#b6aa98;background:#0b0a08c9;box-shadow:0 8px 24px #0008,inset 0 1px #fff1;backdrop-filter:blur(10px);cursor:pointer;transition:color .18s,border-color .18s,background .18s,transform .18s}.icon-button svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.icon-button:hover{color:#f1c17d;border-color:#d99b506b}.icon-button:active{transform:scale(.93)}.icon-button:focus-visible{outline:2px solid #ffd18d;outline-offset:3px}.icon-button.active{color:#201307;border-color:#f0b25a;background:#e7a44d;box-shadow:0 0 22px #dd943c59}.reset-button:hover{color:#ff9c76;border-color:#e878515e}.reset-button.confirmed{animation:reset-confirm .48s ease-out}@keyframes reset-confirm{0%{color:#fff;background:#f1834d;transform:scale(.82)}55%{transform:scale(1.1)}100%{transform:scale(1)}}@media(max-width:600px){.control-dock{top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right))}.icon-button{width:42px;height:42px;border-radius:12px}.icon-button svg{width:23px;height:23px}}
#reset-dialog{width:min(420px,calc(100% - 32px));padding:26px;border:1px solid #e0a04f52;border-radius:20px;color:#eee5d7;background:#15120e;box-shadow:0 24px 80px #000a}#reset-dialog::backdrop{background:#0009;backdrop-filter:blur(5px)}#reset-dialog h2{margin:0 0 12px;font-size:20px;line-height:1.5}#reset-dialog p{margin:0;color:#b6aa98;font-size:14px;line-height:1.8}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.dialog-actions button{min-height:44px;padding:10px 16px;border:1px solid #ffffff26;border-radius:10px;color:#eee5d7;background:#ffffff09;font:600 14px/1.5 system-ui,sans-serif;cursor:pointer}.dialog-actions button:hover{background:#ffffff18}.dialog-actions button:focus-visible{outline:2px solid #ffd18d;outline-offset:3px}#confirm-reset{border-color:#ed9d6b;background:#d4824d;color:#1b1009}#confirm-reset:hover{background:#ed9d6b}
