<!-- SOLID CITY · part 2271 -->
20px;color:#8a7a5a;font:600 12px/1.4 system-ui,sans-serif;text-decoration:underline">⬇ download the game — keep your own copy</a>
    <a id="sc-webrtc-test" href="/city/webrtc-lock-test.html" style="display:block;margin:10px auto 0;max-width:420px;color:#8a7a8a;font:600 12px/1.4 system-ui,sans-serif;text-decoration:underline">WEBRTC LOCK TEST — isolated experiment: does voice survive screen lock?</a>
    <a id="sc-aiview-link" href="/city/see" style="display:block;margin:10px auto 0;color:#bff8ff;font:600 13px/1.4 system-ui,sans-serif;text-decoration:underline">🤖 AI VIEW: no JavaScript? See the city as live pictures + text at /city/see</a>
    <div id="sc-loadbot" role="status" aria-label="Loading the city">
      <div class="lb-row">
        <div class="lb-botwrap"><span class="lb-bot" id="lb-bot">🤖</span><span class="lb-sweat" id="lb-sweat">💦</span></div>
        <div class="lb-bubble" id="lb-bubble">Warming up my pushing arms…</div>
      </div>
      <div class="lb-track"><div class="lb-fill" id="lb-fill"></div><span class="lb-pct" id="lb-pct">0%</span></div>
      <div class="sc-load" id="sc-load">Loading…</div>
    </div>
    <style>
      #sc-loadbot{margin:12px auto 0;max-width:420px;text-align:left}
      .lb-row{display:flex;align-items:flex-end;gap:10px}
      .lb-botwrap{position:relative;width:58px;height:58px;flex:0 0 58px}
      .lb-bot{position:absolute;left:2px;bottom:0;font-size:46px;line-height:1;display:inline-block;transform-origin:50% 90%;animation:lb-hurry .34s ease-in-out infinite alternate}
      .lb-sweat{position:absolute;right:-2px;top:-4px;font-size:16px;opacity:0;animation:lb-sweat 1.02s ease-in infinite}
      @keyframes lb-hurry{from{transform:rotate(-7deg) translateY(0)}to{transform:rotate(6deg) translateY(-3px)}}
      @keyframes lb-sweat{0%{opacity:0;transform:translate(0,0) scale(.6)}25%{opacity:1}100%{opacity:0;transform:translate(12px,10px) scale(1.1)}}
      #sc-loadbot.resting .lb-bot{animation:lb-rest 2.6s ease-in-out infinite alternate}
      #sc-loadbot.resting .lb-sweat{animation:none;opacity:0}
      @keyframes lb-rest{from{transform:rotate(-2deg)}to{transform:rotate(2deg) translateY(-1px)}}
      #sc-loadbot.done .lb-bot{animation:lb-hop .5s ease-in-out 3}
      @keyframes lb-hop{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
      .lb-bubble{position:relative;background:rgba(24,19,10,.85);border:1px solid #8a6d2f;color:#f1e4c3;border-radius:12px;padding:8px 11px;font:600 13px/1.45 system-ui,sans-serif;min-height:20px;flex:1}
      .lb-bubble:before{content:"";position:absolute;left:-7px;bottom:12px;width:12px;height:12px;background:inherit;border-left:1px solid #8a6d2f;border-bottom:1px solid #8a6d2f;transform:rotate(45deg)}
      .lb-track{position:relative;margin-top:10px;height:16px;border-radius:9px;border:1px solid #8a6d2f;background:rgba(10,8,5,.7);overflow:hidden}
      .lb-fill{height:100%;width:0%;border-radius:9px;background:linear-gradient(90deg,#8a6d2f,#d8a833,#ffe9a8);transition:width .35s ease}
      .lb-pct{position:absolute;right:8px;top:0;font:700 11px/16px system-ui,sans-serif;color:#ffe9a8;text-shadow:0 1px 2px #000}
      #sc-loadbot .sc-load{margin-top:6px;text-align:center}
    </style>
    <script>
    (function () {
      var bot = document.getElementById('sc-loadbot');
      var bubble = document.getElementById('lb-bubble');
      var fill = document.getElementById('lb-fill');
      var pctEl = document.getElementById('lb-pct');
      var loadEl = document.getElementById('sc-load');
      var bootEl = document.getElementById('sc-boot');
      if (!bot || !bubble || !fill || !loadEl) return;
      var quotes = [
        'Pedaling as fast as I can back here!',
        'One tower at a time… one tower at a time…',
        'Polishing the gold trim. The King likes it shiny.',
        'Waking the dodo. He does NOT hurry for anyone.',
        'Counting the rides in the South Lot. Still fourteen. Good.',
        'Rolling out the Long Road. It is… long.',
        'Feeding the koi so they supervise politely.',
        'Herding the clouds into place. They never listen.',
        'Warming up the hyper train…',
        'Sweeping the sand off the First City.',
        'Charging the Octahedron. It hums when it is ready.',
        'Come on, island. UP. UP!',
        'I am pushing the progress bar with BOTH hands!',
        'Teaching the mountains to sit still.',
        'Almost there. Probably. Keep smiling.'
      ];
      var slow = [
        'Okay. This is personal now.',
        'I tried turning the island off and on again.',
        'If anyone asks, YOU held the ladder.',
        'Requesting a bigger engine. Denied. Pedaling harder.'
      ];
      var qi = 0, pct = 4, target = 4, done = false, born = Date.now();
      function say(t) { bubble.textContent = t; }
      function setPct(p) { target = Math.max(target, Math.min(100, p)); }
      var quoteTimer = setInterval(function () {
        if 