<!-- RUBY-BACKUP · part 30 -->
    {code:'anchor', why:'deep pin — nothing moves it', arg:'node id'},
      {code:'unanchor', why:'release the deep pin', arg:'node id'},
      {code:'conveyor', why:'factory belt, rides things along', arg:'node id'},
      {code:'elevator', why:'rises to a height and back', arg:'node id + height'},
      {code:'catapult', why:'armed launch, real physics', arg:'node id'},
      {code:'blueprint', why:'remembers and stamps shapes', arg:'node id'},
      {code:'welder', why:'fuses two blocks into one', arg:'node id'},
      {code:'crane', why:'lifts and sets blocks gentle', arg:'node id'},
      {code:'counter', why:'counts everything crossing', arg:'node id'},
      {code:'timer', why:'counts down then pulses', arg:'node id + secs'},
      {code:'messenger', why:'speaks your words when tripped', arg:'node id'},
      {code:'music', why:'a path that sings', arg:'node id + note'},
      {code:'painter', why:'cycles colors on touch', arg:'node id'},
      {code:'hider', why:'vanishes — the kids hunt it', arg:'node id'},
      {code:'battery', why:'stores energy from crossing', arg:'node id'},
      {code:'generator', why:'feeds the hungry batteries', arg:'node id'},
      {code:'clearmode', why:'strip any mode back to solid', arg:'node id'},
      {code:'nodemodes', why:'list all 21 modes'},
    ]},
    {title:'RIGGING', ic:'\u27BF', codes:[
      {code:'grab', why:'pick it up and move it'},
      {code:'pulley', why:'a wheel to redirect your pull'},
      {code:'unpulley', why:'remove a pulley'},
      {code:'rig', why:'rope it and pull it'},
      {code:'detach', why:'cut one rope free'},
      {code:'unrig', why:'clear every rope'},
      {code:'anchor', why:'pin it — pulls reshape it'},
      {code:'unanchor', why:'free it to move again'},
      {code:'lift', why:'raise the ground here'},
      {code:'setdown', why:'lower it back down'},
      {code:'drop', why:'set down what you hold'},
      {code:'flatten', why:'level what you raised'},
      {code:'diamond', why:'pull corners into a diamond'},
      {code:'square', why:'restore the square'},
      {code:'span', why:'rope two things, synced as one'},
      {code:'unspan', why:'cut the span'},
      {code:'compound', why:'chained pulleys, multiplied force'},
      {code:'uncompound', why:'unwind the compound'},
      {code:'counterweight', why:'balanced loads, finger-touch move'},
      {code:'unweight', why:'remove the counterweight'},
      {code:'winch', why:'crank it in, real drum math'},
      {code:'unwinch', why:'remove the winch'},
      {code:'gearlink', why:'turn the gear, pull the rope'},
      {code:'ungear', why:'unlink the gear'},
      {code:'lever', why:'push down here, lift over there'},
      {code:'unlever', why:'remove the lever'},
      {code:'spring', why:'Hooke\u2019s law, the honest elastic'},
      {code:'unspring', why:'remove the spring'},
      {code:'codex', why:'the whole system mapped'},
    ]},
    {title:'WORLD', ic:'\uD83C\uDF0D', codes:[
      {code:'fixstation', why:'Playa 2.0\u2019s Fix Station'},
      {code:'playa', why:'open Playa 2.0'},
      {code:'holomap', why:'the map above the world'},
      {code:'bam', why:'build it now', arg:'shape size'},
      {code:'again', why:'repeat the last build'},
      {code:'whereami', why:'exact coordinates'},
      {code:'tp', why:'go there', arg:'x z'},
      {code:'fly', why:'take the sky'},
      {code:'land', why:'return to ground'},
      {code:'walk', why:'feet on the ground'},
      {code:'jump', why:'leap'},
      {code:'duck', why:'lower the camera'},
      {code:'stand', why:'rise back up'},
      {code:'speed', why:'how fast you move', arg:'0.1-10'},
      {code:'day', why:'light the world'},
      {code:'night', why:'darken the world'},
      {code:'pulleylab', why:'all 5 machines rise here'},
      {code:'ropedeform', why:'the diamond proof'},
    ]},
  ];

  var scrollEl = null, scrollOpen = false;

  function runCode(code){
    try{
      if(typeof window.runLine === 'function'){ window.runLine(code); return true; }
      if(typeof Mainframe !== 'undefined' && Mainframe.run){ Mainframe.run(code); return true; }
      return false;
    }catch(e){ return false; }
  }

  function closeScroll(){
    if(!scrollOpen) return;
    scrollOpen = false;
    try{
      var el = scrollEl; scrollEl = null;
      if(el){
        el.style.maxHeight = '0px';
        setTimeout(function(){ try{ if(el.parentNode) el.parentNode.removeChild(el); }catch(e){} }, 300);
      }
    }catch(e){ scrollEl = null; }
  }

  /* Tapping a code with args: show inline arg prompt in the scroll */
  function promptArg(sec, cd, rowEl){
    try{
      // Remove any existing prompt
      var old = document.getElementById('cps-argprompt');
      if(old && old.parentNode) old.parentNode.removeChild(old);
      var pr = document.createElement('div');
      pr.id = 'cps-argprompt';
      pr.style.cssText = 'padding:8px 10px;background:rgba(216,169,32,0.08);border-radius:1