<!-- SOLID CITY · part 2883 -->
FH;
    box(g, W, lh, 0.6, 0, lh / 2, -hd, shell); FP(cfg.ox, cfg.oz - hd, W, 1, 0, lh); // north wall
    box(g, 0.6, lh, D, hw, lh / 2, 0, shell); FP(cfg.ox + hw, cfg.oz, 1, D, 0, lh);   // east
    box(g, 0.6, lh, D, -hw, lh / 2, 0, shell); FP(cfg.ox - hw, cfg.oz, 1, D, 0, lh);  // west
    box(g, (W - 8) / 2, lh, 0.6, -(8 + (W - 8) / 2) / 2, lh / 2, hd, shell);           // south-left
    box(g, (W - 8) / 2, lh, 0.6, (8 + (W - 8) / 2) / 2, lh / 2, hd, shell);           // south-right
    FP(cfg.ox - (8 + (W - 8) / 2) / 2, cfg.oz + hd, (W - 8) / 2, 1, 0, lh);
    FP(cfg.ox + (8 + (W - 8) / 2) / 2, cfg.oz + hd, (W - 8) / 2, 1, 0, lh);
    /* gold door frame */
    box(g, 9, 1, 1, 0, lh - 0.5, hd, trim); box(g, 0.8, lh, 1, -4.4, lh / 2, hd, trim); box(g, 0.8, lh, 1, 4.4, lh / 2, hd, trim);

    /* lobby floor + interior */
    box(g, W - 2, 0.3, D - 2, 0, 0.15, 0, M.steel);
    SF(cfg.ox - hw + 1, cfg.ox + hw - 1, cfg.oz - hd + 1, cfg.oz + hd - 1, 0);
    var isRef = (cfg.id === 'command');
    for (var c = -1; c <= 1; c += 2) for (var c2 = -1; c2 <= 1; c2 += 2) {
      if (isRef) { finishedColumn(g, c * 9, c2 * 9, 7); }
      else { box(g, 1.2, 7, 1.2, c * 9, 3.5, c2 * 9, M.gold); }
      FP(cfg.ox + c * 9, cfg.oz + c2 * 9, 1.6, 1.6, 0, 7);
    }
    if (isRef) { lobbyFinishes(g, cfg); }
    /* reception desk */
    if (isRef) {
      box(g, 6.6, 1.05, 2.2, 0, 0.52, -6, M.titanium);          /* desk body */
      box(g, 6.7, 0.1, 2.3, 0, 1.08, -6, M.gold);               /* restrained gold line */
      box(g, 7.0, 0.14, 2.6, 0, 1.2, -6, M.stone);              /* stone counter top */
      box(g, 2.2, 0.5, 1.4, 0, 1.5, -6, M.silver);              /* display riser */
    } else {
      box(g, 6, 1.1, 2, 0, 0.55, -6, M.wood); box(g, 6.4, 0.15, 2.4, 0, 1.15, -6, M.gold);
    }
    FP(cfg.ox, cfg.oz - 6, 6.4, 2.4, 0, 1.2);

    /* demo storefronts (2, flanking lobby east/west) */
    var shops = towerShops(cfg.id);
    for (var si = 0; si < 2; si++) {
      var sside = si === 0 ? -1 : 1, sxp = sside * 12;
      var shop = shops[si] || { name: 'SHOP ' + (si + 1), products: ['Goods', 'Wares'] };
      if (isRef) { refinedStorefront(g, T, cfg, sxp, shop, trim); }
      else {
        /* storefront: back wall, side walls, open front facing lobby center */
        box(g, 10, 5, 0.5, sxp, 2.5, -13, shell);
        box(g, 0.5, 5, 8, sxp - 5, 2.5, -9, shell); box(g, 0.5, 5, 8, sxp + 5, 2.5, -9, shell);
        box(g, 10, 0.4, 8, sxp, 5.2, -9, M.dark); // header
        var sign = makeText(T, shop.name, cfg.accent); sign.position.set(sxp, 4.4, -8.6); g.add(sign);
        for (var sh = 0; sh < 3; sh++) {
          box(g, 8, 0.25, 1.6, sxp, 1 + sh * 1.2, -12.2, M.wood);
          for (var pi = 0; pi < 4; pi++) {
            var pc = [0xc65c5c, 0x5c8ac6, 0x6bc65c, 0xc6a55c][(pi + sh) % 4];
            box(g, 0.7, 0.9, 0.7, sxp - 3 + pi * 2, 1.6 + sh * 1.2, -12.2, lam(pc));
          }
        }
        box(g, 3, 1, 1.4, sxp, 0.5, -7, M.wood); // counter
        FP(cfg.ox + sxp, cfg.oz - 9, 10.5, 8.5, 0, 5.4);
      }
    }

    /* floor 2: 4 offices */
    var f2 = FH;
    for (var o = 0; o < 4; o++) {
      var ox = (o % 2 === 0 ? -1 : 1) * 9, oz = (o < 2 ? -1 : 1) * 9;
      box(g, 14, 3.4, 0.4, ox, f2 + 1.7, oz + (o < 2 ? 7 : -7), M.white);
      box(g, 0.4, 3.4, 14, ox + (o % 2 === 0 ? 7 : -7), f2 + 1.7, oz, M.white);
      box(g, 3, 0.15, 1.6, ox, f2 + 0.9, oz, M.wood); // desk
      box(g, 1, 1, 1, ox + 2, f2 + 0.5, oz + 1, M.dark); // chair
      box(g, 4, 2.4, 0.5, ox - 3, f2 + 1.2, oz + (o < 2 ? 6.6 : -6.6), M.wood); // shelf
      FP(cfg.ox + ox, cfg.oz + oz, 14.5, 14.5, f2, f2 + 3.4);
    }
    SF(cfg.ox - hw + 1, cfg.ox + hw - 1, cfg.oz - hd + 1, cfg.oz + hd - 1, f2);

    /* stairs: walkable switchback lobby -> floor 2 (west wall) */
    if (isRef) { finishedStair(g, T, cfg, trim); }
    else {
      var stx = -hw + 3;
      for (var st = 0; st < 16; st++) {
        var sy = (st + 0.5) * (FH / 16), sz2 = -hd + 4 + st * 1.55;
        box(g, 3, 0.4, 1.5, stx, sy, sz2, M.dark);
        SF(cfg.ox + stx - 1.5, cfg.ox + stx + 1.5, cfg.oz + sz2 - 0.75, cfg.oz + sz2 + 0.75, sy + 0.2);
      }
      box(g, 0.3, 3, 26, stx - 1.8, 4, 4, trim); // stair rail
    }

    /* elevator: shaft at NE corner, rideable cab */
    var ex = hw - 5, ez = -hd + 5;
    box(g, 6, TH, 6, ex, TH / 2, ez, shell);
    FP(cfg.ox + ex, cfg.oz + ez, 6.4, 6.4, 0, TH);
    var cab = new T.Group(); cab.position.set(ex, 1.75, ez); g.add(cab);
    box(cab, 4.6, 3.2, 4.6, 0, 0, 0, trim);
    box(cab, 4.6, 0.3, 4.6, 0, -1.6, 0, M.dark);
    elevators.push({ x: ex, z: ez, cab: cab, idx: 0, toIdx: 0, moving: false, t: 0, from: 0, to: 0, floors: [0, FH, TH], tower: cfg.id });

    /* rooftop: ring + railing + mast */
    var ring = new T.Mesh(new T.TorusGeometry(W * 0.47, 0.42, 8, 48), trim);
    ring.rotation.x = Math.PI / 2; ring.position.y = TH + 1.5; g.add(ring);
    box(g, 0.8, 14, 0.8, 0, TH + 7, 0, trim);
    box