<!-- RUBY-BACKUP · part 220 -->
_CONTEXTS[Math.floor(Math.random()*KIND_CONTEXTS.length)];
  var response = KIND_RESPONSES[Math.floor(Math.random()*KIND_RESPONSES.length)];
  var followup = KIND_FOLLOWUPS[Math.floor(Math.random()*KIND_FOLLOWUPS.length)];
  /* build natural phrasing */
  var a;
  if(opener.indexOf('did you need')>=0 || opener.indexOf('Do you want')>=0 || opener.indexOf('look like')>=0){
    a = opener+' '+item+'? '+context.charAt(0).toUpperCase()+context.slice(1)+'.';
  }else if(opener.indexOf('saved you')>=0){
    a = opener+' '+item+'. '+context.charAt(0).toUpperCase()+context.slice(1)+'.';
  }else{
    a = opener+' '+item+'.';
  }
  return {a: a, b: response, c: followup};
}
function overhearRandomCall(){
  var call = generateKindCall();
  var div = document.createElement('div');
  div.style.cssText = 'position:fixed;bottom:120px;left:50%;transform:translateX(-50%);z-index:9997;background:rgba(20,30,20,0.9);border:2px solid #00ff88;border-radius:10px;padding:10px 20px;color:#fff;font-family:Arial;font-size:13px;max-width:80%;text-align:center;';
  div.innerHTML = '<div style="color:#00ff88;font-size:11px;margin-bottom:5px;">📱 OVERHEARD</div>'
    + '<div><i>"'+call.a+'"</i></div>'
    + '<div style="margin-top:5px;color:#aaa;"><i>"'+call.b+'"</i></div>'
    + '<div style="margin-top:5px;color:#888;"><i>"'+call.c+'"</i></div>';
  document.body.appendChild(div);
  setTimeout(function(){ if(div.parentElement) div.remove(); }, 7000);
}
function placePhoneCallers(){
  if(typeof scene==='undefined') return;
  if(typeof PHONE_CALLERS==='undefined') return;
  if(PHONE_CALLERS.length > 0) return;
  /* all around the city */
  var spots = [
    [10, 0, 10], [-15, 0, 20], [30, 0, -10],
    [-25, 0, -25], [5, 0, -30], [40, 0, 15],
    [-10, 0, 40], [20, 0, 35]
  ];
  spots.forEach(function(s){
    var caller = buildPhoneCaller(s[0], s[1], s[2]);
    scene.add(caller);
    PHONE_CALLERS.push(caller);
  });
  codeStatus('people on phones all around the city...');
  /* overheard conversations */
  setInterval(function(){
    try{
      if(typeof PHONE_CALLERS==='undefined' || PHONE_CALLERS.length === 0) return;
      if(typeof mePos==='undefined') return;
      /* find nearest caller */
      var px = mePos.x*0.13, pz = mePos.z*0.13;
      var nearest = null, nd = 999;
      PHONE_CALLERS.forEach(function(caller){
        var d = Math.sqrt((px-caller.position.x)**2 + (pz-caller.position.z)**2);
        if(d < nd){ nd = d; nearest = caller; }
      });
      /* if close enough, overhear a random kindness */
      if(nearest && nd < 8){
        /* adult mode: 20% flirty, else helpful */
        try{
          if(typeof isAdult==='function' && isAdult() && Math.random() < 0.2){
            overhearFlirtyCall();
          }else if(Math.random() < 0.5){
            overhearRandomCall();
        }else{
          var allLines = PHONE_LINES.concat(typeof PHONE_LINES_EXTRA!=='undefined'?PHONE_LINES_EXTRA:[]);
          var line = allLines[Math.floor(Math.random()*allLines.length)];
          var div = document.createElement('div');
          div.style.cssText = 'position:fixed;bottom:120px;left:50%;transform:translateX(-50%);z-index:9997;background:rgba(20,30,20,0.9);border:2px solid #00ff88;border-radius:10px;padding:10px 20px;color:#fff;font-family:Arial;font-size:13px;max-width:80%;text-align:center;';
          div.innerHTML = '<div style="color:#00ff88;font-size:11px;margin-bottom:5px;">📱 OVERHEARD</div>'
            + '<div><i>"'+line.a+'"</i></div>'
            + '<div style="margin-top:5px;color:#aaa;"><i>"'+line.b+'"</i></div>'
            + (line.a2 ? '<div style="margin-top:5px;"><i>"'+line.a2+'"</i></div>' : '');
          document.body.appendChild(div);
            setTimeout(function(){ if(div.parentElement) div.remove(); }, 6000);
          }
        }catch(e){}
      }
    }catch(e){}
  }, 15000);
}
function finalResolution(){
  var div = document.createElement('div');
  div.id = 'final-resolution';
  div.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;z-index:25000;background:rgba(5,10,15,0.97);display:flex;flex-direction:column;justify-content:center;align-items:center;color:#fff;font-family:Georgia,serif;text-align:center;';
  div.innerHTML = '<div id="resolution-words" style="font-style:italic;font-size:19px;line-height:2.2;max-width:650px;min-height:300px;"></div>';
  document.body.appendChild(div);
  var words = [
    'So many problems.',
    'So much drama.',
    'And all for nothing.',
    '',
    'But the truth sets him free.',
    '',
    'He was struggling.',
    'He had no choices.',
    'He needed help.',
    '',
    'And all along —',
    '<span style="color:#00ffff;font-size:22px;">Soliditronium with the Continuum</span>',
    '<span style="color:#888;">was all he ever needed to play the game.</span>'
  ];
  var w = document.getElementById('resolution-words');
  var i = 0;
  var wt = setInterval(function(){
    if(i < words.length){
      if(words[i]===''){
