{
  "schemaVersion": "1.0.0",
  "revision": 2,
  "cityId": "recursive-himalaya",
  "name": "The Recursive City / measured courts",
  "source": {
    "briefPath": "../v001/city-source.md",
    "sha256": "3cfb9dc11c9ecfdff579bb0b7f1555e468ab8c756821851c69be6aa37faf006b"
  },
  "rationale": "Pale limestone surfaces and dark blue glazing become a light, high-contrast civic interface. A four-pixel module, square double borders and hard offset shadows repeat the city’s nested courts at panel and control scales; the broad geometric Unbounded title echoes cubic silhouettes without distorting small text. Roboto Flex body text and tabular numbers express comprehensible resource allocation. Glacial blue marks active infrastructure, timber ochre marks warnings, and selection adds a check so feedback never relies on color alone. Fractal repetition is concentrated in edges while content areas remain calm, like the city’s unbroken walls. Revision 2 inverts the palette into deep glazing blue: limestone lettering and glacial cyan accents sit inside the dark window field, and the primary control becomes a pale limestone block so nested double borders read as courts cut into the facade.",
  "fonts": [
    {
      "id": "display",
      "family": "Recursive Unbounded",
      "fallback": "sans-serif",
      "kind": "local",
      "assetPath": "../v001/fonts/unbounded.ttf",
      "licensePath": "../v001/fonts/unbounded-OFL.txt",
      "axes": {
        "wght": {
          "min": 200,
          "max": 900
        }
      }
    },
    {
      "id": "ui",
      "family": "Recursive UI",
      "fallback": "sans-serif",
      "kind": "local",
      "assetPath": "../v001/fonts/roboto-flex.ttf",
      "licensePath": "../v001/fonts/robotoflex-OFL.txt",
      "axes": {
        "opsz": {
          "min": 8,
          "max": 144
        },
        "wght": {
          "min": 100,
          "max": 1000
        },
        "GRAD": {
          "min": -200,
          "max": 150
        },
        "wdth": {
          "min": 25,
          "max": 151
        },
        "slnt": {
          "min": -10,
          "max": 0
        },
        "XOPQ": {
          "min": 27,
          "max": 175
        },
        "YOPQ": {
          "min": 25,
          "max": 135
        },
        "XTRA": {
          "min": 323,
          "max": 603
        },
        "YTUC": {
          "min": 528,
          "max": 760
        },
        "YTLC": {
          "min": 416,
          "max": 570
        },
        "YTAS": {
          "min": 649,
          "max": 854
        },
        "YTDE": {
          "min": -305,
          "max": -98
        },
        "YTFI": {
          "min": 560,
          "max": 788
        }
      }
    }
  ],
  "typography": {
    "display": {
      "font": "display",
      "sizePx": 28,
      "lineHeight": 1.15,
      "weight": 650,
      "trackingPx": -0.7,
      "case": "none",
      "opticalSizing": "auto",
      "axes": {}
    },
    "heading": {
      "font": "ui",
      "sizePx": 16,
      "lineHeight": 1.45,
      "weight": 650,
      "trackingPx": 0,
      "case": "none",
      "opticalSizing": "auto",
      "axes": {}
    },
    "body": {
      "font": "ui",
      "sizePx": 14,
      "lineHeight": 1.45,
      "weight": 430,
      "trackingPx": 0,
      "case": "none",
      "opticalSizing": "auto",
      "axes": {}
    },
    "label": {
      "font": "ui",
      "sizePx": 12,
      "lineHeight": 1.45,
      "weight": 650,
      "trackingPx": 0.7,
      "case": "uppercase",
      "opticalSizing": "auto",
      "axes": {}
    },
    "small": {
      "font": "ui",
      "sizePx": 12,
      "lineHeight": 1.45,
      "weight": 430,
      "trackingPx": 0,
      "case": "none",
      "opticalSizing": "auto",
      "axes": {}
    },
    "numeric": {
      "font": "ui",
      "sizePx": 22,
      "lineHeight": 1.15,
      "weight": 650,
      "trackingPx": 0,
      "case": "none",
      "opticalSizing": "auto",
      "axes": {
        "wdth": 95
      }
    }
  },
  "colors": {
    "surface": "#173A4A",
    "text": "#EEF0E8",
    "muted": "#AFC5CA",
    "border": "#5C8494",
    "accent": "#8FD8E8",
    "warning": "#F2C38B",
    "button": "#22495B",
    "buttonText": "#EEF0E8",
    "selected": "#8FD8E8",
    "selectedText": "#10303C",
    "primary": "#EEF0E8",
    "primaryText": "#173A4A",
    "track": "#2C5566",
    "focus": "#F2C38B"
  },
  "layout": {
    "unitPx": 4,
    "panelPaddingPx": 20,
    "gapPx": 12
  },
  "components": {
    "panel": {
      "radiusPx": 0,
      "borderWidthPx": 4,
      "borderStyle": "double",
      "shadow": {
        "xPx": 4,
        "yPx": 4,
        "blurPx": 0
      }
    },
    "button": {
      "radiusPx": 0,
      "borderWidthPx": 3,
      "borderStyle": "double",
      "shadow": {
        "xPx": 2,
        "yPx": 2,
        "blurPx": 0
      }
    },
    "titleAlign": "left",
    "disabledOpacity": 0.5,
    "progressHeightPx": 8
  },
  "icons": {
    "status": "planned",
    "direction": "Square-cut silhouettes on a 16-unit grid; up to two nested subtractive steps at large sizes, simplified single silhouettes at small sizes; water forks 1→2→4, stone is a stepped block and housing an inhabited square aperture; keep shared resource meanings and visible text labels. Preview uses shared Unicode placeholders, not produced city icons.",
    "assets": []
  },
  "guardrails": {
    "minBodyPx": 14,
    "minSmallPx": 12,
    "minTextContrast": 4.5,
    "minFocusContrast": 3
  }
}
