---
root:
  items:
    # Small-ish gradients
    - type: gradient
      bounds: 50 50 NaN 200
      start: 0 100
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      start: 0 100
      end: NaN 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      start: 0 NaN
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      start: 0 100
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              NaN, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      start: 0 100
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, NaN, black]
    - type: gradient
      bounds: 50 50 200 200
      clip-rect: 50 50 150 NaN
      start: 0 100
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      tile-size: NaN 200
      start: 0 100
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]

    # Large-ish gradients
    - type: gradient
      bounds: 50 50 NaN 500
      start: 0 100
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 500 500
      start: 0 100
      end: NaN 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 500 500
      start: 0 NaN
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 500 500
      start: 0 100
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              NaN, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 500 500
      start: 0 100
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, NaN, black]
    - type: gradient
      bounds: 50 50 500 500
      clip-rect: 50 50 150 NaN
      start: 0 100
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 500 500
      tile-size: NaN 500
      start: 0 100
      end: 500 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]

    # Very large gradients
    - type: gradient
      bounds: 50 50 10000 10000
      start: 0 100
      end: NaN 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 10000 10000
      start: 0 NaN
      end: 10000 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.5, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 10000 10000
      start: 0 100
      end: 10000 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              NaN, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 10000 10000
      start: 0 100
      end: 10000 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, NaN, black]
    - type: gradient
      bounds: 50 50 10000 10000
      clip-rect: 50 50 150 NaN
      start: 0 100
      end: 10000 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 10000 10000
      tile-size: NaN 10000
      start: 0 100
      end: 10000 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]

    # Not axis-aligned
    - type: gradient
      bounds: 50 50 200 200
      tile-size: NaN 200
      start: 0 0
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: NaN 50 200 200
      tile-size: 100 100
      start: 0 0
      end: 200 100
      stops: [0.0, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, 0.75, blue,
              0.75, black, 1.0, black]
    - type: gradient
      bounds: 50 50 200 200
      start: 0.0 0
      end: 200 100
      stops: [NaN, red, 0.25, red,
              0.25, green, 0.5, green,
              0.0, blue, NaN, blue,
              0.75, black, 1.0, black]

    # Post-apocalyptic gradient
    - type: gradient
      bounds: NaN NaN NaN NaN
      tile-size: NaN NaN
      start: NaN NaN
      end: NaN NaN
      stops: [NaN, red, NaN, red,
              NaN, green, NaN, green,
              NaN, blue, NaN, blue,
              NaN, black, NaN, black]
