{
  "version": "xarts.ternary-compositions/1",
  "family": "ternary-compositions",
  "operation": "normalized-three-part-composition",
  "provenance": {
    "legacyId": "ternary-plot"
  },
  "data": {
    "rows": [
      {
        "id": "1",
        "label": "Nexo Urban Hotels",
        "group": "urban",
        "values": {
          "direct": 41,
          "ota": 44,
          "operator": 15
        }
      },
      {
        "id": "2",
        "label": "Vía Central Hoteles",
        "group": "urban",
        "values": {
          "direct": 47,
          "ota": 35,
          "operator": 18
        }
      },
      {
        "id": "3",
        "label": "Atrio City",
        "group": "urban",
        "values": {
          "direct": 33,
          "ota": 52,
          "operator": 15
        }
      },
      {
        "id": "4",
        "label": "Marena Hotels",
        "group": "vacation",
        "values": {
          "direct": 24,
          "ota": 31,
          "operator": 45
        }
      },
      {
        "id": "5",
        "label": "Costa Ámbar Resorts",
        "group": "vacation",
        "values": {
          "direct": 18,
          "ota": 27,
          "operator": 55
        }
      },
      {
        "id": "6",
        "label": "Aloe Beach Collection",
        "group": "vacation",
        "values": {
          "direct": 15,
          "ota": 22,
          "operator": 63
        }
      },
      {
        "id": "7",
        "label": "Refugio Duero",
        "group": "independent",
        "values": {
          "direct": 29,
          "ota": 64,
          "operator": 7
        }
      },
      {
        "id": "8",
        "label": "Casa Bética",
        "group": "independent",
        "values": {
          "direct": 21,
          "ota": 71,
          "operator": 8
        }
      },
      {
        "id": "9",
        "label": "Hostal Mirasierra",
        "group": "independent",
        "values": {
          "direct": 12,
          "ota": 83,
          "operator": 5
        }
      }
    ]
  },
  "encoding": {
    "components": [
      {
        "id": "direct",
        "label": "Directo",
        "unit": "%",
        "vertex": "top"
      },
      {
        "id": "ota",
        "label": "OTA",
        "unit": "%",
        "vertex": "left"
      },
      {
        "id": "operator",
        "label": "Turoperador",
        "unit": "%",
        "vertex": "right"
      }
    ],
    "groups": [
      {
        "id": "urban",
        "label": "Urbano",
        "fill": "#112c47"
      },
      {
        "id": "vacation",
        "label": "Vacacional",
        "fill": "#6a4a4a"
      },
      {
        "id": "independent",
        "label": "Independiente",
        "fill": "#4b8596"
      }
    ],
    "ungroupedFill": "#112c47"
  },
  "calculation": {
    "normalization": "row-total",
    "projection": "equilateral-barycentric",
    "radius": "constant",
    "groupOrder": "declared",
    "filter": "retain-colors-repack-labels-at-least-one-group"
  },
  "profile": {
    "quality": {
      "topPadding": 24,
      "bottomPadding": 24,
      "horizontalPadding": 24,
      "legendGap": 24,
      "legendRowGap": 12,
      "legendItemGap": 24,
      "vertexMaxLines": 4,
      "vertexLineHeight": 1.4,
      "nameMaximumWidth": 190,
      "nameMaxLines": 5,
      "nameLineHeight": 1.4,
      "nameGap": 8,
      "nameGridStep": 8
    },
    "triangle": {
      "fill": "surface",
      "stroke": "textSecondary",
      "strokeWidth": 1.5,
      "gridStroke": "borderLight",
      "gridWidth": 1,
      "gridStep": 20,
      "tickLength": 4,
      "tickGap": 6,
      "vertexGap": 10,
      "vertexFontSize": 12,
      "vertexFontWeight": 600,
      "vertexFill": "textPrimary",
      "vertexMaximumWidth": 190,
      "vertexWidthFraction": 0.4,
      "vertexOverflow": "reject",
      "baselineFraction": 0.78,
      "minimumTickGap": 8,
      "edgePadding": 3,
      "boundarySteps": 48,
      "rounding": 2
    },
    "point": {
      "radius": 5.5,
      "hoverRadius": 7.5,
      "stroke": "surface",
      "strokeWidth": 1.5,
      "opacity": 0.92
    },
    "labels": {
      "mode": "all",
      "fontSize": 13,
      "fontFamily": "'Inter', system-ui, -apple-system, sans-serif",
      "fill": "textSecondary",
      "guideStroke": "border",
      "guideWidth": 1
    },
    "ticks": {
      "fontSize": 13,
      "fontFamily": "'Inter', system-ui, -apple-system, sans-serif",
      "fill": "#3d3d3d"
    },
    "legend": {
      "exportMeasurement": "glyph-advances",
      "position": "bottom",
      "align": "start",
      "reserveHeight": 36,
      "minimumLabelWidth": 60,
      "itemPadding": 40,
      "fontSize": 13,
      "overflow": "reject"
    }
  },
  "annotations": [],
  "document": {
    "textOverflow": "preserve",
    "header": {
      "title": "Los independientes no reparten: viven en la OTA",
      "subtitle": "Reparto del ingreso por habitación entre los tres canales de venta, nueve grupos hoteleros españoles (2025)",
      "source": "Datos ilustrativos. Cada punto se coloca por sus tres cuotas; el vértice es el 100 % de ese canal."
    },
    "spacing": {
      "horizontalPadding": 32,
      "topPadding": 24,
      "bottomPadding": 24,
      "minimumTextGap": 6
    }
  },
  "presentation": {
    "theme": "anlak",
    "dimensions": {
      "width": 1200,
      "height": 900
    },
    "locale": "es-ES",
    "fonts": "reference",
    "surface": "theme",
    "framePadding": 24
  },
  "output": {
    "filename": "ternary-plot",
    "embedSpec": true,
    "geometryDecimals": 2
  }
}
