(function() {
  /* Mobile dock glyphs — monochrome line icons on currentColor.
     They deliberately carry NO colour of their own: .glass-tabbar-item already
     sets the state colour (dim / white when active / lime for Create), so the
     icons inherit it and the dock reads as one material. The previous set was
     filled multi-colour art on Apple system colours (#0a84ff, #ffd60a …), which
     sat outside the OKLCH palette and read as emoji beside the app's SVG set. */

  function CitySvg(props) {
    var size = props.size || 24;
    return React.createElement('svg', {
      className: (props.className || '') + ' city-nav-ico',
      width: size,
      height: size,
      viewBox: '0 0 24 24',
      fill: 'none',
      stroke: 'currentColor',
      strokeWidth: 1.6,
      strokeLinecap: 'round',
      strokeLinejoin: 'round',
      xmlns: 'http://www.w3.org/2000/svg',
      'aria-hidden': true,
      focusable: false
    }, props.children);
  }

  var el = React.createElement;

  var CityNavIcons = {
    /* Home — civic skyline rather than a house: this is a city app. */
    Home: function(p) {
      return el(CitySvg, p,
        el('path', { d: 'M3.25 20.25h17.5' }),
        el('path', { d: 'M4.5 20.25v-8.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v8.5' }),
        el('path', { d: 'M9.5 20.25V6.4a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v13.85' }),
        el('path', { d: 'M14.5 20.25v-6.6a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v6.6' }),
        el('path', { d: 'M11.35 9.1h1.3M11.35 12.4h1.3M11.35 15.7h1.3', opacity: 0.55 })
      );
    },

    /* Sites — map pin. */
    Sites: function(p) {
      return el(CitySvg, p,
        el('path', { d: 'M12 20.75s6.4-5.35 6.4-10a6.4 6.4 0 1 0-12.8 0c0 4.65 6.4 10 6.4 10Z' }),
        el('circle', { cx: 12, cy: 10.6, r: 2.35 })
      );
    },

    /* Missions — target, matching the "target" glyph used elsewhere. */
    Missions: function(p) {
      return el(CitySvg, p,
        el('circle', { cx: 12, cy: 12, r: 8.25 }),
        el('circle', { cx: 12, cy: 12, r: 4.4 }),
        el('circle', { cx: 12, cy: 12, r: 1, fill: 'currentColor', stroke: 'none' })
      );
    },

    /* Build — tower crane. Proportioned like a real one (short counter-jib,
       long working jib) but pulled in from the edges so the silhouette stays
       balanced at 30px instead of looking like it is toppling left. */
    Build: function(p) {
      return el(CitySvg, p,
        el('path', { d: 'M5.9 20.6h5.4' }),
        el('path', { d: 'M8.6 20.6V5.2' }),
        el('path', { d: 'M5.1 5.2h13.9' }),
        el('rect', { x: 4.1, y: 4.05, width: 1.9, height: 2.3, rx: 0.6 }),
        el('path', { d: 'M8.6 5.2 6.6 8M8.6 5.2l2 2.8', opacity: 0.5 }),
        el('path', { d: 'M16.3 5.2v3.5' }),
        el('rect', { x: 14.85, y: 8.7, width: 2.9, height: 2.3, rx: 0.7 })
      );
    },

    /* Messages — speech bubble. */
    Messages: function(p) {
      return el(CitySvg, p,
        el('path', {
          d: 'M20.4 11.6c0 3.85-3.76 6.98-8.4 6.98-.92 0-1.8-.12-2.63-.35L4.6 20l1.28-3.42C4.4 15.32 3.6 13.55 3.6 11.6c0-3.86 3.76-6.98 8.4-6.98s8.4 3.12 8.4 6.98Z'
        })
      );
    },

    /* Create — the dock's primary action, so a plain unmistakable plus. */
    Create: function(p) {
      return el(CitySvg, p,
        el('rect', { x: 3.6, y: 3.6, width: 16.8, height: 16.8, rx: 5.2 }),
        el('path', { d: 'M12 8.35v7.3M8.35 12h7.3' })
      );
    }
  };

  window.CityNavIcons = CityNavIcons;
})();
