<!-- RUBY-BACKUP · part 94 -->
ter 8s */
  setTimeout(function(){
    m.style.transition = 'opacity 1s';
    m.style.opacity = '0';
    setTimeout(function(){ m.remove(); }, 1000);
  }, 8000);
  return m;
};
/* Marquee animation keyframes */
(function(){
  var st = document.createElement('style');
  st.textContent = '@keyframes marquee-scroll { 0% { transform: translateX(0); } 100% { transform: translateX(-33.33%); } }';
  document.head.appendChild(st);
})();
/* Power announcement */
window.announcePower = function(powerName){
  window.marquee('⚡ ' + powerName.toUpperCase() + ' ⚡', 'power');
  if(typeof codeStatus === 'function') codeStatus(powerName + ' unleashed');
};
/* News announcement */
window.announceNews = function(newsText){
  window.marquee('📰 ' + newsText, 'news');
};
/* Glory announcement */
window.announceGlory = function(gloryText){
  window.marquee('✦ ' + gloryText.toUpperCase() + ' ✦', 'glory');
};
/* Clear all marquees */
window.clearMarquees = function(){
  window._marquees.forEach(function(m){ m.remove(); });
  window._marquees = [];
};
/* NEW THINGS TRACKER — Solid knows what's new and saves it */
window.trackNewThing = function(what, x, y, z){
  try{
    var log = [];
    try{ log = JSON.parse(localStorage.getItem('ruby-newthings') || '[]'); }catch(e){}
    var now = new Date();
    var when = now.getHours() + ':' + String(now.getMinutes()).padStart(2, '0');
    log.push({when: when, what: what, lat: z.toFixed(1), lon: x.toFixed(1),
              hgt: y.toFixed(1), t: Date.now()});
    /* Keep last 100 */
    if(log.length > 100) log = log.slice(-100);
    localStorage.setItem('ruby-newthings', JSON.stringify(log));
  }catch(e){}
};
/* WORD COORDINATES — the map speaks in letters */
/* Directions: crown=north(-z), root=south(+z), dawn=east(+x), dusk=west(-x) */
/* Distances: heart(center), near, far, edge, beyond */
window.wordsForPosition = function(x, z){
  var dist = Math.sqrt(x*x + z*z);
  var dWord = 'heart';
  if(dist > 10 && dist <= 50) dWord = 'near';
  else if(dist > 50 && dist <= 150) dWord = 'far';
  else if(dist > 150 && dist <= 300) dWord = 'edge';
  else if(dist > 300) dWord = 'beyond';
  if(dist <= 10) return 'the heart';
  var ns = z < -5 ? 'crown' : (z > 5 ? 'root' : '');
  var ew = x > 5 ? 'dawn' : (x < -5 ? 'dusk' : '');
  var dir = [ns, ew].filter(Boolean).join(' ');
  if(!dir) return dWord + ' heart';
  return dWord + ' ' + dir;
};
window.positionForWords = function(words){
  /* Parse: [distance] [direction] [direction] */
  var w = words.toLowerCase();
  var dist = 0;
  if(w.indexOf('near') >= 0) dist = 30;
  else if(w.indexOf('far') >= 0) dist = 100;
  else if(w.indexOf('edge') >= 0) dist = 225;
  else if(w.indexOf('beyond') >= 0) dist = 400;
  else if(w.indexOf('heart') >= 0) return {x: 0, z: 0};
  var x = 0, z = 0;
  if(w.indexOf('crown') >= 0) z -= dist;
  if(w.indexOf('root') >= 0) z += dist;
  if(w.indexOf('dawn') >= 0) x += dist;
  if(w.indexOf('dusk') >= 0) x -= dist;
  /* Diagonal: split distance */
  if((w.indexOf('crown') >= 0 || w.indexOf('root') >= 0) && (w.indexOf('dawn') >= 0 || w.indexOf('dusk') >= 0)){
    x *= 0.7; z *= 0.7;
  }
  return {x: x, z: z};
};
/* Player vitals bars — Soliditronium and Obligation */
window._soliditronium = 100; window._obligation = 100;
window._isAdmin = true; /* the King */
window.showVitals = function(){
  var sb = document.getElementById('vital-solid');
  var ob = document.getElementById('vital-oblig');
  if(!sb){
    var wrap = document.createElement('div');
    wrap.id = 'vitals-wrap';
    wrap.style.cssText = 'position:fixed;top:0;left:0;right:0;'
      + 'z-index:99999 !important;display:flex;flex-direction:column;gap:2px;pointer-events:none;'
      + 'background:transparent;padding:4px 8px;';
    /* Tactical: thin segmented bars stretched across the top */
    function segBar(id, color){
      var html = '<div style="display:flex;gap:2px;width:100%;">';
      for(var i=0;i<40;i++){
        html += '<div id="'+id+'-'+i+'" style="flex:1;height:3px;background:'+color+';min-width:0;"></div>';
      }
      return html + '</div>';
    }
    wrap.innerHTML = '<div style="font-size:8px;color:#d8a920;font-family:monospace;letter-spacing:2px;">SOLIDITRONIUM</div>'
      + segBar('vs', '#ffd700')
      + '<div style="font-size:8px;color:#7ec8ff;font-family:monospace;letter-spacing:2px;margin-top:2px;">OBLIGATION</div>'
      + segBar('vo', '#4a90d9');
    document.body.appendChild(wrap);
    sb = document.getElementById('vital-solid');
    ob = document.getElementById('vital-oblig');
  }
  /* Segmented: 20 blocks, fill based on value */
  var sfill = Math.round(window._soliditronium / 2.5);
  var ofill = Math.round(window._obligation / 2.5);
  for(var i=0;i<40;i++){
    var se = document.getElementById('vs-'+i);
    var oe = document.getElementById('vo-'+i);
    if(se) se.style.opacity = i < sfill ? '1' : '0.15';
    if(oe) oe.style.opacity = i < ofill ? '1' : '0.15';
  }
  var wrap = document.getElementById('vitals-w