@tileflow/maps 0.1.0-alpha.16 → 0.1.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +70 -63
  2. package/THIRD_PARTY_NOTICES.md +7 -0
  3. package/assets/streets/build-trees.mjs +167 -273
  4. package/assets/streets/climate/NOTICE.txt +9 -0
  5. package/assets/streets/climate/build.py +47 -0
  6. package/assets/streets/climate/koppen-geiger-1991-2020.tif +0 -0
  7. package/assets/streets/climate/recipe.json +13 -0
  8. package/assets/streets/icons/streets-tree-columnar-dark.pattern.svg +200 -105
  9. package/assets/streets/icons/streets-tree-columnar.pattern.svg +200 -105
  10. package/assets/streets/icons/streets-tree-conifer-dark.pattern.svg +260 -200
  11. package/assets/streets/icons/streets-tree-conifer.pattern.svg +260 -200
  12. package/assets/streets/icons/streets-tree-open-dark.pattern.svg +170 -200
  13. package/assets/streets/icons/streets-tree-open.pattern.svg +170 -200
  14. package/assets/streets/icons/streets-tree-round-dark.pattern.svg +160 -158
  15. package/assets/streets/icons/streets-tree-round.pattern.svg +160 -158
  16. package/assets/streets/icons/streets-tree-tall-dark.pattern.svg +166 -156
  17. package/assets/streets/icons/streets-tree-tall.pattern.svg +166 -156
  18. package/assets/streets/icons/unified-day-aerialway.svg +11 -0
  19. package/assets/streets/icons/unified-day-airport.svg +11 -0
  20. package/assets/streets/icons/unified-day-bank.svg +11 -0
  21. package/assets/streets/icons/unified-day-bar.svg +11 -0
  22. package/assets/streets/icons/unified-day-beach.svg +11 -0
  23. package/assets/streets/icons/unified-day-beauty.svg +11 -0
  24. package/assets/streets/icons/unified-day-bookstore.svg +11 -0
  25. package/assets/streets/icons/unified-day-buddhist.svg +11 -0
  26. package/assets/streets/icons/unified-day-bus.svg +11 -0
  27. package/assets/streets/icons/unified-day-campsite.svg +11 -0
  28. package/assets/streets/icons/unified-day-car-repair.svg +11 -0
  29. package/assets/streets/icons/unified-day-car.svg +11 -0
  30. package/assets/streets/icons/unified-day-charging-station.svg +11 -0
  31. package/assets/streets/icons/unified-day-christian.svg +11 -0
  32. package/assets/streets/icons/unified-day-clothing.svg +11 -0
  33. package/assets/streets/icons/unified-day-coffee.svg +11 -0
  34. package/assets/streets/icons/unified-day-college.svg +11 -0
  35. package/assets/streets/icons/unified-day-community.svg +11 -0
  36. package/assets/streets/icons/unified-day-convenience.svg +11 -0
  37. package/assets/streets/icons/unified-day-dentist.svg +11 -0
  38. package/assets/streets/icons/unified-day-doctor.svg +11 -0
  39. package/assets/streets/icons/unified-day-dog-park.svg +11 -0
  40. package/assets/streets/icons/unified-day-drinking-water.svg +11 -0
  41. package/assets/streets/icons/unified-day-education.svg +11 -0
  42. package/assets/streets/icons/unified-day-electronics.svg +11 -0
  43. package/assets/streets/icons/unified-day-embassy.svg +11 -0
  44. package/assets/streets/icons/unified-day-fast-food.svg +11 -0
  45. package/assets/streets/icons/unified-day-ferry.svg +11 -0
  46. package/assets/streets/icons/unified-day-fire-station.svg +11 -0
  47. package/assets/streets/icons/unified-day-fitness.svg +11 -0
  48. package/assets/streets/icons/unified-day-florist.svg +11 -0
  49. package/assets/streets/icons/unified-day-food.svg +11 -0
  50. package/assets/streets/icons/unified-day-fuel.svg +11 -0
  51. package/assets/streets/icons/unified-day-garden.svg +11 -0
  52. package/assets/streets/icons/unified-day-golf.svg +11 -0
  53. package/assets/streets/icons/unified-day-grocery.svg +11 -0
  54. package/assets/streets/icons/unified-day-harbor.svg +11 -0
  55. package/assets/streets/icons/unified-day-hardware.svg +11 -0
  56. package/assets/streets/icons/unified-day-health.svg +11 -0
  57. package/assets/streets/icons/unified-day-jewish.svg +11 -0
  58. package/assets/streets/icons/unified-day-laundry.svg +11 -0
  59. package/assets/streets/icons/unified-day-library.svg +11 -0
  60. package/assets/streets/icons/unified-day-lodging.svg +11 -0
  61. package/assets/streets/icons/unified-day-major-transit.svg +11 -0
  62. package/assets/streets/icons/unified-day-mountain.svg +11 -0
  63. package/assets/streets/icons/unified-day-muslim.svg +11 -0
  64. package/assets/streets/icons/unified-day-natural.svg +11 -0
  65. package/assets/streets/icons/unified-day-nature.svg +11 -0
  66. package/assets/streets/icons/unified-day-parking-garage.svg +11 -0
  67. package/assets/streets/icons/unified-day-parking.svg +11 -0
  68. package/assets/streets/icons/unified-day-pharmacy.svg +11 -0
  69. package/assets/streets/icons/unified-day-playground.svg +11 -0
  70. package/assets/streets/icons/unified-day-plaza.svg +11 -0
  71. package/assets/streets/icons/unified-day-police.svg +11 -0
  72. package/assets/streets/icons/unified-day-post.svg +11 -0
  73. package/assets/streets/icons/unified-day-prison.svg +11 -0
  74. package/assets/streets/icons/unified-day-rail-light.svg +11 -0
  75. package/assets/streets/icons/unified-day-rail.svg +11 -0
  76. package/assets/streets/icons/unified-day-services.svg +11 -0
  77. package/assets/streets/icons/unified-day-shopping.svg +11 -0
  78. package/assets/streets/icons/unified-day-sport.svg +11 -0
  79. package/assets/streets/icons/unified-day-stadium.svg +11 -0
  80. package/assets/streets/icons/unified-day-swimming.svg +11 -0
  81. package/assets/streets/icons/unified-day-toilet.svg +11 -0
  82. package/assets/streets/icons/unified-day-town-hall.svg +11 -0
  83. package/assets/streets/icons/unified-day-waterfall.svg +11 -0
  84. package/assets/streets/icons/unified-day-worship.svg +11 -0
  85. package/assets/streets/models/streets-tree-columnar.far.glb +0 -0
  86. package/assets/streets/models/streets-tree-columnar.glb +0 -0
  87. package/assets/streets/models/streets-tree-conifer.far.glb +0 -0
  88. package/assets/streets/models/streets-tree-conifer.glb +0 -0
  89. package/assets/streets/models/streets-tree-open.far.glb +0 -0
  90. package/assets/streets/models/streets-tree-open.glb +0 -0
  91. package/assets/streets/models/streets-tree-round.far.glb +0 -0
  92. package/assets/streets/models/streets-tree-round.glb +0 -0
  93. package/assets/streets/models/streets-tree-tall.far.glb +0 -0
  94. package/assets/streets/models/streets-tree-tall.glb +0 -0
  95. package/dist/index.d.ts +829 -132
  96. package/dist/index.js +1397 -539
  97. package/package.json +3 -4
  98. package/docs/design-and-assets.md +0 -247
  99. package/docs/map-1777.md +0 -91
package/README.md CHANGED
@@ -65,7 +65,7 @@ The CLI owns the interface; compiler and runtime changes require rebuilding thos
65
65
  - `baedeker`: warm travel-atlas styling, serif labels, original engraved patterns, and contours.
66
66
  - `civica`: illustrated civic-print styling with warm paper, olive parks, blue annotations, and
67
67
  vermilion landmarks.
68
- - [`map1777` (1777)](docs/map-1777.md): 1777 ink and watercolor on current data, with 3D and four times of day.
68
+ - `map1777` (1777): 1777 ink and watercolor on current data, with 3D and four times of day.
69
69
  - `siegfried`: a terrain atlas with coordinated light/dark ink palettes, contours, and engraved patterns.
70
70
  - `soundings`: bathymetric reference cartography with depth bands, continuous relief, and port context.
71
71
  - `blueprint`: a dark architectural drawing style, with a default camera centered on San Francisco.
@@ -76,31 +76,28 @@ to create an application-owned map.
76
76
 
77
77
  ### Streets appearance
78
78
 
79
- Streets follows the visual direction of [Mapbox Standard](https://docs.mapbox.com/playground/standard-style/)
80
- (twelve theme/time combinations), calibrated on 2026-10-18. Inspector offers **Default**, **Faded**, and
81
- **Monochrome** in its Theme control, independently of the Time of day control's `day`, `dawn`,
82
- `dusk`, and `night` presets. Each of the twelve combinations selects a complete theme, including
83
- its map colors and artwork. Default retains the configuration key `light` for compatibility:
84
- `theme="light" timeOfDay="night"` selects `dark`, while `theme="light" timeOfDay="day"`
85
- selects `light`. The other concrete themes are `dawn`, `dusk`, `faded`, `monochrome`,
86
- `dawn-faded`, `dawn-monochrome`, `dusk-faded`, `dusk-monochrome`, `dark-faded`, and
87
- `dark-monochrome`. Dawn and day use light artwork; dusk and night use dark artwork. Time presets
88
- adjust authored map colors; selecting one does not apply a global lighting tint to the flat map.
89
- Ground, water, vegetation, roads, zoning, labels and halos use independently evaluated colors
90
- from Standard's 2026-10-08 style, including each material's theme LUT, lighting, emission and
91
- transparency. Ground colors are checked against sRGB framebuffer samples from Mapbox GL JS
92
- 3.28.1 across all twelve combinations; footprints and 3D roofs use separate GPU measurements.
93
- Water retains its own material and zoom 5–7 / 13–14 transitions; it no longer inherits a
94
- swimming pool's color offset. Background emission changes between zoom 13 and 14. These values
95
- are baked into theme tokens, so they add no lighting or LUT work per frame.
96
- Scene-sun lighting preserves unshadowed roof paint while allowing light color to affect walls.
97
- The underlying tile data and rendering pipeline differ, so these are close palette matches rather
98
- than a pixel-identical copy. Streets' own semantic design retains slate-blue
99
- roads, uppercase road names, warm building footprints, green parks, and compact category-colored
100
- POI discs. Dark mode uses pale discs with dark pictograms. Pictograms adapted from Maki follow
101
- World's transport mode and POI type: metro, rail, tram, bus, ferry, cable-car, and airport stations
102
- are distinct, as are bars, cafés, museums, galleries, car dealers, and places of worship by
103
- religion.
79
+ Streets has twelve theme/time combinations. Inspector offers **Default**, **Faded**, and
80
+ **Monochrome** independently of the Time of day control's `day`, `dawn`, `dusk`, and `night`
81
+ presets. Default retains the configuration key `light`: `theme="light" timeOfDay="night"`
82
+ selects `dark`, while `theme="light" timeOfDay="day"` selects `light`. The other concrete themes
83
+ are `dawn`, `dusk`, `faded`, `monochrome`, `dawn-faded`, `dawn-monochrome`, `dusk-faded`,
84
+ `dusk-monochrome`, `dark-faded`, and `dark-monochrome`. All twelve appearances share roads, label placement, fonts and icon artwork.
85
+ Colors and lighting vary; flat-map colors are authored independently.
86
+
87
+ Scene lighting is calibrated against Mapbox Standard. Streets owns its cartography: slate-blue
88
+ roads with stronger regional outlines, neutral urban surfaces, pale warm rural ground, green
89
+ parks and subtle cream buildings. Its palette is not a fixed copy of the provider's reference
90
+ colors. All appearances use the daylight map's category-colored POI discs and pictograms.
91
+ Maki pictograms distinguish transport modes and POI types. Scene-sun lighting preserves
92
+ unshadowed roof paint while allowing light color to affect walls.
93
+
94
+ The regional climate underlay is temporarily disabled while shared URL delivery is prepared;
95
+ compiled styles omit its image source and raster layer. Themes use their authored land-cover
96
+ palettes. Urban and education areas use neutral surfaces; farmland stays pale, while mapped orchards and nurseries remain
97
+ green. Underground footprints flagged `hide_3d` are omitted from the flat building layers. Streets
98
+ suspends duplicate flat building footprints in 3D so roads remain visible under open landmarks;
99
+ 2D mode restores ordinary footprints. Normal 3D buildings keep a small neutral/active tone difference. Authored models use
100
+ the neutral building color and independently configurable window shading.
104
101
 
105
102
  Streets packages DINish Medium for roads, house numbers and POIs, and Bold for shields, approximating
106
103
  the reference's DIN Pro lettering. Other roles retain Noto Sans Regular, Bold and Italic. All
@@ -110,26 +107,25 @@ Maki's 15px artwork is composed into a centered 12px box, leaving room inside th
110
107
  interior. Their 1x and 2x atlases rasterize these SVG compositions separately; the map displays
111
108
  each complete icon at native scale instead of rescaling the bitmap as the zoom changes.
112
109
 
113
- The light surface palette is compared with lossless captures of Standard with 3D buildings and
114
- trees disabled. Parks use a stronger green with lighter lawns and meadows drawn above them;
115
- flat buildings use a neutral cream. Day keeps regional connections clear through z10, softens avenues at z12–14 and retains a
116
- readable local grid. Colors and widths recover their original detail at z15. Widths interpolate
117
- exponentially (base 1.5), including fractional zooms. Motorways and trunks start at z3, primary roads at z6, secondary and tertiary
118
- roads at z8, streets and links at z12, and service roads at z15. Surface casings begin at z15
119
- (z16 for service roads and tracks), growing independently of the carriageway gap.
120
- Major overview strokes include bridges and tunnels until structural layers take over at z13.
121
- Local structures join streets at z12. Links retain narrower widths and draw before receiving roads.
122
- Surface and bridge casings are continuous; tunnel casings are dashed. Construction carriageway
123
- fills and marks draw below roads in service, including motorway ramps.
124
- Borders use Standard's 2026-10-08 style, theme LUTs and unshadowed ground lighting, without
125
- carriageway emissive lift. HD-road borders match across classes, bridges, tunnels and roundabouts
126
- from z15; lower-zoom tunnels retain class colors. Paths keep separate emission. Streets uses the reference border colors without an additional darkening multiplier. These baked
127
- 2D colors exclude fog and Standard's full lighting pipeline.
128
- Surface caps round at z14; tunnels retain butt caps and bridges use round fills.
129
- Crosswalks and compact blue-gray arrows with filled triangular heads fade in from z16.5.
130
- Day overview colors, from motorway/trunk to primary, secondary, tertiary and local:
131
- `#AAB9C9`, `#D5DBDF`, `#DEE3E6`, `#E3E7E9`, `#DDE2E5`. Unpaved roads follow the same city hierarchy. From z15: `#AAB9C9`
132
- for motorway/trunk/primary; `#BDCCD9` for secondary/local.
110
+ The day road network keeps major routes distinct at regional and city scales. Motorways and
111
+ trunks gain a darker outline from z6 through z14, blending into the detailed treatment at z15.
112
+ Regional connector widths remain readable between towns; their city casing palette holds through z14.
113
+ Primary, secondary, tertiary and local roads widen slightly at intermediate zooms and converge
114
+ with their detailed profiles at z15. Local streets become readable when their geometry arrives
115
+ at z12. Casing passes sit below all receiving road fills, preventing exposed round segment caps
116
+ at junctions. Links remain narrower and draw before receiving roads. Tunnel casings are dashed;
117
+ surface and bridge casings are continuous. Construction fills and marks draw below roads in
118
+ service. Crosswalks and compact blue-gray arrows fade in from z16.5.
119
+
120
+ Surface footpaths and cycleways share geometry across appearances, at 92% of their authored
121
+ width and without casings. Day uses white over mapped green ground and gray-earth elsewhere.
122
+ The shared `roads.pathGround` compiler and browser protocol clip the green portions from the
123
+ same vector tiles; a complete ground-colored path remains visible if context cannot load.
124
+ Road carriageway outlines draw above these paths. This treatment belongs to the Streets
125
+ definition and survives normal artifact regeneration in every palette and time preset.
126
+ Road palettes, width profiles, building outlines and the overview backgrounds are authored here
127
+ in Maps; consumers inherit them without installing a separately edited style snapshot.
128
+
133
129
  From z13, pedestrian plazas use an opaque pale surface above commercial zoning and below
134
130
  explicit grass, gardens and parks. The `roads.pedestrian.surface` token follows the ground's
135
131
  theme and time of day. From z17, mapped sidewalks add a translucent tint and dot pattern through
@@ -152,16 +148,15 @@ Streets rounds exterior building corners with a 1.5-metre radius and softens the
152
148
  lighting transition (`threeDimensional.edgeRadius: 1.5`). Courtyards and tile cuts retain their shape.
153
149
  Shields use 9 px DINish Bold and closer spacing at z11–13. Street names yield to destinations
154
150
  and draw above flat footprints but below 3D buildings, with viewport-aligned letters.
155
- 3D lights use Standard's effective theme presets, retrieved on 2026-10-18: southern sun by day,
156
- southeast at dawn, southwest at dusk and western moonlight at night. Monochrome has distinct
157
- directions and strengths. Tileflow holds zoom 14+ values; Standard varies intensity below z14.
158
- Shading differs; `controller.setSun({date, location})` uses the real sun instead of presets.
159
- Landmark material profiles and subtle dusk/night illumination are covered in
160
- [3D buildings](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/docs/buildings-3d.md).
151
+ 3D lights use a southern sun by day, southeast at dawn, southwest at dusk and western moonlight
152
+ at night. At each moment, palettes share light direction, strength and shadow geometry;
153
+ only light colors change. `controller.setSun({date, location})` uses the real sun instead.
154
+ Streets enables `camera.adaptivePerspective`. See camera, landmark and lighting settings in
155
+ [3D buildings](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md).
161
156
  The buildings' `threeDimensional.lighting` and `shadows` options control the effect, and each
162
157
  theme's `lighting.sun.shadowIntensity` and `lighting.ambient` control its strength.
163
158
  Street lights are opt-in: set `roads.streetLights.enabled: true`.
164
- Core rounds corners and shades facades; Streets uses `groundOcclusion: 0.12` for ground contact.
159
+ Streets uses `groundOcclusion: 0.07` and `groundOcclusionRadius: 1.5` for subtle ground contact.
165
160
  `buildings.threeDimensional.occlusion: false` disables contact and model occlusion.
166
161
  `buildings.contactShadow` styles the flat fallback.
167
162
  Streets selects Core's `labels.roadPlacement: 'ground'`: street names follow the road plane below
@@ -170,9 +165,10 @@ Road names retain class zoom/size curves, favor major roads and add padding thro
170
165
  Pedestrian paths group separately. Compact types preserve language;
171
166
  `labels.roadNameFormat: 'full'` keeps source names.
172
167
  Disabling roads omits their names.
173
- Road rings, ramp and surface ordering use [Core's replaceable defaults](../core/docs/cartographic-defaults.md).
174
- Streets owns colors, widths, typography and time-of-day themes.
175
- Each theme paints a [street sky](../core/docs/street-sky.md) with night stars; `atmosphere: true`
168
+ Road rings, ramp and surface ordering use [Core's replaceable defaults](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md).
169
+ All non-day themes grade day's ground, water, roads, trees and 2D/3D materials across zooms:
170
+ yellow warmth at dawn, dimmer stone at dusk, cool night. Day palettes stay unchanged.
171
+ Each theme paints a [street sky](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md) with night stars; `atmosphere: true`
176
172
  on a globe map adds space around it. Mercator and native targets remain supported.
177
173
 
178
174
  Streets enables model trees by default (`mode: '3d'`, `fallback: 'none'`). They stay three-dimensional
@@ -189,7 +185,7 @@ changing source heights. All presets style bark and crowns independently.
189
185
  The models have 222–386 triangles nearby and 44–78 at distance, using Core's instanced tree
190
186
  renderer; flat crowns use the existing sprite atlas. Tree locations and attributes still come
191
187
  from the source tiles. The artwork does not add trees to parks whose data has none. See
192
- [3D trees](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/docs/trees-3d.md) for
188
+ [3D trees](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md) for
193
189
  browser rendering and platform support. To remove both representations, extend the map:
194
190
 
195
191
  <!-- docs:check -->
@@ -207,9 +203,12 @@ export default defineMap({
207
203
  ```
208
204
 
209
205
  POIs follow World ranks and category density, with extra detail for parks and transport.
206
+ Generic airport POIs are limited to rank 0 to reduce misplaced business listings; the dedicated
207
+ aerodrome layer continues to label mapped airports. This display policy does not repair source data.
208
+ Road-reference repetition is reduced at z11–13 and retains its detail interval from z14.
210
209
  Gardens stay at ranks 0–1 at every zoom, keeping principal destinations while omitting botanical
211
210
  collections and some small independent gardens. Other park and landmark types retain their usual
212
- eligibility. See [Streets POI selection and placement](docs/design-and-assets.md#streets-pois).
211
+ eligibility.
213
212
 
214
213
  Cities and districts hand over at z15, smaller settlements at z13. Co-located cities share one
215
214
  anchor. Districts use rank gates below z12, then source availability and collisions. Street names use 0.15 em letter spacing and
@@ -221,7 +220,6 @@ The map uses Tileflow data and assets, including packaged DINish and Noto Sans f
221
220
  reference uses DIN Pro Medium, so font shapes and stroke weight
222
221
  remain an approximation. Available POIs, abbreviated names,
223
222
  proprietary landmark models, transit branding, and building detail can differ from the reference.
224
- See [map design and asset provenance](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/docs/design-and-assets.md).
225
223
 
226
224
  ### Blueprint naming
227
225
 
@@ -318,10 +316,7 @@ for inheritance and styling, or the
318
316
  [public exports](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/src/index.ts)
319
317
  for exact names. The installed package's definitions and README take precedence over a newer `main`.
320
318
 
321
- ## Design and asset reference
322
-
323
- The [design and asset notes](https://github.com/tileflow/tileflow-sdk/blob/main/packages/maps/docs/design-and-assets.md) describe each map's visual grammar, source references, and third-party asset boundaries. They are also included under
324
- `docs/` in the installed package.
319
+ ## Streets themes
325
320
 
326
321
  Streets offers three time-of-day families: `light` (displayed as Default), `faded`, and `monochrome`, each with
327
322
  `day`, `dawn`, `dusk`, and `night`. For example, `theme="faded" timeOfDay="night"` resolves to
@@ -329,3 +324,15 @@ Streets offers three time-of-day families: `light` (displayed as Default), `fade
329
324
  concrete theme names remain available for existing applications and captures. This catalog
330
325
  is inherited when extending Streets without overriding it.
331
326
  See the [time-of-day contract](https://github.com/tileflow/tileflow-sdk/blob/main/packages/core/README.md#style-with-themes-and-semantic-modules).
327
+
328
+ Streets packages contrasted routes and compact trees. Climate artwork and its attribution are
329
+ retained for future URL delivery, but the underlay is not included in compiled styles.
330
+ When the 3D view is active, available buildings and models appear at full height from zoom 14.25
331
+ without zoom entrance animations.
332
+ Pitch is capped at 38° through zoom 15; closer views use the application's maximum.
333
+ Daylight combines warm limestone buildings, ivory model surfaces, smoked-blue glazing and warm
334
+ roof tones under warm sunlight and cool skylight. Models share ordinary-building shading, with
335
+ soft contact shadows and ambient occlusion in recesses. Monochrome materials stay neutral.
336
+ Glass parts can be recoloured independently through `modelColors.glass`; window roles retain
337
+ that glass tint even on a shared stone part, with `modelLighting.window.colorScale: 0.96`.
338
+ Other maps can override their colour and material without regenerating the model.
@@ -205,3 +205,10 @@ Cívica includes five unmodified upstream font files under `assets/civica/fonts/
205
205
  component filenames and source revisions for Tileflow's generic font preparation pipeline.
206
206
  `assets/civica/fonts/README.md` records individual pinned source links and verified OpenType full
207
207
  names. No font file has been subsetted, renamed internally, or modified.
208
+
209
+ ## Historical climate context
210
+
211
+ Streets uses a smoothed colour proxy derived from Beck et al. (2023),
212
+ https://doi.org/10.1038/s41597-023-02549-6, under CC BY 4.0.
213
+ Source, attribution and adaptation details: assets/streets/climate/NOTICE.txt.
214
+ The image is historical context, not live vegetation.