What Appearances unlock — one map, three kinds of condition

1,200 POIs on a single symbol layer. The layer declares an appearances array of four named variants — each with a condition expression and a set of property overrides spanning the appearance-supported portion of the spec. mapbox-gl evaluates the conditions per feature and applies the highest-priority match.

Set your Mapbox access token in the script below (search for MAPBOX_ACCESS_TOKEN) to load the map.
condition 1 · category

Two appearances, two states

Each appearance's condition is a single feature-state lookup:

highlighted:
  ['boolean',
    ['feature-state', 'highlighted'],
    false]

dimmed:
  ['boolean',
    ['feature-state', 'dimmed'],
    false]
condition 2 · zoom

Composed with case

An AND of two booleans:

premium-zoomed:
  ['case',
    ['boolean',
      ['feature-state', 'premium'],
      false],
    ['>', ['zoom'], 15.5],
    false]
zoom: · premium active: off
condition 3 · light

By basemap brightness

A single threshold against measure-light, placed at the back of the priority list so feature-state and zoom appearances still win when they match:

night-tint:
  ['<',
    ['measure-light', 'brightness'],
    0.3]
total features default highlighted dimmed premium-zoomed
One symbol layer (pois-label) renders all 1,200 POIs using six custom icons tinted per category. The four appearances together exercise three of the condition sources on the appearance allow-list - feature-state, zoom and measure-light - and cover a representative slice of appearance-supported properties.