*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0}body{overflow:hidden;overscroll-behavior:none;touch-action:none;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#17202a;background:#dfe8e2}button{font:inherit}.lab{display:grid;grid-template-columns:minmax(0,1fr) 320px;width:100%;height:100%}#viewport{position:relative;min-width:0;min-height:0;overflow:hidden}canvas{position:absolute;inset:0;z-index:0;display:block;width:100%;height:100%}.hud{position:absolute;left:18px;top:18px;z-index:2;display:flex;gap:10px;align-items:center;max-width:min(640px,calc(100vw - 380px));padding:10px 12px;border:1px solid rgba(255,255,255,.55);border-radius:8px;background:#f5f8f4d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 12px 30px #1a271f21;pointer-events:none}.hud strong{font-size:15px}.hud span{color:#526356;font-size:13px}.side{display:flex;flex-direction:column;gap:14px;min-width:0;min-height:0;padding:18px;border-left:1px solid #c9d5cc;background:#f6f8f5;box-shadow:-10px 0 24px #31453614;overflow:auto}.brand h1{margin:0;font-size:24px;line-height:1.1}.brand p,.label{margin:0 0 4px;color:#647567;font-size:12px;font-weight:700;letter-spacing:0;text-transform:uppercase}.panel{padding:14px;border:1px solid #d5ded7;border-radius:8px;background:#fff}.stats{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat{padding:10px;border-radius:7px;background:#eef4ef}.stat strong{display:block;margin-top:4px;font-size:18px}.motion-list,.class-list{display:grid;gap:8px}.motion-button,.class-button{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:46px;padding:9px 10px;border:1px solid #d5ded7;border-radius:8px;color:#17202a;background:#fff;text-align:left;cursor:pointer;-webkit-tap-highlight-color:transparent}.motion-button:hover,.motion-button:focus-visible,.class-button:hover,.class-button:focus-visible{border-color:#758b76;outline:none}.motion-button.is-active,.class-button.is-active{border-color:#244b36;background:#e4f0e8}.motion-button small,.class-button small{display:block;margin-top:2px;color:#66756a}.class-button{justify-content:flex-start}.swatch{flex:0 0 auto;width:28px;height:28px;border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 1px #c7d2ca}.key{flex:0 0 auto;min-width:28px;padding:3px 6px;border-radius:6px;color:#f7fbf7;background:#244b36;font-size:12px;text-align:center}.actions{display:grid;grid-template-columns:1fr 1fr;gap:8px}.actions button{min-height:38px;border:1px solid #c7d2ca;border-radius:8px;background:#fff;cursor:pointer}.actions button:hover,.actions button:focus-visible{border-color:#244b36;outline:none}.status{min-height:44px;color:#526356;font-size:13px;line-height:1.45}.mobile-pad{position:absolute;z-index:3;left:50%;bottom:max(18px,env(safe-area-inset-bottom));display:none;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;width:min(560px,calc(100vw - 24px));transform:translate(-50%);padding:10px;border:1px solid rgba(255,255,255,.62);border-radius:8px;background:#f6f8f5e0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 14px 32px #16261d2e}.mobile-pad button{min-width:0;min-height:48px;border:1px solid #c7d2ca;border-radius:8px;color:#17202a;background:#fff;font-weight:800;cursor:pointer}.mobile-pad .primary-action{color:#fff;border-color:#244b36;background:#244b36}.ui-toggle{position:fixed;top:10px;right:10px;z-index:5;display:none;min-width:58px;min-height:44px;border:1px solid rgba(255,255,255,.7);border-radius:8px;color:#fff;background:#244b36e6;box-shadow:0 10px 24px #16261d2e;font-weight:800;cursor:pointer;-webkit-tap-highlight-color:transparent}.ui-toggle:focus-visible{outline:2px solid #ffffff;outline-offset:2px}@media(max-width:860px){body{touch-action:manipulation}.lab{position:relative;display:block}#viewport{width:100%;height:100%}canvas{touch-action:none}.side{position:fixed;z-index:8;top:47dvh;right:0;bottom:0;left:0;display:grid;grid-template-columns:1fr;gap:12px;max-height:none;padding:14px 14px max(18px,env(safe-area-inset-bottom));border-left:0;border:1px solid rgba(255,255,255,.72);border-radius:14px 14px 0 0;background:#f6f8f5f0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 -16px 34px #16261d33;overflow-y:auto;overscroll-behavior:contain;touch-action:pan-y;-webkit-overflow-scrolling:touch;transition:opacity .16s ease,transform .16s ease}.brand,.stats,.actions,.status{display:none}.panel{min-width:0;padding:12px;border:1px solid #d5ded7;background:#ffffffe0}.motion-list{display:grid;grid-auto-flow:row;grid-auto-columns:auto;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;overflow:visible}.motion-button{min-height:58px;padding:10px;background:#fff}.motion-button strong{font-size:14px;line-height:1.15}.key{display:none}.motion-button small{display:block;font-size:11px}.class-button{min-height:58px;padding:10px;gap:10px;background:#fff}.class-button strong{font-size:15px}.class-button small{display:block;font-size:11px}.class-list{gap:8px}.swatch{width:28px;height:28px}.hud{left:10px;top:10px;display:block;max-width:min(260px,calc(100vw - 78px));padding:7px 9px;background:#f5f8f494;box-shadow:none}.hud strong,.hud span{display:block}.hud strong{font-size:13px}.hud span{overflow:hidden;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.mobile-pad{display:grid;position:fixed;z-index:9;right:10px;bottom:calc(53dvh + 10px);left:10px;grid-template-columns:repeat(4,minmax(0,1fr));width:auto;gap:8px;padding:8px;transform:none;background:#f6f8f5eb;box-shadow:0 12px 28px #16261d2e;touch-action:manipulation;transition:opacity .16s ease,transform .16s ease}.mobile-pad button{min-height:52px;padding:8px 5px;font-size:13px;line-height:1.1}.ui-toggle{display:block;top:46%;right:10px;min-width:64px;min-height:52px;z-index:10;touch-action:manipulation}.controls-hidden .hud,.controls-hidden .mobile-pad,.controls-hidden .side{opacity:0;pointer-events:none}.controls-hidden .mobile-pad{transform:translateY(16px)}.controls-hidden .side{transform:translateY(18px)}}@media(max-width:460px){.side{top:48dvh;padding:12px 10px max(16px,env(safe-area-inset-bottom))}.motion-list{grid-template-columns:repeat(2,minmax(0,1fr))}.mobile-pad button{min-height:50px;font-size:12px}}
