:root{--bg: #e8f4fb;--panel: #ffffff;--ink: #22303c;--primary: #2f7de1;--cube: #ff9f43;--slope: #35c0b0;--danger: #e5484d;--radius: 18px;font-family:Hiragino Maru Gothic ProN,BIZ UDPGothic,Yu Gothic UI,Meiryo,sans-serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body,#root{margin:0;height:100%;overflow:hidden;overscroll-behavior:none}.app{display:flex;flex-direction:column;height:100%;background:var(--bg);color:var(--ink);user-select:none;-webkit-user-select:none}.app-header{display:flex;align-items:center;gap:12px;padding:8px 14px;padding-top:max(8px,env(safe-area-inset-top))}.app-header h1{margin:0;font-size:20px;letter-spacing:.06em;color:var(--primary);white-space:nowrap}.score-panel{flex:1;background:var(--panel);border-radius:var(--radius);padding:6px 14px;box-shadow:0 2px 8px #22303c14;min-height:48px;display:flex;flex-direction:column;justify-content:center}.score-empty{margin:0;font-size:15px}.score-main{display:flex;align-items:baseline;gap:6px}.score-label{font-size:13px}.score-value{font-size:26px;font-weight:700;color:var(--primary)}.score-unit{font-size:13px}.score-sub{display:flex;gap:16px;font-size:12px;color:#5a6b7a}.score-warning{margin:2px 0 0;font-size:13px;color:var(--danger);font-weight:700}.score-hint{margin:2px 0 0;font-size:12px;color:#8a6d1f}.scene-wrap{flex:1;min-height:0}.scene-wrap canvas{display:block}.toolbar-wrap{position:relative;padding:8px 12px;padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));padding-bottom:max(10px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:8px}.hint-bubble{position:absolute;left:50%;top:-46px;transform:translate(-50%);background:#fff6da;border:2px solid #f2c94c;color:#6b5510;border-radius:999px;padding:8px 18px;font-size:14px;font-weight:700;white-space:nowrap;box-shadow:0 4px 10px #22303c1f;animation:pop .18s ease-out}@keyframes pop{0%{transform:translate(-50%) scale(.85);opacity:0}to{transform:translate(-50%) scale(1);opacity:1}}@media (prefers-reduced-motion: reduce){.hint-bubble{animation:none}}.toolbar,.part-row{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.tool-btn,.part-btn{min-width:72px;min-height:56px;border:none;border-radius:var(--radius);background:var(--panel);color:var(--ink);font-size:13px;font-weight:700;font-family:inherit;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;box-shadow:0 2px 6px #22303c1f;cursor:pointer;touch-action:manipulation}.tool-btn:focus-visible,.part-btn:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.tool-btn.active,.part-btn.active{background:var(--primary);color:#fff}.tool-btn:disabled,.part-btn:disabled{opacity:.35;cursor:default}.tool-btn.danger{color:var(--danger)}.tool-icon,.part-icon{font-size:20px;line-height:1;display:inline-block}.toolbar-divider{width:2px;background:#22303c1a;border-radius:2px;margin:6px 4px}.part-shape{width:22px;height:22px;display:inline-block}.part-shape-cube{background:var(--cube);border-radius:4px}.part-shape-slope{width:0;height:0;border-left:22px solid var(--slope);border-top:22px solid transparent}.part-btn.active .part-shape-cube{background:#fff}.part-btn.active .part-shape-slope{border-left-color:#fff}.scene-wrap{position:relative}.crosshair{position:absolute;left:50%;top:50%;width:28px;height:28px;margin:-14px 0 0 -14px;border:3px solid rgba(255,255,255,.95);border-radius:50%;box-shadow:0 0 0 2px #22303c59,inset 0 0 0 2px #22303c59;pointer-events:none;z-index:5}.crosshair:after{content:"";position:absolute;left:50%;top:50%;width:4px;height:4px;margin:-2px 0 0 -2px;background:#fff;border-radius:50%;box-shadow:0 0 0 1px #22303c66}.tool-btn.primary{background:var(--primary);color:#fff}.tool-btn.primary:disabled{background:var(--panel);color:var(--ink)}.tool-btn.wide{min-width:96px;flex:1;max-width:160px}@media (max-width: 520px){.app-header{gap:8px;padding:6px 10px;padding-top:max(6px,env(safe-area-inset-top))}.app-header h1{font-size:15px}.score-panel{flex-direction:row;align-items:center;flex-wrap:wrap;gap:4px 12px;min-height:40px;padding:4px 10px}.score-empty{font-size:13px}.score-value{font-size:20px}.score-sub{gap:10px}.score-hint{display:none}.score-warning{flex-basis:100%;margin:0;font-size:12px}.toolbar,.part-row{gap:6px}.tool-btn,.part-btn{min-width:60px;font-size:12px}}.shape-status{align-self:center;background:#e3efff;border:2px solid var(--primary);color:#1d4e94;border-radius:999px;padding:6px 16px;font-size:13px;font-weight:700}.shape-status.ng{background:#ffe9ea;border-color:var(--danger);color:#8f1d22}.mobile-cam{position:absolute;left:0;right:0;bottom:0;padding:12px;padding-left:max(12px,env(safe-area-inset-left));padding-right:max(12px,env(safe-area-inset-right));padding-bottom:max(12px,env(safe-area-inset-bottom));display:flex;justify-content:space-between;align-items:flex-end;pointer-events:none;z-index:6}.cam-stick{position:relative;width:112px;height:112px;border-radius:50%;background:#ffffff59;border:2px solid rgba(47,125,225,.5);box-shadow:0 2px 10px #22303c26;touch-action:none;pointer-events:auto;display:flex;align-items:center;justify-content:center}.cam-stick-knob{width:52px;height:52px;border-radius:50%;background:var(--primary);box-shadow:0 2px 6px #22303c4d}.cam-stick-label{position:absolute;bottom:-20px;font-size:11px;font-weight:700;color:#1d4e94}.cam-vert{display:flex;flex-direction:column;gap:8px;pointer-events:auto}.cam-btn{min-width:48px;min-height:48px;width:56px;border:none;border-radius:16px;background:#ffffffe6;box-shadow:0 2px 6px #22303c2e;font-size:22px;touch-action:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px 0}.cam-btn.reset{height:auto}.cam-btn-icon{font-size:20px;line-height:1}.cam-btn-text{font-size:10px;font-weight:700;color:#1d4e94}.cam-btn:active{background:var(--primary)}.cam-btn.reset{background:#e3effff2;height:auto}.cam-vert{flex-direction:column}@media (pointer: coarse) and (orientation: landscape) and (max-height: 480px){.cam-stick{width:92px;height:92px}.cam-stick-knob{width:42px;height:42px}.mobile-cam{padding-bottom:max(8px,env(safe-area-inset-bottom))}.toolbar,.part-row{flex-wrap:nowrap;overflow-x:auto;justify-content:flex-start}.tool-btn,.part-btn{min-height:46px;flex:0 0 auto}.toolbar-wrap{gap:6px}}@media (pointer: coarse) and (orientation: landscape) and (min-width: 900px) and (min-height: 600px){.cam-stick{width:120px;height:120px}.toolbar,.part-row{flex-wrap:nowrap;overflow-x:auto;justify-content:center}.tool-btn,.part-btn{min-height:56px;flex:0 0 auto}}
