<!-- RUBY-BACKUP · part 337 -->
11px;margin-bottom:8px;">&lt;/&gt; ACTIONS SHELF ×</div>
        <div class="shelf">
          <button>LIGHTING & FX</button>
          <button>ADD TO LIBRARY</button>
          <button>MANAGE LAYERS</button>
        </div>
        <button class="export" data-fn="export">RENDER & EXPORT (PNG, OBJ, FBX) ⬆️</button>
      </div>
    `;
    document.body.appendChild(el);
    // wire up all the buttons
    el.querySelectorAll('[data-fn]').forEach(function(b){
      b.addEventListener('click', function(){
        var fn = b.getAttribute('data-fn');
        handleFn(fn);
      });
    });
    el.querySelectorAll('[data-lw]').forEach(function(b){
      b.addEventListener('click', function(){
        el.querySelectorAll('[data-lw]').forEach(function(x){ x.classList.remove('on'); });
        b.classList.add('on');
        if(typeof codeStatus==='function') codeStatus('linework: '+b.getAttribute('data-lw'));
      });
    });
  }
  function handleFn(fn){
    try{
      var cc = window.handleCheatCode || (typeof handleCheatCode!=='undefined' ? handleCheatCode : null);
      switch(fn){
        case 'hourglass': if(cc) cc('hourglass'); break;
        case 'pylon': if(cc) cc('pylon'); break;
        case 'tetra': if(cc) cc('hollowtetra'); break;
        case 'pyramid': if(cc) cc('layeredpyramid'); break;
        case 'cube':
          try{
            var _cg = new THREE.Group();
            var _cm = new THREE.Mesh(new THREE.BoxGeometry(2, 2, 2),
              new THREE.MeshStandardMaterial({color: 0xd4a017, roughness: 0.5}));
            _cg.add(_cm);
            try{
              if(typeof mePos !== 'undefined'){ _cg.position.set(mePos.x + 5, fortifiedGroundY(mePos.x + 5, mePos.z + 5) + 1, mePos.z + 5); }
              else { _cg.position.set(10, 3, 10); }
            }catch(e){ _cg.position.set(10, 3, 10); }
            if(typeof scene !== 'undefined') scene.add(_cg);
            _cg.userData.isPrimitive = true;
            var _sr = (typeof scene !== 'undefined') ? scene : null;
            if(typeof pushCommand === 'function') pushCommand({
              name: 'build cube',
              execute: function(){ if(_sr) _sr.add(_cg); },
              undo: function(){ if(_sr) _sr.remove(_cg); }
            });
            if(typeof codeStatus === 'function') codeStatus('standard cube — real');
          }catch(e){ if(typeof codeStatus==='function') codeStatus('cube failed'); }
          break;
        case 'undo': if(typeof undoCommand==='function') undoCommand(); break;
        case 'undo2': if(typeof undoCommand==='function') undoCommand(); break;
        case 'export': if(cc) cc('export'); break;
        case 'select':
          window._creatorSelectMode = true;
          if(typeof codeStatus==='function') codeStatus('tap a primitive to select');
          break;
        case 'move':
          if(window._selectedPrimitive){
            window._creatorMoveMode = true;
            if(typeof codeStatus==='function') codeStatus('move mode — drag to move');
          } else if(typeof codeStatus==='function') codeStatus('select a primitive first');
          break;
        case 'flip':
          if(window._selectedPrimitive){
            window._selectedPrimitive.scale.x *= -1;
            if(typeof codeStatus==='function') codeStatus('flipped');
          } else if(typeof codeStatus==='function') codeStatus('select a primitive first');
          break;
        case 'stretch':
          if(window._selectedPrimitive){
            var _sy = window._selectedPrimitive.scale.y;
            var _nsy = _sy >= 3 ? 1 : _sy + 0.5;
            window._selectedPrimitive.scale.y = _nsy;
            if(typeof codeStatus==='function') codeStatus('stretched to ' + _nsy.toFixed(1));
          } else if(typeof codeStatus==='function') codeStatus('select a primitive first');
          break;
        case 'bend':
          if(window._selectedPrimitive){
            /* Hourglass uses its rig, others lean */
            if(window._selectedPrimitive.userData && window._selectedPrimitive.userData.applyRig){
              var _b = (window._selectedPrimitive.userData.bend || 0) + 1;
              if(_b > 5) _b = -5;
              window._selectedPrimitive.userData.bend = _b;
              window._selectedPrimitive.userData.applyRig();
              if(typeof codeStatus==='function') codeStatus('bent to ' + _b);
            } else {
              window._selectedPrimitive.rotation.z += 0.2;
              if(typeof codeStatus==='function') codeStatus('bent');
            }
          } else if(typeof codeStatus==='function') codeStatus('select a primitive first');
          break;
        case 'snap':
          if(window._selectedPrimitive){
            /* Snap to Minimum grid (0.13) */
            var _m = 0.13;
            window._selectedPrimitive.position.x = Math.round(window._selectedPrimitive.position.x / _m) * _m;
            window._selectedPrimitive.position.z = Math.round(window._selectedPrimitive.positi