{
  "version": "xarts.coordinate-marks/1",
  "family": "coordinate-marks",
  "operation": "physical-route",
  "provenance": {
    "legacyId": "spaghetti"
  },
  "data": {
    "sites": [
      {
        "id": "s0",
        "label": "Puesto 1",
        "x": 3,
        "y": 3,
        "zoneId": "z0"
      },
      {
        "id": "s1",
        "label": "Puesto 2",
        "x": 10,
        "y": 3,
        "zoneId": "z0"
      },
      {
        "id": "s2",
        "label": "Puesto 3",
        "x": 17,
        "y": 3,
        "zoneId": "z1"
      },
      {
        "id": "s3",
        "label": "Puesto 4",
        "x": 24,
        "y": 3,
        "zoneId": "z1"
      },
      {
        "id": "s4",
        "label": "Puesto 5",
        "x": 31,
        "y": 3,
        "zoneId": "z1"
      },
      {
        "id": "s5",
        "label": "Puesto 6",
        "x": 3,
        "y": 9,
        "zoneId": "z1"
      },
      {
        "id": "s6",
        "label": "Puesto 7",
        "x": 10,
        "y": 9,
        "zoneId": "z1"
      },
      {
        "id": "s7",
        "label": "Puesto 8",
        "x": 17,
        "y": 9,
        "zoneId": "z1"
      },
      {
        "id": "s8",
        "label": "Puesto 9",
        "x": 24,
        "y": 9,
        "zoneId": "z1"
      },
      {
        "id": "s9",
        "label": "Puesto 10",
        "x": 31,
        "y": 9,
        "zoneId": "z1"
      },
      {
        "id": "s10",
        "label": "Puesto 11",
        "x": 3,
        "y": 15,
        "zoneId": "z2"
      },
      {
        "id": "s11",
        "label": "Puesto 12",
        "x": 10,
        "y": 15,
        "zoneId": "z2"
      },
      {
        "id": "s12",
        "label": "Puesto 13",
        "x": 17,
        "y": 15,
        "zoneId": "z3"
      },
      {
        "id": "s13",
        "label": "Puesto 14",
        "x": 24,
        "y": 15,
        "zoneId": "z3"
      },
      {
        "id": "s14",
        "label": "Puesto 15",
        "x": 31,
        "y": 15,
        "zoneId": "z3"
      }
    ],
    "zones": [
      {
        "id": "z0",
        "label": "Recepción"
      },
      {
        "id": "z1",
        "label": "Pasillos"
      },
      {
        "id": "z2",
        "label": "Consumibles"
      },
      {
        "id": "z3",
        "label": "Embalaje y salida"
      }
    ],
    "routes": [
      {
        "id": "r0",
        "label": "Ruta 1",
        "color": "series.blue",
        "visits": [
          {
            "id": "v0-0",
            "siteId": "s9",
            "order": 1
          },
          {
            "id": "v0-1",
            "siteId": "s10",
            "order": 2
          },
          {
            "id": "v0-2",
            "siteId": "s2",
            "order": 3
          },
          {
            "id": "v0-3",
            "siteId": "s7",
            "order": 4
          },
          {
            "id": "v0-4",
            "siteId": "s12",
            "order": 5
          },
          {
            "id": "v0-5",
            "siteId": "s14",
            "order": 6
          },
          {
            "id": "v0-6",
            "siteId": "s1",
            "order": 7
          },
          {
            "id": "v0-7",
            "siteId": "s6",
            "order": 8
          },
          {
            "id": "v0-8",
            "siteId": "s13",
            "order": 9
          },
          {
            "id": "v0-9",
            "siteId": "s11",
            "order": 10
          },
          {
            "id": "v0-10",
            "siteId": "s5",
            "order": 11
          },
          {
            "id": "v0-11",
            "siteId": "s3",
            "order": 12
          },
          {
            "id": "v0-12",
            "siteId": "s4",
            "order": 13
          },
          {
            "id": "v0-13",
            "siteId": "s0",
            "order": 14
          },
          {
            "id": "v0-14",
            "siteId": "s8",
            "order": 15
          }
        ]
      },
      {
        "id": "r1",
        "label": "Ruta 2",
        "color": "series.rose",
        "visits": [
          {
            "id": "v1-0",
            "siteId": "s11",
            "order": 1
          },
          {
            "id": "v1-1",
            "siteId": "s14",
            "order": 2
          },
          {
            "id": "v1-2",
            "siteId": "s10",
            "order": 3
          },
          {
            "id": "v1-3",
            "siteId": "s6",
            "order": 4
          },
          {
            "id": "v1-4",
            "siteId": "s3",
            "order": 5
          },
          {
            "id": "v1-5",
            "siteId": "s9",
            "order": 6
          },
          {
            "id": "v1-6",
            "siteId": "s7",
            "order": 7
          },
          {
            "id": "v1-7",
            "siteId": "s2",
            "order": 8
          },
          {
            "id": "v1-8",
            "siteId": "s0",
            "order": 9
          },
          {
            "id": "v1-9",
            "siteId": "s1",
            "order": 10
          },
          {
            "id": "v1-10",
            "siteId": "s5",
            "order": 11
          },
          {
            "id": "v1-11",
            "siteId": "s8",
            "order": 12
          },
          {
            "id": "v1-12",
            "siteId": "s13",
            "order": 13
          },
          {
            "id": "v1-13",
            "siteId": "s4",
            "order": 14
          },
          {
            "id": "v1-14",
            "siteId": "s12",
            "order": 15
          }
        ]
      }
    ]
  },
  "calculation": {
    "unit": "m",
    "distance": "euclidean-segments",
    "order": "numeric-visit-order",
    "duplicateOrder": "reject",
    "scale": "isotropic",
    "zones": "member-bounds-not-walls",
    "obstacles": "not-modelled",
    "optimization": "not-performed"
  },
  "profile": {
    "mode": "indexed-key",
    "margin": {
      "top": 30,
      "right": 32,
      "bottom": 30,
      "left": 32
    },
    "columnGap": 18,
    "legendMaximum": 220,
    "minimumSegment": 3,
    "minimumPlan": 140,
    "route": {
      "width": 1.8,
      "opacity": 0.85,
      "dimOpacity": 0.18,
      "arrowLength": 7,
      "minimumArrowSegment": 16
    },
    "site": {
      "radius": 3.2,
      "fill": "surface",
      "stroke": "textSecondary",
      "strokeWidth": 1.1,
      "hoverRadius": 6
    },
    "label": {
      "size": 10,
      "fill": "textPrimary",
      "halo": "surface",
      "haloWidth": 2.6,
      "guide": "textMuted"
    },
    "zone": {
      "padding": 1.5,
      "fill": "textMuted",
      "opacity": 0.07,
      "stroke": "border",
      "width": 1,
      "dash": "3 3",
      "radius": 3,
      "size": 10,
      "text": "textMuted"
    },
    "ruler": {
      "widthFraction": 0.22,
      "cap": 4,
      "stroke": "textSecondary",
      "width": 1.2,
      "size": 10,
      "text": "textSecondary"
    },
    "legend": {
      "size": 11,
      "text": "textPrimary",
      "secondary": "textMuted",
      "swatch": 22,
      "gap": 8,
      "rowHeight": 30,
      "lineHeight": 13,
      "rulerGap": 18,
      "decimals": 0
    },
    "note": {
      "size": 9,
      "fill": "textMuted",
      "lineHeight": 12,
      "gap": 14,
      "lines": [
        "Plano a escala isótropa: X e Y a la misma medida, así que la barra mide en cualquier dirección",
        "Las zonas son el rectángulo que envuelve sus propios puestos, no un muro del edificio"
      ]
    },
    "quality": {
      "badgeRadius": 16,
      "minimumBadgeGap": 8,
      "minimumArrowSegment": 60,
      "rulerMaximum": 140,
      "size": 14,
      "lineHeight": 24,
      "planHeight": 340,
      "keyGap": 32,
      "notice": "Distancias euclídeas entre visitas declaradas. No se modelan obstáculos, tiempos ni velocidades, y no se optimiza el itinerario. Las zonas envuelven sus puestos; no representan paredes."
    }
  },
  "annotations": [],
  "document": {
    "textOverflow": "preserve",
    "header": {
      "title": "Recorridos de un espacio ficticio",
      "subtitle": "Datos generados para demostrar la gramática del gráfico"
    },
    "footer": {
      "source": "Ejemplo sintético generado para la biblioteca",
      "notes": "Valores y entidades ficticios. No representan clientes, planes ni resultados reales."
    },
    "spacing": {
      "horizontalPadding": 24,
      "topPadding": 22,
      "bottomPadding": 16,
      "minimumTextGap": 4
    }
  },
  "presentation": {
    "theme": "anlak",
    "dimensions": {
      "width": 900,
      "height": 1420
    },
    "locale": "es-ES",
    "fonts": "reference",
    "surface": "theme",
    "framePadding": 24
  },
  "output": {
    "filename": "spaghetti",
    "embedSpec": true,
    "geometryDecimals": 2
  }
}
