<!-- RUBY-BACKUP · part 119 -->
    /* too small — rubies would block it out, so no rubies */
    if(minDim < RUBY_MIN_SIZE) return;
    /* 8 corners */
    var min = box.min, max = box.max;
    var corners = [
      [min.x, min.y, min.z], [max.x, min.y, min.z],
      [min.x, max.y, min.z], [max.x, max.y, min.z],
      [min.x, min.y, max.z], [max.x, min.y, max.z],
      [min.x, max.y, max.z], [max.x, max.y, max.z]
    ];
    RUBY_HANDLES = new THREE.Group();
    var rubyGeo = new THREE.SphereGeometry(0.08, 12, 12);
    var rubyMat = new THREE.MeshStandardMaterial({
      color: 0xff0000, emissive: 0xff0000, emissiveIntensity: 1.5,
      roughness: 0.2, metalness: 0.8
    });
    corners.forEach(function(cp){
      var r = new THREE.Mesh(rubyGeo, rubyMat);
      r.position.set(cp[0], cp[1], cp[2]);
      r.userData.anchoredObj = obj;
      r.userData.isRubyHandle = true;
      RUBY_HANDLES.add(r);
    });
    scene.add(RUBY_HANDLES);
  }catch(e){}
}
function clearRubyHandles(){
  try{
    if(RUBY_HANDLES){
      scene.remove(RUBY_HANDLES);
      RUBY_HANDLES = null;
    }
  }catch(e){}
}
function isDescendantOf(obj, group){
  try{
    var p = obj;
    while(p){
      if(p === group) return true;
      p = p.parent;
    }
  }catch(e){}
  return false;
}
function tapToCrown(obj){
  try{
    /* activate crown mode if not already */
    if(typeof CROWN !== 'undefined' && !CROWN){
      if(typeof WALK !== 'undefined' && !WALK){
        if(typeof setWalk === 'function') setWalk(true);
      }
      CROWN = true;
      if(typeof glide !== 'undefined') glide = null;
    }
    /* lock eyes on the object */
    if(obj && typeof camera !== 'undefined' && camera){
      var wp = new THREE.Vector3();
      obj.getWorldPosition(wp);
      /* store the lock target */
      window._crownLockTarget = wp.clone();
      codeStatus('eyes locked');
    }
    /* show the pad for this object */
    /* find the root group */
    var root = obj;
    while(root.parent && root.parent !== scene) root = root.parent;
    showHandPad(root);
  }catch(e){}
}
/* crown lock — keep looking at the target */
var _origCrownUpdate = null;
function updateCrownLock(){
  try{
    if(typeof CROWN !== 'undefined' && CROWN && window._crownLockTarget){
      if(typeof camera !== 'undefined' && camera){
        camera.lookAt(window._crownLockTarget);
      }
    }
  }catch(e){}
}
/* === THE HAND PAD — tap an object in crown mode, shape it in your hand === */
var PAD_SELECTED = null;
var PAD_FOLLOW = false;
var PAD_DIST = 3;
var PAD_HEIGHT_OFF = 0;
var _padEl = null;
var _padPartList = null;

function showHandPad(obj){
  PAD_SELECTED = obj;
  hideHandPad();
  _padEl = document.createElement('div');
  _padEl.id = 'handpad';
  _padEl.style.cssText = 'position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:10002;width:300px;background:rgba(12,10,6,0.95);border:2px solid #d8a920;border-radius:16px;padding:16px;color:#ffd700;font-family:Georgia,serif;box-shadow:0 0 30px rgba(216,169,32,0.3);';
  /* title */
  var title = document.createElement('div');
  title.textContent = (obj.name || 'object').substring(0, 20);
  title.style.cssText = 'font-weight:bold;font-size:16px;margin-bottom:12px;text-align:center;border-bottom:1px solid #8a6a1c;padding-bottom:8px;';
  _padEl.appendChild(title);
  /* UP/DOWN size buttons — press up to grow, down to shrink */
  var sizeRow = document.createElement('div');
  sizeRow.style.cssText = 'display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:15px 0;';
  var upBtn = document.createElement('button');
  upBtn.innerHTML = '&#9650;'; /* up triangle */
  upBtn.title = 'Grow — not allowed: only take away';
  upBtn.style.cssText = 'padding:20px;font-size:28px;background:#3a3a3a;color:#666;border:1px solid #555;border-radius:12px;font-weight:bold;cursor:not-allowed;opacity:0.4;';
  upBtn.disabled = true;
  var downBtn = document.createElement('button');
  downBtn.innerHTML = '&#9660;'; /* down triangle */
  downBtn.title = 'Shrink';
  downBtn.style.cssText = 'padding:20px;font-size:28px;background:#8a6a1c;color:#fff;border:none;border-radius:12px;font-weight:bold;cursor:pointer;';
  var _sizeStep = 0.1;
  function adjustPadSize(dir){
    try{
      if(!PAD_SELECTED) return;
      /* SUBTRACTIVE LAW: only take away, never add */
      if(dir > 0){
        try{ codeStatus('only take away — the grid is all there is'); }catch(e){}
        return;
      }
      /* LEVEL LAW: 2-level adjusts like 2-level, not 3 */
      if(typeof levelAllowsAdjust==='function' && !levelAllowsAdjust(PAD_SELECTED, dir)){
        try{ codeStatus('a 2-level block does not adjust like a 3'); }catch(e){}
        return;
      }
      if(typeof canAdjust==='function' && !canAdjust(PAD_SELECTED)) return;
      var s = PAD_SELECTED.scale;
      var ns = {
        x: Math.max(0.1, s.x + dir*_sizeStep),
        y: Math.max(0.1, s.y + dir*_sizeStep),
        z: Math.max(0.1, s.z + dir*_sizeStep)
      };
      /* cannot bring it down a level — no ma