:root{--bg: #e9e7e1;--ink: #111;--mute: #8d8a83;--line: rgba(0, 0, 0, .1);--col: 220px}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--bg);color:var(--ink);font:13px/1.35 Inter,system-ui,sans-serif;-webkit-font-smoothing:antialiased;display:grid;grid-template-columns:var(--col) 1fr var(--col);overflow:hidden;user-select:none;-webkit-user-select:none}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}.col{padding:28px 24px;display:flex;flex-direction:column;gap:18px;overflow-y:auto}.brand{font-weight:600;letter-spacing:.08em;font-size:14px;display:flex;flex-direction:column;gap:2px;margin-bottom:6px}.brand span{font-weight:400;letter-spacing:0;font-size:11px;color:var(--mute)}h2{margin:0 0 7px;font-size:11px;font-weight:500;color:var(--mute);display:flex;justify-content:space-between}h2 output{color:var(--ink);font-variant-numeric:tabular-nums}hr{border:0;border-top:1px solid var(--line);margin:2px 0;width:100%}.opts{display:flex;gap:4px 14px}.opts.wrap{flex-wrap:wrap}.opts button{color:var(--mute);padding:2px 0;position:relative;transition:color .15s}.opts button:hover,.opts button.on{color:var(--ink)}.opts button.on:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ink)}#models{display:flex;flex-direction:column;gap:10px}#models .grp>span{display:block;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--mute);opacity:.7;margin-bottom:4px}.swatches{display:flex;gap:10px}.swatches button{width:18px;height:18px;border-radius:50%;border:1px solid rgba(0,0,0,.18);outline:1px solid transparent;outline-offset:3px;transition:outline-color .15s}.swatches button.on{outline-color:var(--ink)}input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:18px;background:none;margin:0}input[type=range]::-webkit-slider-runnable-track{height:1px;background:#00000040}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:11px;height:11px;border-radius:50%;background:var(--ink);margin-top:-5px}input[type=range]::-moz-range-track{height:1px;background:#00000040}input[type=range]::-moz-range-thumb{width:11px;height:11px;border:0;border-radius:50%;background:var(--ink)}.foot{margin-top:auto;display:flex;gap:16px;color:var(--mute)}.foot button:hover{color:var(--ink)}.actions{display:flex;flex-direction:column;align-items:flex-start;gap:10px}.actions button{color:var(--ink)}.actions button:hover{text-decoration:underline;text-underline-offset:3px}.actions .primary{background:var(--ink);color:#fff;padding:9px 14px;border-radius:999px}.actions .primary:hover{text-decoration:none;opacity:.85}.note{margin:0;font-size:11px;color:var(--mute)}#stage{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0}#frame{position:relative;box-shadow:0 0 0 1px #00000012}#c{display:block;touch-action:none;cursor:none}#c.orbit{cursor:grab}#c.orbit:active{cursor:grabbing}#hint{position:absolute;bottom:14px;margin:0;font-size:11px;color:var(--mute);text-align:center;padding:0 12px}#rope{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}#rope i{position:absolute;border-radius:50%;transform:translate(-50%,-50%);display:none}#rope .pen{width:7px;height:7px;background:var(--ink);box-shadow:0 0 0 1.5px #fffc}#rope .ring{border:1px solid rgba(0,0,0,.25)}#rope svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}#rope line{stroke:#0000004d;stroke-width:1}#rope.show .pen,#rope.show.lazy .ring{display:block}#frame.dark #rope .pen{background:#fff;box-shadow:0 0 0 1.5px #0009}#frame.dark #rope .ring{border-color:#ffffff4d}#frame.dark #rope line{stroke:#ffffff59}#busy,#loading{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background:#111111e0;color:#fff;padding:10px 16px;border-radius:999px;font-size:12px;display:flex;gap:14px;align-items:center;white-space:nowrap;font-variant-numeric:tabular-nums}#busy[hidden],#loading[hidden]{display:none}#busy button{color:#fff9}#busy button:hover{color:#fff}@media (max-width: 860px){body{grid-template-columns:1fr;grid-template-rows:62vh auto auto;overflow-y:auto;height:auto}#stage{grid-row:1;height:62vh}.col{padding:18px 16px}.col.left{grid-row:2}.col.right{grid-row:3;padding-bottom:40px}.foot{margin-top:4px}#hint{display:none}}
