{
  "version": "xarts.concept-structures/1",
  "family": "concept-structures",
  "provenance": {
    "legacyId": "concept-funnel"
  },
  "measurement": {
    "exportText": "glyph-advances"
  },
  "typography": {
    "title": {
      "size": 22,
      "weight": 700,
      "lineHeight": 31
    },
    "hero": {
      "size": 49,
      "weight": 700,
      "lineHeight": 59
    },
    "body": {
      "size": 19,
      "weight": 700,
      "lineHeight": 28
    },
    "note": {
      "size": 16,
      "weight": 400,
      "lineHeight": 25
    },
    "stamp": {
      "size": 14,
      "weight": 700,
      "lineHeight": 22
    }
  },
  "paints": {
    "neutral": {
      "fill": "surface",
      "stroke": "border",
      "text": "textPrimary",
      "dash": ""
    },
    "focus": {
      "fill": "series.blue",
      "stroke": "series.blue",
      "text": "surface",
      "dash": ""
    },
    "warning": {
      "fill": "surface",
      "stroke": "negative",
      "text": "negative",
      "dash": ""
    },
    "absent": {
      "fill": "none",
      "stroke": "textMuted",
      "text": "textMuted",
      "dash": "6 4"
    },
    "favorable": {
      "fill": "surfaceAlt",
      "stroke": "series.teal",
      "text": "textPrimary",
      "dash": ""
    }
  },
  "layout": {
    "textOverflow": "wrap",
    "margin": {
      "top": 32,
      "right": 32,
      "bottom": 56,
      "left": 32
    },
    "grid": 8,
    "padding": {
      "x": 8,
      "y": 12
    },
    "radius": 4,
    "strokeWidth": 1.25,
    "minimumBoxWidth": 40,
    "roundHeight": "nearest",
    "capacity": "reject"
  },
  "annotations": {
    "band": {
      "text": "la garantía es que no hay segunda ruta de escritura",
      "role": "warning"
    },
    "verdict": "La garantía no la da el botón: la da que no exista ninguna otra puerta.",
    "bandHeight": 80,
    "verdictHeight": 48,
    "bandStroke": 4,
    "ruleWidth": 1.25,
    "noteColor": "textMuted",
    "verdictColor": "accent",
    "letterSpacing": 0.06
  },
  "document": {
    "header": {
      "title": "Tres maneras de invocar la acción, y ninguna llega al dato sin pasar por ella",
      "subtitle": "Los criterios de admisión viven en la acción, no en quien la llama.",
      "source": "Vías de invocación descritas en el capítulo 09. Esquema conceptual — sin cifras ni porcentajes."
    },
    "spacing": {
      "horizontalPadding": 24,
      "topPadding": 22,
      "bottomPadding": 16,
      "minimumTextGap": 4
    }
  },
  "presentation": {
    "theme": "anlak",
    "dimensions": {
      "width": 940,
      "height": 840
    },
    "locale": "es-ES",
    "fonts": "reference",
    "surface": "theme",
    "framePadding": 24
  },
  "output": {
    "filename": "concept-funnel",
    "embedSpec": true,
    "geometryDecimals": 2
  },
  "operation": "required-convergence",
  "data": {
    "gate": {
      "label": "ACCIÓN DECLARADA",
      "detail": "parámetros tipados, criterios de admisión, efectos y versión",
      "role": "focus"
    },
    "destination": {
      "label": "EL DATO",
      "detail": "el almacén de objetos",
      "role": "neutral"
    },
    "items": [
      {
        "id": "origin-0",
        "label": "Una persona",
        "detail": "desde una pantalla: rellena el formulario y pulsa",
        "route": "direct",
        "role": "neutral"
      },
      {
        "id": "origin-1",
        "label": "Un workflow",
        "detail": "un nodo de acción con espera y reintento",
        "route": "direct",
        "role": "neutral"
      },
      {
        "id": "origin-2",
        "label": "Un sistema externo",
        "detail": "una integración que llama sin nadie mirando",
        "route": "direct",
        "role": "neutral"
      },
      {
        "id": "origin-3",
        "label": "Escritura directa",
        "detail": "el canal que se abrió para una migración",
        "route": "forbidden-bypass",
        "role": "warning"
      }
    ]
  },
  "relationship": {
    "kind": "required-gateway",
    "order": [
      "origin-0",
      "origin-1",
      "origin-2",
      "origin-3"
    ],
    "equalOrigins": true,
    "bypasses": "prohibited"
  },
  "convergence": {
    "rowGap": 24,
    "minimumOriginFraction": 0.28,
    "maximumOriginFraction": 0.32,
    "destinationFraction": 0.22,
    "laneWidth": 32,
    "minimumGateWidth": 160,
    "minimumOriginWidth": 110,
    "minimumSlotHeight": 48,
    "minimumGateHeight": 72,
    "labelMaxLines": 3,
    "detailMaxLines": 3,
    "gateLabelMaxLines": 3,
    "gateDetailMaxLines": 4,
    "detailGap": 8,
    "detailOpacity": 0.8,
    "connectorColor": "textSecondary",
    "connectorWidth": 2,
    "gateStroke": 2,
    "arrowLength": 9,
    "arrowHeight": 8,
    "directArrowPosition": 0.62,
    "bypassLaneGap": 16,
    "bypassPadding": 36,
    "bypassCrossRadius": 7,
    "bypassCrossPosition": 0.5,
    "bypassCrossStep": 0.12,
    "endInset": 12,
    "footerGap": 24,
    "bandVerdictGap": 12,
    "verdictGapWithoutBand": 16,
    "verdictHeight": 48,
    "dynamicFooterHeight": true,
    "verdictMaxLines": 20,
    "footerOffsets": {
      "band": 30,
      "verdict": 33
    }
  }
}
