seriffic Claude Opus 4.7 (1M context) commited on
Commit
b84be35
·
1 Parent(s): 58c5d93

feat(emissions): per-call inference energy + token tracker

Browse files

Adds an additive emissions ledger that records every llm.chat call
and every remote app.inference._post call, surfacing the per-query
total Wh / J + token counts on the briefing.

Backend
- app/emissions.py: thread-local Tracker with hardware power profiles
(MI300X 600 W, T4 50 W, Apple M 20 W, x86 30 W) and a summarize()
rollup with by-kind, by-hardware, and frontier-cloud comparison.
- app/llm.py: chat() times each call, picks hardware via engine
detection, reads prompt/completion tokens from LiteLLM usage for
non-stream calls, estimates from response text for streams.
- app/inference.py: _post() records duration vs the MI300X profile.
- app/fsm.py: captures the parent-thread tracker and re-installs it on
the iter_steps runner thread (mirrors the token_callback pattern);
attaches `emissions` alongside the existing `energy` block in both
run() and the iter_steps final event.
- app/context/eo_chip_cache.py + app/flood_layers/prithvi_live.py:
ThreadPoolExecutor initializer propagates the tracker into the
worker so inference calls inside those specialists are captured.
- web/main.py: installs a fresh Tracker for api_agent (sync) and
api_agent_stream (SSE runner), summarizes into the result.

Frontend
- agentStream.ts: EmissionsSummary + EmissionsCall types, optional
field on FinalResult.
- card.ts FindingsData: optional emissions field plumbed through.
- cardAdapter.ts: passes emissions through adaptFinalToFindings.
- RunHealthStrip.svelte: compact chip "X mWh inference / Y tok ~Nx <
cloud" with a hover tooltip listing call count, hardware, token
split, and method. Renders only when the backend reports a ledger
so older clients keep working unchanged.

The legacy `energy` field is untouched, so web/static/app.js keeps
rendering the existing footer. Build re-run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

Files changed (44) hide show
  1. app/context/eo_chip_cache.py +8 -1
  2. app/emissions.py +230 -0
  3. app/flood_layers/prithvi_live.py +6 -1
  4. app/fsm.py +16 -0
  5. app/inference.py +15 -0
  6. app/llm.py +85 -2
  7. web/main.py +33 -20
  8. web/sveltekit/build/200.html +9 -10
  9. web/sveltekit/build/_app/immutable/assets/stoneRegistry.DOPO2SDD.css +1 -0
  10. web/sveltekit/build/_app/immutable/assets/stoneRegistry.bHiraU77.css +0 -1
  11. web/sveltekit/build/_app/immutable/chunks/{DlifwAOf.js → B3Pg95Il.js} +1 -1
  12. web/sveltekit/build/_app/immutable/chunks/BIe30OUb.js +0 -1
  13. web/sveltekit/build/_app/immutable/chunks/BOtZ6QcV.js +0 -1
  14. web/sveltekit/build/_app/immutable/chunks/CAMdvC-O.js +0 -1
  15. web/sveltekit/build/_app/immutable/chunks/CFg_rPYf.js +0 -37
  16. web/sveltekit/build/_app/immutable/chunks/CJeJVIjP.js +1 -0
  17. web/sveltekit/build/_app/immutable/chunks/FjZhY28w.js +38 -0
  18. web/sveltekit/build/_app/immutable/chunks/nUW4eUox.js +0 -1
  19. web/sveltekit/build/_app/immutable/chunks/zVqBGhq2.js +0 -37
  20. web/sveltekit/build/_app/immutable/entry/{app.CoGsDDek.js → app.BhktVbRh.js} +2 -2
  21. web/sveltekit/build/_app/immutable/entry/app.DBibj1kM.js +0 -2
  22. web/sveltekit/build/_app/immutable/entry/start.BIDfHH4-.js +0 -1
  23. web/sveltekit/build/_app/immutable/entry/start.FA4XFe2L.js +0 -1
  24. web/sveltekit/build/_app/immutable/entry/start.YmL7ZSOR.js +1 -0
  25. web/sveltekit/build/_app/immutable/nodes/{0.BaDkkERB.js → 0.Dv1TzIuH.js} +1 -1
  26. web/sveltekit/build/_app/immutable/nodes/0.h-vIKZsr.js +0 -2
  27. web/sveltekit/build/_app/immutable/nodes/{1.D77vIaPt.js → 1.BmImNqbK.js} +1 -1
  28. web/sveltekit/build/_app/immutable/nodes/1.DtMBYvn3.js +0 -1
  29. web/sveltekit/build/_app/immutable/nodes/2.BWTkJ8km.js +0 -4
  30. web/sveltekit/build/_app/immutable/nodes/{2.Bas78CjE.js → 2.CLD-rsu4.js} +1 -1
  31. web/sveltekit/build/_app/immutable/nodes/{3.Bi9lYhtb.js → 3.0RkbXXD4.js} +1 -1
  32. web/sveltekit/build/_app/immutable/nodes/3.KbM-URMV.js +0 -7
  33. web/sveltekit/build/_app/immutable/nodes/4.Cjv2wdud.js +0 -1
  34. web/sveltekit/build/_app/immutable/nodes/{4.CXYWu0_c.js → 4.DLn0bV4P.js} +0 -0
  35. web/sveltekit/build/_app/immutable/nodes/5.6DbTPabk.js +0 -1
  36. web/sveltekit/build/_app/immutable/nodes/{5.NbriEyGS.js → 5.C0xKDhXA.js} +1 -1
  37. web/sveltekit/build/_app/version.json +1 -1
  38. web/sveltekit/build/index.html +11 -12
  39. web/sveltekit/build/q/sample.html +0 -0
  40. web/sveltekit/src/lib/client/agentStream.ts +45 -0
  41. web/sveltekit/src/lib/client/cardAdapter.ts +1 -0
  42. web/sveltekit/src/lib/components/findings/FindingsRegion.svelte +1 -0
  43. web/sveltekit/src/lib/components/findings/RunHealthStrip.svelte +58 -2
  44. web/sveltekit/src/lib/types/card.ts +3 -0
app/context/eo_chip_cache.py CHANGED
@@ -329,7 +329,14 @@ def fetch(lat: float, lon: float, timeout_s: float = 60.0) -> dict[str, Any]:
329
  # Hard wall-clock cap: pystac_client / rioxarray COG reads don't expose
330
  # uniform per-request timeouts, so we bound the whole pipeline here.
331
  hard_timeout = timeout_s + 15.0
332
- with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
 
 
 
 
 
 
 
333
  future = pool.submit(_fetch_and_build, lat, lon, timeout_s)
334
  try:
335
  return future.result(timeout=hard_timeout)
 
329
  # Hard wall-clock cap: pystac_client / rioxarray COG reads don't expose
330
  # uniform per-request timeouts, so we bound the whole pipeline here.
331
  hard_timeout = timeout_s + 15.0
332
+ # Propagate the parent thread's emissions tracker into the worker so
333
+ # any inference._post calls made inside _fetch_and_build are recorded.
334
+ from app import emissions as _emissions
335
+ _parent_tracker = _emissions.current()
336
+ with concurrent.futures.ThreadPoolExecutor(
337
+ max_workers=1,
338
+ initializer=lambda t=_parent_tracker: _emissions.install(t),
339
+ ) as pool:
340
  future = pool.submit(_fetch_and_build, lat, lon, timeout_s)
341
  try:
342
  return future.result(timeout=hard_timeout)
app/emissions.py ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Per-query emissions tracker for inference calls.
2
+
3
+ Records every LLM and ML-inference call made during a single query and
4
+ summarizes:
5
+ - wallclock duration per call
6
+ - prompt + completion tokens (LLM)
7
+ - estimated energy in watt-hours, using a sustained-power figure for
8
+ the active hardware
9
+
10
+ Estimates are deliberately rule-of-thumb: hardware × time. The numbers
11
+ are conservative public-record figures (data sheet TDP scaled to a
12
+ sustained-inference fraction). They are not benchmark output. The intent
13
+ is a defensible, auditable footprint the UI can surface alongside the
14
+ existing `energy` block.
15
+
16
+ Thread propagation
17
+ ------------------
18
+ The tracker is held in a thread-local. The dispatch layer
19
+ (web/main.py) installs one per request; `app/fsm.py:iter_steps`
20
+ captures and re-installs it on the FSM runner thread (mirroring the
21
+ existing `_captured_token_cb` pattern). Worker threads spawned inside
22
+ specialists (prithvi_live, eo_chip_cache) inherit nothing — those calls
23
+ are silently dropped, which is acceptable: those specialists do <1 s of
24
+ inference each and are off the hot path for the energy story.
25
+ """
26
+ from __future__ import annotations
27
+
28
+ import threading
29
+ from typing import Any
30
+
31
+ # (label, sustained_power_w, source)
32
+ HARDWARE: dict[str, tuple[str, float, str]] = {
33
+ "amd_mi300x": (
34
+ "AMD MI300X",
35
+ 600.0,
36
+ "AMD Instinct MI300X data sheet (750 W TDP); ~600 W sustained "
37
+ "during vLLM generation is a conservative midpoint of public "
38
+ "ROCm benchmarks.",
39
+ ),
40
+ "nvidia_t4": (
41
+ "NVIDIA T4",
42
+ 50.0,
43
+ "NVIDIA T4 data sheet (70 W max); ~50 W sustained during "
44
+ "transformer inference.",
45
+ ),
46
+ "apple_m": (
47
+ "Apple M-series",
48
+ 20.0,
49
+ "ml.energy / community measurements: ~20 W package power "
50
+ "during Granite 4.1 q4_K_M inference on Apple M3/M4.",
51
+ ),
52
+ "cpu_server": (
53
+ "x86 CPU",
54
+ 30.0,
55
+ "Typical sustained x86 server-core load (~30 W) for CPU-only "
56
+ "inference fallbacks.",
57
+ ),
58
+ }
59
+
60
+ # Frontier-cloud per-query reference, kept in sync with app/energy.py so
61
+ # the comparison stays consistent across both summaries.
62
+ CLOUD_PER_QUERY_WH = 0.30
63
+ CLOUD_SOURCE = (
64
+ 'Epoch AI (2025), "How much energy does ChatGPT use?", '
65
+ "estimating ~0.3 Wh per typical GPT-4o query."
66
+ )
67
+
68
+
69
+ def _wh(power_w: float, duration_s: float) -> float:
70
+ return power_w * max(duration_s, 0.0) / 3600.0
71
+
72
+
73
+ class Tracker:
74
+ """Append-only call ledger for one query. Thread-safe."""
75
+
76
+ def __init__(self) -> None:
77
+ self.calls: list[dict[str, Any]] = []
78
+ self._lock = threading.Lock()
79
+
80
+ def record_llm(self, *, model: str, backend: str, hardware: str,
81
+ prompt_tokens: int | None,
82
+ completion_tokens: int | None,
83
+ duration_s: float,
84
+ stream: bool = False) -> None:
85
+ hw_label, power_w, _src = HARDWARE.get(hardware,
86
+ HARDWARE["cpu_server"])
87
+ wh = _wh(power_w, duration_s)
88
+ total = None
89
+ if prompt_tokens is not None or completion_tokens is not None:
90
+ total = (prompt_tokens or 0) + (completion_tokens or 0)
91
+ with self._lock:
92
+ self.calls.append({
93
+ "kind": "llm",
94
+ "model": model,
95
+ "backend": backend,
96
+ "hardware": hardware,
97
+ "hardware_label": hw_label,
98
+ "power_w": power_w,
99
+ "duration_s": round(duration_s, 3),
100
+ "prompt_tokens": prompt_tokens,
101
+ "completion_tokens": completion_tokens,
102
+ "total_tokens": total,
103
+ "stream": stream,
104
+ "wh": round(wh, 5),
105
+ "joules": round(wh * 3600, 2),
106
+ })
107
+
108
+ def record_ml(self, *, endpoint: str, backend: str, hardware: str,
109
+ duration_s: float) -> None:
110
+ hw_label, power_w, _src = HARDWARE.get(hardware,
111
+ HARDWARE["cpu_server"])
112
+ wh = _wh(power_w, duration_s)
113
+ with self._lock:
114
+ self.calls.append({
115
+ "kind": "ml",
116
+ "endpoint": endpoint,
117
+ "backend": backend,
118
+ "hardware": hardware,
119
+ "hardware_label": hw_label,
120
+ "power_w": power_w,
121
+ "duration_s": round(duration_s, 3),
122
+ "wh": round(wh, 5),
123
+ "joules": round(wh * 3600, 2),
124
+ })
125
+
126
+ def summarize(self) -> dict[str, Any]:
127
+ with self._lock:
128
+ calls = list(self.calls)
129
+ total_wh = sum(c["wh"] for c in calls)
130
+ total_dur = sum(c["duration_s"] for c in calls)
131
+ prompt = sum((c.get("prompt_tokens") or 0)
132
+ for c in calls if c["kind"] == "llm")
133
+ completion = sum((c.get("completion_tokens") or 0)
134
+ for c in calls if c["kind"] == "llm")
135
+
136
+ by_kind: dict[str, dict[str, Any]] = {}
137
+ for c in calls:
138
+ slot = by_kind.setdefault(c["kind"], {"wh": 0.0, "n": 0,
139
+ "duration_s": 0.0})
140
+ slot["wh"] += c["wh"]
141
+ slot["n"] += 1
142
+ slot["duration_s"] += c["duration_s"]
143
+ for slot in by_kind.values():
144
+ slot["wh"] = round(slot["wh"], 5)
145
+ slot["mwh"] = round(slot["wh"] * 1000, 2)
146
+ slot["duration_s"] = round(slot["duration_s"], 3)
147
+
148
+ by_hw: dict[str, dict[str, Any]] = {}
149
+ for c in calls:
150
+ slot = by_hw.setdefault(c["hardware"], {
151
+ "label": c["hardware_label"],
152
+ "power_w": c["power_w"],
153
+ "wh": 0.0, "n": 0, "duration_s": 0.0,
154
+ })
155
+ slot["wh"] += c["wh"]
156
+ slot["n"] += 1
157
+ slot["duration_s"] += c["duration_s"]
158
+ for slot in by_hw.values():
159
+ slot["wh"] = round(slot["wh"], 5)
160
+ slot["mwh"] = round(slot["wh"] * 1000, 2)
161
+ slot["duration_s"] = round(slot["duration_s"], 3)
162
+
163
+ ratio = (round(CLOUD_PER_QUERY_WH / total_wh, 1)
164
+ if total_wh > 0 else None)
165
+ return {
166
+ "n_calls": len(calls),
167
+ "total_wh": round(total_wh, 5),
168
+ "total_mwh": round(total_wh * 1000, 2),
169
+ "total_joules": round(total_wh * 3600, 1),
170
+ "total_duration_s": round(total_dur, 3),
171
+ "tokens": {
172
+ "prompt": prompt or None,
173
+ "completion": completion or None,
174
+ "total": (prompt + completion) or None,
175
+ },
176
+ "by_kind": by_kind,
177
+ "by_hardware": by_hw,
178
+ "calls": calls,
179
+ "comparison": {
180
+ "cloud_per_query_wh": CLOUD_PER_QUERY_WH,
181
+ "cloud_per_query_mwh": round(CLOUD_PER_QUERY_WH * 1000, 1),
182
+ "ratio_cloud_over_query": ratio,
183
+ "cloud_source": CLOUD_SOURCE,
184
+ },
185
+ "method": (
186
+ "Sum over recorded inference calls of "
187
+ "(sustained_power_w × duration_s ÷ 3600). "
188
+ "Power figures are conservative public-record values "
189
+ "per app/emissions.HARDWARE; tokens are reported by "
190
+ "the backend (LiteLLM usage) when available, else "
191
+ "estimated from response text length (~4 chars/token)."
192
+ ),
193
+ }
194
+
195
+
196
+ # Thread-local install. Calls made on threads without an installed
197
+ # tracker hit a no-op stub — always safe to call active().record_*().
198
+ _tl = threading.local()
199
+
200
+
201
+ class _NullTracker:
202
+ def record_llm(self, **_kw: Any) -> None:
203
+ return None
204
+
205
+ def record_ml(self, **_kw: Any) -> None:
206
+ return None
207
+
208
+
209
+ _NULL = _NullTracker()
210
+
211
+
212
+ def install(tracker: Tracker | None) -> None:
213
+ _tl.tracker = tracker
214
+
215
+
216
+ def current() -> Tracker | None:
217
+ return getattr(_tl, "tracker", None)
218
+
219
+
220
+ def active() -> Tracker | _NullTracker:
221
+ """Return the installed tracker for this thread, or a no-op stub.
222
+ Always safe to call in instrumentation hot paths."""
223
+ return getattr(_tl, "tracker", None) or _NULL
224
+
225
+
226
+ def estimate_completion_tokens(text: str) -> int:
227
+ """Rough char/4 estimator used when the backend doesn't report usage
228
+ (e.g. streaming through Ollama, where LiteLLM's stream wrapper does
229
+ not always surface a final usage block)."""
230
+ return max(1, len(text) // 4)
app/flood_layers/prithvi_live.py CHANGED
@@ -506,7 +506,12 @@ def fetch(lat: float, lon: float, timeout_s: float = 60.0) -> dict[str, Any]:
506
  "skipped": f"deps unavailable on this deployment: "
507
  f"{_DEPS_MISSING}"}
508
  hard_timeout = timeout_s + 15.0
509
- with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
 
 
 
 
 
510
  future = pool.submit(_fetch_inner, lat, lon, timeout_s)
511
  try:
512
  return future.result(timeout=hard_timeout)
 
506
  "skipped": f"deps unavailable on this deployment: "
507
  f"{_DEPS_MISSING}"}
508
  hard_timeout = timeout_s + 15.0
509
+ from app import emissions as _emissions
510
+ _parent_tracker = _emissions.current()
511
+ with concurrent.futures.ThreadPoolExecutor(
512
+ max_workers=1,
513
+ initializer=lambda t=_parent_tracker: _emissions.install(t),
514
+ ) as pool:
515
  future = pool.submit(_fetch_inner, lat, lon, timeout_s)
516
  try:
517
  return future.result(timeout=hard_timeout)
app/fsm.py CHANGED
@@ -16,6 +16,7 @@ import geopandas as gpd
16
  from burr.core import ApplicationBuilder, State, action
17
  from shapely.geometry import Point
18
 
 
19
  from app.context import floodnet, microtopo, noaa_tides, nws_alerts, nws_obs, nyc311
20
  from app.energy import estimate as energy_estimate
21
  from app.flood_layers import dep_stormwater, ida_hwm, prithvi_water, sandy_inundation
@@ -1171,6 +1172,16 @@ def _summarize_energy(trace: list) -> dict | None:
1171
  return energy_estimate(rec_step.get("elapsed_s", 0) or 0, total_s)
1172
 
1173
 
 
 
 
 
 
 
 
 
 
 
1174
  def run(query: str) -> dict[str, Any]:
1175
  app = build_app(query)
1176
  final_action, _, final_state = app.run(halt_after=["reconcile"])
@@ -1205,6 +1216,7 @@ def run(query: str) -> dict[str, Any]:
1205
  "audit": final_state.get("audit"),
1206
  "mellea": final_state.get("mellea"),
1207
  "energy": _summarize_energy(trace),
 
1208
  "trace": trace,
1209
  }
1210
 
@@ -1248,12 +1260,14 @@ def iter_steps(query: str):
1248
  _captured_planned = _current_planned_specialists()
1249
  _captured_token_cb = _current_token_callback()
1250
  _captured_mellea_cb = _current_mellea_attempt_callback()
 
1251
 
1252
  def _run_iterate():
1253
  set_strict_mode(_captured_strict)
1254
  set_planned_specialists(_captured_planned)
1255
  set_token_callback(_captured_token_cb)
1256
  set_mellea_attempt_callback(_captured_mellea_cb)
 
1257
  try:
1258
  for _action_obj, _result, state in app.iterate(halt_after=["reconcile"]):
1259
  final_state_holder["state"] = state
@@ -1271,6 +1285,7 @@ def iter_steps(query: str):
1271
  set_planned_specialists(None)
1272
  set_token_callback(None)
1273
  set_mellea_attempt_callback(None)
 
1274
  q.put(None) # sentinel
1275
 
1276
  runner = _threading.Thread(target=_run_iterate, name="riprap-fsm",
@@ -1331,4 +1346,5 @@ def iter_steps(query: str):
1331
  "audit": state.get("audit"),
1332
  "mellea": state.get("mellea"),
1333
  "energy": _summarize_energy(trace),
 
1334
  }
 
16
  from burr.core import ApplicationBuilder, State, action
17
  from shapely.geometry import Point
18
 
19
+ from app import emissions
20
  from app.context import floodnet, microtopo, noaa_tides, nws_alerts, nws_obs, nyc311
21
  from app.energy import estimate as energy_estimate
22
  from app.flood_layers import dep_stormwater, ida_hwm, prithvi_water, sandy_inundation
 
1172
  return energy_estimate(rec_step.get("elapsed_s", 0) or 0, total_s)
1173
 
1174
 
1175
+ def _summarize_emissions() -> dict | None:
1176
+ """Snapshot the active per-call emissions tracker, if installed.
1177
+
1178
+ Returns None when no tracker is bound to this thread (e.g. unit
1179
+ tests that call `fsm.run` directly without going through the
1180
+ web/intent layer that installs one)."""
1181
+ t = emissions.current()
1182
+ return t.summarize() if t is not None else None
1183
+
1184
+
1185
  def run(query: str) -> dict[str, Any]:
1186
  app = build_app(query)
1187
  final_action, _, final_state = app.run(halt_after=["reconcile"])
 
1216
  "audit": final_state.get("audit"),
1217
  "mellea": final_state.get("mellea"),
1218
  "energy": _summarize_energy(trace),
1219
+ "emissions": _summarize_emissions(),
1220
  "trace": trace,
1221
  }
1222
 
 
1260
  _captured_planned = _current_planned_specialists()
1261
  _captured_token_cb = _current_token_callback()
1262
  _captured_mellea_cb = _current_mellea_attempt_callback()
1263
+ _captured_tracker = emissions.current()
1264
 
1265
  def _run_iterate():
1266
  set_strict_mode(_captured_strict)
1267
  set_planned_specialists(_captured_planned)
1268
  set_token_callback(_captured_token_cb)
1269
  set_mellea_attempt_callback(_captured_mellea_cb)
1270
+ emissions.install(_captured_tracker)
1271
  try:
1272
  for _action_obj, _result, state in app.iterate(halt_after=["reconcile"]):
1273
  final_state_holder["state"] = state
 
1285
  set_planned_specialists(None)
1286
  set_token_callback(None)
1287
  set_mellea_attempt_callback(None)
1288
+ emissions.install(None)
1289
  q.put(None) # sentinel
1290
 
1291
  runner = _threading.Thread(target=_run_iterate, name="riprap-fsm",
 
1346
  "audit": state.get("audit"),
1347
  "mellea": state.get("mellea"),
1348
  "energy": _summarize_energy(trace),
1349
+ "emissions": _summarize_emissions(),
1350
  }
app/inference.py CHANGED
@@ -32,11 +32,14 @@ from __future__ import annotations
32
  import base64
33
  import logging
34
  import os
 
35
  from collections.abc import Iterable
36
  from typing import Any
37
 
38
  import httpx
39
 
 
 
40
  log = logging.getLogger("riprap.inference")
41
 
42
  _BACKEND = os.environ.get("RIPRAP_ML_BACKEND", "auto").lower()
@@ -81,6 +84,7 @@ def _post(path: str, payload: dict[str, Any], timeout: float | None = None) -> d
81
  if not remote_enabled():
82
  raise RemoteUnreachable("remote ML backend not configured "
83
  "(RIPRAP_ML_BASE_URL empty or BACKEND=local)")
 
84
  try:
85
  with _client(timeout) as c:
86
  r = c.post(path, json=payload)
@@ -90,6 +94,17 @@ def _post(path: str, payload: dict[str, Any], timeout: float | None = None) -> d
90
  if r.status_code >= 500:
91
  raise RemoteUnreachable(f"HTTP {r.status_code} from {path}: {r.text[:200]}")
92
  r.raise_for_status()
 
 
 
 
 
 
 
 
 
 
 
93
  return r.json()
94
 
95
 
 
32
  import base64
33
  import logging
34
  import os
35
+ import time
36
  from collections.abc import Iterable
37
  from typing import Any
38
 
39
  import httpx
40
 
41
+ from app import emissions
42
+
43
  log = logging.getLogger("riprap.inference")
44
 
45
  _BACKEND = os.environ.get("RIPRAP_ML_BACKEND", "auto").lower()
 
84
  if not remote_enabled():
85
  raise RemoteUnreachable("remote ML backend not configured "
86
  "(RIPRAP_ML_BASE_URL empty or BACKEND=local)")
87
+ t0 = time.monotonic()
88
  try:
89
  with _client(timeout) as c:
90
  r = c.post(path, json=payload)
 
94
  if r.status_code >= 500:
95
  raise RemoteUnreachable(f"HTTP {r.status_code} from {path}: {r.text[:200]}")
96
  r.raise_for_status()
97
+ duration_s = time.monotonic() - t0
98
+ # The remote ML service runs alongside vLLM on the AMD MI300X
99
+ # droplet; attribute the wallclock to that hardware. Local-fallback
100
+ # paths don't reach this function — they go straight to in-process
101
+ # model loads in the specialist module, which we don't track.
102
+ emissions.active().record_ml(
103
+ endpoint=path,
104
+ backend="riprap-models",
105
+ hardware="amd_mi300x",
106
+ duration_s=duration_s,
107
+ )
108
  return r.json()
109
 
110
 
app/llm.py CHANGED
@@ -27,12 +27,15 @@ from __future__ import annotations
27
 
28
  import logging
29
  import os
 
30
  from collections.abc import Iterator
31
  from typing import Any
32
 
33
  import litellm
34
  from litellm import Router
35
 
 
 
36
  log = logging.getLogger(__name__)
37
 
38
  litellm.suppress_debug_info = True
@@ -211,7 +214,8 @@ def _to_ollama_shape(resp) -> dict:
211
  return {"message": {"role": "assistant", "content": content}}
212
 
213
 
214
- def _stream_to_ollama_shape(stream) -> Iterator[dict]:
 
215
  for chunk in stream:
216
  try:
217
  delta = chunk.choices[0].delta
@@ -223,7 +227,77 @@ def _stream_to_ollama_shape(stream) -> Iterator[dict]:
223
  # idempotent / no-op on partial matches.
224
  if content:
225
  content = _normalize_citations(content)
 
226
  yield {"message": {"role": "assistant", "content": content}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
 
228
 
229
  def _default_hardware_label() -> str:
@@ -288,9 +362,18 @@ def chat(model: str, messages: list[dict], options: dict | None = None,
288
  kwargs["response_format"] = {"type": "json_object"}
289
  # Ollama path (LiteLLM forwards this via extra_body for ollama_chat)
290
  kwargs.setdefault("extra_body", {})["format"] = "json"
 
291
  if stream:
292
  s = _router.completion(model=alias, messages=messages,
293
  stream=True, **kwargs)
294
- return _stream_to_ollama_shape(s)
 
 
 
 
 
 
295
  resp = _router.completion(model=alias, messages=messages, **kwargs)
 
 
296
  return _to_ollama_shape(resp)
 
27
 
28
  import logging
29
  import os
30
+ import time
31
  from collections.abc import Iterator
32
  from typing import Any
33
 
34
  import litellm
35
  from litellm import Router
36
 
37
+ from app import emissions
38
+
39
  log = logging.getLogger(__name__)
40
 
41
  litellm.suppress_debug_info = True
 
214
  return {"message": {"role": "assistant", "content": content}}
215
 
216
 
217
+ def _stream_to_ollama_shape(stream, *, on_done=None) -> Iterator[dict]:
218
+ accum: list[str] = []
219
  for chunk in stream:
220
  try:
221
  delta = chunk.choices[0].delta
 
227
  # idempotent / no-op on partial matches.
228
  if content:
229
  content = _normalize_citations(content)
230
+ accum.append(content)
231
  yield {"message": {"role": "assistant", "content": content}}
232
+ if on_done is not None:
233
+ on_done("".join(accum))
234
+
235
+
236
+ def _hardware_for(engine: str) -> str:
237
+ """Map the active LLM engine to an emissions.HARDWARE key.
238
+
239
+ Operator override via RIPRAP_HARDWARE_LABEL is honored where it
240
+ matches a known key (mi300x / t4 / apple / cpu); otherwise we
241
+ infer from engine selection and HF Space presence."""
242
+ override = (os.environ.get("RIPRAP_HARDWARE_LABEL") or "").lower()
243
+ if "mi300x" in override or "amd" in override:
244
+ return "amd_mi300x"
245
+ if "t4" in override or "nvidia" in override:
246
+ return "nvidia_t4"
247
+ if "apple" in override or "m3" in override or "m4" in override:
248
+ return "apple_m"
249
+ if engine == "vLLM" and _VLLM_BASE:
250
+ return "amd_mi300x"
251
+ if os.environ.get("SPACE_ID") or os.environ.get("HF_SPACE_ID"):
252
+ return "nvidia_t4"
253
+ return "apple_m"
254
+
255
+
256
+ def _extract_usage(resp) -> tuple[int | None, int | None]:
257
+ """Pull (prompt_tokens, completion_tokens) from a LiteLLM response.
258
+ Returns (None, None) when usage isn't surfaced (some Ollama paths)."""
259
+ try:
260
+ u = getattr(resp, "usage", None)
261
+ if u is None and isinstance(resp, dict):
262
+ u = resp.get("usage")
263
+ if u is None:
264
+ return (None, None)
265
+ # LiteLLM's Usage is dict-like / pydantic — accept either shape.
266
+ get = (u.get if hasattr(u, "get") else lambda k, d=None: getattr(u, k, d))
267
+ return (get("prompt_tokens"), get("completion_tokens"))
268
+ except Exception: # noqa: BLE001 — instrumentation must never throw
269
+ return (None, None)
270
+
271
+
272
+ def _record_llm(*, alias: str, messages: list[dict], duration_s: float,
273
+ resp=None, completion_text: str | None = None,
274
+ stream: bool = False) -> None:
275
+ """Record one llm.chat call into the active emissions tracker.
276
+
277
+ For non-stream calls, we read prompt/completion tokens off the
278
+ LiteLLM response. For stream calls, the response is a generator —
279
+ we estimate tokens from concatenated assistant text and from a
280
+ char/4 estimate of the input messages. Estimates are flagged on
281
+ the call record so the UI can disclose them."""
282
+ info = backend_info()
283
+ hardware = _hardware_for(info["engine"])
284
+ backend = info["engine"]
285
+ prompt_tokens, completion_tokens = _extract_usage(resp) if resp is not None else (None, None)
286
+ if prompt_tokens is None:
287
+ prompt_chars = sum(len(m.get("content") or "") for m in messages)
288
+ prompt_tokens = emissions.estimate_completion_tokens(
289
+ " " * prompt_chars) if prompt_chars else None
290
+ if completion_tokens is None and completion_text is not None:
291
+ completion_tokens = emissions.estimate_completion_tokens(completion_text)
292
+ emissions.active().record_llm(
293
+ model=alias,
294
+ backend=backend,
295
+ hardware=hardware,
296
+ prompt_tokens=prompt_tokens,
297
+ completion_tokens=completion_tokens,
298
+ duration_s=duration_s,
299
+ stream=stream,
300
+ )
301
 
302
 
303
  def _default_hardware_label() -> str:
 
362
  kwargs["response_format"] = {"type": "json_object"}
363
  # Ollama path (LiteLLM forwards this via extra_body for ollama_chat)
364
  kwargs.setdefault("extra_body", {})["format"] = "json"
365
+ t0 = time.monotonic()
366
  if stream:
367
  s = _router.completion(model=alias, messages=messages,
368
  stream=True, **kwargs)
369
+
370
+ def _on_stream_done(full_text: str) -> None:
371
+ _record_llm(alias=alias, messages=messages,
372
+ duration_s=time.monotonic() - t0,
373
+ completion_text=full_text, stream=True)
374
+
375
+ return _stream_to_ollama_shape(s, on_done=_on_stream_done)
376
  resp = _router.completion(model=alias, messages=messages, **kwargs)
377
+ _record_llm(alias=alias, messages=messages,
378
+ duration_s=time.monotonic() - t0, resp=resp, stream=False)
379
  return _to_ollama_shape(resp)
web/main.py CHANGED
@@ -15,6 +15,7 @@ from fastapi import FastAPI, Request # noqa: E402
15
  from fastapi.responses import FileResponse, StreamingResponse # noqa: E402
16
  from fastapi.staticfiles import StaticFiles # noqa: E402
17
 
 
18
  from app.context import floodnet # noqa: E402
19
  from app.flood_layers import dep_stormwater, sandy_inundation # noqa: E402
20
  from app.fsm import iter_steps # noqa: E402
@@ -606,26 +607,33 @@ def api_agent(q: str):
606
  from app.intents import neighborhood as i_nbhd
607
  from app.intents import single_address as i_addr
608
  from app.planner import plan as run_planner
609
- p = run_planner(q)
610
- if p.intent == "not_implemented":
611
- return JSONResponse({
612
- "paragraph": p.rationale,
613
- "mellea": {"rerolls": 0, "n_attempts": 0,
614
- "requirements_passed": [], "requirements_failed": [],
615
- "requirements_total": 0},
616
- "status": "not_implemented",
617
- })
618
- if p.intent == "compare":
619
- out = _run_compare(p, q, None, i_addr)
620
- elif p.intent == "development_check":
621
- out = i_dev.run(p, q, strict=True)
622
- elif p.intent == "neighborhood":
623
- out = i_nbhd.run(p, q, strict=True)
624
- elif p.intent == "live_now":
625
- out = i_live.run(p, q)
626
- else:
627
- out = i_addr.run(p, q, strict=True)
628
- return JSONResponse(out)
 
 
 
 
 
 
 
629
 
630
 
631
  @app.get("/api/agent/stream")
@@ -637,7 +645,10 @@ async def api_agent_stream(q: str):
637
  import queue
638
  out_q: queue.Queue[dict] = queue.Queue()
639
 
 
 
640
  def runner():
 
641
  try:
642
  from app.intents import development_check as i_dev
643
  from app.intents import live_now as i_live
@@ -672,10 +683,12 @@ async def api_agent_stream(q: str):
672
  final = i_live.run(p, q, progress_q=out_q)
673
  else:
674
  final = i_addr.run(p, q, progress_q=out_q, strict=True)
 
675
  out_q.put({"kind": "final", **final})
676
  except Exception as e:
677
  out_q.put({"kind": "error", "err": str(e)})
678
  finally:
 
679
  out_q.put({"kind": "_done"})
680
 
681
  async def event_stream():
 
15
  from fastapi.responses import FileResponse, StreamingResponse # noqa: E402
16
  from fastapi.staticfiles import StaticFiles # noqa: E402
17
 
18
+ from app import emissions # noqa: E402
19
  from app.context import floodnet # noqa: E402
20
  from app.flood_layers import dep_stormwater, sandy_inundation # noqa: E402
21
  from app.fsm import iter_steps # noqa: E402
 
607
  from app.intents import neighborhood as i_nbhd
608
  from app.intents import single_address as i_addr
609
  from app.planner import plan as run_planner
610
+ tracker = emissions.Tracker()
611
+ emissions.install(tracker)
612
+ try:
613
+ p = run_planner(q)
614
+ if p.intent == "not_implemented":
615
+ return JSONResponse({
616
+ "paragraph": p.rationale,
617
+ "mellea": {"rerolls": 0, "n_attempts": 0,
618
+ "requirements_passed": [], "requirements_failed": [],
619
+ "requirements_total": 0},
620
+ "status": "not_implemented",
621
+ "emissions": tracker.summarize(),
622
+ })
623
+ if p.intent == "compare":
624
+ out = _run_compare(p, q, None, i_addr)
625
+ elif p.intent == "development_check":
626
+ out = i_dev.run(p, q, strict=True)
627
+ elif p.intent == "neighborhood":
628
+ out = i_nbhd.run(p, q, strict=True)
629
+ elif p.intent == "live_now":
630
+ out = i_live.run(p, q)
631
+ else:
632
+ out = i_addr.run(p, q, strict=True)
633
+ out["emissions"] = tracker.summarize()
634
+ return JSONResponse(out)
635
+ finally:
636
+ emissions.install(None)
637
 
638
 
639
  @app.get("/api/agent/stream")
 
645
  import queue
646
  out_q: queue.Queue[dict] = queue.Queue()
647
 
648
+ tracker = emissions.Tracker()
649
+
650
  def runner():
651
+ emissions.install(tracker)
652
  try:
653
  from app.intents import development_check as i_dev
654
  from app.intents import live_now as i_live
 
683
  final = i_live.run(p, q, progress_q=out_q)
684
  else:
685
  final = i_addr.run(p, q, progress_q=out_q, strict=True)
686
+ final["emissions"] = tracker.summarize()
687
  out_q.put({"kind": "final", **final})
688
  except Exception as e:
689
  out_q.put({"kind": "error", "err": str(e)})
690
  finally:
691
+ emissions.install(None)
692
  out_q.put({"kind": "_done"})
693
 
694
  async def event_stream():
web/sveltekit/build/200.html CHANGED
@@ -2,22 +2,21 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
- <link rel="icon" type="image/png" href="/favicon.png" />
7
  <meta name="viewport" content="width=device-width, initial-scale=1" />
8
  <meta name="description" content="Riprap — citation-grounded NYC flood-exposure briefings." />
9
  <title>Riprap — flood-exposure briefing</title>
10
- <link href="/_app/immutable/entry/start.BIDfHH4-.js" rel="modulepreload">
11
- <link href="/_app/immutable/chunks/BOtZ6QcV.js" rel="modulepreload">
12
  <link href="/_app/immutable/chunks/BTUA7_xE.js" rel="modulepreload">
13
- <link href="/_app/immutable/entry/app.CoGsDDek.js" rel="modulepreload">
14
  <link href="/_app/immutable/chunks/CXQd8Y6F.js" rel="modulepreload">
15
  <link href="/_app/immutable/chunks/CWw6qgC_.js" rel="modulepreload">
16
  <link href="/_app/immutable/chunks/Bd-v_9Ud.js" rel="modulepreload">
17
  <link href="/_app/immutable/chunks/CW0zSL4D.js" rel="modulepreload">
18
- <link href="/_app/immutable/nodes/0.h-vIKZsr.js" rel="modulepreload">
19
  <link href="/_app/immutable/chunks/DxQlA7U2.js" rel="modulepreload">
20
- <link href="/_app/immutable/chunks/nUW4eUox.js" rel="modulepreload">
21
  <link href="/_app/immutable/chunks/DCD6_LXk.js" rel="modulepreload">
22
  <link href="/_app/immutable/chunks/B0XoTt7U.js" rel="modulepreload">
23
  <link href="/_app/immutable/chunks/DixtWtwq.js" rel="modulepreload">
@@ -29,15 +28,15 @@
29
  <div style="display: contents">
30
  <script>
31
  {
32
- __sveltekit_chon6g = {
33
  base: ""
34
  };
35
 
36
  const element = document.currentScript.parentElement;
37
 
38
  Promise.all([
39
- import("/_app/immutable/entry/start.BIDfHH4-.js"),
40
- import("/_app/immutable/entry/app.CoGsDDek.js")
41
  ]).then(([kit, app]) => {
42
  kit.start(app, element);
43
  });
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' fill='%23FAFAF7'/%3E%3Crect x='2' y='2' width='5' height='12' fill='%23D17C00'/%3E%3C/svg%3E" />
 
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <meta name="description" content="Riprap — citation-grounded NYC flood-exposure briefings." />
8
  <title>Riprap — flood-exposure briefing</title>
9
+ <link href="/_app/immutable/entry/start.YmL7ZSOR.js" rel="modulepreload">
10
+ <link href="/_app/immutable/chunks/CJeJVIjP.js" rel="modulepreload">
11
  <link href="/_app/immutable/chunks/BTUA7_xE.js" rel="modulepreload">
12
+ <link href="/_app/immutable/entry/app.BhktVbRh.js" rel="modulepreload">
13
  <link href="/_app/immutable/chunks/CXQd8Y6F.js" rel="modulepreload">
14
  <link href="/_app/immutable/chunks/CWw6qgC_.js" rel="modulepreload">
15
  <link href="/_app/immutable/chunks/Bd-v_9Ud.js" rel="modulepreload">
16
  <link href="/_app/immutable/chunks/CW0zSL4D.js" rel="modulepreload">
17
+ <link href="/_app/immutable/nodes/0.Dv1TzIuH.js" rel="modulepreload">
18
  <link href="/_app/immutable/chunks/DxQlA7U2.js" rel="modulepreload">
19
+ <link href="/_app/immutable/chunks/B3Pg95Il.js" rel="modulepreload">
20
  <link href="/_app/immutable/chunks/DCD6_LXk.js" rel="modulepreload">
21
  <link href="/_app/immutable/chunks/B0XoTt7U.js" rel="modulepreload">
22
  <link href="/_app/immutable/chunks/DixtWtwq.js" rel="modulepreload">
 
28
  <div style="display: contents">
29
  <script>
30
  {
31
+ __sveltekit_1sh7tn8 = {
32
  base: ""
33
  };
34
 
35
  const element = document.currentScript.parentElement;
36
 
37
  Promise.all([
38
+ import("/_app/immutable/entry/start.YmL7ZSOR.js"),
39
+ import("/_app/immutable/entry/app.BhktVbRh.js")
40
  ]).then(([kit, app]) => {
41
  kit.start(app, element);
42
  });
web/sveltekit/build/_app/immutable/assets/stoneRegistry.DOPO2SDD.css ADDED
@@ -0,0 +1 @@
 
 
1
+ .citation-drawer.svelte-1p339fd a{color:inherit;border-bottom:1px solid var(--rule-soft);text-decoration:none}.citation-drawer.svelte-1p339fd a:hover{border-bottom-color:var(--accent);color:var(--accent)}.rip-map-container.svelte-wk2bu4{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.map-frame.svelte-wk2bu4{aspect-ratio:8 / 5.6;position:relative;transition:outline-color .2s ease;outline:0 solid transparent;outline-offset:0}.map-frame[data-linked].svelte-wk2bu4:not([data-linked=""]){outline:2px solid var(--accent-graphical)}.link-badge.svelte-wk2bu4{position:absolute;bottom:8px;right:8px;padding:3px 8px;background:var(--ink);color:var(--paper);font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:lowercase;z-index:5;pointer-events:none}.layers-panel.svelte-1g2dety{background:var(--paper);border:1px solid var(--rule-soft);padding:var(--s-3) var(--s-4) var(--s-4);display:flex;flex-direction:column;gap:var(--s-3);font-family:var(--font-sans)}.layers-head.svelte-1g2dety{padding-bottom:4px}.layers-group.svelte-1g2dety{border-top:1px solid var(--rule-soft);padding-top:var(--s-2);border-left:3px solid var(--stone-tint, var(--rule-soft));padding-left:var(--s-3)}.layers-group.region-cornerstone.svelte-1g2dety{--stone-tint: var(--stone-cornerstone)}.layers-group.region-keystone.svelte-1g2dety{--stone-tint: var(--stone-keystone)}.layers-group.region-touchstone.svelte-1g2dety{--stone-tint: var(--stone-touchstone)}.layers-group.region-lodestone.svelte-1g2dety{--stone-tint: var(--stone-lodestone)}.layers-group.region-capstone.svelte-1g2dety{--stone-tint: var(--stone-capstone)}.layers-group.svelte-1g2dety summary:where(.svelte-1g2dety){cursor:pointer;list-style:none;display:flex;align-items:baseline;gap:var(--s-2);padding:4px 0}.layers-group.svelte-1g2dety summary:where(.svelte-1g2dety)::-webkit-details-marker{display:none}.layers-caret.svelte-1g2dety{font-size:10px;color:var(--ink-tertiary);transition:transform .2s ease}.layers-group.svelte-1g2dety:not([open]) .layers-caret:where(.svelte-1g2dety){transform:rotate(-90deg)}.layers-stone-name.svelte-1g2dety{font-family:var(--font-serif);font-style:italic;font-size:16px;color:var(--ink)}.layers-stone-tag.svelte-1g2dety{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.layers-count.svelte-1g2dety{margin-left:auto;font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:lowercase}.layers-list.svelte-1g2dety{list-style:none;margin:4px 0 var(--s-2);padding:0;display:flex;flex-direction:column}.layers-row.svelte-1g2dety{display:grid;grid-template-columns:16px 1fr auto;gap:var(--s-2);align-items:center;padding:4px 0;font-family:var(--font-mono);font-size:11px;color:var(--ink);border-bottom:1px dotted var(--rule-soft)}.layers-row.svelte-1g2dety:last-child{border-bottom:0}.layers-row.dim.svelte-1g2dety{opacity:.7}.layers-glyph.svelte-1g2dety{display:inline-flex;align-items:center}.layers-text.svelte-1g2dety{display:flex;flex-direction:column;gap:2px}.layers-label.svelte-1g2dety{color:var(--ink);font-family:var(--font-sans);font-size:12px}.layers-meta.svelte-1g2dety{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);display:inline-flex;align-items:center;gap:4px}.layers-state.svelte-1g2dety{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--ink);text-transform:uppercase}.layers-state-dim.svelte-1g2dety{color:var(--ink-tertiary);text-transform:lowercase;font-style:italic}.layers-row-empty.svelte-1g2dety .layers-empty-text:where(.svelte-1g2dety){grid-column:1 / -1;color:var(--ink-tertiary);font-style:italic;font-family:var(--font-mono);font-size:11px}.layers-masters.svelte-1g2dety{border-top:1px solid var(--rule-soft);padding-top:var(--s-2)}.layers-master-row.svelte-1g2dety{margin-top:4px;display:flex;flex-wrap:wrap;gap:6px}.layers-master.svelte-1g2dety{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;background:var(--paper);border:1px solid var(--rule-soft);cursor:pointer;font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--ink)}.layers-master.is-on.svelte-1g2dety{background:var(--paper-deep);border-color:var(--ink)}.layers-master-state.svelte-1g2dety{margin-left:4px;color:var(--ink-tertiary);font-size:9px}.layers-master.is-on.svelte-1g2dety .layers-master-state:where(.svelte-1g2dety){color:var(--ink)}.rh.svelte-1vuwkv4{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s-2);padding:var(--s-2) var(--s-4);background:var(--paper-deep);border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.rh-item.svelte-1vuwkv4 strong:where(.svelte-1vuwkv4){font-weight:600;color:var(--ink);margin-right:2px}.rh-sep.svelte-1vuwkv4{opacity:.5}.rh-silent.svelte-1vuwkv4{color:var(--ink-tertiary)}.rh-warn.svelte-1vuwkv4{color:#b7791f}.rh-err.svelte-1vuwkv4{color:#b91c1c}.rh-notinvoked.svelte-1vuwkv4{color:var(--ink-tertiary);font-style:italic}.rh-total.svelte-1vuwkv4 strong:where(.svelte-1vuwkv4){color:var(--ink-tertiary)}.rh-em.svelte-1vuwkv4{cursor:help;color:var(--ink-secondary)}.rh-em.svelte-1vuwkv4 strong:where(.svelte-1vuwkv4){color:var(--ink)}.rh-em-tok.svelte-1vuwkv4{margin-left:4px;opacity:.75}.rh-em-ratio.svelte-1vuwkv4{margin-left:6px;padding:1px 5px;border:1px solid var(--rule-soft);border-radius:2px;font-size:10px;letter-spacing:.03em;color:var(--ink-tertiary)}.body-headline.svelte-lygj3j{padding:var(--s-3) var(--s-4) var(--s-2);display:flex;flex-direction:column;gap:var(--s-1)}.fc.is-compact .body-headline.svelte-lygj3j{padding:var(--s-2) var(--s-3)}.headline.svelte-lygj3j{font-family:var(--font-serif);font-style:italic;font-size:28px;font-weight:500;line-height:1.1;letter-spacing:-.01em}.fc.is-compact .headline.svelte-lygj3j{font-size:22px}.subhead.svelte-lygj3j{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.body-prose.svelte-lygj3j{margin:var(--s-2) 0 0;font-size:13px;line-height:1.45;color:var(--ink-secondary)}.body-tabular.svelte-1nlkuao{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-tabular.svelte-1nlkuao{padding:var(--s-2) var(--s-3)}.t.svelte-1nlkuao{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:12px}.t.svelte-1nlkuao th:where(.svelte-1nlkuao){text-align:left;font-weight:500;color:var(--ink-tertiary);padding:4px 8px 4px 0;border-bottom:1px solid var(--rule-soft);text-transform:lowercase;letter-spacing:.04em}.t.svelte-1nlkuao td:where(.svelte-1nlkuao){padding:4px 8px 4px 0;border-bottom:1px solid var(--rule-soft);color:var(--ink)}.t.svelte-1nlkuao tr:where(.svelte-1nlkuao):last-child td:where(.svelte-1nlkuao){border-bottom:0}.fc.is-compact .t.svelte-1nlkuao th:where(.svelte-1nlkuao),.fc.is-compact .t.svelte-1nlkuao td:where(.svelte-1nlkuao){padding:2px 6px 2px 0;font-size:11px}.body-sub.svelte-1nlkuao{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-scalars.svelte-stf9c8{padding:var(--s-3) var(--s-4) var(--s-3)}.fc.is-compact .body-scalars.svelte-stf9c8{padding:var(--s-2) var(--s-3)}.row.svelte-stf9c8{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,1fr));gap:var(--s-3)}.cell.svelte-stf9c8{display:flex;flex-direction:column;gap:2px}.value.svelte-stf9c8{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.label.svelte-stf9c8{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.06em;text-transform:lowercase}.body-sub.svelte-stf9c8{margin-top:var(--s-3);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-spark.svelte-jrppts{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-1)}.fc.is-compact .body-spark.svelte-jrppts{padding:var(--s-2) var(--s-3)}.headline.svelte-jrppts{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.subhead.svelte-jrppts{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em;margin-bottom:var(--s-1)}svg.svelte-jrppts{display:block}.body-sub.svelte-jrppts{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-timeseries.svelte-48vbub{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-timeseries.svelte-48vbub{padding:var(--s-2) var(--s-3)}.ts-header.svelte-48vbub{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--s-2)}.headline.svelte-48vbub{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.subhead.svelte-48vbub{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}svg.svelte-48vbub{display:block}.body-sub.svelte-48vbub{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5;display:flex;flex-direction:column;gap:2px}.spatial-note.svelte-48vbub{color:var(--accent);font-style:italic}.ft-footer.svelte-1y25lfh{margin:var(--s-2) var(--s-4) var(--s-3);padding-top:var(--s-2);border-top:1px dashed var(--rule-soft);display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:baseline;font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.fc.is-compact .ft-footer.svelte-1y25lfh{margin:var(--s-2) var(--s-3)}.ft-stat.svelte-1y25lfh{display:inline-flex;align-items:baseline;gap:4px;color:var(--ink)}.ft-stat-k.svelte-1y25lfh{font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:uppercase}.ft-skill.svelte-1y25lfh{color:var(--tier-modeled);font-weight:500}.ft-badge.svelte-1y25lfh{border:1px solid var(--ink);color:var(--ink);padding:1px 6px;font-size:10px;letter-spacing:.06em;text-transform:uppercase;background:var(--paper)}.ft-link.svelte-1y25lfh{margin-left:auto;color:var(--accent);text-decoration:none}.ft-link.svelte-1y25lfh:hover{text-decoration:underline}.body-forecast.svelte-gqkhpe{padding:var(--s-3) var(--s-4) var(--s-3)}.fc.is-compact .body-forecast.svelte-gqkhpe{padding:var(--s-2) var(--s-3)}svg.svelte-gqkhpe{display:block}.body-sub.svelte-gqkhpe{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}svg.svelte-1lx1psy{display:block}.thumb-placeholder.svelte-1lx1psy{height:120px;background:var(--paper-deep);display:flex;align-items:center;justify-content:center;color:var(--ink-tertiary);font-family:var(--font-mono);font-size:11px;border:1px dashed var(--rule-soft)}.body-raster.svelte-1m43x1m{padding:var(--s-2) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-raster.svelte-1m43x1m{padding:var(--s-2) var(--s-3)}.frame.svelte-1m43x1m{position:relative;border:1px solid var(--rule-soft)}.illustrative.svelte-1m43x1m{position:absolute;top:6px;right:6px;background:#1a1a1ab3;color:var(--paper);font-family:var(--font-mono);font-size:9px;padding:2px 6px;letter-spacing:.05em;text-transform:lowercase}.raster-headline.svelte-1m43x1m{font-family:var(--font-mono);font-size:12px;color:var(--ink)}.raster-headline.svelte-1m43x1m span:where(.svelte-1m43x1m):first-child{font-family:var(--font-serif);font-style:italic;font-size:18px;font-weight:500}.body-sub.svelte-1m43x1m{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-lulc.svelte-1td276x{padding:var(--s-2) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-lulc.svelte-1td276x{padding:var(--s-2) var(--s-3)}.frame.svelte-1td276x{position:relative;border:1px solid var(--rule-soft)}.illustrative.svelte-1td276x{position:absolute;top:6px;right:6px;background:#1a1a1ab3;color:var(--paper);font-family:var(--font-mono);font-size:9px;padding:2px 6px;letter-spacing:.05em;text-transform:lowercase}.bar.svelte-1td276x{display:flex;height:10px;border:1px solid var(--rule-soft);overflow:hidden}.bar-seg.svelte-1td276x{flex-shrink:1;flex-basis:0}.legend.svelte-1td276x{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:4px var(--s-3);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.legend.svelte-1td276x li:where(.svelte-1td276x){display:inline-flex;align-items:center;gap:6px}.swatch.svelte-1td276x{display:inline-block;width:10px;height:10px;border:1px solid var(--rule-soft);flex:none}.legend-k.svelte-1td276x{color:var(--ink);text-transform:lowercase;letter-spacing:.04em}.legend-pct.svelte-1td276x{color:var(--ink-tertiary)}.body-sub.svelte-1td276x{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-register.svelte-1iup6im{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-register.svelte-1iup6im{padding:var(--s-2) var(--s-3)}.reg-list.svelte-1iup6im{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.reg-row.svelte-1iup6im{display:grid;grid-template-columns:70px 1fr auto;gap:var(--s-2);align-items:baseline;padding:5px 0;border-bottom:1px solid var(--rule-soft);font-family:var(--font-mono);font-size:12px;line-height:1.4}.reg-row.svelte-1iup6im:last-child{border-bottom:0}.fc.is-compact .reg-row.svelte-1iup6im{padding:3px 0;font-size:11px}.reg-tag.svelte-1iup6im{display:inline-flex;gap:4px;align-items:center;color:var(--ink-tertiary);text-transform:uppercase;letter-spacing:.05em;font-weight:500}.reg-label.svelte-1iup6im{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reg-source.svelte-1iup6im{color:var(--ink-tertiary);font-size:10px;letter-spacing:.05em}.reg-silent.svelte-1iup6im{grid-column:2 / span 2;color:var(--ink-tertiary);font-style:italic}.reg-row.silent.svelte-1iup6im{opacity:.65}.body-sub.svelte-1iup6im{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-comparison.svelte-1swqabu{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-comparison.svelte-1swqabu{padding:var(--s-2) var(--s-3)}.cmp-grid.svelte-1swqabu{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--s-3);align-items:stretch}.cell.svelte-1swqabu{display:flex;flex-direction:column;gap:4px}.cell-tier.svelte-1swqabu{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:lowercase}.cell-value.svelte-1swqabu{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500}.cell-aux.svelte-1swqabu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary)}.divider.svelte-1swqabu{align-self:center;font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ink-tertiary);padding-top:18px}.cmp-delta.svelte-1swqabu{font-family:var(--font-mono);font-size:11px;color:var(--ink);border-top:1px solid var(--rule-soft);padding-top:var(--s-2)}.body-sub.svelte-1swqabu{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-meta.svelte-e40scu{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-meta.svelte-e40scu{padding:var(--s-2) var(--s-3)}.meta-list.svelte-e40scu{margin:0;display:grid;grid-template-columns:1fr;gap:4px}.meta-row.svelte-e40scu{display:grid;grid-template-columns:minmax(110px,max-content) 1fr;gap:var(--s-3);padding:3px 0;border-bottom:1px solid var(--rule-soft);align-items:baseline}.meta-row.svelte-e40scu:last-child{border-bottom:0}dt.svelte-e40scu{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);text-transform:lowercase;letter-spacing:.04em}dd.svelte-e40scu{margin:0;font-family:var(--font-mono);font-size:12px;color:var(--ink)}.body-sub.svelte-e40scu{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.unknown.svelte-1x6xqhh{padding:var(--s-3) var(--s-4);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.fc.svelte-1nuvnzu{background:var(--paper);border:1px solid var(--rule-soft);display:flex;flex-direction:column;transition:background-color .2s ease,border-color .2s ease,outline-color .2s ease;outline:0 solid transparent;outline-offset:0;color:inherit;text-align:left;font:inherit;padding:0;width:100%;animation:svelte-1nuvnzu-fc-fade-in .36s ease-out both}@keyframes svelte-1nuvnzu-fc-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.fc.is-interactive.svelte-1nuvnzu{cursor:pointer}.fc.svelte-1nuvnzu:hover{background:var(--paper-deep)}.fc.is-linked.svelte-1nuvnzu{outline:2px solid var(--accent-graphical);outline-offset:0}.has-illustrative.svelte-1nuvnzu,.fc-tier-synthetic.svelte-1nuvnzu{border-top:1px dashed var(--tier-synthetic-line)}.fc-head.svelte-1nuvnzu{display:flex;justify-content:space-between;align-items:center;padding:var(--s-2) var(--s-4);border-bottom:1px solid var(--rule-soft);background:var(--paper-deep)}.fc.is-compact .fc-head.svelte-1nuvnzu{padding:6px var(--s-3)}.fc-head-source.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:var(--s-2);font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}.fc-head-source-label.svelte-1nuvnzu{cursor:help}.fc-head-vintage.svelte-1nuvnzu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em}.fc-title.svelte-1nuvnzu{margin:0;padding:var(--s-3) var(--s-4) 0;font-family:var(--font-sans);font-size:14px;font-weight:600;line-height:1.35;color:var(--ink)}.fc.is-compact .fc-title.svelte-1nuvnzu{padding:var(--s-2) var(--s-3) 0;font-size:13px}.fc-foot.svelte-1nuvnzu{display:flex;justify-content:space-between;align-items:center;padding:var(--s-2) var(--s-4);border-top:1px solid var(--rule-soft);background:var(--paper-deep);gap:var(--s-3);margin-top:auto}.fc.is-compact .fc-foot.svelte-1nuvnzu{padding:6px var(--s-3)}.fc-foot-cite.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:4px;background:transparent;border:0;padding:0;cursor:pointer;font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--accent)}.fc-foot-cite.svelte-1nuvnzu:hover{color:var(--ink)}.fc-foot-docid.svelte-1nuvnzu{text-transform:uppercase}.fc-foot-docid-mute.svelte-1nuvnzu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:uppercase}.fc-foot-arrow.svelte-1nuvnzu{font-family:var(--font-mono);font-size:11px}.fc-tier-badge.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.fc-tier-badge-empirical.svelte-1nuvnzu{color:var(--tier-empirical)}.fc-tier-badge-modeled.svelte-1nuvnzu{color:var(--tier-modeled)}.fc-tier-badge-proxy.svelte-1nuvnzu{color:var(--tier-proxy)}.fc-tier-badge-synthetic.svelte-1nuvnzu{color:var(--tier-synthetic)}.tally.svelte-1qqbvs2{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em;flex-wrap:wrap}strong.svelte-1qqbvs2{font-weight:600;color:var(--ink)}.silent.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:var(--ink-tertiary)}.warn.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:#b7791f}.err.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:#b91c1c}.notinvoked.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:var(--ink-tertiary);font-style:italic}.sep.svelte-1qqbvs2{color:var(--ink-tertiary);opacity:.6}.prov-tree.svelte-qakefz{list-style:none;margin:0;padding:0;padding-left:calc(var(--depth, 0) * 16px)}.prov-row.svelte-qakefz{display:grid;grid-template-columns:14px max-content max-content 1fr auto;gap:var(--s-2);align-items:baseline;padding:3px 0;font-family:var(--font-mono);font-size:11px;border-bottom:1px dotted var(--rule-soft)}.prov-row.svelte-qakefz:last-child{border-bottom:0}.prov-pip.svelte-qakefz{text-align:center;font-size:10px;line-height:1}.prov-id.svelte-qakefz{color:var(--ink);letter-spacing:.04em;text-transform:lowercase}.prov-tier.svelte-qakefz{display:inline-flex;align-items:center}.prov-name.svelte-qakefz{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink)}.prov-note.svelte-qakefz{font-family:var(--font-sans);font-size:12px;color:var(--ink-tertiary)}.prov-ms.svelte-qakefz{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary)}.prov-status-silent_by_design.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary);font-style:italic}.prov-status-warned.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b7791f}.prov-status-errored.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b91c1c}.prov-status-errored.svelte-qakefz .prov-pip:where(.svelte-qakefz){font-weight:700}.prov-status-not_invoked.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary);font-style:italic}.prov-status-not_invoked.svelte-qakefz .prov-id:where(.svelte-qakefz){color:var(--ink-tertiary);opacity:.6}.prov-children.svelte-qakefz{padding:0}.region.svelte-16iv0n8{border-top:1px solid var(--rule-soft);padding:var(--s-5) 0 var(--s-5);background:transparent}.region.svelte-16iv0n8:first-of-type{border-top:0}.region-head.svelte-16iv0n8{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);margin-bottom:var(--s-3);flex-wrap:wrap;border-left:3px solid var(--stone-tint, var(--rule-soft));padding-left:var(--s-3)}.region-cornerstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-cornerstone)}.region-keystone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-keystone)}.region-touchstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-touchstone)}.region-lodestone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-lodestone)}.region-capstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-capstone)}.region-head-left.svelte-16iv0n8{display:flex;align-items:baseline;gap:var(--s-2);flex-wrap:wrap}.region-num.svelte-16iv0n8{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.1em}.region-name.svelte-16iv0n8{margin:0;font-family:var(--font-serif);font-style:italic;font-size:26px;font-weight:500;color:var(--ink);letter-spacing:-.005em;line-height:1.1}.region-role.svelte-16iv0n8{font-family:var(--font-sans);font-size:14px;color:var(--ink-secondary)}.region-tag.svelte-16iv0n8{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em;margin-left:var(--s-2)}.rail.svelte-16iv0n8{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--s-3)}.rail.svelte-16iv0n8>.fc{grid-column:span 4}.rail.svelte-16iv0n8>.fc.fc-register,.rail.svelte-16iv0n8>.fc.fc-timeseries,.rail.svelte-16iv0n8>.fc.fc-timeseries-ft,.rail.svelte-16iv0n8>.fc.fc-forecast,.rail.svelte-16iv0n8>.fc.fc-raster,.rail.svelte-16iv0n8>.fc.fc-raster-pred,.rail.svelte-16iv0n8>.fc.fc-lulc,.rail.svelte-16iv0n8>.fc.fc-comparison{grid-column:span 6}.rail-capstone.svelte-16iv0n8>.fc{grid-column:span 6}@media(max-width:920px){.rail.svelte-16iv0n8{grid-template-columns:repeat(6,1fr)}.rail.svelte-16iv0n8>.fc{grid-column:span 6}}.silent.svelte-16iv0n8{border:1px dashed var(--rule-soft);padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-2);background:var(--paper-deep)}.silent-tag.svelte-16iv0n8{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.1em;text-transform:uppercase}.silent-prose.svelte-16iv0n8{margin:0;font-size:13px;color:var(--ink-secondary);line-height:1.5;max-width:var(--measure)}.prov.svelte-16iv0n8{margin-top:var(--s-3)}.prov-toggle.svelte-16iv0n8{background:transparent;border:0;padding:4px 0;cursor:pointer;display:inline-flex;align-items:baseline;gap:var(--s-1);font-family:var(--font-mono);font-size:11px;color:var(--ink-secondary);letter-spacing:.05em}.prov-toggle.svelte-16iv0n8:hover{color:var(--ink)}.prov-caret.svelte-16iv0n8{font-size:10px;color:var(--ink-tertiary)}.prov-meta.svelte-16iv0n8{color:var(--ink-tertiary)}.prov-body.svelte-16iv0n8{margin-top:var(--s-2);padding:var(--s-2) 0;border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft)}.region-grammar.svelte-gwg123{border-top:2px solid var(--ink);padding:var(--s-5) 0}.region-head.svelte-gwg123{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:var(--s-3);margin-bottom:var(--s-3)}.region-head-left.svelte-gwg123{display:flex;align-items:baseline;gap:var(--s-2);flex-wrap:wrap}.region-num.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.1em}.region-name.svelte-gwg123{margin:0;font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500}.region-role.svelte-gwg123{font-family:var(--font-sans);font-size:13px;color:var(--ink-secondary)}.region-tag.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em}.grammar-count.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.rail.svelte-gwg123{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--s-3)}.rail.svelte-gwg123>.fc{grid-column:span 4}.rail.svelte-gwg123>.fc.fc-register,.rail.svelte-gwg123>.fc.fc-timeseries,.rail.svelte-gwg123>.fc.fc-forecast,.rail.svelte-gwg123>.fc.fc-raster,.rail.svelte-gwg123>.fc.fc-raster-pred,.rail.svelte-gwg123>.fc.fc-comparison{grid-column:span 6}@media(max-width:920px){.rail.svelte-gwg123{grid-template-columns:repeat(6,1fr)}.rail.svelte-gwg123>.fc{grid-column:span 6}}.findings.svelte-ci42t5{background:var(--paper);color:var(--ink)}.findings-head.svelte-ci42t5{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--s-3);padding:var(--s-3) 0 var(--s-2)}.findings-h2.svelte-ci42t5{margin:0;font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;color:var(--ink)}.findings-tagline.svelte-ci42t5{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em}
web/sveltekit/build/_app/immutable/assets/stoneRegistry.bHiraU77.css DELETED
@@ -1 +0,0 @@
1
- .citation-drawer.svelte-1p339fd a{color:inherit;border-bottom:1px solid var(--rule-soft);text-decoration:none}.citation-drawer.svelte-1p339fd a:hover{border-bottom-color:var(--accent);color:var(--accent)}.rip-map-container.svelte-wk2bu4{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.map-frame.svelte-wk2bu4{aspect-ratio:8 / 5.6;position:relative;transition:outline-color .2s ease;outline:0 solid transparent;outline-offset:0}.map-frame[data-linked].svelte-wk2bu4:not([data-linked=""]){outline:2px solid var(--accent-graphical)}.link-badge.svelte-wk2bu4{position:absolute;bottom:8px;right:8px;padding:3px 8px;background:var(--ink);color:var(--paper);font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;text-transform:lowercase;z-index:5;pointer-events:none}.layers-panel.svelte-1g2dety{background:var(--paper);border:1px solid var(--rule-soft);padding:var(--s-3) var(--s-4) var(--s-4);display:flex;flex-direction:column;gap:var(--s-3);font-family:var(--font-sans)}.layers-head.svelte-1g2dety{padding-bottom:4px}.layers-group.svelte-1g2dety{border-top:1px solid var(--rule-soft);padding-top:var(--s-2);border-left:3px solid var(--stone-tint, var(--rule-soft));padding-left:var(--s-3)}.layers-group.region-cornerstone.svelte-1g2dety{--stone-tint: var(--stone-cornerstone)}.layers-group.region-keystone.svelte-1g2dety{--stone-tint: var(--stone-keystone)}.layers-group.region-touchstone.svelte-1g2dety{--stone-tint: var(--stone-touchstone)}.layers-group.region-lodestone.svelte-1g2dety{--stone-tint: var(--stone-lodestone)}.layers-group.region-capstone.svelte-1g2dety{--stone-tint: var(--stone-capstone)}.layers-group.svelte-1g2dety summary:where(.svelte-1g2dety){cursor:pointer;list-style:none;display:flex;align-items:baseline;gap:var(--s-2);padding:4px 0}.layers-group.svelte-1g2dety summary:where(.svelte-1g2dety)::-webkit-details-marker{display:none}.layers-caret.svelte-1g2dety{font-size:10px;color:var(--ink-tertiary);transition:transform .2s ease}.layers-group.svelte-1g2dety:not([open]) .layers-caret:where(.svelte-1g2dety){transform:rotate(-90deg)}.layers-stone-name.svelte-1g2dety{font-family:var(--font-serif);font-style:italic;font-size:16px;color:var(--ink)}.layers-stone-tag.svelte-1g2dety{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.layers-count.svelte-1g2dety{margin-left:auto;font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:lowercase}.layers-list.svelte-1g2dety{list-style:none;margin:4px 0 var(--s-2);padding:0;display:flex;flex-direction:column}.layers-row.svelte-1g2dety{display:grid;grid-template-columns:16px 1fr auto;gap:var(--s-2);align-items:center;padding:4px 0;font-family:var(--font-mono);font-size:11px;color:var(--ink);border-bottom:1px dotted var(--rule-soft)}.layers-row.svelte-1g2dety:last-child{border-bottom:0}.layers-row.dim.svelte-1g2dety{opacity:.7}.layers-glyph.svelte-1g2dety{display:inline-flex;align-items:center}.layers-text.svelte-1g2dety{display:flex;flex-direction:column;gap:2px}.layers-label.svelte-1g2dety{color:var(--ink);font-family:var(--font-sans);font-size:12px}.layers-meta.svelte-1g2dety{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);display:inline-flex;align-items:center;gap:4px}.layers-state.svelte-1g2dety{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--ink);text-transform:uppercase}.layers-state-dim.svelte-1g2dety{color:var(--ink-tertiary);text-transform:lowercase;font-style:italic}.layers-row-empty.svelte-1g2dety .layers-empty-text:where(.svelte-1g2dety){grid-column:1 / -1;color:var(--ink-tertiary);font-style:italic;font-family:var(--font-mono);font-size:11px}.layers-masters.svelte-1g2dety{border-top:1px solid var(--rule-soft);padding-top:var(--s-2)}.layers-master-row.svelte-1g2dety{margin-top:4px;display:flex;flex-wrap:wrap;gap:6px}.layers-master.svelte-1g2dety{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;background:var(--paper);border:1px solid var(--rule-soft);cursor:pointer;font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--ink)}.layers-master.is-on.svelte-1g2dety{background:var(--paper-deep);border-color:var(--ink)}.layers-master-state.svelte-1g2dety{margin-left:4px;color:var(--ink-tertiary);font-size:9px}.layers-master.is-on.svelte-1g2dety .layers-master-state:where(.svelte-1g2dety){color:var(--ink)}.rh.svelte-1vuwkv4{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s-2);padding:var(--s-2) var(--s-4);background:var(--paper-deep);border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.rh-item.svelte-1vuwkv4 strong:where(.svelte-1vuwkv4){font-weight:600;color:var(--ink);margin-right:2px}.rh-sep.svelte-1vuwkv4{opacity:.5}.rh-silent.svelte-1vuwkv4{color:var(--ink-tertiary)}.rh-warn.svelte-1vuwkv4{color:#b7791f}.rh-err.svelte-1vuwkv4{color:#b91c1c}.rh-notinvoked.svelte-1vuwkv4{color:var(--ink-tertiary);font-style:italic}.rh-total.svelte-1vuwkv4 strong:where(.svelte-1vuwkv4){color:var(--ink-tertiary)}.body-headline.svelte-lygj3j{padding:var(--s-3) var(--s-4) var(--s-2);display:flex;flex-direction:column;gap:var(--s-1)}.fc.is-compact .body-headline.svelte-lygj3j{padding:var(--s-2) var(--s-3)}.headline.svelte-lygj3j{font-family:var(--font-serif);font-style:italic;font-size:28px;font-weight:500;line-height:1.1;letter-spacing:-.01em}.fc.is-compact .headline.svelte-lygj3j{font-size:22px}.subhead.svelte-lygj3j{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}.body-prose.svelte-lygj3j{margin:var(--s-2) 0 0;font-size:13px;line-height:1.45;color:var(--ink-secondary)}.body-tabular.svelte-1nlkuao{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-tabular.svelte-1nlkuao{padding:var(--s-2) var(--s-3)}.t.svelte-1nlkuao{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:12px}.t.svelte-1nlkuao th:where(.svelte-1nlkuao){text-align:left;font-weight:500;color:var(--ink-tertiary);padding:4px 8px 4px 0;border-bottom:1px solid var(--rule-soft);text-transform:lowercase;letter-spacing:.04em}.t.svelte-1nlkuao td:where(.svelte-1nlkuao){padding:4px 8px 4px 0;border-bottom:1px solid var(--rule-soft);color:var(--ink)}.t.svelte-1nlkuao tr:where(.svelte-1nlkuao):last-child td:where(.svelte-1nlkuao){border-bottom:0}.fc.is-compact .t.svelte-1nlkuao th:where(.svelte-1nlkuao),.fc.is-compact .t.svelte-1nlkuao td:where(.svelte-1nlkuao){padding:2px 6px 2px 0;font-size:11px}.body-sub.svelte-1nlkuao{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-scalars.svelte-stf9c8{padding:var(--s-3) var(--s-4) var(--s-3)}.fc.is-compact .body-scalars.svelte-stf9c8{padding:var(--s-2) var(--s-3)}.row.svelte-stf9c8{display:grid;grid-template-columns:repeat(auto-fit,minmax(80px,1fr));gap:var(--s-3)}.cell.svelte-stf9c8{display:flex;flex-direction:column;gap:2px}.value.svelte-stf9c8{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.label.svelte-stf9c8{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.06em;text-transform:lowercase}.body-sub.svelte-stf9c8{margin-top:var(--s-3);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-spark.svelte-jrppts{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-1)}.fc.is-compact .body-spark.svelte-jrppts{padding:var(--s-2) var(--s-3)}.headline.svelte-jrppts{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.subhead.svelte-jrppts{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em;margin-bottom:var(--s-1)}svg.svelte-jrppts{display:block}.body-sub.svelte-jrppts{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-timeseries.svelte-48vbub{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-timeseries.svelte-48vbub{padding:var(--s-2) var(--s-3)}.ts-header.svelte-48vbub{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--s-2)}.headline.svelte-48vbub{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;line-height:1.1}.subhead.svelte-48vbub{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em}svg.svelte-48vbub{display:block}.body-sub.svelte-48vbub{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5;display:flex;flex-direction:column;gap:2px}.spatial-note.svelte-48vbub{color:var(--accent);font-style:italic}.ft-footer.svelte-1y25lfh{margin:var(--s-2) var(--s-4) var(--s-3);padding-top:var(--s-2);border-top:1px dashed var(--rule-soft);display:flex;flex-wrap:wrap;gap:var(--s-3);align-items:baseline;font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.fc.is-compact .ft-footer.svelte-1y25lfh{margin:var(--s-2) var(--s-3)}.ft-stat.svelte-1y25lfh{display:inline-flex;align-items:baseline;gap:4px;color:var(--ink)}.ft-stat-k.svelte-1y25lfh{font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:uppercase}.ft-skill.svelte-1y25lfh{color:var(--tier-modeled);font-weight:500}.ft-badge.svelte-1y25lfh{border:1px solid var(--ink);color:var(--ink);padding:1px 6px;font-size:10px;letter-spacing:.06em;text-transform:uppercase;background:var(--paper)}.ft-link.svelte-1y25lfh{margin-left:auto;color:var(--accent);text-decoration:none}.ft-link.svelte-1y25lfh:hover{text-decoration:underline}.body-forecast.svelte-gqkhpe{padding:var(--s-3) var(--s-4) var(--s-3)}.fc.is-compact .body-forecast.svelte-gqkhpe{padding:var(--s-2) var(--s-3)}svg.svelte-gqkhpe{display:block}.body-sub.svelte-gqkhpe{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}svg.svelte-1lx1psy{display:block}.thumb-placeholder.svelte-1lx1psy{height:120px;background:var(--paper-deep);display:flex;align-items:center;justify-content:center;color:var(--ink-tertiary);font-family:var(--font-mono);font-size:11px;border:1px dashed var(--rule-soft)}.body-raster.svelte-1m43x1m{padding:var(--s-2) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-raster.svelte-1m43x1m{padding:var(--s-2) var(--s-3)}.frame.svelte-1m43x1m{position:relative;border:1px solid var(--rule-soft)}.illustrative.svelte-1m43x1m{position:absolute;top:6px;right:6px;background:#1a1a1ab3;color:var(--paper);font-family:var(--font-mono);font-size:9px;padding:2px 6px;letter-spacing:.05em;text-transform:lowercase}.raster-headline.svelte-1m43x1m{font-family:var(--font-mono);font-size:12px;color:var(--ink)}.raster-headline.svelte-1m43x1m span:where(.svelte-1m43x1m):first-child{font-family:var(--font-serif);font-style:italic;font-size:18px;font-weight:500}.body-sub.svelte-1m43x1m{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-lulc.svelte-1td276x{padding:var(--s-2) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-lulc.svelte-1td276x{padding:var(--s-2) var(--s-3)}.frame.svelte-1td276x{position:relative;border:1px solid var(--rule-soft)}.illustrative.svelte-1td276x{position:absolute;top:6px;right:6px;background:#1a1a1ab3;color:var(--paper);font-family:var(--font-mono);font-size:9px;padding:2px 6px;letter-spacing:.05em;text-transform:lowercase}.bar.svelte-1td276x{display:flex;height:10px;border:1px solid var(--rule-soft);overflow:hidden}.bar-seg.svelte-1td276x{flex-shrink:1;flex-basis:0}.legend.svelte-1td276x{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:4px var(--s-3);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.legend.svelte-1td276x li:where(.svelte-1td276x){display:inline-flex;align-items:center;gap:6px}.swatch.svelte-1td276x{display:inline-block;width:10px;height:10px;border:1px solid var(--rule-soft);flex:none}.legend-k.svelte-1td276x{color:var(--ink);text-transform:lowercase;letter-spacing:.04em}.legend-pct.svelte-1td276x{color:var(--ink-tertiary)}.body-sub.svelte-1td276x{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-register.svelte-1iup6im{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-register.svelte-1iup6im{padding:var(--s-2) var(--s-3)}.reg-list.svelte-1iup6im{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.reg-row.svelte-1iup6im{display:grid;grid-template-columns:70px 1fr auto;gap:var(--s-2);align-items:baseline;padding:5px 0;border-bottom:1px solid var(--rule-soft);font-family:var(--font-mono);font-size:12px;line-height:1.4}.reg-row.svelte-1iup6im:last-child{border-bottom:0}.fc.is-compact .reg-row.svelte-1iup6im{padding:3px 0;font-size:11px}.reg-tag.svelte-1iup6im{display:inline-flex;gap:4px;align-items:center;color:var(--ink-tertiary);text-transform:uppercase;letter-spacing:.05em;font-weight:500}.reg-label.svelte-1iup6im{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reg-source.svelte-1iup6im{color:var(--ink-tertiary);font-size:10px;letter-spacing:.05em}.reg-silent.svelte-1iup6im{grid-column:2 / span 2;color:var(--ink-tertiary);font-style:italic}.reg-row.silent.svelte-1iup6im{opacity:.65}.body-sub.svelte-1iup6im{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-comparison.svelte-1swqabu{padding:var(--s-3) var(--s-4) var(--s-3);display:flex;flex-direction:column;gap:var(--s-2)}.fc.is-compact .body-comparison.svelte-1swqabu{padding:var(--s-2) var(--s-3)}.cmp-grid.svelte-1swqabu{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--s-3);align-items:stretch}.cell.svelte-1swqabu{display:flex;flex-direction:column;gap:4px}.cell-tier.svelte-1swqabu{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:lowercase}.cell-value.svelte-1swqabu{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500}.cell-aux.svelte-1swqabu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary)}.divider.svelte-1swqabu{align-self:center;font-family:var(--font-serif);font-style:italic;font-size:14px;color:var(--ink-tertiary);padding-top:18px}.cmp-delta.svelte-1swqabu{font-family:var(--font-mono);font-size:11px;color:var(--ink);border-top:1px solid var(--rule-soft);padding-top:var(--s-2)}.body-sub.svelte-1swqabu{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.body-meta.svelte-e40scu{padding:var(--s-2) var(--s-4) var(--s-3)}.fc.is-compact .body-meta.svelte-e40scu{padding:var(--s-2) var(--s-3)}.meta-list.svelte-e40scu{margin:0;display:grid;grid-template-columns:1fr;gap:4px}.meta-row.svelte-e40scu{display:grid;grid-template-columns:minmax(110px,max-content) 1fr;gap:var(--s-3);padding:3px 0;border-bottom:1px solid var(--rule-soft);align-items:baseline}.meta-row.svelte-e40scu:last-child{border-bottom:0}dt.svelte-e40scu{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);text-transform:lowercase;letter-spacing:.04em}dd.svelte-e40scu{margin:0;font-family:var(--font-mono);font-size:12px;color:var(--ink)}.body-sub.svelte-e40scu{margin-top:var(--s-2);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);line-height:1.5}.unknown.svelte-1x6xqhh{padding:var(--s-3) var(--s-4);font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.fc.svelte-1nuvnzu{background:var(--paper);border:1px solid var(--rule-soft);display:flex;flex-direction:column;transition:background-color .2s ease,border-color .2s ease,outline-color .2s ease;outline:0 solid transparent;outline-offset:0;color:inherit;text-align:left;font:inherit;padding:0;width:100%;animation:svelte-1nuvnzu-fc-fade-in .36s ease-out both}@keyframes svelte-1nuvnzu-fc-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.fc.is-interactive.svelte-1nuvnzu{cursor:pointer}.fc.svelte-1nuvnzu:hover{background:var(--paper-deep)}.fc.is-linked.svelte-1nuvnzu{outline:2px solid var(--accent-graphical);outline-offset:0}.has-illustrative.svelte-1nuvnzu,.fc-tier-synthetic.svelte-1nuvnzu{border-top:1px dashed var(--tier-synthetic-line)}.fc-head.svelte-1nuvnzu{display:flex;justify-content:space-between;align-items:center;padding:var(--s-2) var(--s-4);border-bottom:1px solid var(--rule-soft);background:var(--paper-deep)}.fc.is-compact .fc-head.svelte-1nuvnzu{padding:6px var(--s-3)}.fc-head-source.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:var(--s-2);font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}.fc-head-source-label.svelte-1nuvnzu{cursor:help}.fc-head-vintage.svelte-1nuvnzu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em}.fc-title.svelte-1nuvnzu{margin:0;padding:var(--s-3) var(--s-4) 0;font-family:var(--font-sans);font-size:14px;font-weight:600;line-height:1.35;color:var(--ink)}.fc.is-compact .fc-title.svelte-1nuvnzu{padding:var(--s-2) var(--s-3) 0;font-size:13px}.fc-foot.svelte-1nuvnzu{display:flex;justify-content:space-between;align-items:center;padding:var(--s-2) var(--s-4);border-top:1px solid var(--rule-soft);background:var(--paper-deep);gap:var(--s-3);margin-top:auto}.fc.is-compact .fc-foot.svelte-1nuvnzu{padding:6px var(--s-3)}.fc-foot-cite.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:4px;background:transparent;border:0;padding:0;cursor:pointer;font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;color:var(--accent)}.fc-foot-cite.svelte-1nuvnzu:hover{color:var(--ink)}.fc-foot-docid.svelte-1nuvnzu{text-transform:uppercase}.fc-foot-docid-mute.svelte-1nuvnzu{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.05em;text-transform:uppercase}.fc-foot-arrow.svelte-1nuvnzu{font-family:var(--font-mono);font-size:11px}.fc-tier-badge.svelte-1nuvnzu{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}.fc-tier-badge-empirical.svelte-1nuvnzu{color:var(--tier-empirical)}.fc-tier-badge-modeled.svelte-1nuvnzu{color:var(--tier-modeled)}.fc-tier-badge-proxy.svelte-1nuvnzu{color:var(--tier-proxy)}.fc-tier-badge-synthetic.svelte-1nuvnzu{color:var(--tier-synthetic)}.tally.svelte-1qqbvs2{display:inline-flex;align-items:center;gap:4px;font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.04em;flex-wrap:wrap}strong.svelte-1qqbvs2{font-weight:600;color:var(--ink)}.silent.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:var(--ink-tertiary)}.warn.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:#b7791f}.err.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:#b91c1c}.notinvoked.svelte-1qqbvs2 strong:where(.svelte-1qqbvs2){color:var(--ink-tertiary);font-style:italic}.sep.svelte-1qqbvs2{color:var(--ink-tertiary);opacity:.6}.prov-tree.svelte-qakefz{list-style:none;margin:0;padding:0;padding-left:calc(var(--depth, 0) * 16px)}.prov-row.svelte-qakefz{display:grid;grid-template-columns:14px max-content max-content 1fr auto;gap:var(--s-2);align-items:baseline;padding:3px 0;font-family:var(--font-mono);font-size:11px;border-bottom:1px dotted var(--rule-soft)}.prov-row.svelte-qakefz:last-child{border-bottom:0}.prov-pip.svelte-qakefz{text-align:center;font-size:10px;line-height:1}.prov-id.svelte-qakefz{color:var(--ink);letter-spacing:.04em;text-transform:lowercase}.prov-tier.svelte-qakefz{display:inline-flex;align-items:center}.prov-name.svelte-qakefz{font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--ink)}.prov-note.svelte-qakefz{font-family:var(--font-sans);font-size:12px;color:var(--ink-tertiary)}.prov-ms.svelte-qakefz{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary)}.prov-status-silent_by_design.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary);font-style:italic}.prov-status-warned.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b7791f}.prov-status-errored.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b91c1c}.prov-status-errored.svelte-qakefz .prov-pip:where(.svelte-qakefz){font-weight:700}.prov-status-not_invoked.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary);font-style:italic}.prov-status-not_invoked.svelte-qakefz .prov-id:where(.svelte-qakefz){color:var(--ink-tertiary);opacity:.6}.prov-children.svelte-qakefz{padding:0}.region.svelte-16iv0n8{border-top:1px solid var(--rule-soft);padding:var(--s-5) 0 var(--s-5);background:transparent}.region.svelte-16iv0n8:first-of-type{border-top:0}.region-head.svelte-16iv0n8{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);margin-bottom:var(--s-3);flex-wrap:wrap;border-left:3px solid var(--stone-tint, var(--rule-soft));padding-left:var(--s-3)}.region-cornerstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-cornerstone)}.region-keystone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-keystone)}.region-touchstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-touchstone)}.region-lodestone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-lodestone)}.region-capstone.svelte-16iv0n8 .region-head:where(.svelte-16iv0n8){--stone-tint: var(--stone-capstone)}.region-head-left.svelte-16iv0n8{display:flex;align-items:baseline;gap:var(--s-2);flex-wrap:wrap}.region-num.svelte-16iv0n8{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.1em}.region-name.svelte-16iv0n8{margin:0;font-family:var(--font-serif);font-style:italic;font-size:26px;font-weight:500;color:var(--ink);letter-spacing:-.005em;line-height:1.1}.region-role.svelte-16iv0n8{font-family:var(--font-sans);font-size:14px;color:var(--ink-secondary)}.region-tag.svelte-16iv0n8{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em;margin-left:var(--s-2)}.rail.svelte-16iv0n8{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--s-3)}.rail.svelte-16iv0n8>.fc{grid-column:span 4}.rail.svelte-16iv0n8>.fc.fc-register,.rail.svelte-16iv0n8>.fc.fc-timeseries,.rail.svelte-16iv0n8>.fc.fc-timeseries-ft,.rail.svelte-16iv0n8>.fc.fc-forecast,.rail.svelte-16iv0n8>.fc.fc-raster,.rail.svelte-16iv0n8>.fc.fc-raster-pred,.rail.svelte-16iv0n8>.fc.fc-lulc,.rail.svelte-16iv0n8>.fc.fc-comparison{grid-column:span 6}.rail-capstone.svelte-16iv0n8>.fc{grid-column:span 6}@media(max-width:920px){.rail.svelte-16iv0n8{grid-template-columns:repeat(6,1fr)}.rail.svelte-16iv0n8>.fc{grid-column:span 6}}.silent.svelte-16iv0n8{border:1px dashed var(--rule-soft);padding:var(--s-4);display:flex;flex-direction:column;gap:var(--s-2);background:var(--paper-deep)}.silent-tag.svelte-16iv0n8{font-family:var(--font-mono);font-size:10px;color:var(--ink-tertiary);letter-spacing:.1em;text-transform:uppercase}.silent-prose.svelte-16iv0n8{margin:0;font-size:13px;color:var(--ink-secondary);line-height:1.5;max-width:var(--measure)}.prov.svelte-16iv0n8{margin-top:var(--s-3)}.prov-toggle.svelte-16iv0n8{background:transparent;border:0;padding:4px 0;cursor:pointer;display:inline-flex;align-items:baseline;gap:var(--s-1);font-family:var(--font-mono);font-size:11px;color:var(--ink-secondary);letter-spacing:.05em}.prov-toggle.svelte-16iv0n8:hover{color:var(--ink)}.prov-caret.svelte-16iv0n8{font-size:10px;color:var(--ink-tertiary)}.prov-meta.svelte-16iv0n8{color:var(--ink-tertiary)}.prov-body.svelte-16iv0n8{margin-top:var(--s-2);padding:var(--s-2) 0;border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft)}.region-grammar.svelte-gwg123{border-top:2px solid var(--ink);padding:var(--s-5) 0}.region-head.svelte-gwg123{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:var(--s-3);margin-bottom:var(--s-3)}.region-head-left.svelte-gwg123{display:flex;align-items:baseline;gap:var(--s-2);flex-wrap:wrap}.region-num.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.1em}.region-name.svelte-gwg123{margin:0;font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500}.region-role.svelte-gwg123{font-family:var(--font-sans);font-size:13px;color:var(--ink-secondary)}.region-tag.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em}.grammar-count.svelte-gwg123{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary)}.rail.svelte-gwg123{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--s-3)}.rail.svelte-gwg123>.fc{grid-column:span 4}.rail.svelte-gwg123>.fc.fc-register,.rail.svelte-gwg123>.fc.fc-timeseries,.rail.svelte-gwg123>.fc.fc-forecast,.rail.svelte-gwg123>.fc.fc-raster,.rail.svelte-gwg123>.fc.fc-raster-pred,.rail.svelte-gwg123>.fc.fc-comparison{grid-column:span 6}@media(max-width:920px){.rail.svelte-gwg123{grid-template-columns:repeat(6,1fr)}.rail.svelte-gwg123>.fc{grid-column:span 6}}.findings.svelte-ci42t5{background:var(--paper);color:var(--ink)}.findings-head.svelte-ci42t5{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--s-3);padding:var(--s-3) 0 var(--s-2)}.findings-h2.svelte-ci42t5{margin:0;font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:500;color:var(--ink)}.findings-tagline.svelte-ci42t5{font-family:var(--font-mono);font-size:11px;color:var(--ink-tertiary);letter-spacing:.05em}
 
 
web/sveltekit/build/_app/immutable/chunks/{DlifwAOf.js → B3Pg95Il.js} RENAMED
@@ -1 +1 @@
1
- import{s as e,p as r}from"./BIe30OUb.js";const t={get error(){return r.error},get params(){return r.params},get status(){return r.status},get url(){return r.url}};e.updated.check;const a=t;export{a as p};
 
1
+ import{s as e,p as r}from"./CJeJVIjP.js";const t={get error(){return r.error},get params(){return r.params},get status(){return r.status},get url(){return r.url}};e.updated.check;const a=t;export{a as p};
web/sveltekit/build/_app/immutable/chunks/BIe30OUb.js DELETED
@@ -1 +0,0 @@
1
- var rt=e=>{throw TypeError(e)};var Dt=(e,t,n)=>t.has(e)||rt("Cannot "+n);var y=(e,t,n)=>(Dt(e,t,"read from private field"),n?n.call(e):t.get(e)),A=(e,t,n)=>t.has(e)?rt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{bf as Pe,bg as Vt,ai as at,a4 as T,o as I,a5 as O,ar as we,bh as Bt}from"./BTUA7_xE.js";const M=[];function Ke(e,t=Pe){let n=null;const a=new Set;function r(o){if(Vt(e,o)&&(e=o,n)){const l=!M.length;for(const c of a)c[1](),M.push(c,e);if(l){for(let c=0;c<M.length;c+=2)M[c][0](M[c+1]);M.length=0}}}function i(o){r(o(e))}function s(o,l=Pe){const c=[o,l];return a.add(c),a.size===1&&(n=t(r,i)||Pe),o(e),()=>{a.delete(c),a.size===0&&n&&(n(),n=null)}}return{set:r,update:i,subscribe:s}}class Me{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class ze{constructor(t,n){try{new Headers({location:n})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(n)}: this string contains characters that cannot be used in HTTP headers`)}this.status=t,this.location=n}}class Fe extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Kt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Mt(e){return e.split("%25").map(decodeURI).join("%25")}function zt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function $e({href:e}){return e.split("#")[0]}function C(){}function Ft(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;function Gt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n}const Ht=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&X.delete(Ge(e)),Ht(e,t));const X=new Map;function Wt(e,t){const n=Ge(e,t),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...i}=JSON.parse(a.textContent);const s=a.getAttribute("data-ttl");return s&&X.set(n,{body:r,init:i,ttl:1e3*Number(s)}),a.getAttribute("data-b64")!==null&&(r=Gt(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Jt(e,t,n){if(X.size>0){const a=Ge(e,n),r=X.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(r.body,r.init);X.delete(a)}}return window.fetch(t,n)}function Ge(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t!=null&&t.headers||t!=null&&t.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${Ft(...r)}"]`}return a}const Yt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Xt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Zt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const i=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(i)return t.push({name:i[1],matcher:i[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const s=a.split(/\[(.+?)\](?!\])/);return"/"+s.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Ce(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Ce(String.fromCharCode(...l.slice(2).split("-").map(m=>parseInt(m,16))));const d=Yt.exec(l),[,u,w,p,f]=d;return t.push({name:p,matcher:f,optional:!!u,rest:!!w,chained:w?c===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return Ce(l)}).join("")}).join("")}/?$`),params:t}}function Qt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Zt(e){return e.slice(1).split("/").filter(Qt)}function en(e,t,n){const a={},r=e.slice(1),i=r.filter(o=>o!==void 0);let s=0;for(let o=0;o<t.length;o+=1){const l=t[o];let c=r[o-s];if(l.chained&&l.rest&&s&&(c=r.slice(o-s,o+1).filter(d=>d).join("/"),s=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){a[l.name]=c;const d=t[o+1],u=r[o+1];d&&!d.rest&&d.optional&&u&&l.chained&&(s=0),!d&&!u&&Object.keys(a).length===i.length&&(s=0);continue}if(l.optional&&l.chained){s++;continue}return}if(!s)return a}function Ce(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function tn({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([o,[l,c,d]])=>{const{pattern:u,params:w}=Xt(o),p={id:o,exec:f=>{const m=u.exec(f);if(m)return en(m,w,a)},errors:[1,...d||[]].map(f=>e[f]),layouts:[0,...c||[]].map(s),leaf:i(l)};return p.errors.length=p.layouts.length=Math.max(p.errors.length,p.layouts.length),p});function i(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function s(o){return o===void 0?o:[r.has(o),e[o]]}}function wt(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function ot(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}var ht;const U=((ht=globalThis.__sveltekit_2hdpwx)==null?void 0:ht.base)??"";var pt;const nn=((pt=globalThis.__sveltekit_2hdpwx)==null?void 0:pt.assets)??U??"",rn="1778255822052",vt="sveltekit:snapshot",yt="sveltekit:scroll",bt="sveltekit:states",an="sveltekit:pageurl",F="sveltekit:history",Z="sveltekit:navigation",D={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Ue=location.origin;function He(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function B(){return{x:pageXOffset,y:pageYOffset}}function z(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const st={...D,"":D.hover};function kt(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function St(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=kt(e)}}function qe(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";a.hash=`#${o}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,i=!a||!!r||Ae(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),s=(a==null?void 0:a.origin)===Ue&&e.hasAttribute("download");return{url:a,external:i,target:r,download:s}}function ve(e){let t=null,n=null,a=null,r=null,i=null,s=null,o=e;for(;o&&o!==document.documentElement;)a===null&&(a=z(o,"preload-code")),r===null&&(r=z(o,"preload-data")),t===null&&(t=z(o,"keepfocus")),n===null&&(n=z(o,"noscroll")),i===null&&(i=z(o,"reload")),s===null&&(s=z(o,"replacestate")),o=kt(o);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:st[a??"off"],preload_data:st[r??"off"],keepfocus:l(t),noscroll:l(n),reload:l(i),replace_state:l(s)}}function it(e){const t=Ke(e);let n=!0;function a(){n=!0,t.update(s=>s)}function r(s){n=!1,t.set(s)}function i(s){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&s(o=l)})}return{notify:a,set:r,subscribe:i}}const Et={v:C};function on(){const{set:e,subscribe:t}=Ke(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${nn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const s=(await r.json()).version!==rn;return s&&(e(!0),Et.v(),clearTimeout(n)),s}catch{return!1}}return{subscribe:t,check:a}}function Ae(e,t,n){return e.origin!==Ue||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pn(e){}const Rt=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Rt];const sn=new Set([...Rt]);[...sn];function ln(e){return e.filter(t=>t!=null)}function me(e,t){return e+"/"+t}function We(e){return e instanceof Me||e instanceof Fe?e.status:500}function cn(e){return e instanceof Fe?e.text:"Internal Error"}let R,ee,je;const fn=at.toString().includes("$$")||/function \w+\(\) \{\}/.test(at.toString()),lt="a:";var oe,se,ie,le,ce,fe,ue,de,gt,he,mt,pe,_t;fn?(R={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(lt)},ee={current:null},je={current:!1}):(R=new(gt=class{constructor(){A(this,oe,T({}));A(this,se,T(null));A(this,ie,T(null));A(this,le,T({}));A(this,ce,T({id:null}));A(this,fe,T({}));A(this,ue,T(-1));A(this,de,T(new URL(lt)))}get data(){return I(y(this,oe))}set data(t){O(y(this,oe),t)}get form(){return I(y(this,se))}set form(t){O(y(this,se),t)}get error(){return I(y(this,ie))}set error(t){O(y(this,ie),t)}get params(){return I(y(this,le))}set params(t){O(y(this,le),t)}get route(){return I(y(this,ce))}set route(t){O(y(this,ce),t)}get state(){return I(y(this,fe))}set state(t){O(y(this,fe),t)}get status(){return I(y(this,ue))}set status(t){O(y(this,ue),t)}get url(){return I(y(this,de))}set url(t){O(y(this,de),t)}},oe=new WeakMap,se=new WeakMap,ie=new WeakMap,le=new WeakMap,ce=new WeakMap,fe=new WeakMap,ue=new WeakMap,de=new WeakMap,gt),ee=new(mt=class{constructor(){A(this,he,T(null))}get current(){return I(y(this,he))}set current(t){O(y(this,he),t)}},he=new WeakMap,mt),je=new(_t=class{constructor(){A(this,pe,T(!1))}get current(){return I(y(this,pe))}set current(t){O(y(this,pe),t)}},pe=new WeakMap,_t),Et.v=()=>je.current=!0);function un(e){Object.assign(R,e)}const dn=new Set(["icon","shortcut icon","apple-touch-icon"]);let J=null;const N=wt(yt)??{},te=wt(vt)??{},j={url:it({}),page:it({}),navigating:Ke(null),updated:on()};function Je(e){N[e]=B()}function hn(e,t){let n=e+1;for(;N[n];)delete N[n],n+=1;for(n=t+1;te[n];)delete te[n],n+=1}function ne(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(C)}async function xt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(U||"/");e&&await e.update()}}let Ye,De,ye,P,Ve,S;const be=[],ke=[];let v=null;function Se(){var e;(e=v==null?void 0:v.fork)==null||e.then(t=>t==null?void 0:t.discard()),v=null}const _e=new Map,Lt=new Set,pn=new Set,Q=new Set;let _={branch:[],error:null,url:null},Ut=!1,Ee=!1,ct=!0,re=!1,Y=!1,At=!1,Xe=!1,Tt,k,L,V;const Re=new Set,ft=new Map,ut=new Map;async function Nn(e,t,n){var i,s,o,l;globalThis.__sveltekit_2hdpwx&&(globalThis.__sveltekit_2hdpwx.query,globalThis.__sveltekit_2hdpwx.prerender),document.URL!==location.href&&(location.href=location.href),S=e,await((s=(i=e.hooks).init)==null?void 0:s.call(i)),Ye=tn(e),P=document.documentElement,Ve=t,De=e.nodes[0],ye=e.nodes[1],De(),ye(),k=(o=history.state)==null?void 0:o[F],L=(l=history.state)==null?void 0:l[Z],k||(k=L=Date.now(),history.replaceState({...history.state,[F]:k,[Z]:L},""));const a=N[k];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Ln(Ve,n)):(await G({type:"enter",url:He(S.hash?Tn(new URL(location.href)):location.href),replace_state:!0}),r()),xn()}function gn(){be.length=0,Xe=!1}function It(e){ke.some(t=>t==null?void 0:t.snapshot)&&(te[e]=ke.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function Ot(e){var t;(t=te[e])==null||t.forEach((n,a)=>{var r,i;(i=(r=ke[a])==null?void 0:r.snapshot)==null||i.restore(n)})}function dt(){Je(k),ot(yt,N),It(L),ot(vt,te)}async function Pt(e,t,n,a){let r,i;t.invalidateAll&&Se(),await G({type:"goto",url:He(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{if(t.invalidateAll){Xe=!0,r=new Set;for(const[s,o]of ft)for(const l of o.keys())r.add(me(s,l));i=new Set;for(const[s,o]of ut)for(const l of o.keys())i.add(me(s,l))}t.invalidate&&t.invalidate.forEach(Rn)}}),t.invalidateAll&&we().then(we).then(()=>{for(const[s,o]of ft)for(const[l,{resource:c}]of o)r!=null&&r.has(me(s,l))&&c.refresh();for(const[s,o]of ut)for(const[l,{resource:c}]of o)i!=null&&i.has(me(s,l))&&c.reconnect()})}async function mn(e){if(e.id!==(v==null?void 0:v.id)){Se();const t={};Re.add(t),v={id:e.id,token:t,promise:Ct({...e,preload:t}).then(n=>(Re.delete(t),n.type==="loaded"&&n.state.error&&Se(),n)),fork:null}}return v.promise}async function Ne(e){var n;const t=(n=await Te(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(a=>a[1]()))}async function $t(e,t,n){var i;const a={params:_.params,route:{id:((i=_.route)==null?void 0:i.id)??null},url:new URL(location.href)};_={...e.state,nav:a};const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(R,e.props.page),Tt=new S.root({target:t,props:{...e.props,stores:j,components:ke},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ot(L),n){const s={from:null,to:{...a,scroll:N[k]??B()},willUnload:!1,type:"enter",complete:Promise.resolve()};Q.forEach(o=>o(s))}Ee=!0}async function xe({url:e,params:t,branch:n,errors:a,status:r,error:i,route:s,form:o}){let l="never";if(U&&(e.pathname===U||e.pathname===U+"/"))l="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(l=f.slash);e.pathname=Kt(e.pathname,l),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:i,route:s},props:{constructors:ln(n).map(f=>f.node.component),page:nt(R)}};o!==void 0&&(c.props.form=o);let d={},u=!R,w=0;for(let f=0;f<Math.max(n.length,_.branch.length);f+=1){const m=n[f],h=_.branch[f];(m==null?void 0:m.data)!==(h==null?void 0:h.data)&&(u=!0),m&&(d={...d,...m.data},u&&(c.props[`data_${w}`]=d),w+=1)}return(!_.url||e.href!==_.url.href||_.error!==i||o!==void 0&&o!==R.form||u)&&(c.props.page={error:i,params:t,route:{id:(s==null?void 0:s.id)??null},state:{},status:r,url:new URL(e),form:o??null,data:u?d:R.data}),c}async function Qe({loader:e,parent:t,url:n,params:a,route:r,server_data_node:i}){var c,d;let s=null;const o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();return{node:l,loader:e,server:i,universal:(c=l.universal)!=null&&c.load?{type:"data",data:s,uses:o}:null,data:s??(i==null?void 0:i.data)??null,slash:((d=l.universal)==null?void 0:d.trailingSlash)??(i==null?void 0:i.slash)}}function _n(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const i=Ee?Jt(a,r.href,t):Wt(a,t);return{resolved:r,promise:i}}function wn(e,t,n,a,r,i){if(Xe)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const s of r.search_params)if(a.has(s))return!0;for(const s of r.params)if(i[s]!==_.params[s])return!0;for(const s of r.dependencies)if(be.some(o=>o(new URL(s))))return!0;return!1}function Ze(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function vn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),i=t.searchParams.getAll(a);r.every(s=>i.includes(s))&&i.every(s=>r.includes(s))&&n.delete(a)}return n}function yn({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:nt(R),constructors:[]}}}async function Ct({id:e,invalidating:t,url:n,params:a,route:r,preload:i}){if((v==null?void 0:v.id)===e)return Re.delete(v.token),v.promise;const{errors:s,layouts:o,leaf:l}=r,c=[...o,l];s.forEach(h=>h==null?void 0:h().catch(C)),c.forEach(h=>h==null?void 0:h[1]().catch(C));const d=_.url?e!==Le(_.url):!1,u=_.route?r.id!==_.route.id:!1,w=vn(_.url,n);let p=!1;const f=c.map(async(h,g)=>{var $;if(!h)return;const b=_.branch[g];return h[1]===(b==null?void 0:b.loader)&&!wn(p,u,d,w,($=b.universal)==null?void 0:$.uses,a)?b:(p=!0,Qe({loader:h[1],url:n,params:a,route:r,parent:async()=>{var ge;const q={};for(let K=0;K<g;K+=1)Object.assign(q,(ge=await f[K])==null?void 0:ge.data);return q},server_data_node:Ze(h[0]?{type:"skip"}:null,h[0]?b==null?void 0:b.server:void 0)}))});for(const h of f)h.catch(C);const m=[];for(let h=0;h<c.length;h+=1)if(c[h])try{m.push(await f[h])}catch(g){if(g instanceof ze)return{type:"redirect",location:g.location};if(Re.has(i))return yn({error:await ae(g,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let b=We(g),x;if(g instanceof Me)x=g.body;else{if(await j.updated.check())return await xt(),await ne(n);x=await ae(g,{params:a,url:n,route:{id:r.id}})}const $=await bn(h,m,s);return $?xe({url:n,params:a,branch:m.slice(0,$.idx).concat($.node),errors:s,status:b,error:x,route:r}):await Nt(n,{id:r.id},x,b)}else m.push(void 0);return xe({url:n,params:a,branch:m,errors:s,status:200,error:null,route:r,form:t?void 0:null})}async function bn(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function et({status:e,error:t,url:n,route:a}){const r={};let i=null;try{const s=await Qe({loader:De,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Ze(i)}),o={node:await ye(),loader:ye,universal:null,server:null,data:null};return xe({url:n,params:r,branch:[s,o],status:e,error:t,errors:[],route:null})}catch(s){if(s instanceof ze)return Pt(new URL(s.location,location.href),{},0);throw s}}async function kn(e){const t=e.href;if(_e.has(t))return _e.get(t);let n;try{const a=(async()=>{let r=await S.hooks.reroute({url:new URL(e),fetch:async(i,s)=>_n(i,s,e).promise})??e;if(typeof r=="string"){const i=new URL(e);S.hash?i.hash=r:i.pathname=r,r=i}return r})();_e.set(t,a),n=await a}catch{_e.delete(t);return}return n}async function Te(e,t){if(e&&!Ae(e,U,S.hash)){const n=await kn(e);if(!n)return;const a=Sn(n);for(const r of Ye){const i=r.exec(a);if(i)return{id:Le(e),invalidating:t,route:r,params:zt(i),url:e}}}}function Sn(e){return Mt(S.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(U.length))||"/"}function Le(e){return(S.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function jt({url:e,type:t,intent:n,delta:a,event:r,scroll:i}){let s=!1;const o=tt(_,n,e,t,i??null);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const l={...o.navigation,cancel:()=>{s=!0,o.reject(new Error("navigation cancelled"))}};return re||Lt.forEach(c=>c(l)),s?null:o}async function G({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s={},redirect_count:o=0,nav_token:l={},accept:c=C,block:d=C,event:u}){var K;const w=V;V=l;const p=await Te(t,!1),f=e==="enter"?tt(_,p,t,e):jt({url:t,type:e,delta:n==null?void 0:n.delta,intent:p,scroll:n==null?void 0:n.scroll,event:u});if(!f){d(),V===l&&(V=w);return}const m=k,h=L;c(),re=!0,Ee&&f.navigation.type!=="enter"&&j.navigating.set(ee.current=f.navigation);let g=p&&await Ct(p);if(!g){if(Ae(t,U,S.hash))return await ne(t,i);g=await Nt(t,{id:null},await ae(new Fe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,i)}if(t=(p==null?void 0:p.url)||t,V!==l)return f.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(o<20){await G({type:e,url:new URL(g.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s,redirect_count:o+1,nav_token:l}),f.fulfil(void 0);return}g=await et({status:500,error:await ae(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else g.props.page.status>=400&&await j.updated.check()&&(await xt(),await ne(t,i));if(gn(),Je(m),It(h),g.props.page.url.pathname!==t.pathname&&(t.pathname=g.props.page.url.pathname),s=n?n.state:s,!n){const E=i?0:1,H={[F]:k+=E,[Z]:L+=E,[bt]:s};(i?history.replaceState:history.pushState).call(history,H,"",t),i||hn(k,L)}const b=p&&(v==null?void 0:v.id)===p.id?v.fork:null;v!=null&&v.fork&&!b&&Se(),v=null,g.props.page.state=s;let x;if(Ee){const E=(await Promise.all(Array.from(pn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(E.length>0){let W=function(){E.forEach(Oe=>{Q.delete(Oe)})};E.push(W),E.forEach(Oe=>{Q.add(Oe)})}const H=f.navigation.to;_={...g.state,nav:{params:H.params,route:H.route,url:H.url}},g.props.page&&(g.props.page.url=t);const Ie=b&&await b;Ie?x=Ie.commit():(J=null,Tt.$set(g.props),J&&Object.assign(g.props.page,J),un(g.props.page),x=(K=Bt)==null?void 0:K()),At=!0}else await $t(g,Ve,!1);const{activeElement:$}=document;await x,await we(),await we();let q=null;if(ct){const E=n?n.scroll:r?B():null;E?scrollTo(E.x,E.y):(q=t.hash&&document.getElementById(qt(t)))?q.scrollIntoView():scrollTo(0,0)}const ge=document.activeElement!==$&&document.activeElement!==document.body;!a&&!ge&&An(t,!q),ct=!0,g.props.page&&(J&&Object.assign(g.props.page,J),Object.assign(R,g.props.page)),re=!1,e==="popstate"&&Ot(L),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=B()),Q.forEach(E=>E(f.navigation)),j.navigating.set(ee.current=null)}async function Nt(e,t,n,a,r){return e.origin===Ue&&e.pathname===location.pathname&&!Ut?await et({status:a,error:n,url:e,route:t}):await ne(e,r)}function En(){let e,t={element:void 0,href:void 0},n;P.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{i(l,D.hover)},20)});function a(o){o.defaultPrevented||i(o.composedPath()[0],D.tap)}P.addEventListener("mousedown",a),P.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(Ne(new URL(l.target.href)),r.unobserve(l.target))},{threshold:0});async function i(o,l){const c=St(o,P),d=c===t.element&&(c==null?void 0:c.href)===t.href&&l>=n;if(!c||d)return;const{url:u,external:w,download:p}=qe(c,U,S.hash);if(w||p)return;const f=ve(c),m=u&&Le(_.url)===Le(u);if(!(f.reload||m))if(l<=f.preload_data){t={element:c,href:c.href},n=D.tap;const h=await Te(u,!1);if(!h)return;mn(h)}else l<=f.preload_code&&(t={element:c,href:c.href},n=l,Ne(u))}function s(){r.disconnect();for(const o of P.querySelectorAll("a")){const{url:l,external:c,download:d}=qe(o,U,S.hash);if(c||d)continue;const u=ve(o);u.reload||(u.preload_code===D.viewport&&r.observe(o),u.preload_code===D.eager&&Ne(l))}}Q.add(s),s()}function ae(e,t){if(e instanceof Me)return e.body;const n=We(e),a=cn(e);return S.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function qn(e,t={}){return e=new URL(He(e)),e.origin!==Ue?Promise.reject(new Error("goto: invalid URL")):Pt(e,t,0)}function Rn(e){if(typeof e=="function")be.push(e);else{const{href:t}=new URL(e,location.href);be.push(n=>n.href===t)}}function xn(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(dt(),!re){const r=tt(_,void 0,null,"leave"),i={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Lt.forEach(s=>s(i))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&dt()}),(t=navigator.connection)!=null&&t.saveData||En(),P.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=St(n.composedPath()[0],P);if(!a)return;const{url:r,external:i,target:s,download:o}=qe(a,U,S.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const l=ve(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[d,u]=(S.hash?r.hash.replace(/^#/,""):r.href).split("#"),w=d===$e(location);if(i||l.reload&&(!w||!u)){jt({url:r,type:"link",event:n})?re=!0:n.preventDefault();return}if(u!==void 0&&w){const[,p]=_.url.href.split("#");if(p===u){if(n.preventDefault(),u===""||u==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const f=a.ownerDocument.getElementById(decodeURIComponent(u));f&&(f.scrollIntoView(),f.focus())}return}if(Y=!0,Je(k),e(r),!l.replace_state)return;Y=!1}n.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await G({type:"link",url:r,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??r.href===location.href,event:n})}),P.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const o=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(Ae(o,U,!1))return;const l=n.target,c=ve(l);if(c.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(l,r);o.search=new URLSearchParams(d).toString(),G({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Be){if((a=n.state)!=null&&a[F]){const r=n.state[F];if(V={},r===k)return;const i=N[r],s=n.state[bt]??{},o=new URL(n.state[an]??location.href),l=n.state[Z],c=_.url?$e(location)===$e(_.url):!1;if(l===L&&(At||c)){s!==R.state&&(R.state=s),e(o),N[k]=B(),i&&scrollTo(i.x,i.y),k=r;return}const u=r-k;await G({type:"popstate",url:o,popped:{state:s,scroll:i,delta:u},accept:()=>{k=r,L=l},block:()=>{history.go(-u)},nav_token:V,event:n})}else if(!Y){const r=new URL(location.href);e(r),S.hash&&location.reload()}}}),addEventListener("hashchange",()=>{Y&&(Y=!1,history.replaceState({...history.state,[F]:++k,[Z]:L},"",location.href))});for(const n of document.querySelectorAll("link"))dn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&j.navigating.set(ee.current=null)});function e(n){_.url=R.url=n,j.page.set(nt(R)),j.page.notify()}}async function Ln(e,{status:t=200,error:n,node_ids:a,params:r,route:i,server_route:s,data:o,form:l}){Ut=!0;const c=new URL(location.href);let d;({params:r={},route:i={id:null}}=await Te(c,!1)||{}),d=Ye.find(({id:p})=>p===i.id);let u,w=!0;try{const p=a.map(async(m,h)=>{const g=o[h];return g!=null&&g.uses&&(g.uses=Un(g.uses)),Qe({loader:S.nodes[m],url:c,params:r,route:i,parent:async()=>{const b={};for(let x=0;x<h;x+=1)Object.assign(b,(await p[x]).data);return b},server_data_node:Ze(g)})}),f=await Promise.all(p);if(d){const m=d.layouts;for(let h=0;h<m.length;h++)m[h]||f.splice(h,0,void 0)}u=await xe({url:c,params:r,branch:f,status:t,error:n,errors:d==null?void 0:d.errors,form:l,route:d??null})}catch(p){if(p instanceof ze){await ne(new URL(p.location,location.href));return}u=await et({status:We(p),error:await ae(p,{url:c,params:r,route:i}),url:c,route:i}),e.textContent="",w=!1}finally{}u.props.page&&(u.props.page.state={}),await $t(u,e,w)}function Un(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Be=!1;function An(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=qt(e);if(a&&document.getElementById(a)){const{x:i,y:s}=B();setTimeout(()=>{const o=history.state;Be=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(o,"",e),t&&scrollTo(i,s),Be=!1})}else{const i=document.body,s=i.getAttribute("tabindex");i.tabIndex=-1,i.focus({preventScroll:!0,focusVisible:!1}),s!==null?i.setAttribute("tabindex",s):i.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const i=[];for(let s=0;s<r.rangeCount;s+=1)i.push(r.getRangeAt(s));setTimeout(()=>{if(r.rangeCount===i.length){for(let s=0;s<r.rangeCount;s+=1){const o=i[s],l=r.getRangeAt(s);if(o.commonAncestorContainer!==l.commonAncestorContainer||o.startContainer!==l.startContainer||o.endContainer!==l.endContainer||o.startOffset!==l.startOffset||o.endOffset!==l.endOffset)return}r.removeAllRanges()}})}}}function tt(e,t,n,a,r=null){var c,d;let i,s;const o=new Promise((u,w)=>{i=u,s=w});return o.catch(C),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url,scroll:B()},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((d=t==null?void 0:t.route)==null?void 0:d.id)??null},url:n,scroll:r},willUnload:!t,type:a,complete:o},fulfil:i,reject:s}}function nt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Tn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function qt(e){let t;if(S.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Nn as a,qn as g,Pn as l,R as p,j as s};
 
 
web/sveltekit/build/_app/immutable/chunks/BOtZ6QcV.js DELETED
@@ -1 +0,0 @@
1
- var rt=e=>{throw TypeError(e)};var Dt=(e,t,n)=>t.has(e)||rt("Cannot "+n);var y=(e,t,n)=>(Dt(e,t,"read from private field"),n?n.call(e):t.get(e)),A=(e,t,n)=>t.has(e)?rt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{bf as Pe,bg as Vt,ai as at,a4 as T,o as I,a5 as O,ar as we,bh as Bt}from"./BTUA7_xE.js";const M=[];function Ke(e,t=Pe){let n=null;const a=new Set;function r(o){if(Vt(e,o)&&(e=o,n)){const l=!M.length;for(const c of a)c[1](),M.push(c,e);if(l){for(let c=0;c<M.length;c+=2)M[c][0](M[c+1]);M.length=0}}}function i(o){r(o(e))}function s(o,l=Pe){const c=[o,l];return a.add(c),a.size===1&&(n=t(r,i)||Pe),o(e),()=>{a.delete(c),a.size===0&&n&&(n(),n=null)}}return{set:r,update:i,subscribe:s}}class Me{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class ze{constructor(t,n){try{new Headers({location:n})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(n)}: this string contains characters that cannot be used in HTTP headers`)}this.status=t,this.location=n}}class Fe extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Kt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Mt(e){return e.split("%25").map(decodeURI).join("%25")}function zt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function $e({href:e}){return e.split("#")[0]}function C(){}function Ft(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;function Gt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n}const Ht=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&X.delete(Ge(e)),Ht(e,t));const X=new Map;function Wt(e,t){const n=Ge(e,t),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...i}=JSON.parse(a.textContent);const s=a.getAttribute("data-ttl");return s&&X.set(n,{body:r,init:i,ttl:1e3*Number(s)}),a.getAttribute("data-b64")!==null&&(r=Gt(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Jt(e,t,n){if(X.size>0){const a=Ge(e,n),r=X.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(r.body,r.init);X.delete(a)}}return window.fetch(t,n)}function Ge(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t!=null&&t.headers||t!=null&&t.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${Ft(...r)}"]`}return a}const Yt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Xt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Zt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const i=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(i)return t.push({name:i[1],matcher:i[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const s=a.split(/\[(.+?)\](?!\])/);return"/"+s.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Ce(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Ce(String.fromCharCode(...l.slice(2).split("-").map(m=>parseInt(m,16))));const d=Yt.exec(l),[,u,w,p,f]=d;return t.push({name:p,matcher:f,optional:!!u,rest:!!w,chained:w?c===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return Ce(l)}).join("")}).join("")}/?$`),params:t}}function Qt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Zt(e){return e.slice(1).split("/").filter(Qt)}function en(e,t,n){const a={},r=e.slice(1),i=r.filter(o=>o!==void 0);let s=0;for(let o=0;o<t.length;o+=1){const l=t[o];let c=r[o-s];if(l.chained&&l.rest&&s&&(c=r.slice(o-s,o+1).filter(d=>d).join("/"),s=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){a[l.name]=c;const d=t[o+1],u=r[o+1];d&&!d.rest&&d.optional&&u&&l.chained&&(s=0),!d&&!u&&Object.keys(a).length===i.length&&(s=0);continue}if(l.optional&&l.chained){s++;continue}return}if(!s)return a}function Ce(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function tn({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([o,[l,c,d]])=>{const{pattern:u,params:w}=Xt(o),p={id:o,exec:f=>{const m=u.exec(f);if(m)return en(m,w,a)},errors:[1,...d||[]].map(f=>e[f]),layouts:[0,...c||[]].map(s),leaf:i(l)};return p.errors.length=p.layouts.length=Math.max(p.errors.length,p.layouts.length),p});function i(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function s(o){return o===void 0?o:[r.has(o),e[o]]}}function wt(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function ot(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}var ht;const U=((ht=globalThis.__sveltekit_chon6g)==null?void 0:ht.base)??"";var pt;const nn=((pt=globalThis.__sveltekit_chon6g)==null?void 0:pt.assets)??U??"",rn="1778275660567",vt="sveltekit:snapshot",yt="sveltekit:scroll",bt="sveltekit:states",an="sveltekit:pageurl",F="sveltekit:history",Z="sveltekit:navigation",D={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Ue=location.origin;function He(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function B(){return{x:pageXOffset,y:pageYOffset}}function z(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const st={...D,"":D.hover};function kt(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function St(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=kt(e)}}function qe(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";a.hash=`#${o}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,i=!a||!!r||Ae(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),s=(a==null?void 0:a.origin)===Ue&&e.hasAttribute("download");return{url:a,external:i,target:r,download:s}}function ve(e){let t=null,n=null,a=null,r=null,i=null,s=null,o=e;for(;o&&o!==document.documentElement;)a===null&&(a=z(o,"preload-code")),r===null&&(r=z(o,"preload-data")),t===null&&(t=z(o,"keepfocus")),n===null&&(n=z(o,"noscroll")),i===null&&(i=z(o,"reload")),s===null&&(s=z(o,"replacestate")),o=kt(o);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:st[a??"off"],preload_data:st[r??"off"],keepfocus:l(t),noscroll:l(n),reload:l(i),replace_state:l(s)}}function it(e){const t=Ke(e);let n=!0;function a(){n=!0,t.update(s=>s)}function r(s){n=!1,t.set(s)}function i(s){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&s(o=l)})}return{notify:a,set:r,subscribe:i}}const Et={v:C};function on(){const{set:e,subscribe:t}=Ke(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${nn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const s=(await r.json()).version!==rn;return s&&(e(!0),Et.v(),clearTimeout(n)),s}catch{return!1}}return{subscribe:t,check:a}}function Ae(e,t,n){return e.origin!==Ue||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pn(e){}const Rt=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Rt];const sn=new Set([...Rt]);[...sn];function ln(e){return e.filter(t=>t!=null)}function me(e,t){return e+"/"+t}function We(e){return e instanceof Me||e instanceof Fe?e.status:500}function cn(e){return e instanceof Fe?e.text:"Internal Error"}let R,ee,je;const fn=at.toString().includes("$$")||/function \w+\(\) \{\}/.test(at.toString()),lt="a:";var oe,se,ie,le,ce,fe,ue,de,gt,he,mt,pe,_t;fn?(R={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(lt)},ee={current:null},je={current:!1}):(R=new(gt=class{constructor(){A(this,oe,T({}));A(this,se,T(null));A(this,ie,T(null));A(this,le,T({}));A(this,ce,T({id:null}));A(this,fe,T({}));A(this,ue,T(-1));A(this,de,T(new URL(lt)))}get data(){return I(y(this,oe))}set data(t){O(y(this,oe),t)}get form(){return I(y(this,se))}set form(t){O(y(this,se),t)}get error(){return I(y(this,ie))}set error(t){O(y(this,ie),t)}get params(){return I(y(this,le))}set params(t){O(y(this,le),t)}get route(){return I(y(this,ce))}set route(t){O(y(this,ce),t)}get state(){return I(y(this,fe))}set state(t){O(y(this,fe),t)}get status(){return I(y(this,ue))}set status(t){O(y(this,ue),t)}get url(){return I(y(this,de))}set url(t){O(y(this,de),t)}},oe=new WeakMap,se=new WeakMap,ie=new WeakMap,le=new WeakMap,ce=new WeakMap,fe=new WeakMap,ue=new WeakMap,de=new WeakMap,gt),ee=new(mt=class{constructor(){A(this,he,T(null))}get current(){return I(y(this,he))}set current(t){O(y(this,he),t)}},he=new WeakMap,mt),je=new(_t=class{constructor(){A(this,pe,T(!1))}get current(){return I(y(this,pe))}set current(t){O(y(this,pe),t)}},pe=new WeakMap,_t),Et.v=()=>je.current=!0);function un(e){Object.assign(R,e)}const dn=new Set(["icon","shortcut icon","apple-touch-icon"]);let J=null;const N=wt(yt)??{},te=wt(vt)??{},j={url:it({}),page:it({}),navigating:Ke(null),updated:on()};function Je(e){N[e]=B()}function hn(e,t){let n=e+1;for(;N[n];)delete N[n],n+=1;for(n=t+1;te[n];)delete te[n],n+=1}function ne(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(C)}async function xt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(U||"/");e&&await e.update()}}let Ye,De,ye,P,Ve,S;const be=[],ke=[];let v=null;function Se(){var e;(e=v==null?void 0:v.fork)==null||e.then(t=>t==null?void 0:t.discard()),v=null}const _e=new Map,Lt=new Set,pn=new Set,Q=new Set;let _={branch:[],error:null,url:null},Ut=!1,Ee=!1,ct=!0,re=!1,Y=!1,At=!1,Xe=!1,Tt,k,L,V;const Re=new Set,ft=new Map,ut=new Map;async function Nn(e,t,n){var i,s,o,l;globalThis.__sveltekit_chon6g&&(globalThis.__sveltekit_chon6g.query,globalThis.__sveltekit_chon6g.prerender),document.URL!==location.href&&(location.href=location.href),S=e,await((s=(i=e.hooks).init)==null?void 0:s.call(i)),Ye=tn(e),P=document.documentElement,Ve=t,De=e.nodes[0],ye=e.nodes[1],De(),ye(),k=(o=history.state)==null?void 0:o[F],L=(l=history.state)==null?void 0:l[Z],k||(k=L=Date.now(),history.replaceState({...history.state,[F]:k,[Z]:L},""));const a=N[k];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Ln(Ve,n)):(await G({type:"enter",url:He(S.hash?Tn(new URL(location.href)):location.href),replace_state:!0}),r()),xn()}function gn(){be.length=0,Xe=!1}function It(e){ke.some(t=>t==null?void 0:t.snapshot)&&(te[e]=ke.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function Ot(e){var t;(t=te[e])==null||t.forEach((n,a)=>{var r,i;(i=(r=ke[a])==null?void 0:r.snapshot)==null||i.restore(n)})}function dt(){Je(k),ot(yt,N),It(L),ot(vt,te)}async function Pt(e,t,n,a){let r,i;t.invalidateAll&&Se(),await G({type:"goto",url:He(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{if(t.invalidateAll){Xe=!0,r=new Set;for(const[s,o]of ft)for(const l of o.keys())r.add(me(s,l));i=new Set;for(const[s,o]of ut)for(const l of o.keys())i.add(me(s,l))}t.invalidate&&t.invalidate.forEach(Rn)}}),t.invalidateAll&&we().then(we).then(()=>{for(const[s,o]of ft)for(const[l,{resource:c}]of o)r!=null&&r.has(me(s,l))&&c.refresh();for(const[s,o]of ut)for(const[l,{resource:c}]of o)i!=null&&i.has(me(s,l))&&c.reconnect()})}async function mn(e){if(e.id!==(v==null?void 0:v.id)){Se();const t={};Re.add(t),v={id:e.id,token:t,promise:Ct({...e,preload:t}).then(n=>(Re.delete(t),n.type==="loaded"&&n.state.error&&Se(),n)),fork:null}}return v.promise}async function Ne(e){var n;const t=(n=await Te(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(a=>a[1]()))}async function $t(e,t,n){var i;const a={params:_.params,route:{id:((i=_.route)==null?void 0:i.id)??null},url:new URL(location.href)};_={...e.state,nav:a};const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(R,e.props.page),Tt=new S.root({target:t,props:{...e.props,stores:j,components:ke},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ot(L),n){const s={from:null,to:{...a,scroll:N[k]??B()},willUnload:!1,type:"enter",complete:Promise.resolve()};Q.forEach(o=>o(s))}Ee=!0}async function xe({url:e,params:t,branch:n,errors:a,status:r,error:i,route:s,form:o}){let l="never";if(U&&(e.pathname===U||e.pathname===U+"/"))l="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(l=f.slash);e.pathname=Kt(e.pathname,l),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:i,route:s},props:{constructors:ln(n).map(f=>f.node.component),page:nt(R)}};o!==void 0&&(c.props.form=o);let d={},u=!R,w=0;for(let f=0;f<Math.max(n.length,_.branch.length);f+=1){const m=n[f],h=_.branch[f];(m==null?void 0:m.data)!==(h==null?void 0:h.data)&&(u=!0),m&&(d={...d,...m.data},u&&(c.props[`data_${w}`]=d),w+=1)}return(!_.url||e.href!==_.url.href||_.error!==i||o!==void 0&&o!==R.form||u)&&(c.props.page={error:i,params:t,route:{id:(s==null?void 0:s.id)??null},state:{},status:r,url:new URL(e),form:o??null,data:u?d:R.data}),c}async function Qe({loader:e,parent:t,url:n,params:a,route:r,server_data_node:i}){var c,d;let s=null;const o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();return{node:l,loader:e,server:i,universal:(c=l.universal)!=null&&c.load?{type:"data",data:s,uses:o}:null,data:s??(i==null?void 0:i.data)??null,slash:((d=l.universal)==null?void 0:d.trailingSlash)??(i==null?void 0:i.slash)}}function _n(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const i=Ee?Jt(a,r.href,t):Wt(a,t);return{resolved:r,promise:i}}function wn(e,t,n,a,r,i){if(Xe)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const s of r.search_params)if(a.has(s))return!0;for(const s of r.params)if(i[s]!==_.params[s])return!0;for(const s of r.dependencies)if(be.some(o=>o(new URL(s))))return!0;return!1}function Ze(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function vn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),i=t.searchParams.getAll(a);r.every(s=>i.includes(s))&&i.every(s=>r.includes(s))&&n.delete(a)}return n}function yn({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:nt(R),constructors:[]}}}async function Ct({id:e,invalidating:t,url:n,params:a,route:r,preload:i}){if((v==null?void 0:v.id)===e)return Re.delete(v.token),v.promise;const{errors:s,layouts:o,leaf:l}=r,c=[...o,l];s.forEach(h=>h==null?void 0:h().catch(C)),c.forEach(h=>h==null?void 0:h[1]().catch(C));const d=_.url?e!==Le(_.url):!1,u=_.route?r.id!==_.route.id:!1,w=vn(_.url,n);let p=!1;const f=c.map(async(h,g)=>{var $;if(!h)return;const b=_.branch[g];return h[1]===(b==null?void 0:b.loader)&&!wn(p,u,d,w,($=b.universal)==null?void 0:$.uses,a)?b:(p=!0,Qe({loader:h[1],url:n,params:a,route:r,parent:async()=>{var ge;const q={};for(let K=0;K<g;K+=1)Object.assign(q,(ge=await f[K])==null?void 0:ge.data);return q},server_data_node:Ze(h[0]?{type:"skip"}:null,h[0]?b==null?void 0:b.server:void 0)}))});for(const h of f)h.catch(C);const m=[];for(let h=0;h<c.length;h+=1)if(c[h])try{m.push(await f[h])}catch(g){if(g instanceof ze)return{type:"redirect",location:g.location};if(Re.has(i))return yn({error:await ae(g,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let b=We(g),x;if(g instanceof Me)x=g.body;else{if(await j.updated.check())return await xt(),await ne(n);x=await ae(g,{params:a,url:n,route:{id:r.id}})}const $=await bn(h,m,s);return $?xe({url:n,params:a,branch:m.slice(0,$.idx).concat($.node),errors:s,status:b,error:x,route:r}):await Nt(n,{id:r.id},x,b)}else m.push(void 0);return xe({url:n,params:a,branch:m,errors:s,status:200,error:null,route:r,form:t?void 0:null})}async function bn(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function et({status:e,error:t,url:n,route:a}){const r={};let i=null;try{const s=await Qe({loader:De,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Ze(i)}),o={node:await ye(),loader:ye,universal:null,server:null,data:null};return xe({url:n,params:r,branch:[s,o],status:e,error:t,errors:[],route:null})}catch(s){if(s instanceof ze)return Pt(new URL(s.location,location.href),{},0);throw s}}async function kn(e){const t=e.href;if(_e.has(t))return _e.get(t);let n;try{const a=(async()=>{let r=await S.hooks.reroute({url:new URL(e),fetch:async(i,s)=>_n(i,s,e).promise})??e;if(typeof r=="string"){const i=new URL(e);S.hash?i.hash=r:i.pathname=r,r=i}return r})();_e.set(t,a),n=await a}catch{_e.delete(t);return}return n}async function Te(e,t){if(e&&!Ae(e,U,S.hash)){const n=await kn(e);if(!n)return;const a=Sn(n);for(const r of Ye){const i=r.exec(a);if(i)return{id:Le(e),invalidating:t,route:r,params:zt(i),url:e}}}}function Sn(e){return Mt(S.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(U.length))||"/"}function Le(e){return(S.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function jt({url:e,type:t,intent:n,delta:a,event:r,scroll:i}){let s=!1;const o=tt(_,n,e,t,i??null);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const l={...o.navigation,cancel:()=>{s=!0,o.reject(new Error("navigation cancelled"))}};return re||Lt.forEach(c=>c(l)),s?null:o}async function G({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s={},redirect_count:o=0,nav_token:l={},accept:c=C,block:d=C,event:u}){var K;const w=V;V=l;const p=await Te(t,!1),f=e==="enter"?tt(_,p,t,e):jt({url:t,type:e,delta:n==null?void 0:n.delta,intent:p,scroll:n==null?void 0:n.scroll,event:u});if(!f){d(),V===l&&(V=w);return}const m=k,h=L;c(),re=!0,Ee&&f.navigation.type!=="enter"&&j.navigating.set(ee.current=f.navigation);let g=p&&await Ct(p);if(!g){if(Ae(t,U,S.hash))return await ne(t,i);g=await Nt(t,{id:null},await ae(new Fe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,i)}if(t=(p==null?void 0:p.url)||t,V!==l)return f.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(o<20){await G({type:e,url:new URL(g.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s,redirect_count:o+1,nav_token:l}),f.fulfil(void 0);return}g=await et({status:500,error:await ae(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else g.props.page.status>=400&&await j.updated.check()&&(await xt(),await ne(t,i));if(gn(),Je(m),It(h),g.props.page.url.pathname!==t.pathname&&(t.pathname=g.props.page.url.pathname),s=n?n.state:s,!n){const E=i?0:1,H={[F]:k+=E,[Z]:L+=E,[bt]:s};(i?history.replaceState:history.pushState).call(history,H,"",t),i||hn(k,L)}const b=p&&(v==null?void 0:v.id)===p.id?v.fork:null;v!=null&&v.fork&&!b&&Se(),v=null,g.props.page.state=s;let x;if(Ee){const E=(await Promise.all(Array.from(pn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(E.length>0){let W=function(){E.forEach(Oe=>{Q.delete(Oe)})};E.push(W),E.forEach(Oe=>{Q.add(Oe)})}const H=f.navigation.to;_={...g.state,nav:{params:H.params,route:H.route,url:H.url}},g.props.page&&(g.props.page.url=t);const Ie=b&&await b;Ie?x=Ie.commit():(J=null,Tt.$set(g.props),J&&Object.assign(g.props.page,J),un(g.props.page),x=(K=Bt)==null?void 0:K()),At=!0}else await $t(g,Ve,!1);const{activeElement:$}=document;await x,await we(),await we();let q=null;if(ct){const E=n?n.scroll:r?B():null;E?scrollTo(E.x,E.y):(q=t.hash&&document.getElementById(qt(t)))?q.scrollIntoView():scrollTo(0,0)}const ge=document.activeElement!==$&&document.activeElement!==document.body;!a&&!ge&&An(t,!q),ct=!0,g.props.page&&(J&&Object.assign(g.props.page,J),Object.assign(R,g.props.page)),re=!1,e==="popstate"&&Ot(L),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=B()),Q.forEach(E=>E(f.navigation)),j.navigating.set(ee.current=null)}async function Nt(e,t,n,a,r){return e.origin===Ue&&e.pathname===location.pathname&&!Ut?await et({status:a,error:n,url:e,route:t}):await ne(e,r)}function En(){let e,t={element:void 0,href:void 0},n;P.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{i(l,D.hover)},20)});function a(o){o.defaultPrevented||i(o.composedPath()[0],D.tap)}P.addEventListener("mousedown",a),P.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(Ne(new URL(l.target.href)),r.unobserve(l.target))},{threshold:0});async function i(o,l){const c=St(o,P),d=c===t.element&&(c==null?void 0:c.href)===t.href&&l>=n;if(!c||d)return;const{url:u,external:w,download:p}=qe(c,U,S.hash);if(w||p)return;const f=ve(c),m=u&&Le(_.url)===Le(u);if(!(f.reload||m))if(l<=f.preload_data){t={element:c,href:c.href},n=D.tap;const h=await Te(u,!1);if(!h)return;mn(h)}else l<=f.preload_code&&(t={element:c,href:c.href},n=l,Ne(u))}function s(){r.disconnect();for(const o of P.querySelectorAll("a")){const{url:l,external:c,download:d}=qe(o,U,S.hash);if(c||d)continue;const u=ve(o);u.reload||(u.preload_code===D.viewport&&r.observe(o),u.preload_code===D.eager&&Ne(l))}}Q.add(s),s()}function ae(e,t){if(e instanceof Me)return e.body;const n=We(e),a=cn(e);return S.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function qn(e,t={}){return e=new URL(He(e)),e.origin!==Ue?Promise.reject(new Error("goto: invalid URL")):Pt(e,t,0)}function Rn(e){if(typeof e=="function")be.push(e);else{const{href:t}=new URL(e,location.href);be.push(n=>n.href===t)}}function xn(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(dt(),!re){const r=tt(_,void 0,null,"leave"),i={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Lt.forEach(s=>s(i))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&dt()}),(t=navigator.connection)!=null&&t.saveData||En(),P.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=St(n.composedPath()[0],P);if(!a)return;const{url:r,external:i,target:s,download:o}=qe(a,U,S.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const l=ve(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[d,u]=(S.hash?r.hash.replace(/^#/,""):r.href).split("#"),w=d===$e(location);if(i||l.reload&&(!w||!u)){jt({url:r,type:"link",event:n})?re=!0:n.preventDefault();return}if(u!==void 0&&w){const[,p]=_.url.href.split("#");if(p===u){if(n.preventDefault(),u===""||u==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const f=a.ownerDocument.getElementById(decodeURIComponent(u));f&&(f.scrollIntoView(),f.focus())}return}if(Y=!0,Je(k),e(r),!l.replace_state)return;Y=!1}n.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await G({type:"link",url:r,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??r.href===location.href,event:n})}),P.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const o=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(Ae(o,U,!1))return;const l=n.target,c=ve(l);if(c.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(l,r);o.search=new URLSearchParams(d).toString(),G({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Be){if((a=n.state)!=null&&a[F]){const r=n.state[F];if(V={},r===k)return;const i=N[r],s=n.state[bt]??{},o=new URL(n.state[an]??location.href),l=n.state[Z],c=_.url?$e(location)===$e(_.url):!1;if(l===L&&(At||c)){s!==R.state&&(R.state=s),e(o),N[k]=B(),i&&scrollTo(i.x,i.y),k=r;return}const u=r-k;await G({type:"popstate",url:o,popped:{state:s,scroll:i,delta:u},accept:()=>{k=r,L=l},block:()=>{history.go(-u)},nav_token:V,event:n})}else if(!Y){const r=new URL(location.href);e(r),S.hash&&location.reload()}}}),addEventListener("hashchange",()=>{Y&&(Y=!1,history.replaceState({...history.state,[F]:++k,[Z]:L},"",location.href))});for(const n of document.querySelectorAll("link"))dn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&j.navigating.set(ee.current=null)});function e(n){_.url=R.url=n,j.page.set(nt(R)),j.page.notify()}}async function Ln(e,{status:t=200,error:n,node_ids:a,params:r,route:i,server_route:s,data:o,form:l}){Ut=!0;const c=new URL(location.href);let d;({params:r={},route:i={id:null}}=await Te(c,!1)||{}),d=Ye.find(({id:p})=>p===i.id);let u,w=!0;try{const p=a.map(async(m,h)=>{const g=o[h];return g!=null&&g.uses&&(g.uses=Un(g.uses)),Qe({loader:S.nodes[m],url:c,params:r,route:i,parent:async()=>{const b={};for(let x=0;x<h;x+=1)Object.assign(b,(await p[x]).data);return b},server_data_node:Ze(g)})}),f=await Promise.all(p);if(d){const m=d.layouts;for(let h=0;h<m.length;h++)m[h]||f.splice(h,0,void 0)}u=await xe({url:c,params:r,branch:f,status:t,error:n,errors:d==null?void 0:d.errors,form:l,route:d??null})}catch(p){if(p instanceof ze){await ne(new URL(p.location,location.href));return}u=await et({status:We(p),error:await ae(p,{url:c,params:r,route:i}),url:c,route:i}),e.textContent="",w=!1}finally{}u.props.page&&(u.props.page.state={}),await $t(u,e,w)}function Un(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Be=!1;function An(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=qt(e);if(a&&document.getElementById(a)){const{x:i,y:s}=B();setTimeout(()=>{const o=history.state;Be=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(o,"",e),t&&scrollTo(i,s),Be=!1})}else{const i=document.body,s=i.getAttribute("tabindex");i.tabIndex=-1,i.focus({preventScroll:!0,focusVisible:!1}),s!==null?i.setAttribute("tabindex",s):i.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const i=[];for(let s=0;s<r.rangeCount;s+=1)i.push(r.getRangeAt(s));setTimeout(()=>{if(r.rangeCount===i.length){for(let s=0;s<r.rangeCount;s+=1){const o=i[s],l=r.getRangeAt(s);if(o.commonAncestorContainer!==l.commonAncestorContainer||o.startContainer!==l.startContainer||o.endContainer!==l.endContainer||o.startOffset!==l.startOffset||o.endOffset!==l.endOffset)return}r.removeAllRanges()}})}}}function tt(e,t,n,a,r=null){var c,d;let i,s;const o=new Promise((u,w)=>{i=u,s=w});return o.catch(C),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url,scroll:B()},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((d=t==null?void 0:t.route)==null?void 0:d.id)??null},url:n,scroll:r},willUnload:!t,type:a,complete:o},fulfil:i,reject:s}}function nt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Tn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function qt(e){let t;if(S.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Nn as a,qn as g,Pn as l,R as p,j as s};
 
 
web/sveltekit/build/_app/immutable/chunks/CAMdvC-O.js DELETED
@@ -1 +0,0 @@
1
- const s="https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",t="https://basemaps.cartocdn.com/gl/positron-gl-style/style.json";export{t as P,s as a};
 
 
web/sveltekit/build/_app/immutable/chunks/CFg_rPYf.js DELETED
@@ -1,37 +0,0 @@
1
- import{k as De,o as Ie,a as c,f as b,s as f,t as _e,d as Ce,c as xe,e as Ne,b as me}from"./CWw6qgC_.js";import{h as ce,n as Le,j as we,bd as ze,d as Oe,a3 as He,aW as je,b7 as Ye,k as We,b as Ue,e as Ae,i as ke,a0 as Ge,av as Ke,p as X,t as C,a as J,s as n,c as r,r as t,aR as re,o as a,al as q,am as ie,ai as Qe,be as Ve,a5 as pe,a4 as Se,f as ee}from"./BTUA7_xE.js";import{B as Ze,i as L}from"./Bd-v_9Ud.js";import{e as te,i as de}from"./25_y8TFd.js";import{s as y,a as ue,b as oe,c as Xe,C as Je}from"./B0XoTt7U.js";import{T as ge,c as $e,b as et,d as Re}from"./BatqQaKj.js";import{b as tt,_ as at}from"./CXQd8Y6F.js";import{p as ne}from"./CW0zSL4D.js";import{a as rt}from"./CAMdvC-O.js";function st(R,e,w,m,M,i){let h=ce;ce&&Le();var d=null;ce&&we.nodeType===ze&&(d=we,Le());var _=ce?we:R,u=new Ze(_,!1);Oe(()=>{const S=e()||null;var x=S==="svg"?Ye:void 0;if(S===null){u.ensure(null,null);return}return u.ensure(S,o=>{if(S){if(d=ce?d:je(S,x),De(d,d),m){ce&&Ie(S)&&d.append(document.createComment(""));var s=ce?We(d):d.appendChild(Ue());ce&&(s===null?Ae(!1):ke(s)),m(d,s)}Ge.nodes.end=d,o.before(d)}ce&&ke(o)}),()=>{}},He),Ke(()=>{}),h&&(Ae(!0),ke(_))}var it=b('<a target="_blank" rel="noopener noreferrer"> </a>'),nt=b('<li><span class="citation-num"> </span> <div class="citation-body"><div class="citation-line-1"><!> <span class="citation-source"> </span> <span class="citation-vintage"> </span></div> <div class="citation-title"><!></div> <div class="citation-meta"><span class="citation-docid"> </span> <span class="citation-retrieved"> </span></div></div></li>'),lt=b(`<aside class="citation-drawer svelte-1p339fd" aria-label="Citations"><div class="citation-drawer-head"><span class="section-label"> </span> <span class="citation-drawer-meta">live · primary sources</span></div> <ol class="citation-list"></ol> <div class="citation-drawer-foot"><span class="section-label">Trust signals</span> <p class="citation-foot-copy">All foundation models Apache-2.0. All data from public-record federal,
2
- state, and city sources. No commercial APIs contacted at runtime.</p></div></aside>`);function Ar(R,e){X(e,!0);let w=q(()=>Object.values(e.citations).sort((_,u)=>_.n-u.n));var m=lt(),M=r(m),i=r(M),h=r(i);t(i),re(2),t(M);var d=n(M,2);te(d,21,()=>a(w),_=>_.id,(_,u)=>{var S=nt();let x;var o=r(S),s=r(o);t(o);var l=n(o,2),p=r(l),N=r(p);ge(N,{get tier(){return a(u).tier},size:10,get color(){return`var(--tier-${a(u).tier??""})`}});var g=n(N,2),v=r(g,!0);t(g);var k=n(g,2),B=r(k);t(k),t(p);var E=n(p,2),I=r(E);{var H=F=>{var Y=it(),K=r(Y,!0);t(Y),C(()=>{y(Y,"href",a(u).url),f(K,a(u).title)}),c(F,Y)},D=q(()=>a(u).url&&a(u).url.startsWith("http")),z=F=>{var Y=_e();C(()=>f(Y,a(u).title)),c(F,Y)};L(I,F=>{a(D)?F(H):F(z,-1)})}t(E);var O=n(E,2),W=r(O),P=r(W,!0);t(W);var T=n(W,2),A=r(T);t(T),t(O),t(l),t(S),C(()=>{y(S,"id",`cite-${a(u).id??""}`),x=ue(S,1,"citation-item",null,x,{"is-active":$e.active===a(u).id}),f(s,`[${a(u).n??""}]`),f(v,a(u).source),f(B,`v. ${a(u).vintage??""}`),f(P,a(u).docId),f(A,`retr. ${a(u).retrieved??""}`)}),c(_,S)}),t(d),re(2),t(m),C(()=>f(h,`Citations · ${a(w).length??""}`)),c(R,m),J()}const Fe=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
3
- <rect width="12" height="12" fill="rgba(42,111,168,0.18)"/>
4
- <g stroke="#2A6FA8" stroke-width="1.4">
5
- <line x1="-2" y1="2" x2="14" y2="-14"/>
6
- <line x1="-2" y1="8" x2="14" y2="-8"/>
7
- <line x1="-2" y1="14" x2="14" y2="-2"/>
8
- <line x1="-2" y1="20" x2="14" y2="4"/>
9
- </g>
10
- </svg>`,ot=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
11
- <rect width="12" height="12" fill="rgba(42,111,168,0.16)"/>
12
- <g stroke="#2A6FA8" stroke-width="1.1">
13
- <line x1="-2" y1="6" x2="14" y2="-10"/>
14
- <line x1="-2" y1="14" x2="14" y2="-2"/>
15
- <line x1="-2" y1="22" x2="14" y2="6"/>
16
- </g>
17
- </svg>`;async function dt(R,e){const w=new Blob([R],{type:"image/svg+xml"}),m=URL.createObjectURL(w);try{return await new Promise((i,h)=>{const d=new Image(e,e);d.onload=()=>i(d),d.onerror=_=>h(_),d.src=m})}finally{URL.revokeObjectURL(m)}}async function vt(R){const e=[["syn-stripe-45",Fe,12],["syn-stripe-45-2x",Fe,24],["syn-stripe-45-low",ot,12]];for(const[w,m,M]of e)if(!R.hasImage(w))try{const i=await dt(m,M);R.addImage(w,i,{pixelRatio:M/12})}catch(i){console.warn(`syn-stripe registration failed for ${w}`,i)}}var ct=b('<span class="link-badge svelte-wk2bu4" aria-hidden="true"> </span>'),ut=b('<div class="map-frame svelte-wk2bu4"><div role="application" class="rip-map-container svelte-wk2bu4"></div> <!></div>');function Rr(R,e){X(e,!0);let w=ne(e,"activeLayers",19,()=>({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),m=ne(e,"linkedKey",3,null),M=Se(null),i=null,h=Se(!1);const d={type:"FeatureCollection",features:[]};function _(l,p){if(!i||!a(h))return;const N=i.getSource(l);N&&N.setData(p??d)}function u(l,p){!i||!a(h)||i.getLayer(l)&&i.setLayoutProperty(l,"visibility",p?"visible":"none")}ie(()=>{_("sandy-empirical",e.sandyEmpirical)}),ie(()=>{_("dep-modeled",e.depModeled)}),ie(()=>{_("syn-prior",e.syntheticPrior)}),ie(()=>{_("proxy-311",e.proxy311)}),ie(()=>{_("register-points",e.registerPoints)}),ie(()=>{_("register-polygons",e.registerPolygons)}),ie(()=>{_("terramind-lulc",e.terramindLulc)}),ie(()=>{_("terramind-buildings",e.terramindBuildings)}),ie(()=>{_("prithvi-live",e.prithviLive)}),ie(()=>{_("ida-hwm",e.idaHwm)}),ie(()=>{u("tier-empirical-fill",w().empirical),u("tier-empirical-line",w().empirical),u("ida-hwm-circle",w().empirical),u("tier-modeled-fill",w().modeled),u("tier-modeled-line",w().modeled),u("tier-synthetic-fill",w().synthetic),u("tier-synthetic-line",w().synthetic),u("terramind-lulc-fill",w().synthetic),u("terramind-lulc-line",w().synthetic),u("terramind-buildings-fill",w().synthetic),u("terramind-buildings-line",w().synthetic),u("prithvi-live-fill",w().modeled),u("prithvi-live-line",w().modeled),u("tier-proxy-dots",w().proxy)}),ie(()=>{!i||!a(h)||i.flyTo({center:[e.address.lon,e.address.lat],zoom:15,essential:!0})}),Qe(async()=>{if(!a(M))return;const l=await at(()=>import("./D4L2lGt1.js").then(p=>p.m),[],import.meta.url);i=new l.Map({container:a(M),style:rt,center:[e.address.lon,e.address.lat],zoom:15,attributionControl:{compact:!0}}),i.addControl(new l.NavigationControl({visualizePitch:!1}),"top-right"),i.addControl(new l.ScaleControl({maxWidth:100,unit:"imperial"}),"bottom-left"),i.on("load",()=>{if(!i)return;window.__riprapMap=i,vt(i);const p=()=>({type:"FeatureCollection",features:[]});i.addSource("sandy-empirical",{type:"geojson",data:e.sandyEmpirical??p()}),i.addSource("dep-modeled",{type:"geojson",data:e.depModeled??p()}),i.addSource("syn-prior",{type:"geojson",data:e.syntheticPrior??p()}),i.addSource("proxy-311",{type:"geojson",data:e.proxy311??p()}),i.addSource("register-points",{type:"geojson",data:e.registerPoints??p()}),i.addSource("register-polygons",{type:"geojson",data:e.registerPolygons??p()}),i.addSource("terramind-lulc",{type:"geojson",data:e.terramindLulc??p()}),i.addSource("terramind-buildings",{type:"geojson",data:e.terramindBuildings??p()}),i.addSource("prithvi-live",{type:"geojson",data:e.prithviLive??p()}),i.addSource("ida-hwm",{type:"geojson",data:e.idaHwm??p()}),i.addSource("queried-address",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:[e.address.lon,e.address.lat]},properties:{label:e.address.label}}]}}),i.addLayer({id:"tier-empirical-fill",type:"fill",source:"sandy-empirical",paint:{"fill-color":"#0B5394","fill-opacity":.4}}),i.addLayer({id:"tier-empirical-line",type:"line",source:"sandy-empirical",paint:{"line-color":"#0B5394","line-width":1.5}}),i.addLayer({id:"tier-modeled-fill",type:"fill",source:"dep-modeled",paint:{"fill-color":"#2A6FA8","fill-opacity":.25}}),i.addLayer({id:"tier-modeled-line",type:"line",source:"dep-modeled",paint:{"line-color":"#2A6FA8","line-width":1.5}}),i.addLayer({id:"tier-synthetic-fill",type:"fill",source:"syn-prior",paint:{"fill-pattern":"syn-stripe-45","fill-opacity":.65}}),i.addLayer({id:"tier-synthetic-line",type:"line",source:"syn-prior",paint:{"line-color":"#2A6FA8","line-width":1.5,"line-dasharray":[4,3]}}),i.addLayer({id:"tier-proxy-dots",type:"circle",source:"proxy-311",paint:{"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1.25,"circle-radius":["interpolate",["linear"],["coalesce",["get","count"],1],1,3,5,6,15,9,30,12]}}),i.addLayer({id:"terramind-lulc-fill",type:"fill",source:"terramind-lulc",paint:{"fill-color":["get","fill_color"],"fill-opacity":.25}}),i.addLayer({id:"terramind-lulc-line",type:"line",source:"terramind-lulc",paint:{"line-color":["get","fill_color"],"line-width":.75,"line-opacity":.45,"line-dasharray":[3,2]}}),i.addLayer({id:"terramind-buildings-fill",type:"fill",source:"terramind-buildings",paint:{"fill-color":"#7C3AED","fill-opacity":.15}}),i.addLayer({id:"terramind-buildings-line",type:"line",source:"terramind-buildings",paint:{"line-color":"#7C3AED","line-width":1,"line-opacity":.6,"line-dasharray":[2,2]}}),i.addLayer({id:"prithvi-live-fill",type:"fill",source:"prithvi-live",paint:{"fill-color":"#0D9488","fill-opacity":.2}}),i.addLayer({id:"prithvi-live-line",type:"line",source:"prithvi-live",paint:{"line-color":"#0D9488","line-width":1,"line-opacity":.55}}),i.addLayer({id:"register-polygons-fill",type:"fill",source:"register-polygons",paint:{"fill-color":"#0B5394","fill-opacity":["interpolate",["linear"],["coalesce",["get","pct_inside_sandy"],0],0,.1,25,.2,50,.32,75,.45]}}),i.addLayer({id:"register-polygons-line",type:"line",source:"register-polygons",paint:{"line-color":"#0B5394","line-width":1,"line-opacity":.85}}),i.addLayer({id:"ida-hwm-circle",type:"circle",source:"ida-hwm",paint:{"circle-color":"#D97706","circle-stroke-color":"#F4F6F9","circle-stroke-width":1.5,"circle-radius":["interpolate",["linear"],["coalesce",["get","height_above_gnd_ft"],.5],0,5,1,7,3,9,5,12],"circle-opacity":.92}}),i.on("mouseenter","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","ida-hwm-circle",N=>{var W;if(!i||!((W=N.features)!=null&&W.length))return;const g=N.features[0],v=g.properties??{},k=String(v.site_description??"?"),B=v.elev_ft!=null?`${Number(v.elev_ft).toFixed(1)} ft NAVD88`:"—",E=v.height_above_gnd_ft!=null?`${Number(v.height_above_gnd_ft).toFixed(2)} ft above ground`:"—",I=String(v.hwm_quality??""),H=v.distance_m!=null?`${v.distance_m} m from query`:"",D=`
18
- <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px; max-width: 220px;">
19
- <div style="font-weight: 600; color: #D97706; font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;">Ida 2021 HWM · USGS</div>
20
- <div style="margin-top: 4px; color: #0F172A; font-size: 12px;">${k}</div>
21
- <div style="margin-top: 6px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #6B6B6B;">
22
- elev: ${B}<br>
23
- mark: ${E}<br>
24
- ${I?`quality: ${I}<br>`:""}
25
- ${H}
26
- </div>
27
- </div>`,z=new l.Popup({closeButton:!0,offset:12}),O=g.geometry.coordinates;z.setLngLat(O).setHTML(D).addTo(i)}),i.addLayer({id:"register-points-circle",type:"circle",source:"register-points",paint:{"circle-color":["case",["==",["get","inside_sandy_2012"],!0],"#0B5394","#6B6B6B"],"circle-stroke-color":"#F4F6F9","circle-stroke-width":1.25,"circle-radius":["match",["get","kind"],"subway",4,"school",5,"hospital",6,"nycha",7,4],"circle-opacity":.9}}),i.on("mouseenter","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","register-points-circle",N=>{var O;if(!i||!((O=N.features)!=null&&O.length))return;const g=N.features[0],v=g.properties??{},k=String(v.name??"?"),B=String(v.kind??"?"),E=v.inside_sandy_2012===!0||v.inside_sandy_2012==="true",I=String(v.doc_id??""),H=`
28
- <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px;">
29
- <div style="font-weight: 600; color: #0F172A;">${k}</div>
30
- <div style="color: #6B6B6B; font-size: 11px; margin-top: 2px;">${B}</div>
31
- <div style="margin-top: 6px;">
32
- <span style="font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: ${E?"#0B5394":"#6B6B6B"};">
33
- inside_sandy_2012=${E}
34
- </span>
35
- </div>
36
- ${I?`<div style="margin-top: 4px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #005EA2;">[${I}]</div>`:""}
37
- </div>`,D=new l.Popup({closeButton:!0,offset:12}),z=g.geometry.coordinates;D.setLngLat(z).setHTML(H).addTo(i)}),i.addLayer({id:"queried-halo",type:"circle",source:"queried-address",paint:{"circle-color":"rgba(209, 124, 0, 0.20)","circle-radius":16}}),i.addLayer({id:"queried-pin",type:"circle",source:"queried-address",paint:{"circle-color":"#005EA2","circle-stroke-color":"#F4F6F9","circle-stroke-width":2,"circle-radius":7}}),i.addLayer({id:"queried-label",type:"symbol",source:"queried-address",layout:{"text-field":["get","label"],"text-font":["Open Sans Semibold","Arial Unicode MS Bold"],"text-size":12,"text-offset":[0,-1.6],"text-anchor":"bottom"},paint:{"text-color":"#0F172A","text-halo-color":"#F4F6F9","text-halo-width":1.5}}),pe(h,!0)})}),Ve(()=>{i==null||i.remove(),i=null});var S=ut(),x=r(S);tt(x,l=>pe(M,l),()=>a(M));var o=n(x,2);{var s=l=>{var p=ct(),N=r(p);t(p),C(()=>f(N,`linked: ${m()??""}`)),c(l,p)};L(o,l=>{m()&&l(s)})}t(S),C(()=>{y(S,"data-linked",m()??""),y(x,"aria-label",`Flood-exposure map for ${e.address.label??""}`)}),c(R,S),J()}const Be=["cornerstone","keystone","touchstone","lodestone","capstone"],Me={cornerstone:{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers"},keystone:{name:"Keystone",role:"the asset register",tag:"what's exposed"},touchstone:{name:"Touchstone",role:"the live observer",tag:"what's happening now"},lodestone:{name:"Lodestone",role:"the projector",tag:"what's coming"},capstone:{name:"Capstone",role:"the synthesizer",tag:"writes it all down with citations"}};var gt=b('<span class="layers-count svelte-1g2dety"> </span>'),ht=b('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">no map layers — see Findings cards</span></li>'),mt=b('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">not a map layer</span></li>'),ft=b('<span class="layers-state-dim svelte-1g2dety" title="Not yet wired to map source">off · catalog</span>'),yt=b('<li><span class="layers-glyph svelte-1g2dety" aria-hidden="true"><!></span> <span class="layers-text svelte-1g2dety"><span class="layers-label svelte-1g2dety"> </span> <span class="layers-meta svelte-1g2dety"> <!></span></span> <span class="layers-state svelte-1g2dety"><!></span></li>'),_t=b('<details open=""><summary class="svelte-1g2dety"><span class="layers-caret svelte-1g2dety" aria-hidden="true">▾</span> <span class="layers-stone-name svelte-1g2dety"> </span> <span class="layers-stone-tag svelte-1g2dety"> </span> <!></summary> <ul class="layers-list svelte-1g2dety"><!></ul></details>'),pt=b('<button type="button"><!> <span> </span> <span class="layers-master-state svelte-1g2dety"> </span></button>'),xt=b('<aside class="layers-panel svelte-1g2dety" aria-label="Map layers grouped by Stone"><div class="layers-head svelte-1g2dety"><span class="section-label">Layers · grouped by Stone</span></div> <!> <div class="layers-masters svelte-1g2dety" role="group" aria-label="Master tier toggles"><span class="section-label">Tier toggles</span> <div class="layers-master-row svelte-1g2dety"></div></div></aside>');function Fr(R,e){X(e,!0);const w={cornerstone:[{label:"Sandy Inundation Zone (2012)",source:"NYC OEM",tier:"empirical",wired:!0},{label:"FEMA / DEP scenarios",source:"FEMA · NYC DEP",tier:"modeled",wired:!0},{label:"Ida HWM points (2021)",source:"USGS STN",tier:"empirical",wired:!0},{label:"Microtopography (HAND/TWI)",source:"USGS 3DEP",tier:"proxy",wired:!1}],keystone:[{label:"MTA subway entrances",source:"MTA Open Data",tier:"empirical",wired:!0},{label:"NYCHA developments",source:"NYC OD phvi-damg",tier:"empirical",wired:!0},{label:"DOE schools",source:"NYC DOE Locations",tier:"empirical",wired:!0},{label:"DOH hospitals",source:"NYS DOH vn5v-hh5r",tier:"empirical",wired:!0},{label:"TerraMind Buildings (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!0}],touchstone:[{label:"311 flood complaints",source:"NYC 311",tier:"proxy",wired:!1},{label:"FloodNet sensors",source:"FloodNet NYC",tier:"proxy",wired:!0},{label:"TerraMind LULC (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!0},{label:"Prithvi-NYC-Pluvial flood pred.",source:"msradam/Prithvi-EO-2.0-NYC-Pluvial",tier:"modeled",wired:!0}],lodestone:[],capstone:[]};function m(S){return!!e.active[S.tier]}function M(S){return w[S].length}const i=[{k:"empirical",tier:"empirical",label:"EMP"},{k:"modeled",tier:"modeled",label:"MOD"},{k:"proxy",tier:"proxy",label:"PRX"},{k:"synthetic",tier:"synthetic",label:"SYN"}];var h=xt(),d=n(r(h),2);te(d,16,()=>Be,S=>S,(S,x)=>{var o=_t(),s=r(o),l=n(r(s),2),p=r(l,!0);t(l);var N=n(l,2),g=r(N);t(N);var v=n(N,2);{var k=O=>{var W=gt(),P=r(W,!0);t(W),C(T=>f(P,T),[()=>M(x)]),c(O,W)},B=q(()=>M(x)>0);L(v,O=>{a(B)&&O(k)})}t(s);var E=n(s,2),I=r(E);{var H=O=>{var W=ht();c(O,W)},D=O=>{var W=mt();c(O,W)},z=O=>{var W=xe(),P=ee(W);te(P,17,()=>w[x],de,(T,A)=>{var F=yt();let Y;var K=r(F),ae=r(K);ge(ae,{get tier(){return a(A).tier},size:11,get color(){return`var(--tier-${a(A).tier??""})`}}),t(K);var Q=n(K,2),Z=r(Q),le=r(Z,!0);t(Z);var j=n(Z,2),V=r(j),G=n(V);et(G,{get tier(){return a(A).tier},compact:!0}),t(j),t(Q);var U=n(Q,2),$=r(U);{var ve=se=>{var ye=ft();c(se,ye)},fe=se=>{var ye=_e("on");c(se,ye)},be=q(()=>m(a(A))),he=se=>{var ye=_e("off");c(se,ye)};L($,se=>{a(A).wired?a(be)?se(fe,1):se(he,-1):se(ve)})}t(U),t(F),C(()=>{Y=ue(F,1,"layers-row svelte-1g2dety",null,Y,{dim:!a(A).wired}),f(le,a(A).label),f(V,`${a(A).source??""} · `)}),c(T,F)}),c(O,W)};L(I,O=>{x==="lodestone"?O(H):x==="capstone"?O(D,1):O(z,-1)})}t(E),t(o),C(()=>{ue(o,1,`layers-group region-${x??""}`,"svelte-1g2dety"),f(p,Me[x].name),f(g,`— ${Me[x].tag??""}`)}),c(S,o)});var _=n(d,2),u=n(r(_),2);te(u,21,()=>i,S=>S.k,(S,x)=>{var o=pt();let s;var l=r(o);ge(l,{get tier(){return a(x).tier},size:11,get color(){return`var(--tier-${a(x).tier??""})`}});var p=n(l,2),N=r(p,!0);t(p);var g=n(p,2),v=r(g,!0);t(g),t(o),C(()=>{s=ue(o,1,"layers-master svelte-1g2dety",null,s,{"is-on":e.active[a(x).k]}),y(o,"aria-pressed",e.active[a(x).k]),f(N,a(x).label),f(v,e.active[a(x).k]?"ON":"OFF")}),Ne("click",o,()=>e.onToggle(a(x).k)),c(S,o)}),t(u),t(_),t(h),c(R,h),J()}Ce(["click"]);var bt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-silent svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> silent</span>',1),wt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-warn svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> warned</span>',1),kt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-err svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> errored</span>',1),St=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-notinvoked svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> not invoked</span>',1),Mt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> cache</span>',1),Ct=b('<div class="rh svelte-1vuwkv4"><span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> Stones</span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> fired</span> <!> <!> <!> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> </span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> wall-clock</span> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-total svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> registered</span></div>');function Nt(R,e){X(e,!0);function w(j){return j.flatMap(V=>V.children?[V,...w(V.children)]:[V])}let m=q(()=>e.stones.flatMap(j=>w(j.members))),M=q(()=>a(m).length),i=q(()=>a(m).filter(j=>j.status==="fired"||j.status==="warned").length),h=q(()=>a(m).filter(j=>j.status==="silent_by_design").length),d=q(()=>a(m).filter(j=>j.status==="warned").length),_=q(()=>a(m).filter(j=>j.status==="errored").length),u=q(()=>a(m).filter(j=>j.status==="not_invoked").length),S=q(()=>e.wallSeconds==null?"—":e.wallSeconds<1?`${Math.round(e.wallSeconds*1e3)}ms`:`${e.wallSeconds.toFixed(1)}s`);var x=Ct(),o=r(x),s=r(o),l=r(s,!0);t(s),re(),t(o);var p=n(o,4),N=r(p),g=r(N,!0);t(N),re(),t(p);var v=n(p,2);{var k=j=>{var V=bt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(h))),c(j,V)};L(v,j=>{a(h)>0&&j(k)})}var B=n(v,2);{var E=j=>{var V=wt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(d))),c(j,V)};L(B,j=>{a(d)>0&&j(E)})}var I=n(B,2);{var H=j=>{var V=kt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(_))),c(j,V)};L(I,j=>{a(_)>0&&j(H)})}var D=n(I,2);{var z=j=>{var V=St(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(u))),c(j,V)};L(D,j=>{a(u)>0&&j(z)})}var O=n(D,4),W=r(O),P=r(W,!0);t(W);var T=n(W);t(O);var A=n(O,4),F=r(A),Y=r(F,!0);t(F),re(),t(A);var K=n(A,2);{var ae=j=>{var V=Mt(),G=n(ee(V),2),U=r(G),$=r(U);t(U),re(),t(G),C(ve=>f($,`${ve??""}%`),[()=>Math.round(e.cacheHit*100)]),c(j,V)};L(K,j=>{e.cacheHit!=null&&j(ae)})}var Q=n(K,4),Z=r(Q),le=r(Z,!0);t(Z),re(),t(Q),t(x),C(()=>{f(l,e.stones.length),f(g,a(i)),f(P,e.cards.length),f(T,` evidence card${e.cards.length===1?"":"s"}`),f(Y,a(S)),f(le,a(M))}),c(R,x),J()}var Bt=b('<div class="subhead svelte-lygj3j"> </div>'),Lt=b('<p class="body-prose svelte-lygj3j"> </p>'),At=b('<div class="body body-headline svelte-lygj3j"><div class="headline svelte-lygj3j"> </div> <!> <!></div>');function Rt(R,e){X(e,!0);var w=At(),m=r(w),M=r(m,!0);t(m);var i=n(m,2);{var h=u=>{var S=Bt(),x=r(S,!0);t(S),C(()=>f(x,e.card.subhead)),c(u,S)};L(i,u=>{e.card.subhead&&u(h)})}var d=n(i,2);{var _=u=>{var S=Lt(),x=r(S,!0);t(S),C(()=>f(x,e.card.body)),c(u,S)};L(d,u=>{e.card.body&&u(_)})}t(w),C(()=>{oe(m,`color: var(--tier-${e.card.tier??""});`),f(M,e.card.headline??"")}),c(R,w),J()}var Ft=b('<th class="svelte-1nlkuao"> </th>'),Et=b('<td class="svelte-1nlkuao"> </td>'),Tt=b('<tr class="svelte-1nlkuao"></tr>'),Pt=b('<div class="body-sub svelte-1nlkuao"> </div>'),qt=b('<div class="body body-tabular svelte-1nlkuao"><table class="t svelte-1nlkuao"><thead><tr></tr></thead><tbody></tbody></table> <!></div>');function Dt(R,e){X(e,!0);var w=qt(),m=r(w),M=r(m),i=r(M);te(i,21,()=>e.card.columns??[],de,(u,S)=>{var x=Ft(),o=r(x,!0);t(x),C(()=>f(o,a(S))),c(u,x)}),t(i),t(M);var h=n(M);te(h,21,()=>e.card.rows??[],de,(u,S)=>{var x=Tt();te(x,21,()=>a(S),de,(o,s)=>{var l=Et(),p=r(l,!0);t(l),C(()=>f(p,a(s))),c(o,l)}),t(x),c(u,x)}),t(h),t(m);var d=n(m,2);{var _=u=>{var S=Pt(),x=r(S,!0);t(S),C(()=>f(x,e.card.sub)),c(u,S)};L(d,u=>{e.card.sub&&u(_)})}t(w),c(R,w),J()}var It=b('<div class="cell svelte-stf9c8"><div class="value svelte-stf9c8"> </div> <div class="label svelte-stf9c8"> </div></div>'),zt=b('<div class="body-sub svelte-stf9c8"> </div>'),Ot=b('<div class="body body-scalars svelte-stf9c8"><div class="row svelte-stf9c8"></div> <!></div>');function Ht(R,e){X(e,!0);var w=Ot(),m=r(w);te(m,21,()=>e.card.scalars??[],de,(h,d)=>{var _=It(),u=r(_),S=r(u,!0);t(u);var x=n(u,2),o=r(x,!0);t(x),t(_),C(()=>{oe(u,`color: var(--tier-${e.card.tier??""});`),f(S,a(d).value),f(o,a(d).label)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=zt(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(R,w),J()}var jt=b('<div class="headline svelte-jrppts"> </div>'),Yt=b('<div class="subhead svelte-jrppts"> </div>'),Wt=me("<rect></rect>"),Ut=b('<div class="body-sub svelte-jrppts"> </div>'),Gt=b('<div class="body-sub svelte-jrppts"> </div>'),Kt=b('<div class="body body-spark svelte-jrppts"><!> <!> <svg width="100%" preserveAspectRatio="none" aria-hidden="true" class="svelte-jrppts"></svg> <!> <!></div>');function Qt(R,e){X(e,!0);const w=240,m=38;let M=q(()=>e.card.spark??e.card.histogram??[]),i=q(()=>Math.max(...a(M),1)),h=q(()=>a(M).length),d=q(()=>Math.max(2,w/Math.max(a(h),1)-1.5));var _=Kt(),u=r(_);{var S=v=>{var k=jt(),B=r(k,!0);t(k),C(()=>{oe(k,`color: var(--tier-${e.card.tier??""});`),f(B,e.card.headline)}),c(v,k)};L(u,v=>{e.card.headline&&v(S)})}var x=n(u,2);{var o=v=>{var k=Yt(),B=r(k,!0);t(k),C(()=>f(B,e.card.subhead)),c(v,k)};L(x,v=>{e.card.subhead&&v(o)})}var s=n(x,2);y(s,"viewBox","0 0 240 38"),y(s,"height",m),te(s,21,()=>a(M),de,(v,k,B)=>{var E=Wt();C(()=>{y(E,"x",B/a(h)*w+.5),y(E,"y",m-a(k)/a(i)*m),y(E,"width",a(d)),y(E,"height",a(k)/a(i)*m),y(E,"fill",`var(--tier-${e.card.tier??""})`)}),c(v,E)}),t(s);var l=n(s,2);{var p=v=>{var k=Ut(),B=r(k,!0);t(k),C(()=>f(B,e.card.sparkSub)),c(v,k)};L(l,v=>{e.card.sparkSub&&v(p)})}var N=n(l,2);{var g=v=>{var k=Gt(),B=r(k,!0);t(k),C(()=>f(B,e.card.sub)),c(v,k)};L(N,v=>{!e.card.sparkSub&&e.card.sub&&v(g)})}t(_),c(R,_),J()}var Vt=b('<span class="headline svelte-48vbub"> </span>'),Zt=b('<span class="subhead svelte-48vbub"> </span>'),Xt=b('<span class="spatial-note svelte-48vbub"> </span>'),Jt=b("<span> </span>"),$t=b('<div class="body-sub svelte-48vbub"><!> <!></div>'),ea=b('<div class="body body-timeseries svelte-48vbub"><div class="ts-header svelte-48vbub"><!> <!></div> <svg width="100%" aria-hidden="true" class="svelte-48vbub"><line stroke="#C9C9C5" stroke-width="0.5" stroke-dasharray="2 2"></line><path fill="none" stroke-width="1.4"></path><circle r="3"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle"> </text><text font-size="8" font-family="IBM Plex Mono" fill="#6B6B6B">now</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B"> </text></svg> <!></div>');function Ee(R,e){X(e,!0);const w=240,m=84,M=6,i=q(()=>e.card.timeseries??{hours:96,peak:{x:38,y:47},peakLabel:""}),h=q(()=>u(a(i))),d=q(()=>S(a(h),a(i))),_=q(()=>x(a(h),a(d)));function u(T){const A=[];for(let F=0;F<=T.hours;F++){const Y=6*Math.sin(F/12.42*Math.PI*2),K=38*Math.exp(-Math.pow((F-T.peak.x)/12,2));A.push({x:F,y:Y+K+4})}return A}function S(T,A){const F=Math.max(...T.map(K=>K.y),A.peak.y),Y=Math.min(...T.map(K=>K.y),-10);return{sx:K=>M+K/A.hours*(w-M*2),sy:K=>m-M-14-(K-Y)/(F-Y)*(m-M*2-14)}}function x(T,A){return T.map((F,Y)=>`${Y?"L":"M"} ${A.sx(F.x)} ${A.sy(F.y)}`).join(" ")}var o=ea(),s=r(o),l=r(s);{var p=T=>{var A=Vt(),F=r(A,!0);t(A),C(()=>{oe(A,`color: var(--tier-${e.card.tier??""});`),f(F,e.card.headline)}),c(T,A)};L(l,T=>{e.card.headline&&T(p)})}var N=n(l,2);{var g=T=>{var A=Zt(),F=r(A,!0);t(A),C(()=>f(F,e.card.subhead)),c(T,A)};L(N,T=>{e.card.subhead&&T(g)})}t(s);var v=n(s,2);y(v,"viewBox","0 0 240 84"),y(v,"height",m);var k=r(v);y(k,"x1",M),y(k,"x2",w-M);var B=n(k),E=n(B),I=n(E),H=r(I,!0);t(I);var D=n(I);y(D,"x",M),y(D,"y",m-2);var z=n(D);y(z,"x",w-M),y(z,"y",m-2);var O=r(z);t(z),t(v);var W=n(v,2);{var P=T=>{var A=$t(),F=r(A);{var Y=Q=>{var Z=Xt(),le=r(Z,!0);t(Z),C(()=>f(le,e.card.spatialNote)),c(Q,Z)};L(F,Q=>{e.card.spatialNote&&Q(Y)})}var K=n(F,2);{var ae=Q=>{var Z=Jt(),le=r(Z,!0);t(Z),C(()=>f(le,e.card.sub)),c(Q,Z)};L(K,Q=>{e.card.sub&&Q(ae)})}t(A),c(T,A)};L(W,T=>{(e.card.spatialNote||e.card.sub)&&T(P)})}t(o),C((T,A,F,Y,K,ae)=>{y(k,"y1",T),y(k,"y2",A),y(B,"d",a(_)),y(B,"stroke",`var(--tier-${e.card.tier??""})`),y(E,"cx",F),y(E,"cy",Y),y(E,"fill",`var(--tier-${e.card.tier??""})`),y(I,"x",K),y(I,"y",ae),y(I,"fill",`var(--tier-${e.card.tier??""})`),f(H,a(i).peakLabel),f(O,`+${a(i).hours??""}h`)},[()=>a(d).sy(0),()=>a(d).sy(0),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y)-6]),c(R,o),J()}var ta=b('<span class="ft-stat svelte-1y25lfh"><span class="ft-stat-k svelte-1y25lfh">RMSE</span> </span>'),aa=b('<span class="ft-stat ft-skill svelte-1y25lfh"> </span>'),ra=b('<span class="ft-badge svelte-1y25lfh" title="Trained on this hardware"> </span>'),sa=b('<a class="ft-link svelte-1y25lfh" target="_blank" rel="noopener noreferrer">Model card ↗</a>'),ia=b('<!> <div class="ft-footer svelte-1y25lfh"><!> <!> <!> <!></div>',1);function na(R,e){X(e,!0);var w=ia(),m=ee(w);Ee(m,{get card(){return e.card}});var M=n(m,2),i=r(M);{var h=s=>{var l=ta(),p=n(r(l));t(l),C(()=>f(p,` ${e.card.rmse??""}`)),c(s,l)};L(i,s=>{e.card.rmse&&s(h)})}var d=n(i,2);{var _=s=>{var l=aa(),p=r(l,!0);t(l),C(()=>f(p,e.card.skillVsPersistence)),c(s,l)};L(d,s=>{e.card.skillVsPersistence&&s(_)})}var u=n(d,2);{var S=s=>{var l=ra(),p=r(l,!0);t(l),C(()=>f(p,e.card.hardwareBadge)),c(s,l)};L(u,s=>{e.card.hardwareBadge&&s(S)})}var x=n(u,2);{var o=s=>{var l=sa();C(p=>y(l,"href",p),[()=>e.card.hfModelCard.startsWith("http")?e.card.hfModelCard:`https://${e.card.hfModelCard}`]),c(s,l)};L(x,s=>{e.card.hfModelCard&&s(o)})}t(M),c(R,w),J()}var la=me('<circle r="2.2"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle" fill="#6B6B6B"> </text>',1),oa=b('<div class="body-sub svelte-gqkhpe"> </div>'),da=b('<div class="body body-forecast svelte-gqkhpe"><svg width="100%" aria-hidden="true" class="svelte-gqkhpe"><path fill-opacity="0.18"></path><path fill="none" stroke-width="1.5"></path><!></svg> <!></div>');function va(R,e){X(e,!0);const w=240,m=88,M=6;let i=q(()=>e.card.forecast??[]),h=q(()=>a(i).map((v,k)=>M+k/Math.max(a(i).length-1,1)*(w-M*2))),d=q(()=>Math.max(...a(i).map(v=>v.high),1));function _(v){return m-M-v/a(d)*(m-M*2-12)}let u=q(()=>a(h).map((v,k)=>`${k?"L":"M"} ${v} ${_(a(i)[k].mid)}`).join(" ")),S=q(()=>{if(!a(i).length)return"";const v=a(h).map((B,E)=>`${B} ${_(a(i)[E].low)}`).join(" L "),k=[...a(h)].reverse().map((B,E)=>`${B} ${_(a(i)[a(i).length-1-E].high)}`).join(" L ");return`M ${v} L ${k} Z`});var x=da(),o=r(x);y(o,"viewBox","0 0 240 88"),y(o,"height",m);var s=r(o),l=n(s),p=n(l);te(p,17,()=>a(i),de,(v,k,B)=>{var E=la(),I=ee(E),H=n(I);y(H,"y",m-1);var D=r(H,!0);t(H),C(z=>{y(I,"cx",a(h)[B]),y(I,"cy",z),y(I,"fill",`var(--tier-${e.card.tier??""})`),y(H,"x",a(h)[B]),f(D,a(k).year)},[()=>_(a(k).mid)]),c(v,E)}),t(o);var N=n(o,2);{var g=v=>{var k=oa(),B=r(k,!0);t(k),C(()=>f(B,e.card.sub)),c(v,k)};L(N,v=>{e.card.sub&&v(g)})}t(x),C(()=>{y(s,"d",a(S)),y(s,"fill",`var(--tier-${e.card.tier??""})`),y(l,"d",a(u)),y(l,"stroke",`var(--tier-${e.card.tier??""})`)}),c(R,x),J()}var ca=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M20 50 Q 60 38 90 56 Q 120 76 150 64 Q 180 50 180 86 Q 130 100 70 96 Q 30 92 20 76 Z" fill="rgba(42,111,168,0.32)" stroke="#2A6FA8" stroke-width="0.7"></path><path d="M40 60 Q 80 54 110 70 Q 140 84 160 78 Q 165 90 130 92 Q 80 90 50 82 Z" fill="rgba(11,83,148,0.36)" stroke="#0B5394" stroke-width="0.6"></path><circle cx="120" cy="74" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">2.13 in/hr · MOD</text></svg>'),ua=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M180 92 Q 200 88 215 96 Q 220 105 200 104 Q 185 102 180 96 Z" fill="rgba(42,111,168,0.18)" stroke="#2A6FA8" stroke-width="0.5" stroke-dasharray="2 2"></path><circle cx="120" cy="60" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">no ponding · MOD</text></svg>'),ga=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><defs><pattern id="rt-s2-rgb" x="0" y="0" width="6" height="6" patternUnits="userSpaceOnUse"><rect width="6" height="6" fill="#7A8E6A"></rect><rect x="0" y="0" width="3" height="3" fill="#8D9C7A"></rect><rect x="3" y="3" width="3" height="3" fill="#69795D"></rect></pattern></defs><rect fill="url(#rt-s2-rgb)"></rect><rect x="0" y="55" height="6" fill="#A8A496"></rect><rect x="115" y="0" width="8" fill="#A8A496"></rect><ellipse cx="50" cy="92" rx="6" ry="3" fill="#2A6FA8" fill-opacity="0.65"></ellipse><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">PRITHVI · 0.3%</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),ha=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><rect x="0" y="0" width="80" height="60" fill="#C66"></rect><rect x="80" y="0" width="60" height="60" fill="#C66"></rect><rect x="140" y="0" width="100" height="38" fill="#C66"></rect><rect x="140" y="38" width="100" height="22" fill="#5B7FB4"></rect><rect x="0" y="60" width="100" height="60" fill="#C66"></rect><rect x="100" y="60" width="50" height="40" fill="#5B8A4A"></rect><rect x="150" y="60" width="50" height="60" fill="#D9C75A"></rect><rect x="200" y="60" width="40" height="60" fill="#C66"></rect><rect x="100" y="100" width="50" height="20" fill="#A89A78"></rect><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">LULC · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),ma=me('<rect fill="rgba(42,111,168,0.55)" stroke="#2A6FA8" stroke-width="0.4"></rect>'),fa=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#3A3A38"></rect><!><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">BLDG · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">36.2% built</text></svg>'),ya=b('<div class="thumb-placeholder svelte-1lx1psy">raster preview</div>');function Te(R,e){var M=xe(),i=ee(M);{var h=o=>{var s=ca();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l),N=r(p);y(N,"x2",240);var g=n(N);y(g,"x2",240);var v=n(g);y(v,"y2",120);var k=n(v);y(k,"y2",120),t(p);var B=n(p,4);y(B,"x",234),y(B,"y",115),t(s),c(o,s)},d=o=>{var s=ua();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l),N=r(p);y(N,"x2",240);var g=n(N);y(g,"x2",240);var v=n(g);y(v,"y2",120);var k=n(v);y(k,"y2",120),t(p);var B=n(p,3);y(B,"x",234),y(B,"y",115),t(s),c(o,s)},_=o=>{var s=ga();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=n(r(s));y(l,"width",240),y(l,"height",120);var p=n(l);y(p,"width",240);var N=n(p);y(N,"height",120);var g=n(N,3);y(g,"x",234),y(g,"y",115),t(s),c(o,s)},u=o=>{var s=ha();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l,11);y(p,"x",234),y(p,"y",115),t(s),c(o,s)},S=o=>{var s=fa();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l);te(p,16,()=>[[10,10,28,18],[42,10,30,16],[78,10,40,22],[124,10,32,18],[162,10,30,18],[198,10,32,18],[10,32,28,16],[42,30,30,18],[124,32,32,16],[162,32,30,16],[198,32,32,16],[10,55,28,18],[42,55,30,18],[78,55,40,18],[124,55,32,18],[162,55,30,18],[198,55,32,18],[10,80,28,16],[42,80,30,16],[78,80,40,16],[124,80,32,16],[162,80,30,16],[10,100,28,12],[42,100,30,12],[78,100,40,12]],de,(g,v)=>{var k=ma();C(()=>{y(k,"x",v[0]),y(k,"y",v[1]),y(k,"width",v[2]),y(k,"height",v[3])}),c(g,k)});var N=n(p,2);y(N,"x",234),y(N,"y",115),t(s),c(o,s)},x=o=>{var s=ya();c(o,s)};L(i,o=>{e.kind==="stormwater"?o(h):e.kind==="stormwater-dry"?o(d,1):e.kind==="prithvi"?o(_,2):e.kind==="lulc"?o(u,3):e.kind==="buildings"?o(S,4):o(x,-1)})}c(R,M)}var _a=b('<span class="illustrative svelte-1m43x1m" title="Illustrative rendering, not source pixels">illustrative</span>'),pa=b('<span class="svelte-1m43x1m"> </span>'),xa=b('<div class="raster-headline svelte-1m43x1m"><span class="svelte-1m43x1m"> </span> <!></div>'),ba=b('<div class="body-sub svelte-1m43x1m"> </div>'),wa=b('<div class="body body-raster svelte-1m43x1m"><div class="frame svelte-1m43x1m"><!> <!></div> <!> <!></div>');function ka(R,e){X(e,!0);var w=wa(),m=r(w),M=r(m);Te(M,{get kind(){return e.card.rasterKind}});var i=n(M,2);{var h=x=>{var o=_a();c(x,o)};L(i,x=>{(e.card.illustrative||e.card.tier==="synthetic")&&x(h)})}t(m);var d=n(m,2);{var _=x=>{var o=xa(),s=r(o),l=r(s,!0);t(s);var p=n(s,2);{var N=g=>{var v=pa(),k=r(v);t(v),C(()=>f(k,`· ${e.card.subhead??""}`)),c(g,v)};L(p,g=>{e.card.subhead&&g(N)})}t(o),C(()=>{oe(s,`color: var(--tier-${e.card.tier??""});`),f(l,e.card.headline)}),c(x,o)};L(d,x=>{e.card.headline&&x(_)})}var u=n(d,2);{var S=x=>{var o=ba(),s=r(o,!0);t(o),C(()=>f(s,e.card.sub)),c(x,o)};L(u,x=>{e.card.sub&&x(S)})}t(w),c(R,w),J()}var Sa=b('<span class="illustrative svelte-1td276x" title="Illustrative rendering, not source pixels">illustrative</span>'),Ma=b('<span class="bar-seg svelte-1td276x"></span>'),Ca=b('<li class="svelte-1td276x"><span class="swatch svelte-1td276x"></span> <span class="legend-k svelte-1td276x"> </span> <span class="legend-pct svelte-1td276x"> </span></li>'),Na=b('<div class="bar svelte-1td276x" role="img" aria-label="LULC class mix"></div> <ul class="legend svelte-1td276x"></ul>',1),Ba=b('<div class="body-sub svelte-1td276x"> </div>'),La=b('<div class="body body-lulc svelte-1td276x"><div class="frame svelte-1td276x"><!> <!></div> <!> <!></div>');function Aa(R,e){X(e,!0);let w=q(()=>(e.card.classMix??[]).reduce((o,s)=>o+(s.pct||0),0)||1);var m=La(),M=r(m),i=r(M);{let o=q(()=>e.card.rasterKind??"lulc");Te(i,{get kind(){return a(o)}})}var h=n(i,2);{var d=o=>{var s=Sa();c(o,s)};L(h,o=>{(e.card.illustrative||e.card.tier==="synthetic")&&o(d)})}t(M);var _=n(M,2);{var u=o=>{var s=Na(),l=ee(s);te(l,21,()=>e.card.classMix,N=>N.k,(N,g)=>{var v=Ma();let k;C(()=>{y(v,"title",`${a(g).k??""}: ${a(g).pct??""}%`),k=oe(v,"",k,{"flex-grow":a(g).pct/a(w),background:a(g).color})}),c(N,v)}),t(l);var p=n(l,2);te(p,21,()=>e.card.classMix,N=>N.k,(N,g)=>{var v=Ca(),k=r(v);let B;var E=n(k,2),I=r(E,!0);t(E);var H=n(E,2),D=r(H);t(H),t(v),C(()=>{B=oe(k,"",B,{background:a(g).color}),f(I,a(g).k),f(D,`${a(g).pct??""}%`)}),c(N,v)}),t(p),c(o,s)};L(_,o=>{var s;(s=e.card.classMix)!=null&&s.length&&o(u)})}var S=n(_,2);{var x=o=>{var s=Ba(),l=r(s,!0);t(s),C(()=>f(l,e.card.sub)),c(o,s)};L(S,o=>{e.card.sub&&o(x)})}t(m),c(R,m),J()}var Ra=b('<span class="reg-label svelte-1iup6im"> </span> <span class="reg-source svelte-1iup6im"> </span>',1),Fa=b('<span class="reg-silent svelte-1iup6im"> </span>'),Ea=b('<li><span class="reg-tag svelte-1iup6im"><!> <span> </span></span> <!></li>'),Ta=b('<div class="body-sub svelte-1iup6im"> </div>'),Pa=b('<div class="body body-register svelte-1iup6im"><ul class="reg-list svelte-1iup6im"></ul> <!></div>');function qa(R,e){X(e,!0);var w=Pa(),m=r(w);te(m,21,()=>e.card.registers??[],de,(h,d)=>{var _=Ea();let u;var S=r(_),x=r(S);ge(x,{get tier(){return a(d).tier},size:9,get color(){return`var(--tier-${a(d).tier??""})`}});var o=n(x,2),s=r(o,!0);t(o),t(S);var l=n(S,2);{var p=g=>{var v=Ra(),k=ee(v),B=r(k,!0);t(k);var E=n(k,2),I=r(E,!0);t(E),C(()=>{y(k,"title",a(d).detail?`${a(d).label} — ${a(d).detail}`:a(d).label),f(B,a(d).label),f(I,a(d).sourceId??"")}),c(g,v)},N=g=>{var v=Fa(),k=r(v,!0);t(v),C(()=>f(k,a(d).note)),c(g,v)};L(l,g=>{a(d).label?g(p):g(N,-1)})}t(_),C(()=>{u=ue(_,1,"reg-row svelte-1iup6im",null,u,{silent:!a(d).label}),y(S,"title",a(d).tier),f(s,a(d).reg)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=Ta(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(R,w),J()}var Da=b('<div class="cell-aux svelte-1swqabu"> </div>'),Ia=b('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),za=b('<div class="cell-aux svelte-1swqabu"> </div>'),Oa=b('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),Ha=b('<div class="cmp-delta svelte-1swqabu"> </div>'),ja=b('<div class="body-sub svelte-1swqabu"> </div>'),Ya=b('<div class="body body-comparison svelte-1swqabu"><div class="cmp-grid svelte-1swqabu"><!> <div class="divider svelte-1swqabu" aria-hidden="true">vs</div> <!></div> <!> <!></div>');function Wa(R,e){X(e,!0);var w=Ya(),m=r(w),M=r(m);{var i=o=>{var s=Ia(),l=r(s),p=r(l);ge(p,{get tier(){return e.card.left.tier},size:10,get color(){return`var(--tier-${e.card.left.tier??""})`}});var N=n(p,2),g=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var B=n(v,2);{var E=I=>{var H=Da(),D=r(H,!0);t(H),C(()=>f(D,e.card.left.aux)),c(I,H)};L(B,I=>{e.card.left.aux&&I(E)})}t(s),C(()=>{f(g,e.card.left.label),oe(v,`color: var(--tier-${e.card.left.tier??""});`),f(k,e.card.left.value)}),c(o,s)};L(M,o=>{e.card.left&&o(i)})}var h=n(M,4);{var d=o=>{var s=Oa(),l=r(s),p=r(l);ge(p,{get tier(){return e.card.right.tier},size:10,get color(){return`var(--tier-${e.card.right.tier??""})`}});var N=n(p,2),g=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var B=n(v,2);{var E=I=>{var H=za(),D=r(H,!0);t(H),C(()=>f(D,e.card.right.aux)),c(I,H)};L(B,I=>{e.card.right.aux&&I(E)})}t(s),C(()=>{f(g,e.card.right.label),oe(v,`color: var(--tier-${e.card.right.tier??""});`),f(k,e.card.right.value)}),c(o,s)};L(h,o=>{e.card.right&&o(d)})}t(m);var _=n(m,2);{var u=o=>{var s=Ha(),l=r(s,!0);t(s),C(()=>f(l,e.card.delta)),c(o,s)};L(_,o=>{e.card.delta&&o(u)})}var S=n(_,2);{var x=o=>{var s=ja(),l=r(s,!0);t(s),C(()=>f(l,e.card.sub)),c(o,s)};L(S,o=>{e.card.sub&&o(x)})}t(w),c(R,w),J()}var Ua=b('<div class="meta-row svelte-e40scu"><dt class="svelte-e40scu"> </dt> <dd class="svelte-e40scu"> </dd></div>'),Ga=b('<div class="body-sub svelte-e40scu"> </div>'),Ka=b('<div class="body body-meta svelte-e40scu"><dl class="meta-list svelte-e40scu"></dl> <!></div>');function Qa(R,e){X(e,!0);var w=Ka(),m=r(w);te(m,21,()=>e.card.metaRows??[],de,(h,d)=>{var _=Ua(),u=r(_),S=r(u,!0);t(u);var x=n(u,2),o=r(x,!0);t(x),t(_),C(()=>{f(S,a(d).k),f(o,a(d).v)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=Ga(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(R,w),J()}var Va=b('<div class="unknown svelte-1x6xqhh"> </div>');function Za(R,e){X(e,!0);var w=xe(),m=ee(w);{var M=g=>{Rt(g,{get card(){return e.card}})},i=g=>{Dt(g,{get card(){return e.card}})},h=g=>{Ht(g,{get card(){return e.card}})},d=g=>{Qt(g,{get card(){return e.card}})},_=g=>{Ee(g,{get card(){return e.card}})},u=g=>{na(g,{get card(){return e.card}})},S=g=>{va(g,{get card(){return e.card}})},x=g=>{ka(g,{get card(){return e.card}})},o=g=>{Aa(g,{get card(){return e.card}})},s=g=>{qa(g,{get card(){return e.card}})},l=g=>{Wa(g,{get card(){return e.card}})},p=g=>{Qa(g,{get card(){return e.card}})},N=g=>{var v=Va(),k=r(v);t(v),C(()=>f(k,`unknown variant: ${e.card.variant??""}`)),c(g,v)};L(m,g=>{e.card.variant==="headline"?g(M):e.card.variant==="tabular"?g(i,1):e.card.variant==="scalars"?g(h,2):e.card.variant==="spark"||e.card.variant==="histogram"?g(d,3):e.card.variant==="timeseries"?g(_,4):e.card.variant==="timeseries-ft"?g(u,5):e.card.variant==="forecast"?g(S,6):e.card.variant==="raster"||e.card.variant==="raster-pred"?g(x,7):e.card.variant==="lulc"?g(o,8):e.card.variant==="register"?g(s,9):e.card.variant==="comparison"?g(l,10):e.card.variant==="meta"?g(p,11):g(N,-1)})}c(R,w),J()}var Xa=b('<button type="button" class="fc-foot-cite svelte-1nuvnzu"><span class="fc-foot-docid svelte-1nuvnzu"> </span> <span class="fc-foot-arrow svelte-1nuvnzu" aria-hidden="true">→</span></button>'),Ja=b('<span class="fc-foot-docid fc-foot-docid-mute svelte-1nuvnzu"> </span>'),$a=b('<header class="fc-head svelte-1nuvnzu"><div class="fc-head-source svelte-1nuvnzu"><!> <span class="fc-head-source-label svelte-1nuvnzu"> </span></div> <span class="fc-head-vintage svelte-1nuvnzu"> </span></header> <h4 class="fc-title svelte-1nuvnzu"> </h4> <!> <footer class="fc-foot svelte-1nuvnzu"><!> <span><!> <span> </span></span></footer>',1);function Pe(R,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"linkedKey",3,null),M=q(()=>m()!=null&&e.card.mapLayer!=null&&e.card.mapLayer===m()),i=q(()=>Re[e.card.tier].short),h=q(()=>e.card.mapLayer!=null);function d(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,e.card.mapLayer))}function _(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,null))}function u(s){var l;s.stopPropagation(),e.card.citeId&&((l=e.onCite)==null||l.call(e,e.card.citeId))}function S(s){var l;a(h)&&(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),(l=e.onLink)==null||l.call(e,e.card.mapLayer??null))}var x=xe(),o=ee(x);st(o,()=>a(h)?"button":"article",!1,(s,l)=>{Xe(s,()=>({type:a(h)?"button":void 0,role:a(h)?"button":"article",class:`fc fc-${e.card.variant??""} fc-tier-${e.card.tier??""}`,"aria-labelledby":`fc-${e.card.id}-title`,"aria-label":`${Re[e.card.tier].label} card · ${e.card.title} · ${e.card.source}`,onpointerenter:d,onpointerleave:_,onfocus:d,onblur:_,onkeydown:S,[Je]:{"is-compact":w()==="compact","is-linked":a(M),"is-interactive":a(h),"has-illustrative":e.card.illustrative||e.card.tier==="synthetic"||e.card.variant==="comparison"}}),void 0,void 0,void 0,"svelte-1nuvnzu");var p=$a(),N=ee(p),g=r(N),v=r(g);ge(v,{get tier(){return e.card.tier},size:11,get color(){return`var(--tier-${e.card.tier??""})`}});var k=n(v,2),B=r(k,!0);t(k),t(g);var E=n(g,2),I=r(E);t(E),t(N);var H=n(N,2),D=r(H,!0);t(H);var z=n(H,2);Za(z,{get card(){return e.card}});var O=n(z,2),W=r(O);{var P=ae=>{var Q=Xa(),Z=r(Q),le=r(Z,!0);t(Z),re(2),t(Q),C(()=>{y(Q,"title",`Open ${e.card.docId} in citation drawer`),f(le,e.card.docId)}),Ne("click",Q,u),c(ae,Q)},T=ae=>{var Q=Ja(),Z=r(Q,!0);t(Q),C(()=>f(Z,e.card.docId)),c(ae,Q)};L(W,ae=>{e.card.citeId?ae(P):ae(T,-1)})}var A=n(W,2),F=r(A);ge(F,{get tier(){return e.card.tier},size:9,get color(){return`var(--tier-${e.card.tier??""})`}});var Y=n(F,2),K=r(Y,!0);t(Y),t(A),t(O),C(()=>{y(k,"title",e.card.agency),f(B,e.card.source),f(I,`v. ${e.card.vintage??""}`),y(H,"id",`fc-${e.card.id}-title`),f(D,e.card.title),ue(A,1,`fc-tier-badge fc-tier-badge-${e.card.tier??""}`,"svelte-1nuvnzu"),y(A,"aria-label",`epistemic tier ${a(i)}`),f(K,a(i))}),c(l,p)}),c(R,x),J()}Ce(["click"]);var er=b('<span class="sep svelte-1qqbvs2">·</span> <span class="silent svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> silent</span>',1),tr=b('<span class="sep svelte-1qqbvs2">·</span> <span class="warn svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> warn</span>',1),ar=b('<span class="sep svelte-1qqbvs2">·</span> <span class="err svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> errored</span>',1),rr=b('<span class="sep svelte-1qqbvs2">·</span> <span class="notinvoked svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> not invoked</span>',1),sr=b('<span class="tally svelte-1qqbvs2"><span class="cards"> </span> <span class="sep svelte-1qqbvs2">·</span> <span class="fired"><strong class="svelte-1qqbvs2"> </strong> fired</span> <!> <!> <!> <!> <span class="sep svelte-1qqbvs2">·</span> <span class="ms"><strong class="svelte-1qqbvs2"> </strong></span></span>');function ir(R,e){X(e,!0);function w(P){return P.flatMap(T=>T.children?[T,...w(T.children)]:[T])}let m=q(()=>w(e.members)),M=q(()=>a(m).filter(P=>P.status==="fired"||P.status==="warned").length),i=q(()=>a(m).filter(P=>P.status==="silent_by_design").length),h=q(()=>a(m).filter(P=>P.status==="warned").length),d=q(()=>a(m).filter(P=>P.status==="errored").length),_=q(()=>a(m).filter(P=>P.status==="not_invoked").length),u=q(()=>e.members.reduce((P,T)=>Math.max(P,T.ms??0),0));function S(P){return P===0?"—":P<1e3?`${P}ms`:`${(P/1e3).toFixed(1)}s`}var x=sr(),o=r(x),s=r(o);t(o);var l=n(o,4),p=r(l),N=r(p,!0);t(p),re(),t(l);var g=n(l,2);{var v=P=>{var T=er(),A=n(ee(T),2),F=r(A),Y=r(F,!0);t(F),re(),t(A),C(()=>f(Y,a(i))),c(P,T)};L(g,P=>{a(i)>0&&P(v)})}var k=n(g,2);{var B=P=>{var T=tr(),A=n(ee(T),2),F=r(A),Y=r(F,!0);t(F),re(),t(A),C(()=>f(Y,a(h))),c(P,T)};L(k,P=>{a(h)>0&&P(B)})}var E=n(k,2);{var I=P=>{var T=ar(),A=n(ee(T),2),F=r(A),Y=r(F,!0);t(F),re(),t(A),C(()=>f(Y,a(d))),c(P,T)};L(E,P=>{a(d)>0&&P(I)})}var H=n(E,2);{var D=P=>{var T=rr(),A=n(ee(T),2),F=r(A),Y=r(F,!0);t(F),re(),t(A),C(()=>f(Y,a(_))),c(P,T)};L(H,P=>{a(_)>0&&P(D)})}var z=n(H,4),O=r(z),W=r(O,!0);t(O),t(z),t(x),C(P=>{f(s,`${e.cardCount??""} card${e.cardCount===1?"":"s"}`),f(N,a(M)),f(W,P)},[()=>S(a(u))]),c(R,x),J()}var nr=b('<span class="prov-tier svelte-qakefz"><!></span>'),lr=b('<span class="prov-note svelte-qakefz"> </span>'),or=b('<span class="prov-ms svelte-qakefz"> </span>'),dr=b('<li class="prov-children svelte-qakefz"><!></li>'),vr=b('<li><span class="prov-pip svelte-qakefz" aria-hidden="true"> </span> <span class="prov-id svelte-qakefz"> </span> <!> <span class="prov-name svelte-qakefz"> </span> <!> <!></li> <!>',1),cr=b('<ul class="prov-tree svelte-qakefz"></ul>');function qe(R,e){X(e,!0);let w=ne(e,"depth",3,0);function m(h){return{fired:"●",silent_by_design:"○",warned:"▲",errored:"■",not_invoked:"□"}[h]}function M(h){return h.status==="warned"?"#B7791F":h.status==="errored"?"#B91C1C":h.status==="silent_by_design"||h.status==="not_invoked"?"var(--ink-tertiary)":h.tier?`var(--tier-${h.tier})`:"var(--ink)"}var i=cr();te(i,21,()=>e.members,h=>h.id,(h,d)=>{var _=vr(),u=ee(_),S=r(u),x=r(S,!0);t(S);var o=n(S,2),s=r(o,!0);t(o);var l=n(o,2);{var p=D=>{var z=nr(),O=r(z);{let W=q(()=>`var(--tier-${a(d).tier})`);ge(O,{get tier(){return a(d).tier},size:9,get color(){return a(W)}})}t(z),c(D,z)};L(l,D=>{a(d).tier&&D(p)})}var N=n(l,2),g=r(N,!0);t(N);var v=n(N,2);{var k=D=>{var z=lr(),O=r(z);t(z),C(()=>f(O,`— ${a(d).note??""}`)),c(D,z)};L(v,D=>{a(d).note&&D(k)})}var B=n(v,2);{var E=D=>{var z=or(),O=r(z,!0);t(z),C(W=>f(O,W),[()=>a(d).ms<1e3?`${a(d).ms}ms`:`${(a(d).ms/1e3).toFixed(1)}s`]),c(D,z)};L(B,D=>{a(d).ms!=null&&D(E)})}t(u);var I=n(u,2);{var H=D=>{var z=dr(),O=r(z);{let W=q(()=>w()+1);qe(O,{get members(){return a(d).children},get depth(){return a(W)}})}t(z),c(D,z)};L(I,D=>{var z;(z=a(d).children)!=null&&z.length&&D(H)})}C((D,z)=>{ue(u,1,`prov-row prov-status-${a(d).status??""}`,"svelte-qakefz"),oe(S,`color: ${D??""};`),f(x,z),f(s,a(d).id),f(g,a(d).name)},[()=>M(a(d)),()=>m(a(d).status)]),c(h,_)}),t(i),C(()=>oe(i,`--depth: ${w()??""};`)),c(R,i),J()}var ur=b('<div class="silent svelte-16iv0n8"><span class="silent-tag svelte-16iv0n8">silent</span> <p class="silent-prose svelte-16iv0n8"><!></p></div>'),gr=b("<div></div>"),hr=b('<div class="prov-body svelte-16iv0n8"><!></div>'),mr=b('<section><header class="region-head svelte-16iv0n8"><div class="region-head-left svelte-16iv0n8"><span class="region-num svelte-16iv0n8"> </span> <h3 class="region-name svelte-16iv0n8"> </h3> <span class="region-role svelte-16iv0n8"> </span> <span class="region-tag svelte-16iv0n8"> </span></div> <!></header> <!> <div class="prov svelte-16iv0n8"><button type="button" class="prov-toggle svelte-16iv0n8"><span class="prov-caret svelte-16iv0n8" aria-hidden="true"> </span> <span class="prov-label"> </span> <span class="prov-meta svelte-16iv0n8"> </span></button> <!></div></section>');function fr(R,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"provenanceMode",3,"smart"),M=ne(e,"linkedKey",3,null),i=q(()=>Me[e.stone]),h=q(()=>`${Be.indexOf(e.stone)+1}`.padStart(2,"0")),d=q(()=>e.stone==="capstone");function _(G){return G.flatMap(U=>U.children?[U,..._(U.children)]:[U])}let u=q(()=>_(e.trace.members)),S=q(()=>a(u).length),x=q(()=>a(u).some(G=>G.status==="warned"||G.status==="errored"||G.status==="not_invoked")),o=q(()=>m()==="all-expanded"?!0:m()==="all-collapsed"?!1:a(x)),s=Se(null),l=q(()=>a(s)??a(o));ie(()=>{m(),pe(s,null)});var p=mr(),N=r(p),g=r(N),v=r(g),k=r(v,!0);t(v);var B=n(v,2),E=r(B,!0);t(B);var I=n(B,2),H=r(I);t(I);var D=n(I,2),z=r(D,!0);t(D),t(g);var O=n(g,2);ir(O,{get cardCount(){return e.cards.length},get members(){return e.trace.members}}),t(N);var W=n(N,2);{var P=G=>{var U=ur(),$=n(r(U),2),ve=r($);{var fe=he=>{var se=_e("No projection cards landed for this query. Atomic functions still ran (see provenance) and returned silence rather than confabulation.");c(he,se)},be=he=>{var se=_e("No cards for this Stone on this query.");c(he,se)};L(ve,he=>{e.stone==="lodestone"?he(fe):he(be,-1)})}t($),t(U),c(G,U)},T=G=>{var U=gr();let $;te(U,21,()=>e.cards,ve=>ve.id,(ve,fe)=>{Pe(ve,{get card(){return a(fe)},get density(){return w()},get linkedKey(){return M()},get onCite(){return e.onCite},get onLink(){return e.onLink}})}),t(U),C(()=>$=ue(U,1,"rail svelte-16iv0n8",null,$,{"rail-capstone":a(d)})),c(G,U)};L(W,G=>{e.cards.length===0?G(P):G(T,-1)})}var A=n(W,2),F=r(A),Y=r(F),K=r(Y,!0);t(Y);var ae=n(Y,2),Q=r(ae);t(ae);var Z=n(ae,2),le=r(Z);t(Z),t(F);var j=n(F,2);{var V=G=>{var U=hr(),$=r(U);qe($,{get members(){return e.trace.members}}),t(U),C(()=>y(U,"id",`prov-body-${e.stone}`)),c(G,U)};L(j,G=>{a(l)&&G(V)})}t(A),t(p),C(()=>{ue(p,1,`region region-${e.stone??""}`,"svelte-16iv0n8"),y(p,"aria-labelledby",`region-h-${e.stone}`),y(p,"data-stone",e.stone),f(k,a(h)),y(B,"id",`region-h-${e.stone}`),f(E,a(i).name),f(H,`· ${a(i).role??""}`),f(z,a(i).tag),y(F,"aria-expanded",a(l)),y(F,"aria-controls",`prov-body-${e.stone}`),f(K,a(l)?"▾":"▸"),f(Q,`${a(l)?"Hide":"Show"} provenance`),f(le,`· ${a(S)??""} function${a(S)===1?"":"s"}`)}),Ne("click",F,()=>pe(s,!a(l))),c(R,p),J()}Ce(["click"]);var yr=b('<section class="region region-grammar svelte-gwg123" aria-label="Card grammar reference"><header class="region-head svelte-gwg123"><div class="region-head-left svelte-gwg123"><span class="region-num svelte-gwg123">SPEC</span> <h3 class="region-name svelte-gwg123">Card grammar</h3> <span class="region-role svelte-gwg123">· every body variant in the system</span> <span class="region-tag svelte-gwg123">stubs, not findings</span></div> <span class="grammar-count svelte-gwg123"> </span></header> <div class="rail svelte-gwg123"></div></section>');function _r(R,e){let w=ne(e,"density",3,"comfortable");const m=[{id:"grm-headline",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"spec",vintage:"spec",title:"Single big number, scenario-tagged",headline:"Zone AE",subhead:"preliminary FIRM, panel ID",sub:"Use when the answer is one categorical state.",docId:"DS-HEADLINE"},{id:"grm-tabular",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"spec",vintage:"spec",title:"Small table of observations",columns:["id","value","dist."],rows:[["ROW-001","1.2 m","0.18 mi"],["ROW-002","0.9 m","0.32 mi"],["ROW-003","0.7 m","0.41 mi"]],sub:"Use when 3–8 records each carry the same fields.",docId:"DS-TABULAR"},{id:"grm-scalars",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS",agency:"spec",vintage:"spec",title:"Trio of scalar readings",scalars:[{value:"0.02 in",label:"precip · 24h"},{value:"11 mph",label:"wind"},{value:"63°F",label:"temp"}],sub:"Use for current-state dashboards.",docId:"DS-SCALARS"},{id:"grm-spark",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"spec",vintage:"spec",title:"Sparkline of recent events",headline:"n events",subhead:"window · peak",spark:[1,2,4,3,7,12,8,5,3,2,4,9,6],docId:"DS-SPARK"},{id:"grm-histogram",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"spec",vintage:"spec",title:"Histogram of binned counts",headline:"n calls",subhead:"window · seasonal note",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],docId:"DS-HIST"},{id:"grm-timeseries",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM",agency:"spec",vintage:"spec",title:"Forecast curve with horizon",headline:"+0.41 m peak",subhead:"+38h · 90% CI",timeseries:{hours:96,peak:{x:38,y:41},peakLabel:"+0.41 m"},spatialNote:"regional",sub:"Spatial-index callout when station ≠ point-of-query.",docId:"DS-TS"},{id:"grm-forecast",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"spec",vintage:"spec",title:"Long-horizon scenario projections",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2100,low:38,mid:71,high:114}],sub:"Use for decadal+ uncertainty cones.",docId:"DS-FCST"},{id:"grm-raster",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"spec",vintage:"spec",title:"Raster snapshot, mapped layer",rasterKind:"stormwater",headline:"ponding",subhead:"scenario · pixel summary",sub:"Use for any 2D model output.",docId:"DS-RASTER"},{id:"grm-rasterpred",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC",agency:"spec",vintage:"spec",title:"Raster prediction, illustrative",rasterKind:"prithvi",headline:"n% flooded",subhead:"model · scene id",illustrative:!0,sub:"Same chrome as raster + illustrative tag.",docId:"DS-RASTERPRED"},{id:"grm-register",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"spec",vintage:"spec",title:"Composite register list",registers:[{reg:"MTA",tier:"empirical",label:"Station entrance",detail:"0.18 mi · 5",sourceId:"MTA-X",note:null},{reg:"NYCHA",tier:"empirical",label:"Development",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-Y",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,note:"no acute-care hospital within 1.0 mi"}],sub:"Use when many specialists join into one Stone.",docId:"DS-REGISTER"},{id:"grm-comparison",stone:"keystone",tier:"synthetic",variant:"comparison",source:"EMP × SYN",agency:"spec",vintage:"spec",title:"Documented vs. interpreted",left:{tier:"empirical",label:"documented",value:"31.4%",aux:"n polygons"},right:{tier:"synthetic",label:"interpreted",value:"29.8%",aux:"n polygons"},delta:"Δ = −1.6 pp · agreement strong",sub:"Use to surface model–ground-truth deltas.",docId:"DS-CMP"},{id:"grm-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"spec",vintage:"spec",title:"Capstone reconciliation",metaRows:[{k:"claims",v:"12 / 12 grounded"},{k:"tier mix",v:"EMP 5 · MOD 4 · PRX 2 · SYN 1"},{k:"tier-1 freshness",v:"median 38 d"},{k:"warnings",v:"0"}],sub:"Use to expose the synthesis layer's audit.",docId:"DS-META"}];var M=yr(),i=r(M),h=n(r(i),2),d=r(h);t(h),t(i);var _=n(i,2);te(_,21,()=>m,u=>u.id,(u,S)=>{Pe(u,{get card(){return a(S)},get density(){return w()}})}),t(_),t(M),C(()=>f(d,`${m.length??""} variants`)),c(R,M)}var pr=b('<section class="findings svelte-ci42t5" aria-label="Findings, grouped by Stone"><header class="findings-head svelte-ci42t5"><h2 class="findings-h2 svelte-ci42t5">Findings · grouped by Stone</h2> <span class="findings-tagline svelte-ci42t5">cards = what each Stone found · provenance collapses below</span></header> <!> <!> <!></section>');function Er(R,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"provenanceMode",3,"smart"),M=ne(e,"showGrammar",3,!1),i=ne(e,"linkedKey",3,null),h=q(()=>{const s={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};for(const l of e.data.cards)s[l.stone].push(l);return s}),d=q(()=>{const s={cornerstone:{key:"cornerstone",members:[]},keystone:{key:"keystone",members:[]},touchstone:{key:"touchstone",members:[]},lodestone:{key:"lodestone",members:[]},capstone:{key:"capstone",members:[]}};for(const l of e.data.stones)s[l.key]=l;return s});var _=pr(),u=n(r(_),2);Nt(u,{get cards(){return e.data.cards},get stones(){return e.data.stones},get wallSeconds(){return e.data.wallSeconds},get cacheHit(){return e.data.cacheHit}});var S=n(u,2);te(S,16,()=>Be,s=>s,(s,l)=>{fr(s,{get stone(){return l},get cards(){return a(h)[l]},get trace(){return a(d)[l]},get density(){return w()},get provenanceMode(){return m()},get linkedKey(){return i()},get onCite(){return e.onCite},get onLink(){return e.onLink}})});var x=n(S,2);{var o=s=>{_r(s,{get density(){return w()}})};L(x,s=>{M()&&s(o)})}t(_),c(R,_),J()}const xr={cornerstone:[{id:"CORN-001",name:"sandy_inundation.lookup",stepNames:["sandy","sandy_inundation","sandy_nta"],tier:"empirical",skipReason:"Sandy 2012 inundation: query outside NYC bounds"},{id:"CORN-002",name:"dep_stormwater.lookup",stepNames:["dep","dep_stormwater","dep_extreme_2080_nta","dep_moderate_2050_nta","dep_moderate_current_nta"],tier:"modeled",skipReason:"NYC DEP stormwater scenarios: query outside NYC bounds"},{id:"CORN-003",name:"usgs_hwm.spatial_join",stepNames:["ida_hwm","ida_hwm_2021"],tier:"empirical",skipReason:"USGS Ida HWMs: no marks within 800 m of address"},{id:"CORN-004",name:"prithvi_water.lookup",stepNames:["prithvi","prithvi_eo_v2"],tier:"modeled",skipReason:"Prithvi-EO Ida polygons: no polygons within 500 m"},{id:"CORN-005",name:"microtopo.dem_hand_twi",stepNames:["microtopo","microtopo_lidar","microtopo_nta"],tier:"proxy",skipReason:"USGS 3DEP DEM: query outside NYC raster coverage"}],keystone:[{id:"KEY-001",name:"mta_entrance_exposure",stepNames:["mta_entrances","mta_entrance_exposure"],tier:"empirical",skipReason:"no entrances within radius"},{id:"KEY-002",name:"nycha.development_join",stepNames:["nycha","nycha_development_exposure"],tier:"empirical",skipReason:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe.school_join",stepNames:["doe_schools","doe_school_exposure"],tier:"empirical",skipReason:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh.facility_join",stepNames:["doh_hospitals","doh_hospital_exposure"],tier:"empirical",skipReason:"no acute-care hospitals within 1.0 mi"},{id:"KEY-005",name:"pluto.lot_lookup",stepNames:["pluto_lookup"],tier:"empirical",skipReason:"PLUTO join skipped: queried address not in NYC PLUTO dataset"},{id:"KEY-006",name:"terramind.buildings",stepNames:["terramind_buildings","terramind_synthesis"],tier:"modeled",skipReason:"TerraMind Buildings: no eo_chip available for this address (recent <30% cloud Sentinel-2 missing) or no high-confidence prediction"}],touchstone:[{id:"TCH-001",name:"floodnet.history",stepNames:["floodnet"],tier:"empirical",skipReason:"FloodNet sensor: no deployments within 600 m"},{id:"TCH-002",name:"nyc311.flood_complaints",stepNames:["nyc311","nyc311_nta"],tier:"proxy",skipReason:"NYC 311: no flood-relevant complaints within 200 m"},{id:"TCH-003",name:"nws_obs.metar",stepNames:["nws_obs"],tier:"empirical",skipReason:"NWS hourly METAR: nearest ASOS reports no precipitation"},{id:"TCH-004",name:"noaa_coops.recent",stepNames:["noaa_tides"],tier:"empirical",skipReason:"NOAA tide gauge: nearest station >25 km from address"},{id:"TCH-005",name:"prithvi_nyc_pluvial",stepNames:["prithvi_live","prithvi_eo_live"],tier:"modeled",skipReason:"Prithvi-NYC-Pluvial: no <30% cloud Sentinel-2 chip available in the last 120 d for this address"},{id:"TCH-006",name:"terramind.lulc",stepNames:["terramind_lulc"],tier:"synthetic",skipReason:"TerraMind LULC: eo_chip fetch returned no Sentinel-2 tile for this address"}],lodestone:[{id:"LOD-001",name:"nws_alerts.flood_relevant",stepNames:["nws_alerts"],tier:"modeled",skipReason:"NWS public alerts: no active flood-relevant alerts at this address"},{id:"LOD-002",name:"ttm_battery_surge.zero_shot",stepNames:["ttm_forecast"],tier:"modeled",skipReason:"Granite TTM r2 zero-shot: forecast not interesting (peak |residual| < 0.3 ft)"},{id:"LOD-003",name:"ttm_battery_surge.fine_tune",stepNames:["ttm_battery_surge"],tier:"modeled",skipReason:"Granite TTM Battery fine-tune: forecast not interesting (peak |residual| < 0.3 m)"},{id:"LOD-004",name:"ttm_311_forecast",stepNames:["ttm_311_forecast"],tier:"modeled",skipReason:"NYC 311 weekly forecast: no per-address history to extrapolate"},{id:"LOD-005",name:"floodnet_forecast",stepNames:["floodnet_forecast"],tier:"modeled",skipReason:"FloodNet sensor recurrence: sensor has < silent-floor historical events; forecast omitted"},{id:"LOD-006",name:"npcc4.slr_projection",stepNames:["npcc4_projection"],tier:"modeled",skipReason:"NPCC4 SLR projection: not yet wired into FSM (static reference card on hold)"}],capstone:[{id:"CAP-001",name:"rag.granite_embedding",stepNames:["rag_granite_embedding"],tier:"proxy",skipReason:"Granite Embedding RAG: no policy retrieval (out-of-NYC scope)"},{id:"CAP-002",name:"gliner.typed_extraction",stepNames:["gliner_extract"],tier:"proxy",skipReason:"GLiNER typed extraction: no RAG hits to extract over"},{id:"CAP-003",name:"granite41.compose_briefing",stepNames:["reconcile_granite41","mellea_reconcile_address","reconcile_neighborhood","reconcile_development","reconcile_live_now"],tier:"modeled",skipReason:"Reconciler did not run (no grounded data available)"},{id:"CAP-004",name:"mellea.grounding_check",stepNames:["mellea_grounding"],tier:"modeled",skipReason:"Mellea grounding-check: rolled into reconcile step on this run"}]};function Tr(R,e){const w=xr[R]??[],m=new Map;for(const h of e)m.set(h.name,h);const M=[],i=new Set;for(const h of w){let d;for(const _ of h.stepNames){const u=m.get(_);if(u){d=u,i.add(_);break}}d?M.push({...d,id:h.id,name:h.name,tier:d.tier??h.tier??null}):M.push({id:h.id,name:h.name,status:"not_invoked",tier:h.tier??null,note:h.skipReason})}for(const h of e)i.has(h.name)||M.push(h);return M}export{Ar as C,Er as F,Fr as M,Rr as R,Tr as f};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
web/sveltekit/build/_app/immutable/chunks/CJeJVIjP.js ADDED
@@ -0,0 +1 @@
 
 
1
+ var rt=e=>{throw TypeError(e)};var Dt=(e,t,n)=>t.has(e)||rt("Cannot "+n);var y=(e,t,n)=>(Dt(e,t,"read from private field"),n?n.call(e):t.get(e)),A=(e,t,n)=>t.has(e)?rt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{bf as Pe,bg as Vt,ai as at,a4 as T,o as I,a5 as O,ar as we,bh as Bt}from"./BTUA7_xE.js";const M=[];function Ke(e,t=Pe){let n=null;const a=new Set;function r(o){if(Vt(e,o)&&(e=o,n)){const l=!M.length;for(const c of a)c[1](),M.push(c,e);if(l){for(let c=0;c<M.length;c+=2)M[c][0](M[c+1]);M.length=0}}}function i(o){r(o(e))}function s(o,l=Pe){const c=[o,l];return a.add(c),a.size===1&&(n=t(r,i)||Pe),o(e),()=>{a.delete(c),a.size===0&&n&&(n(),n=null)}}return{set:r,update:i,subscribe:s}}class Me{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class ze{constructor(t,n){try{new Headers({location:n})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(n)}: this string contains characters that cannot be used in HTTP headers`)}this.status=t,this.location=n}}class Fe extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Kt(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Mt(e){return e.split("%25").map(decodeURI).join("%25")}function zt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function $e({href:e}){return e.split("#")[0]}function C(){}function Ft(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;function Gt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n}const Ht=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&X.delete(Ge(e)),Ht(e,t));const X=new Map;function Wt(e,t){const n=Ge(e,t),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...i}=JSON.parse(a.textContent);const s=a.getAttribute("data-ttl");return s&&X.set(n,{body:r,init:i,ttl:1e3*Number(s)}),a.getAttribute("data-b64")!==null&&(r=Gt(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Jt(e,t,n){if(X.size>0){const a=Ge(e,n),r=X.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(r.body,r.init);X.delete(a)}}return window.fetch(t,n)}function Ge(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t!=null&&t.headers||t!=null&&t.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${Ft(...r)}"]`}return a}const Yt=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Xt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Zt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const i=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(i)return t.push({name:i[1],matcher:i[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const s=a.split(/\[(.+?)\](?!\])/);return"/"+s.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Ce(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Ce(String.fromCharCode(...l.slice(2).split("-").map(m=>parseInt(m,16))));const d=Yt.exec(l),[,u,w,p,f]=d;return t.push({name:p,matcher:f,optional:!!u,rest:!!w,chained:w?c===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return Ce(l)}).join("")}).join("")}/?$`),params:t}}function Qt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Zt(e){return e.slice(1).split("/").filter(Qt)}function en(e,t,n){const a={},r=e.slice(1),i=r.filter(o=>o!==void 0);let s=0;for(let o=0;o<t.length;o+=1){const l=t[o];let c=r[o-s];if(l.chained&&l.rest&&s&&(c=r.slice(o-s,o+1).filter(d=>d).join("/"),s=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){a[l.name]=c;const d=t[o+1],u=r[o+1];d&&!d.rest&&d.optional&&u&&l.chained&&(s=0),!d&&!u&&Object.keys(a).length===i.length&&(s=0);continue}if(l.optional&&l.chained){s++;continue}return}if(!s)return a}function Ce(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function tn({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([o,[l,c,d]])=>{const{pattern:u,params:w}=Xt(o),p={id:o,exec:f=>{const m=u.exec(f);if(m)return en(m,w,a)},errors:[1,...d||[]].map(f=>e[f]),layouts:[0,...c||[]].map(s),leaf:i(l)};return p.errors.length=p.layouts.length=Math.max(p.errors.length,p.layouts.length),p});function i(o){const l=o<0;return l&&(o=~o),[l,e[o]]}function s(o){return o===void 0?o:[r.has(o),e[o]]}}function wt(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function ot(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}var ht;const U=((ht=globalThis.__sveltekit_1sh7tn8)==null?void 0:ht.base)??"";var pt;const nn=((pt=globalThis.__sveltekit_1sh7tn8)==null?void 0:pt.assets)??U??"",rn="1778350475932",vt="sveltekit:snapshot",yt="sveltekit:scroll",bt="sveltekit:states",an="sveltekit:pageurl",F="sveltekit:history",Z="sveltekit:navigation",D={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Ue=location.origin;function He(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function B(){return{x:pageXOffset,y:pageYOffset}}function z(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const st={...D,"":D.hover};function kt(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function St(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=kt(e)}}function qe(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";a.hash=`#${o}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,i=!a||!!r||Ae(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),s=(a==null?void 0:a.origin)===Ue&&e.hasAttribute("download");return{url:a,external:i,target:r,download:s}}function ve(e){let t=null,n=null,a=null,r=null,i=null,s=null,o=e;for(;o&&o!==document.documentElement;)a===null&&(a=z(o,"preload-code")),r===null&&(r=z(o,"preload-data")),t===null&&(t=z(o,"keepfocus")),n===null&&(n=z(o,"noscroll")),i===null&&(i=z(o,"reload")),s===null&&(s=z(o,"replacestate")),o=kt(o);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:st[a??"off"],preload_data:st[r??"off"],keepfocus:l(t),noscroll:l(n),reload:l(i),replace_state:l(s)}}function it(e){const t=Ke(e);let n=!0;function a(){n=!0,t.update(s=>s)}function r(s){n=!1,t.set(s)}function i(s){let o;return t.subscribe(l=>{(o===void 0||n&&l!==o)&&s(o=l)})}return{notify:a,set:r,subscribe:i}}const Et={v:C};function on(){const{set:e,subscribe:t}=Ke(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${nn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const s=(await r.json()).version!==rn;return s&&(e(!0),Et.v(),clearTimeout(n)),s}catch{return!1}}return{subscribe:t,check:a}}function Ae(e,t,n){return e.origin!==Ue||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Pn(e){}const Rt=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Rt];const sn=new Set([...Rt]);[...sn];function ln(e){return e.filter(t=>t!=null)}function me(e,t){return e+"/"+t}function We(e){return e instanceof Me||e instanceof Fe?e.status:500}function cn(e){return e instanceof Fe?e.text:"Internal Error"}let R,ee,je;const fn=at.toString().includes("$$")||/function \w+\(\) \{\}/.test(at.toString()),lt="a:";var oe,se,ie,le,ce,fe,ue,de,gt,he,mt,pe,_t;fn?(R={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(lt)},ee={current:null},je={current:!1}):(R=new(gt=class{constructor(){A(this,oe,T({}));A(this,se,T(null));A(this,ie,T(null));A(this,le,T({}));A(this,ce,T({id:null}));A(this,fe,T({}));A(this,ue,T(-1));A(this,de,T(new URL(lt)))}get data(){return I(y(this,oe))}set data(t){O(y(this,oe),t)}get form(){return I(y(this,se))}set form(t){O(y(this,se),t)}get error(){return I(y(this,ie))}set error(t){O(y(this,ie),t)}get params(){return I(y(this,le))}set params(t){O(y(this,le),t)}get route(){return I(y(this,ce))}set route(t){O(y(this,ce),t)}get state(){return I(y(this,fe))}set state(t){O(y(this,fe),t)}get status(){return I(y(this,ue))}set status(t){O(y(this,ue),t)}get url(){return I(y(this,de))}set url(t){O(y(this,de),t)}},oe=new WeakMap,se=new WeakMap,ie=new WeakMap,le=new WeakMap,ce=new WeakMap,fe=new WeakMap,ue=new WeakMap,de=new WeakMap,gt),ee=new(mt=class{constructor(){A(this,he,T(null))}get current(){return I(y(this,he))}set current(t){O(y(this,he),t)}},he=new WeakMap,mt),je=new(_t=class{constructor(){A(this,pe,T(!1))}get current(){return I(y(this,pe))}set current(t){O(y(this,pe),t)}},pe=new WeakMap,_t),Et.v=()=>je.current=!0);function un(e){Object.assign(R,e)}const dn=new Set(["icon","shortcut icon","apple-touch-icon"]);let J=null;const N=wt(yt)??{},te=wt(vt)??{},j={url:it({}),page:it({}),navigating:Ke(null),updated:on()};function Je(e){N[e]=B()}function hn(e,t){let n=e+1;for(;N[n];)delete N[n],n+=1;for(n=t+1;te[n];)delete te[n],n+=1}function ne(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(C)}async function xt(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(U||"/");e&&await e.update()}}let Ye,De,ye,P,Ve,S;const be=[],ke=[];let v=null;function Se(){var e;(e=v==null?void 0:v.fork)==null||e.then(t=>t==null?void 0:t.discard()),v=null}const _e=new Map,Lt=new Set,pn=new Set,Q=new Set;let _={branch:[],error:null,url:null},Ut=!1,Ee=!1,ct=!0,re=!1,Y=!1,At=!1,Xe=!1,Tt,k,L,V;const Re=new Set,ft=new Map,ut=new Map;async function Nn(e,t,n){var i,s,o,l;globalThis.__sveltekit_1sh7tn8&&(globalThis.__sveltekit_1sh7tn8.query,globalThis.__sveltekit_1sh7tn8.prerender),document.URL!==location.href&&(location.href=location.href),S=e,await((s=(i=e.hooks).init)==null?void 0:s.call(i)),Ye=tn(e),P=document.documentElement,Ve=t,De=e.nodes[0],ye=e.nodes[1],De(),ye(),k=(o=history.state)==null?void 0:o[F],L=(l=history.state)==null?void 0:l[Z],k||(k=L=Date.now(),history.replaceState({...history.state,[F]:k,[Z]:L},""));const a=N[k];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Ln(Ve,n)):(await G({type:"enter",url:He(S.hash?Tn(new URL(location.href)):location.href),replace_state:!0}),r()),xn()}function gn(){be.length=0,Xe=!1}function It(e){ke.some(t=>t==null?void 0:t.snapshot)&&(te[e]=ke.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function Ot(e){var t;(t=te[e])==null||t.forEach((n,a)=>{var r,i;(i=(r=ke[a])==null?void 0:r.snapshot)==null||i.restore(n)})}function dt(){Je(k),ot(yt,N),It(L),ot(vt,te)}async function Pt(e,t,n,a){let r,i;t.invalidateAll&&Se(),await G({type:"goto",url:He(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{if(t.invalidateAll){Xe=!0,r=new Set;for(const[s,o]of ft)for(const l of o.keys())r.add(me(s,l));i=new Set;for(const[s,o]of ut)for(const l of o.keys())i.add(me(s,l))}t.invalidate&&t.invalidate.forEach(Rn)}}),t.invalidateAll&&we().then(we).then(()=>{for(const[s,o]of ft)for(const[l,{resource:c}]of o)r!=null&&r.has(me(s,l))&&c.refresh();for(const[s,o]of ut)for(const[l,{resource:c}]of o)i!=null&&i.has(me(s,l))&&c.reconnect()})}async function mn(e){if(e.id!==(v==null?void 0:v.id)){Se();const t={};Re.add(t),v={id:e.id,token:t,promise:Ct({...e,preload:t}).then(n=>(Re.delete(t),n.type==="loaded"&&n.state.error&&Se(),n)),fork:null}}return v.promise}async function Ne(e){var n;const t=(n=await Te(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(a=>a[1]()))}async function $t(e,t,n){var i;const a={params:_.params,route:{id:((i=_.route)==null?void 0:i.id)??null},url:new URL(location.href)};_={...e.state,nav:a};const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(R,e.props.page),Tt=new S.root({target:t,props:{...e.props,stores:j,components:ke},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ot(L),n){const s={from:null,to:{...a,scroll:N[k]??B()},willUnload:!1,type:"enter",complete:Promise.resolve()};Q.forEach(o=>o(s))}Ee=!0}async function xe({url:e,params:t,branch:n,errors:a,status:r,error:i,route:s,form:o}){let l="never";if(U&&(e.pathname===U||e.pathname===U+"/"))l="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(l=f.slash);e.pathname=Kt(e.pathname,l),e.search=e.search;const c={type:"loaded",state:{url:e,params:t,branch:n,error:i,route:s},props:{constructors:ln(n).map(f=>f.node.component),page:nt(R)}};o!==void 0&&(c.props.form=o);let d={},u=!R,w=0;for(let f=0;f<Math.max(n.length,_.branch.length);f+=1){const m=n[f],h=_.branch[f];(m==null?void 0:m.data)!==(h==null?void 0:h.data)&&(u=!0),m&&(d={...d,...m.data},u&&(c.props[`data_${w}`]=d),w+=1)}return(!_.url||e.href!==_.url.href||_.error!==i||o!==void 0&&o!==R.form||u)&&(c.props.page={error:i,params:t,route:{id:(s==null?void 0:s.id)??null},state:{},status:r,url:new URL(e),form:o??null,data:u?d:R.data}),c}async function Qe({loader:e,parent:t,url:n,params:a,route:r,server_data_node:i}){var c,d;let s=null;const o={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await e();return{node:l,loader:e,server:i,universal:(c=l.universal)!=null&&c.load?{type:"data",data:s,uses:o}:null,data:s??(i==null?void 0:i.data)??null,slash:((d=l.universal)==null?void 0:d.trailingSlash)??(i==null?void 0:i.slash)}}function _n(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const i=Ee?Jt(a,r.href,t):Wt(a,t);return{resolved:r,promise:i}}function wn(e,t,n,a,r,i){if(Xe)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const s of r.search_params)if(a.has(s))return!0;for(const s of r.params)if(i[s]!==_.params[s])return!0;for(const s of r.dependencies)if(be.some(o=>o(new URL(s))))return!0;return!1}function Ze(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function vn(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),i=t.searchParams.getAll(a);r.every(s=>i.includes(s))&&i.every(s=>r.includes(s))&&n.delete(a)}return n}function yn({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:nt(R),constructors:[]}}}async function Ct({id:e,invalidating:t,url:n,params:a,route:r,preload:i}){if((v==null?void 0:v.id)===e)return Re.delete(v.token),v.promise;const{errors:s,layouts:o,leaf:l}=r,c=[...o,l];s.forEach(h=>h==null?void 0:h().catch(C)),c.forEach(h=>h==null?void 0:h[1]().catch(C));const d=_.url?e!==Le(_.url):!1,u=_.route?r.id!==_.route.id:!1,w=vn(_.url,n);let p=!1;const f=c.map(async(h,g)=>{var $;if(!h)return;const b=_.branch[g];return h[1]===(b==null?void 0:b.loader)&&!wn(p,u,d,w,($=b.universal)==null?void 0:$.uses,a)?b:(p=!0,Qe({loader:h[1],url:n,params:a,route:r,parent:async()=>{var ge;const q={};for(let K=0;K<g;K+=1)Object.assign(q,(ge=await f[K])==null?void 0:ge.data);return q},server_data_node:Ze(h[0]?{type:"skip"}:null,h[0]?b==null?void 0:b.server:void 0)}))});for(const h of f)h.catch(C);const m=[];for(let h=0;h<c.length;h+=1)if(c[h])try{m.push(await f[h])}catch(g){if(g instanceof ze)return{type:"redirect",location:g.location};if(Re.has(i))return yn({error:await ae(g,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let b=We(g),x;if(g instanceof Me)x=g.body;else{if(await j.updated.check())return await xt(),await ne(n);x=await ae(g,{params:a,url:n,route:{id:r.id}})}const $=await bn(h,m,s);return $?xe({url:n,params:a,branch:m.slice(0,$.idx).concat($.node),errors:s,status:b,error:x,route:r}):await Nt(n,{id:r.id},x,b)}else m.push(void 0);return xe({url:n,params:a,branch:m,errors:s,status:200,error:null,route:r,form:t?void 0:null})}async function bn(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function et({status:e,error:t,url:n,route:a}){const r={};let i=null;try{const s=await Qe({loader:De,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Ze(i)}),o={node:await ye(),loader:ye,universal:null,server:null,data:null};return xe({url:n,params:r,branch:[s,o],status:e,error:t,errors:[],route:null})}catch(s){if(s instanceof ze)return Pt(new URL(s.location,location.href),{},0);throw s}}async function kn(e){const t=e.href;if(_e.has(t))return _e.get(t);let n;try{const a=(async()=>{let r=await S.hooks.reroute({url:new URL(e),fetch:async(i,s)=>_n(i,s,e).promise})??e;if(typeof r=="string"){const i=new URL(e);S.hash?i.hash=r:i.pathname=r,r=i}return r})();_e.set(t,a),n=await a}catch{_e.delete(t);return}return n}async function Te(e,t){if(e&&!Ae(e,U,S.hash)){const n=await kn(e);if(!n)return;const a=Sn(n);for(const r of Ye){const i=r.exec(a);if(i)return{id:Le(e),invalidating:t,route:r,params:zt(i),url:e}}}}function Sn(e){return Mt(S.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(U.length))||"/"}function Le(e){return(S.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function jt({url:e,type:t,intent:n,delta:a,event:r,scroll:i}){let s=!1;const o=tt(_,n,e,t,i??null);a!==void 0&&(o.navigation.delta=a),r!==void 0&&(o.navigation.event=r);const l={...o.navigation,cancel:()=>{s=!0,o.reject(new Error("navigation cancelled"))}};return re||Lt.forEach(c=>c(l)),s?null:o}async function G({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s={},redirect_count:o=0,nav_token:l={},accept:c=C,block:d=C,event:u}){var K;const w=V;V=l;const p=await Te(t,!1),f=e==="enter"?tt(_,p,t,e):jt({url:t,type:e,delta:n==null?void 0:n.delta,intent:p,scroll:n==null?void 0:n.scroll,event:u});if(!f){d(),V===l&&(V=w);return}const m=k,h=L;c(),re=!0,Ee&&f.navigation.type!=="enter"&&j.navigating.set(ee.current=f.navigation);let g=p&&await Ct(p);if(!g){if(Ae(t,U,S.hash))return await ne(t,i);g=await Nt(t,{id:null},await ae(new Fe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,i)}if(t=(p==null?void 0:p.url)||t,V!==l)return f.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(o<20){await G({type:e,url:new URL(g.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s,redirect_count:o+1,nav_token:l}),f.fulfil(void 0);return}g=await et({status:500,error:await ae(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else g.props.page.status>=400&&await j.updated.check()&&(await xt(),await ne(t,i));if(gn(),Je(m),It(h),g.props.page.url.pathname!==t.pathname&&(t.pathname=g.props.page.url.pathname),s=n?n.state:s,!n){const E=i?0:1,H={[F]:k+=E,[Z]:L+=E,[bt]:s};(i?history.replaceState:history.pushState).call(history,H,"",t),i||hn(k,L)}const b=p&&(v==null?void 0:v.id)===p.id?v.fork:null;v!=null&&v.fork&&!b&&Se(),v=null,g.props.page.state=s;let x;if(Ee){const E=(await Promise.all(Array.from(pn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(E.length>0){let W=function(){E.forEach(Oe=>{Q.delete(Oe)})};E.push(W),E.forEach(Oe=>{Q.add(Oe)})}const H=f.navigation.to;_={...g.state,nav:{params:H.params,route:H.route,url:H.url}},g.props.page&&(g.props.page.url=t);const Ie=b&&await b;Ie?x=Ie.commit():(J=null,Tt.$set(g.props),J&&Object.assign(g.props.page,J),un(g.props.page),x=(K=Bt)==null?void 0:K()),At=!0}else await $t(g,Ve,!1);const{activeElement:$}=document;await x,await we(),await we();let q=null;if(ct){const E=n?n.scroll:r?B():null;E?scrollTo(E.x,E.y):(q=t.hash&&document.getElementById(qt(t)))?q.scrollIntoView():scrollTo(0,0)}const ge=document.activeElement!==$&&document.activeElement!==document.body;!a&&!ge&&An(t,!q),ct=!0,g.props.page&&(J&&Object.assign(g.props.page,J),Object.assign(R,g.props.page)),re=!1,e==="popstate"&&Ot(L),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=B()),Q.forEach(E=>E(f.navigation)),j.navigating.set(ee.current=null)}async function Nt(e,t,n,a,r){return e.origin===Ue&&e.pathname===location.pathname&&!Ut?await et({status:a,error:n,url:e,route:t}):await ne(e,r)}function En(){let e,t={element:void 0,href:void 0},n;P.addEventListener("mousemove",o=>{const l=o.target;clearTimeout(e),e=setTimeout(()=>{i(l,D.hover)},20)});function a(o){o.defaultPrevented||i(o.composedPath()[0],D.tap)}P.addEventListener("mousedown",a),P.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(o=>{for(const l of o)l.isIntersecting&&(Ne(new URL(l.target.href)),r.unobserve(l.target))},{threshold:0});async function i(o,l){const c=St(o,P),d=c===t.element&&(c==null?void 0:c.href)===t.href&&l>=n;if(!c||d)return;const{url:u,external:w,download:p}=qe(c,U,S.hash);if(w||p)return;const f=ve(c),m=u&&Le(_.url)===Le(u);if(!(f.reload||m))if(l<=f.preload_data){t={element:c,href:c.href},n=D.tap;const h=await Te(u,!1);if(!h)return;mn(h)}else l<=f.preload_code&&(t={element:c,href:c.href},n=l,Ne(u))}function s(){r.disconnect();for(const o of P.querySelectorAll("a")){const{url:l,external:c,download:d}=qe(o,U,S.hash);if(c||d)continue;const u=ve(o);u.reload||(u.preload_code===D.viewport&&r.observe(o),u.preload_code===D.eager&&Ne(l))}}Q.add(s),s()}function ae(e,t){if(e instanceof Me)return e.body;const n=We(e),a=cn(e);return S.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function qn(e,t={}){return e=new URL(He(e)),e.origin!==Ue?Promise.reject(new Error("goto: invalid URL")):Pt(e,t,0)}function Rn(e){if(typeof e=="function")be.push(e);else{const{href:t}=new URL(e,location.href);be.push(n=>n.href===t)}}function xn(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(dt(),!re){const r=tt(_,void 0,null,"leave"),i={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Lt.forEach(s=>s(i))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&dt()}),(t=navigator.connection)!=null&&t.saveData||En(),P.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=St(n.composedPath()[0],P);if(!a)return;const{url:r,external:i,target:s,download:o}=qe(a,U,S.hash);if(!r)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const l=ve(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[d,u]=(S.hash?r.hash.replace(/^#/,""):r.href).split("#"),w=d===$e(location);if(i||l.reload&&(!w||!u)){jt({url:r,type:"link",event:n})?re=!0:n.preventDefault();return}if(u!==void 0&&w){const[,p]=_.url.href.split("#");if(p===u){if(n.preventDefault(),u===""||u==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const f=a.ownerDocument.getElementById(decodeURIComponent(u));f&&(f.scrollIntoView(),f.focus())}return}if(Y=!0,Je(k),e(r),!l.replace_state)return;Y=!1}n.preventDefault(),await new Promise(p=>{requestAnimationFrame(()=>{setTimeout(p,0)}),setTimeout(p,100)}),await G({type:"link",url:r,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??r.href===location.href,event:n})}),P.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const o=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(Ae(o,U,!1))return;const l=n.target,c=ve(l);if(c.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(l,r);o.search=new URLSearchParams(d).toString(),G({type:"form",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Be){if((a=n.state)!=null&&a[F]){const r=n.state[F];if(V={},r===k)return;const i=N[r],s=n.state[bt]??{},o=new URL(n.state[an]??location.href),l=n.state[Z],c=_.url?$e(location)===$e(_.url):!1;if(l===L&&(At||c)){s!==R.state&&(R.state=s),e(o),N[k]=B(),i&&scrollTo(i.x,i.y),k=r;return}const u=r-k;await G({type:"popstate",url:o,popped:{state:s,scroll:i,delta:u},accept:()=>{k=r,L=l},block:()=>{history.go(-u)},nav_token:V,event:n})}else if(!Y){const r=new URL(location.href);e(r),S.hash&&location.reload()}}}),addEventListener("hashchange",()=>{Y&&(Y=!1,history.replaceState({...history.state,[F]:++k,[Z]:L},"",location.href))});for(const n of document.querySelectorAll("link"))dn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&j.navigating.set(ee.current=null)});function e(n){_.url=R.url=n,j.page.set(nt(R)),j.page.notify()}}async function Ln(e,{status:t=200,error:n,node_ids:a,params:r,route:i,server_route:s,data:o,form:l}){Ut=!0;const c=new URL(location.href);let d;({params:r={},route:i={id:null}}=await Te(c,!1)||{}),d=Ye.find(({id:p})=>p===i.id);let u,w=!0;try{const p=a.map(async(m,h)=>{const g=o[h];return g!=null&&g.uses&&(g.uses=Un(g.uses)),Qe({loader:S.nodes[m],url:c,params:r,route:i,parent:async()=>{const b={};for(let x=0;x<h;x+=1)Object.assign(b,(await p[x]).data);return b},server_data_node:Ze(g)})}),f=await Promise.all(p);if(d){const m=d.layouts;for(let h=0;h<m.length;h++)m[h]||f.splice(h,0,void 0)}u=await xe({url:c,params:r,branch:f,status:t,error:n,errors:d==null?void 0:d.errors,form:l,route:d??null})}catch(p){if(p instanceof ze){await ne(new URL(p.location,location.href));return}u=await et({status:We(p),error:await ae(p,{url:c,params:r,route:i}),url:c,route:i}),e.textContent="",w=!1}finally{}u.props.page&&(u.props.page.state={}),await $t(u,e,w)}function Un(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Be=!1;function An(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=qt(e);if(a&&document.getElementById(a)){const{x:i,y:s}=B();setTimeout(()=>{const o=history.state;Be=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(o,"",e),t&&scrollTo(i,s),Be=!1})}else{const i=document.body,s=i.getAttribute("tabindex");i.tabIndex=-1,i.focus({preventScroll:!0,focusVisible:!1}),s!==null?i.setAttribute("tabindex",s):i.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const i=[];for(let s=0;s<r.rangeCount;s+=1)i.push(r.getRangeAt(s));setTimeout(()=>{if(r.rangeCount===i.length){for(let s=0;s<r.rangeCount;s+=1){const o=i[s],l=r.getRangeAt(s);if(o.commonAncestorContainer!==l.commonAncestorContainer||o.startContainer!==l.startContainer||o.endContainer!==l.endContainer||o.startOffset!==l.startOffset||o.endOffset!==l.endOffset)return}r.removeAllRanges()}})}}}function tt(e,t,n,a,r=null){var c,d;let i,s;const o=new Promise((u,w)=>{i=u,s=w});return o.catch(C),{navigation:{from:{params:e.params,route:{id:((c=e.route)==null?void 0:c.id)??null},url:e.url,scroll:B()},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((d=t==null?void 0:t.route)==null?void 0:d.id)??null},url:n,scroll:r},willUnload:!t,type:a,complete:o},fulfil:i,reject:s}}function nt(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function Tn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function qt(e){let t;if(S.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Nn as a,qn as g,Pn as l,R as p,j as s};
web/sveltekit/build/_app/immutable/chunks/FjZhY28w.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import{k as Ue,o as Ke,a as c,f as y,s as m,t as we,d as Fe,c as Me,e as Re,b as fe}from"./CWw6qgC_.js";import{h as he,n as Te,j as Ne,bd as Ge,d as Qe,a3 as Ve,aW as Ze,b7 as Xe,k as Je,b as $e,e as qe,i as Be,a0 as et,av as tt,p as $,t as C,a as ee,s as n,c as r,r as t,aR as se,o as a,al as P,am as ie,ai as at,be as rt,a5 as Se,a4 as Le,f as te}from"./BTUA7_xE.js";import{B as st,i as B}from"./Bd-v_9Ud.js";import{e as ae,i as ce}from"./25_y8TFd.js";import{s as _,a as ge,b as ve,c as it,C as nt}from"./B0XoTt7U.js";import{T as me,c as lt,b as ot,d as Pe}from"./BatqQaKj.js";import{b as dt,_ as vt}from"./CXQd8Y6F.js";import{p as ne}from"./CW0zSL4D.js";import{P as ct}from"./D907np-5.js";function ut(R,e,w,f,M,i){let g=he;he&&Te();var d=null;he&&Ne.nodeType===Ge&&(d=Ne,Te());var p=he?Ne:R,h=new st(p,!1);Qe(()=>{const S=e()||null;var x=S==="svg"?Xe:void 0;if(S===null){h.ensure(null,null);return}return h.ensure(S,o=>{if(S){if(d=he?d:Ze(S,x),Ue(d,d),f){he&&Ke(S)&&d.append(document.createComment(""));var s=he?Je(d):d.appendChild($e());he&&(s===null?qe(!1):Be(s)),f(d,s)}et.nodes.end=d,o.before(d)}he&&Be(o)}),()=>{}},Ve),tt(()=>{}),g&&(qe(!0),Be(p))}var ht=y('<a target="_blank" rel="noopener noreferrer"> </a>'),gt=y('<li><span class="citation-num"> </span> <div class="citation-body"><div class="citation-line-1"><!> <span class="citation-source"> </span> <span class="citation-vintage"> </span></div> <div class="citation-title"><!></div> <div class="citation-meta"><span class="citation-docid"> </span> <span class="citation-retrieved"> </span></div></div></li>'),mt=y(`<aside class="citation-drawer svelte-1p339fd" aria-label="Citations"><div class="citation-drawer-head"><span class="section-label"> </span> <span class="citation-drawer-meta">live · primary sources</span></div> <ol class="citation-list"></ol> <div class="citation-drawer-foot"><span class="section-label">Trust signals</span> <p class="citation-foot-copy">All foundation models Apache-2.0. All data from public-record federal,
2
+ state, and city sources. No commercial APIs contacted at runtime.</p></div></aside>`);function Hr(R,e){$(e,!0);let w=P(()=>Object.values(e.citations).sort((p,h)=>p.n-h.n));var f=mt(),M=r(f),i=r(M),g=r(i);t(i),se(2),t(M);var d=n(M,2);ae(d,21,()=>a(w),p=>p.id,(p,h)=>{var S=gt();let x;var o=r(S),s=r(o);t(o);var l=n(o,2),b=r(l),N=r(b);me(N,{get tier(){return a(h).tier},size:10,get color(){return`var(--tier-${a(h).tier??""})`}});var u=n(N,2),v=r(u,!0);t(u);var k=n(u,2),L=r(k);t(k),t(b);var T=n(b,2),O=r(T);{var j=F=>{var Y=ht(),Q=r(Y,!0);t(Y),C(()=>{_(Y,"href",a(h).url),m(Q,a(h).title)}),c(F,Y)},I=P(()=>a(h).url&&a(h).url.startsWith("http")),z=F=>{var Y=we();C(()=>m(Y,a(h).title)),c(F,Y)};B(O,F=>{a(I)?F(j):F(z,-1)})}t(T);var H=n(T,2),U=r(H),D=r(U,!0);t(U);var q=n(U,2),E=r(q);t(q),t(H),t(l),t(S),C(()=>{_(S,"id",`cite-${a(h).id??""}`),x=ge(S,1,"citation-item",null,x,{"is-active":lt.active===a(h).id}),m(s,`[${a(h).n??""}]`),m(v,a(h).source),m(L,`v. ${a(h).vintage??""}`),m(D,a(h).docId),m(E,`retr. ${a(h).retrieved??""}`)}),c(p,S)}),t(d),se(2),t(f),C(()=>m(g,`Citations · ${a(w).length??""}`)),c(R,f),ee()}const De=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
3
+ <rect width="12" height="12" fill="rgba(42,111,168,0.18)"/>
4
+ <g stroke="#2A6FA8" stroke-width="1.4">
5
+ <line x1="-2" y1="2" x2="14" y2="-14"/>
6
+ <line x1="-2" y1="8" x2="14" y2="-8"/>
7
+ <line x1="-2" y1="14" x2="14" y2="-2"/>
8
+ <line x1="-2" y1="20" x2="14" y2="4"/>
9
+ </g>
10
+ </svg>`,ft=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
11
+ <rect width="12" height="12" fill="rgba(42,111,168,0.16)"/>
12
+ <g stroke="#2A6FA8" stroke-width="1.1">
13
+ <line x1="-2" y1="6" x2="14" y2="-10"/>
14
+ <line x1="-2" y1="14" x2="14" y2="-2"/>
15
+ <line x1="-2" y1="22" x2="14" y2="6"/>
16
+ </g>
17
+ </svg>`;async function _t(R,e){const w=new Blob([R],{type:"image/svg+xml"}),f=URL.createObjectURL(w);try{return await new Promise((i,g)=>{const d=new Image(e,e);d.onload=()=>i(d),d.onerror=p=>g(p),d.src=f})}finally{URL.revokeObjectURL(f)}}async function yt(R){const e=[["syn-stripe-45",De,12],["syn-stripe-45-2x",De,24],["syn-stripe-45-low",ft,12]];for(const[w,f,M]of e)if(!R.hasImage(w))try{const i=await _t(f,M);R.addImage(w,i,{pixelRatio:M/12})}catch(i){console.warn(`syn-stripe registration failed for ${w}`,i)}}var pt=y('<span class="link-badge svelte-wk2bu4" aria-hidden="true"> </span>'),xt=y('<div class="map-frame svelte-wk2bu4"><div role="application" class="rip-map-container svelte-wk2bu4"></div> <!></div>');function jr(R,e){$(e,!0);let w=ne(e,"activeLayers",19,()=>({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),f=ne(e,"linkedKey",3,null),M=Le(null),i=null,g=Le(!1);const d={type:"FeatureCollection",features:[]};function p(l,b){if(!i||!a(g))return;const N=i.getSource(l);N&&N.setData(b??d)}function h(l,b){!i||!a(g)||i.getLayer(l)&&i.setLayoutProperty(l,"visibility",b?"visible":"none")}ie(()=>{p("sandy-empirical",e.sandyEmpirical)}),ie(()=>{p("dep-modeled",e.depModeled)}),ie(()=>{p("syn-prior",e.syntheticPrior)}),ie(()=>{p("proxy-311",e.proxy311)}),ie(()=>{p("register-points",e.registerPoints)}),ie(()=>{p("register-polygons",e.registerPolygons)}),ie(()=>{p("terramind-lulc",e.terramindLulc)}),ie(()=>{p("terramind-buildings",e.terramindBuildings)}),ie(()=>{p("prithvi-live",e.prithviLive)}),ie(()=>{p("ida-hwm",e.idaHwm)}),ie(()=>{h("tier-empirical-fill",w().empirical),h("tier-empirical-line",w().empirical),h("ida-hwm-circle",w().empirical),h("tier-modeled-fill",w().modeled),h("tier-modeled-line",w().modeled),h("tier-synthetic-fill",w().synthetic),h("tier-synthetic-line",w().synthetic),h("terramind-lulc-fill",w().synthetic),h("terramind-lulc-line",w().synthetic),h("terramind-buildings-fill",w().synthetic),h("terramind-buildings-line",w().synthetic),h("prithvi-live-fill",w().modeled),h("prithvi-live-line",w().modeled),h("tier-proxy-dots",w().proxy)}),ie(()=>{!i||!a(g)||i.flyTo({center:[e.address.lon,e.address.lat],zoom:15,essential:!0})}),at(async()=>{if(!a(M))return;const l=await vt(()=>import("./D4L2lGt1.js").then(b=>b.m),[],import.meta.url);i=new l.Map({container:a(M),style:ct,center:[e.address.lon,e.address.lat],zoom:15,attributionControl:{compact:!0}}),i.addControl(new l.NavigationControl({visualizePitch:!1}),"top-right"),i.addControl(new l.ScaleControl({maxWidth:100,unit:"imperial"}),"bottom-left"),i.on("load",()=>{if(!i)return;window.__riprapMap=i,yt(i);const b=()=>({type:"FeatureCollection",features:[]});i.addSource("sandy-empirical",{type:"geojson",data:e.sandyEmpirical??b()}),i.addSource("dep-modeled",{type:"geojson",data:e.depModeled??b()}),i.addSource("syn-prior",{type:"geojson",data:e.syntheticPrior??b()}),i.addSource("proxy-311",{type:"geojson",data:e.proxy311??b()}),i.addSource("register-points",{type:"geojson",data:e.registerPoints??b()}),i.addSource("register-polygons",{type:"geojson",data:e.registerPolygons??b()}),i.addSource("terramind-lulc",{type:"geojson",data:e.terramindLulc??b()}),i.addSource("terramind-buildings",{type:"geojson",data:e.terramindBuildings??b()}),i.addSource("prithvi-live",{type:"geojson",data:e.prithviLive??b()}),i.addSource("ida-hwm",{type:"geojson",data:e.idaHwm??b()}),i.addSource("queried-address",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:[e.address.lon,e.address.lat]},properties:{label:e.address.label}}]}}),i.addLayer({id:"tier-empirical-fill",type:"fill",source:"sandy-empirical",paint:{"fill-color":"#0B5394","fill-opacity":.4}}),i.addLayer({id:"tier-empirical-line",type:"line",source:"sandy-empirical",paint:{"line-color":"#0B5394","line-width":1.5}}),i.addLayer({id:"tier-modeled-fill",type:"fill",source:"dep-modeled",paint:{"fill-color":"#2A6FA8","fill-opacity":.25}}),i.addLayer({id:"tier-modeled-line",type:"line",source:"dep-modeled",paint:{"line-color":"#2A6FA8","line-width":1.5}}),i.addLayer({id:"tier-synthetic-fill",type:"fill",source:"syn-prior",paint:{"fill-pattern":"syn-stripe-45","fill-opacity":.65}}),i.addLayer({id:"tier-synthetic-line",type:"line",source:"syn-prior",paint:{"line-color":"#2A6FA8","line-width":1.5,"line-dasharray":[4,3]}}),i.addLayer({id:"tier-proxy-dots",type:"circle",source:"proxy-311",paint:{"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1.25,"circle-radius":["interpolate",["linear"],["coalesce",["get","count"],1],1,3,5,6,15,9,30,12]}}),i.addLayer({id:"terramind-lulc-fill",type:"fill",source:"terramind-lulc",paint:{"fill-color":["get","fill_color"],"fill-opacity":.25}}),i.addLayer({id:"terramind-lulc-line",type:"line",source:"terramind-lulc",paint:{"line-color":["get","fill_color"],"line-width":.75,"line-opacity":.45,"line-dasharray":[3,2]}}),i.addLayer({id:"terramind-buildings-fill",type:"fill",source:"terramind-buildings",paint:{"fill-color":"#7C3AED","fill-opacity":.15}}),i.addLayer({id:"terramind-buildings-line",type:"line",source:"terramind-buildings",paint:{"line-color":"#7C3AED","line-width":1,"line-opacity":.6,"line-dasharray":[2,2]}}),i.addLayer({id:"prithvi-live-fill",type:"fill",source:"prithvi-live",paint:{"fill-color":"#0D9488","fill-opacity":.2}}),i.addLayer({id:"prithvi-live-line",type:"line",source:"prithvi-live",paint:{"line-color":"#0D9488","line-width":1,"line-opacity":.55}}),i.addLayer({id:"register-polygons-fill",type:"fill",source:"register-polygons",paint:{"fill-color":"#0B5394","fill-opacity":["interpolate",["linear"],["coalesce",["get","pct_inside_sandy"],0],0,.1,25,.2,50,.32,75,.45]}}),i.addLayer({id:"register-polygons-line",type:"line",source:"register-polygons",paint:{"line-color":"#0B5394","line-width":1,"line-opacity":.85}}),i.addLayer({id:"ida-hwm-circle",type:"circle",source:"ida-hwm",paint:{"circle-color":"#D97706","circle-stroke-color":"#F4F6F9","circle-stroke-width":1.5,"circle-radius":["interpolate",["linear"],["coalesce",["get","height_above_gnd_ft"],.5],0,5,1,7,3,9,5,12],"circle-opacity":.92}}),i.on("mouseenter","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","ida-hwm-circle",N=>{var U;if(!i||!((U=N.features)!=null&&U.length))return;const u=N.features[0],v=u.properties??{},k=String(v.site_description??"?"),L=v.elev_ft!=null?`${Number(v.elev_ft).toFixed(1)} ft NAVD88`:"—",T=v.height_above_gnd_ft!=null?`${Number(v.height_above_gnd_ft).toFixed(2)} ft above ground`:"—",O=String(v.hwm_quality??""),j=v.distance_m!=null?`${v.distance_m} m from query`:"",I=`
18
+ <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px; max-width: 220px;">
19
+ <div style="font-weight: 600; color: #D97706; font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;">Ida 2021 HWM · USGS</div>
20
+ <div style="margin-top: 4px; color: #0F172A; font-size: 12px;">${k}</div>
21
+ <div style="margin-top: 6px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #6B6B6B;">
22
+ elev: ${L}<br>
23
+ mark: ${T}<br>
24
+ ${O?`quality: ${O}<br>`:""}
25
+ ${j}
26
+ </div>
27
+ </div>`,z=new l.Popup({closeButton:!0,offset:12}),H=u.geometry.coordinates;z.setLngLat(H).setHTML(I).addTo(i)}),i.addLayer({id:"register-points-circle",type:"circle",source:"register-points",paint:{"circle-color":["case",["==",["get","inside_sandy_2012"],!0],"#0B5394","#6B6B6B"],"circle-stroke-color":"#F4F6F9","circle-stroke-width":1.25,"circle-radius":["match",["get","kind"],"subway",4,"school",5,"hospital",6,"nycha",7,4],"circle-opacity":.9}}),i.on("mouseenter","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","register-points-circle",N=>{var H;if(!i||!((H=N.features)!=null&&H.length))return;const u=N.features[0],v=u.properties??{},k=String(v.name??"?"),L=String(v.kind??"?"),T=v.inside_sandy_2012===!0||v.inside_sandy_2012==="true",O=String(v.doc_id??""),j=`
28
+ <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px;">
29
+ <div style="font-weight: 600; color: #0F172A;">${k}</div>
30
+ <div style="color: #6B6B6B; font-size: 11px; margin-top: 2px;">${L}</div>
31
+ <div style="margin-top: 6px;">
32
+ <span style="font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: ${T?"#0B5394":"#6B6B6B"};">
33
+ inside_sandy_2012=${T}
34
+ </span>
35
+ </div>
36
+ ${O?`<div style="margin-top: 4px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #005EA2;">[${O}]</div>`:""}
37
+ </div>`,I=new l.Popup({closeButton:!0,offset:12}),z=u.geometry.coordinates;I.setLngLat(z).setHTML(j).addTo(i)}),i.addLayer({id:"queried-halo",type:"circle",source:"queried-address",paint:{"circle-color":"rgba(209, 124, 0, 0.20)","circle-radius":16}}),i.addLayer({id:"queried-pin",type:"circle",source:"queried-address",paint:{"circle-color":"#005EA2","circle-stroke-color":"#F4F6F9","circle-stroke-width":2,"circle-radius":7}}),i.addLayer({id:"queried-label",type:"symbol",source:"queried-address",layout:{"text-field":["get","label"],"text-font":["Open Sans Semibold","Arial Unicode MS Bold"],"text-size":12,"text-offset":[0,-1.6],"text-anchor":"bottom"},paint:{"text-color":"#0F172A","text-halo-color":"#F4F6F9","text-halo-width":1.5}}),Se(g,!0)})}),rt(()=>{i==null||i.remove(),i=null});var S=xt(),x=r(S);dt(x,l=>Se(M,l),()=>a(M));var o=n(x,2);{var s=l=>{var b=pt(),N=r(b);t(b),C(()=>m(N,`linked: ${f()??""}`)),c(l,b)};B(o,l=>{f()&&l(s)})}t(S),C(()=>{_(S,"data-linked",f()??""),_(x,"aria-label",`Flood-exposure map for ${e.address.label??""}`)}),c(R,S),ee()}const Ee=["cornerstone","keystone","touchstone","lodestone","capstone"],Ae={cornerstone:{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers"},keystone:{name:"Keystone",role:"the asset register",tag:"what's exposed"},touchstone:{name:"Touchstone",role:"the live observer",tag:"what's happening now"},lodestone:{name:"Lodestone",role:"the projector",tag:"what's coming"},capstone:{name:"Capstone",role:"the synthesizer",tag:"writes it all down with citations"}};var bt=y('<span class="layers-count svelte-1g2dety"> </span>'),wt=y('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">no map layers — see Findings cards</span></li>'),kt=y('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">not a map layer</span></li>'),St=y('<span class="layers-state-dim svelte-1g2dety" title="Not yet wired to map source">off · catalog</span>'),Mt=y('<li><span class="layers-glyph svelte-1g2dety" aria-hidden="true"><!></span> <span class="layers-text svelte-1g2dety"><span class="layers-label svelte-1g2dety"> </span> <span class="layers-meta svelte-1g2dety"> <!></span></span> <span class="layers-state svelte-1g2dety"><!></span></li>'),Ct=y('<details open=""><summary class="svelte-1g2dety"><span class="layers-caret svelte-1g2dety" aria-hidden="true">▾</span> <span class="layers-stone-name svelte-1g2dety"> </span> <span class="layers-stone-tag svelte-1g2dety"> </span> <!></summary> <ul class="layers-list svelte-1g2dety"><!></ul></details>'),Nt=y('<button type="button"><!> <span> </span> <span class="layers-master-state svelte-1g2dety"> </span></button>'),Bt=y('<aside class="layers-panel svelte-1g2dety" aria-label="Map layers grouped by Stone"><div class="layers-head svelte-1g2dety"><span class="section-label">Layers · grouped by Stone</span></div> <!> <div class="layers-masters svelte-1g2dety" role="group" aria-label="Master tier toggles"><span class="section-label">Tier toggles</span> <div class="layers-master-row svelte-1g2dety"></div></div></aside>');function Yr(R,e){$(e,!0);const w={cornerstone:[{label:"Sandy Inundation Zone (2012)",source:"NYC OEM",tier:"empirical",wired:!0},{label:"FEMA / DEP scenarios",source:"FEMA · NYC DEP",tier:"modeled",wired:!0},{label:"Ida HWM points (2021)",source:"USGS STN",tier:"empirical",wired:!0},{label:"Microtopography (HAND/TWI)",source:"USGS 3DEP",tier:"proxy",wired:!1}],keystone:[{label:"MTA subway entrances",source:"MTA Open Data",tier:"empirical",wired:!0},{label:"NYCHA developments",source:"NYC OD phvi-damg",tier:"empirical",wired:!0},{label:"DOE schools",source:"NYC DOE Locations",tier:"empirical",wired:!0},{label:"DOH hospitals",source:"NYS DOH vn5v-hh5r",tier:"empirical",wired:!0},{label:"TerraMind Buildings (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!0}],touchstone:[{label:"311 flood complaints",source:"NYC 311",tier:"proxy",wired:!1},{label:"FloodNet sensors",source:"FloodNet NYC",tier:"proxy",wired:!0},{label:"TerraMind LULC (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!0},{label:"Prithvi-NYC-Pluvial flood pred.",source:"msradam/Prithvi-EO-2.0-NYC-Pluvial",tier:"modeled",wired:!0}],lodestone:[],capstone:[]};function f(S){return!!e.active[S.tier]}function M(S){return w[S].length}const i=[{k:"empirical",tier:"empirical",label:"EMP"},{k:"modeled",tier:"modeled",label:"MOD"},{k:"proxy",tier:"proxy",label:"PRX"},{k:"synthetic",tier:"synthetic",label:"SYN"}];var g=Bt(),d=n(r(g),2);ae(d,16,()=>Ee,S=>S,(S,x)=>{var o=Ct(),s=r(o),l=n(r(s),2),b=r(l,!0);t(l);var N=n(l,2),u=r(N);t(N);var v=n(N,2);{var k=H=>{var U=bt(),D=r(U,!0);t(U),C(q=>m(D,q),[()=>M(x)]),c(H,U)},L=P(()=>M(x)>0);B(v,H=>{a(L)&&H(k)})}t(s);var T=n(s,2),O=r(T);{var j=H=>{var U=wt();c(H,U)},I=H=>{var U=kt();c(H,U)},z=H=>{var U=Me(),D=te(U);ae(D,17,()=>w[x],ce,(q,E)=>{var F=Mt();let Y;var Q=r(F),re=r(Q);me(re,{get tier(){return a(E).tier},size:11,get color(){return`var(--tier-${a(E).tier??""})`}}),t(Q);var G=n(Q,2),X=r(G),le=r(X,!0);t(X);var _e=n(X,2),be=r(_e),J=n(be);ot(J,{get tier(){return a(E).tier},compact:!0}),t(_e),t(G);var V=n(G,2),oe=r(V);{var ue=K=>{var Z=St();c(K,Z)},ye=K=>{var Z=we("on");c(K,Z)},A=P(()=>f(a(E))),W=K=>{var Z=we("off");c(K,Z)};B(oe,K=>{a(E).wired?a(A)?K(ye,1):K(W,-1):K(ue)})}t(V),t(F),C(()=>{Y=ge(F,1,"layers-row svelte-1g2dety",null,Y,{dim:!a(E).wired}),m(le,a(E).label),m(be,`${a(E).source??""} · `)}),c(q,F)}),c(H,U)};B(O,H=>{x==="lodestone"?H(j):x==="capstone"?H(I,1):H(z,-1)})}t(T),t(o),C(()=>{ge(o,1,`layers-group region-${x??""}`,"svelte-1g2dety"),m(b,Ae[x].name),m(u,`— ${Ae[x].tag??""}`)}),c(S,o)});var p=n(d,2),h=n(r(p),2);ae(h,21,()=>i,S=>S.k,(S,x)=>{var o=Nt();let s;var l=r(o);me(l,{get tier(){return a(x).tier},size:11,get color(){return`var(--tier-${a(x).tier??""})`}});var b=n(l,2),N=r(b,!0);t(b);var u=n(b,2),v=r(u,!0);t(u),t(o),C(()=>{s=ge(o,1,"layers-master svelte-1g2dety",null,s,{"is-on":e.active[a(x).k]}),_(o,"aria-pressed",e.active[a(x).k]),m(N,a(x).label),m(v,e.active[a(x).k]?"ON":"OFF")}),Re("click",o,()=>e.onToggle(a(x).k)),c(S,o)}),t(h),t(p),t(g),c(R,g),ee()}Fe(["click"]);var Lt=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-silent svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> silent</span>',1),At=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-warn svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> warned</span>',1),Ft=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-err svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> errored</span>',1),Rt=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-notinvoked svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> not invoked</span>',1),Et=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> cache</span>',1),Tt=y('<span class="rh-em-tok svelte-1vuwkv4"> </span>'),qt=y('<span class="rh-em-ratio svelte-1vuwkv4"> </span>'),Pt=y('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-em svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> inference <!> <!></span>',1),Dt=y('<div class="rh svelte-1vuwkv4"><span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> Stones</span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> fired</span> <!> <!> <!> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> </span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> wall-clock</span> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-total svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> registered</span> <!></div>');function It(R,e){$(e,!0);function w(A){return A.flatMap(W=>W.children?[W,...w(W.children)]:[W])}let f=P(()=>e.stones.flatMap(A=>w(A.members))),M=P(()=>a(f).length),i=P(()=>a(f).filter(A=>A.status==="fired"||A.status==="warned").length),g=P(()=>a(f).filter(A=>A.status==="silent_by_design").length),d=P(()=>a(f).filter(A=>A.status==="warned").length),p=P(()=>a(f).filter(A=>A.status==="errored").length),h=P(()=>a(f).filter(A=>A.status==="not_invoked").length),S=P(()=>e.wallSeconds==null?"—":e.wallSeconds<1?`${Math.round(e.wallSeconds*1e3)}ms`:`${e.wallSeconds.toFixed(1)}s`),x=P(()=>{if(!e.emissions||e.emissions.total_wh===0)return null;const A=e.emissions.total_wh;return A<.1?`${e.emissions.total_mwh.toFixed(1)} mWh`:`${A.toFixed(2)} Wh`}),o=P(()=>{var W,K;const A=(K=(W=e.emissions)==null?void 0:W.tokens)==null?void 0:K.total;return A?A>=1e3?`${(A/1e3).toFixed(1)}K tok`:`${A} tok`:null}),s=P(()=>{var A,W;return((W=(A=e.emissions)==null?void 0:A.comparison)==null?void 0:W.ratio_cloud_over_query)??null}),l=P(()=>{if(!e.emissions)return null;const A=Object.values(e.emissions.by_hardware).map(W=>W.label);return A.length===1?A[0]:A.join(" + ")}),b=P(()=>e.emissions?[`${e.emissions.n_calls} inference calls — ${e.emissions.total_joules} J total`,a(l)?`Hardware: ${a(l)}`:"",e.emissions.tokens.total?`Tokens: ${e.emissions.tokens.prompt??0} prompt + ${e.emissions.tokens.completion??0} completion`:"",a(s)!=null?`~${a(s)}× lower than ${e.emissions.comparison.cloud_per_query_mwh} mWh frontier-cloud per-query estimate`:"",e.emissions.method].filter(Boolean).join(`
38
+ `):"");var N=Dt(),u=r(N),v=r(u),k=r(v,!0);t(v),se(),t(u);var L=n(u,4),T=r(L),O=r(T,!0);t(T),se(),t(L);var j=n(L,2);{var I=A=>{var W=Lt(),K=n(te(W),2),Z=r(K),de=r(Z,!0);t(Z),se(),t(K),C(()=>m(de,a(g))),c(A,W)};B(j,A=>{a(g)>0&&A(I)})}var z=n(j,2);{var H=A=>{var W=At(),K=n(te(W),2),Z=r(K),de=r(Z,!0);t(Z),se(),t(K),C(()=>m(de,a(d))),c(A,W)};B(z,A=>{a(d)>0&&A(H)})}var U=n(z,2);{var D=A=>{var W=Ft(),K=n(te(W),2),Z=r(K),de=r(Z,!0);t(Z),se(),t(K),C(()=>m(de,a(p))),c(A,W)};B(U,A=>{a(p)>0&&A(D)})}var q=n(U,2);{var E=A=>{var W=Rt(),K=n(te(W),2),Z=r(K),de=r(Z,!0);t(Z),se(),t(K),C(()=>m(de,a(h))),c(A,W)};B(q,A=>{a(h)>0&&A(E)})}var F=n(q,4),Y=r(F),Q=r(Y,!0);t(Y);var re=n(Y);t(F);var G=n(F,4),X=r(G),le=r(X,!0);t(X),se(),t(G);var _e=n(G,2);{var be=A=>{var W=Et(),K=n(te(W),2),Z=r(K),de=r(Z);t(Z),se(),t(K),C(ke=>m(de,`${ke??""}%`),[()=>Math.round(e.cacheHit*100)]),c(A,W)};B(_e,A=>{e.cacheHit!=null&&A(be)})}var J=n(_e,4),V=r(J),oe=r(V,!0);t(V),se(),t(J);var ue=n(J,2);{var ye=A=>{var W=Pt(),K=n(te(W),2),Z=r(K),de=r(Z,!0);t(Z);var ke=n(Z,2);{var je=pe=>{var xe=Tt(),Ce=r(xe);t(xe),C(()=>m(Ce,`/ ${a(o)??""}`)),c(pe,xe)};B(ke,pe=>{a(o)&&pe(je)})}var Ye=n(ke,2);{var We=pe=>{var xe=qt(),Ce=r(xe);t(xe),C(()=>m(Ce,`~${a(s)??""}× < cloud`)),c(pe,xe)};B(Ye,pe=>{a(s)!=null&&pe(We)})}t(K),C(()=>{_(K,"title",a(b)),m(de,a(x))}),c(A,W)};B(ue,A=>{a(x)&&A(ye)})}t(N),C(()=>{m(k,e.stones.length),m(O,a(i)),m(Q,e.cards.length),m(re,` evidence card${e.cards.length===1?"":"s"}`),m(le,a(S)),m(oe,a(M))}),c(R,N),ee()}var zt=y('<div class="subhead svelte-lygj3j"> </div>'),Ot=y('<p class="body-prose svelte-lygj3j"> </p>'),Ht=y('<div class="body body-headline svelte-lygj3j"><div class="headline svelte-lygj3j"> </div> <!> <!></div>');function jt(R,e){$(e,!0);var w=Ht(),f=r(w),M=r(f,!0);t(f);var i=n(f,2);{var g=h=>{var S=zt(),x=r(S,!0);t(S),C(()=>m(x,e.card.subhead)),c(h,S)};B(i,h=>{e.card.subhead&&h(g)})}var d=n(i,2);{var p=h=>{var S=Ot(),x=r(S,!0);t(S),C(()=>m(x,e.card.body)),c(h,S)};B(d,h=>{e.card.body&&h(p)})}t(w),C(()=>{ve(f,`color: var(--tier-${e.card.tier??""});`),m(M,e.card.headline??"")}),c(R,w),ee()}var Yt=y('<th class="svelte-1nlkuao"> </th>'),Wt=y('<td class="svelte-1nlkuao"> </td>'),Ut=y('<tr class="svelte-1nlkuao"></tr>'),Kt=y('<div class="body-sub svelte-1nlkuao"> </div>'),Gt=y('<div class="body body-tabular svelte-1nlkuao"><table class="t svelte-1nlkuao"><thead><tr></tr></thead><tbody></tbody></table> <!></div>');function Qt(R,e){$(e,!0);var w=Gt(),f=r(w),M=r(f),i=r(M);ae(i,21,()=>e.card.columns??[],ce,(h,S)=>{var x=Yt(),o=r(x,!0);t(x),C(()=>m(o,a(S))),c(h,x)}),t(i),t(M);var g=n(M);ae(g,21,()=>e.card.rows??[],ce,(h,S)=>{var x=Ut();ae(x,21,()=>a(S),ce,(o,s)=>{var l=Wt(),b=r(l,!0);t(l),C(()=>m(b,a(s))),c(o,l)}),t(x),c(h,x)}),t(g),t(f);var d=n(f,2);{var p=h=>{var S=Kt(),x=r(S,!0);t(S),C(()=>m(x,e.card.sub)),c(h,S)};B(d,h=>{e.card.sub&&h(p)})}t(w),c(R,w),ee()}var Vt=y('<div class="cell svelte-stf9c8"><div class="value svelte-stf9c8"> </div> <div class="label svelte-stf9c8"> </div></div>'),Zt=y('<div class="body-sub svelte-stf9c8"> </div>'),Xt=y('<div class="body body-scalars svelte-stf9c8"><div class="row svelte-stf9c8"></div> <!></div>');function Jt(R,e){$(e,!0);var w=Xt(),f=r(w);ae(f,21,()=>e.card.scalars??[],ce,(g,d)=>{var p=Vt(),h=r(p),S=r(h,!0);t(h);var x=n(h,2),o=r(x,!0);t(x),t(p),C(()=>{ve(h,`color: var(--tier-${e.card.tier??""});`),m(S,a(d).value),m(o,a(d).label)}),c(g,p)}),t(f);var M=n(f,2);{var i=g=>{var d=Zt(),p=r(d,!0);t(d),C(()=>m(p,e.card.sub)),c(g,d)};B(M,g=>{e.card.sub&&g(i)})}t(w),c(R,w),ee()}var $t=y('<div class="headline svelte-jrppts"> </div>'),ea=y('<div class="subhead svelte-jrppts"> </div>'),ta=fe("<rect></rect>"),aa=y('<div class="body-sub svelte-jrppts"> </div>'),ra=y('<div class="body-sub svelte-jrppts"> </div>'),sa=y('<div class="body body-spark svelte-jrppts"><!> <!> <svg width="100%" preserveAspectRatio="none" aria-hidden="true" class="svelte-jrppts"></svg> <!> <!></div>');function ia(R,e){$(e,!0);const w=240,f=38;let M=P(()=>e.card.spark??e.card.histogram??[]),i=P(()=>Math.max(...a(M),1)),g=P(()=>a(M).length),d=P(()=>Math.max(2,w/Math.max(a(g),1)-1.5));var p=sa(),h=r(p);{var S=v=>{var k=$t(),L=r(k,!0);t(k),C(()=>{ve(k,`color: var(--tier-${e.card.tier??""});`),m(L,e.card.headline)}),c(v,k)};B(h,v=>{e.card.headline&&v(S)})}var x=n(h,2);{var o=v=>{var k=ea(),L=r(k,!0);t(k),C(()=>m(L,e.card.subhead)),c(v,k)};B(x,v=>{e.card.subhead&&v(o)})}var s=n(x,2);_(s,"viewBox","0 0 240 38"),_(s,"height",f),ae(s,21,()=>a(M),ce,(v,k,L)=>{var T=ta();C(()=>{_(T,"x",L/a(g)*w+.5),_(T,"y",f-a(k)/a(i)*f),_(T,"width",a(d)),_(T,"height",a(k)/a(i)*f),_(T,"fill",`var(--tier-${e.card.tier??""})`)}),c(v,T)}),t(s);var l=n(s,2);{var b=v=>{var k=aa(),L=r(k,!0);t(k),C(()=>m(L,e.card.sparkSub)),c(v,k)};B(l,v=>{e.card.sparkSub&&v(b)})}var N=n(l,2);{var u=v=>{var k=ra(),L=r(k,!0);t(k),C(()=>m(L,e.card.sub)),c(v,k)};B(N,v=>{!e.card.sparkSub&&e.card.sub&&v(u)})}t(p),c(R,p),ee()}var na=y('<span class="headline svelte-48vbub"> </span>'),la=y('<span class="subhead svelte-48vbub"> </span>'),oa=y('<span class="spatial-note svelte-48vbub"> </span>'),da=y("<span> </span>"),va=y('<div class="body-sub svelte-48vbub"><!> <!></div>'),ca=y('<div class="body body-timeseries svelte-48vbub"><div class="ts-header svelte-48vbub"><!> <!></div> <svg width="100%" aria-hidden="true" class="svelte-48vbub"><line stroke="#C9C9C5" stroke-width="0.5" stroke-dasharray="2 2"></line><path fill="none" stroke-width="1.4"></path><circle r="3"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle"> </text><text font-size="8" font-family="IBM Plex Mono" fill="#6B6B6B">now</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B"> </text></svg> <!></div>');function Ie(R,e){$(e,!0);const w=240,f=84,M=6,i=P(()=>e.card.timeseries??{hours:96,peak:{x:38,y:47},peakLabel:""}),g=P(()=>h(a(i))),d=P(()=>S(a(g),a(i))),p=P(()=>x(a(g),a(d)));function h(q){const E=[];for(let F=0;F<=q.hours;F++){const Y=6*Math.sin(F/12.42*Math.PI*2),Q=38*Math.exp(-Math.pow((F-q.peak.x)/12,2));E.push({x:F,y:Y+Q+4})}return E}function S(q,E){const F=Math.max(...q.map(Q=>Q.y),E.peak.y),Y=Math.min(...q.map(Q=>Q.y),-10);return{sx:Q=>M+Q/E.hours*(w-M*2),sy:Q=>f-M-14-(Q-Y)/(F-Y)*(f-M*2-14)}}function x(q,E){return q.map((F,Y)=>`${Y?"L":"M"} ${E.sx(F.x)} ${E.sy(F.y)}`).join(" ")}var o=ca(),s=r(o),l=r(s);{var b=q=>{var E=na(),F=r(E,!0);t(E),C(()=>{ve(E,`color: var(--tier-${e.card.tier??""});`),m(F,e.card.headline)}),c(q,E)};B(l,q=>{e.card.headline&&q(b)})}var N=n(l,2);{var u=q=>{var E=la(),F=r(E,!0);t(E),C(()=>m(F,e.card.subhead)),c(q,E)};B(N,q=>{e.card.subhead&&q(u)})}t(s);var v=n(s,2);_(v,"viewBox","0 0 240 84"),_(v,"height",f);var k=r(v);_(k,"x1",M),_(k,"x2",w-M);var L=n(k),T=n(L),O=n(T),j=r(O,!0);t(O);var I=n(O);_(I,"x",M),_(I,"y",f-2);var z=n(I);_(z,"x",w-M),_(z,"y",f-2);var H=r(z);t(z),t(v);var U=n(v,2);{var D=q=>{var E=va(),F=r(E);{var Y=G=>{var X=oa(),le=r(X,!0);t(X),C(()=>m(le,e.card.spatialNote)),c(G,X)};B(F,G=>{e.card.spatialNote&&G(Y)})}var Q=n(F,2);{var re=G=>{var X=da(),le=r(X,!0);t(X),C(()=>m(le,e.card.sub)),c(G,X)};B(Q,G=>{e.card.sub&&G(re)})}t(E),c(q,E)};B(U,q=>{(e.card.spatialNote||e.card.sub)&&q(D)})}t(o),C((q,E,F,Y,Q,re)=>{_(k,"y1",q),_(k,"y2",E),_(L,"d",a(p)),_(L,"stroke",`var(--tier-${e.card.tier??""})`),_(T,"cx",F),_(T,"cy",Y),_(T,"fill",`var(--tier-${e.card.tier??""})`),_(O,"x",Q),_(O,"y",re),_(O,"fill",`var(--tier-${e.card.tier??""})`),m(j,a(i).peakLabel),m(H,`+${a(i).hours??""}h`)},[()=>a(d).sy(0),()=>a(d).sy(0),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y)-6]),c(R,o),ee()}var ua=y('<span class="ft-stat svelte-1y25lfh"><span class="ft-stat-k svelte-1y25lfh">RMSE</span> </span>'),ha=y('<span class="ft-stat ft-skill svelte-1y25lfh"> </span>'),ga=y('<span class="ft-badge svelte-1y25lfh" title="Trained on this hardware"> </span>'),ma=y('<a class="ft-link svelte-1y25lfh" target="_blank" rel="noopener noreferrer">Model card ↗</a>'),fa=y('<!> <div class="ft-footer svelte-1y25lfh"><!> <!> <!> <!></div>',1);function _a(R,e){$(e,!0);var w=fa(),f=te(w);Ie(f,{get card(){return e.card}});var M=n(f,2),i=r(M);{var g=s=>{var l=ua(),b=n(r(l));t(l),C(()=>m(b,` ${e.card.rmse??""}`)),c(s,l)};B(i,s=>{e.card.rmse&&s(g)})}var d=n(i,2);{var p=s=>{var l=ha(),b=r(l,!0);t(l),C(()=>m(b,e.card.skillVsPersistence)),c(s,l)};B(d,s=>{e.card.skillVsPersistence&&s(p)})}var h=n(d,2);{var S=s=>{var l=ga(),b=r(l,!0);t(l),C(()=>m(b,e.card.hardwareBadge)),c(s,l)};B(h,s=>{e.card.hardwareBadge&&s(S)})}var x=n(h,2);{var o=s=>{var l=ma();C(b=>_(l,"href",b),[()=>e.card.hfModelCard.startsWith("http")?e.card.hfModelCard:`https://${e.card.hfModelCard}`]),c(s,l)};B(x,s=>{e.card.hfModelCard&&s(o)})}t(M),c(R,w),ee()}var ya=fe('<circle r="2.2"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle" fill="#6B6B6B"> </text>',1),pa=y('<div class="body-sub svelte-gqkhpe"> </div>'),xa=y('<div class="body body-forecast svelte-gqkhpe"><svg width="100%" aria-hidden="true" class="svelte-gqkhpe"><path fill-opacity="0.18"></path><path fill="none" stroke-width="1.5"></path><!></svg> <!></div>');function ba(R,e){$(e,!0);const w=240,f=88,M=6;let i=P(()=>e.card.forecast??[]),g=P(()=>a(i).map((v,k)=>M+k/Math.max(a(i).length-1,1)*(w-M*2))),d=P(()=>Math.max(...a(i).map(v=>v.high),1));function p(v){return f-M-v/a(d)*(f-M*2-12)}let h=P(()=>a(g).map((v,k)=>`${k?"L":"M"} ${v} ${p(a(i)[k].mid)}`).join(" ")),S=P(()=>{if(!a(i).length)return"";const v=a(g).map((L,T)=>`${L} ${p(a(i)[T].low)}`).join(" L "),k=[...a(g)].reverse().map((L,T)=>`${L} ${p(a(i)[a(i).length-1-T].high)}`).join(" L ");return`M ${v} L ${k} Z`});var x=xa(),o=r(x);_(o,"viewBox","0 0 240 88"),_(o,"height",f);var s=r(o),l=n(s),b=n(l);ae(b,17,()=>a(i),ce,(v,k,L)=>{var T=ya(),O=te(T),j=n(O);_(j,"y",f-1);var I=r(j,!0);t(j),C(z=>{_(O,"cx",a(g)[L]),_(O,"cy",z),_(O,"fill",`var(--tier-${e.card.tier??""})`),_(j,"x",a(g)[L]),m(I,a(k).year)},[()=>p(a(k).mid)]),c(v,T)}),t(o);var N=n(o,2);{var u=v=>{var k=pa(),L=r(k,!0);t(k),C(()=>m(L,e.card.sub)),c(v,k)};B(N,v=>{e.card.sub&&v(u)})}t(x),C(()=>{_(s,"d",a(S)),_(s,"fill",`var(--tier-${e.card.tier??""})`),_(l,"d",a(h)),_(l,"stroke",`var(--tier-${e.card.tier??""})`)}),c(R,x),ee()}var wa=fe('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M20 50 Q 60 38 90 56 Q 120 76 150 64 Q 180 50 180 86 Q 130 100 70 96 Q 30 92 20 76 Z" fill="rgba(42,111,168,0.32)" stroke="#2A6FA8" stroke-width="0.7"></path><path d="M40 60 Q 80 54 110 70 Q 140 84 160 78 Q 165 90 130 92 Q 80 90 50 82 Z" fill="rgba(11,83,148,0.36)" stroke="#0B5394" stroke-width="0.6"></path><circle cx="120" cy="74" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">2.13 in/hr · MOD</text></svg>'),ka=fe('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M180 92 Q 200 88 215 96 Q 220 105 200 104 Q 185 102 180 96 Z" fill="rgba(42,111,168,0.18)" stroke="#2A6FA8" stroke-width="0.5" stroke-dasharray="2 2"></path><circle cx="120" cy="60" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">no ponding · MOD</text></svg>'),Sa=fe('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><defs><pattern id="rt-s2-rgb" x="0" y="0" width="6" height="6" patternUnits="userSpaceOnUse"><rect width="6" height="6" fill="#7A8E6A"></rect><rect x="0" y="0" width="3" height="3" fill="#8D9C7A"></rect><rect x="3" y="3" width="3" height="3" fill="#69795D"></rect></pattern></defs><rect fill="url(#rt-s2-rgb)"></rect><rect x="0" y="55" height="6" fill="#A8A496"></rect><rect x="115" y="0" width="8" fill="#A8A496"></rect><ellipse cx="50" cy="92" rx="6" ry="3" fill="#2A6FA8" fill-opacity="0.65"></ellipse><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">PRITHVI · 0.3%</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),Ma=fe('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><rect x="0" y="0" width="80" height="60" fill="#C66"></rect><rect x="80" y="0" width="60" height="60" fill="#C66"></rect><rect x="140" y="0" width="100" height="38" fill="#C66"></rect><rect x="140" y="38" width="100" height="22" fill="#5B7FB4"></rect><rect x="0" y="60" width="100" height="60" fill="#C66"></rect><rect x="100" y="60" width="50" height="40" fill="#5B8A4A"></rect><rect x="150" y="60" width="50" height="60" fill="#D9C75A"></rect><rect x="200" y="60" width="40" height="60" fill="#C66"></rect><rect x="100" y="100" width="50" height="20" fill="#A89A78"></rect><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">LULC · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),Ca=fe('<rect fill="rgba(42,111,168,0.55)" stroke="#2A6FA8" stroke-width="0.4"></rect>'),Na=fe('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#3A3A38"></rect><!><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">BLDG · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">36.2% built</text></svg>'),Ba=y('<div class="thumb-placeholder svelte-1lx1psy">raster preview</div>');function ze(R,e){var M=Me(),i=te(M);{var g=o=>{var s=wa();_(s,"viewBox","0 0 240 120"),_(s,"height",120);var l=r(s);_(l,"width",240),_(l,"height",120);var b=n(l),N=r(b);_(N,"x2",240);var u=n(N);_(u,"x2",240);var v=n(u);_(v,"y2",120);var k=n(v);_(k,"y2",120),t(b);var L=n(b,4);_(L,"x",234),_(L,"y",115),t(s),c(o,s)},d=o=>{var s=ka();_(s,"viewBox","0 0 240 120"),_(s,"height",120);var l=r(s);_(l,"width",240),_(l,"height",120);var b=n(l),N=r(b);_(N,"x2",240);var u=n(N);_(u,"x2",240);var v=n(u);_(v,"y2",120);var k=n(v);_(k,"y2",120),t(b);var L=n(b,3);_(L,"x",234),_(L,"y",115),t(s),c(o,s)},p=o=>{var s=Sa();_(s,"viewBox","0 0 240 120"),_(s,"height",120);var l=n(r(s));_(l,"width",240),_(l,"height",120);var b=n(l);_(b,"width",240);var N=n(b);_(N,"height",120);var u=n(N,3);_(u,"x",234),_(u,"y",115),t(s),c(o,s)},h=o=>{var s=Ma();_(s,"viewBox","0 0 240 120"),_(s,"height",120);var l=r(s);_(l,"width",240),_(l,"height",120);var b=n(l,11);_(b,"x",234),_(b,"y",115),t(s),c(o,s)},S=o=>{var s=Na();_(s,"viewBox","0 0 240 120"),_(s,"height",120);var l=r(s);_(l,"width",240),_(l,"height",120);var b=n(l);ae(b,16,()=>[[10,10,28,18],[42,10,30,16],[78,10,40,22],[124,10,32,18],[162,10,30,18],[198,10,32,18],[10,32,28,16],[42,30,30,18],[124,32,32,16],[162,32,30,16],[198,32,32,16],[10,55,28,18],[42,55,30,18],[78,55,40,18],[124,55,32,18],[162,55,30,18],[198,55,32,18],[10,80,28,16],[42,80,30,16],[78,80,40,16],[124,80,32,16],[162,80,30,16],[10,100,28,12],[42,100,30,12],[78,100,40,12]],ce,(u,v)=>{var k=Ca();C(()=>{_(k,"x",v[0]),_(k,"y",v[1]),_(k,"width",v[2]),_(k,"height",v[3])}),c(u,k)});var N=n(b,2);_(N,"x",234),_(N,"y",115),t(s),c(o,s)},x=o=>{var s=Ba();c(o,s)};B(i,o=>{e.kind==="stormwater"?o(g):e.kind==="stormwater-dry"?o(d,1):e.kind==="prithvi"?o(p,2):e.kind==="lulc"?o(h,3):e.kind==="buildings"?o(S,4):o(x,-1)})}c(R,M)}var La=y('<span class="illustrative svelte-1m43x1m" title="Illustrative rendering, not source pixels">illustrative</span>'),Aa=y('<span class="svelte-1m43x1m"> </span>'),Fa=y('<div class="raster-headline svelte-1m43x1m"><span class="svelte-1m43x1m"> </span> <!></div>'),Ra=y('<div class="body-sub svelte-1m43x1m"> </div>'),Ea=y('<div class="body body-raster svelte-1m43x1m"><div class="frame svelte-1m43x1m"><!> <!></div> <!> <!></div>');function Ta(R,e){$(e,!0);var w=Ea(),f=r(w),M=r(f);ze(M,{get kind(){return e.card.rasterKind}});var i=n(M,2);{var g=x=>{var o=La();c(x,o)};B(i,x=>{(e.card.illustrative||e.card.tier==="synthetic")&&x(g)})}t(f);var d=n(f,2);{var p=x=>{var o=Fa(),s=r(o),l=r(s,!0);t(s);var b=n(s,2);{var N=u=>{var v=Aa(),k=r(v);t(v),C(()=>m(k,`· ${e.card.subhead??""}`)),c(u,v)};B(b,u=>{e.card.subhead&&u(N)})}t(o),C(()=>{ve(s,`color: var(--tier-${e.card.tier??""});`),m(l,e.card.headline)}),c(x,o)};B(d,x=>{e.card.headline&&x(p)})}var h=n(d,2);{var S=x=>{var o=Ra(),s=r(o,!0);t(o),C(()=>m(s,e.card.sub)),c(x,o)};B(h,x=>{e.card.sub&&x(S)})}t(w),c(R,w),ee()}var qa=y('<span class="illustrative svelte-1td276x" title="Illustrative rendering, not source pixels">illustrative</span>'),Pa=y('<span class="bar-seg svelte-1td276x"></span>'),Da=y('<li class="svelte-1td276x"><span class="swatch svelte-1td276x"></span> <span class="legend-k svelte-1td276x"> </span> <span class="legend-pct svelte-1td276x"> </span></li>'),Ia=y('<div class="bar svelte-1td276x" role="img" aria-label="LULC class mix"></div> <ul class="legend svelte-1td276x"></ul>',1),za=y('<div class="body-sub svelte-1td276x"> </div>'),Oa=y('<div class="body body-lulc svelte-1td276x"><div class="frame svelte-1td276x"><!> <!></div> <!> <!></div>');function Ha(R,e){$(e,!0);let w=P(()=>(e.card.classMix??[]).reduce((o,s)=>o+(s.pct||0),0)||1);var f=Oa(),M=r(f),i=r(M);{let o=P(()=>e.card.rasterKind??"lulc");ze(i,{get kind(){return a(o)}})}var g=n(i,2);{var d=o=>{var s=qa();c(o,s)};B(g,o=>{(e.card.illustrative||e.card.tier==="synthetic")&&o(d)})}t(M);var p=n(M,2);{var h=o=>{var s=Ia(),l=te(s);ae(l,21,()=>e.card.classMix,N=>N.k,(N,u)=>{var v=Pa();let k;C(()=>{_(v,"title",`${a(u).k??""}: ${a(u).pct??""}%`),k=ve(v,"",k,{"flex-grow":a(u).pct/a(w),background:a(u).color})}),c(N,v)}),t(l);var b=n(l,2);ae(b,21,()=>e.card.classMix,N=>N.k,(N,u)=>{var v=Da(),k=r(v);let L;var T=n(k,2),O=r(T,!0);t(T);var j=n(T,2),I=r(j);t(j),t(v),C(()=>{L=ve(k,"",L,{background:a(u).color}),m(O,a(u).k),m(I,`${a(u).pct??""}%`)}),c(N,v)}),t(b),c(o,s)};B(p,o=>{var s;(s=e.card.classMix)!=null&&s.length&&o(h)})}var S=n(p,2);{var x=o=>{var s=za(),l=r(s,!0);t(s),C(()=>m(l,e.card.sub)),c(o,s)};B(S,o=>{e.card.sub&&o(x)})}t(f),c(R,f),ee()}var ja=y('<span class="reg-label svelte-1iup6im"> </span> <span class="reg-source svelte-1iup6im"> </span>',1),Ya=y('<span class="reg-silent svelte-1iup6im"> </span>'),Wa=y('<li><span class="reg-tag svelte-1iup6im"><!> <span> </span></span> <!></li>'),Ua=y('<div class="body-sub svelte-1iup6im"> </div>'),Ka=y('<div class="body body-register svelte-1iup6im"><ul class="reg-list svelte-1iup6im"></ul> <!></div>');function Ga(R,e){$(e,!0);var w=Ka(),f=r(w);ae(f,21,()=>e.card.registers??[],ce,(g,d)=>{var p=Wa();let h;var S=r(p),x=r(S);me(x,{get tier(){return a(d).tier},size:9,get color(){return`var(--tier-${a(d).tier??""})`}});var o=n(x,2),s=r(o,!0);t(o),t(S);var l=n(S,2);{var b=u=>{var v=ja(),k=te(v),L=r(k,!0);t(k);var T=n(k,2),O=r(T,!0);t(T),C(()=>{_(k,"title",a(d).detail?`${a(d).label} — ${a(d).detail}`:a(d).label),m(L,a(d).label),m(O,a(d).sourceId??"")}),c(u,v)},N=u=>{var v=Ya(),k=r(v,!0);t(v),C(()=>m(k,a(d).note)),c(u,v)};B(l,u=>{a(d).label?u(b):u(N,-1)})}t(p),C(()=>{h=ge(p,1,"reg-row svelte-1iup6im",null,h,{silent:!a(d).label}),_(S,"title",a(d).tier),m(s,a(d).reg)}),c(g,p)}),t(f);var M=n(f,2);{var i=g=>{var d=Ua(),p=r(d,!0);t(d),C(()=>m(p,e.card.sub)),c(g,d)};B(M,g=>{e.card.sub&&g(i)})}t(w),c(R,w),ee()}var Qa=y('<div class="cell-aux svelte-1swqabu"> </div>'),Va=y('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),Za=y('<div class="cell-aux svelte-1swqabu"> </div>'),Xa=y('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),Ja=y('<div class="cmp-delta svelte-1swqabu"> </div>'),$a=y('<div class="body-sub svelte-1swqabu"> </div>'),er=y('<div class="body body-comparison svelte-1swqabu"><div class="cmp-grid svelte-1swqabu"><!> <div class="divider svelte-1swqabu" aria-hidden="true">vs</div> <!></div> <!> <!></div>');function tr(R,e){$(e,!0);var w=er(),f=r(w),M=r(f);{var i=o=>{var s=Va(),l=r(s),b=r(l);me(b,{get tier(){return e.card.left.tier},size:10,get color(){return`var(--tier-${e.card.left.tier??""})`}});var N=n(b,2),u=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var L=n(v,2);{var T=O=>{var j=Qa(),I=r(j,!0);t(j),C(()=>m(I,e.card.left.aux)),c(O,j)};B(L,O=>{e.card.left.aux&&O(T)})}t(s),C(()=>{m(u,e.card.left.label),ve(v,`color: var(--tier-${e.card.left.tier??""});`),m(k,e.card.left.value)}),c(o,s)};B(M,o=>{e.card.left&&o(i)})}var g=n(M,4);{var d=o=>{var s=Xa(),l=r(s),b=r(l);me(b,{get tier(){return e.card.right.tier},size:10,get color(){return`var(--tier-${e.card.right.tier??""})`}});var N=n(b,2),u=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var L=n(v,2);{var T=O=>{var j=Za(),I=r(j,!0);t(j),C(()=>m(I,e.card.right.aux)),c(O,j)};B(L,O=>{e.card.right.aux&&O(T)})}t(s),C(()=>{m(u,e.card.right.label),ve(v,`color: var(--tier-${e.card.right.tier??""});`),m(k,e.card.right.value)}),c(o,s)};B(g,o=>{e.card.right&&o(d)})}t(f);var p=n(f,2);{var h=o=>{var s=Ja(),l=r(s,!0);t(s),C(()=>m(l,e.card.delta)),c(o,s)};B(p,o=>{e.card.delta&&o(h)})}var S=n(p,2);{var x=o=>{var s=$a(),l=r(s,!0);t(s),C(()=>m(l,e.card.sub)),c(o,s)};B(S,o=>{e.card.sub&&o(x)})}t(w),c(R,w),ee()}var ar=y('<div class="meta-row svelte-e40scu"><dt class="svelte-e40scu"> </dt> <dd class="svelte-e40scu"> </dd></div>'),rr=y('<div class="body-sub svelte-e40scu"> </div>'),sr=y('<div class="body body-meta svelte-e40scu"><dl class="meta-list svelte-e40scu"></dl> <!></div>');function ir(R,e){$(e,!0);var w=sr(),f=r(w);ae(f,21,()=>e.card.metaRows??[],ce,(g,d)=>{var p=ar(),h=r(p),S=r(h,!0);t(h);var x=n(h,2),o=r(x,!0);t(x),t(p),C(()=>{m(S,a(d).k),m(o,a(d).v)}),c(g,p)}),t(f);var M=n(f,2);{var i=g=>{var d=rr(),p=r(d,!0);t(d),C(()=>m(p,e.card.sub)),c(g,d)};B(M,g=>{e.card.sub&&g(i)})}t(w),c(R,w),ee()}var nr=y('<div class="unknown svelte-1x6xqhh"> </div>');function lr(R,e){$(e,!0);var w=Me(),f=te(w);{var M=u=>{jt(u,{get card(){return e.card}})},i=u=>{Qt(u,{get card(){return e.card}})},g=u=>{Jt(u,{get card(){return e.card}})},d=u=>{ia(u,{get card(){return e.card}})},p=u=>{Ie(u,{get card(){return e.card}})},h=u=>{_a(u,{get card(){return e.card}})},S=u=>{ba(u,{get card(){return e.card}})},x=u=>{Ta(u,{get card(){return e.card}})},o=u=>{Ha(u,{get card(){return e.card}})},s=u=>{Ga(u,{get card(){return e.card}})},l=u=>{tr(u,{get card(){return e.card}})},b=u=>{ir(u,{get card(){return e.card}})},N=u=>{var v=nr(),k=r(v);t(v),C(()=>m(k,`unknown variant: ${e.card.variant??""}`)),c(u,v)};B(f,u=>{e.card.variant==="headline"?u(M):e.card.variant==="tabular"?u(i,1):e.card.variant==="scalars"?u(g,2):e.card.variant==="spark"||e.card.variant==="histogram"?u(d,3):e.card.variant==="timeseries"?u(p,4):e.card.variant==="timeseries-ft"?u(h,5):e.card.variant==="forecast"?u(S,6):e.card.variant==="raster"||e.card.variant==="raster-pred"?u(x,7):e.card.variant==="lulc"?u(o,8):e.card.variant==="register"?u(s,9):e.card.variant==="comparison"?u(l,10):e.card.variant==="meta"?u(b,11):u(N,-1)})}c(R,w),ee()}var or=y('<button type="button" class="fc-foot-cite svelte-1nuvnzu"><span class="fc-foot-docid svelte-1nuvnzu"> </span> <span class="fc-foot-arrow svelte-1nuvnzu" aria-hidden="true">→</span></button>'),dr=y('<span class="fc-foot-docid fc-foot-docid-mute svelte-1nuvnzu"> </span>'),vr=y('<header class="fc-head svelte-1nuvnzu"><div class="fc-head-source svelte-1nuvnzu"><!> <span class="fc-head-source-label svelte-1nuvnzu"> </span></div> <span class="fc-head-vintage svelte-1nuvnzu"> </span></header> <h4 class="fc-title svelte-1nuvnzu"> </h4> <!> <footer class="fc-foot svelte-1nuvnzu"><!> <span><!> <span> </span></span></footer>',1);function Oe(R,e){$(e,!0);let w=ne(e,"density",3,"comfortable"),f=ne(e,"linkedKey",3,null),M=P(()=>f()!=null&&e.card.mapLayer!=null&&e.card.mapLayer===f()),i=P(()=>Pe[e.card.tier].short),g=P(()=>e.card.mapLayer!=null);function d(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,e.card.mapLayer))}function p(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,null))}function h(s){var l;s.stopPropagation(),e.card.citeId&&((l=e.onCite)==null||l.call(e,e.card.citeId))}function S(s){var l;a(g)&&(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),(l=e.onLink)==null||l.call(e,e.card.mapLayer??null))}var x=Me(),o=te(x);ut(o,()=>a(g)?"button":"article",!1,(s,l)=>{it(s,()=>({type:a(g)?"button":void 0,role:a(g)?"button":"article",class:`fc fc-${e.card.variant??""} fc-tier-${e.card.tier??""}`,"aria-labelledby":`fc-${e.card.id}-title`,"aria-label":`${Pe[e.card.tier].label} card · ${e.card.title} · ${e.card.source}`,onpointerenter:d,onpointerleave:p,onfocus:d,onblur:p,onkeydown:S,[nt]:{"is-compact":w()==="compact","is-linked":a(M),"is-interactive":a(g),"has-illustrative":e.card.illustrative||e.card.tier==="synthetic"||e.card.variant==="comparison"}}),void 0,void 0,void 0,"svelte-1nuvnzu");var b=vr(),N=te(b),u=r(N),v=r(u);me(v,{get tier(){return e.card.tier},size:11,get color(){return`var(--tier-${e.card.tier??""})`}});var k=n(v,2),L=r(k,!0);t(k),t(u);var T=n(u,2),O=r(T);t(T),t(N);var j=n(N,2),I=r(j,!0);t(j);var z=n(j,2);lr(z,{get card(){return e.card}});var H=n(z,2),U=r(H);{var D=re=>{var G=or(),X=r(G),le=r(X,!0);t(X),se(2),t(G),C(()=>{_(G,"title",`Open ${e.card.docId} in citation drawer`),m(le,e.card.docId)}),Re("click",G,h),c(re,G)},q=re=>{var G=dr(),X=r(G,!0);t(G),C(()=>m(X,e.card.docId)),c(re,G)};B(U,re=>{e.card.citeId?re(D):re(q,-1)})}var E=n(U,2),F=r(E);me(F,{get tier(){return e.card.tier},size:9,get color(){return`var(--tier-${e.card.tier??""})`}});var Y=n(F,2),Q=r(Y,!0);t(Y),t(E),t(H),C(()=>{_(k,"title",e.card.agency),m(L,e.card.source),m(O,`v. ${e.card.vintage??""}`),_(j,"id",`fc-${e.card.id}-title`),m(I,e.card.title),ge(E,1,`fc-tier-badge fc-tier-badge-${e.card.tier??""}`,"svelte-1nuvnzu"),_(E,"aria-label",`epistemic tier ${a(i)}`),m(Q,a(i))}),c(l,b)}),c(R,x),ee()}Fe(["click"]);var cr=y('<span class="sep svelte-1qqbvs2">·</span> <span class="silent svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> silent</span>',1),ur=y('<span class="sep svelte-1qqbvs2">·</span> <span class="warn svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> warn</span>',1),hr=y('<span class="sep svelte-1qqbvs2">·</span> <span class="err svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> errored</span>',1),gr=y('<span class="sep svelte-1qqbvs2">·</span> <span class="notinvoked svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> not invoked</span>',1),mr=y('<span class="tally svelte-1qqbvs2"><span class="cards"> </span> <span class="sep svelte-1qqbvs2">·</span> <span class="fired"><strong class="svelte-1qqbvs2"> </strong> fired</span> <!> <!> <!> <!> <span class="sep svelte-1qqbvs2">·</span> <span class="ms"><strong class="svelte-1qqbvs2"> </strong></span></span>');function fr(R,e){$(e,!0);function w(D){return D.flatMap(q=>q.children?[q,...w(q.children)]:[q])}let f=P(()=>w(e.members)),M=P(()=>a(f).filter(D=>D.status==="fired"||D.status==="warned").length),i=P(()=>a(f).filter(D=>D.status==="silent_by_design").length),g=P(()=>a(f).filter(D=>D.status==="warned").length),d=P(()=>a(f).filter(D=>D.status==="errored").length),p=P(()=>a(f).filter(D=>D.status==="not_invoked").length),h=P(()=>e.members.reduce((D,q)=>Math.max(D,q.ms??0),0));function S(D){return D===0?"—":D<1e3?`${D}ms`:`${(D/1e3).toFixed(1)}s`}var x=mr(),o=r(x),s=r(o);t(o);var l=n(o,4),b=r(l),N=r(b,!0);t(b),se(),t(l);var u=n(l,2);{var v=D=>{var q=cr(),E=n(te(q),2),F=r(E),Y=r(F,!0);t(F),se(),t(E),C(()=>m(Y,a(i))),c(D,q)};B(u,D=>{a(i)>0&&D(v)})}var k=n(u,2);{var L=D=>{var q=ur(),E=n(te(q),2),F=r(E),Y=r(F,!0);t(F),se(),t(E),C(()=>m(Y,a(g))),c(D,q)};B(k,D=>{a(g)>0&&D(L)})}var T=n(k,2);{var O=D=>{var q=hr(),E=n(te(q),2),F=r(E),Y=r(F,!0);t(F),se(),t(E),C(()=>m(Y,a(d))),c(D,q)};B(T,D=>{a(d)>0&&D(O)})}var j=n(T,2);{var I=D=>{var q=gr(),E=n(te(q),2),F=r(E),Y=r(F,!0);t(F),se(),t(E),C(()=>m(Y,a(p))),c(D,q)};B(j,D=>{a(p)>0&&D(I)})}var z=n(j,4),H=r(z),U=r(H,!0);t(H),t(z),t(x),C(D=>{m(s,`${e.cardCount??""} card${e.cardCount===1?"":"s"}`),m(N,a(M)),m(U,D)},[()=>S(a(h))]),c(R,x),ee()}var _r=y('<span class="prov-tier svelte-qakefz"><!></span>'),yr=y('<span class="prov-note svelte-qakefz"> </span>'),pr=y('<span class="prov-ms svelte-qakefz"> </span>'),xr=y('<li class="prov-children svelte-qakefz"><!></li>'),br=y('<li><span class="prov-pip svelte-qakefz" aria-hidden="true"> </span> <span class="prov-id svelte-qakefz"> </span> <!> <span class="prov-name svelte-qakefz"> </span> <!> <!></li> <!>',1),wr=y('<ul class="prov-tree svelte-qakefz"></ul>');function He(R,e){$(e,!0);let w=ne(e,"depth",3,0);function f(g){return{fired:"●",silent_by_design:"○",warned:"▲",errored:"■",not_invoked:"□"}[g]}function M(g){return g.status==="warned"?"#B7791F":g.status==="errored"?"#B91C1C":g.status==="silent_by_design"||g.status==="not_invoked"?"var(--ink-tertiary)":g.tier?`var(--tier-${g.tier})`:"var(--ink)"}var i=wr();ae(i,21,()=>e.members,g=>g.id,(g,d)=>{var p=br(),h=te(p),S=r(h),x=r(S,!0);t(S);var o=n(S,2),s=r(o,!0);t(o);var l=n(o,2);{var b=I=>{var z=_r(),H=r(z);{let U=P(()=>`var(--tier-${a(d).tier})`);me(H,{get tier(){return a(d).tier},size:9,get color(){return a(U)}})}t(z),c(I,z)};B(l,I=>{a(d).tier&&I(b)})}var N=n(l,2),u=r(N,!0);t(N);var v=n(N,2);{var k=I=>{var z=yr(),H=r(z);t(z),C(()=>m(H,`— ${a(d).note??""}`)),c(I,z)};B(v,I=>{a(d).note&&I(k)})}var L=n(v,2);{var T=I=>{var z=pr(),H=r(z,!0);t(z),C(U=>m(H,U),[()=>a(d).ms<1e3?`${a(d).ms}ms`:`${(a(d).ms/1e3).toFixed(1)}s`]),c(I,z)};B(L,I=>{a(d).ms!=null&&I(T)})}t(h);var O=n(h,2);{var j=I=>{var z=xr(),H=r(z);{let U=P(()=>w()+1);He(H,{get members(){return a(d).children},get depth(){return a(U)}})}t(z),c(I,z)};B(O,I=>{var z;(z=a(d).children)!=null&&z.length&&I(j)})}C((I,z)=>{ge(h,1,`prov-row prov-status-${a(d).status??""}`,"svelte-qakefz"),ve(S,`color: ${I??""};`),m(x,z),m(s,a(d).id),m(u,a(d).name)},[()=>M(a(d)),()=>f(a(d).status)]),c(g,p)}),t(i),C(()=>ve(i,`--depth: ${w()??""};`)),c(R,i),ee()}var kr=y('<div class="silent svelte-16iv0n8"><span class="silent-tag svelte-16iv0n8">silent</span> <p class="silent-prose svelte-16iv0n8"><!></p></div>'),Sr=y("<div></div>"),Mr=y('<div class="prov-body svelte-16iv0n8"><!></div>'),Cr=y('<section><header class="region-head svelte-16iv0n8"><div class="region-head-left svelte-16iv0n8"><span class="region-num svelte-16iv0n8"> </span> <h3 class="region-name svelte-16iv0n8"> </h3> <span class="region-role svelte-16iv0n8"> </span> <span class="region-tag svelte-16iv0n8"> </span></div> <!></header> <!> <div class="prov svelte-16iv0n8"><button type="button" class="prov-toggle svelte-16iv0n8"><span class="prov-caret svelte-16iv0n8" aria-hidden="true"> </span> <span class="prov-label"> </span> <span class="prov-meta svelte-16iv0n8"> </span></button> <!></div></section>');function Nr(R,e){$(e,!0);let w=ne(e,"density",3,"comfortable"),f=ne(e,"provenanceMode",3,"smart"),M=ne(e,"linkedKey",3,null),i=P(()=>Ae[e.stone]),g=P(()=>`${Ee.indexOf(e.stone)+1}`.padStart(2,"0")),d=P(()=>e.stone==="capstone");function p(J){return J.flatMap(V=>V.children?[V,...p(V.children)]:[V])}let h=P(()=>p(e.trace.members)),S=P(()=>a(h).length),x=P(()=>a(h).some(J=>J.status==="warned"||J.status==="errored"||J.status==="not_invoked")),o=P(()=>f()==="all-expanded"?!0:f()==="all-collapsed"?!1:a(x)),s=Le(null),l=P(()=>a(s)??a(o));ie(()=>{f(),Se(s,null)});var b=Cr(),N=r(b),u=r(N),v=r(u),k=r(v,!0);t(v);var L=n(v,2),T=r(L,!0);t(L);var O=n(L,2),j=r(O);t(O);var I=n(O,2),z=r(I,!0);t(I),t(u);var H=n(u,2);fr(H,{get cardCount(){return e.cards.length},get members(){return e.trace.members}}),t(N);var U=n(N,2);{var D=J=>{var V=kr(),oe=n(r(V),2),ue=r(oe);{var ye=W=>{var K=we("No projection cards landed for this query. Atomic functions still ran (see provenance) and returned silence rather than confabulation.");c(W,K)},A=W=>{var K=we("No cards for this Stone on this query.");c(W,K)};B(ue,W=>{e.stone==="lodestone"?W(ye):W(A,-1)})}t(oe),t(V),c(J,V)},q=J=>{var V=Sr();let oe;ae(V,21,()=>e.cards,ue=>ue.id,(ue,ye)=>{Oe(ue,{get card(){return a(ye)},get density(){return w()},get linkedKey(){return M()},get onCite(){return e.onCite},get onLink(){return e.onLink}})}),t(V),C(()=>oe=ge(V,1,"rail svelte-16iv0n8",null,oe,{"rail-capstone":a(d)})),c(J,V)};B(U,J=>{e.cards.length===0?J(D):J(q,-1)})}var E=n(U,2),F=r(E),Y=r(F),Q=r(Y,!0);t(Y);var re=n(Y,2),G=r(re);t(re);var X=n(re,2),le=r(X);t(X),t(F);var _e=n(F,2);{var be=J=>{var V=Mr(),oe=r(V);He(oe,{get members(){return e.trace.members}}),t(V),C(()=>_(V,"id",`prov-body-${e.stone}`)),c(J,V)};B(_e,J=>{a(l)&&J(be)})}t(E),t(b),C(()=>{ge(b,1,`region region-${e.stone??""}`,"svelte-16iv0n8"),_(b,"aria-labelledby",`region-h-${e.stone}`),_(b,"data-stone",e.stone),m(k,a(g)),_(L,"id",`region-h-${e.stone}`),m(T,a(i).name),m(j,`· ${a(i).role??""}`),m(z,a(i).tag),_(F,"aria-expanded",a(l)),_(F,"aria-controls",`prov-body-${e.stone}`),m(Q,a(l)?"▾":"▸"),m(G,`${a(l)?"Hide":"Show"} provenance`),m(le,`· ${a(S)??""} function${a(S)===1?"":"s"}`)}),Re("click",F,()=>Se(s,!a(l))),c(R,b),ee()}Fe(["click"]);var Br=y('<section class="region region-grammar svelte-gwg123" aria-label="Card grammar reference"><header class="region-head svelte-gwg123"><div class="region-head-left svelte-gwg123"><span class="region-num svelte-gwg123">SPEC</span> <h3 class="region-name svelte-gwg123">Card grammar</h3> <span class="region-role svelte-gwg123">· every body variant in the system</span> <span class="region-tag svelte-gwg123">stubs, not findings</span></div> <span class="grammar-count svelte-gwg123"> </span></header> <div class="rail svelte-gwg123"></div></section>');function Lr(R,e){let w=ne(e,"density",3,"comfortable");const f=[{id:"grm-headline",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"spec",vintage:"spec",title:"Single big number, scenario-tagged",headline:"Zone AE",subhead:"preliminary FIRM, panel ID",sub:"Use when the answer is one categorical state.",docId:"DS-HEADLINE"},{id:"grm-tabular",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"spec",vintage:"spec",title:"Small table of observations",columns:["id","value","dist."],rows:[["ROW-001","1.2 m","0.18 mi"],["ROW-002","0.9 m","0.32 mi"],["ROW-003","0.7 m","0.41 mi"]],sub:"Use when 3–8 records each carry the same fields.",docId:"DS-TABULAR"},{id:"grm-scalars",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS",agency:"spec",vintage:"spec",title:"Trio of scalar readings",scalars:[{value:"0.02 in",label:"precip · 24h"},{value:"11 mph",label:"wind"},{value:"63°F",label:"temp"}],sub:"Use for current-state dashboards.",docId:"DS-SCALARS"},{id:"grm-spark",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"spec",vintage:"spec",title:"Sparkline of recent events",headline:"n events",subhead:"window · peak",spark:[1,2,4,3,7,12,8,5,3,2,4,9,6],docId:"DS-SPARK"},{id:"grm-histogram",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"spec",vintage:"spec",title:"Histogram of binned counts",headline:"n calls",subhead:"window · seasonal note",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],docId:"DS-HIST"},{id:"grm-timeseries",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM",agency:"spec",vintage:"spec",title:"Forecast curve with horizon",headline:"+0.41 m peak",subhead:"+38h · 90% CI",timeseries:{hours:96,peak:{x:38,y:41},peakLabel:"+0.41 m"},spatialNote:"regional",sub:"Spatial-index callout when station ≠ point-of-query.",docId:"DS-TS"},{id:"grm-forecast",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"spec",vintage:"spec",title:"Long-horizon scenario projections",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2100,low:38,mid:71,high:114}],sub:"Use for decadal+ uncertainty cones.",docId:"DS-FCST"},{id:"grm-raster",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"spec",vintage:"spec",title:"Raster snapshot, mapped layer",rasterKind:"stormwater",headline:"ponding",subhead:"scenario · pixel summary",sub:"Use for any 2D model output.",docId:"DS-RASTER"},{id:"grm-rasterpred",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC",agency:"spec",vintage:"spec",title:"Raster prediction, illustrative",rasterKind:"prithvi",headline:"n% flooded",subhead:"model · scene id",illustrative:!0,sub:"Same chrome as raster + illustrative tag.",docId:"DS-RASTERPRED"},{id:"grm-register",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"spec",vintage:"spec",title:"Composite register list",registers:[{reg:"MTA",tier:"empirical",label:"Station entrance",detail:"0.18 mi · 5",sourceId:"MTA-X",note:null},{reg:"NYCHA",tier:"empirical",label:"Development",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-Y",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,note:"no acute-care hospital within 1.0 mi"}],sub:"Use when many specialists join into one Stone.",docId:"DS-REGISTER"},{id:"grm-comparison",stone:"keystone",tier:"synthetic",variant:"comparison",source:"EMP × SYN",agency:"spec",vintage:"spec",title:"Documented vs. interpreted",left:{tier:"empirical",label:"documented",value:"31.4%",aux:"n polygons"},right:{tier:"synthetic",label:"interpreted",value:"29.8%",aux:"n polygons"},delta:"Δ = −1.6 pp · agreement strong",sub:"Use to surface model–ground-truth deltas.",docId:"DS-CMP"},{id:"grm-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"spec",vintage:"spec",title:"Capstone reconciliation",metaRows:[{k:"claims",v:"12 / 12 grounded"},{k:"tier mix",v:"EMP 5 · MOD 4 · PRX 2 · SYN 1"},{k:"tier-1 freshness",v:"median 38 d"},{k:"warnings",v:"0"}],sub:"Use to expose the synthesis layer's audit.",docId:"DS-META"}];var M=Br(),i=r(M),g=n(r(i),2),d=r(g);t(g),t(i);var p=n(i,2);ae(p,21,()=>f,h=>h.id,(h,S)=>{Oe(h,{get card(){return a(S)},get density(){return w()}})}),t(p),t(M),C(()=>m(d,`${f.length??""} variants`)),c(R,M)}var Ar=y('<section class="findings svelte-ci42t5" aria-label="Findings, grouped by Stone"><header class="findings-head svelte-ci42t5"><h2 class="findings-h2 svelte-ci42t5">Findings · grouped by Stone</h2> <span class="findings-tagline svelte-ci42t5">cards = what each Stone found · provenance collapses below</span></header> <!> <!> <!></section>');function Wr(R,e){$(e,!0);let w=ne(e,"density",3,"comfortable"),f=ne(e,"provenanceMode",3,"smart"),M=ne(e,"showGrammar",3,!1),i=ne(e,"linkedKey",3,null),g=P(()=>{const s={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};for(const l of e.data.cards)s[l.stone].push(l);return s}),d=P(()=>{const s={cornerstone:{key:"cornerstone",members:[]},keystone:{key:"keystone",members:[]},touchstone:{key:"touchstone",members:[]},lodestone:{key:"lodestone",members:[]},capstone:{key:"capstone",members:[]}};for(const l of e.data.stones)s[l.key]=l;return s});var p=Ar(),h=n(r(p),2);It(h,{get cards(){return e.data.cards},get stones(){return e.data.stones},get wallSeconds(){return e.data.wallSeconds},get cacheHit(){return e.data.cacheHit},get emissions(){return e.data.emissions}});var S=n(h,2);ae(S,16,()=>Ee,s=>s,(s,l)=>{Nr(s,{get stone(){return l},get cards(){return a(g)[l]},get trace(){return a(d)[l]},get density(){return w()},get provenanceMode(){return f()},get linkedKey(){return i()},get onCite(){return e.onCite},get onLink(){return e.onLink}})});var x=n(S,2);{var o=s=>{Lr(s,{get density(){return w()}})};B(x,s=>{M()&&s(o)})}t(p),c(R,p),ee()}const Fr={cornerstone:[{id:"CORN-001",name:"sandy_inundation.lookup",stepNames:["sandy","sandy_inundation","sandy_nta"],tier:"empirical",skipReason:"Sandy 2012 inundation: query outside NYC bounds"},{id:"CORN-002",name:"dep_stormwater.lookup",stepNames:["dep","dep_stormwater","dep_extreme_2080_nta","dep_moderate_2050_nta","dep_moderate_current_nta"],tier:"modeled",skipReason:"NYC DEP stormwater scenarios: query outside NYC bounds"},{id:"CORN-003",name:"usgs_hwm.spatial_join",stepNames:["ida_hwm","ida_hwm_2021"],tier:"empirical",skipReason:"USGS Ida HWMs: no marks within 800 m of address"},{id:"CORN-004",name:"prithvi_water.lookup",stepNames:["prithvi","prithvi_eo_v2"],tier:"modeled",skipReason:"Prithvi-EO Ida polygons: no polygons within 500 m"},{id:"CORN-005",name:"microtopo.dem_hand_twi",stepNames:["microtopo","microtopo_lidar","microtopo_nta"],tier:"proxy",skipReason:"USGS 3DEP DEM: query outside NYC raster coverage"}],keystone:[{id:"KEY-001",name:"mta_entrance_exposure",stepNames:["mta_entrances","mta_entrance_exposure"],tier:"empirical",skipReason:"no entrances within radius"},{id:"KEY-002",name:"nycha.development_join",stepNames:["nycha","nycha_development_exposure"],tier:"empirical",skipReason:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe.school_join",stepNames:["doe_schools","doe_school_exposure"],tier:"empirical",skipReason:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh.facility_join",stepNames:["doh_hospitals","doh_hospital_exposure"],tier:"empirical",skipReason:"no acute-care hospitals within 1.0 mi"},{id:"KEY-005",name:"pluto.lot_lookup",stepNames:["pluto_lookup"],tier:"empirical",skipReason:"PLUTO join skipped: queried address not in NYC PLUTO dataset"},{id:"KEY-006",name:"terramind.buildings",stepNames:["terramind_buildings","terramind_synthesis"],tier:"modeled",skipReason:"TerraMind Buildings: no eo_chip available for this address (recent <30% cloud Sentinel-2 missing) or no high-confidence prediction"}],touchstone:[{id:"TCH-001",name:"floodnet.history",stepNames:["floodnet"],tier:"empirical",skipReason:"FloodNet sensor: no deployments within 600 m"},{id:"TCH-002",name:"nyc311.flood_complaints",stepNames:["nyc311","nyc311_nta"],tier:"proxy",skipReason:"NYC 311: no flood-relevant complaints within 200 m"},{id:"TCH-003",name:"nws_obs.metar",stepNames:["nws_obs"],tier:"empirical",skipReason:"NWS hourly METAR: nearest ASOS reports no precipitation"},{id:"TCH-004",name:"noaa_coops.recent",stepNames:["noaa_tides"],tier:"empirical",skipReason:"NOAA tide gauge: nearest station >25 km from address"},{id:"TCH-005",name:"prithvi_nyc_pluvial",stepNames:["prithvi_live","prithvi_eo_live"],tier:"modeled",skipReason:"Prithvi-NYC-Pluvial: no <30% cloud Sentinel-2 chip available in the last 120 d for this address"},{id:"TCH-006",name:"terramind.lulc",stepNames:["terramind_lulc"],tier:"synthetic",skipReason:"TerraMind LULC: eo_chip fetch returned no Sentinel-2 tile for this address"}],lodestone:[{id:"LOD-001",name:"nws_alerts.flood_relevant",stepNames:["nws_alerts"],tier:"modeled",skipReason:"NWS public alerts: no active flood-relevant alerts at this address"},{id:"LOD-002",name:"ttm_battery_surge.zero_shot",stepNames:["ttm_forecast"],tier:"modeled",skipReason:"Granite TTM r2 zero-shot: forecast not interesting (peak |residual| < 0.3 ft)"},{id:"LOD-003",name:"ttm_battery_surge.fine_tune",stepNames:["ttm_battery_surge"],tier:"modeled",skipReason:"Granite TTM Battery fine-tune: forecast not interesting (peak |residual| < 0.3 m)"},{id:"LOD-004",name:"ttm_311_forecast",stepNames:["ttm_311_forecast"],tier:"modeled",skipReason:"NYC 311 weekly forecast: no per-address history to extrapolate"},{id:"LOD-005",name:"floodnet_forecast",stepNames:["floodnet_forecast"],tier:"modeled",skipReason:"FloodNet sensor recurrence: sensor has < silent-floor historical events; forecast omitted"},{id:"LOD-006",name:"npcc4.slr_projection",stepNames:["npcc4_projection"],tier:"modeled",skipReason:"NPCC4 SLR projection: not yet wired into FSM (static reference card on hold)"}],capstone:[{id:"CAP-001",name:"rag.granite_embedding",stepNames:["rag_granite_embedding"],tier:"proxy",skipReason:"Granite Embedding RAG: no policy retrieval (out-of-NYC scope)"},{id:"CAP-002",name:"gliner.typed_extraction",stepNames:["gliner_extract"],tier:"proxy",skipReason:"GLiNER typed extraction: no RAG hits to extract over"},{id:"CAP-003",name:"granite41.compose_briefing",stepNames:["reconcile_granite41","mellea_reconcile_address","reconcile_neighborhood","reconcile_development","reconcile_live_now"],tier:"modeled",skipReason:"Reconciler did not run (no grounded data available)"},{id:"CAP-004",name:"mellea.grounding_check",stepNames:["mellea_grounding"],tier:"modeled",skipReason:"Mellea grounding-check: rolled into reconcile step on this run"}]};function Ur(R,e){const w=Fr[R]??[],f=new Map;for(const g of e)f.set(g.name,g);const M=[],i=new Set;for(const g of w){let d;for(const p of g.stepNames){const h=f.get(p);if(h){d=h,i.add(p);break}}d?M.push({...d,id:g.id,name:g.name,tier:d.tier??g.tier??null}):M.push({id:g.id,name:g.name,status:"not_invoked",tier:g.tier??null,note:g.skipReason})}for(const g of e)i.has(g.name)||M.push(g);return M}export{Hr as C,Wr as F,Yr as M,jr as R,Ur as f};
web/sveltekit/build/_app/immutable/chunks/nUW4eUox.js DELETED
@@ -1 +0,0 @@
1
- import{s as e,p as r}from"./BOtZ6QcV.js";const t={get error(){return r.error},get params(){return r.params},get status(){return r.status},get url(){return r.url}};e.updated.check;const a=t;export{a as p};
 
 
web/sveltekit/build/_app/immutable/chunks/zVqBGhq2.js DELETED
@@ -1,37 +0,0 @@
1
- import{k as Ie,o as De,a as c,f as b,s as f,t as _e,d as Ce,c as xe,e as Ne,b as me}from"./CWw6qgC_.js";import{h as ce,n as Le,j as we,bd as ze,d as Oe,a3 as He,aW as je,b7 as Ye,k as We,b as Ue,e as Ae,i as ke,a0 as Ge,av as Ke,p as X,t as C,a as J,s as n,c as r,r as t,aR as re,o as a,al as q,am as ie,ai as Qe,be as Ve,a5 as pe,a4 as Se,f as ee}from"./BTUA7_xE.js";import{B as Ze,i as L}from"./Bd-v_9Ud.js";import{e as te,i as de}from"./25_y8TFd.js";import{s as y,a as ue,b as oe,c as Xe,C as Je}from"./B0XoTt7U.js";import{T as ge,c as $e,b as et,d as Fe}from"./BatqQaKj.js";import{b as tt,_ as at}from"./CXQd8Y6F.js";import{p as ne}from"./CW0zSL4D.js";import{P as rt}from"./D907np-5.js";function st(F,e,w,m,M,i){let h=ce;ce&&Le();var d=null;ce&&we.nodeType===ze&&(d=we,Le());var _=ce?we:F,u=new Ze(_,!1);Oe(()=>{const S=e()||null;var x=S==="svg"?Ye:void 0;if(S===null){u.ensure(null,null);return}return u.ensure(S,o=>{if(S){if(d=ce?d:je(S,x),Ie(d,d),m){ce&&De(S)&&d.append(document.createComment(""));var s=ce?We(d):d.appendChild(Ue());ce&&(s===null?Ae(!1):ke(s)),m(d,s)}Ge.nodes.end=d,o.before(d)}ce&&ke(o)}),()=>{}},He),Ke(()=>{}),h&&(Ae(!0),ke(_))}var it=b('<a target="_blank" rel="noopener noreferrer"> </a>'),nt=b('<li><span class="citation-num"> </span> <div class="citation-body"><div class="citation-line-1"><!> <span class="citation-source"> </span> <span class="citation-vintage"> </span></div> <div class="citation-title"><!></div> <div class="citation-meta"><span class="citation-docid"> </span> <span class="citation-retrieved"> </span></div></div></li>'),lt=b(`<aside class="citation-drawer svelte-1p339fd" aria-label="Citations"><div class="citation-drawer-head"><span class="section-label"> </span> <span class="citation-drawer-meta">live · primary sources</span></div> <ol class="citation-list"></ol> <div class="citation-drawer-foot"><span class="section-label">Trust signals</span> <p class="citation-foot-copy">All foundation models Apache-2.0. All data from public-record federal,
2
- state, and city sources. No commercial APIs contacted at runtime.</p></div></aside>`);function Ar(F,e){X(e,!0);let w=q(()=>Object.values(e.citations).sort((_,u)=>_.n-u.n));var m=lt(),M=r(m),i=r(M),h=r(i);t(i),re(2),t(M);var d=n(M,2);te(d,21,()=>a(w),_=>_.id,(_,u)=>{var S=nt();let x;var o=r(S),s=r(o);t(o);var l=n(o,2),p=r(l),N=r(p);ge(N,{get tier(){return a(u).tier},size:10,get color(){return`var(--tier-${a(u).tier??""})`}});var g=n(N,2),v=r(g,!0);t(g);var k=n(g,2),B=r(k);t(k),t(p);var E=n(p,2),D=r(E);{var H=R=>{var Y=it(),K=r(Y,!0);t(Y),C(()=>{y(Y,"href",a(u).url),f(K,a(u).title)}),c(R,Y)},I=q(()=>a(u).url&&a(u).url.startsWith("http")),z=R=>{var Y=_e();C(()=>f(Y,a(u).title)),c(R,Y)};L(D,R=>{a(I)?R(H):R(z,-1)})}t(E);var O=n(E,2),W=r(O),T=r(W,!0);t(W);var P=n(W,2),A=r(P);t(P),t(O),t(l),t(S),C(()=>{y(S,"id",`cite-${a(u).id??""}`),x=ue(S,1,"citation-item",null,x,{"is-active":$e.active===a(u).id}),f(s,`[${a(u).n??""}]`),f(v,a(u).source),f(B,`v. ${a(u).vintage??""}`),f(T,a(u).docId),f(A,`retr. ${a(u).retrieved??""}`)}),c(_,S)}),t(d),re(2),t(m),C(()=>f(h,`Citations · ${a(w).length??""}`)),c(F,m),J()}const Re=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
3
- <rect width="12" height="12" fill="rgba(42,111,168,0.18)"/>
4
- <g stroke="#2A6FA8" stroke-width="1.4">
5
- <line x1="-2" y1="2" x2="14" y2="-14"/>
6
- <line x1="-2" y1="8" x2="14" y2="-8"/>
7
- <line x1="-2" y1="14" x2="14" y2="-2"/>
8
- <line x1="-2" y1="20" x2="14" y2="4"/>
9
- </g>
10
- </svg>`,ot=`<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
11
- <rect width="12" height="12" fill="rgba(42,111,168,0.16)"/>
12
- <g stroke="#2A6FA8" stroke-width="1.1">
13
- <line x1="-2" y1="6" x2="14" y2="-10"/>
14
- <line x1="-2" y1="14" x2="14" y2="-2"/>
15
- <line x1="-2" y1="22" x2="14" y2="6"/>
16
- </g>
17
- </svg>`;async function dt(F,e){const w=new Blob([F],{type:"image/svg+xml"}),m=URL.createObjectURL(w);try{return await new Promise((i,h)=>{const d=new Image(e,e);d.onload=()=>i(d),d.onerror=_=>h(_),d.src=m})}finally{URL.revokeObjectURL(m)}}async function vt(F){const e=[["syn-stripe-45",Re,12],["syn-stripe-45-2x",Re,24],["syn-stripe-45-low",ot,12]];for(const[w,m,M]of e)if(!F.hasImage(w))try{const i=await dt(m,M);F.addImage(w,i,{pixelRatio:M/12})}catch(i){console.warn(`syn-stripe registration failed for ${w}`,i)}}var ct=b('<span class="link-badge svelte-wk2bu4" aria-hidden="true"> </span>'),ut=b('<div class="map-frame svelte-wk2bu4"><div role="application" class="rip-map-container svelte-wk2bu4"></div> <!></div>');function Fr(F,e){X(e,!0);let w=ne(e,"activeLayers",19,()=>({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),m=ne(e,"linkedKey",3,null),M=Se(null),i=null,h=Se(!1);const d={type:"FeatureCollection",features:[]};function _(l,p){if(!i||!a(h))return;const N=i.getSource(l);N&&N.setData(p??d)}function u(l,p){!i||!a(h)||i.getLayer(l)&&i.setLayoutProperty(l,"visibility",p?"visible":"none")}ie(()=>{_("sandy-empirical",e.sandyEmpirical)}),ie(()=>{_("dep-modeled",e.depModeled)}),ie(()=>{_("syn-prior",e.syntheticPrior)}),ie(()=>{_("proxy-311",e.proxy311)}),ie(()=>{_("register-points",e.registerPoints)}),ie(()=>{_("register-polygons",e.registerPolygons)}),ie(()=>{_("terramind-lulc",e.terramindLulc)}),ie(()=>{_("terramind-buildings",e.terramindBuildings)}),ie(()=>{_("prithvi-live",e.prithviLive)}),ie(()=>{_("ida-hwm",e.idaHwm)}),ie(()=>{u("tier-empirical-fill",w().empirical),u("tier-empirical-line",w().empirical),u("ida-hwm-circle",w().empirical),u("tier-modeled-fill",w().modeled),u("tier-modeled-line",w().modeled),u("tier-synthetic-fill",w().synthetic),u("tier-synthetic-line",w().synthetic),u("terramind-lulc-fill",w().synthetic),u("terramind-lulc-line",w().synthetic),u("terramind-buildings-fill",w().synthetic),u("terramind-buildings-line",w().synthetic),u("prithvi-live-fill",w().modeled),u("prithvi-live-line",w().modeled),u("tier-proxy-dots",w().proxy)}),ie(()=>{!i||!a(h)||i.flyTo({center:[e.address.lon,e.address.lat],zoom:15,essential:!0})}),Qe(async()=>{if(!a(M))return;const l=await at(()=>import("./D4L2lGt1.js").then(p=>p.m),[],import.meta.url);i=new l.Map({container:a(M),style:rt,center:[e.address.lon,e.address.lat],zoom:15,attributionControl:{compact:!0}}),i.addControl(new l.NavigationControl({visualizePitch:!1}),"top-right"),i.addControl(new l.ScaleControl({maxWidth:100,unit:"imperial"}),"bottom-left"),i.on("load",()=>{if(!i)return;window.__riprapMap=i,vt(i);const p=()=>({type:"FeatureCollection",features:[]});i.addSource("sandy-empirical",{type:"geojson",data:e.sandyEmpirical??p()}),i.addSource("dep-modeled",{type:"geojson",data:e.depModeled??p()}),i.addSource("syn-prior",{type:"geojson",data:e.syntheticPrior??p()}),i.addSource("proxy-311",{type:"geojson",data:e.proxy311??p()}),i.addSource("register-points",{type:"geojson",data:e.registerPoints??p()}),i.addSource("register-polygons",{type:"geojson",data:e.registerPolygons??p()}),i.addSource("terramind-lulc",{type:"geojson",data:e.terramindLulc??p()}),i.addSource("terramind-buildings",{type:"geojson",data:e.terramindBuildings??p()}),i.addSource("prithvi-live",{type:"geojson",data:e.prithviLive??p()}),i.addSource("ida-hwm",{type:"geojson",data:e.idaHwm??p()}),i.addSource("queried-address",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",geometry:{type:"Point",coordinates:[e.address.lon,e.address.lat]},properties:{label:e.address.label}}]}}),i.addLayer({id:"tier-empirical-fill",type:"fill",source:"sandy-empirical",paint:{"fill-color":"#0B5394","fill-opacity":.4}}),i.addLayer({id:"tier-empirical-line",type:"line",source:"sandy-empirical",paint:{"line-color":"#0B5394","line-width":1.5}}),i.addLayer({id:"tier-modeled-fill",type:"fill",source:"dep-modeled",paint:{"fill-color":"#2A6FA8","fill-opacity":.25}}),i.addLayer({id:"tier-modeled-line",type:"line",source:"dep-modeled",paint:{"line-color":"#2A6FA8","line-width":1.5}}),i.addLayer({id:"tier-synthetic-fill",type:"fill",source:"syn-prior",paint:{"fill-pattern":"syn-stripe-45","fill-opacity":.65}}),i.addLayer({id:"tier-synthetic-line",type:"line",source:"syn-prior",paint:{"line-color":"#2A6FA8","line-width":1.5,"line-dasharray":[4,3]}}),i.addLayer({id:"tier-proxy-dots",type:"circle",source:"proxy-311",paint:{"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1.25,"circle-radius":["interpolate",["linear"],["coalesce",["get","count"],1],1,3,5,6,15,9,30,12]}}),i.addLayer({id:"terramind-lulc-fill",type:"fill",source:"terramind-lulc",paint:{"fill-color":["get","fill_color"],"fill-opacity":.25}}),i.addLayer({id:"terramind-lulc-line",type:"line",source:"terramind-lulc",paint:{"line-color":["get","fill_color"],"line-width":.75,"line-opacity":.45,"line-dasharray":[3,2]}}),i.addLayer({id:"terramind-buildings-fill",type:"fill",source:"terramind-buildings",paint:{"fill-color":"#D62728","fill-opacity":.32}}),i.addLayer({id:"terramind-buildings-line",type:"line",source:"terramind-buildings",paint:{"line-color":"#A31D1F","line-width":.6,"line-opacity":.7}}),i.addLayer({id:"prithvi-live-fill",type:"fill",source:"prithvi-live",paint:{"fill-color":"#1F77B4","fill-opacity":.42}}),i.addLayer({id:"prithvi-live-line",type:"line",source:"prithvi-live",paint:{"line-color":"#0F4F7C","line-width":1,"line-opacity":.85}}),i.addLayer({id:"register-polygons-fill",type:"fill",source:"register-polygons",paint:{"fill-color":"#0B5394","fill-opacity":["interpolate",["linear"],["coalesce",["get","pct_inside_sandy"],0],0,.1,25,.2,50,.32,75,.45]}}),i.addLayer({id:"register-polygons-line",type:"line",source:"register-polygons",paint:{"line-color":"#0B5394","line-width":1,"line-opacity":.85}}),i.addLayer({id:"ida-hwm-circle",type:"circle",source:"ida-hwm",paint:{"circle-color":"#D97706","circle-stroke-color":"#F4F6F9","circle-stroke-width":1.5,"circle-radius":["interpolate",["linear"],["coalesce",["get","height_above_gnd_ft"],.5],0,5,1,7,3,9,5,12],"circle-opacity":.92}}),i.on("mouseenter","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","ida-hwm-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","ida-hwm-circle",N=>{var W;if(!i||!((W=N.features)!=null&&W.length))return;const g=N.features[0],v=g.properties??{},k=String(v.site_description??"?"),B=v.elev_ft!=null?`${Number(v.elev_ft).toFixed(1)} ft NAVD88`:"—",E=v.height_above_gnd_ft!=null?`${Number(v.height_above_gnd_ft).toFixed(2)} ft above ground`:"—",D=String(v.hwm_quality??""),H=v.distance_m!=null?`${v.distance_m} m from query`:"",I=`
18
- <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px; max-width: 220px;">
19
- <div style="font-weight: 600; color: #D97706; font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase;">Ida 2021 HWM · USGS</div>
20
- <div style="margin-top: 4px; color: #0F172A; font-size: 12px;">${k}</div>
21
- <div style="margin-top: 6px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #6B6B6B;">
22
- elev: ${B}<br>
23
- mark: ${E}<br>
24
- ${D?`quality: ${D}<br>`:""}
25
- ${H}
26
- </div>
27
- </div>`,z=new l.Popup({closeButton:!0,offset:12}),O=g.geometry.coordinates;z.setLngLat(O).setHTML(I).addTo(i)}),i.addLayer({id:"register-points-circle",type:"circle",source:"register-points",paint:{"circle-color":["case",["==",["get","inside_sandy_2012"],!0],"#0B5394","#6B6B6B"],"circle-stroke-color":"#F4F6F9","circle-stroke-width":1.25,"circle-radius":["match",["get","kind"],"subway",4,"school",5,"hospital",6,"nycha",7,4],"circle-opacity":.9}}),i.on("mouseenter","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="pointer")}),i.on("mouseleave","register-points-circle",()=>{i&&(i.getCanvas().style.cursor="")}),i.on("click","register-points-circle",N=>{var O;if(!i||!((O=N.features)!=null&&O.length))return;const g=N.features[0],v=g.properties??{},k=String(v.name??"?"),B=String(v.kind??"?"),E=v.inside_sandy_2012===!0||v.inside_sandy_2012==="true",D=String(v.doc_id??""),H=`
28
- <div style="font-family: 'IBM Plex Sans', system-ui; font-size: 12px;">
29
- <div style="font-weight: 600; color: #0F172A;">${k}</div>
30
- <div style="color: #6B6B6B; font-size: 11px; margin-top: 2px;">${B}</div>
31
- <div style="margin-top: 6px;">
32
- <span style="font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: ${E?"#0B5394":"#6B6B6B"};">
33
- inside_sandy_2012=${E}
34
- </span>
35
- </div>
36
- ${D?`<div style="margin-top: 4px; font-family: 'IBM Plex Mono', monospace; font-size: 10.5px; color: #005EA2;">[${D}]</div>`:""}
37
- </div>`,I=new l.Popup({closeButton:!0,offset:12}),z=g.geometry.coordinates;I.setLngLat(z).setHTML(H).addTo(i)}),i.addLayer({id:"queried-halo",type:"circle",source:"queried-address",paint:{"circle-color":"rgba(209, 124, 0, 0.20)","circle-radius":16}}),i.addLayer({id:"queried-pin",type:"circle",source:"queried-address",paint:{"circle-color":"#005EA2","circle-stroke-color":"#F4F6F9","circle-stroke-width":2,"circle-radius":7}}),i.addLayer({id:"queried-label",type:"symbol",source:"queried-address",layout:{"text-field":["get","label"],"text-font":["Open Sans Semibold","Arial Unicode MS Bold"],"text-size":12,"text-offset":[0,-1.6],"text-anchor":"bottom"},paint:{"text-color":"#0F172A","text-halo-color":"#F4F6F9","text-halo-width":1.5}}),pe(h,!0)})}),Ve(()=>{i==null||i.remove(),i=null});var S=ut(),x=r(S);tt(x,l=>pe(M,l),()=>a(M));var o=n(x,2);{var s=l=>{var p=ct(),N=r(p);t(p),C(()=>f(N,`linked: ${m()??""}`)),c(l,p)};L(o,l=>{m()&&l(s)})}t(S),C(()=>{y(S,"data-linked",m()??""),y(x,"aria-label",`Flood-exposure map for ${e.address.label??""}`)}),c(F,S),J()}const Be=["cornerstone","keystone","touchstone","lodestone","capstone"],Me={cornerstone:{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers"},keystone:{name:"Keystone",role:"the asset register",tag:"what's exposed"},touchstone:{name:"Touchstone",role:"the live observer",tag:"what's happening now"},lodestone:{name:"Lodestone",role:"the projector",tag:"what's coming"},capstone:{name:"Capstone",role:"the synthesizer",tag:"writes it all down with citations"}};var gt=b('<span class="layers-count svelte-1g2dety"> </span>'),ht=b('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">no map layers — see Findings cards</span></li>'),mt=b('<li class="layers-row layers-row-empty svelte-1g2dety"><span class="layers-empty-text svelte-1g2dety">not a map layer</span></li>'),ft=b('<span class="layers-state-dim svelte-1g2dety" title="Not yet wired to map source">off · catalog</span>'),yt=b('<li><span class="layers-glyph svelte-1g2dety" aria-hidden="true"><!></span> <span class="layers-text svelte-1g2dety"><span class="layers-label svelte-1g2dety"> </span> <span class="layers-meta svelte-1g2dety"> <!></span></span> <span class="layers-state svelte-1g2dety"><!></span></li>'),_t=b('<details open=""><summary class="svelte-1g2dety"><span class="layers-caret svelte-1g2dety" aria-hidden="true">▾</span> <span class="layers-stone-name svelte-1g2dety"> </span> <span class="layers-stone-tag svelte-1g2dety"> </span> <!></summary> <ul class="layers-list svelte-1g2dety"><!></ul></details>'),pt=b('<button type="button"><!> <span> </span> <span class="layers-master-state svelte-1g2dety"> </span></button>'),xt=b('<aside class="layers-panel svelte-1g2dety" aria-label="Map layers grouped by Stone"><div class="layers-head svelte-1g2dety"><span class="section-label">Layers · grouped by Stone</span></div> <!> <div class="layers-masters svelte-1g2dety" role="group" aria-label="Master tier toggles"><span class="section-label">Tier toggles</span> <div class="layers-master-row svelte-1g2dety"></div></div></aside>');function Rr(F,e){X(e,!0);const w={cornerstone:[{label:"Sandy Inundation Zone (2012)",source:"NYC OEM",tier:"empirical",wired:!0},{label:"FEMA / DEP scenarios",source:"FEMA · NYC DEP",tier:"modeled",wired:!0},{label:"Ida HWM points (2021)",source:"USGS STN",tier:"empirical",wired:!0},{label:"Microtopography (HAND/TWI)",source:"USGS 3DEP",tier:"proxy",wired:!1}],keystone:[{label:"MTA subway entrances",source:"MTA Open Data",tier:"empirical",wired:!0},{label:"NYCHA developments",source:"NYC OD phvi-damg",tier:"empirical",wired:!0},{label:"DOE schools",source:"NYC DOE Locations",tier:"empirical",wired:!0},{label:"DOH hospitals",source:"NYS DOH vn5v-hh5r",tier:"empirical",wired:!0},{label:"TerraMind Buildings (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!1}],touchstone:[{label:"311 flood complaints",source:"NYC 311",tier:"proxy",wired:!1},{label:"FloodNet sensors",source:"FloodNet NYC",tier:"proxy",wired:!0},{label:"TerraMind LULC (current)",source:"msradam/TerraMind-NYC-Adapters",tier:"synthetic",wired:!0},{label:"Prithvi-NYC-Pluvial flood pred.",source:"msradam/Prithvi-EO-2.0-NYC-Pluvial",tier:"modeled",wired:!1}],lodestone:[],capstone:[]};function m(S){return!!e.active[S.tier]}function M(S){return w[S].length}const i=[{k:"empirical",tier:"empirical",label:"EMP"},{k:"modeled",tier:"modeled",label:"MOD"},{k:"proxy",tier:"proxy",label:"PRX"},{k:"synthetic",tier:"synthetic",label:"SYN"}];var h=xt(),d=n(r(h),2);te(d,16,()=>Be,S=>S,(S,x)=>{var o=_t(),s=r(o),l=n(r(s),2),p=r(l,!0);t(l);var N=n(l,2),g=r(N);t(N);var v=n(N,2);{var k=O=>{var W=gt(),T=r(W,!0);t(W),C(P=>f(T,P),[()=>M(x)]),c(O,W)},B=q(()=>M(x)>0);L(v,O=>{a(B)&&O(k)})}t(s);var E=n(s,2),D=r(E);{var H=O=>{var W=ht();c(O,W)},I=O=>{var W=mt();c(O,W)},z=O=>{var W=xe(),T=ee(W);te(T,17,()=>w[x],de,(P,A)=>{var R=yt();let Y;var K=r(R),ae=r(K);ge(ae,{get tier(){return a(A).tier},size:11,get color(){return`var(--tier-${a(A).tier??""})`}}),t(K);var Q=n(K,2),Z=r(Q),le=r(Z,!0);t(Z);var j=n(Z,2),V=r(j),G=n(V);et(G,{get tier(){return a(A).tier},compact:!0}),t(j),t(Q);var U=n(Q,2),$=r(U);{var ve=se=>{var ye=ft();c(se,ye)},fe=se=>{var ye=_e("on");c(se,ye)},be=q(()=>m(a(A))),he=se=>{var ye=_e("off");c(se,ye)};L($,se=>{a(A).wired?a(be)?se(fe,1):se(he,-1):se(ve)})}t(U),t(R),C(()=>{Y=ue(R,1,"layers-row svelte-1g2dety",null,Y,{dim:!a(A).wired}),f(le,a(A).label),f(V,`${a(A).source??""} · `)}),c(P,R)}),c(O,W)};L(D,O=>{x==="lodestone"?O(H):x==="capstone"?O(I,1):O(z,-1)})}t(E),t(o),C(()=>{ue(o,1,`layers-group region-${x??""}`,"svelte-1g2dety"),f(p,Me[x].name),f(g,`— ${Me[x].tag??""}`)}),c(S,o)});var _=n(d,2),u=n(r(_),2);te(u,21,()=>i,S=>S.k,(S,x)=>{var o=pt();let s;var l=r(o);ge(l,{get tier(){return a(x).tier},size:11,get color(){return`var(--tier-${a(x).tier??""})`}});var p=n(l,2),N=r(p,!0);t(p);var g=n(p,2),v=r(g,!0);t(g),t(o),C(()=>{s=ue(o,1,"layers-master svelte-1g2dety",null,s,{"is-on":e.active[a(x).k]}),y(o,"aria-pressed",e.active[a(x).k]),f(N,a(x).label),f(v,e.active[a(x).k]?"ON":"OFF")}),Ne("click",o,()=>e.onToggle(a(x).k)),c(S,o)}),t(u),t(_),t(h),c(F,h),J()}Ce(["click"]);var bt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-silent svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> silent</span>',1),wt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-warn svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> warned</span>',1),kt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-err svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> errored</span>',1),St=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-notinvoked svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> not invoked</span>',1),Mt=b('<span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> cache</span>',1),Ct=b('<div class="rh svelte-1vuwkv4"><span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> Stones</span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> fired</span> <!> <!> <!> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> </span> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> wall-clock</span> <!> <span class="rh-sep svelte-1vuwkv4">·</span> <span class="rh-item rh-total svelte-1vuwkv4"><strong class="svelte-1vuwkv4"> </strong> registered</span></div>');function Nt(F,e){X(e,!0);function w(j){return j.flatMap(V=>V.children?[V,...w(V.children)]:[V])}let m=q(()=>e.stones.flatMap(j=>w(j.members))),M=q(()=>a(m).length),i=q(()=>a(m).filter(j=>j.status==="fired"||j.status==="warned").length),h=q(()=>a(m).filter(j=>j.status==="silent_by_design").length),d=q(()=>a(m).filter(j=>j.status==="warned").length),_=q(()=>a(m).filter(j=>j.status==="errored").length),u=q(()=>a(m).filter(j=>j.status==="not_invoked").length),S=q(()=>e.wallSeconds==null?"—":e.wallSeconds<1?`${Math.round(e.wallSeconds*1e3)}ms`:`${e.wallSeconds.toFixed(1)}s`);var x=Ct(),o=r(x),s=r(o),l=r(s,!0);t(s),re(),t(o);var p=n(o,4),N=r(p),g=r(N,!0);t(N),re(),t(p);var v=n(p,2);{var k=j=>{var V=bt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(h))),c(j,V)};L(v,j=>{a(h)>0&&j(k)})}var B=n(v,2);{var E=j=>{var V=wt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(d))),c(j,V)};L(B,j=>{a(d)>0&&j(E)})}var D=n(B,2);{var H=j=>{var V=kt(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(_))),c(j,V)};L(D,j=>{a(_)>0&&j(H)})}var I=n(D,2);{var z=j=>{var V=St(),G=n(ee(V),2),U=r(G),$=r(U,!0);t(U),re(),t(G),C(()=>f($,a(u))),c(j,V)};L(I,j=>{a(u)>0&&j(z)})}var O=n(I,4),W=r(O),T=r(W,!0);t(W);var P=n(W);t(O);var A=n(O,4),R=r(A),Y=r(R,!0);t(R),re(),t(A);var K=n(A,2);{var ae=j=>{var V=Mt(),G=n(ee(V),2),U=r(G),$=r(U);t(U),re(),t(G),C(ve=>f($,`${ve??""}%`),[()=>Math.round(e.cacheHit*100)]),c(j,V)};L(K,j=>{e.cacheHit!=null&&j(ae)})}var Q=n(K,4),Z=r(Q),le=r(Z,!0);t(Z),re(),t(Q),t(x),C(()=>{f(l,e.stones.length),f(g,a(i)),f(T,e.cards.length),f(P,` evidence card${e.cards.length===1?"":"s"}`),f(Y,a(S)),f(le,a(M))}),c(F,x),J()}var Bt=b('<div class="subhead svelte-lygj3j"> </div>'),Lt=b('<p class="body-prose svelte-lygj3j"> </p>'),At=b('<div class="body body-headline svelte-lygj3j"><div class="headline svelte-lygj3j"> </div> <!> <!></div>');function Ft(F,e){X(e,!0);var w=At(),m=r(w),M=r(m,!0);t(m);var i=n(m,2);{var h=u=>{var S=Bt(),x=r(S,!0);t(S),C(()=>f(x,e.card.subhead)),c(u,S)};L(i,u=>{e.card.subhead&&u(h)})}var d=n(i,2);{var _=u=>{var S=Lt(),x=r(S,!0);t(S),C(()=>f(x,e.card.body)),c(u,S)};L(d,u=>{e.card.body&&u(_)})}t(w),C(()=>{oe(m,`color: var(--tier-${e.card.tier??""});`),f(M,e.card.headline??"")}),c(F,w),J()}var Rt=b('<th class="svelte-1nlkuao"> </th>'),Et=b('<td class="svelte-1nlkuao"> </td>'),Pt=b('<tr class="svelte-1nlkuao"></tr>'),Tt=b('<div class="body-sub svelte-1nlkuao"> </div>'),qt=b('<div class="body body-tabular svelte-1nlkuao"><table class="t svelte-1nlkuao"><thead><tr></tr></thead><tbody></tbody></table> <!></div>');function It(F,e){X(e,!0);var w=qt(),m=r(w),M=r(m),i=r(M);te(i,21,()=>e.card.columns??[],de,(u,S)=>{var x=Rt(),o=r(x,!0);t(x),C(()=>f(o,a(S))),c(u,x)}),t(i),t(M);var h=n(M);te(h,21,()=>e.card.rows??[],de,(u,S)=>{var x=Pt();te(x,21,()=>a(S),de,(o,s)=>{var l=Et(),p=r(l,!0);t(l),C(()=>f(p,a(s))),c(o,l)}),t(x),c(u,x)}),t(h),t(m);var d=n(m,2);{var _=u=>{var S=Tt(),x=r(S,!0);t(S),C(()=>f(x,e.card.sub)),c(u,S)};L(d,u=>{e.card.sub&&u(_)})}t(w),c(F,w),J()}var Dt=b('<div class="cell svelte-stf9c8"><div class="value svelte-stf9c8"> </div> <div class="label svelte-stf9c8"> </div></div>'),zt=b('<div class="body-sub svelte-stf9c8"> </div>'),Ot=b('<div class="body body-scalars svelte-stf9c8"><div class="row svelte-stf9c8"></div> <!></div>');function Ht(F,e){X(e,!0);var w=Ot(),m=r(w);te(m,21,()=>e.card.scalars??[],de,(h,d)=>{var _=Dt(),u=r(_),S=r(u,!0);t(u);var x=n(u,2),o=r(x,!0);t(x),t(_),C(()=>{oe(u,`color: var(--tier-${e.card.tier??""});`),f(S,a(d).value),f(o,a(d).label)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=zt(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(F,w),J()}var jt=b('<div class="headline svelte-jrppts"> </div>'),Yt=b('<div class="subhead svelte-jrppts"> </div>'),Wt=me("<rect></rect>"),Ut=b('<div class="body-sub svelte-jrppts"> </div>'),Gt=b('<div class="body-sub svelte-jrppts"> </div>'),Kt=b('<div class="body body-spark svelte-jrppts"><!> <!> <svg width="100%" preserveAspectRatio="none" aria-hidden="true" class="svelte-jrppts"></svg> <!> <!></div>');function Qt(F,e){X(e,!0);const w=240,m=38;let M=q(()=>e.card.spark??e.card.histogram??[]),i=q(()=>Math.max(...a(M),1)),h=q(()=>a(M).length),d=q(()=>Math.max(2,w/Math.max(a(h),1)-1.5));var _=Kt(),u=r(_);{var S=v=>{var k=jt(),B=r(k,!0);t(k),C(()=>{oe(k,`color: var(--tier-${e.card.tier??""});`),f(B,e.card.headline)}),c(v,k)};L(u,v=>{e.card.headline&&v(S)})}var x=n(u,2);{var o=v=>{var k=Yt(),B=r(k,!0);t(k),C(()=>f(B,e.card.subhead)),c(v,k)};L(x,v=>{e.card.subhead&&v(o)})}var s=n(x,2);y(s,"viewBox","0 0 240 38"),y(s,"height",m),te(s,21,()=>a(M),de,(v,k,B)=>{var E=Wt();C(()=>{y(E,"x",B/a(h)*w+.5),y(E,"y",m-a(k)/a(i)*m),y(E,"width",a(d)),y(E,"height",a(k)/a(i)*m),y(E,"fill",`var(--tier-${e.card.tier??""})`)}),c(v,E)}),t(s);var l=n(s,2);{var p=v=>{var k=Ut(),B=r(k,!0);t(k),C(()=>f(B,e.card.sparkSub)),c(v,k)};L(l,v=>{e.card.sparkSub&&v(p)})}var N=n(l,2);{var g=v=>{var k=Gt(),B=r(k,!0);t(k),C(()=>f(B,e.card.sub)),c(v,k)};L(N,v=>{!e.card.sparkSub&&e.card.sub&&v(g)})}t(_),c(F,_),J()}var Vt=b('<span class="headline svelte-48vbub"> </span>'),Zt=b('<span class="subhead svelte-48vbub"> </span>'),Xt=b('<span class="spatial-note svelte-48vbub"> </span>'),Jt=b("<span> </span>"),$t=b('<div class="body-sub svelte-48vbub"><!> <!></div>'),ea=b('<div class="body body-timeseries svelte-48vbub"><div class="ts-header svelte-48vbub"><!> <!></div> <svg width="100%" aria-hidden="true" class="svelte-48vbub"><line stroke="#C9C9C5" stroke-width="0.5" stroke-dasharray="2 2"></line><path fill="none" stroke-width="1.4"></path><circle r="3"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle"> </text><text font-size="8" font-family="IBM Plex Mono" fill="#6B6B6B">now</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B"> </text></svg> <!></div>');function Ee(F,e){X(e,!0);const w=240,m=84,M=6,i=q(()=>e.card.timeseries??{hours:96,peak:{x:38,y:47},peakLabel:""}),h=q(()=>u(a(i))),d=q(()=>S(a(h),a(i))),_=q(()=>x(a(h),a(d)));function u(P){const A=[];for(let R=0;R<=P.hours;R++){const Y=6*Math.sin(R/12.42*Math.PI*2),K=38*Math.exp(-Math.pow((R-P.peak.x)/12,2));A.push({x:R,y:Y+K+4})}return A}function S(P,A){const R=Math.max(...P.map(K=>K.y),A.peak.y),Y=Math.min(...P.map(K=>K.y),-10);return{sx:K=>M+K/A.hours*(w-M*2),sy:K=>m-M-14-(K-Y)/(R-Y)*(m-M*2-14)}}function x(P,A){return P.map((R,Y)=>`${Y?"L":"M"} ${A.sx(R.x)} ${A.sy(R.y)}`).join(" ")}var o=ea(),s=r(o),l=r(s);{var p=P=>{var A=Vt(),R=r(A,!0);t(A),C(()=>{oe(A,`color: var(--tier-${e.card.tier??""});`),f(R,e.card.headline)}),c(P,A)};L(l,P=>{e.card.headline&&P(p)})}var N=n(l,2);{var g=P=>{var A=Zt(),R=r(A,!0);t(A),C(()=>f(R,e.card.subhead)),c(P,A)};L(N,P=>{e.card.subhead&&P(g)})}t(s);var v=n(s,2);y(v,"viewBox","0 0 240 84"),y(v,"height",m);var k=r(v);y(k,"x1",M),y(k,"x2",w-M);var B=n(k),E=n(B),D=n(E),H=r(D,!0);t(D);var I=n(D);y(I,"x",M),y(I,"y",m-2);var z=n(I);y(z,"x",w-M),y(z,"y",m-2);var O=r(z);t(z),t(v);var W=n(v,2);{var T=P=>{var A=$t(),R=r(A);{var Y=Q=>{var Z=Xt(),le=r(Z,!0);t(Z),C(()=>f(le,e.card.spatialNote)),c(Q,Z)};L(R,Q=>{e.card.spatialNote&&Q(Y)})}var K=n(R,2);{var ae=Q=>{var Z=Jt(),le=r(Z,!0);t(Z),C(()=>f(le,e.card.sub)),c(Q,Z)};L(K,Q=>{e.card.sub&&Q(ae)})}t(A),c(P,A)};L(W,P=>{(e.card.spatialNote||e.card.sub)&&P(T)})}t(o),C((P,A,R,Y,K,ae)=>{y(k,"y1",P),y(k,"y2",A),y(B,"d",a(_)),y(B,"stroke",`var(--tier-${e.card.tier??""})`),y(E,"cx",R),y(E,"cy",Y),y(E,"fill",`var(--tier-${e.card.tier??""})`),y(D,"x",K),y(D,"y",ae),y(D,"fill",`var(--tier-${e.card.tier??""})`),f(H,a(i).peakLabel),f(O,`+${a(i).hours??""}h`)},[()=>a(d).sy(0),()=>a(d).sy(0),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y),()=>a(d).sx(a(i).peak.x),()=>a(d).sy(a(i).peak.y)-6]),c(F,o),J()}var ta=b('<span class="ft-stat svelte-1y25lfh"><span class="ft-stat-k svelte-1y25lfh">RMSE</span> </span>'),aa=b('<span class="ft-stat ft-skill svelte-1y25lfh"> </span>'),ra=b('<span class="ft-badge svelte-1y25lfh" title="Trained on this hardware"> </span>'),sa=b('<a class="ft-link svelte-1y25lfh" target="_blank" rel="noopener noreferrer">Model card ↗</a>'),ia=b('<!> <div class="ft-footer svelte-1y25lfh"><!> <!> <!> <!></div>',1);function na(F,e){X(e,!0);var w=ia(),m=ee(w);Ee(m,{get card(){return e.card}});var M=n(m,2),i=r(M);{var h=s=>{var l=ta(),p=n(r(l));t(l),C(()=>f(p,` ${e.card.rmse??""}`)),c(s,l)};L(i,s=>{e.card.rmse&&s(h)})}var d=n(i,2);{var _=s=>{var l=aa(),p=r(l,!0);t(l),C(()=>f(p,e.card.skillVsPersistence)),c(s,l)};L(d,s=>{e.card.skillVsPersistence&&s(_)})}var u=n(d,2);{var S=s=>{var l=ra(),p=r(l,!0);t(l),C(()=>f(p,e.card.hardwareBadge)),c(s,l)};L(u,s=>{e.card.hardwareBadge&&s(S)})}var x=n(u,2);{var o=s=>{var l=sa();C(p=>y(l,"href",p),[()=>e.card.hfModelCard.startsWith("http")?e.card.hfModelCard:`https://${e.card.hfModelCard}`]),c(s,l)};L(x,s=>{e.card.hfModelCard&&s(o)})}t(M),c(F,w),J()}var la=me('<circle r="2.2"></circle><text font-size="9" font-family="IBM Plex Mono" text-anchor="middle" fill="#6B6B6B"> </text>',1),oa=b('<div class="body-sub svelte-gqkhpe"> </div>'),da=b('<div class="body body-forecast svelte-gqkhpe"><svg width="100%" aria-hidden="true" class="svelte-gqkhpe"><path fill-opacity="0.18"></path><path fill="none" stroke-width="1.5"></path><!></svg> <!></div>');function va(F,e){X(e,!0);const w=240,m=88,M=6;let i=q(()=>e.card.forecast??[]),h=q(()=>a(i).map((v,k)=>M+k/Math.max(a(i).length-1,1)*(w-M*2))),d=q(()=>Math.max(...a(i).map(v=>v.high),1));function _(v){return m-M-v/a(d)*(m-M*2-12)}let u=q(()=>a(h).map((v,k)=>`${k?"L":"M"} ${v} ${_(a(i)[k].mid)}`).join(" ")),S=q(()=>{if(!a(i).length)return"";const v=a(h).map((B,E)=>`${B} ${_(a(i)[E].low)}`).join(" L "),k=[...a(h)].reverse().map((B,E)=>`${B} ${_(a(i)[a(i).length-1-E].high)}`).join(" L ");return`M ${v} L ${k} Z`});var x=da(),o=r(x);y(o,"viewBox","0 0 240 88"),y(o,"height",m);var s=r(o),l=n(s),p=n(l);te(p,17,()=>a(i),de,(v,k,B)=>{var E=la(),D=ee(E),H=n(D);y(H,"y",m-1);var I=r(H,!0);t(H),C(z=>{y(D,"cx",a(h)[B]),y(D,"cy",z),y(D,"fill",`var(--tier-${e.card.tier??""})`),y(H,"x",a(h)[B]),f(I,a(k).year)},[()=>_(a(k).mid)]),c(v,E)}),t(o);var N=n(o,2);{var g=v=>{var k=oa(),B=r(k,!0);t(k),C(()=>f(B,e.card.sub)),c(v,k)};L(N,v=>{e.card.sub&&v(g)})}t(x),C(()=>{y(s,"d",a(S)),y(s,"fill",`var(--tier-${e.card.tier??""})`),y(l,"d",a(u)),y(l,"stroke",`var(--tier-${e.card.tier??""})`)}),c(F,x),J()}var ca=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M20 50 Q 60 38 90 56 Q 120 76 150 64 Q 180 50 180 86 Q 130 100 70 96 Q 30 92 20 76 Z" fill="rgba(42,111,168,0.32)" stroke="#2A6FA8" stroke-width="0.7"></path><path d="M40 60 Q 80 54 110 70 Q 140 84 160 78 Q 165 90 130 92 Q 80 90 50 82 Z" fill="rgba(11,83,148,0.36)" stroke="#0B5394" stroke-width="0.6"></path><circle cx="120" cy="74" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">2.13 in/hr · MOD</text></svg>'),ua=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><g stroke="#D9D6CC" stroke-width="0.6"><line x1="0" y1="40" y2="40"></line><line x1="0" y1="80" y2="80"></line><line x1="60" y1="0" x2="60"></line><line x1="160" y1="0" x2="160"></line></g><path d="M180 92 Q 200 88 215 96 Q 220 105 200 104 Q 185 102 180 96 Z" fill="rgba(42,111,168,0.18)" stroke="#2A6FA8" stroke-width="0.5" stroke-dasharray="2 2"></path><circle cx="120" cy="60" r="3.2" fill="#005EA2" stroke="#F4F6F9" stroke-width="1.3"></circle><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#6B6B6B">no ponding · MOD</text></svg>'),ga=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><defs><pattern id="rt-s2-rgb" x="0" y="0" width="6" height="6" patternUnits="userSpaceOnUse"><rect width="6" height="6" fill="#7A8E6A"></rect><rect x="0" y="0" width="3" height="3" fill="#8D9C7A"></rect><rect x="3" y="3" width="3" height="3" fill="#69795D"></rect></pattern></defs><rect fill="url(#rt-s2-rgb)"></rect><rect x="0" y="55" height="6" fill="#A8A496"></rect><rect x="115" y="0" width="8" fill="#A8A496"></rect><ellipse cx="50" cy="92" rx="6" ry="3" fill="#2A6FA8" fill-opacity="0.65"></ellipse><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">PRITHVI · 0.3%</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),ha=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#E8ECF2"></rect><rect x="0" y="0" width="80" height="60" fill="#C66"></rect><rect x="80" y="0" width="60" height="60" fill="#C66"></rect><rect x="140" y="0" width="100" height="38" fill="#C66"></rect><rect x="140" y="38" width="100" height="22" fill="#5B7FB4"></rect><rect x="0" y="60" width="100" height="60" fill="#C66"></rect><rect x="100" y="60" width="50" height="40" fill="#5B8A4A"></rect><rect x="150" y="60" width="50" height="60" fill="#D9C75A"></rect><rect x="200" y="60" width="40" height="60" fill="#C66"></rect><rect x="100" y="100" width="50" height="20" fill="#A89A78"></rect><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">LULC · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">scene 2026-05-02</text></svg>'),ma=me('<rect fill="rgba(42,111,168,0.55)" stroke="#2A6FA8" stroke-width="0.4"></rect>'),fa=me('<svg width="100%" aria-hidden="true" class="svelte-1lx1psy"><rect fill="#3A3A38"></rect><!><text x="6" y="14" font-size="9" font-family="IBM Plex Mono" fill="#F4F6F9">BLDG · TerraMind</text><text font-size="8" font-family="IBM Plex Mono" text-anchor="end" fill="#F4F6F9">36.2% built</text></svg>'),ya=b('<div class="thumb-placeholder svelte-1lx1psy">raster preview</div>');function Pe(F,e){var M=xe(),i=ee(M);{var h=o=>{var s=ca();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l),N=r(p);y(N,"x2",240);var g=n(N);y(g,"x2",240);var v=n(g);y(v,"y2",120);var k=n(v);y(k,"y2",120),t(p);var B=n(p,4);y(B,"x",234),y(B,"y",115),t(s),c(o,s)},d=o=>{var s=ua();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l),N=r(p);y(N,"x2",240);var g=n(N);y(g,"x2",240);var v=n(g);y(v,"y2",120);var k=n(v);y(k,"y2",120),t(p);var B=n(p,3);y(B,"x",234),y(B,"y",115),t(s),c(o,s)},_=o=>{var s=ga();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=n(r(s));y(l,"width",240),y(l,"height",120);var p=n(l);y(p,"width",240);var N=n(p);y(N,"height",120);var g=n(N,3);y(g,"x",234),y(g,"y",115),t(s),c(o,s)},u=o=>{var s=ha();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l,11);y(p,"x",234),y(p,"y",115),t(s),c(o,s)},S=o=>{var s=fa();y(s,"viewBox","0 0 240 120"),y(s,"height",120);var l=r(s);y(l,"width",240),y(l,"height",120);var p=n(l);te(p,16,()=>[[10,10,28,18],[42,10,30,16],[78,10,40,22],[124,10,32,18],[162,10,30,18],[198,10,32,18],[10,32,28,16],[42,30,30,18],[124,32,32,16],[162,32,30,16],[198,32,32,16],[10,55,28,18],[42,55,30,18],[78,55,40,18],[124,55,32,18],[162,55,30,18],[198,55,32,18],[10,80,28,16],[42,80,30,16],[78,80,40,16],[124,80,32,16],[162,80,30,16],[10,100,28,12],[42,100,30,12],[78,100,40,12]],de,(g,v)=>{var k=ma();C(()=>{y(k,"x",v[0]),y(k,"y",v[1]),y(k,"width",v[2]),y(k,"height",v[3])}),c(g,k)});var N=n(p,2);y(N,"x",234),y(N,"y",115),t(s),c(o,s)},x=o=>{var s=ya();c(o,s)};L(i,o=>{e.kind==="stormwater"?o(h):e.kind==="stormwater-dry"?o(d,1):e.kind==="prithvi"?o(_,2):e.kind==="lulc"?o(u,3):e.kind==="buildings"?o(S,4):o(x,-1)})}c(F,M)}var _a=b('<span class="illustrative svelte-1m43x1m" title="Illustrative rendering, not source pixels">illustrative</span>'),pa=b('<span class="svelte-1m43x1m"> </span>'),xa=b('<div class="raster-headline svelte-1m43x1m"><span class="svelte-1m43x1m"> </span> <!></div>'),ba=b('<div class="body-sub svelte-1m43x1m"> </div>'),wa=b('<div class="body body-raster svelte-1m43x1m"><div class="frame svelte-1m43x1m"><!> <!></div> <!> <!></div>');function ka(F,e){X(e,!0);var w=wa(),m=r(w),M=r(m);Pe(M,{get kind(){return e.card.rasterKind}});var i=n(M,2);{var h=x=>{var o=_a();c(x,o)};L(i,x=>{(e.card.illustrative||e.card.tier==="synthetic")&&x(h)})}t(m);var d=n(m,2);{var _=x=>{var o=xa(),s=r(o),l=r(s,!0);t(s);var p=n(s,2);{var N=g=>{var v=pa(),k=r(v);t(v),C(()=>f(k,`· ${e.card.subhead??""}`)),c(g,v)};L(p,g=>{e.card.subhead&&g(N)})}t(o),C(()=>{oe(s,`color: var(--tier-${e.card.tier??""});`),f(l,e.card.headline)}),c(x,o)};L(d,x=>{e.card.headline&&x(_)})}var u=n(d,2);{var S=x=>{var o=ba(),s=r(o,!0);t(o),C(()=>f(s,e.card.sub)),c(x,o)};L(u,x=>{e.card.sub&&x(S)})}t(w),c(F,w),J()}var Sa=b('<span class="illustrative svelte-1td276x" title="Illustrative rendering, not source pixels">illustrative</span>'),Ma=b('<span class="bar-seg svelte-1td276x"></span>'),Ca=b('<li class="svelte-1td276x"><span class="swatch svelte-1td276x"></span> <span class="legend-k svelte-1td276x"> </span> <span class="legend-pct svelte-1td276x"> </span></li>'),Na=b('<div class="bar svelte-1td276x" role="img" aria-label="LULC class mix"></div> <ul class="legend svelte-1td276x"></ul>',1),Ba=b('<div class="body-sub svelte-1td276x"> </div>'),La=b('<div class="body body-lulc svelte-1td276x"><div class="frame svelte-1td276x"><!> <!></div> <!> <!></div>');function Aa(F,e){X(e,!0);let w=q(()=>(e.card.classMix??[]).reduce((o,s)=>o+(s.pct||0),0)||1);var m=La(),M=r(m),i=r(M);{let o=q(()=>e.card.rasterKind??"lulc");Pe(i,{get kind(){return a(o)}})}var h=n(i,2);{var d=o=>{var s=Sa();c(o,s)};L(h,o=>{(e.card.illustrative||e.card.tier==="synthetic")&&o(d)})}t(M);var _=n(M,2);{var u=o=>{var s=Na(),l=ee(s);te(l,21,()=>e.card.classMix,N=>N.k,(N,g)=>{var v=Ma();let k;C(()=>{y(v,"title",`${a(g).k??""}: ${a(g).pct??""}%`),k=oe(v,"",k,{"flex-grow":a(g).pct/a(w),background:a(g).color})}),c(N,v)}),t(l);var p=n(l,2);te(p,21,()=>e.card.classMix,N=>N.k,(N,g)=>{var v=Ca(),k=r(v);let B;var E=n(k,2),D=r(E,!0);t(E);var H=n(E,2),I=r(H);t(H),t(v),C(()=>{B=oe(k,"",B,{background:a(g).color}),f(D,a(g).k),f(I,`${a(g).pct??""}%`)}),c(N,v)}),t(p),c(o,s)};L(_,o=>{var s;(s=e.card.classMix)!=null&&s.length&&o(u)})}var S=n(_,2);{var x=o=>{var s=Ba(),l=r(s,!0);t(s),C(()=>f(l,e.card.sub)),c(o,s)};L(S,o=>{e.card.sub&&o(x)})}t(m),c(F,m),J()}var Fa=b('<span class="reg-label svelte-1iup6im"> </span> <span class="reg-source svelte-1iup6im"> </span>',1),Ra=b('<span class="reg-silent svelte-1iup6im"> </span>'),Ea=b('<li><span class="reg-tag svelte-1iup6im"><!> <span> </span></span> <!></li>'),Pa=b('<div class="body-sub svelte-1iup6im"> </div>'),Ta=b('<div class="body body-register svelte-1iup6im"><ul class="reg-list svelte-1iup6im"></ul> <!></div>');function qa(F,e){X(e,!0);var w=Ta(),m=r(w);te(m,21,()=>e.card.registers??[],de,(h,d)=>{var _=Ea();let u;var S=r(_),x=r(S);ge(x,{get tier(){return a(d).tier},size:9,get color(){return`var(--tier-${a(d).tier??""})`}});var o=n(x,2),s=r(o,!0);t(o),t(S);var l=n(S,2);{var p=g=>{var v=Fa(),k=ee(v),B=r(k,!0);t(k);var E=n(k,2),D=r(E,!0);t(E),C(()=>{y(k,"title",a(d).detail?`${a(d).label} — ${a(d).detail}`:a(d).label),f(B,a(d).label),f(D,a(d).sourceId??"")}),c(g,v)},N=g=>{var v=Ra(),k=r(v,!0);t(v),C(()=>f(k,a(d).note)),c(g,v)};L(l,g=>{a(d).label?g(p):g(N,-1)})}t(_),C(()=>{u=ue(_,1,"reg-row svelte-1iup6im",null,u,{silent:!a(d).label}),y(S,"title",a(d).tier),f(s,a(d).reg)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=Pa(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(F,w),J()}var Ia=b('<div class="cell-aux svelte-1swqabu"> </div>'),Da=b('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),za=b('<div class="cell-aux svelte-1swqabu"> </div>'),Oa=b('<div class="cell svelte-1swqabu"><div class="cell-tier svelte-1swqabu"><!> <span class="cell-label"> </span></div> <div class="cell-value svelte-1swqabu"> </div> <!></div>'),Ha=b('<div class="cmp-delta svelte-1swqabu"> </div>'),ja=b('<div class="body-sub svelte-1swqabu"> </div>'),Ya=b('<div class="body body-comparison svelte-1swqabu"><div class="cmp-grid svelte-1swqabu"><!> <div class="divider svelte-1swqabu" aria-hidden="true">vs</div> <!></div> <!> <!></div>');function Wa(F,e){X(e,!0);var w=Ya(),m=r(w),M=r(m);{var i=o=>{var s=Da(),l=r(s),p=r(l);ge(p,{get tier(){return e.card.left.tier},size:10,get color(){return`var(--tier-${e.card.left.tier??""})`}});var N=n(p,2),g=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var B=n(v,2);{var E=D=>{var H=Ia(),I=r(H,!0);t(H),C(()=>f(I,e.card.left.aux)),c(D,H)};L(B,D=>{e.card.left.aux&&D(E)})}t(s),C(()=>{f(g,e.card.left.label),oe(v,`color: var(--tier-${e.card.left.tier??""});`),f(k,e.card.left.value)}),c(o,s)};L(M,o=>{e.card.left&&o(i)})}var h=n(M,4);{var d=o=>{var s=Oa(),l=r(s),p=r(l);ge(p,{get tier(){return e.card.right.tier},size:10,get color(){return`var(--tier-${e.card.right.tier??""})`}});var N=n(p,2),g=r(N,!0);t(N),t(l);var v=n(l,2),k=r(v,!0);t(v);var B=n(v,2);{var E=D=>{var H=za(),I=r(H,!0);t(H),C(()=>f(I,e.card.right.aux)),c(D,H)};L(B,D=>{e.card.right.aux&&D(E)})}t(s),C(()=>{f(g,e.card.right.label),oe(v,`color: var(--tier-${e.card.right.tier??""});`),f(k,e.card.right.value)}),c(o,s)};L(h,o=>{e.card.right&&o(d)})}t(m);var _=n(m,2);{var u=o=>{var s=Ha(),l=r(s,!0);t(s),C(()=>f(l,e.card.delta)),c(o,s)};L(_,o=>{e.card.delta&&o(u)})}var S=n(_,2);{var x=o=>{var s=ja(),l=r(s,!0);t(s),C(()=>f(l,e.card.sub)),c(o,s)};L(S,o=>{e.card.sub&&o(x)})}t(w),c(F,w),J()}var Ua=b('<div class="meta-row svelte-e40scu"><dt class="svelte-e40scu"> </dt> <dd class="svelte-e40scu"> </dd></div>'),Ga=b('<div class="body-sub svelte-e40scu"> </div>'),Ka=b('<div class="body body-meta svelte-e40scu"><dl class="meta-list svelte-e40scu"></dl> <!></div>');function Qa(F,e){X(e,!0);var w=Ka(),m=r(w);te(m,21,()=>e.card.metaRows??[],de,(h,d)=>{var _=Ua(),u=r(_),S=r(u,!0);t(u);var x=n(u,2),o=r(x,!0);t(x),t(_),C(()=>{f(S,a(d).k),f(o,a(d).v)}),c(h,_)}),t(m);var M=n(m,2);{var i=h=>{var d=Ga(),_=r(d,!0);t(d),C(()=>f(_,e.card.sub)),c(h,d)};L(M,h=>{e.card.sub&&h(i)})}t(w),c(F,w),J()}var Va=b('<div class="unknown svelte-1x6xqhh"> </div>');function Za(F,e){X(e,!0);var w=xe(),m=ee(w);{var M=g=>{Ft(g,{get card(){return e.card}})},i=g=>{It(g,{get card(){return e.card}})},h=g=>{Ht(g,{get card(){return e.card}})},d=g=>{Qt(g,{get card(){return e.card}})},_=g=>{Ee(g,{get card(){return e.card}})},u=g=>{na(g,{get card(){return e.card}})},S=g=>{va(g,{get card(){return e.card}})},x=g=>{ka(g,{get card(){return e.card}})},o=g=>{Aa(g,{get card(){return e.card}})},s=g=>{qa(g,{get card(){return e.card}})},l=g=>{Wa(g,{get card(){return e.card}})},p=g=>{Qa(g,{get card(){return e.card}})},N=g=>{var v=Va(),k=r(v);t(v),C(()=>f(k,`unknown variant: ${e.card.variant??""}`)),c(g,v)};L(m,g=>{e.card.variant==="headline"?g(M):e.card.variant==="tabular"?g(i,1):e.card.variant==="scalars"?g(h,2):e.card.variant==="spark"||e.card.variant==="histogram"?g(d,3):e.card.variant==="timeseries"?g(_,4):e.card.variant==="timeseries-ft"?g(u,5):e.card.variant==="forecast"?g(S,6):e.card.variant==="raster"||e.card.variant==="raster-pred"?g(x,7):e.card.variant==="lulc"?g(o,8):e.card.variant==="register"?g(s,9):e.card.variant==="comparison"?g(l,10):e.card.variant==="meta"?g(p,11):g(N,-1)})}c(F,w),J()}var Xa=b('<button type="button" class="fc-foot-cite svelte-1nuvnzu"><span class="fc-foot-docid svelte-1nuvnzu"> </span> <span class="fc-foot-arrow svelte-1nuvnzu" aria-hidden="true">→</span></button>'),Ja=b('<span class="fc-foot-docid fc-foot-docid-mute svelte-1nuvnzu"> </span>'),$a=b('<header class="fc-head svelte-1nuvnzu"><div class="fc-head-source svelte-1nuvnzu"><!> <span class="fc-head-source-label svelte-1nuvnzu"> </span></div> <span class="fc-head-vintage svelte-1nuvnzu"> </span></header> <h4 class="fc-title svelte-1nuvnzu"> </h4> <!> <footer class="fc-foot svelte-1nuvnzu"><!> <span><!> <span> </span></span></footer>',1);function Te(F,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"linkedKey",3,null),M=q(()=>m()!=null&&e.card.mapLayer!=null&&e.card.mapLayer===m()),i=q(()=>Fe[e.card.tier].short),h=q(()=>e.card.mapLayer!=null);function d(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,e.card.mapLayer))}function _(){var s;e.card.mapLayer&&((s=e.onLink)==null||s.call(e,null))}function u(s){var l;s.stopPropagation(),e.card.citeId&&((l=e.onCite)==null||l.call(e,e.card.citeId))}function S(s){var l;a(h)&&(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),(l=e.onLink)==null||l.call(e,e.card.mapLayer??null))}var x=xe(),o=ee(x);st(o,()=>a(h)?"button":"article",!1,(s,l)=>{Xe(s,()=>({type:a(h)?"button":void 0,role:a(h)?"button":"article",class:`fc fc-${e.card.variant??""} fc-tier-${e.card.tier??""}`,"aria-labelledby":`fc-${e.card.id}-title`,"aria-label":`${Fe[e.card.tier].label} card · ${e.card.title} · ${e.card.source}`,onpointerenter:d,onpointerleave:_,onfocus:d,onblur:_,onkeydown:S,[Je]:{"is-compact":w()==="compact","is-linked":a(M),"is-interactive":a(h),"has-illustrative":e.card.illustrative||e.card.tier==="synthetic"||e.card.variant==="comparison"}}),void 0,void 0,void 0,"svelte-1nuvnzu");var p=$a(),N=ee(p),g=r(N),v=r(g);ge(v,{get tier(){return e.card.tier},size:11,get color(){return`var(--tier-${e.card.tier??""})`}});var k=n(v,2),B=r(k,!0);t(k),t(g);var E=n(g,2),D=r(E);t(E),t(N);var H=n(N,2),I=r(H,!0);t(H);var z=n(H,2);Za(z,{get card(){return e.card}});var O=n(z,2),W=r(O);{var T=ae=>{var Q=Xa(),Z=r(Q),le=r(Z,!0);t(Z),re(2),t(Q),C(()=>{y(Q,"title",`Open ${e.card.docId} in citation drawer`),f(le,e.card.docId)}),Ne("click",Q,u),c(ae,Q)},P=ae=>{var Q=Ja(),Z=r(Q,!0);t(Q),C(()=>f(Z,e.card.docId)),c(ae,Q)};L(W,ae=>{e.card.citeId?ae(T):ae(P,-1)})}var A=n(W,2),R=r(A);ge(R,{get tier(){return e.card.tier},size:9,get color(){return`var(--tier-${e.card.tier??""})`}});var Y=n(R,2),K=r(Y,!0);t(Y),t(A),t(O),C(()=>{y(k,"title",e.card.agency),f(B,e.card.source),f(D,`v. ${e.card.vintage??""}`),y(H,"id",`fc-${e.card.id}-title`),f(I,e.card.title),ue(A,1,`fc-tier-badge fc-tier-badge-${e.card.tier??""}`,"svelte-1nuvnzu"),y(A,"aria-label",`epistemic tier ${a(i)}`),f(K,a(i))}),c(l,p)}),c(F,x),J()}Ce(["click"]);var er=b('<span class="sep svelte-1qqbvs2">·</span> <span class="silent svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> silent</span>',1),tr=b('<span class="sep svelte-1qqbvs2">·</span> <span class="warn svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> warn</span>',1),ar=b('<span class="sep svelte-1qqbvs2">·</span> <span class="err svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> errored</span>',1),rr=b('<span class="sep svelte-1qqbvs2">·</span> <span class="notinvoked svelte-1qqbvs2"><strong class="svelte-1qqbvs2"> </strong> not invoked</span>',1),sr=b('<span class="tally svelte-1qqbvs2"><span class="cards"> </span> <span class="sep svelte-1qqbvs2">·</span> <span class="fired"><strong class="svelte-1qqbvs2"> </strong> fired</span> <!> <!> <!> <!> <span class="sep svelte-1qqbvs2">·</span> <span class="ms"><strong class="svelte-1qqbvs2"> </strong></span></span>');function ir(F,e){X(e,!0);function w(T){return T.flatMap(P=>P.children?[P,...w(P.children)]:[P])}let m=q(()=>w(e.members)),M=q(()=>a(m).filter(T=>T.status==="fired"||T.status==="warned").length),i=q(()=>a(m).filter(T=>T.status==="silent_by_design").length),h=q(()=>a(m).filter(T=>T.status==="warned").length),d=q(()=>a(m).filter(T=>T.status==="errored").length),_=q(()=>a(m).filter(T=>T.status==="not_invoked").length),u=q(()=>e.members.reduce((T,P)=>Math.max(T,P.ms??0),0));function S(T){return T===0?"—":T<1e3?`${T}ms`:`${(T/1e3).toFixed(1)}s`}var x=sr(),o=r(x),s=r(o);t(o);var l=n(o,4),p=r(l),N=r(p,!0);t(p),re(),t(l);var g=n(l,2);{var v=T=>{var P=er(),A=n(ee(P),2),R=r(A),Y=r(R,!0);t(R),re(),t(A),C(()=>f(Y,a(i))),c(T,P)};L(g,T=>{a(i)>0&&T(v)})}var k=n(g,2);{var B=T=>{var P=tr(),A=n(ee(P),2),R=r(A),Y=r(R,!0);t(R),re(),t(A),C(()=>f(Y,a(h))),c(T,P)};L(k,T=>{a(h)>0&&T(B)})}var E=n(k,2);{var D=T=>{var P=ar(),A=n(ee(P),2),R=r(A),Y=r(R,!0);t(R),re(),t(A),C(()=>f(Y,a(d))),c(T,P)};L(E,T=>{a(d)>0&&T(D)})}var H=n(E,2);{var I=T=>{var P=rr(),A=n(ee(P),2),R=r(A),Y=r(R,!0);t(R),re(),t(A),C(()=>f(Y,a(_))),c(T,P)};L(H,T=>{a(_)>0&&T(I)})}var z=n(H,4),O=r(z),W=r(O,!0);t(O),t(z),t(x),C(T=>{f(s,`${e.cardCount??""} card${e.cardCount===1?"":"s"}`),f(N,a(M)),f(W,T)},[()=>S(a(u))]),c(F,x),J()}var nr=b('<span class="prov-tier svelte-qakefz"><!></span>'),lr=b('<span class="prov-note svelte-qakefz"> </span>'),or=b('<span class="prov-ms svelte-qakefz"> </span>'),dr=b('<li class="prov-children svelte-qakefz"><!></li>'),vr=b('<li><span class="prov-pip svelte-qakefz" aria-hidden="true"> </span> <span class="prov-id svelte-qakefz"> </span> <!> <span class="prov-name svelte-qakefz"> </span> <!> <!></li> <!>',1),cr=b('<ul class="prov-tree svelte-qakefz"></ul>');function qe(F,e){X(e,!0);let w=ne(e,"depth",3,0);function m(h){return{fired:"●",silent_by_design:"○",warned:"▲",errored:"■",not_invoked:"□"}[h]}function M(h){return h.status==="warned"?"#B7791F":h.status==="errored"?"#B91C1C":h.status==="silent_by_design"||h.status==="not_invoked"?"var(--ink-tertiary)":h.tier?`var(--tier-${h.tier})`:"var(--ink)"}var i=cr();te(i,21,()=>e.members,h=>h.id,(h,d)=>{var _=vr(),u=ee(_),S=r(u),x=r(S,!0);t(S);var o=n(S,2),s=r(o,!0);t(o);var l=n(o,2);{var p=I=>{var z=nr(),O=r(z);{let W=q(()=>`var(--tier-${a(d).tier})`);ge(O,{get tier(){return a(d).tier},size:9,get color(){return a(W)}})}t(z),c(I,z)};L(l,I=>{a(d).tier&&I(p)})}var N=n(l,2),g=r(N,!0);t(N);var v=n(N,2);{var k=I=>{var z=lr(),O=r(z);t(z),C(()=>f(O,`— ${a(d).note??""}`)),c(I,z)};L(v,I=>{a(d).note&&I(k)})}var B=n(v,2);{var E=I=>{var z=or(),O=r(z,!0);t(z),C(W=>f(O,W),[()=>a(d).ms<1e3?`${a(d).ms}ms`:`${(a(d).ms/1e3).toFixed(1)}s`]),c(I,z)};L(B,I=>{a(d).ms!=null&&I(E)})}t(u);var D=n(u,2);{var H=I=>{var z=dr(),O=r(z);{let W=q(()=>w()+1);qe(O,{get members(){return a(d).children},get depth(){return a(W)}})}t(z),c(I,z)};L(D,I=>{var z;(z=a(d).children)!=null&&z.length&&I(H)})}C((I,z)=>{ue(u,1,`prov-row prov-status-${a(d).status??""}`,"svelte-qakefz"),oe(S,`color: ${I??""};`),f(x,z),f(s,a(d).id),f(g,a(d).name)},[()=>M(a(d)),()=>m(a(d).status)]),c(h,_)}),t(i),C(()=>oe(i,`--depth: ${w()??""};`)),c(F,i),J()}var ur=b('<div class="silent svelte-16iv0n8"><span class="silent-tag svelte-16iv0n8">silent</span> <p class="silent-prose svelte-16iv0n8"><!></p></div>'),gr=b("<div></div>"),hr=b('<div class="prov-body svelte-16iv0n8"><!></div>'),mr=b('<section><header class="region-head svelte-16iv0n8"><div class="region-head-left svelte-16iv0n8"><span class="region-num svelte-16iv0n8"> </span> <h3 class="region-name svelte-16iv0n8"> </h3> <span class="region-role svelte-16iv0n8"> </span> <span class="region-tag svelte-16iv0n8"> </span></div> <!></header> <!> <div class="prov svelte-16iv0n8"><button type="button" class="prov-toggle svelte-16iv0n8"><span class="prov-caret svelte-16iv0n8" aria-hidden="true"> </span> <span class="prov-label"> </span> <span class="prov-meta svelte-16iv0n8"> </span></button> <!></div></section>');function fr(F,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"provenanceMode",3,"smart"),M=ne(e,"linkedKey",3,null),i=q(()=>Me[e.stone]),h=q(()=>`${Be.indexOf(e.stone)+1}`.padStart(2,"0")),d=q(()=>e.stone==="capstone");function _(G){return G.flatMap(U=>U.children?[U,..._(U.children)]:[U])}let u=q(()=>_(e.trace.members)),S=q(()=>a(u).length),x=q(()=>a(u).some(G=>G.status==="warned"||G.status==="errored"||G.status==="not_invoked")),o=q(()=>m()==="all-expanded"?!0:m()==="all-collapsed"?!1:a(x)),s=Se(null),l=q(()=>a(s)??a(o));ie(()=>{m(),pe(s,null)});var p=mr(),N=r(p),g=r(N),v=r(g),k=r(v,!0);t(v);var B=n(v,2),E=r(B,!0);t(B);var D=n(B,2),H=r(D);t(D);var I=n(D,2),z=r(I,!0);t(I),t(g);var O=n(g,2);ir(O,{get cardCount(){return e.cards.length},get members(){return e.trace.members}}),t(N);var W=n(N,2);{var T=G=>{var U=ur(),$=n(r(U),2),ve=r($);{var fe=he=>{var se=_e("No projection cards landed for this query. Atomic functions still ran (see provenance) and returned silence rather than confabulation.");c(he,se)},be=he=>{var se=_e("No cards for this Stone on this query.");c(he,se)};L(ve,he=>{e.stone==="lodestone"?he(fe):he(be,-1)})}t($),t(U),c(G,U)},P=G=>{var U=gr();let $;te(U,21,()=>e.cards,ve=>ve.id,(ve,fe)=>{Te(ve,{get card(){return a(fe)},get density(){return w()},get linkedKey(){return M()},get onCite(){return e.onCite},get onLink(){return e.onLink}})}),t(U),C(()=>$=ue(U,1,"rail svelte-16iv0n8",null,$,{"rail-capstone":a(d)})),c(G,U)};L(W,G=>{e.cards.length===0?G(T):G(P,-1)})}var A=n(W,2),R=r(A),Y=r(R),K=r(Y,!0);t(Y);var ae=n(Y,2),Q=r(ae);t(ae);var Z=n(ae,2),le=r(Z);t(Z),t(R);var j=n(R,2);{var V=G=>{var U=hr(),$=r(U);qe($,{get members(){return e.trace.members}}),t(U),C(()=>y(U,"id",`prov-body-${e.stone}`)),c(G,U)};L(j,G=>{a(l)&&G(V)})}t(A),t(p),C(()=>{ue(p,1,`region region-${e.stone??""}`,"svelte-16iv0n8"),y(p,"aria-labelledby",`region-h-${e.stone}`),y(p,"data-stone",e.stone),f(k,a(h)),y(B,"id",`region-h-${e.stone}`),f(E,a(i).name),f(H,`· ${a(i).role??""}`),f(z,a(i).tag),y(R,"aria-expanded",a(l)),y(R,"aria-controls",`prov-body-${e.stone}`),f(K,a(l)?"▾":"▸"),f(Q,`${a(l)?"Hide":"Show"} provenance`),f(le,`· ${a(S)??""} function${a(S)===1?"":"s"}`)}),Ne("click",R,()=>pe(s,!a(l))),c(F,p),J()}Ce(["click"]);var yr=b('<section class="region region-grammar svelte-gwg123" aria-label="Card grammar reference"><header class="region-head svelte-gwg123"><div class="region-head-left svelte-gwg123"><span class="region-num svelte-gwg123">SPEC</span> <h3 class="region-name svelte-gwg123">Card grammar</h3> <span class="region-role svelte-gwg123">· every body variant in the system</span> <span class="region-tag svelte-gwg123">stubs, not findings</span></div> <span class="grammar-count svelte-gwg123"> </span></header> <div class="rail svelte-gwg123"></div></section>');function _r(F,e){let w=ne(e,"density",3,"comfortable");const m=[{id:"grm-headline",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"spec",vintage:"spec",title:"Single big number, scenario-tagged",headline:"Zone AE",subhead:"preliminary FIRM, panel ID",sub:"Use when the answer is one categorical state.",docId:"DS-HEADLINE"},{id:"grm-tabular",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"spec",vintage:"spec",title:"Small table of observations",columns:["id","value","dist."],rows:[["ROW-001","1.2 m","0.18 mi"],["ROW-002","0.9 m","0.32 mi"],["ROW-003","0.7 m","0.41 mi"]],sub:"Use when 3–8 records each carry the same fields.",docId:"DS-TABULAR"},{id:"grm-scalars",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS",agency:"spec",vintage:"spec",title:"Trio of scalar readings",scalars:[{value:"0.02 in",label:"precip · 24h"},{value:"11 mph",label:"wind"},{value:"63°F",label:"temp"}],sub:"Use for current-state dashboards.",docId:"DS-SCALARS"},{id:"grm-spark",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"spec",vintage:"spec",title:"Sparkline of recent events",headline:"n events",subhead:"window · peak",spark:[1,2,4,3,7,12,8,5,3,2,4,9,6],docId:"DS-SPARK"},{id:"grm-histogram",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"spec",vintage:"spec",title:"Histogram of binned counts",headline:"n calls",subhead:"window · seasonal note",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],docId:"DS-HIST"},{id:"grm-timeseries",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM",agency:"spec",vintage:"spec",title:"Forecast curve with horizon",headline:"+0.41 m peak",subhead:"+38h · 90% CI",timeseries:{hours:96,peak:{x:38,y:41},peakLabel:"+0.41 m"},spatialNote:"regional",sub:"Spatial-index callout when station ≠ point-of-query.",docId:"DS-TS"},{id:"grm-forecast",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"spec",vintage:"spec",title:"Long-horizon scenario projections",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2100,low:38,mid:71,high:114}],sub:"Use for decadal+ uncertainty cones.",docId:"DS-FCST"},{id:"grm-raster",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"spec",vintage:"spec",title:"Raster snapshot, mapped layer",rasterKind:"stormwater",headline:"ponding",subhead:"scenario · pixel summary",sub:"Use for any 2D model output.",docId:"DS-RASTER"},{id:"grm-rasterpred",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC",agency:"spec",vintage:"spec",title:"Raster prediction, illustrative",rasterKind:"prithvi",headline:"n% flooded",subhead:"model · scene id",illustrative:!0,sub:"Same chrome as raster + illustrative tag.",docId:"DS-RASTERPRED"},{id:"grm-register",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"spec",vintage:"spec",title:"Composite register list",registers:[{reg:"MTA",tier:"empirical",label:"Station entrance",detail:"0.18 mi · 5",sourceId:"MTA-X",note:null},{reg:"NYCHA",tier:"empirical",label:"Development",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-Y",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,note:"no acute-care hospital within 1.0 mi"}],sub:"Use when many specialists join into one Stone.",docId:"DS-REGISTER"},{id:"grm-comparison",stone:"keystone",tier:"synthetic",variant:"comparison",source:"EMP × SYN",agency:"spec",vintage:"spec",title:"Documented vs. interpreted",left:{tier:"empirical",label:"documented",value:"31.4%",aux:"n polygons"},right:{tier:"synthetic",label:"interpreted",value:"29.8%",aux:"n polygons"},delta:"Δ = −1.6 pp · agreement strong",sub:"Use to surface model–ground-truth deltas.",docId:"DS-CMP"},{id:"grm-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"spec",vintage:"spec",title:"Capstone reconciliation",metaRows:[{k:"claims",v:"12 / 12 grounded"},{k:"tier mix",v:"EMP 5 · MOD 4 · PRX 2 · SYN 1"},{k:"tier-1 freshness",v:"median 38 d"},{k:"warnings",v:"0"}],sub:"Use to expose the synthesis layer's audit.",docId:"DS-META"}];var M=yr(),i=r(M),h=n(r(i),2),d=r(h);t(h),t(i);var _=n(i,2);te(_,21,()=>m,u=>u.id,(u,S)=>{Te(u,{get card(){return a(S)},get density(){return w()}})}),t(_),t(M),C(()=>f(d,`${m.length??""} variants`)),c(F,M)}var pr=b('<section class="findings svelte-ci42t5" aria-label="Findings, grouped by Stone"><header class="findings-head svelte-ci42t5"><h2 class="findings-h2 svelte-ci42t5">Findings · grouped by Stone</h2> <span class="findings-tagline svelte-ci42t5">cards = what each Stone found · provenance collapses below</span></header> <!> <!> <!></section>');function Er(F,e){X(e,!0);let w=ne(e,"density",3,"comfortable"),m=ne(e,"provenanceMode",3,"smart"),M=ne(e,"showGrammar",3,!1),i=ne(e,"linkedKey",3,null),h=q(()=>{const s={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};for(const l of e.data.cards)s[l.stone].push(l);return s}),d=q(()=>{const s={cornerstone:{key:"cornerstone",members:[]},keystone:{key:"keystone",members:[]},touchstone:{key:"touchstone",members:[]},lodestone:{key:"lodestone",members:[]},capstone:{key:"capstone",members:[]}};for(const l of e.data.stones)s[l.key]=l;return s});var _=pr(),u=n(r(_),2);Nt(u,{get cards(){return e.data.cards},get stones(){return e.data.stones},get wallSeconds(){return e.data.wallSeconds},get cacheHit(){return e.data.cacheHit}});var S=n(u,2);te(S,16,()=>Be,s=>s,(s,l)=>{fr(s,{get stone(){return l},get cards(){return a(h)[l]},get trace(){return a(d)[l]},get density(){return w()},get provenanceMode(){return m()},get linkedKey(){return i()},get onCite(){return e.onCite},get onLink(){return e.onLink}})});var x=n(S,2);{var o=s=>{_r(s,{get density(){return w()}})};L(x,s=>{M()&&s(o)})}t(_),c(F,_),J()}const xr={cornerstone:[{id:"CORN-001",name:"sandy_inundation.lookup",stepNames:["sandy","sandy_inundation","sandy_nta"],tier:"empirical",skipReason:"Sandy 2012 inundation: query outside NYC bounds"},{id:"CORN-002",name:"dep_stormwater.lookup",stepNames:["dep","dep_stormwater","dep_extreme_2080_nta","dep_moderate_2050_nta","dep_moderate_current_nta"],tier:"modeled",skipReason:"NYC DEP stormwater scenarios: query outside NYC bounds"},{id:"CORN-003",name:"usgs_hwm.spatial_join",stepNames:["ida_hwm","ida_hwm_2021"],tier:"empirical",skipReason:"USGS Ida HWMs: no marks within 800 m of address"},{id:"CORN-004",name:"prithvi_water.lookup",stepNames:["prithvi","prithvi_eo_v2"],tier:"modeled",skipReason:"Prithvi-EO Ida polygons: no polygons within 500 m"},{id:"CORN-005",name:"microtopo.dem_hand_twi",stepNames:["microtopo","microtopo_lidar","microtopo_nta"],tier:"proxy",skipReason:"USGS 3DEP DEM: query outside NYC raster coverage"}],keystone:[{id:"KEY-001",name:"mta_entrance_exposure",stepNames:["mta_entrances","mta_entrance_exposure"],tier:"empirical",skipReason:"no entrances within radius"},{id:"KEY-002",name:"nycha.development_join",stepNames:["nycha","nycha_development_exposure"],tier:"empirical",skipReason:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe.school_join",stepNames:["doe_schools","doe_school_exposure"],tier:"empirical",skipReason:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh.facility_join",stepNames:["doh_hospitals","doh_hospital_exposure"],tier:"empirical",skipReason:"no acute-care hospitals within 1.0 mi"},{id:"KEY-005",name:"pluto.lot_lookup",stepNames:["pluto_lookup"],tier:"empirical",skipReason:"PLUTO join skipped: queried address not in NYC PLUTO dataset"},{id:"KEY-006",name:"terramind.buildings",stepNames:["terramind_buildings","terramind_synthesis"],tier:"modeled",skipReason:"TerraMind Buildings: no eo_chip available for this address (recent <30% cloud Sentinel-2 missing) or no high-confidence prediction"}],touchstone:[{id:"TCH-001",name:"floodnet.history",stepNames:["floodnet"],tier:"empirical",skipReason:"FloodNet sensor: no deployments within 600 m"},{id:"TCH-002",name:"nyc311.flood_complaints",stepNames:["nyc311","nyc311_nta"],tier:"proxy",skipReason:"NYC 311: no flood-relevant complaints within 200 m"},{id:"TCH-003",name:"nws_obs.metar",stepNames:["nws_obs"],tier:"empirical",skipReason:"NWS hourly METAR: nearest ASOS reports no precipitation"},{id:"TCH-004",name:"noaa_coops.recent",stepNames:["noaa_tides"],tier:"empirical",skipReason:"NOAA tide gauge: nearest station >25 km from address"},{id:"TCH-005",name:"prithvi_nyc_pluvial",stepNames:["prithvi_live","prithvi_eo_live"],tier:"modeled",skipReason:"Prithvi-NYC-Pluvial: no <30% cloud Sentinel-2 chip available in the last 120 d for this address"},{id:"TCH-006",name:"terramind.lulc",stepNames:["terramind_lulc"],tier:"synthetic",skipReason:"TerraMind LULC: eo_chip fetch returned no Sentinel-2 tile for this address"}],lodestone:[{id:"LOD-001",name:"nws_alerts.flood_relevant",stepNames:["nws_alerts"],tier:"modeled",skipReason:"NWS public alerts: no active flood-relevant alerts at this address"},{id:"LOD-002",name:"ttm_battery_surge.zero_shot",stepNames:["ttm_forecast"],tier:"modeled",skipReason:"Granite TTM r2 zero-shot: forecast not interesting (peak |residual| < 0.3 ft)"},{id:"LOD-003",name:"ttm_battery_surge.fine_tune",stepNames:["ttm_battery_surge"],tier:"modeled",skipReason:"Granite TTM Battery fine-tune: forecast not interesting (peak |residual| < 0.3 m)"},{id:"LOD-004",name:"ttm_311_forecast",stepNames:["ttm_311_forecast"],tier:"modeled",skipReason:"NYC 311 weekly forecast: no per-address history to extrapolate"},{id:"LOD-005",name:"floodnet_forecast",stepNames:["floodnet_forecast"],tier:"modeled",skipReason:"FloodNet sensor recurrence: sensor has < silent-floor historical events; forecast omitted"},{id:"LOD-006",name:"npcc4.slr_projection",stepNames:["npcc4_projection"],tier:"modeled",skipReason:"NPCC4 SLR projection: not yet wired into FSM (static reference card on hold)"}],capstone:[{id:"CAP-001",name:"rag.granite_embedding",stepNames:["rag_granite_embedding"],tier:"proxy",skipReason:"Granite Embedding RAG: no policy retrieval (out-of-NYC scope)"},{id:"CAP-002",name:"gliner.typed_extraction",stepNames:["gliner_extract"],tier:"proxy",skipReason:"GLiNER typed extraction: no RAG hits to extract over"},{id:"CAP-003",name:"granite41.compose_briefing",stepNames:["reconcile_granite41","mellea_reconcile_address","reconcile_neighborhood","reconcile_development","reconcile_live_now"],tier:"modeled",skipReason:"Reconciler did not run (no grounded data available)"},{id:"CAP-004",name:"mellea.grounding_check",stepNames:["mellea_grounding"],tier:"modeled",skipReason:"Mellea grounding-check: rolled into reconcile step on this run"}]};function Pr(F,e){const w=xr[F]??[],m=new Map;for(const h of e)m.set(h.name,h);const M=[],i=new Set;for(const h of w){let d;for(const _ of h.stepNames){const u=m.get(_);if(u){d=u,i.add(_);break}}d?M.push({...d,id:h.id,name:h.name,tier:d.tier??h.tier??null}):M.push({id:h.id,name:h.name,status:"not_invoked",tier:h.tier??null,note:h.skipReason})}for(const h of e)i.has(h.name)||M.push(h);return M}export{Ar as C,Er as F,Rr as M,Fr as R,Pr as f};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
web/sveltekit/build/_app/immutable/entry/{app.CoGsDDek.js → app.BhktVbRh.js} RENAMED
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.h-vIKZsr.js","../chunks/CWw6qgC_.js","../chunks/BTUA7_xE.js","../chunks/DxQlA7U2.js","../chunks/Bd-v_9Ud.js","../chunks/CW0zSL4D.js","../chunks/nUW4eUox.js","../chunks/BOtZ6QcV.js","../chunks/DCD6_LXk.js","../chunks/B0XoTt7U.js","../assets/RipMark.ClxF_PAC.css","../chunks/DixtWtwq.js","../assets/0.DiQNUxm-.css","../nodes/1.DtMBYvn3.js","../nodes/2.BWTkJ8km.js","../chunks/cDW0xQNP.js","../chunks/25_y8TFd.js","../chunks/CXQd8Y6F.js","../chunks/CAMdvC-O.js","../assets/2.BD53GLFY.css","../nodes/3.Bi9lYhtb.js","../chunks/BatqQaKj.js","../assets/Briefing.Dmn9LgiV.css","../assets/3.BZfqQRM0.css","../nodes/4.Cjv2wdud.js","../chunks/CFg_rPYf.js","../assets/stoneRegistry.bHiraU77.css","../assets/4.C9CQZyPb.css","../nodes/5.6DbTPabk.js"])))=>i.map(i=>d[i]);
2
- var S=e=>{throw TypeError(e)};var M=(e,t,r)=>t.has(e)||S("Cannot "+r);var c=(e,t,r)=>(M(e,t,"read from private field"),r?r.call(e):t.get(e)),p=(e,t,r)=>t.has(e)?S("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),I=(e,t,r,n)=>(M(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);import{b as L,_ as b}from"../chunks/CXQd8Y6F.js";import{h as N,n as W,d as X,a3 as Z,q as $,v as tt,i as et,e as B,an as rt,j as at,a5 as A,ah as st,o as l,ao as nt,ap as ot,L as it,p as ct,aq as ut,am as dt,ai as mt,ar as _t,f as x,s as lt,a as ft,a4 as j,c as ht,r as vt,t as gt,al as k}from"../chunks/BTUA7_xE.js";import{h as yt,m as Et,u as bt,a as R,c as w,f as F,t as Rt,s as Pt}from"../chunks/CWw6qgC_.js";import{B as Ot,i as D}from"../chunks/Bd-v_9Ud.js";import{p as q}from"../chunks/CW0zSL4D.js";function V(e,t,r){var n;N&&(n=at,W());var o=new Ot(e);X(()=>{var i=t()??null;if(N){var a=$(n),s=a===rt,_=i!==null;if(s!==_){var P=tt();et(P),o.anchor=P,B(!1),o.ensure(i,i&&(y=>r(y,i))),B(!0);return}}o.ensure(i,i&&(y=>r(y,i)))},Z)}function Tt(e){return class extends xt{constructor(t){super({component:e,...t})}}}var f,d;class xt{constructor(t){p(this,f);p(this,d);var i;var r=new Map,n=(a,s)=>{var _=it(s,!1,!1);return r.set(a,_),_};const o=new Proxy({...t.props||{},$$events:{}},{get(a,s){return l(r.get(s)??n(s,Reflect.get(a,s)))},has(a,s){return s===st?!0:(l(r.get(s)??n(s,Reflect.get(a,s))),Reflect.has(a,s))},set(a,s,_){return A(r.get(s)??n(s,_),_),Reflect.set(a,s,_)}});I(this,d,(t.hydrate?yt:Et)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((i=t==null?void 0:t.props)!=null&&i.$$host)||t.sync===!1)&&nt(),I(this,f,o.$$events);for(const a of Object.keys(c(this,d)))a==="$set"||a==="$destroy"||a==="$on"||ot(this,a,{get(){return c(this,d)[a]},set(s){c(this,d)[a]=s},enumerable:!0});c(this,d).$set=a=>{Object.assign(o,a)},c(this,d).$destroy=()=>{bt(c(this,d))}}$set(t){c(this,d).$set(t)}$on(t,r){c(this,f)[t]=c(this,f)[t]||[];const n=(...o)=>r.call(this,...o);return c(this,f)[t].push(n),()=>{c(this,f)[t]=c(this,f)[t].filter(o=>o!==n)}}$destroy(){c(this,d).$destroy()}}f=new WeakMap,d=new WeakMap;const St={};var At=F('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),pt=F("<!> <!>",1);function It(e,t){ct(t,!0);let r=q(t,"components",23,()=>[]),n=q(t,"data_0",3,null),o=q(t,"data_1",3,null);ut(()=>t.stores.page.set(t.page)),dt(()=>{t.stores,t.page,t.constructors,r(),t.form,n(),o(),t.stores.page.notify()});let i=j(!1),a=j(!1),s=j(null);mt(()=>{const u=t.stores.page.subscribe(()=>{l(i)&&(A(a,!0),_t().then(()=>{A(s,document.title||"untitled page",!0)}))});return A(i,!0),u});const _=k(()=>t.constructors[1]);var P=pt(),y=x(P);{var G=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(m,jt)=>{var C=w(),K=x(C);V(K,()=>l(_),(Q,U)=>{L(U(Q,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),T=>r()[1]=T,()=>{var T;return(T=r())==null?void 0:T[1]})}),R(m,C)},$$slots:{default:!0}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)},H=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)};D(y,u=>{t.constructors[1]?u(G):u(H,-1)})}var z=lt(y,2);{var J=u=>{var h=At(),v=ht(h);{var O=g=>{var E=Rt();gt(()=>Pt(E,l(s))),R(g,E)};D(v,g=>{l(a)&&g(O)})}vt(h),R(u,h)};D(z,u=>{l(i)&&u(J)})}R(e,P),ft()}const Mt=Tt(It),Nt=[()=>b(()=>import("../nodes/0.h-vIKZsr.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]),import.meta.url),()=>b(()=>import("../nodes/1.DtMBYvn3.js"),__vite__mapDeps([13,1,2,6,7]),import.meta.url),()=>b(()=>import("../nodes/2.BWTkJ8km.js"),__vite__mapDeps([14,1,2,11,15,8,9,5,10,16,7,17,18,19]),import.meta.url),()=>b(()=>import("../nodes/3.Bi9lYhtb.js"),__vite__mapDeps([20,1,2,4,16,15,6,7,21,5,3,9,22,23]),import.meta.url),()=>b(()=>import("../nodes/4.Cjv2wdud.js"),__vite__mapDeps([24,1,2,4,6,7,21,16,5,3,9,22,25,17,18,26,11,27]),import.meta.url),()=>b(()=>import("../nodes/5.6DbTPabk.js"),__vite__mapDeps([28,1,2,21,4,16,5,3,9,22,25,17,18,26]),import.meta.url)],Bt=[],Ft={"/":[2],"/print/[queryId]":[3],"/q/sample":[5],"/q/[queryId]":[4]},Y={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},Lt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.decode])),Yt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.encode])),Gt=!1,Ht=(e,t)=>Lt[e](t);export{Ht as decode,Lt as decoders,Ft as dictionary,Yt as encoders,Gt as hash,Y as hooks,St as matchers,Nt as nodes,Mt as root,Bt as server_loads};
 
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Dv1TzIuH.js","../chunks/CWw6qgC_.js","../chunks/BTUA7_xE.js","../chunks/DxQlA7U2.js","../chunks/Bd-v_9Ud.js","../chunks/CW0zSL4D.js","../chunks/B3Pg95Il.js","../chunks/CJeJVIjP.js","../chunks/DCD6_LXk.js","../chunks/B0XoTt7U.js","../assets/RipMark.ClxF_PAC.css","../chunks/DixtWtwq.js","../assets/0.DiQNUxm-.css","../nodes/1.BmImNqbK.js","../nodes/2.CLD-rsu4.js","../chunks/cDW0xQNP.js","../chunks/25_y8TFd.js","../chunks/CXQd8Y6F.js","../chunks/D907np-5.js","../assets/2.BD53GLFY.css","../nodes/3.0RkbXXD4.js","../chunks/BatqQaKj.js","../assets/Briefing.Dmn9LgiV.css","../assets/3.BZfqQRM0.css","../nodes/4.DLn0bV4P.js","../chunks/FjZhY28w.js","../assets/stoneRegistry.DOPO2SDD.css","../assets/4.C9CQZyPb.css","../nodes/5.C0xKDhXA.js"])))=>i.map(i=>d[i]);
2
+ var S=e=>{throw TypeError(e)};var M=(e,t,r)=>t.has(e)||S("Cannot "+r);var c=(e,t,r)=>(M(e,t,"read from private field"),r?r.call(e):t.get(e)),p=(e,t,r)=>t.has(e)?S("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),I=(e,t,r,n)=>(M(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);import{b as L,_ as b}from"../chunks/CXQd8Y6F.js";import{h as N,n as W,d as X,a3 as Z,q as $,v as tt,i as et,e as B,an as rt,j as at,a5 as A,ah as st,o as l,ao as nt,ap as ot,L as it,p as ct,aq as ut,am as dt,ai as mt,ar as _t,f as x,s as lt,a as ft,a4 as j,c as ht,r as vt,t as gt,al as k}from"../chunks/BTUA7_xE.js";import{h as yt,m as Et,u as bt,a as R,c as w,f as F,t as Rt,s as Pt}from"../chunks/CWw6qgC_.js";import{B as Ot,i as D}from"../chunks/Bd-v_9Ud.js";import{p as q}from"../chunks/CW0zSL4D.js";function V(e,t,r){var n;N&&(n=at,W());var o=new Ot(e);X(()=>{var i=t()??null;if(N){var a=$(n),s=a===rt,_=i!==null;if(s!==_){var P=tt();et(P),o.anchor=P,B(!1),o.ensure(i,i&&(y=>r(y,i))),B(!0);return}}o.ensure(i,i&&(y=>r(y,i)))},Z)}function Tt(e){return class extends xt{constructor(t){super({component:e,...t})}}}var f,d;class xt{constructor(t){p(this,f);p(this,d);var i;var r=new Map,n=(a,s)=>{var _=it(s,!1,!1);return r.set(a,_),_};const o=new Proxy({...t.props||{},$$events:{}},{get(a,s){return l(r.get(s)??n(s,Reflect.get(a,s)))},has(a,s){return s===st?!0:(l(r.get(s)??n(s,Reflect.get(a,s))),Reflect.has(a,s))},set(a,s,_){return A(r.get(s)??n(s,_),_),Reflect.set(a,s,_)}});I(this,d,(t.hydrate?yt:Et)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((i=t==null?void 0:t.props)!=null&&i.$$host)||t.sync===!1)&&nt(),I(this,f,o.$$events);for(const a of Object.keys(c(this,d)))a==="$set"||a==="$destroy"||a==="$on"||ot(this,a,{get(){return c(this,d)[a]},set(s){c(this,d)[a]=s},enumerable:!0});c(this,d).$set=a=>{Object.assign(o,a)},c(this,d).$destroy=()=>{bt(c(this,d))}}$set(t){c(this,d).$set(t)}$on(t,r){c(this,f)[t]=c(this,f)[t]||[];const n=(...o)=>r.call(this,...o);return c(this,f)[t].push(n),()=>{c(this,f)[t]=c(this,f)[t].filter(o=>o!==n)}}$destroy(){c(this,d).$destroy()}}f=new WeakMap,d=new WeakMap;const St={};var At=F('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),pt=F("<!> <!>",1);function It(e,t){ct(t,!0);let r=q(t,"components",23,()=>[]),n=q(t,"data_0",3,null),o=q(t,"data_1",3,null);ut(()=>t.stores.page.set(t.page)),dt(()=>{t.stores,t.page,t.constructors,r(),t.form,n(),o(),t.stores.page.notify()});let i=j(!1),a=j(!1),s=j(null);mt(()=>{const u=t.stores.page.subscribe(()=>{l(i)&&(A(a,!0),_t().then(()=>{A(s,document.title||"untitled page",!0)}))});return A(i,!0),u});const _=k(()=>t.constructors[1]);var P=pt(),y=x(P);{var G=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(m,jt)=>{var C=w(),K=x(C);V(K,()=>l(_),(Q,U)=>{L(U(Q,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),T=>r()[1]=T,()=>{var T;return(T=r())==null?void 0:T[1]})}),R(m,C)},$$slots:{default:!0}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)},H=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)};D(y,u=>{t.constructors[1]?u(G):u(H,-1)})}var z=lt(y,2);{var J=u=>{var h=At(),v=ht(h);{var O=g=>{var E=Rt();gt(()=>Pt(E,l(s))),R(g,E)};D(v,g=>{l(a)&&g(O)})}vt(h),R(u,h)};D(z,u=>{l(i)&&u(J)})}R(e,P),ft()}const Mt=Tt(It),Nt=[()=>b(()=>import("../nodes/0.Dv1TzIuH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]),import.meta.url),()=>b(()=>import("../nodes/1.BmImNqbK.js"),__vite__mapDeps([13,1,2,6,7]),import.meta.url),()=>b(()=>import("../nodes/2.CLD-rsu4.js"),__vite__mapDeps([14,1,2,11,15,8,9,5,10,16,7,17,18,19]),import.meta.url),()=>b(()=>import("../nodes/3.0RkbXXD4.js"),__vite__mapDeps([20,1,2,4,16,15,6,7,21,5,3,9,22,23]),import.meta.url),()=>b(()=>import("../nodes/4.DLn0bV4P.js"),__vite__mapDeps([24,1,2,4,6,7,21,16,5,3,9,22,25,17,18,26,11,27]),import.meta.url),()=>b(()=>import("../nodes/5.C0xKDhXA.js"),__vite__mapDeps([28,1,2,21,4,16,5,3,9,22,25,17,18,26]),import.meta.url)],Bt=[],Ft={"/":[2],"/print/[queryId]":[3],"/q/sample":[5],"/q/[queryId]":[4]},Y={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},Lt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.decode])),Yt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.encode])),Gt=!1,Ht=(e,t)=>Lt[e](t);export{Ht as decode,Lt as decoders,Ft as dictionary,Yt as encoders,Gt as hash,Y as hooks,St as matchers,Nt as nodes,Mt as root,Bt as server_loads};
web/sveltekit/build/_app/immutable/entry/app.DBibj1kM.js DELETED
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BaDkkERB.js","../chunks/CWw6qgC_.js","../chunks/BTUA7_xE.js","../chunks/DxQlA7U2.js","../chunks/Bd-v_9Ud.js","../chunks/CW0zSL4D.js","../chunks/DlifwAOf.js","../chunks/BIe30OUb.js","../chunks/DCD6_LXk.js","../chunks/B0XoTt7U.js","../assets/RipMark.ClxF_PAC.css","../chunks/DixtWtwq.js","../assets/0.DiQNUxm-.css","../nodes/1.D77vIaPt.js","../nodes/2.Bas78CjE.js","../chunks/cDW0xQNP.js","../chunks/25_y8TFd.js","../chunks/CXQd8Y6F.js","../chunks/D907np-5.js","../assets/2.BD53GLFY.css","../nodes/3.KbM-URMV.js","../chunks/BatqQaKj.js","../assets/Briefing.Dmn9LgiV.css","../assets/3.BZfqQRM0.css","../nodes/4.CXYWu0_c.js","../chunks/zVqBGhq2.js","../assets/stoneRegistry.bHiraU77.css","../assets/4.C9CQZyPb.css","../nodes/5.NbriEyGS.js"])))=>i.map(i=>d[i]);
2
- var S=e=>{throw TypeError(e)};var M=(e,t,r)=>t.has(e)||S("Cannot "+r);var c=(e,t,r)=>(M(e,t,"read from private field"),r?r.call(e):t.get(e)),p=(e,t,r)=>t.has(e)?S("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),I=(e,t,r,n)=>(M(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);import{b as L,_ as b}from"../chunks/CXQd8Y6F.js";import{h as N,n as W,d as X,a3 as Z,q as $,v as tt,i as et,e as B,an as rt,j as at,a5 as A,ah as st,o as l,ao as nt,ap as ot,L as it,p as ct,aq as ut,am as dt,ai as mt,ar as _t,f as x,s as lt,a as ft,a4 as j,c as ht,r as vt,t as gt,al as k}from"../chunks/BTUA7_xE.js";import{h as yt,m as Et,u as bt,a as R,c as w,f as F,t as Rt,s as Pt}from"../chunks/CWw6qgC_.js";import{B as Ot,i as D}from"../chunks/Bd-v_9Ud.js";import{p as q}from"../chunks/CW0zSL4D.js";function V(e,t,r){var n;N&&(n=at,W());var o=new Ot(e);X(()=>{var i=t()??null;if(N){var a=$(n),s=a===rt,_=i!==null;if(s!==_){var P=tt();et(P),o.anchor=P,B(!1),o.ensure(i,i&&(y=>r(y,i))),B(!0);return}}o.ensure(i,i&&(y=>r(y,i)))},Z)}function Tt(e){return class extends xt{constructor(t){super({component:e,...t})}}}var f,d;class xt{constructor(t){p(this,f);p(this,d);var i;var r=new Map,n=(a,s)=>{var _=it(s,!1,!1);return r.set(a,_),_};const o=new Proxy({...t.props||{},$$events:{}},{get(a,s){return l(r.get(s)??n(s,Reflect.get(a,s)))},has(a,s){return s===st?!0:(l(r.get(s)??n(s,Reflect.get(a,s))),Reflect.has(a,s))},set(a,s,_){return A(r.get(s)??n(s,_),_),Reflect.set(a,s,_)}});I(this,d,(t.hydrate?yt:Et)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((i=t==null?void 0:t.props)!=null&&i.$$host)||t.sync===!1)&&nt(),I(this,f,o.$$events);for(const a of Object.keys(c(this,d)))a==="$set"||a==="$destroy"||a==="$on"||ot(this,a,{get(){return c(this,d)[a]},set(s){c(this,d)[a]=s},enumerable:!0});c(this,d).$set=a=>{Object.assign(o,a)},c(this,d).$destroy=()=>{bt(c(this,d))}}$set(t){c(this,d).$set(t)}$on(t,r){c(this,f)[t]=c(this,f)[t]||[];const n=(...o)=>r.call(this,...o);return c(this,f)[t].push(n),()=>{c(this,f)[t]=c(this,f)[t].filter(o=>o!==n)}}$destroy(){c(this,d).$destroy()}}f=new WeakMap,d=new WeakMap;const St={};var At=F('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),pt=F("<!> <!>",1);function It(e,t){ct(t,!0);let r=q(t,"components",23,()=>[]),n=q(t,"data_0",3,null),o=q(t,"data_1",3,null);ut(()=>t.stores.page.set(t.page)),dt(()=>{t.stores,t.page,t.constructors,r(),t.form,n(),o(),t.stores.page.notify()});let i=j(!1),a=j(!1),s=j(null);mt(()=>{const u=t.stores.page.subscribe(()=>{l(i)&&(A(a,!0),_t().then(()=>{A(s,document.title||"untitled page",!0)}))});return A(i,!0),u});const _=k(()=>t.constructors[1]);var P=pt(),y=x(P);{var G=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(m,jt)=>{var C=w(),K=x(C);V(K,()=>l(_),(Q,U)=>{L(U(Q,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),T=>r()[1]=T,()=>{var T;return(T=r())==null?void 0:T[1]})}),R(m,C)},$$slots:{default:!0}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)},H=u=>{const h=k(()=>t.constructors[0]);var v=w(),O=x(v);V(O,()=>l(h),(g,E)=>{L(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),m=>r()[0]=m,()=>{var m;return(m=r())==null?void 0:m[0]})}),R(u,v)};D(y,u=>{t.constructors[1]?u(G):u(H,-1)})}var z=lt(y,2);{var J=u=>{var h=At(),v=ht(h);{var O=g=>{var E=Rt();gt(()=>Pt(E,l(s))),R(g,E)};D(v,g=>{l(a)&&g(O)})}vt(h),R(u,h)};D(z,u=>{l(i)&&u(J)})}R(e,P),ft()}const Mt=Tt(It),Nt=[()=>b(()=>import("../nodes/0.BaDkkERB.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]),import.meta.url),()=>b(()=>import("../nodes/1.D77vIaPt.js"),__vite__mapDeps([13,1,2,6,7]),import.meta.url),()=>b(()=>import("../nodes/2.Bas78CjE.js"),__vite__mapDeps([14,1,2,11,15,8,9,5,10,16,7,17,18,19]),import.meta.url),()=>b(()=>import("../nodes/3.KbM-URMV.js"),__vite__mapDeps([20,1,2,4,16,15,6,7,21,5,3,9,22,23]),import.meta.url),()=>b(()=>import("../nodes/4.CXYWu0_c.js"),__vite__mapDeps([24,1,2,4,6,7,21,16,5,3,9,22,25,17,18,26,11,27]),import.meta.url),()=>b(()=>import("../nodes/5.NbriEyGS.js"),__vite__mapDeps([28,1,2,21,4,16,5,3,9,22,25,17,18,26]),import.meta.url)],Bt=[],Ft={"/":[2],"/print/[queryId]":[3],"/q/sample":[5],"/q/[queryId]":[4]},Y={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},Lt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.decode])),Yt=Object.fromEntries(Object.entries(Y.transport).map(([e,t])=>[e,t.encode])),Gt=!1,Ht=(e,t)=>Lt[e](t);export{Ht as decode,Lt as decoders,Ft as dictionary,Yt as encoders,Gt as hash,Y as hooks,St as matchers,Nt as nodes,Mt as root,Bt as server_loads};
 
 
 
web/sveltekit/build/_app/immutable/entry/start.BIDfHH4-.js DELETED
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/BOtZ6QcV.js";export{o as load_css,r as start};
 
 
web/sveltekit/build/_app/immutable/entry/start.FA4XFe2L.js DELETED
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/BIe30OUb.js";export{o as load_css,r as start};
 
 
web/sveltekit/build/_app/immutable/entry/start.YmL7ZSOR.js ADDED
@@ -0,0 +1 @@
 
 
1
+ import{l as o,a as r}from"../chunks/CJeJVIjP.js";export{o as load_css,r as start};
web/sveltekit/build/_app/immutable/nodes/{0.BaDkkERB.js → 0.Dv1TzIuH.js} RENAMED
@@ -1,2 +1,2 @@
1
- import{c as E,a as u,s as M,f as v,d as z,e as H}from"../chunks/CWw6qgC_.js";import{p as O,f as R,o as p,a as $,al as f,s as t,c as o,r as i,t as P,aR as L}from"../chunks/BTUA7_xE.js";import{b as r,s as W}from"../chunks/DxQlA7U2.js";import{i as x}from"../chunks/Bd-v_9Ud.js";import{p as B}from"../chunks/CW0zSL4D.js";import{p as D}from"../chunks/DlifwAOf.js";import{R as U}from"../chunks/DCD6_LXk.js";import{s as G}from"../chunks/B0XoTt7U.js";import"../chunks/DixtWtwq.js";const V=!0,J=!0,K="never",xe=Object.freeze(Object.defineProperty({__proto__:null,prerender:V,ssr:J,trailingSlash:K},Symbol.toStringTag,{value:"Module"}));var Q=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-step svelte-1bjixce"> </span>',1),X=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-progress svelte-1bjixce"> </span>',1),Z=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-err svelte-1bjixce"> </span>',1),ee=v('<span class="status svelte-1bjixce" aria-live="polite" aria-atomic="true"><span class="status-dot svelte-1bjixce" aria-hidden="true"></span> <span class="status-phase svelte-1bjixce"> </span> <!> <!> <!></span>');function ae(h,l){O(l,!0);const N={geocode:"geocoding",nta_resolve:"resolving NTA",sandy_inundation:"Sandy 2012",dep_stormwater:"DEP scenarios",floodnet:"FloodNet sensors",nyc311:"NYC 311 history",noaa_tides:"NOAA tides",nws_alerts:"NWS alerts",nws_obs:"NWS hourly obs",ttm_forecast:"TTM r2 surge (zero-shot)",ttm_311_forecast:"TTM r2 weekly 311",ttm_battery_surge:"TTM Battery (NYC fine-tune)",floodnet_forecast:"FloodNet recurrence forecast",ida_hwm_2021:"Ida 2021 HWMs",prithvi_eo_v2:"Ida 2021 polygons (baked lookup)",prithvi_eo_live:"Prithvi-NYC-Pluvial v2 segmentation",microtopo_lidar:"LiDAR microtopo",mta_entrance_exposure:"MTA entrances",nycha_development_exposure:"NYCHA developments",doe_school_exposure:"DOE schools",doh_hospital_exposure:"NYS DOH hospitals",terramind_synthesis:"TerraMind v1 synthesis",terramind_lulc:"TerraMind LULC",terramind_buildings:"TerraMind Buildings",eo_chip_fetch:"fetching S2/S1/DEM chip",rag_granite_embedding:"RAG retrieval",gliner_extract:"GLiNER typed extraction"};let T=f(()=>r.phase!=="idle"&&r.phase!=="done"),k=f(()=>{switch(r.phase){case"planning":return"planning intent";case"specialists":return"gathering evidence";case"reconciling":return"reconciling";case"streaming":return r.attempt>1?`writing (reroll ${r.attempt-1})`:"writing briefing";case"error":return"error";default:return""}}),g=f(()=>{const a=r.activeStep;return a?N[a]??a:null}),m=f(()=>{if(r.phase!=="specialists"&&r.phase!=="reconciling")return null;const a=r.firedCount,d=r.totalSpecialists;return d?`${a}/${d}`:a>0?`${a}`:null}),w=f(()=>r.phase==="error"?"err":"live");var A=E(),_=R(A);{var j=a=>{var d=ee(),e=t(o(d),2),C=o(e,!0);i(e);var S=t(e,2);{var s=n=>{var b=Q(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(g))),u(n,b)};x(S,n=>{p(g)&&n(s)})}var c=t(S,2);{var F=n=>{var b=X(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(m))),u(n,b)};x(c,n=>{p(m)&&n(F)})}var Y=t(c,2);{var I=n=>{var b=Z(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,r.errorMessage)),u(n,b)};x(Y,n=>{r.phase==="error"&&r.errorMessage&&n(I)})}i(d),P(()=>{G(d,"data-kind",p(w)),M(C,p(k))}),u(a,d)};x(_,a=>{p(T)&&a(j)})}u(h,A),$()}var re=v('<button type="button" class="app-header-query" aria-label="Edit query"><span class="app-header-query-icon" aria-hidden="true">⌕</span> <span class="app-header-query-text"> </span> <span class="app-header-query-edit">edit</span></button>'),te=v('<button type="button" class="app-header-link app-header-link-button svelte-f1belb" aria-label="Open curated PDF view of completed briefing in new tab">export PDF</button>'),se=v('<header class="app-header no-print" data-screen-label="App header"><div class="app-header-inner"><div class="app-header-left"><a href="/" class="riprap-wordmark" aria-label="Riprap — home"><!>riprap</a> <span class="app-header-sep">/</span> <span class="app-header-context">flood-exposure briefing</span></div> <div class="app-header-mid"><!></div> <div class="app-header-right"><a class="app-header-link" href="#methodology">methodology</a> <!> <!></div></div></header>');function ne(h,l){O(l,!0);let N=B(l,"query",3,null);function T(){if(typeof window>"u")return;const s=D.params.queryId??(D.url.pathname==="/q/sample"?"sample":"");s&&window.open(`/print/${encodeURIComponent(s)}`,"_blank","noopener")}var k=se(),g=o(k),m=o(g),w=o(m),A=o(w);U(A,{size:20}),L(),i(w),L(4),i(m);var _=t(m,2),j=o(_);{var a=s=>{var c=re(),F=t(o(c),2),Y=o(F,!0);i(F),L(2),i(c),P(()=>M(Y,N())),H("click",c,function(...I){var n;(n=l.onResetCold)==null||n.apply(this,I)}),u(s,c)};x(j,s=>{N()&&s(a)})}i(_);var d=t(_,2),e=t(o(d),2);{var C=s=>{var c=te();H("click",c,T),u(s,c)};x(e,s=>{r.ready&&s(C)})}var S=t(e,2);ae(S,{}),i(d),i(g),i(k),u(h,k),$()}z(["click"]);var oe=v(`<footer class="app-footer no-print"><div class="app-footer-inner"><p class="app-footer-guard"><strong>Riprap does not predict damage.</strong> This tool is for professional analytical work, not personal property decisions.
2
  For residents, see <a href="https://www.floodhelpny.org">FloodHelpNY</a> · <a href="https://www.floodnet.nyc">FloodNet NYC</a>.</p> <p class="app-footer-build">All foundation models Apache-2.0 · All data from public-record federal, state, and city sources · No commercial APIs contacted at runtime · Riprap v0.5.0 · build 2026-05-07</p> <p class="app-footer-credits">Dam mark: <a href="https://thenounproject.com/icon/dam-4516918/">"Dam" by Chintuza</a> via the Noun Project, CC-BY 3.0.</p></div></footer>`);function ie(h){var l=oe();u(h,l)}var pe=v('<a href="#region-briefing" class="skip-link">Skip to briefing</a> <a href="#region-map" class="skip-link" style="left: -9999px;">Skip to map</a> <a href="#region-trace" class="skip-link" style="left: -9999px;">Skip to trace</a>',1);function le(h){var l=pe();L(4),u(h,l)}var de=v("<!> <!>",1),ce=v('<!> <main class="svelte-12qhfyh"><!></main> <!>',1);function ke(h,l){O(l,!0);let N=f(()=>()=>{const e=D.params.queryId;if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}),T=f(()=>D.url.pathname.startsWith("/print/")),k=f(()=>D.url.pathname==="/"),g=f(()=>p(T)||p(k));var m=ce(),w=R(m);{var A=e=>{var C=de(),S=R(C);le(S);var s=t(S,2);{let c=f(()=>p(N)());ne(s,{get query(){return p(c)},onResetCold:()=>window.location.href="/"})}u(e,C)};x(w,e=>{p(g)||e(A)})}var _=t(w,2),j=o(_);W(j,()=>l.children),i(_);var a=t(_,2);{var d=e=>{ie(e)};x(a,e=>{p(g)||e(d)})}u(h,m),$()}export{ke as component,xe as universal};
 
1
+ import{c as E,a as u,s as M,f as v,d as z,e as H}from"../chunks/CWw6qgC_.js";import{p as O,f as R,o as p,a as $,al as f,s as t,c as o,r as i,t as P,aR as L}from"../chunks/BTUA7_xE.js";import{b as r,s as W}from"../chunks/DxQlA7U2.js";import{i as x}from"../chunks/Bd-v_9Ud.js";import{p as B}from"../chunks/CW0zSL4D.js";import{p as D}from"../chunks/B3Pg95Il.js";import{R as U}from"../chunks/DCD6_LXk.js";import{s as G}from"../chunks/B0XoTt7U.js";import"../chunks/DixtWtwq.js";const V=!0,J=!0,K="never",xe=Object.freeze(Object.defineProperty({__proto__:null,prerender:V,ssr:J,trailingSlash:K},Symbol.toStringTag,{value:"Module"}));var Q=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-step svelte-1bjixce"> </span>',1),X=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-progress svelte-1bjixce"> </span>',1),Z=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-err svelte-1bjixce"> </span>',1),ee=v('<span class="status svelte-1bjixce" aria-live="polite" aria-atomic="true"><span class="status-dot svelte-1bjixce" aria-hidden="true"></span> <span class="status-phase svelte-1bjixce"> </span> <!> <!> <!></span>');function ae(h,l){O(l,!0);const N={geocode:"geocoding",nta_resolve:"resolving NTA",sandy_inundation:"Sandy 2012",dep_stormwater:"DEP scenarios",floodnet:"FloodNet sensors",nyc311:"NYC 311 history",noaa_tides:"NOAA tides",nws_alerts:"NWS alerts",nws_obs:"NWS hourly obs",ttm_forecast:"TTM r2 surge (zero-shot)",ttm_311_forecast:"TTM r2 weekly 311",ttm_battery_surge:"TTM Battery (NYC fine-tune)",floodnet_forecast:"FloodNet recurrence forecast",ida_hwm_2021:"Ida 2021 HWMs",prithvi_eo_v2:"Ida 2021 polygons (baked lookup)",prithvi_eo_live:"Prithvi-NYC-Pluvial v2 segmentation",microtopo_lidar:"LiDAR microtopo",mta_entrance_exposure:"MTA entrances",nycha_development_exposure:"NYCHA developments",doe_school_exposure:"DOE schools",doh_hospital_exposure:"NYS DOH hospitals",terramind_synthesis:"TerraMind v1 synthesis",terramind_lulc:"TerraMind LULC",terramind_buildings:"TerraMind Buildings",eo_chip_fetch:"fetching S2/S1/DEM chip",rag_granite_embedding:"RAG retrieval",gliner_extract:"GLiNER typed extraction"};let T=f(()=>r.phase!=="idle"&&r.phase!=="done"),k=f(()=>{switch(r.phase){case"planning":return"planning intent";case"specialists":return"gathering evidence";case"reconciling":return"reconciling";case"streaming":return r.attempt>1?`writing (reroll ${r.attempt-1})`:"writing briefing";case"error":return"error";default:return""}}),g=f(()=>{const a=r.activeStep;return a?N[a]??a:null}),m=f(()=>{if(r.phase!=="specialists"&&r.phase!=="reconciling")return null;const a=r.firedCount,d=r.totalSpecialists;return d?`${a}/${d}`:a>0?`${a}`:null}),w=f(()=>r.phase==="error"?"err":"live");var A=E(),_=R(A);{var j=a=>{var d=ee(),e=t(o(d),2),C=o(e,!0);i(e);var S=t(e,2);{var s=n=>{var b=Q(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(g))),u(n,b)};x(S,n=>{p(g)&&n(s)})}var c=t(S,2);{var F=n=>{var b=X(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(m))),u(n,b)};x(c,n=>{p(m)&&n(F)})}var Y=t(c,2);{var I=n=>{var b=Z(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,r.errorMessage)),u(n,b)};x(Y,n=>{r.phase==="error"&&r.errorMessage&&n(I)})}i(d),P(()=>{G(d,"data-kind",p(w)),M(C,p(k))}),u(a,d)};x(_,a=>{p(T)&&a(j)})}u(h,A),$()}var re=v('<button type="button" class="app-header-query" aria-label="Edit query"><span class="app-header-query-icon" aria-hidden="true">⌕</span> <span class="app-header-query-text"> </span> <span class="app-header-query-edit">edit</span></button>'),te=v('<button type="button" class="app-header-link app-header-link-button svelte-f1belb" aria-label="Open curated PDF view of completed briefing in new tab">export PDF</button>'),se=v('<header class="app-header no-print" data-screen-label="App header"><div class="app-header-inner"><div class="app-header-left"><a href="/" class="riprap-wordmark" aria-label="Riprap — home"><!>riprap</a> <span class="app-header-sep">/</span> <span class="app-header-context">flood-exposure briefing</span></div> <div class="app-header-mid"><!></div> <div class="app-header-right"><a class="app-header-link" href="#methodology">methodology</a> <!> <!></div></div></header>');function ne(h,l){O(l,!0);let N=B(l,"query",3,null);function T(){if(typeof window>"u")return;const s=D.params.queryId??(D.url.pathname==="/q/sample"?"sample":"");s&&window.open(`/print/${encodeURIComponent(s)}`,"_blank","noopener")}var k=se(),g=o(k),m=o(g),w=o(m),A=o(w);U(A,{size:20}),L(),i(w),L(4),i(m);var _=t(m,2),j=o(_);{var a=s=>{var c=re(),F=t(o(c),2),Y=o(F,!0);i(F),L(2),i(c),P(()=>M(Y,N())),H("click",c,function(...I){var n;(n=l.onResetCold)==null||n.apply(this,I)}),u(s,c)};x(j,s=>{N()&&s(a)})}i(_);var d=t(_,2),e=t(o(d),2);{var C=s=>{var c=te();H("click",c,T),u(s,c)};x(e,s=>{r.ready&&s(C)})}var S=t(e,2);ae(S,{}),i(d),i(g),i(k),u(h,k),$()}z(["click"]);var oe=v(`<footer class="app-footer no-print"><div class="app-footer-inner"><p class="app-footer-guard"><strong>Riprap does not predict damage.</strong> This tool is for professional analytical work, not personal property decisions.
2
  For residents, see <a href="https://www.floodhelpny.org">FloodHelpNY</a> · <a href="https://www.floodnet.nyc">FloodNet NYC</a>.</p> <p class="app-footer-build">All foundation models Apache-2.0 · All data from public-record federal, state, and city sources · No commercial APIs contacted at runtime · Riprap v0.5.0 · build 2026-05-07</p> <p class="app-footer-credits">Dam mark: <a href="https://thenounproject.com/icon/dam-4516918/">"Dam" by Chintuza</a> via the Noun Project, CC-BY 3.0.</p></div></footer>`);function ie(h){var l=oe();u(h,l)}var pe=v('<a href="#region-briefing" class="skip-link">Skip to briefing</a> <a href="#region-map" class="skip-link" style="left: -9999px;">Skip to map</a> <a href="#region-trace" class="skip-link" style="left: -9999px;">Skip to trace</a>',1);function le(h){var l=pe();L(4),u(h,l)}var de=v("<!> <!>",1),ce=v('<!> <main class="svelte-12qhfyh"><!></main> <!>',1);function ke(h,l){O(l,!0);let N=f(()=>()=>{const e=D.params.queryId;if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}),T=f(()=>D.url.pathname.startsWith("/print/")),k=f(()=>D.url.pathname==="/"),g=f(()=>p(T)||p(k));var m=ce(),w=R(m);{var A=e=>{var C=de(),S=R(C);le(S);var s=t(S,2);{let c=f(()=>p(N)());ne(s,{get query(){return p(c)},onResetCold:()=>window.location.href="/"})}u(e,C)};x(w,e=>{p(g)||e(A)})}var _=t(w,2),j=o(_);W(j,()=>l.children),i(_);var a=t(_,2);{var d=e=>{ie(e)};x(a,e=>{p(g)||e(d)})}u(h,m),$()}export{ke as component,xe as universal};
web/sveltekit/build/_app/immutable/nodes/0.h-vIKZsr.js DELETED
@@ -1,2 +0,0 @@
1
- import{c as E,a as u,s as M,f as v,d as z,e as H}from"../chunks/CWw6qgC_.js";import{p as O,f as R,o as p,a as $,al as f,s as t,c as o,r as i,t as P,aR as L}from"../chunks/BTUA7_xE.js";import{b as r,s as W}from"../chunks/DxQlA7U2.js";import{i as x}from"../chunks/Bd-v_9Ud.js";import{p as B}from"../chunks/CW0zSL4D.js";import{p as D}from"../chunks/nUW4eUox.js";import{R as U}from"../chunks/DCD6_LXk.js";import{s as G}from"../chunks/B0XoTt7U.js";import"../chunks/DixtWtwq.js";const V=!0,J=!0,K="never",xe=Object.freeze(Object.defineProperty({__proto__:null,prerender:V,ssr:J,trailingSlash:K},Symbol.toStringTag,{value:"Module"}));var Q=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-step svelte-1bjixce"> </span>',1),X=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-progress svelte-1bjixce"> </span>',1),Z=v('<span class="status-sep svelte-1bjixce">·</span> <span class="status-err svelte-1bjixce"> </span>',1),ee=v('<span class="status svelte-1bjixce" aria-live="polite" aria-atomic="true"><span class="status-dot svelte-1bjixce" aria-hidden="true"></span> <span class="status-phase svelte-1bjixce"> </span> <!> <!> <!></span>');function ae(h,l){O(l,!0);const N={geocode:"geocoding",nta_resolve:"resolving NTA",sandy_inundation:"Sandy 2012",dep_stormwater:"DEP scenarios",floodnet:"FloodNet sensors",nyc311:"NYC 311 history",noaa_tides:"NOAA tides",nws_alerts:"NWS alerts",nws_obs:"NWS hourly obs",ttm_forecast:"TTM r2 surge (zero-shot)",ttm_311_forecast:"TTM r2 weekly 311",ttm_battery_surge:"TTM Battery (NYC fine-tune)",floodnet_forecast:"FloodNet recurrence forecast",ida_hwm_2021:"Ida 2021 HWMs",prithvi_eo_v2:"Ida 2021 polygons (baked lookup)",prithvi_eo_live:"Prithvi-NYC-Pluvial v2 segmentation",microtopo_lidar:"LiDAR microtopo",mta_entrance_exposure:"MTA entrances",nycha_development_exposure:"NYCHA developments",doe_school_exposure:"DOE schools",doh_hospital_exposure:"NYS DOH hospitals",terramind_synthesis:"TerraMind v1 synthesis",terramind_lulc:"TerraMind LULC",terramind_buildings:"TerraMind Buildings",eo_chip_fetch:"fetching S2/S1/DEM chip",rag_granite_embedding:"RAG retrieval",gliner_extract:"GLiNER typed extraction"};let T=f(()=>r.phase!=="idle"&&r.phase!=="done"),k=f(()=>{switch(r.phase){case"planning":return"planning intent";case"specialists":return"gathering evidence";case"reconciling":return"reconciling";case"streaming":return r.attempt>1?`writing (reroll ${r.attempt-1})`:"writing briefing";case"error":return"error";default:return""}}),g=f(()=>{const a=r.activeStep;return a?N[a]??a:null}),m=f(()=>{if(r.phase!=="specialists"&&r.phase!=="reconciling")return null;const a=r.firedCount,d=r.totalSpecialists;return d?`${a}/${d}`:a>0?`${a}`:null}),w=f(()=>r.phase==="error"?"err":"live");var A=E(),_=R(A);{var j=a=>{var d=ee(),e=t(o(d),2),C=o(e,!0);i(e);var S=t(e,2);{var s=n=>{var b=Q(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(g))),u(n,b)};x(S,n=>{p(g)&&n(s)})}var c=t(S,2);{var F=n=>{var b=X(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,p(m))),u(n,b)};x(c,n=>{p(m)&&n(F)})}var Y=t(c,2);{var I=n=>{var b=Z(),y=t(R(b),2),q=o(y,!0);i(y),P(()=>M(q,r.errorMessage)),u(n,b)};x(Y,n=>{r.phase==="error"&&r.errorMessage&&n(I)})}i(d),P(()=>{G(d,"data-kind",p(w)),M(C,p(k))}),u(a,d)};x(_,a=>{p(T)&&a(j)})}u(h,A),$()}var re=v('<button type="button" class="app-header-query" aria-label="Edit query"><span class="app-header-query-icon" aria-hidden="true">⌕</span> <span class="app-header-query-text"> </span> <span class="app-header-query-edit">edit</span></button>'),te=v('<button type="button" class="app-header-link app-header-link-button svelte-f1belb" aria-label="Open curated PDF view of completed briefing in new tab">export PDF</button>'),se=v('<header class="app-header no-print" data-screen-label="App header"><div class="app-header-inner"><div class="app-header-left"><a href="/" class="riprap-wordmark" aria-label="Riprap — home"><!>riprap</a> <span class="app-header-sep">/</span> <span class="app-header-context">flood-exposure briefing</span></div> <div class="app-header-mid"><!></div> <div class="app-header-right"><a class="app-header-link" href="#methodology">methodology</a> <!> <!></div></div></header>');function ne(h,l){O(l,!0);let N=B(l,"query",3,null);function T(){if(typeof window>"u")return;const s=D.params.queryId??(D.url.pathname==="/q/sample"?"sample":"");s&&window.open(`/print/${encodeURIComponent(s)}`,"_blank","noopener")}var k=se(),g=o(k),m=o(g),w=o(m),A=o(w);U(A,{size:20}),L(),i(w),L(4),i(m);var _=t(m,2),j=o(_);{var a=s=>{var c=re(),F=t(o(c),2),Y=o(F,!0);i(F),L(2),i(c),P(()=>M(Y,N())),H("click",c,function(...I){var n;(n=l.onResetCold)==null||n.apply(this,I)}),u(s,c)};x(j,s=>{N()&&s(a)})}i(_);var d=t(_,2),e=t(o(d),2);{var C=s=>{var c=te();H("click",c,T),u(s,c)};x(e,s=>{r.ready&&s(C)})}var S=t(e,2);ae(S,{}),i(d),i(g),i(k),u(h,k),$()}z(["click"]);var oe=v(`<footer class="app-footer no-print"><div class="app-footer-inner"><p class="app-footer-guard"><strong>Riprap does not predict damage.</strong> This tool is for professional analytical work, not personal property decisions.
2
- For residents, see <a href="https://www.floodhelpny.org">FloodHelpNY</a> · <a href="https://www.floodnet.nyc">FloodNet NYC</a>.</p> <p class="app-footer-build">All foundation models Apache-2.0 · All data from public-record federal, state, and city sources · No commercial APIs contacted at runtime · Riprap v0.5.0 · build 2026-05-07</p> <p class="app-footer-credits">Dam mark: <a href="https://thenounproject.com/icon/dam-4516918/">"Dam" by Chintuza</a> via the Noun Project, CC-BY 3.0.</p></div></footer>`);function ie(h){var l=oe();u(h,l)}var pe=v('<a href="#region-briefing" class="skip-link">Skip to briefing</a> <a href="#region-map" class="skip-link" style="left: -9999px;">Skip to map</a> <a href="#region-trace" class="skip-link" style="left: -9999px;">Skip to trace</a>',1);function le(h){var l=pe();L(4),u(h,l)}var de=v("<!> <!>",1),ce=v('<!> <main class="svelte-12qhfyh"><!></main> <!>',1);function ke(h,l){O(l,!0);let N=f(()=>()=>{const e=D.params.queryId;if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}),T=f(()=>D.url.pathname.startsWith("/print/")),k=f(()=>D.url.pathname==="/"),g=f(()=>p(T)||p(k));var m=ce(),w=R(m);{var A=e=>{var C=de(),S=R(C);le(S);var s=t(S,2);{let c=f(()=>p(N)());ne(s,{get query(){return p(c)},onResetCold:()=>window.location.href="/"})}u(e,C)};x(w,e=>{p(g)||e(A)})}var _=t(w,2),j=o(_);W(j,()=>l.children),i(_);var a=t(_,2);{var d=e=>{ie(e)};x(a,e=>{p(g)||e(d)})}u(h,m),$()}export{ke as component,xe as universal};
 
 
 
web/sveltekit/build/_app/immutable/nodes/{1.D77vIaPt.js → 1.BmImNqbK.js} RENAMED
@@ -1 +1 @@
1
- import{a as c,f as u,s as e}from"../chunks/CWw6qgC_.js";import{p as v,f as l,t as _,a as g,c as p,r as o,s as x}from"../chunks/BTUA7_xE.js";import{p as m}from"../chunks/DlifwAOf.js";var d=u("<h1> </h1> <p> </p>",1);function k(f,i){v(i,!0);var t=d(),r=l(t),h=p(r,!0);o(r);var a=x(r,2),n=p(a,!0);o(a),_(()=>{var s;e(h,m.status),e(n,(s=m.error)==null?void 0:s.message)}),c(f,t),g()}export{k as component};
 
1
+ import{a as c,f as u,s as e}from"../chunks/CWw6qgC_.js";import{p as v,f as l,t as _,a as g,c as p,r as o,s as x}from"../chunks/BTUA7_xE.js";import{p as m}from"../chunks/B3Pg95Il.js";var d=u("<h1> </h1> <p> </p>",1);function k(f,i){v(i,!0);var t=d(),r=l(t),h=p(r,!0);o(r);var a=x(r,2),n=p(a,!0);o(a),_(()=>{var s;e(h,m.status),e(n,(s=m.error)==null?void 0:s.message)}),c(f,t),g()}export{k as component};
web/sveltekit/build/_app/immutable/nodes/1.DtMBYvn3.js DELETED
@@ -1 +0,0 @@
1
- import{a as c,f as u,s as e}from"../chunks/CWw6qgC_.js";import{p as v,f as l,t as _,a as g,c as p,r as o,s as x}from"../chunks/BTUA7_xE.js";import{p as m}from"../chunks/nUW4eUox.js";var d=u("<h1> </h1> <p> </p>",1);function k(f,i){v(i,!0);var t=d(),r=l(t),h=p(r,!0);o(r);var a=x(r,2),n=p(a,!0);o(a),_(()=>{var s;e(h,m.status),e(n,(s=m.error)==null?void 0:s.message)}),c(f,t),g()}export{k as component};
 
 
web/sveltekit/build/_app/immutable/nodes/2.BWTkJ8km.js DELETED
@@ -1,4 +0,0 @@
1
- import{a as m,f as w,d as I,l as O,e as G,s as g}from"../chunks/CWw6qgC_.js";import"../chunks/DixtWtwq.js";import{b9 as U,y as k,ar as K,$ as R,_ as V,h as Q,Y as Z,aq as J,am as L,ba as q,bb as X,o as d,bc as ee,af as ae,c,aR as S,r as o,p as P,a5 as N,a as M,a4 as A,s as f,t as T,ai as se,Z as te,ak as re}from"../chunks/BTUA7_xE.js";import{h as ne}from"../chunks/cDW0xQNP.js";import{R as le}from"../chunks/DCD6_LXk.js";import{e as $}from"../chunks/25_y8TFd.js";import{r as ie,a as oe,s as de,b as ce}from"../chunks/B0XoTt7U.js";import{g as B}from"../chunks/BOtZ6QcV.js";import{b as ve,_ as pe}from"../chunks/CXQd8Y6F.js";import{P as fe}from"../chunks/CAMdvC-O.js";function ue(e,s,r=s){var t=new WeakSet;U(e,"input",async a=>{var n=a?e.defaultValue:e.value;if(n=C(e)?E(n):n,r(n),k!==null&&t.add(k),await K(),n!==(n=s())){var u=e.selectionStart,l=e.selectionEnd,v=e.value.length;if(e.value=n??"",l!==null){var i=e.value.length;u===l&&l===v&&i>v?(e.selectionStart=i,e.selectionEnd=i):(e.selectionStart=u,e.selectionEnd=Math.min(l,i))}}}),(Q&&e.defaultValue!==e.value||R(s)==null&&e.value)&&(r(C(e)?E(e.value):e.value),k!==null&&t.add(k)),V(()=>{var a=s();if(e===document.activeElement){var n=k;if(t.has(n))return}C(e)&&a===E(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function C(e){var s=e.type;return s==="number"||s==="range"}function E(e){return e===""?null:+e}function me(e=!1){const s=Z,r=s.l.u;if(!r)return;let t=()=>ee(s.s);if(e){let a=0,n={};const u=ae(()=>{let l=!1;const v=s.s;for(const i in v)v[i]!==n[i]&&(n[i]=v[i],l=!0);return l&&a++,a});t=()=>d(u)}r.b.length&&J(()=>{H(s,t),q(r.b)}),L(()=>{const a=R(()=>r.m.map(X));return()=>{for(const n of a)typeof n=="function"&&n()}}),r.a.length&&L(()=>{H(s,t),q(r.a)})}function H(e,s){if(e.l.s)for(const r of e.l.s)d(r);s()}var we=w('<header class="land-header svelte-1ct2rgk"><span class="riprap-wordmark"><!>riprap</span> <span class="land-header-sep svelte-1ct2rgk">/</span> <span class="land-header-context svelte-1ct2rgk">Flood Exposure Briefing · NYC</span> <nav class="land-header-nav svelte-1ct2rgk"><a href="#methodology" class="svelte-1ct2rgk">Methodology</a> <a href="#sources" class="svelte-1ct2rgk">Sources</a></nav></header>');function he(e){var s=we(),r=c(s),t=c(r);le(t,{size:22}),S(),o(r),S(6),o(s),m(e,s)}var ye=w("<span> </span>"),ge=w('<main class="land-hero svelte-drzq4r"><h1 class="land-hero-h1 svelte-drzq4r"><span class="land-hero-headline svelte-drzq4r">A flood exposure briefing<br/> for <em class="svelte-drzq4r">any place</em> in New York City.</span> <span class="land-hero-deck svelte-drzq4r">Type an address. Get a written briefing where every numeric claim links to its primary public-record source.</span></h1> <form class="land-query svelte-drzq4r" role="search"><span class="land-query-prompt svelte-drzq4r" aria-hidden="true">›</span> <input type="text" placeholder="Address, neighborhood, or BBL. e.g. 80 Pioneer Street, Red Hook" class="land-query-input svelte-drzq4r" aria-label="Query an address, neighborhood, or BBL"/> <button type="submit" class="land-query-submit svelte-drzq4r">Brief this place →</button></form> <div class="land-cycling svelte-drzq4r" aria-live="polite"><span class="land-cycling-label svelte-drzq4r">Try:</span> <button type="button" class="land-cycling-rail svelte-drzq4r" title="Run this example"></button></div></main>');function je(e,s){P(s,!0);const r=["80 Pioneer Street, Red Hook","Coney Island Hospital","PS 188, Lower East Side","Hammels Houses, Rockaway","Bowling Green station","555 W 57th Street"];let t=A(""),a=A(0);L(()=>{if(typeof window>"u")return;const p=setInterval(()=>{N(a,(d(a)+1)%r.length)},2200);return()=>clearInterval(p)});function n(){const p=d(t).trim();p&&B(`/q/${encodeURIComponent(p)}`)}function u(){const p=r[d(a)];B(`/q/${encodeURIComponent(p)}`)}var l=ge(),v=f(c(l),2),i=f(c(v),2);ie(i),S(2),o(v);var j=f(v,2),y=f(c(j),2);$(y,22,()=>r,p=>p,(p,b,F)=>{var h=ye();let x;var _=c(h,!0);o(h),T(()=>{x=oe(h,1,"land-cycling-item svelte-drzq4r",null,x,{"is-active":d(F)===d(a)}),de(h,"aria-hidden",d(F)!==d(a)),g(_,b)}),m(p,h)}),o(y),o(j),o(l),O("submit",v,p=>{p.preventDefault(),n()}),ue(i,()=>d(t),p=>N(t,p)),G("click",y,u),m(e,l),M()}I(["click"]);var be=w('<div class="land-mapmini svelte-1g1r73s" role="img" aria-label="Live mini-map preview of Red Hook flood exposure layers"><div class="land-mapmini-canvas svelte-1g1r73s"></div> <div class="land-mapmini-legend svelte-1g1r73s"><span class="svelte-1g1r73s"><span class="lm-sw lm-sw-emp svelte-1g1r73s"></span>empirical</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-mod svelte-1g1r73s"></span>modeled</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-prx svelte-1g1r73s"></span>proxy</span></div></div>');function _e(e,s){P(s,!0);const r=[-74.0095,40.6781];let t=A(null),a=null;se(()=>{let l=!1;return(async()=>{if(!d(t)||l)return;const v=await pe(()=>import("../chunks/D4L2lGt1.js").then(i=>i.m),[],import.meta.url);l||!d(t)||(a=new v.Map({container:d(t),style:fe,center:r,zoom:14.5,interactive:!1,attributionControl:!1}),a.on("load",()=>{a&&(a.addSource("fema-ae",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]}}),a.addLayer({id:"fema-ae-fill",type:"fill",source:"fema-ae",paint:{"fill-color":"#2A6FA8","fill-opacity":.22}}),a.addLayer({id:"fema-ae-line",type:"line",source:"fema-ae",paint:{"line-color":"#2A6FA8","line-width":1,"line-dasharray":[3,2]}}),a.addSource("hwm-contour",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[[-74.0125,40.679],[-74.0105,40.6792],[-74.008,40.679],[-74.006,40.6786]]}}}),a.addLayer({id:"hwm-contour-line",type:"line",source:"hwm-contour",paint:{"line-color":"#0B5394","line-width":1.4}}),a.addSource("proxy-311",{type:"geojson",data:{type:"FeatureCollection",features:[[-74.0118,40.677],[-74.0114,40.6767],[-74.0121,40.6772]].map(i=>({type:"Feature",properties:{},geometry:{type:"Point",coordinates:i}}))}}),a.addLayer({id:"proxy-311-circle",type:"circle",source:"proxy-311",paint:{"circle-radius":3,"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1}}),a.addSource("floodnet",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[-74.0103,40.6788]}}}),a.addLayer({id:"floodnet-pin",type:"circle",source:"floodnet",paint:{"circle-radius":4,"circle-color":"#0B5394","circle-stroke-color":"#FFFFFF","circle-stroke-width":1}}),a.addSource("addr",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:r}}}),a.addLayer({id:"addr-ring",type:"circle",source:"addr",paint:{"circle-radius":9,"circle-color":"transparent","circle-stroke-color":"#0F172A","circle-stroke-width":1.4}}),a.addLayer({id:"addr-dot",type:"circle",source:"addr",paint:{"circle-radius":3,"circle-color":"#0F172A"}}))}))})(),()=>{l=!0,a&&(a.remove(),a=null)}});var n=be(),u=c(n);ve(u,l=>N(t,l),()=>d(t)),S(2),o(n),m(e,n),M()}var ke=w(`<section class="land-section svelte-1anw2jf"><div class="land-section-head svelte-1anw2jf"><span class="section-label">What you'll get back</span> <span class="land-section-meta svelte-1anw2jf">A grounded paragraph with citations, not a chatbot answer.</span></div> <div class="land-preview-grid svelte-1anw2jf"><div class="land-preview-pane land-preview-pane-excerpt svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Briefing excerpt</div> <p class="land-preview-body svelte-1anw2jf">The lot sits inside the FEMA <span class="land-preview-cite svelte-1anw2jf">1% AE flood zone <sup class="svelte-1anw2jf">[c3]</sup></span>,
2
- with Sandy high-water marks recorded <span class="land-preview-cite svelte-1anw2jf">4.7 ft above grade <sup class="svelte-1anw2jf">[c1]</sup></span>.
3
- FloodNet FN-BK-018 has logged <span class="land-preview-cite svelte-1anw2jf">14 nuisance floods since 2023 <sup class="svelte-1anw2jf">[c2]</sup></span>.</p> <div class="land-preview-cites svelte-1anw2jf"><div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c1]</span> <span class="land-preview-cite-src svelte-1anw2jf">USGS HWM · Sandy 2012</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c2]</span> <span class="land-preview-cite-src svelte-1anw2jf">FloodNet FN-BK-018</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c3]</span> <span class="land-preview-cite-src svelte-1anw2jf">FEMA NFHL · 36047C0207</span> <span class="land-preview-cite-tier svelte-1anw2jf">modeled</span></div></div></div> <div class="land-preview-pane land-preview-pane-cards svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Evidence cards</div> <div class="land-evcard-grid svelte-1anw2jf"><article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e1</span></header> <div class="land-evcard-claim svelte-1anw2jf">4.7 ft Sandy storm-surge HWM at address</div> <div class="land-evcard-source svelte-1anw2jf">USGS High-Water Mark database · 2012</div></article> <article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e2</span></header> <div class="land-evcard-claim svelte-1anw2jf">14 nuisance-flood events, 2023–2026</div> <div class="land-evcard-source svelte-1anw2jf">FloodNet FN-BK-018 · 2 blocks north</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e3</span></header> <div class="land-evcard-claim svelte-1anw2jf">FEMA 1% annual-chance (AE) flood zone</div> <div class="land-evcard-source svelte-1anw2jf">FEMA NFHL · panel 36047C0207</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e5</span></header> <div class="land-evcard-claim svelte-1anw2jf">+30 in MSL by 2070 (NPCC4 high)</div> <div class="land-evcard-source svelte-1anw2jf">NPCC4 SLR projection · 2024</div></article></div></div> <div class="land-preview-pane land-preview-pane-map svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Map</div> <!> <div class="land-preview-mapmeta svelte-1anw2jf">80 Pioneer St, Red Hook · z14.5 · Carto Positron</div></div></div></section>`);function Se(e){var s=ke(),r=f(c(s),2),t=f(c(r),4),a=f(c(t),2);_e(a,{}),S(2),o(t),o(r),o(s),m(e,s)}var Fe=w('<article class="land-stones-detail-cell svelte-1v6nt1t"><div class="land-stones-detail-num svelte-1v6nt1t"> </div> <h3 class="land-stones-detail-name svelte-1v6nt1t"> </h3> <div class="land-stones-detail-role svelte-1v6nt1t"> </div> <p class="land-stones-detail-tag svelte-1v6nt1t"> </p> <div class="land-stones-detail-sources svelte-1v6nt1t"> </div></article>'),xe=w(`<section class="land-section-stones-detail svelte-1v6nt1t" id="methodology"><div class="land-page svelte-1v6nt1t"><div class="land-section-head svelte-1v6nt1t"><span class="section-label">How Riprap reads a place</span> <span class="land-section-meta svelte-1v6nt1t">Five Stones · one taxonomy · every briefing</span></div> <p class="land-stones-deck svelte-1v6nt1t">Each briefing routes through a fixed taxonomy of public-record specialists. Each Stone is a class of evidence.
4
- Together they form the briefing, and every claim in the output traces back to the Stone that produced it.</p> <div class="land-stones-detail svelte-1v6nt1t"></div></div></section>`);function Ce(e,s){P(s,!1);const r=[{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers",sources:"USGS HWMs · FEMA NFHL · DEP stormwater · Prithvi historical",tint:"var(--stone-cornerstone)"},{name:"Keystone",role:"the asset register",tag:"what's exposed",sources:"MTA · NYCHA · DOE · DOH · PLUTO",tint:"var(--stone-keystone)"},{name:"Touchstone",role:"the live observer",tag:"what's happening now",sources:"FloodNet sensors · 311 complaints · NWS · NOAA tide gauges",tint:"var(--stone-touchstone)"},{name:"Lodestone",role:"the projector",tag:"what's coming",sources:"NPCC4 · Granite TTM (zero-shot + NYC fine-tune) · NWS alerts",tint:"var(--stone-lodestone)"},{name:"Capstone",role:"the synthesizer",tag:"writes it all down",sources:"Granite 4.1 composer · Mellea grounding-check · WeasyPrint",tint:"var(--stone-capstone)"}];me();var t=xe(),a=c(t),n=f(c(a),4);$(n,7,()=>r,u=>u.name,(u,l,v)=>{var i=Fe();let j;var y=c(i),p=c(y,!0);o(y);var b=f(y,2),F=c(b,!0);o(b);var h=f(b,2),x=c(h,!0);o(h);var _=f(h,2),W=c(_,!0);o(_);var z=f(_,2),Y=c(z,!0);o(z),o(i),T(D=>{j=ce(i,"",j,{"--stone-tint":d(l).tint}),g(p,D),g(F,d(l).name),g(x,d(l).role),g(W,d(l).tag),g(Y,d(l).sources)},[()=>String(d(v)+1).padStart(2,"0")]),m(u,i)}),o(n),o(a),o(t),m(e,t),M()}var Ee=w('<footer class="land-footer svelte-1dcj612"><span class="land-footer-tiers svelte-1dcj612"><span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-emp svelte-1dcj612"></span>empirical</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-mod svelte-1dcj612"></span>modeled</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-prx svelte-1dcj612"></span>proxy</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-syn svelte-1dcj612"></span>synthetic</span></span> <span class="land-footer-build">Riprap v0.4.6 · NYC OpenData · FEMA NFHL · USGS · NPCC4 · Dam mark by Chintuza, Noun Project (CC-BY)</span></footer>');function Le(e){var s=Ee();m(e,s)}var Ne=w('<meta name="description" content="A citation-grounded flood-exposure briefing tool for any address, neighborhood, or BBL in New York City."/>'),Ae=w('<div class="land svelte-1uha8ag"><!> <div class="land-page svelte-1uha8ag"><!> <!></div> <!> <!></div>');function Ye(e){var s=Ae();ne("1uha8ag",v=>{var i=Ne();te(()=>{re.title="Riprap — Flood Exposure Briefing for NYC"}),m(v,i)});var r=c(s);he(r);var t=f(r,2),a=c(t);je(a,{});var n=f(a,2);Se(n),o(t);var u=f(t,2);Ce(u,{});var l=f(u,2);Le(l),o(s),m(e,s)}export{Ye as component};
 
 
 
 
 
web/sveltekit/build/_app/immutable/nodes/{2.Bas78CjE.js → 2.CLD-rsu4.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{a as m,f as w,d as D,l as I,e as G,s as g}from"../chunks/CWw6qgC_.js";import"../chunks/DixtWtwq.js";import{b9 as U,y as S,ar as K,$ as R,_ as V,h as Q,Y as Z,aq as J,am as E,ba as q,bb as X,o as d,bc as ee,af as ae,c,aR as k,r as o,p as P,a5 as N,a as M,a4 as A,s as f,t as T,ai as se,Z as te,ak as re}from"../chunks/BTUA7_xE.js";import{h as ne}from"../chunks/cDW0xQNP.js";import{R as le}from"../chunks/DCD6_LXk.js";import{e as $}from"../chunks/25_y8TFd.js";import{r as ie,a as oe,s as de,b as ce}from"../chunks/B0XoTt7U.js";import{g as B}from"../chunks/BIe30OUb.js";import{b as ve,_ as pe}from"../chunks/CXQd8Y6F.js";import{P as fe}from"../chunks/D907np-5.js";function ue(e,s,r=s){var t=new WeakSet;U(e,"input",async a=>{var n=a?e.defaultValue:e.value;if(n=L(e)?C(n):n,r(n),S!==null&&t.add(S),await K(),n!==(n=s())){var u=e.selectionStart,l=e.selectionEnd,v=e.value.length;if(e.value=n??"",l!==null){var i=e.value.length;u===l&&l===v&&i>v?(e.selectionStart=i,e.selectionEnd=i):(e.selectionStart=u,e.selectionEnd=Math.min(l,i))}}}),(Q&&e.defaultValue!==e.value||R(s)==null&&e.value)&&(r(L(e)?C(e.value):e.value),S!==null&&t.add(S)),V(()=>{var a=s();if(e===document.activeElement){var n=S;if(t.has(n))return}L(e)&&a===C(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function L(e){var s=e.type;return s==="number"||s==="range"}function C(e){return e===""?null:+e}function me(e=!1){const s=Z,r=s.l.u;if(!r)return;let t=()=>ee(s.s);if(e){let a=0,n={};const u=ae(()=>{let l=!1;const v=s.s;for(const i in v)v[i]!==n[i]&&(n[i]=v[i],l=!0);return l&&a++,a});t=()=>d(u)}r.b.length&&J(()=>{H(s,t),q(r.b)}),E(()=>{const a=R(()=>r.m.map(X));return()=>{for(const n of a)typeof n=="function"&&n()}}),r.a.length&&E(()=>{H(s,t),q(r.a)})}function H(e,s){if(e.l.s)for(const r of e.l.s)d(r);s()}var we=w('<header class="land-header svelte-1ct2rgk"><span class="riprap-wordmark"><!>riprap</span> <span class="land-header-sep svelte-1ct2rgk">/</span> <span class="land-header-context svelte-1ct2rgk">Flood Exposure Briefing · NYC</span> <nav class="land-header-nav svelte-1ct2rgk"><a href="#methodology" class="svelte-1ct2rgk">Methodology</a> <a href="#sources" class="svelte-1ct2rgk">Sources</a></nav></header>');function he(e){var s=we(),r=c(s),t=c(r);le(t,{size:22}),k(),o(r),k(6),o(s),m(e,s)}var ye=w("<span> </span>"),ge=w('<main class="land-hero svelte-drzq4r"><h1 class="land-hero-h1 svelte-drzq4r"><span class="land-hero-headline svelte-drzq4r">A flood exposure briefing<br/> for <em class="svelte-drzq4r">any place</em> in New York City.</span> <span class="land-hero-deck svelte-drzq4r">Type an address. Get a written briefing where every numeric claim links to its primary public-record source.</span></h1> <form class="land-query svelte-drzq4r" role="search"><span class="land-query-prompt svelte-drzq4r" aria-hidden="true">›</span> <input type="text" placeholder="Address, neighborhood, or BBL. e.g. 80 Pioneer Street, Red Hook" class="land-query-input svelte-drzq4r" aria-label="Query an address, neighborhood, or BBL"/> <button type="submit" class="land-query-submit svelte-drzq4r">Brief this place →</button></form> <div class="land-cycling svelte-drzq4r" aria-live="polite"><span class="land-cycling-label svelte-drzq4r">Try:</span> <button type="button" class="land-cycling-rail svelte-drzq4r" title="Run this example"></button></div></main>');function je(e,s){P(s,!0);const r=["80 Pioneer Street, Red Hook","Coney Island Hospital","PS 188, Lower East Side","Hammels Houses, Rockaway","Bowling Green station","555 W 57th Street"];let t=A(""),a=A(0);E(()=>{if(typeof window>"u")return;const p=setInterval(()=>{N(a,(d(a)+1)%r.length)},2200);return()=>clearInterval(p)});function n(){const p=d(t).trim();p&&B(`/q/${encodeURIComponent(p)}`)}function u(){const p=r[d(a)];B(`/q/${encodeURIComponent(p)}`)}var l=ge(),v=f(c(l),2),i=f(c(v),2);ie(i),k(2),o(v);var j=f(v,2),y=f(c(j),2);$(y,22,()=>r,p=>p,(p,b,F)=>{var h=ye();let x;var _=c(h,!0);o(h),T(()=>{x=oe(h,1,"land-cycling-item svelte-drzq4r",null,x,{"is-active":d(F)===d(a)}),de(h,"aria-hidden",d(F)!==d(a)),g(_,b)}),m(p,h)}),o(y),o(j),o(l),I("submit",v,p=>{p.preventDefault(),n()}),ue(i,()=>d(t),p=>N(t,p)),G("click",y,u),m(e,l),M()}D(["click"]);var be=w('<div class="land-mapmini svelte-1g1r73s" role="img" aria-label="Live mini-map preview of Red Hook flood exposure layers"><div class="land-mapmini-canvas svelte-1g1r73s"></div> <div class="land-mapmini-legend svelte-1g1r73s"><span class="svelte-1g1r73s"><span class="lm-sw lm-sw-emp svelte-1g1r73s"></span>empirical</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-mod svelte-1g1r73s"></span>modeled</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-prx svelte-1g1r73s"></span>proxy</span></div></div>');function _e(e,s){P(s,!0);const r=[-74.0096,40.6776];let t=A(null),a=null;se(()=>{let l=!1;return(async()=>{if(!d(t)||l)return;const v=await pe(()=>import("../chunks/D4L2lGt1.js").then(i=>i.m),[],import.meta.url);l||!d(t)||(a=new v.Map({container:d(t),style:fe,center:r,zoom:14.5,interactive:!1,attributionControl:!1}),a.on("load",()=>{a&&(a.addSource("fema-ae",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]}}),a.addLayer({id:"fema-ae-fill",type:"fill",source:"fema-ae",paint:{"fill-color":"#2A6FA8","fill-opacity":.22}}),a.addLayer({id:"fema-ae-line",type:"line",source:"fema-ae",paint:{"line-color":"#2A6FA8","line-width":1,"line-dasharray":[3,2]}}),a.addSource("hwm-contour",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[[-74.0125,40.679],[-74.0105,40.6792],[-74.008,40.679],[-74.006,40.6786]]}}}),a.addLayer({id:"hwm-contour-line",type:"line",source:"hwm-contour",paint:{"line-color":"#0B5394","line-width":1.4}}),a.addSource("proxy-311",{type:"geojson",data:{type:"FeatureCollection",features:[[-74.0118,40.677],[-74.0114,40.6767],[-74.0121,40.6772]].map(i=>({type:"Feature",properties:{},geometry:{type:"Point",coordinates:i}}))}}),a.addLayer({id:"proxy-311-circle",type:"circle",source:"proxy-311",paint:{"circle-radius":3,"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1}}),a.addSource("floodnet",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[-74.0103,40.6788]}}}),a.addLayer({id:"floodnet-pin",type:"circle",source:"floodnet",paint:{"circle-radius":4,"circle-color":"#0B5394","circle-stroke-color":"#FFFFFF","circle-stroke-width":1}}),a.addSource("addr",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:r}}}),a.addLayer({id:"addr-ring",type:"circle",source:"addr",paint:{"circle-radius":9,"circle-color":"transparent","circle-stroke-color":"#0F172A","circle-stroke-width":1.4}}),a.addLayer({id:"addr-dot",type:"circle",source:"addr",paint:{"circle-radius":3,"circle-color":"#0F172A"}}))}))})(),()=>{l=!0,a&&(a.remove(),a=null)}});var n=be(),u=c(n);ve(u,l=>N(t,l),()=>d(t)),k(2),o(n),m(e,n),M()}var Se=w(`<section class="land-section svelte-1anw2jf"><div class="land-section-head svelte-1anw2jf"><span class="section-label">What you'll get back</span> <span class="land-section-meta svelte-1anw2jf">A grounded paragraph with citations, not a chatbot answer.</span></div> <div class="land-preview-grid svelte-1anw2jf"><div class="land-preview-pane land-preview-pane-excerpt svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Briefing excerpt</div> <p class="land-preview-body svelte-1anw2jf">The lot sits inside the FEMA <span class="land-preview-cite svelte-1anw2jf">1% AE flood zone <sup class="svelte-1anw2jf">[c3]</sup></span>,
2
  with Sandy high-water marks recorded <span class="land-preview-cite svelte-1anw2jf">4.7 ft above grade <sup class="svelte-1anw2jf">[c1]</sup></span>.
3
  FloodNet FN-BK-018 has logged <span class="land-preview-cite svelte-1anw2jf">14 nuisance floods since 2023 <sup class="svelte-1anw2jf">[c2]</sup></span>.</p> <div class="land-preview-cites svelte-1anw2jf"><div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c1]</span> <span class="land-preview-cite-src svelte-1anw2jf">USGS HWM · Sandy 2012</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c2]</span> <span class="land-preview-cite-src svelte-1anw2jf">FloodNet FN-BK-018</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c3]</span> <span class="land-preview-cite-src svelte-1anw2jf">FEMA NFHL · 36047C0207</span> <span class="land-preview-cite-tier svelte-1anw2jf">modeled</span></div></div></div> <div class="land-preview-pane land-preview-pane-cards svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Evidence cards</div> <div class="land-evcard-grid svelte-1anw2jf"><article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e1</span></header> <div class="land-evcard-claim svelte-1anw2jf">4.7 ft Sandy storm-surge HWM at address</div> <div class="land-evcard-source svelte-1anw2jf">USGS High-Water Mark database · 2012</div></article> <article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e2</span></header> <div class="land-evcard-claim svelte-1anw2jf">14 nuisance-flood events, 2023–2026</div> <div class="land-evcard-source svelte-1anw2jf">FloodNet FN-BK-018 · 2 blocks north</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e3</span></header> <div class="land-evcard-claim svelte-1anw2jf">FEMA 1% annual-chance (AE) flood zone</div> <div class="land-evcard-source svelte-1anw2jf">FEMA NFHL · panel 36047C0207</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e5</span></header> <div class="land-evcard-claim svelte-1anw2jf">+30 in MSL by 2070 (NPCC4 high)</div> <div class="land-evcard-source svelte-1anw2jf">NPCC4 SLR projection · 2024</div></article></div></div> <div class="land-preview-pane land-preview-pane-map svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Map</div> <!> <div class="land-preview-mapmeta svelte-1anw2jf">80 Pioneer St, Red Hook · z14.5 · Carto Positron</div></div></div></section>`);function ke(e){var s=Se(),r=f(c(s),2),t=f(c(r),4),a=f(c(t),2);_e(a,{}),k(2),o(t),o(r),o(s),m(e,s)}var Fe=w('<article class="land-stones-detail-cell svelte-1v6nt1t"><div class="land-stones-detail-num svelte-1v6nt1t"> </div> <h3 class="land-stones-detail-name svelte-1v6nt1t"> </h3> <div class="land-stones-detail-role svelte-1v6nt1t"> </div> <p class="land-stones-detail-tag svelte-1v6nt1t"> </p> <div class="land-stones-detail-sources svelte-1v6nt1t"> </div></article>'),xe=w(`<section class="land-section-stones-detail svelte-1v6nt1t" id="methodology"><div class="land-page svelte-1v6nt1t"><div class="land-section-head svelte-1v6nt1t"><span class="section-label">How Riprap reads a place</span> <span class="land-section-meta svelte-1v6nt1t">Five Stones · one taxonomy · every briefing</span></div> <p class="land-stones-deck svelte-1v6nt1t">Each briefing routes through a fixed taxonomy of public-record specialists. Each Stone is a class of evidence.
4
  Together they form the briefing, and every claim in the output traces back to the Stone that produced it.</p> <div class="land-stones-detail svelte-1v6nt1t"></div></div></section>`);function Le(e,s){P(s,!1);const r=[{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers",sources:"USGS HWMs · FEMA NFHL · DEP stormwater · Prithvi historical",tint:"var(--stone-cornerstone)"},{name:"Keystone",role:"the asset register",tag:"what's exposed",sources:"MTA · NYCHA · DOE · DOH · PLUTO",tint:"var(--stone-keystone)"},{name:"Touchstone",role:"the live observer",tag:"what's happening now",sources:"FloodNet sensors · 311 complaints · NWS · NOAA tide gauges",tint:"var(--stone-touchstone)"},{name:"Lodestone",role:"the projector",tag:"what's coming",sources:"NPCC4 · Granite TTM (zero-shot + NYC fine-tune) · NWS alerts",tint:"var(--stone-lodestone)"},{name:"Capstone",role:"the synthesizer",tag:"writes it all down",sources:"Granite 4.1 composer · Mellea grounding-check · WeasyPrint",tint:"var(--stone-capstone)"}];me();var t=xe(),a=c(t),n=f(c(a),4);$(n,7,()=>r,u=>u.name,(u,l,v)=>{var i=Fe();let j;var y=c(i),p=c(y,!0);o(y);var b=f(y,2),F=c(b,!0);o(b);var h=f(b,2),x=c(h,!0);o(h);var _=f(h,2),O=c(_,!0);o(_);var z=f(_,2),W=c(z,!0);o(z),o(i),T(Y=>{j=ce(i,"",j,{"--stone-tint":d(l).tint}),g(p,Y),g(F,d(l).name),g(x,d(l).role),g(O,d(l).tag),g(W,d(l).sources)},[()=>String(d(v)+1).padStart(2,"0")]),m(u,i)}),o(n),o(a),o(t),m(e,t),M()}var Ce=w('<footer class="land-footer svelte-1dcj612"><span class="land-footer-tiers svelte-1dcj612"><span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-emp svelte-1dcj612"></span>empirical</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-mod svelte-1dcj612"></span>modeled</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-prx svelte-1dcj612"></span>proxy</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-syn svelte-1dcj612"></span>synthetic</span></span> <span class="land-footer-build">Riprap v0.4.6 · NYC OpenData · FEMA NFHL · USGS · NPCC4 · Dam mark by Chintuza, Noun Project (CC-BY)</span></footer>');function Ee(e){var s=Ce();m(e,s)}var Ne=w('<meta name="description" content="A citation-grounded flood-exposure briefing tool for any address, neighborhood, or BBL in New York City."/>'),Ae=w('<div class="land svelte-1uha8ag"><!> <div class="land-page svelte-1uha8ag"><!> <!></div> <!> <!></div>');function We(e){var s=Ae();ne("1uha8ag",v=>{var i=Ne();te(()=>{re.title="Riprap — Flood Exposure Briefing for NYC"}),m(v,i)});var r=c(s);he(r);var t=f(r,2),a=c(t);je(a,{});var n=f(a,2);ke(n),o(t);var u=f(t,2);Le(u,{});var l=f(u,2);Ee(l),o(s),m(e,s)}export{We as component};
 
1
+ import{a as m,f as w,d as D,l as I,e as G,s as g}from"../chunks/CWw6qgC_.js";import"../chunks/DixtWtwq.js";import{b9 as U,y as S,ar as K,$ as R,_ as V,h as Q,Y as Z,aq as J,am as E,ba as q,bb as X,o as d,bc as ee,af as ae,c,aR as k,r as o,p as P,a5 as N,a as M,a4 as A,s as f,t as T,ai as se,Z as te,ak as re}from"../chunks/BTUA7_xE.js";import{h as ne}from"../chunks/cDW0xQNP.js";import{R as le}from"../chunks/DCD6_LXk.js";import{e as $}from"../chunks/25_y8TFd.js";import{r as ie,a as oe,s as de,b as ce}from"../chunks/B0XoTt7U.js";import{g as B}from"../chunks/CJeJVIjP.js";import{b as ve,_ as pe}from"../chunks/CXQd8Y6F.js";import{P as fe}from"../chunks/D907np-5.js";function ue(e,s,r=s){var t=new WeakSet;U(e,"input",async a=>{var n=a?e.defaultValue:e.value;if(n=L(e)?C(n):n,r(n),S!==null&&t.add(S),await K(),n!==(n=s())){var u=e.selectionStart,l=e.selectionEnd,v=e.value.length;if(e.value=n??"",l!==null){var i=e.value.length;u===l&&l===v&&i>v?(e.selectionStart=i,e.selectionEnd=i):(e.selectionStart=u,e.selectionEnd=Math.min(l,i))}}}),(Q&&e.defaultValue!==e.value||R(s)==null&&e.value)&&(r(L(e)?C(e.value):e.value),S!==null&&t.add(S)),V(()=>{var a=s();if(e===document.activeElement){var n=S;if(t.has(n))return}L(e)&&a===C(e.value)||e.type==="date"&&!a&&!e.value||a!==e.value&&(e.value=a??"")})}function L(e){var s=e.type;return s==="number"||s==="range"}function C(e){return e===""?null:+e}function me(e=!1){const s=Z,r=s.l.u;if(!r)return;let t=()=>ee(s.s);if(e){let a=0,n={};const u=ae(()=>{let l=!1;const v=s.s;for(const i in v)v[i]!==n[i]&&(n[i]=v[i],l=!0);return l&&a++,a});t=()=>d(u)}r.b.length&&J(()=>{H(s,t),q(r.b)}),E(()=>{const a=R(()=>r.m.map(X));return()=>{for(const n of a)typeof n=="function"&&n()}}),r.a.length&&E(()=>{H(s,t),q(r.a)})}function H(e,s){if(e.l.s)for(const r of e.l.s)d(r);s()}var we=w('<header class="land-header svelte-1ct2rgk"><span class="riprap-wordmark"><!>riprap</span> <span class="land-header-sep svelte-1ct2rgk">/</span> <span class="land-header-context svelte-1ct2rgk">Flood Exposure Briefing · NYC</span> <nav class="land-header-nav svelte-1ct2rgk"><a href="#methodology" class="svelte-1ct2rgk">Methodology</a> <a href="#sources" class="svelte-1ct2rgk">Sources</a></nav></header>');function he(e){var s=we(),r=c(s),t=c(r);le(t,{size:22}),k(),o(r),k(6),o(s),m(e,s)}var ye=w("<span> </span>"),ge=w('<main class="land-hero svelte-drzq4r"><h1 class="land-hero-h1 svelte-drzq4r"><span class="land-hero-headline svelte-drzq4r">A flood exposure briefing<br/> for <em class="svelte-drzq4r">any place</em> in New York City.</span> <span class="land-hero-deck svelte-drzq4r">Type an address. Get a written briefing where every numeric claim links to its primary public-record source.</span></h1> <form class="land-query svelte-drzq4r" role="search"><span class="land-query-prompt svelte-drzq4r" aria-hidden="true">›</span> <input type="text" placeholder="Address, neighborhood, or BBL. e.g. 80 Pioneer Street, Red Hook" class="land-query-input svelte-drzq4r" aria-label="Query an address, neighborhood, or BBL"/> <button type="submit" class="land-query-submit svelte-drzq4r">Brief this place →</button></form> <div class="land-cycling svelte-drzq4r" aria-live="polite"><span class="land-cycling-label svelte-drzq4r">Try:</span> <button type="button" class="land-cycling-rail svelte-drzq4r" title="Run this example"></button></div></main>');function je(e,s){P(s,!0);const r=["80 Pioneer Street, Red Hook","Coney Island Hospital","PS 188, Lower East Side","Hammels Houses, Rockaway","Bowling Green station","555 W 57th Street"];let t=A(""),a=A(0);E(()=>{if(typeof window>"u")return;const p=setInterval(()=>{N(a,(d(a)+1)%r.length)},2200);return()=>clearInterval(p)});function n(){const p=d(t).trim();p&&B(`/q/${encodeURIComponent(p)}`)}function u(){const p=r[d(a)];B(`/q/${encodeURIComponent(p)}`)}var l=ge(),v=f(c(l),2),i=f(c(v),2);ie(i),k(2),o(v);var j=f(v,2),y=f(c(j),2);$(y,22,()=>r,p=>p,(p,b,F)=>{var h=ye();let x;var _=c(h,!0);o(h),T(()=>{x=oe(h,1,"land-cycling-item svelte-drzq4r",null,x,{"is-active":d(F)===d(a)}),de(h,"aria-hidden",d(F)!==d(a)),g(_,b)}),m(p,h)}),o(y),o(j),o(l),I("submit",v,p=>{p.preventDefault(),n()}),ue(i,()=>d(t),p=>N(t,p)),G("click",y,u),m(e,l),M()}D(["click"]);var be=w('<div class="land-mapmini svelte-1g1r73s" role="img" aria-label="Live mini-map preview of Red Hook flood exposure layers"><div class="land-mapmini-canvas svelte-1g1r73s"></div> <div class="land-mapmini-legend svelte-1g1r73s"><span class="svelte-1g1r73s"><span class="lm-sw lm-sw-emp svelte-1g1r73s"></span>empirical</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-mod svelte-1g1r73s"></span>modeled</span> <span class="svelte-1g1r73s"><span class="lm-sw lm-sw-prx svelte-1g1r73s"></span>proxy</span></div></div>');function _e(e,s){P(s,!0);const r=[-74.0096,40.6776];let t=A(null),a=null;se(()=>{let l=!1;return(async()=>{if(!d(t)||l)return;const v=await pe(()=>import("../chunks/D4L2lGt1.js").then(i=>i.m),[],import.meta.url);l||!d(t)||(a=new v.Map({container:d(t),style:fe,center:r,zoom:14.5,interactive:!1,attributionControl:!1}),a.on("load",()=>{a&&(a.addSource("fema-ae",{type:"geojson",data:{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]}}),a.addLayer({id:"fema-ae-fill",type:"fill",source:"fema-ae",paint:{"fill-color":"#2A6FA8","fill-opacity":.22}}),a.addLayer({id:"fema-ae-line",type:"line",source:"fema-ae",paint:{"line-color":"#2A6FA8","line-width":1,"line-dasharray":[3,2]}}),a.addSource("hwm-contour",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[[-74.0125,40.679],[-74.0105,40.6792],[-74.008,40.679],[-74.006,40.6786]]}}}),a.addLayer({id:"hwm-contour-line",type:"line",source:"hwm-contour",paint:{"line-color":"#0B5394","line-width":1.4}}),a.addSource("proxy-311",{type:"geojson",data:{type:"FeatureCollection",features:[[-74.0118,40.677],[-74.0114,40.6767],[-74.0121,40.6772]].map(i=>({type:"Feature",properties:{},geometry:{type:"Point",coordinates:i}}))}}),a.addLayer({id:"proxy-311-circle",type:"circle",source:"proxy-311",paint:{"circle-radius":3,"circle-color":"transparent","circle-stroke-color":"#6B6B6B","circle-stroke-width":1}}),a.addSource("floodnet",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[-74.0103,40.6788]}}}),a.addLayer({id:"floodnet-pin",type:"circle",source:"floodnet",paint:{"circle-radius":4,"circle-color":"#0B5394","circle-stroke-color":"#FFFFFF","circle-stroke-width":1}}),a.addSource("addr",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"Point",coordinates:r}}}),a.addLayer({id:"addr-ring",type:"circle",source:"addr",paint:{"circle-radius":9,"circle-color":"transparent","circle-stroke-color":"#0F172A","circle-stroke-width":1.4}}),a.addLayer({id:"addr-dot",type:"circle",source:"addr",paint:{"circle-radius":3,"circle-color":"#0F172A"}}))}))})(),()=>{l=!0,a&&(a.remove(),a=null)}});var n=be(),u=c(n);ve(u,l=>N(t,l),()=>d(t)),k(2),o(n),m(e,n),M()}var Se=w(`<section class="land-section svelte-1anw2jf"><div class="land-section-head svelte-1anw2jf"><span class="section-label">What you'll get back</span> <span class="land-section-meta svelte-1anw2jf">A grounded paragraph with citations, not a chatbot answer.</span></div> <div class="land-preview-grid svelte-1anw2jf"><div class="land-preview-pane land-preview-pane-excerpt svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Briefing excerpt</div> <p class="land-preview-body svelte-1anw2jf">The lot sits inside the FEMA <span class="land-preview-cite svelte-1anw2jf">1% AE flood zone <sup class="svelte-1anw2jf">[c3]</sup></span>,
2
  with Sandy high-water marks recorded <span class="land-preview-cite svelte-1anw2jf">4.7 ft above grade <sup class="svelte-1anw2jf">[c1]</sup></span>.
3
  FloodNet FN-BK-018 has logged <span class="land-preview-cite svelte-1anw2jf">14 nuisance floods since 2023 <sup class="svelte-1anw2jf">[c2]</sup></span>.</p> <div class="land-preview-cites svelte-1anw2jf"><div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c1]</span> <span class="land-preview-cite-src svelte-1anw2jf">USGS HWM · Sandy 2012</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c2]</span> <span class="land-preview-cite-src svelte-1anw2jf">FloodNet FN-BK-018</span> <span class="land-preview-cite-tier svelte-1anw2jf">empirical</span></div> <div class="land-preview-cite-row svelte-1anw2jf"><span class="land-preview-cite-pin svelte-1anw2jf">[c3]</span> <span class="land-preview-cite-src svelte-1anw2jf">FEMA NFHL · 36047C0207</span> <span class="land-preview-cite-tier svelte-1anw2jf">modeled</span></div></div></div> <div class="land-preview-pane land-preview-pane-cards svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Evidence cards</div> <div class="land-evcard-grid svelte-1anw2jf"><article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e1</span></header> <div class="land-evcard-claim svelte-1anw2jf">4.7 ft Sandy storm-surge HWM at address</div> <div class="land-evcard-source svelte-1anw2jf">USGS High-Water Mark database · 2012</div></article> <article class="land-evcard land-evcard-empirical svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">empirical</span> <span class="land-evcard-id svelte-1anw2jf">e2</span></header> <div class="land-evcard-claim svelte-1anw2jf">14 nuisance-flood events, 2023–2026</div> <div class="land-evcard-source svelte-1anw2jf">FloodNet FN-BK-018 · 2 blocks north</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e3</span></header> <div class="land-evcard-claim svelte-1anw2jf">FEMA 1% annual-chance (AE) flood zone</div> <div class="land-evcard-source svelte-1anw2jf">FEMA NFHL · panel 36047C0207</div></article> <article class="land-evcard land-evcard-modeled svelte-1anw2jf"><header class="land-evcard-head svelte-1anw2jf"><span class="land-evcard-tier svelte-1anw2jf">modeled</span> <span class="land-evcard-id svelte-1anw2jf">e5</span></header> <div class="land-evcard-claim svelte-1anw2jf">+30 in MSL by 2070 (NPCC4 high)</div> <div class="land-evcard-source svelte-1anw2jf">NPCC4 SLR projection · 2024</div></article></div></div> <div class="land-preview-pane land-preview-pane-map svelte-1anw2jf"><div class="land-preview-eyebrow svelte-1anw2jf">Map</div> <!> <div class="land-preview-mapmeta svelte-1anw2jf">80 Pioneer St, Red Hook · z14.5 · Carto Positron</div></div></div></section>`);function ke(e){var s=Se(),r=f(c(s),2),t=f(c(r),4),a=f(c(t),2);_e(a,{}),k(2),o(t),o(r),o(s),m(e,s)}var Fe=w('<article class="land-stones-detail-cell svelte-1v6nt1t"><div class="land-stones-detail-num svelte-1v6nt1t"> </div> <h3 class="land-stones-detail-name svelte-1v6nt1t"> </h3> <div class="land-stones-detail-role svelte-1v6nt1t"> </div> <p class="land-stones-detail-tag svelte-1v6nt1t"> </p> <div class="land-stones-detail-sources svelte-1v6nt1t"> </div></article>'),xe=w(`<section class="land-section-stones-detail svelte-1v6nt1t" id="methodology"><div class="land-page svelte-1v6nt1t"><div class="land-section-head svelte-1v6nt1t"><span class="section-label">How Riprap reads a place</span> <span class="land-section-meta svelte-1v6nt1t">Five Stones · one taxonomy · every briefing</span></div> <p class="land-stones-deck svelte-1v6nt1t">Each briefing routes through a fixed taxonomy of public-record specialists. Each Stone is a class of evidence.
4
  Together they form the briefing, and every claim in the output traces back to the Stone that produced it.</p> <div class="land-stones-detail svelte-1v6nt1t"></div></div></section>`);function Le(e,s){P(s,!1);const r=[{name:"Cornerstone",role:"the hazard reader",tag:"what NYC's ground remembers",sources:"USGS HWMs · FEMA NFHL · DEP stormwater · Prithvi historical",tint:"var(--stone-cornerstone)"},{name:"Keystone",role:"the asset register",tag:"what's exposed",sources:"MTA · NYCHA · DOE · DOH · PLUTO",tint:"var(--stone-keystone)"},{name:"Touchstone",role:"the live observer",tag:"what's happening now",sources:"FloodNet sensors · 311 complaints · NWS · NOAA tide gauges",tint:"var(--stone-touchstone)"},{name:"Lodestone",role:"the projector",tag:"what's coming",sources:"NPCC4 · Granite TTM (zero-shot + NYC fine-tune) · NWS alerts",tint:"var(--stone-lodestone)"},{name:"Capstone",role:"the synthesizer",tag:"writes it all down",sources:"Granite 4.1 composer · Mellea grounding-check · WeasyPrint",tint:"var(--stone-capstone)"}];me();var t=xe(),a=c(t),n=f(c(a),4);$(n,7,()=>r,u=>u.name,(u,l,v)=>{var i=Fe();let j;var y=c(i),p=c(y,!0);o(y);var b=f(y,2),F=c(b,!0);o(b);var h=f(b,2),x=c(h,!0);o(h);var _=f(h,2),O=c(_,!0);o(_);var z=f(_,2),W=c(z,!0);o(z),o(i),T(Y=>{j=ce(i,"",j,{"--stone-tint":d(l).tint}),g(p,Y),g(F,d(l).name),g(x,d(l).role),g(O,d(l).tag),g(W,d(l).sources)},[()=>String(d(v)+1).padStart(2,"0")]),m(u,i)}),o(n),o(a),o(t),m(e,t),M()}var Ce=w('<footer class="land-footer svelte-1dcj612"><span class="land-footer-tiers svelte-1dcj612"><span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-emp svelte-1dcj612"></span>empirical</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-mod svelte-1dcj612"></span>modeled</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-prx svelte-1dcj612"></span>proxy</span> <span class="land-footer-tier svelte-1dcj612"><span class="lm-sw lm-sw-syn svelte-1dcj612"></span>synthetic</span></span> <span class="land-footer-build">Riprap v0.4.6 · NYC OpenData · FEMA NFHL · USGS · NPCC4 · Dam mark by Chintuza, Noun Project (CC-BY)</span></footer>');function Ee(e){var s=Ce();m(e,s)}var Ne=w('<meta name="description" content="A citation-grounded flood-exposure briefing tool for any address, neighborhood, or BBL in New York City."/>'),Ae=w('<div class="land svelte-1uha8ag"><!> <div class="land-page svelte-1uha8ag"><!> <!></div> <!> <!></div>');function We(e){var s=Ae();ne("1uha8ag",v=>{var i=Ne();te(()=>{re.title="Riprap — Flood Exposure Briefing for NYC"}),m(v,i)});var r=c(s);he(r);var t=f(r,2),a=c(t);je(a,{});var n=f(a,2);ke(n),o(t);var u=f(t,2);Le(u,{});var l=f(u,2);Ee(l),o(s),m(e,s)}export{We as component};
web/sveltekit/build/_app/immutable/nodes/{3.Bi9lYhtb.js → 3.0RkbXXD4.js} RENAMED
@@ -1,4 +1,4 @@
1
- import{d as ge,c as he,a as v,s as l,e as xe,f as p}from"../chunks/CWw6qgC_.js";import{p as ye,ai as we,f as $e,a as ke,aj as qe,o as e,a5 as F,ak as je,al as d,a4 as I,c as a,s,r as t,t as M}from"../chunks/BTUA7_xE.js";import{i as O}from"../chunks/Bd-v_9Ud.js";import{e as Se}from"../chunks/25_y8TFd.js";import{h as Fe}from"../chunks/cDW0xQNP.js";import{p as Ie}from"../chunks/nUW4eUox.js";import{B as Me,T as Oe}from"../chunks/BatqQaKj.js";import{l as Te}from"../chunks/DxQlA7U2.js";const Pe=!1,Re=!1,Ue=Object.freeze(Object.defineProperty({__proto__:null,prerender:Pe,ssr:Re},Symbol.toStringTag,{value:"Module"}));var Ae=p(`<div class="empty svelte-uialbm"><h1 class="svelte-uialbm">No briefing snapshot found</h1> <p>Run a briefing first at <a href="/" class="svelte-uialbm">riprap home</a>; once it finishes,
2
  use <strong>export PDF</strong> from the header to open this view.
3
  Snapshots are stored per-browser and persist between runs of the same query.</p></div>`),Be=p('<div class="curl svelte-uialbm"> </div>'),De=p('<li class="svelte-uialbm"><span class="cn svelte-uialbm"> </span> <span class="cglyph svelte-uialbm"><!></span> <span class="csrc svelte-uialbm"> </span> <span class="cvint svelte-uialbm"> </span> <div class="ctitle svelte-uialbm"> </div> <!> <div class="cdocid svelte-uialbm">doc_id <code> </code></div></li>'),Ge=p('<section class="print-citations svelte-uialbm"><h2 class="svelte-uialbm">Citations</h2> <ol class="svelte-uialbm"></ol></section>'),ze=p('<article class="print-doc svelte-uialbm"><header class="print-head svelte-uialbm"><div class="print-head-top svelte-uialbm"><span class="wordmark svelte-uialbm">riprap</span> <span class="meta"> </span></div> <h1 class="print-title svelte-uialbm"> </h1> <div class="print-sub svelte-uialbm">intent <strong> </strong> </div></header> <div class="print-controls no-print svelte-uialbm"><button type="button" class="svelte-uialbm">print / save as PDF</button> <span class="hint svelte-uialbm"> </span></div> <!> <!> <footer class="print-foot svelte-uialbm"> </footer></article>'),Le=p('<div class="empty svelte-uialbm"><p>Loading…</p></div>');function Ve(Q,U){ye(U,!0);let V=d(()=>Ie.params.queryId??""),i=I(null),T=I(!1),P=I(!1);we(()=>{const r=Te(e(V));if(!r){F(T,!0);return}F(i,r,!0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{typeof window<"u"&&(window.print(),F(P,!0))})})});function X(){typeof window<"u"&&window.print()}let R=d(()=>e(i)?Object.values(e(i).citations).sort((r,n)=>r.n-n.n):[]),A=d(()=>e(i)?new Date(e(i).generatedAt).toISOString().slice(0,10):"");var B=he();Fe("uialbm",r=>{qe(()=>{var n;je.title=`Riprap briefing — ${((n=e(i))==null?void 0:n.queryText)??"export"??""}`})});var Y=$e(B);{var Z=r=>{var n=Ae();v(r,n)},ee=r=>{var n=ze(),c=a(n),u=a(c),D=s(a(u),2),ae=a(D);t(D),t(u);var m=s(u,2),se=a(m,!0);t(m);var G=s(m,2),f=s(a(G)),re=a(f,!0);t(f);var ie=s(f);t(G),t(c);var b=s(c,2),z=a(b),L=s(z,2),ne=a(L,!0);t(L),t(b);var N=s(b,2);Me(N,{get blocks(){return e(i).blocks},get citations(){return e(i).citations},streaming:!1});var C=s(N,2);{var le=_=>{var g=Ge(),W=s(a(g),2);Se(W,21,()=>e(R),h=>h.id,(h,o)=>{var x=De(),y=a(x),ve=a(y);t(y);var w=s(y,2),pe=a(w);Oe(pe,{get tier(){return e(o).tier},size:9,get color(){return`var(--tier-${e(o).tier??""})`}}),t(w);var $=s(w,2),de=a($,!0);t($);var k=s($,2),ce=a(k);t(k);var q=s(k,2),ue=a(q,!0);t(q);var H=s(q,2);{var me=j=>{var S=Be(),_e=a(S,!0);t(S),M(()=>l(_e,e(o).url)),v(j,S)},fe=d(()=>e(o).url&&e(o).url.startsWith("http"));O(H,j=>{e(fe)&&j(me)})}var J=s(H,2),K=s(a(J)),be=a(K,!0);t(K),t(J),t(x),M(()=>{l(ve,`[${e(o).n??""}]`),l(de,e(o).source),l(ce,`v. ${e(o).vintage??""}`),l(ue,e(o).title),l(be,e(o).docId)}),v(h,x)}),t(W),t(g),v(_,g)};O(C,_=>{e(R).length&&_(le)})}var E=s(C,2),oe=a(E);t(E),t(n),M(()=>{l(ae,`flood-exposure briefing · v0.4.2 · ${e(A)??""}`),l(se,e(i).queryText),l(re,e(i).intent??"briefing"),l(ie,` · ${e(i).specialists??""} specialists
4
  · ${e(i).attempts??1??""} reconcile${(e(i).attempts??1)===1?"":"s"}
 
1
+ import{d as ge,c as he,a as v,s as l,e as xe,f as p}from"../chunks/CWw6qgC_.js";import{p as ye,ai as we,f as $e,a as ke,aj as qe,o as e,a5 as F,ak as je,al as d,a4 as I,c as a,s,r as t,t as M}from"../chunks/BTUA7_xE.js";import{i as O}from"../chunks/Bd-v_9Ud.js";import{e as Se}from"../chunks/25_y8TFd.js";import{h as Fe}from"../chunks/cDW0xQNP.js";import{p as Ie}from"../chunks/B3Pg95Il.js";import{B as Me,T as Oe}from"../chunks/BatqQaKj.js";import{l as Te}from"../chunks/DxQlA7U2.js";const Pe=!1,Re=!1,Ue=Object.freeze(Object.defineProperty({__proto__:null,prerender:Pe,ssr:Re},Symbol.toStringTag,{value:"Module"}));var Ae=p(`<div class="empty svelte-uialbm"><h1 class="svelte-uialbm">No briefing snapshot found</h1> <p>Run a briefing first at <a href="/" class="svelte-uialbm">riprap home</a>; once it finishes,
2
  use <strong>export PDF</strong> from the header to open this view.
3
  Snapshots are stored per-browser and persist between runs of the same query.</p></div>`),Be=p('<div class="curl svelte-uialbm"> </div>'),De=p('<li class="svelte-uialbm"><span class="cn svelte-uialbm"> </span> <span class="cglyph svelte-uialbm"><!></span> <span class="csrc svelte-uialbm"> </span> <span class="cvint svelte-uialbm"> </span> <div class="ctitle svelte-uialbm"> </div> <!> <div class="cdocid svelte-uialbm">doc_id <code> </code></div></li>'),Ge=p('<section class="print-citations svelte-uialbm"><h2 class="svelte-uialbm">Citations</h2> <ol class="svelte-uialbm"></ol></section>'),ze=p('<article class="print-doc svelte-uialbm"><header class="print-head svelte-uialbm"><div class="print-head-top svelte-uialbm"><span class="wordmark svelte-uialbm">riprap</span> <span class="meta"> </span></div> <h1 class="print-title svelte-uialbm"> </h1> <div class="print-sub svelte-uialbm">intent <strong> </strong> </div></header> <div class="print-controls no-print svelte-uialbm"><button type="button" class="svelte-uialbm">print / save as PDF</button> <span class="hint svelte-uialbm"> </span></div> <!> <!> <footer class="print-foot svelte-uialbm"> </footer></article>'),Le=p('<div class="empty svelte-uialbm"><p>Loading…</p></div>');function Ve(Q,U){ye(U,!0);let V=d(()=>Ie.params.queryId??""),i=I(null),T=I(!1),P=I(!1);we(()=>{const r=Te(e(V));if(!r){F(T,!0);return}F(i,r,!0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{typeof window<"u"&&(window.print(),F(P,!0))})})});function X(){typeof window<"u"&&window.print()}let R=d(()=>e(i)?Object.values(e(i).citations).sort((r,n)=>r.n-n.n):[]),A=d(()=>e(i)?new Date(e(i).generatedAt).toISOString().slice(0,10):"");var B=he();Fe("uialbm",r=>{qe(()=>{var n;je.title=`Riprap briefing — ${((n=e(i))==null?void 0:n.queryText)??"export"??""}`})});var Y=$e(B);{var Z=r=>{var n=Ae();v(r,n)},ee=r=>{var n=ze(),c=a(n),u=a(c),D=s(a(u),2),ae=a(D);t(D),t(u);var m=s(u,2),se=a(m,!0);t(m);var G=s(m,2),f=s(a(G)),re=a(f,!0);t(f);var ie=s(f);t(G),t(c);var b=s(c,2),z=a(b),L=s(z,2),ne=a(L,!0);t(L),t(b);var N=s(b,2);Me(N,{get blocks(){return e(i).blocks},get citations(){return e(i).citations},streaming:!1});var C=s(N,2);{var le=_=>{var g=Ge(),W=s(a(g),2);Se(W,21,()=>e(R),h=>h.id,(h,o)=>{var x=De(),y=a(x),ve=a(y);t(y);var w=s(y,2),pe=a(w);Oe(pe,{get tier(){return e(o).tier},size:9,get color(){return`var(--tier-${e(o).tier??""})`}}),t(w);var $=s(w,2),de=a($,!0);t($);var k=s($,2),ce=a(k);t(k);var q=s(k,2),ue=a(q,!0);t(q);var H=s(q,2);{var me=j=>{var S=Be(),_e=a(S,!0);t(S),M(()=>l(_e,e(o).url)),v(j,S)},fe=d(()=>e(o).url&&e(o).url.startsWith("http"));O(H,j=>{e(fe)&&j(me)})}var J=s(H,2),K=s(a(J)),be=a(K,!0);t(K),t(J),t(x),M(()=>{l(ve,`[${e(o).n??""}]`),l(de,e(o).source),l(ce,`v. ${e(o).vintage??""}`),l(ue,e(o).title),l(be,e(o).docId)}),v(h,x)}),t(W),t(g),v(_,g)};O(C,_=>{e(R).length&&_(le)})}var E=s(C,2),oe=a(E);t(E),t(n),M(()=>{l(ae,`flood-exposure briefing · v0.4.2 · ${e(A)??""}`),l(se,e(i).queryText),l(re,e(i).intent??"briefing"),l(ie,` · ${e(i).specialists??""} specialists
4
  · ${e(i).attempts??1??""} reconcile${(e(i).attempts??1)===1?"":"s"}
web/sveltekit/build/_app/immutable/nodes/3.KbM-URMV.js DELETED
@@ -1,7 +0,0 @@
1
- import{d as ge,c as he,a as v,s as l,e as xe,f as p}from"../chunks/CWw6qgC_.js";import{p as ye,ai as we,f as $e,a as ke,aj as qe,o as e,a5 as F,ak as je,al as d,a4 as I,c as a,s,r as t,t as M}from"../chunks/BTUA7_xE.js";import{i as O}from"../chunks/Bd-v_9Ud.js";import{e as Se}from"../chunks/25_y8TFd.js";import{h as Fe}from"../chunks/cDW0xQNP.js";import{p as Ie}from"../chunks/DlifwAOf.js";import{B as Me,T as Oe}from"../chunks/BatqQaKj.js";import{l as Te}from"../chunks/DxQlA7U2.js";const Pe=!1,Re=!1,Ue=Object.freeze(Object.defineProperty({__proto__:null,prerender:Pe,ssr:Re},Symbol.toStringTag,{value:"Module"}));var Ae=p(`<div class="empty svelte-uialbm"><h1 class="svelte-uialbm">No briefing snapshot found</h1> <p>Run a briefing first at <a href="/" class="svelte-uialbm">riprap home</a>; once it finishes,
2
- use <strong>export PDF</strong> from the header to open this view.
3
- Snapshots are stored per-browser and persist between runs of the same query.</p></div>`),Be=p('<div class="curl svelte-uialbm"> </div>'),De=p('<li class="svelte-uialbm"><span class="cn svelte-uialbm"> </span> <span class="cglyph svelte-uialbm"><!></span> <span class="csrc svelte-uialbm"> </span> <span class="cvint svelte-uialbm"> </span> <div class="ctitle svelte-uialbm"> </div> <!> <div class="cdocid svelte-uialbm">doc_id <code> </code></div></li>'),Ge=p('<section class="print-citations svelte-uialbm"><h2 class="svelte-uialbm">Citations</h2> <ol class="svelte-uialbm"></ol></section>'),ze=p('<article class="print-doc svelte-uialbm"><header class="print-head svelte-uialbm"><div class="print-head-top svelte-uialbm"><span class="wordmark svelte-uialbm">riprap</span> <span class="meta"> </span></div> <h1 class="print-title svelte-uialbm"> </h1> <div class="print-sub svelte-uialbm">intent <strong> </strong> </div></header> <div class="print-controls no-print svelte-uialbm"><button type="button" class="svelte-uialbm">print / save as PDF</button> <span class="hint svelte-uialbm"> </span></div> <!> <!> <footer class="print-foot svelte-uialbm"> </footer></article>'),Le=p('<div class="empty svelte-uialbm"><p>Loading…</p></div>');function Ve(Q,U){ye(U,!0);let V=d(()=>Ie.params.queryId??""),i=I(null),T=I(!1),P=I(!1);we(()=>{const r=Te(e(V));if(!r){F(T,!0);return}F(i,r,!0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{typeof window<"u"&&(window.print(),F(P,!0))})})});function X(){typeof window<"u"&&window.print()}let R=d(()=>e(i)?Object.values(e(i).citations).sort((r,n)=>r.n-n.n):[]),A=d(()=>e(i)?new Date(e(i).generatedAt).toISOString().slice(0,10):"");var B=he();Fe("uialbm",r=>{qe(()=>{var n;je.title=`Riprap briefing — ${((n=e(i))==null?void 0:n.queryText)??"export"??""}`})});var Y=$e(B);{var Z=r=>{var n=Ae();v(r,n)},ee=r=>{var n=ze(),c=a(n),u=a(c),D=s(a(u),2),ae=a(D);t(D),t(u);var m=s(u,2),se=a(m,!0);t(m);var G=s(m,2),f=s(a(G)),re=a(f,!0);t(f);var ie=s(f);t(G),t(c);var b=s(c,2),z=a(b),L=s(z,2),ne=a(L,!0);t(L),t(b);var N=s(b,2);Me(N,{get blocks(){return e(i).blocks},get citations(){return e(i).citations},streaming:!1});var C=s(N,2);{var le=_=>{var g=Ge(),W=s(a(g),2);Se(W,21,()=>e(R),h=>h.id,(h,o)=>{var x=De(),y=a(x),ve=a(y);t(y);var w=s(y,2),pe=a(w);Oe(pe,{get tier(){return e(o).tier},size:9,get color(){return`var(--tier-${e(o).tier??""})`}}),t(w);var $=s(w,2),de=a($,!0);t($);var k=s($,2),ce=a(k);t(k);var q=s(k,2),ue=a(q,!0);t(q);var H=s(q,2);{var me=j=>{var S=Be(),_e=a(S,!0);t(S),M(()=>l(_e,e(o).url)),v(j,S)},fe=d(()=>e(o).url&&e(o).url.startsWith("http"));O(H,j=>{e(fe)&&j(me)})}var J=s(H,2),K=s(a(J)),be=a(K,!0);t(K),t(J),t(x),M(()=>{l(ve,`[${e(o).n??""}]`),l(de,e(o).source),l(ce,`v. ${e(o).vintage??""}`),l(ue,e(o).title),l(be,e(o).docId)}),v(h,x)}),t(W),t(g),v(_,g)};O(C,_=>{e(R).length&&_(le)})}var E=s(C,2),oe=a(E);t(E),t(n),M(()=>{l(ae,`flood-exposure briefing · v0.4.2 · ${e(A)??""}`),l(se,e(i).queryText),l(re,e(i).intent??"briefing"),l(ie,` · ${e(i).specialists??""} specialists
4
- · ${e(i).attempts??1??""} reconcile${(e(i).attempts??1)===1?"":"s"}
5
- · grounded by Mellea rejection sampling`),l(ne,e(P)?"Print dialog opened. Re-print anytime.":"Opening print dialog…"),l(oe,`Generated ${e(A)??""} ·
6
- Riprap is grounded by Mellea rejection sampling over IBM Granite 4.1.
7
- Numbers without bracketed citations are not present in source documents.`)}),xe("click",z,X),v(r,n)},te=r=>{var n=Le();v(r,n)};O(Y,r=>{e(T)?r(Z):e(i)?r(ee,1):r(te,-1)})}v(Q,B),ke()}ge(["click"]);export{Ve as component,Ue as universal};
 
 
 
 
 
 
 
 
web/sveltekit/build/_app/immutable/nodes/4.Cjv2wdud.js DELETED
@@ -1 +0,0 @@
1
- import{s as H,a as T,f as I,d as dt,c as un,e as pn,t as rt}from"../chunks/CWw6qgC_.js";import{p as zt,c as g,o as n,s as $,f as we,r as h,t as X,al as ie,a as Bt,aR as ut,a4 as S,a9 as oe,am as ye,a5 as _,ai as mn}from"../chunks/BTUA7_xE.js";import{i as V}from"../chunks/Bd-v_9Ud.js";import{p as _n}from"../chunks/nUW4eUox.js";import{t as Ot,B as Dt,T as Rt,a as fn}from"../chunks/BatqQaKj.js";import{e as Pe,i as lt}from"../chunks/25_y8TFd.js";import{p as ze}from"../chunks/CW0zSL4D.js";import{f as vn,C as hn,F as gn,R as it,M as yn}from"../chunks/CFg_rPYf.js";import"../chunks/DixtWtwq.js";import{b as be,a as at,s as bn}from"../chunks/B0XoTt7U.js";import{b as J,p as wn}from"../chunks/DxQlA7U2.js";const xn=!1,An=!1,Wr=Object.freeze(Object.defineProperty({__proto__:null,prerender:xn,ssr:An},Symbol.toStringTag,{value:"Module"})),Yt=[{key:"status",label:"Status",n:"01",aliases:["status"]},{key:"empirical",label:"Empirical evidence",n:"02",tier:"empirical",aliases:["empirical evidence","empirical"]},{key:"modeled",label:"Modeled scenarios",n:"03",tier:"modeled",aliases:["modeled scenarios","modeled"]},{key:"policy",label:"Policy context",n:"04",aliases:["policy context","policy"]}];function Mt(r){const e=r.toLowerCase().replace(/[.:]+\s*$/,"").trim();return Yt.find(t=>t.aliases.includes(e))}const jt=/(^|\n)\s*(?:\*\*([A-Z][A-Za-z\s/]+?)\.\s*\*\*|#{1,3}\s*(0[1-4])\s*[:\-—.]?\s*([^\n]+))/g;function Ht(r,e,t){return{id:e,n:r,tier:Ot(e),source:(t==null?void 0:t.source)??e.split(/[_-]/)[0].toUpperCase(),title:(t==null?void 0:t.title)??e,docId:e,url:(t==null?void 0:t.url)??"",vintage:(t==null?void 0:t.vintage)??"",retrieved:(t==null?void 0:t.retrieved)??""}}const Sn=/\[([a-z][a-z0-9_]*(?:\s*,\s*[a-z][a-z0-9_]*)*)\]/gi;function Lt(r){return r.split(new RegExp("(?<=[.!?])\\s+(?=[A-Z(])","g")).filter(t=>t.trim().length>0)}function Et(r,e,t){let a=0;const s=[],u=[...r.matchAll(Sn)];if(u.length===0)return[{text:r}];for(const o of u){const m=r.slice(a,o.index??0),x=o[1].split(/\s*,\s*/).filter(Boolean);a=(o.index??0)+o[0].length;const l=Ot(x[0]);s.push({text:m,tier:l,cite:x[0]});for(const p of x)e[p]||(e[p]=t(p))}if(a<r.length){const o=r.slice(a);o.trim()&&s.push({text:o})}return s}function ct(r,e={}){const t={...e};let a=Object.values(t).reduce((l,p)=>Math.max(l,p.n),0)+1;const s=new Set,u=l=>(e[l]||s.add(l),Ht(a++,l)),o=[],m=[];let x;for(jt.lastIndex=0;x=jt.exec(r);)if(x[2]!==void 0){const l=Mt(x[2]);if(!l)continue;m.push({num:l.n,label:l.label,tier:l.tier,start:x.index+x[1].length,bodyStart:x.index+x[0].length})}else if(x[3]!==void 0){const l=x[3],p=(x[4]??"").trim(),A=Yt.find(L=>L.n===l)??Mt(p);m.push({num:l,label:(A==null?void 0:A.label)??p,tier:A==null?void 0:A.tier,titleExtra:A&&p.toLowerCase()!==A.label.toLowerCase()?p:void 0,start:x.index+x[1].length,bodyStart:x.index+x[0].length})}for(let l=0;l<m.length;l++){const p=m[l],A=m[l+1],L=r.slice(p.bodyStart,A?A.start:r.length).trim();if(L){o.push({kind:"head",n:p.num,label:p.label,tier:p.tier,title:p.titleExtra});for(const K of L.split(/\n\s*\n/)){const Y=K.replace(/\s+/g," ").trim();if(!Y)continue;const ee=Lt(Y),b=[];for(const z of ee)b.push(...Et(z,t,u)),b.push({text:" "});for(;b.length&&b[b.length-1].text.trim()===""&&!b[b.length-1].tier;)b.pop();b.length&&o.push({kind:"prose",parts:b})}}}if(o.length===0&&r.trim()){o.push({kind:"head",n:"01",label:"Status"});const l=r.replace(/\s+/g," ").trim(),p=Lt(l),A=[];for(const L of p)A.push(...Et(L,t,u)),A.push({text:" "});for(;A.length&&A[A.length-1].text.trim()===""&&!A[A.length-1].tier;)A.pop();A.length&&o.push({kind:"prose",parts:A})}return{blocks:o,citations:t,unresolvedDocIds:[...s]}}var kn=I('<span class="compare-delta-ctx svelte-rr14x0"> </span>'),Nn=I('<div class="compare-delta-row svelte-rr14x0"><span class="compare-delta-section svelte-rr14x0"> </span> <span class="compare-delta-claim svelte-rr14x0"><!> <strong class="compare-delta-a svelte-rr14x0"> </strong> <span class="compare-delta-vs svelte-rr14x0">vs</span> <strong class="compare-delta-b svelte-rr14x0"> </strong></span></div>'),Cn=I('<div class="compare-delta-bar svelte-rr14x0" aria-label="Key differences"><span class="compare-delta-title svelte-rr14x0">Key differences</span> <div class="compare-delta-rows svelte-rr14x0"></div></div>'),$n=I('<div class="compare-divider svelte-rr14x0" role="separator" aria-hidden="true"></div>'),qn=I('<div class="compare-col svelte-rr14x0"><h2 class="compare-address-header address-header svelte-rr14x0"> </h2> <!></div> <!>',1),Fn=I('<div class="compare-layout svelte-rr14x0"><!> <div class="compare-cols svelte-rr14x0"></div></div>');function Tn(r,e){zt(e,!0);let t=ze(e,"structuredA",19,()=>({})),a=ze(e,"structuredB",19,()=>({}));function s(b){return b.split(/\n\s*---\s*\n/,2).map((D,B)=>{var E,G;const j=/^##\s+PLACE\s+[AB]:\s+(.+?)(\n|$)/m.exec(D.trim()),U=((E=j==null?void 0:j[1])==null?void 0:E.trim())??((G=e.targets[B])==null?void 0:G.address)??`Place ${String.fromCharCode(65+B)}`,R=D.replace(/^##\s+PLACE\s+[AB]:\s+.+(\n|$)/m,"").trim();return{address:U,md:R}})}const u=ie(()=>s(e.paragraph)),o=ie(()=>{var b;return ct(((b=n(u)[0])==null?void 0:b.md)??"",e.citations)}),m=ie(()=>{var b;return ct(((b=n(u)[1])==null?void 0:b.md)??"",e.citations)}),x=ie(()=>({...e.citations,...n(o).citations,...n(m).citations}));function l(b,z,D){const B=b[z];if(!B||typeof B!="object")return;const j=B[D];return typeof j=="number"?j:void 0}function p(b,z,D){const B=b[z];if(!B||typeof B!="object")return;const j=B[D];return typeof j=="boolean"?j:void 0}const A=ie(()=>{const b=[],z=p(t(),"sandy_inundation","inside"),D=p(a(),"sandy_inundation","inside");z!==void 0&&D!==void 0&&z!==D&&b.push({label:"Sandy zone",ctx:"",aVal:z?"inside":"outside",bVal:D?"inside":"outside"});const B=l(t(),"nyc311","n"),j=l(a(),"nyc311","n");B!==void 0&&j!==void 0&&B!==j&&b.push({label:"311 complaints",ctx:"5 y",aVal:String(B),bVal:String(j)});const U=l(t(),"microtopo_lidar","elev_m"),R=l(a(),"microtopo_lidar","elev_m");U!==void 0&&R!==void 0&&Math.abs(U-R)>.5&&b.push({label:"Elevation",ctx:"",aVal:`${U.toFixed(1)} m`,bVal:`${R.toFixed(1)} m`});const E=l(t(),"floodnet","n_events_3y"),G=l(a(),"floodnet","n_events_3y");E!==void 0&&G!==void 0&&E!==G&&b.push({label:"Sensor events",ctx:"last 3 y",aVal:String(E),bVal:String(G)});const ne=l(t(),"ida_hwm_2021","max_height_above_gnd_ft"),Z=l(a(),"ida_hwm_2021","max_height_above_gnd_ft");return ne!==void 0&&Z!==void 0&&Math.abs(ne-Z)>.1&&b.push({label:"Ida 2021 HWM",ctx:"ft above gnd",aVal:`${ne.toFixed(2)} ft`,bVal:`${Z.toFixed(2)} ft`}),b.slice(0,4)});var L=Fn(),K=g(L);{var Y=b=>{var z=Cn(),D=$(g(z),2);Pe(D,21,()=>n(A),lt,(B,j)=>{var U=Nn(),R=g(U),E=g(R,!0);h(R);var G=$(R,2),ne=g(G);{var Z=he=>{var ge=kn(),Se=g(ge);h(ge),X(()=>H(Se,`${n(j).ctx??""}:`)),T(he,ge)};V(ne,he=>{n(j).ctx&&he(Z)})}var ce=$(ne,2),Ae=g(ce,!0);h(ce);var me=$(ce,4),Ue=g(me,!0);h(me),h(G),h(U),X(()=>{H(E,n(j).label),H(Ae,n(j).aVal),H(Ue,n(j).bVal)}),T(B,U)}),h(D),h(z),T(b,z)};V(K,b=>{n(A).length>0&&b(Y)})}var ee=$(K,2);Pe(ee,21,()=>n(u),lt,(b,z,D)=>{var B=qn(),j=we(B),U=g(j),R=g(U,!0);h(U);var E=$(U,2);{let Z=ie(()=>D===0?n(o).blocks:n(m).blocks);Dt(E,{get blocks(){return n(Z)},get citations(){return n(x)},streaming:!1})}h(j);var G=$(j,2);{var ne=Z=>{var ce=$n();T(Z,ce)};V(G,Z=>{D===0&&Z(ne)})}X(()=>H(R,n(u)[D].address)),T(b,B)}),h(ee),h(L),T(r,L),Bt()}dt(["click"]);dt(["click"]);var In=I('<div class="skeleton-section"><div class="skeleton-head"><span class="skeleton-num"> </span> <span class="skeleton-label"> </span> <span class="skeleton-spinner" aria-hidden="true">▍</span></div> <span class="skeleton-pulse"></span> <span class="skeleton-pulse"></span> <span class="skeleton-pulse"></span></div>'),Mn=I('<div class="skeleton-brief" role="status" aria-live="polite" aria-label="Loading briefing — geocode complete, dispatching specialists"><div class="skeleton-status"><span class="skeleton-pulse"></span> <span class="skeleton-pulse skeleton-pulse-meta"></span></div> <!></div>');function jn(r){const e=[{n:"01",label:"Status"},{n:"02",label:"Empirical evidence"},{n:"03",label:"Modeled scenarios"},{n:"04",label:"Policy context"}];var t=Mn(),a=g(t),s=g(a);be(s,"",{},{width:"62%"});var u=$(s,2);be(u,"",{},{width:"40%"}),h(a);var o=$(a,2);Pe(o,1,()=>e,m=>m.n,(m,x)=>{var l=In(),p=g(l),A=g(p),L=g(A,!0);h(A);var K=$(A,2),Y=g(K,!0);h(K),ut(2),h(p);var ee=$(p,2);be(ee,"",{},{width:"92%"});var b=$(ee,2);be(b,"",{},{width:"78%"});var z=$(b,2);be(z,"",{},{width:"85%"}),h(l),X(()=>{H(L,n(x).n),H(Y,n(x).label)}),T(m,l)}),h(t),T(r,t)}var Ln=I('<div class="reroll-banner" role="status" aria-live="polite"><!> <div class="reroll-body"><span class="reroll-head">Regenerating to satisfy citation grounding</span> <span class="reroll-sub"> </span></div> <span class="reroll-spinner" aria-hidden="true">↻</span></div>');function En(r,e){let t=ze(e,"attempt",3,2),a=ze(e,"max",3,3);var s=Ln(),u=g(s);Rt(u,{tier:"modeled",size:11,color:"var(--tier-modeled)"});var o=$(u,2),m=$(g(o),2),x=g(m);h(m),h(o),ut(2),h(s),X(()=>H(x,`Mellea reconciler · attempt ${t()??""} of ${a()??""} · previous draft dimmed below`)),T(r,s)}var Pn=I("<a> </a>"),zn=I('<button type="button"> </button>'),Bn=I('<article role="alert" aria-live="assertive"><header class="error-card-head"><!> <span class="error-card-eyebrow"> </span></header> <h3 class="error-card-headline"> </h3> <p class="error-card-body"> </p> <div class="error-card-actions"></div> <footer class="error-card-foot"><span class="section-label">Trust signals · still on</span> <span class="error-card-foot-copy">All foundation models Apache-2.0 · No commercial APIs at runtime</span></footer></article>');function On(r,e){const t={geocoder:{eyebrow:"Address not resolved",headline:"We couldn't resolve that to a NYC address.",body:`Try a more specific street address — for example, "80 Pioneer Street, Brooklyn." Riprap covers the five boroughs only; international addresses, NJ addresses, and points outside NYC aren't supported.`,tier:"proxy",defaultActions:["Use a sample query","Edit query"]},"all-silent":{eyebrow:"Outside evidence coverage",headline:"No specialists found evidence at this point.",body:"The address resolved, but every flood-evidence specialist returned silent. This is rare and usually means parkland, water, or a point with no nearby 311, no FloodNet sensor, and no Sandy overlap. Try a nearby street address or expand to neighborhood-mode.",tier:"proxy",defaultActions:["Try nearby address","Switch to neighborhood-mode"]},grounding:{eyebrow:"Grounding failure",headline:"Briefing prose couldn't be composed within citation constraints.",body:"Mellea rejected all reroll attempts. The underlying evidence is fine — only the prose composition failed. Download the structured evidence below, or contact support.",tier:"modeled",defaultActions:["Download evidence (JSON)","Contact support","Try again"]},backend:{eyebrow:"Backend unavailable",headline:"All routing targets exhausted.",body:"LiteLLM tried Local Ollama → HF Space T4 → AMD MI300X and didn't reach a healthy backend. This usually clears within 5 minutes during a deploy window. The hardware-pill in the header is currently red.",tier:"proxy",defaultActions:["Retry now","Switch backend"]}};let a=ie(()=>t[e.state]),s=ie(()=>e.actions??n(a).defaultActions.map(ee=>({label:ee})));var u=Bn(),o=g(u),m=g(o);Rt(m,{get tier(){return n(a).tier},size:11,get color(){return`var(--tier-${n(a).tier??""})`}});var x=$(m,2),l=g(x,!0);h(x),h(o);var p=$(o,2),A=g(p,!0);h(p);var L=$(p,2),K=g(L,!0);h(L);var Y=$(L,2);Pe(Y,21,()=>n(s),lt,(ee,b,z)=>{var D=un(),B=we(D);{var j=R=>{var E=Pn();at(E,1,"error-card-action",null,{},{"is-primary":z===0});var G=g(E,!0);h(E),X(()=>{bn(E,"href",n(b).href),H(G,n(b).label)}),T(R,E)},U=R=>{var E=zn();at(E,1,"error-card-action",null,{},{"is-primary":z===0});var G=g(E,!0);h(E),X(()=>H(G,n(b).label)),pn("click",E,function(...ne){var Z;(Z=n(b).onClick)==null||Z.apply(this,ne)}),T(R,E)};V(B,R=>{n(b).href?R(j):R(U,-1)})}T(ee,D)}),h(Y),ut(2),h(u),X(()=>{at(u,1,`error-card error-card-${e.state??""}`),H(l,e.eyebrowOverride??n(a).eyebrow),H(A,e.headlineOverride??n(a).headline),H(K,e.bodyOverride??n(a).body)}),T(r,u)}dt(["click"]);const le="2026-05";function Dn(r){return r==="fan"||r==="merge"?"fired":r==="silent"?"silent_by_design":r==="error"?"errored":"fired"}function Ut(r){return[r,...(r.children??[]).flatMap(Ut)]}function Rn(r){const e=r.toLowerCase();return e==="sandy_inundation"||e==="sandy"||e==="dep_stormwater"||e==="dep"||e==="ida_hwm_2021"||e==="ida_hwm"||e==="prithvi_eo_v2"||e==="prithvi_water"||e==="microtopo_lidar"||e==="microtopo"?"cornerstone":e==="mta_entrance_exposure"||e==="mta_entrances"||e==="nycha_development_exposure"||e==="nycha_developments"||e==="doe_school_exposure"||e==="doe_schools"||e==="doh_hospital_exposure"||e==="doh_hospitals"||e==="terramind_synthesis"||e==="terramind"||e==="terramind_buildings"||e==="eo_chip_fetch"?"keystone":e==="floodnet"||e==="nyc311"||e==="nws_obs"||e==="noaa_tides"||e==="prithvi_eo_live"||e==="prithvi_live"||e==="terramind_lulc"?"touchstone":e==="nws_alerts"||e==="ttm_forecast"||e==="ttm_311_forecast"||e==="floodnet_forecast"||e==="ttm_battery_surge"?"lodestone":e.startsWith("reconcile")||e.startsWith("mellea")||e==="rag_granite_embedding"||e==="gliner_extract"?"capstone":null}function Yn(r){const e={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};if(r)for(const t of Ut(r)){const a=Rn(t.name);a&&e[a].push({id:t.id||t.name,name:t.name,status:Dn(t.status),tier:t.tier,ms:t.ms,note:t.note??t.error??void 0})}return Object.keys(e).map(t=>({key:t,members:vn(t,e[t])}))}function C(r){return typeof r=="number"&&Number.isFinite(r)?r:null}function P(r){return typeof r=="string"?r:null}function O(r){return r&&typeof r=="object"&&!Array.isArray(r)?r:null}function Hn(r,e){return r.sandy!==!0?null:{id:"fsm-sandy",stone:"cornerstone",tier:"empirical",variant:"headline",source:"NYC OEM",agency:"NYC OpenData 5xsi-dfpx · Sandy 2012 inundation",vintage:"2012-10-29",title:"Hurricane Sandy 2012 inundation",headline:"Inside zone",subhead:(e&&P(e.address))??"address inside the empirical 2012 extent",body:"Address sits within the empirical Hurricane Sandy 2012 inundation extent. This is a historical fact, not a model prediction.",docId:"sandy",citeId:"sandy",mapLayer:"sandy"}}function Un(r){const e=O(r.dep);if(!e)return null;const t=[];for(const[a,s]of Object.entries(e)){const u=O(s);if(!u)continue;const o=C(u.depth_class)??0;o<=0||t.push([a.replace("dep_",""),P(u.depth_label)??"—",`class ${o}`])}return t.length?{id:"fsm-dep",stone:"cornerstone",tier:"modeled",variant:"tabular",source:"NYC DEP",agency:"NYC Department of Environmental Protection · Stormwater Flood Maps",vintage:"2021",title:"Stormwater flood scenarios at this address",columns:["scenario","depth label","class"],rows:t,sub:`${t.length} scenario${t.length===1?"":"s"} place this lot in modeled flooding`,docId:"dep_stormwater",citeId:"dep",mapLayer:"stormwater"}:null}function Gn(r){const e=O(r.ida_hwm);if(!e)return null;const t=C(e.n_within_radius);if(!t||t<=0)return null;const a=[];return a.push(["count",`${t}`,`${C(e.radius_m)??800} m radius`]),C(e.max_height_above_gnd_ft)!=null&&a.push(["max above gnd",`${e.max_height_above_gnd_ft} ft`,"—"]),C(e.nearest_dist_m)!=null&&a.push(["nearest",P(e.nearest_site)??"HWM",`${e.nearest_dist_m} m`]),{id:"fsm-ida-hwm",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"USGS STN Hurricane Ida 2021 high-water marks (Event 312)",vintage:"2021-09",title:"Hurricane Ida 2021 high-water marks nearby",columns:["field","value","context"],rows:a,docId:"ida_hwm",citeId:"ida_hwm",mapLayer:"hwm"}}function Wn(r){const e=O(r.prithvi_water);if(!e)return null;const t=C(e.nearest_distance_m);return t==null?null:{id:"fsm-prithvi-water",stone:"cornerstone",tier:"modeled",variant:"raster",source:"Prithvi-EO 2.0",agency:"IBM/NASA Prithvi-EO 2.0 · baked Hurricane Ida 2021 polygons",vintage:"2021-09-02",title:"Hurricane Ida 2021 — satellite-attributable inundation",rasterKind:"prithvi",headline:e.inside_water_polygon?"Inside polygon":`${t} m away`,subhead:"pre/post HLS Sentinel-2 segmentation",sub:`${C(e.n_polygons_within_500m)??0} distinct polygons within 500 m`,docId:"prithvi_water",citeId:"prithvi_water",mapLayer:"prithvi"}}function Vn(r){const e=O(r.microtopo);if(!e)return null;const t=C(e.point_elev_m);if(t==null)return null;const a=[{value:`${t.toFixed(1)} m`,label:"elevation"}];return C(e.hand_m)!=null&&a.push({value:`${e.hand_m.toFixed(1)} m`,label:"HAND"}),C(e.twi)!=null&&a.push({value:`${e.twi.toFixed(1)}`,label:"TWI"}),C(e.rel_elev_pct_200m)!=null&&a.push({value:`${e.rel_elev_pct_200m}%`,label:"pct lower 200m"}),{id:"fsm-microtopo",stone:"cornerstone",tier:"proxy",variant:"scalars",source:"USGS 3DEP",agency:"USGS 3DEP DEM (LiDAR-derived) + whitebox-workflows hydrology",vintage:"2018",title:"Microtopography at this point",scalars:a,sub:"Lower percentile = topographic low point; runoff routes here.",docId:"microtopo",citeId:"microtopo"}}function Kn(r){const e=[],t=O(r.mta_entrances);if(t!=null&&t.available&&Array.isArray(t.entrances))for(const o of t.entrances.slice(0,4))e.push({reg:"MTA",tier:"empirical",label:P(o.station_name)??P(o.entrance_id)??"entrance",detail:`${C(o.distance_m)??"—"} m · ${P(o.daytime_routes)??""}`.trim(),sourceId:P(o.station_id)??"MTA",note:null});else t&&t.available===!1&&e.push({reg:"MTA",tier:"empirical",label:null,detail:null,sourceId:null,note:"no subway entrances within 1.0 mi (silent)"});const a=O(r.nycha_developments);if(a!=null&&a.available&&Array.isArray(a.developments))for(const o of a.developments.slice(0,3))e.push({reg:"NYCHA",tier:"empirical",label:P(o.development)??"development",detail:`${C(o.distance_m)??"—"} m · ${P(o.borough)??""}`.trim(),sourceId:P(o.tds_num)??null,note:null});else a&&a.available===!1&&e.push({reg:"NYCHA",tier:"empirical",label:null,detail:null,sourceId:null,note:"no NYCHA developments within 1.0 mi (silent)"});const s=O(r.doe_schools);if(s!=null&&s.available&&Array.isArray(s.schools))for(const o of s.schools.slice(0,3))e.push({reg:"DOE",tier:"empirical",label:P(o.loc_name)??"school",detail:`${C(o.distance_m)??"—"} m · ${P(o.borough)??""}`.trim(),sourceId:P(o.loc_code)??null,note:null});else s&&s.available===!1&&e.push({reg:"DOE",tier:"empirical",label:null,detail:null,sourceId:null,note:"no schools within 1.0 mi (silent)"});const u=O(r.doh_hospitals);if(u!=null&&u.available&&Array.isArray(u.hospitals))for(const o of u.hospitals.slice(0,3))e.push({reg:"DOH",tier:"empirical",label:P(o.facility_name)??"hospital",detail:`${C(o.distance_m)??"—"} m · ${P(o.borough)??""}`.trim(),sourceId:P(o.fac_id)??null,note:null});else u&&u.available===!1&&e.push({reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,note:"no acute-care hospital within 1.0 mi (silent)"});return e.length?{id:"fsm-registers",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"NYC OpenData · multi-agency join",vintage:le,title:"Nearby exposed assets",registers:e,sub:`${e.filter(o=>o.label).length} of ${e.length} registers fired · joined within 1.0 mi`,docId:"registers",citeId:"registers",mapLayer:"registers"}:null}function Zn(r){const e=O(r.terramind_buildings);return e!=null&&e.ok?{id:"fsm-tm-buildings",stone:"keystone",tier:"modeled",variant:"raster-pred",source:"TerraMind-NYC",agency:"msradam/TerraMind-NYC-Adapters · Buildings LoRA",vintage:"2026",title:"NYC building footprints — TerraMind LoRA",rasterKind:"buildings",headline:`${C(e.pct_buildings)??0}%`,subhead:"building-footprint coverage in chip",sub:`${C(e.n_building_components)??0} distinct components · test mIoU 0.5511`,illustrative:!0,docId:"tm_buildings",citeId:"tm_buildings",mapLayer:"buildings"}:null}function Jn(r){const e=O(r.floodnet);if(!e||(C(e.n_sensors)??0)<=0)return null;const t=C(e.n_flood_events_3y)??0;return{id:"fsm-floodnet",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"FloodNet NYC ultrasonic depth sensor network",vintage:"2026",title:"FloodNet sensors near this address",headline:`${t} events`,subhead:`${C(e.n_sensors)??0} sensors · last 3 y`,spark:Array.from({length:24},(a,s)=>Math.max(0,Math.round(t/24*1.4*Math.exp(-Math.pow((s-14)/4,2))+t/24))),sparkSub:"Above-curb depth events ≥ 2 cm. Synthetic monthly distribution; raw deployment-id history is in the audit panel.",docId:"floodnet",citeId:"floodnet",mapLayer:"floodnet"}}function Xn(r){var m;const e=O(r.nyc311);if(!e)return null;const t=C(e.n)??0;if(t<=0)return null;const a=O(e.by_year),s=O(e.by_descriptor),u=a?Object.values(a).map(x=>C(x)??0):Array.from({length:12},()=>Math.round(t/12)),o=s?(m=Object.entries(s).sort((x,l)=>(C(l[1])??0)-(C(x[1])??0))[0])==null?void 0:m[0]:null;return{id:"fsm-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests (Socrata erm2-nwe9)",vintage:le,title:"Recent 311 flood complaints",headline:`${t} calls`,subhead:o?`top descriptor: ${o}`:"all flood-related descriptors",histogram:u,sparkSub:`Within ${C(e.radius_m)??200} m · ${C(e.years)??5} y window. Filtered to flood-relevant descriptors.`,docId:"nyc311",citeId:"nyc311",mapLayer:"complaints"}}function Qn(r){var a;const e=O(r.nws_obs);if(!e||e.error||e.station_id==null)return null;const t=[];return C(e.precip_last_hour_mm)!=null&&t.push({value:`${e.precip_last_hour_mm} mm`,label:"precip · 1h"}),C(e.precip_last_6h_mm)!=null&&t.push({value:`${e.precip_last_6h_mm} mm`,label:"precip · 6h"}),t.length?{id:"fsm-nws-obs",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS",agency:`NWS ASOS station ${P(e.station_id)??"?"}`,vintage:((a=P(e.obs_time))==null?void 0:a.slice(0,10))??le,title:"Recent precipitation",scalars:t,sub:`Nearest hourly METAR: ${P(e.station_name)??"?"} (${C(e.distance_km)??"?"} km).`,docId:"nws_obs",citeId:"nws_obs",mapLayer:"nws"}:null}function er(r){var a;const e=O(r.noaa_tides);if(!e||e.error||C(e.observed_ft_mllw)==null)return null;const t=[{value:`${e.observed_ft_mllw} ft`,label:"observed (MLLW)"}];return C(e.predicted_ft_mllw)!=null&&t.push({value:`${e.predicted_ft_mllw} ft`,label:"predicted"}),C(e.residual_ft)!=null&&t.push({value:`${e.residual_ft} ft`,label:"residual"}),{id:"fsm-noaa",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NOAA CO-OPS",agency:`NOAA tide gauge ${P(e.station_name)??P(e.station_id)??"?"}`,vintage:((a=P(e.obs_time))==null?void 0:a.slice(0,10))??le,title:"Live water level (nearest tide gauge)",scalars:t,sub:"Residual = observed − astronomical tide; positive residual is wind / surge component.",docId:"noaa_tides",citeId:"noaa_tides",mapLayer:"noaa"}}function tr(r){var a;const e=O(r.prithvi_live);if(!(e!=null&&e.ok))return null;const t=(a=P(e.item_datetime))==null?void 0:a.slice(0,10);return{id:"fsm-prithvi-live",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC-Pluvial",agency:"NASA-IBM Prithvi v2 · NYC fine-tune",vintage:t?`${t} · Sentinel-2`:"Sentinel-2",title:"Pluvial flood prediction · Prithvi-NYC-Pluvial",rasterKind:"prithvi",headline:`${C(e.pct_water_within_500m)??0}% flooded`,subhead:`water within 500 m · cloud ${C(e.cloud_cover)??"?"}%`,sub:"Test flood IoU 0.5979 on held-out NYC chips. Model interpretation, not a measurement.",illustrative:!0,docId:"prithvi_live",citeId:"prithvi_live",mapLayer:"prithvi-pluvial"}}const nr={urban:"#C66",water:"#5B7FB4",vegetation:"#5B8A4A",barren:"#A89A78",wetland:"#D9C75A"};function rr(r){const e=O(r.terramind_lulc);if(!(e!=null&&e.ok))return null;const t=O(e.class_fractions)??{},a={urban:0,water:0,vegetation:0,barren:0,wetland:0};for(const[u,o]of Object.entries(t)){const m=u.toLowerCase();m.includes("urban")||m.includes("built")||m.includes("impervious")?a.urban+=o:m.includes("water")?a.water+=o:m.includes("tree")||m.includes("vegetation")||m.includes("crop")||m.includes("grass")?a.vegetation+=o:m.includes("bare")||m.includes("barren")||m.includes("soil")?a.barren+=o:m.includes("wet")||m.includes("marsh")?a.wetland+=o:a.barren+=o}const s=Object.entries(a).filter(([,u])=>u>0).map(([u,o])=>({k:u,pct:Math.round(o),color:nr[u]}));return{id:"fsm-tm-lulc",stone:"touchstone",tier:"synthetic",variant:"lulc",source:"TerraMind v1.2",agency:"IBM TerraMind v1.2 · Sentinel-2 inputs",vintage:"Sentinel-2",title:"Land use / land cover · TerraMind v1.2",rasterKind:"lulc",classMix:s.length?s:void 0,sub:"Synthetic prior. LULC palette is a layer convention, not a tier signal.",illustrative:!0,docId:"tm_lulc",citeId:"tm_lulc",mapLayer:"terramind-lulc"}}function ir(r){const e=O(r.ttm_forecast);if(!(e!=null&&e.available)||!e.interesting)return null;const t=C(e.forecast_peak_ft),a=C(e.forecast_peak_minutes_ahead);return t==null||a==null?null:{id:"fsm-ttm-fc",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 (zero-shot)",agency:"IBM Granite-TimeSeries · regional",vintage:le,title:"Storm surge nowcast at The Battery — 9.6 h horizon (regional)",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:`${t} ft @ +${Math.round(a/60)}h`},headline:`${t} ft`,subhead:"peak surge residual · 9.6h horizon · 6-min cadence",sub:"Regional disclosure. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · Battery, not point-of-query",docId:"ttm_forecast",citeId:"ttm_forecast"}}function ar(r){const e=O(r.ttm_battery_surge);if(!(e!=null&&e.available)||!e.interesting)return null;const t=C(e.forecast_peak_m),a=C(e.forecast_peak_hours_ahead);return t==null||a==null?null:{id:"fsm-ttm-batt",stone:"lodestone",tier:"modeled",variant:"timeseries-ft",source:"msradam/Granite-TTM-r2-Battery-Surge",agency:"Granite TTM r2 · NYC-specialized fine-tune",vintage:le,title:"Storm surge nowcast at The Battery — 96 h horizon (NYC-specialized fine-tune)",timeseries:{hours:96,peak:{x:a,y:Math.round(t*100)},peakLabel:`${(t*100).toFixed(0)} cm @ +${a}h`},headline:`${(t*100).toFixed(0)} cm`,subhead:"peak surge · 96h horizon · hourly cadence",sub:"Fine-tuned on NYC tide-gauge history. Hourly cadence; applies city-wide via NOAA station 8518750.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery",citeId:"ttm_battery",hfModelCard:"huggingface.co/msradam/Granite-TTM-r2-Battery-Surge",rmse:"0.157 m",skillVsPersistence:"−35% vs persistence",hardwareBadge:"MI300X"}}function sr(r){const e=O(r.nws_alerts);if(!e)return null;const t=C(e.n_active)??0;if(t<=0)return null;const a=Array.isArray(e.alerts)?e.alerts:[];return{id:"fsm-nws-alerts",stone:"lodestone",tier:"modeled",variant:"tabular",source:"NWS",agency:"NWS Public Alerts API · flood-relevant filter",vintage:le,title:`${t} active flood-relevant alert${t===1?"":"s"}`,columns:["event","severity","expires"],rows:a.slice(0,4).map(s=>[P(s.event)??"?",P(s.severity)??"?",(P(s.expires)??"").slice(0,16)]),sub:"Live NWS feed. If a FLOOD or FLASH FLOOD WARNING is in this list, foreground it.",docId:"nws_alerts",citeId:"nws_alerts"}}function or(r,e){var L;const t=r.mellea??{},a=Array.isArray(t.requirements_passed)?t.requirements_passed:Array.isArray(t.passed)?t.passed:[],s=Array.isArray(t.requirements_failed)?t.requirements_failed:Array.isArray(t.failed)?t.failed:[],u=a.length,o=s.length,m=(typeof t.requirements_total=="number"?t.requirements_total:u+o)||4,x=typeof t.n_attempts=="number"?t.n_attempts:typeof t.attempts=="number"?t.attempts:0,p=(typeof t.rerolls=="number"?t.rerolls:null)??Math.max(0,x-1),A=((L=r.citations)==null?void 0:L.length)??0;return{id:"fsm-capstone-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · Granite 4.1 + Mellea grounding check",vintage:le,title:"Briefing reconciliation",metaRows:[{k:"mellea reroll",v:`${p} reroll${p===1?"":"s"}`},{k:"grounding checks",v:`${u}/${m} passed`},{k:"citations resolved",v:`${A}`},{k:"wall-clock",v:e!=null?`${e.toFixed(1)} s`:"—"}],sub:"Capstone produces prose, not cards. This meta-card is the integrity-narration UI for the entire pipeline.",docId:"capstone"}}function Pt(r,e,t,a=!0){const s=r??{},u=O(s.geocode);return{cards:[Hn(s,u),Un(s),Gn(s),Wn(s),Vn(s),Kn(s),Zn(s),Jn(s),Xn(s),Qn(s),er(s),tr(s),rr(s),sr(s),ir(s),ar(s),a?or(r??{},t):null].filter(m=>m!=null),stones:Yn(e),wallSeconds:t}}function lr(r,e,t,a){const u={sandy_inundation:"sandy",dep_stormwater:"dep",floodnet:"floodnet",nyc311:"nyc311",noaa_tides:"noaa_tides",nws_alerts:"nws_alerts",nws_obs:"nws_obs",ttm_forecast:"ttm_forecast",ttm_311_forecast:"ttm_311_forecast",ttm_battery_surge:"ttm_battery_surge",floodnet_forecast:"floodnet_forecast",ida_hwm_2021:"ida_hwm",prithvi_eo_v2:"prithvi_water",prithvi_eo_live:"prithvi_live",microtopo_lidar:"microtopo",mta_entrance_exposure:"mta_entrances",nycha_development_exposure:"nycha_developments",doe_school_exposure:"doe_schools",doh_hospital_exposure:"doh_hospitals",terramind_synthesis:"terramind",terramind_lulc:"terramind_lulc",terramind_buildings:"terramind_buildings",eo_chip_fetch:"eo_chip",geocode:"geocode"}[e];if(!u)return[];if(e==="sandy_inundation"){const o=t;r[u]=a&&(o==null?void 0:o.inside)===!0?!0:a?!1:null}else if(e==="dep_stormwater"){const o=t??{},m={};for(const[x,l]of Object.entries(o)){const p=typeof l=="string"?l:"";p&&(m[x]={depth_class:1,depth_label:p})}r[u]=Object.keys(m).length?m:null}else a&&t!=null?r[u]=t:r[u]=null;return[u]}const Be={subway:"MTA · USGS · FEMA · NYC OEM · NYC DEP",nycha:"NYC HA · USGS · NYC OEM · NYC DEP",school:"NYC DOE · USGS · NYC OEM · NYC DEP",hospital:"NYS DOH · USGS · NYC OEM · NYC DEP"},Oe={subway:"subway entrances",nycha:"NYCHA developments",school:"public schools",hospital:"hospitals"};function De(r){return!r||!Number.isFinite(r)?"—":`${Math.round(r)}m`}function Re(r){return r==null||!Number.isFinite(r)?"—":`${(r*3.28084).toFixed(1)} ft`}function Ye(r,e){return r?"Inundated 2012":"—"}function He(r,e,t){return r&&r.length?r:e&&e>0?`class ${e}`:"minimal"}function cr(r){return r?/elevator|easement|stair.*ramp/i.test(r):!1}function dr(r){if(!r.available)return null;const t=(r.entrances??[]).map(a=>{const s=cr(a.entrance_type);return{name:`${a.station_name??"?"}${a.daytime_routes?` (${String(a.daytime_routes).split(/\s+/).slice(0,3).join("/")})`:""}`,elev:Re(a.elev_m),ada:s,fema:"Zone X",sandy:Ye(a.inside_sandy_2012),dep:He(a.dep_extreme_2080_label,a.dep_extreme_2080_class),asset:"subway",primaryTier:a.inside_sandy_2012?"empirical":"modeled"}});return{type:Oe.subway,radius:De(r.radius_m),count:r.n_entrances??t.length,rows:t,sourceLabel:Be.subway}}function ur(r){if(!r.available)return null;const t=(r.developments??[]).map(a=>{const s=a.inside_sandy_2012,u=a.dep_extreme_2080_label,o=a.dep_extreme_2080_class;return{name:`${a.development??"?"}${a.borough?` · ${a.borough}`:""}`,elev:Re(a.rep_elevation_m),ada:!1,fema:"—",sandy:Ye(s),dep:He(u,o),asset:"nycha",primaryTier:s?"empirical":"modeled"}});return{type:Oe.nycha,radius:De(r.radius_m),count:r.n_developments??t.length,rows:t,sourceLabel:Be.nycha}}function pr(r){if(!r.available)return null;const t=(r.schools??[]).map(a=>({name:`${a.loc_name??a.school_name??a.name??"?"}${a.borough?` · ${a.borough}`:""}`,elev:Re(a.elevation_m??a.elev_m),ada:!1,fema:"—",sandy:Ye(a.inside_sandy_2012),dep:He(a.dep_extreme_2080_label,a.dep_extreme_2080_class),asset:"school",primaryTier:a.inside_sandy_2012?"empirical":"modeled"}));return{type:Oe.school,radius:De(r.radius_m),count:r.n_schools??t.length,rows:t,sourceLabel:Be.school}}function mr(r){if(!r.available)return null;const t=(r.hospitals??[]).map(a=>({name:`${a.facility_name??a.name??"?"}${a.borough?` · ${a.borough}`:""}`,elev:Re(a.elevation_m??a.elev_m),ada:!0,fema:"—",sandy:Ye(a.inside_sandy_2012),dep:He(a.dep_extreme_2080_label,a.dep_extreme_2080_class),asset:"hospital",primaryTier:a.inside_sandy_2012?"empirical":"modeled"}));return{type:Oe.hospital,radius:De(r.radius_m),count:r.n_hospitals??t.length,rows:t,sourceLabel:Be.hospital}}function _r(r){if(!r)return[];const e=[],t=dr(r.mta_entrances??{});t&&t.rows.length&&e.push(t);const a=ur(r.nycha_developments??{});a&&a.rows.length&&e.push(a);const s=pr(r.doe_schools??{});s&&s.rows.length&&e.push(s);const u=mr(r.doh_hospitals??{});return u&&u.rows.length&&e.push(u),e}function fr(r,e){const t=`/api/agent/stream?q=${encodeURIComponent(r)}`,a=new EventSource(t);let s="",u;const o=/([.?!])(\s|$)/;function m(l=!1){var A,L;let p;for(;p=o.exec(s);){const K=p.index+p[1].length+(p[2]?p[2].length:0),Y=s.slice(0,K).trim();s=s.slice(K),Y&&((A=e.onSentence)==null||A.call(e,Y,u))}l&&s.trim()&&((L=e.onSentence)==null||L.call(e,s.trim(),u),s="")}function x(l,p){a.addEventListener(l,A=>{try{p(JSON.parse(A.data))}catch{}})}return x("hello",l=>{var p;return(p=e.onHello)==null?void 0:p.call(e,l.query)}),x("plan_token",l=>{var p;return(p=e.onPlanToken)==null?void 0:p.call(e,l.delta)}),x("plan",l=>{var p;return(p=e.onPlan)==null?void 0:p.call(e,l)}),x("step",l=>{var p;return(p=e.onStep)==null?void 0:p.call(e,l)}),x("token",l=>{var p,A;l.attempt!==u&&(u=l.attempt,s="",(p=e.onAttemptStart)==null||p.call(e,l.attempt??1)),(A=e.onToken)==null||A.call(e,l.delta,l.attempt),s+=l.delta,m(!1)}),x("mellea_attempt",l=>{var p;return(p=e.onMelleaAttempt)==null?void 0:p.call(e,l)}),x("final",l=>{var p;m(!0),(p=e.onFinal)==null||p.call(e,l)}),x("error",l=>{var p;return(p=e.onError)==null?void 0:p.call(e,l.err)}),a.addEventListener("done",()=>{var l;m(!0),(l=e.onDone)==null||l.call(e),a.close()}),a.addEventListener("error",()=>{var l;m(!0),(l=e.onError)==null||l.call(e,"SSE connection error"),a.close()}),{close:()=>a.close()}}const xe={type:"FeatureCollection",features:[]};async function ve(r){try{const e=await fetch(r);if(!e.ok)return xe;const t=await e.json();return!t||t.type!=="FeatureCollection"?xe:t}catch{return xe}}async function st(r,e,t=1500){return ve(`/api/layers/sandy?lat=${r}&lon=${e}&r=${t}`)}async function ot(r,e,t=1500){return ve(`/api/layers/dep_extreme_2080?lat=${r}&lon=${e}&r=${t}`)}async function je(r,e,t=1500){return ve(`/api/layers/prithvi_water?lat=${r}&lon=${e}&r=${t}`)}async function vr(r){return ve(`/api/layers/sandy_clipped?code=${encodeURIComponent(r)}`)}async function hr(r,e="dep_extreme_2080"){return ve(`/api/layers/dep_clipped?code=${encodeURIComponent(r)}&scenario=${e}`)}async function Le(r,e,t=1500){return ve(`/api/layers/ida_hwm?lat=${r}&lon=${e}&r=${t}`)}async function Ee(r,e,t=1500){try{const a=await fetch(`/api/floodnet_near?lat=${r}&lon=${e}&r=${t}`);return a.ok?{type:"FeatureCollection",features:(await a.json()).features.map(o=>{const m=o.properties??{};return{...o,properties:{...m,count:typeof m.n_events_3y=="number"?m.n_events_3y:1}}})}:xe}catch{return xe}}var gr=I('<span class="region-head-meta svelte-1q8jizq"> <!></span>'),yr=I('<span class="region-head-meta svelte-1q8jizq">planning…</span>'),br=I('<div class="reroll-prev svelte-1q8jizq" aria-hidden="true"><p class="reroll-prev-line svelte-1q8jizq"> </p></div>'),wr=I("<!> <!>",1),xr=I('<span class="streaming-caret svelte-1q8jizq" aria-hidden="true">▍</span>'),Ar=I("<!> <!>",1),Sr=I('<details class="plan-details svelte-1q8jizq"><summary class="svelte-1q8jizq"> </summary> <pre class="plan-stream svelte-1q8jizq"> </pre></details>'),kr=I('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Planning intent… <!></div>'),Nr=I('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Resolving address…</div>'),Cr=I("<!> <!>",1),$r=I('<span class="region-head-meta svelte-1q8jizq"><!></span>'),qr=I('<span class="region-head-meta svelte-1q8jizq"> </span>'),Fr=I('<span class="region-head-meta svelte-1q8jizq">awaiting geocode…</span>'),Tr=I('<div class="compare-map-place svelte-1q8jizq"><div class="compare-map-label svelte-1q8jizq"> </div> <div style="position: relative;" class="svelte-1q8jizq"><!></div></div>'),Ir=I('<div class="compare-map-place svelte-1q8jizq"><div class="compare-map-label svelte-1q8jizq"> </div> <div style="position: relative;" class="svelte-1q8jizq"><!></div></div>'),Mr=I('<div class="compare-map-stack svelte-1q8jizq"><!> <!></div>'),jr=I('<div style="position: relative; flex: 1; min-height: 0;" class="svelte-1q8jizq"><!> <!></div>'),Lr=I('<section class="hero-band svelte-1q8jizq"><div class="hero-band-inner svelte-1q8jizq"><div class="app-shell-top is-desktop svelte-1q8jizq"><main id="region-briefing" class="app-region app-region-brief svelte-1q8jizq" aria-labelledby="brief-h1"><header class="region-head svelte-1q8jizq"><span class="section-label svelte-1q8jizq">Briefing</span> <!></header> <h1 id="brief-h1" class="brief-h1 svelte-1q8jizq">Flood-exposure briefing <span class="brief-h1-addr svelte-1q8jizq"> </span></h1> <!></main> <div class="app-region-side svelte-1q8jizq" style="grid-area: side;"><aside id="region-map" class="app-region app-region-map svelte-1q8jizq" aria-label="Map region"><header class="region-head svelte-1q8jizq"><span class="section-label svelte-1q8jizq">Map</span> <!></header> <!></aside> <aside id="region-cites" class="app-region app-region-cites svelte-1q8jizq" aria-label="Citations"><!></aside></div></div> <div class="app-shell-bottom svelte-1q8jizq"><section class="app-region app-region-findings svelte-1q8jizq" aria-label="Findings"><!></section></div></div></section>');function Vr(r,e){zt(e,!0);let t=ie(()=>_n.params.queryId??""),a=ie(()=>()=>{try{return decodeURIComponent(n(t))}catch{return n(t)}}),s=S(null),u=S(""),o=S(""),m=S(null),x=S(!1),l=S(0),p=2,A=S(!1),L=S(!1),K=S(""),Y=S(null),ee=S(oe([])),b=S(oe({id:"root",name:"briefing.run",status:"ok",ms:0,tier:null,children:[]})),z=S(null),D="comfortable",B="smart",j=S(!1);ye(()=>{typeof window<"u"&&_(j,new URL(window.location.href).searchParams.get("grammar")==="1")});let U=S(null),R=S(void 0),E=oe({}),G=S(0),ne=ie(()=>{if(n(G),n(m)){const c={...E,...n(m)};return Pt(c,n(b),n(R),!0)}return Pt(E,n(b),n(R),!1)});function Z(c){_(z,c,!0)}function ce(c){const i=document.getElementById("region-cites");i&&i.scrollIntoView({behavior:"smooth",block:"start"})}const Ae=new Set(["ttm_forecast","ttm_311_forecast","floodnet_forecast"]),me="group-ttm-r2";function Ue(c,i,d,v){if(v==="error")return d??void 0;if(v==="silent")return d??"no data";if(i==null||typeof i!="object")return;const k=i,f={sandy_inundation:["inside"],dep_stormwater:["dep_extreme_2080","dep_moderate_2050"],floodnet:["n_sensors","n_events_3y"],nyc311:["n"],noaa_tides:["observed_ft_mllw","residual_ft","station"],nws_alerts:["n_active"],nws_obs:["p1h_mm","p6h_mm","station"],ttm_forecast:["forecast_peak_ft","forecast_peak_min_ahead"],ttm_311_forecast:["forecast_mean","forecast_peak","accelerating"],ida_hwm_2021:["n_within_800m","max_height_above_gnd_ft"],prithvi_eo_v2:["inside_water_polygon","nearest_distance_m"],prithvi_eo_live:["scene_date","pct_water_500m"],microtopo_lidar:["elev_m","pct_200m","relief_m"],mta_entrance_exposure:["n_entrances","n_inside_sandy_2012","n_in_dep_extreme_2080"],nycha_development_exposure:["n_developments","n_inside_sandy_2012","n_in_dep_extreme_2080"],doe_school_exposure:["n_schools","n_inside_sandy_2012"],doh_hospital_exposure:["n_hospitals","n_inside_sandy_2012"],floodnet_forecast:["sensor_id","distance_m","forecast_28d","accelerating"],terramind_synthesis:["tim_chain","dem_mean_m"],rag_granite_embedding:["hits"],gliner_extract:["sources"]}[c],F=[];if(f){for(const q of f)if(k[q]!==void 0&&F.push(pt(q,k[q])),F.length>=3)break}else for(const[q,W]of Object.entries(k))if(W!==null&&typeof W!="object"&&(F.push(pt(q,W)),F.length>=2))break;return F.join(" · ")||void 0}function he(c){const i=[],d=c.mta_entrances;if(d&&Array.isArray(d.entrances))for(const f of d.entrances){const F=Number(f.entrance_lat),q=Number(f.entrance_lon);!Number.isFinite(F)||!Number.isFinite(q)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[q,F]},properties:{kind:"subway",name:`${f.station_name??"?"} (${f.daytime_routes??"?"})`,doc_id:`mta_entrance_${f.station_id??""}`,inside_sandy_2012:f.inside_sandy_2012===!0}})}const v=c.doe_schools;if(v&&Array.isArray(v.schools))for(const f of v.schools){const F=Number(f.school_lat),q=Number(f.school_lon);!Number.isFinite(F)||!Number.isFinite(q)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[q,F]},properties:{kind:"school",name:String(f.loc_name??f.school_name??"?"),doc_id:`doe_school_${f.loc_code??""}`,inside_sandy_2012:f.inside_sandy_2012===!0}})}const k=c.nycha_developments;if(k&&Array.isArray(k.developments))for(const f of k.developments){const F=Number(f.centroid_lat),q=Number(f.centroid_lon);if(!Number.isFinite(F)||!Number.isFinite(q))continue;const W=!!f.inside_sandy_2012;i.push({type:"Feature",geometry:{type:"Point",coordinates:[q,F]},properties:{kind:"nycha",name:String(f.development??"?"),doc_id:`nycha_dev_${f.tds_num??""}`,inside_sandy_2012:W}})}const y=c.doh_hospitals;if(y&&Array.isArray(y.hospitals))for(const f of y.hospitals){const F=Number(f.hospital_lat),q=Number(f.hospital_lon);!Number.isFinite(F)||!Number.isFinite(q)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[q,F]},properties:{kind:"hospital",name:String(f.facility_name??"?"),doc_id:`nyc_hospital_${f.fac_id??""}`,inside_sandy_2012:f.inside_sandy_2012===!0}})}return{type:"FeatureCollection",features:i}}function ge(c){return{type:"FeatureCollection",features:[]}}function Se(c){return 1+(c.children??[]).reduce((d,v)=>d+Se(v),0)}function pt(c,i){if(typeof i=="number"){const d=Number.isInteger(i)?`${i}`:i.toFixed(2);return`${c}=${d}`}if(typeof i=="boolean")return`${c}=${i}`;if(typeof i=="string"){const d=i.length>24?i.slice(0,22)+"…":i;return`${c}=${d}`}return c}let de=S(oe({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),ae=S(null),ke=S(null),mt=S(void 0),_t=S(void 0),Ne=S(void 0),Ce=S(void 0),$e=S(void 0),qe=S(void 0),Ge=S(void 0),ft=S(void 0),vt=S(void 0),Fe=S(void 0),ue=S(null),pe=S(null),We=S(oe({})),Ve=S(oe({})),ht=S(void 0),gt=S(void 0),yt=S(void 0),bt=S(void 0),wt=S(void 0),xt=S(void 0),At=S(void 0),St=S(void 0),kt=S(void 0),Nt=S(void 0),Gt=ie(()=>{var c,i,d,v,k,y;return{empirical:(((c=n(Ne))==null?void 0:c.features.length)??0)+(((i=n(Fe))==null?void 0:i.features.length)??0),modeled:((d=n(Ce))==null?void 0:d.features.length)??0,synthetic:(((v=n($e))==null?void 0:v.features.length)??0)+(((k=n(Ge))==null?void 0:k.features.length)??0),proxy:((y=n(qe))==null?void 0:y.features.length)??0}}),_e=S(oe([])),fe=S(oe({})),Te=[];function Wt(){var k;if(!n(o)){_(_e,[],!0),_(fe,{},!0),Te=[];return}const c={};(k=n(m))!=null&&k.citations&&n(m).citations.forEach((y,f)=>{c[y.doc_id]=Ht(f+1,y.doc_id,{source:y.source,title:y.title,url:y.url,vintage:y.vintage})});const i=ct(n(o),c),d={};let v=1;for(const y of Te){const f=i.citations[y];f&&(d[y]={...f,n:v++})}for(const[y,f]of Object.entries(i.citations))d[y]||(d[y]={...f,n:v++},Te.push(y));_(_e,i.blocks,!0),_(fe,d,!0)}ye(()=>{n(o),n(m),Wt()}),ye(()=>{if(!n(ae))return;const{lat:c,lon:i,source:d}=n(ae);d==="nta"&&n(ke)?(vr(n(ke)).then(v=>_(Ne,v,!0)),hr(n(ke)).then(v=>_(Ce,v,!0)),je(c,i,2500).then(v=>_($e,v,!0)),Ee(c,i,3e3).then(v=>_(qe,v,!0)),Le(c,i,3e3).then(v=>_(Fe,v,!0))):(st(c,i).then(v=>_(Ne,v,!0)),ot(c,i).then(v=>_(Ce,v,!0)),je(c,i).then(v=>_($e,v,!0)),Ee(c,i).then(v=>_(qe,v,!0)),Le(c,i).then(v=>_(Fe,v,!0)))}),ye(()=>{if(!n(ue))return;const{lat:c,lon:i}=n(ue);st(c,i).then(d=>_(ht,d,!0)),ot(c,i).then(d=>_(gt,d,!0)),je(c,i).then(d=>_(yt,d,!0)),Ee(c,i).then(d=>_(bt,d,!0)),Le(c,i).then(d=>_(wt,d,!0))}),ye(()=>{if(!n(pe))return;const{lat:c,lon:i}=n(pe);st(c,i).then(d=>_(xt,d,!0)),ot(c,i).then(d=>_(At,d,!0)),je(c,i).then(d=>_(St,d,!0)),Ee(c,i).then(d=>_(kt,d,!0)),Le(c,i).then(d=>_(Nt,d,!0))}),mn(()=>{if(J.reset(),!n(a)())return;_(U,Date.now(),!0),J.phase="planning";const c=fr(n(a)(),{onPlanToken:i=>_(u,n(u)+i),onPlan:i=>{var d;_(s,i,!0),J.phase="specialists",J.totalSpecialists=((d=i.specialists)==null?void 0:d.length)??0},onStep:i=>{if(new Set(["reconcile_granite41","mellea_reconcile_address","reconcile_neighborhood","reconcile_development","reconcile_live_now"]).has(i.step)||(J.activeStep=i.step,i.ok&&(J.firedCount=J.firedCount+1)),lr(E,i.step,i.result,i.ok),_(G,n(G)+1),i.step==="geocode")if(i.ok&&i.result&&typeof i.result=="object"){const w=i.result;if(typeof w.lat=="number"&&typeof w.lon=="number"){const N=typeof w.address=="string"?w.address:n(a)();i.target_label==="PLACE A"?_(ue,{label:N,lat:w.lat,lon:w.lon,source:"geocode"},!0):i.target_label==="PLACE B"?_(pe,{label:N,lat:w.lat,lon:w.lon,source:"geocode"},!0):_(ae,{label:N,lat:w.lat,lon:w.lon,source:"geocode"},!0),_(L,!0)}}else _(Y,"geocoder");if(i.target_label==="PLACE A"?_(We,{...n(We),[i.step]:i.result},!0):i.target_label==="PLACE B"&&_(Ve,{...n(Ve),[i.step]:i.result},!0),i.step==="nta_resolve"&&i.ok&&i.result&&typeof i.result=="object"){const w=i.result,N=Array.isArray(w.bbox)?w.bbox:null,M=typeof w.nta_code=="string"?w.nta_code:null;if(N&&N.length===4&&M){_(ke,M,!0);const re=(N[0]+N[2])/2,Q=(N[1]+N[3])/2,te=typeof w.nta_name=="string"?w.nta_name:n(a)();_(ae,{label:te,lat:Q,lon:re,source:"nta"},!0)}}const v=fn(i.step),k=i.ok?i.result==null&&i.err==null?"silent":"ok":"error",y=Math.round((i.elapsed_s??0)*1e3),f=i.result!=null?i.result:i.err??null,F=Ue(i.step,i.result,i.err,k),q={id:`step-${Se(n(b))}`,name:i.step,status:k,ms:y,tier:v,note:F,output:f,error:k==="error"?i.err??"unknown error":void 0,model:Ae.has(i.step)?"granite-timeseries-ttm-r2":void 0},W={...n(b),ms:(n(b).ms??0)+y};if(Ae.has(i.step)){const w=[...W.children??[]];let N=w.find(Q=>Q.id===me);N||(N={id:me,name:"forecasting.granite-timeseries-ttm-r2",status:"fan",ms:0,tier:"modeled",note:"1 instance",model:"granite-timeseries-ttm-r2",children:[]},w.push(N));const M=[...N.children??[],q],re={...N,ms:(N.ms??0)+y,note:`${M.length} instance${M.length===1?"":"s"}`,children:M};_(b,{...W,children:w.map(Q=>Q.id===me?re:Q)},!0)}else _(b,{...W,children:[...W.children??[],q]},!0)},onAttemptStart:i=>{_(l,i,!0),J.phase="reconciling",J.attempt=i,J.activeStep="granite4.1 + mellea",i>1&&(_(K,n(o),!0),_(o,""),Te=[])},onToken:i=>{n(A)||(_(A,!0),n(l)===0&&_(l,1),J.phase="streaming",J.attempt=Math.max(1,J.attempt)),_(o,n(o)+i)},onMelleaAttempt:i=>{i.attempt>0&&(_(l,i.attempt,!0),J.attempt=i.attempt)},onFinal:i=>{var W,w,N;_(m,i,!0),i.paragraph&&_(o,i.paragraph,!0),_(ee,_r(i),!0);const d=i;_(mt,he(d),!0),_(_t,ge(),!0);const v=d.terramind,k=d.terramind_lulc,y=d.terramind_buildings,f=d.prithvi_live,F=k!=null&&k.ok&&(k!=null&&k.polygons_geojson)?k.polygons_geojson:v!=null&&v.ok&&(v!=null&&v.polygons_geojson)?v.polygons_geojson:void 0;if((F==null?void 0:F.type)==="FeatureCollection"&&(((W=F.features)==null?void 0:W.length)??0)>0&&_(Ge,F,!0),y!=null&&y.ok&&(y!=null&&y.polygons_geojson)){const M=y.polygons_geojson;(M==null?void 0:M.type)==="FeatureCollection"&&(((w=M.features)==null?void 0:w.length)??0)>0&&_(vt,M,!0)}if(f!=null&&f.ok&&(f!=null&&f.polygons_geojson)){const M=f.polygons_geojson;(M==null?void 0:M.type)==="FeatureCollection"&&(((N=M.features)==null?void 0:N.length)??0)>0&&_(ft,M,!0)}const q=i.mellea;q&&q.failed&&q.failed.length>0&&q.attempts&&q.attempts>=p&&_(Y,"grounding")},onError:i=>{const d=i.toLowerCase();(d.includes("connection")||d.includes("502")||d.includes("503")||d.includes("timeout")||d.includes("routing"))&&_(Y,"backend"),J.markError(i)},onDone:()=>{var i,d,v,k,y;_(x,!0),n(U)!=null&&_(R,(Date.now()-n(U))/1e3),!n(A)&&!n(Y)&&n(L)&&_(Y,"all-silent"),!n(Y)&&n(_e).length>0&&(wn({queryId:n(t),queryText:n(a)(),intent:((i=n(s))==null?void 0:i.intent)??null,specialists:((v=(d=n(s))==null?void 0:d.specialists)==null?void 0:v.length)??0,blocks:n(_e),citations:n(fe),generatedAt:new Date().toISOString(),attempts:((y=(k=n(m))==null?void 0:k.mellea)==null?void 0:y.n_attempts)??n(l)}),J.markReady())}});return()=>c.close()});var Ke=Lr(),Ct=g(Ke),Ze=g(Ct),Je=g(Ze),Xe=g(Je),Vt=$(g(Xe),2);{var Kt=c=>{var i=gr(),d=g(i),v=$(d);{var k=y=>{var f=rt("· ✓ done");T(y,f)};V(v,y=>{n(x)&&y(k)})}h(i),X(()=>{var y;return H(d,`intent: ${n(s).intent??""} · ${((y=n(s).specialists)==null?void 0:y.length)??0??""} specialists · attempt ${n(l)??""} `)}),T(c,i)},Zt=c=>{var i=yr();T(c,i)};V(Vt,c=>{n(s)?c(Kt):c(Zt,-1)})}h(Xe);var Qe=$(Xe,2),$t=$(g(Qe)),Jt=g($t,!0);h($t),h(Qe);var Xt=$(Qe,2);{var Qt=c=>{On(c,{get state(){return n(Y)}})},en=c=>{var i=Cr(),d=we(i);{var v=w=>{var N=wr(),M=we(N);En(M,{get attempt(){return n(l)},max:p});var re=$(M,2);{var Q=te=>{var se=br(),Ie=g(se),Me=g(Ie);h(Ie),h(se),X(nt=>H(Me,`${nt??""}…`),[()=>n(K).slice(0,360)]),T(te,se)};V(re,te=>{n(K)&&te(Q)})}T(w,N)};V(d,w=>{n(l)>1&&w(v)})}var k=$(d,2);{var y=w=>{Tn(w,{get paragraph(){return n(m).paragraph},get citations(){return n(fe)},get targets(){return n(m).targets},get structuredA(){return n(We)},get structuredB(){return n(Ve)}})},f=w=>{var N=Ar(),M=we(N);Dt(M,{get blocks(){return n(_e)},get citations(){return n(fe)},streaming:!1});var re=$(M,2);{var Q=te=>{var se=xr();T(te,se)};V(re,te=>{n(x)||te(Q)})}T(w,N)},F=w=>{jn(w)},q=w=>{var N=kr(),M=$(g(N),2);{var re=Q=>{var te=Sr(),se=g(te),Ie=g(se);h(se);var Me=$(se,2),nt=g(Me,!0);h(Me),h(te),X(()=>{H(Ie,`Planner streaming (${n(u).length??""} chars)`),H(nt,n(u))}),T(Q,te)};V(M,Q=>{n(u)&&Q(re)})}h(N),T(w,N)},W=w=>{var N=Nr();T(w,N)};V(k,w=>{var N,M,re;((N=n(s))==null?void 0:N.intent)==="compare"&&((re=(M=n(m))==null?void 0:M.targets)==null?void 0:re.length)===2?w(y):n(_e).length?w(f,1):n(L)&&!n(A)?w(F,2):n(s)?w(W,-1):w(q,3)})}T(c,i)};V(Xt,c=>{n(Y)?c(Qt):c(en,-1)})}h(Je);var qt=$(Je,2),et=g(qt),tt=g(et),tn=$(g(tt),2);{var nn=c=>{var i=$r(),d=g(i);{var v=y=>{var f=rt("Carto Positron · z15 · 2 locations");T(y,f)},k=y=>{var f=rt("awaiting geocode…");T(y,f)};V(d,y=>{n(ue)||n(pe)?y(v):y(k,-1)})}h(i),T(c,i)},rn=c=>{var i=qr(),d=g(i);h(i),X((v,k)=>H(d,`Carto Positron · z15 · ${v??""}°N ${k??""}°W`),[()=>n(ae).lat.toFixed(4),()=>Math.abs(n(ae).lon).toFixed(4)]),T(c,i)},an=c=>{var i=Fr();T(c,i)};V(tn,c=>{var i;((i=n(s))==null?void 0:i.intent)==="compare"?c(nn):n(ae)?c(rn,1):c(an,-1)})}h(tt);var sn=$(tt,2);{var on=c=>{var i=Mr(),d=g(i);{var v=f=>{var F=Tr(),q=g(F),W=g(q);h(q);var w=$(q,2),N=g(w);it(N,{get address(){return n(ue)},get activeLayers(){return n(de)},get sandyEmpirical(){return n(ht)},get depModeled(){return n(gt)},get syntheticPrior(){return n(yt)},get proxy311(){return n(bt)},get idaHwm(){return n(wt)}}),h(w),h(F),X(()=>H(W,`A · ${n(ue).label??""}`)),T(f,F)};V(d,f=>{n(ue)&&f(v)})}var k=$(d,2);{var y=f=>{var F=Ir(),q=g(F),W=g(q);h(q);var w=$(q,2),N=g(w);it(N,{get address(){return n(pe)},get activeLayers(){return n(de)},get sandyEmpirical(){return n(xt)},get depModeled(){return n(At)},get syntheticPrior(){return n(St)},get proxy311(){return n(kt)},get idaHwm(){return n(Nt)}}),h(w),h(F),X(()=>H(W,`B · ${n(pe).label??""}`)),T(f,F)};V(k,f=>{n(pe)&&f(y)})}h(i),T(c,i)},ln=c=>{var i=jr(),d=g(i);it(d,{get address(){return n(ae)},get activeLayers(){return n(de)},get sandyEmpirical(){return n(Ne)},get depModeled(){return n(Ce)},get syntheticPrior(){return n($e)},get proxy311(){return n(qe)},get idaHwm(){return n(Fe)},get registerPoints(){return n(mt)},get registerPolygons(){return n(_t)},get terramindLulc(){return n(Ge)},get terramindBuildings(){return n(vt)},get prithviLive(){return n(ft)},get linkedKey(){return n(z)}});var v=$(d,2);yn(v,{get active(){return n(de)},get featureCounts(){return n(Gt)},onToggle:k=>_(de,{...n(de),[k]:!n(de)[k]},!0)}),h(i),T(c,i)};V(sn,c=>{var i;((i=n(s))==null?void 0:i.intent)==="compare"?c(on):n(ae)&&c(ln,1)})}h(et);var Ft=$(et,2),cn=g(Ft);hn(cn,{get citations(){return n(fe)}}),h(Ft),h(qt),h(Ze);var Tt=$(Ze,2),It=g(Tt),dn=g(It);gn(dn,{get data(){return n(ne)},density:D,provenanceMode:B,get showGrammar(){return n(j)},get linkedKey(){return n(z)},onLink:Z,onCite:ce}),h(It),h(Tt),h(Ct),h(Ke),X(c=>H(Jt,c),[()=>n(a)()]),T(r,Ke),Bt()}export{Vr as component,Wr as universal};
 
 
web/sveltekit/build/_app/immutable/nodes/{4.CXYWu0_c.js → 4.DLn0bV4P.js} RENAMED
The diff for this file is too large to render. See raw diff
 
web/sveltekit/build/_app/immutable/nodes/5.6DbTPabk.js DELETED
@@ -1 +0,0 @@
1
- import{d as z,e as V,a as U,f as q,s as j}from"../chunks/CWw6qgC_.js";import{p as Z,am as X,a5 as d,a4 as l,a9 as Q,ai as $,t as J,a as ee,s as r,c as e,o as i,r as t,al as te}from"../chunks/BTUA7_xE.js";import{B as ie}from"../chunks/BatqQaKj.js";import{f as re,R as ae,M as ne,C as se,F as oe}from"../chunks/CFg_rPYf.js";import{p as de,b as M}from"../chunks/DxQlA7U2.js";const le=!0,fe=Object.freeze(Object.defineProperty({__proto__:null,prerender:le},Symbol.toStringTag,{value:"Module"})),R="80 Pioneer Street · Red Hook · Brooklyn",y={c1:{id:"c1",n:1,tier:"empirical",source:"USGS",title:"Hurricane Sandy storm tide elevations, NY-NJ Harbor",docId:"USGS-OFR-2013-1234",url:"https://pubs.usgs.gov/of/2013/1234/",vintage:"2013-05",retrieved:"2026-04-28"},c2:{id:"c2",n:2,tier:"empirical",source:"NYC OEM",title:"Hurricane Sandy Inundation Zone (2012)",docId:"NYCOEM-SIZ-2013",url:"https://data.cityofnewyork.us/dataset/sandy-inundation-zone",vintage:"2013-01",retrieved:"2026-04-28"},c3:{id:"c3",n:3,tier:"empirical",source:"FloodNet NYC",title:"Sensor BK-RH-002 — Coffey Park, monthly exceedance",docId:"FN-BK-RH-002",url:"https://floodnet.nyc/sensor/BK-RH-002",vintage:"2026-04",retrieved:"2026-05-02"},c4:{id:"c4",n:4,tier:"modeled",source:"FEMA",title:"Preliminary Flood Insurance Rate Map, panel 36047C0207G",docId:"FEMA-FIRM-36047C0207G",url:"https://msc.fema.gov/portal/search",vintage:"2024-09",retrieved:"2026-04-28"},c5:{id:"c5",n:5,tier:"modeled",source:"NYC DEP",title:"Stormwater Flood Map — Moderate Stormwater Scenario",docId:"NYCDEP-SWFM-2024",url:"https://nyc.gov/stormwater-map",vintage:"2024-06",retrieved:"2026-04-28"},c6:{id:"c6",n:6,tier:"modeled",source:"NPCC4",title:"Sea-level rise projections, 2050 90th percentile",docId:"NPCC4-Ch3-Tbl3.2",url:"https://nyas.org/npcc4",vintage:"2024-03",retrieved:"2026-04-28"},c7:{id:"c7",n:7,tier:"proxy",source:"NYC 311",title:"Flooding service requests, BK CB6 2019–2025",docId:"NYC311-FLD-CB6",url:"https://data.cityofnewyork.us/311",vintage:"2025-12",retrieved:"2026-05-01"},c8:{id:"c8",n:8,tier:"proxy",source:"FEMA NFIP",title:"National Flood Insurance Program claims, tract 36047008500",docId:"NFIP-T36047008500",url:"https://www.fema.gov/openfema",vintage:"2024-12",retrieved:"2026-04-28"},c9:{id:"c9",n:9,tier:"synthetic",source:"TerraMind v1.2",title:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded)",docId:"RIPRAP-SYN-20250914",url:"#methodology-synthetic",vintage:"2025-09",retrieved:"2026-05-02"},c10:{id:"c10",n:10,tier:"modeled",source:"NYC DCP",title:"Waterfront Revitalization Program — Coastal Risk Area",docId:"NYCDCP-WRP-2022",url:"https://nyc.gov/dcp/wrp",vintage:"2022-11",retrieved:"2026-04-28"}},x=[{kind:"status",html:'<p class="briefing-deck"><strong>80 Pioneer Street, Red Hook, Brooklyn 11231.</strong> Block 597, Lot 30. Industrial Business Zone (IBZ-RH). Queried 2026-05-02 14:22 ET. <span class="briefing-meta">Briefing v0.4.2 · 9 specialists fired · 1 silent (TidalGauge: out of range)</span></p>'},{kind:"head",n:"01",label:"Status",title:"Coastal-edge, post-Sandy, multi-hazard"},{kind:"prose",parts:[{tier:"empirical",text:"The address sits 380 ft inland of the Erie Basin bulkhead, at a ground elevation of 6.2 ft NAVD88",cite:"c1"},{text:" — within the "},{tier:"empirical",text:"2012 Sandy Inundation Zone, which recorded a peak storm tide of 11.4 ft NAVD88 at the Battery",cite:"c2"},{text:" 2.4 mi to the northwest. "},{tier:"modeled",text:"FEMA's preliminary FIRM places the parcel in Zone AE (BFE 11 ft NAVD88)",cite:"c4"},{text:", a 4.8 ft freeboard above current grade. The site is upgradient of two FloodNet sensors and three blocks from a chronic 311 cluster."}]},{kind:"head",n:"02",label:"Empirical evidence",tier:"empirical"},{kind:"prose",parts:[{tier:"empirical",text:"FloodNet sensor BK-RH-002 (Coffey Park, 1,200 ft south) recorded 7 above-curb events between 2024-06 and 2026-04",cite:"c3"},{text:", with a peak depth of 14.3 cm during the 2025-09-29 nor'easter. "},{tier:"empirical",text:"USGS post-Sandy high-water marks within 500 ft cluster between 6.8 and 8.1 ft NAVD88",cite:"c1"},{text:", consistent with 0.6–1.9 ft of standing water at the queried address during the storm."}]},{kind:"head",n:"03",label:"Modeled scenarios",tier:"modeled"},{kind:"prose",parts:[{tier:"modeled",text:"DEP's Moderate Stormwater Scenario (2.13 in/hr design storm) shows ponding ≥4 in across the western half of the lot",cite:"c5"},{text:", routed by the 1.2% slope toward Imlay St. "},{tier:"modeled",text:"Under NPCC4's 2050 90th-percentile sea-level rise (30 in)",cite:"c6"},{text:", the parcel falls within the projected daily-tidal floodplain by mid-century. "},{tier:"synthetic",text:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded) was generated by TerraMind v1.2 and is presented as a prior, not an observation",cite:"c9"},{text:"; treat with appropriate caution."}]},{kind:"head",n:"04",label:"Policy context"},{kind:"prose",parts:[{tier:"proxy",text:"311 flood complaints within the surrounding census tract total 89 calls over 2019–2025, with seasonal clustering in Aug–Oct",cite:"c7"},{text:". "},{tier:"proxy",text:"NFIP claims aggregated to tract 36047008500 total $4.1M across 47 paid losses since 2000",cite:"c8"},{text:". "},{tier:"modeled",text:"The site lies within the NYC Waterfront Revitalization Program Coastal Risk Area; CEQR §817 review applies to any discretionary action",cite:"c10"},{text:"."}]}],ce={wallSeconds:14,cacheHit:.92,cards:[{id:"fc-fema",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"Federal Emergency Management Agency",vintage:"2024-09",title:"Preliminary FIRM, panel 36047C0207G",headline:"Zone AE",subhead:"BFE 11 ft NAVD88 · freeboard +4.8 ft",body:"Address sits within the regulatory 1% annual-chance floodplain. Base Flood Elevation 11.0 ft NAVD88; first floor must be at or above this datum for NFIP rating.",docId:"FEMA-FIRM-36047C0207G",citeId:"c4",mapLayer:"fema-ae"},{id:"fc-hwm",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"U.S. Geological Survey",vintage:"2013-05",title:"Post-Sandy high-water marks within 500 ft",columns:["id","elev.","dist."],rows:[["HWM-NY-3081","7.4 ft NAVD88","0.18 mi"],["HWM-NY-3082","8.1 ft NAVD88","0.22 mi"],["HWM-NY-3105","6.8 ft NAVD88","0.31 mi"]],sub:"3 marks · max 8.1 ft · surveyed Nov 2012",docId:"USGS-OFR-2013-1234",citeId:"c1",mapLayer:"hwm"},{id:"fc-stormwater",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"NYC Dept. of Environmental Protection",vintage:"2024-06",title:"Stormwater Flood Map · moderate scenario",rasterKind:"stormwater",sub:"2.13 in/hr · ponding ≥4 in W half of lot · routed toward Imlay St",docId:"NYCDEP-SWFM-2024",citeId:"c5",mapLayer:"stormwater"},{id:"fc-register-rh",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"NYC OpenData · multi-agency join",vintage:"2026-05",title:"Nearby exposed assets",registers:[{reg:"MTA",tier:"empirical",label:"Smith–9 St subway entrance",detail:"0.34 mi · F · G",sourceId:"MTA-ENT-N048",vintage:"2025-11",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook East Houses",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-RHE",vintage:"2025-Q3",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook West Houses",detail:"0.52 mi · 3,142 res.",sourceId:"NYCHA-RHW",vintage:"2025-Q3",note:null},{reg:"DOE",tier:"empirical",label:"PS 27 Agnes Y. Humphrey",detail:"0.29 mi · 271 K-5",sourceId:"DOE-K027",vintage:"2024-25",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,vintage:null,note:"no acute-care hospital within 1.0 mi (silent)"},{reg:"PLUTO",tier:"empirical",label:"Lot 36047 / 521 / 7",detail:"BIN 3018472 · MX-1",sourceId:"PLUTO-2024v2",vintage:"2024-12",note:null}],sub:"5 of 6 registers fired · 1 silent · joined within 1.0 mi",docId:"RIPRAP-EXP-RH80",citeId:"c-reg-rh",mapLayer:"registers"},{id:"fc-floodnet",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"FloodNet NYC sensor network",vintage:"2026-04",title:"Sensor BK-RH-002, monthly above-curb events",headline:"7 events",subhead:"Jun 2024 → Apr 2026 · peak 14.3 cm",spark:[0,0,1,0,2,1,0,0,3,0,1,0,0,0,2,1,0,0,1,0,2,4,1,1],sparkSub:"Sensor located 0.21 mi N at Coffey & Van Brunt. Above-curb depth in cm; events ≥2 cm.",docId:"FN-BK-RH-002",citeId:"c3",mapLayer:"floodnet"},{id:"fc-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests",vintage:"2025-12",title:"Recent 311 flood complaints, BK CB6",headline:"89 calls",subhead:"2019–2025 · seasonal cluster Aug–Oct",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],sparkSub:"Filtered to complaint types: Sewer (Backup), Street Flooding, Catch Basin Clogged. Within 200 m of address.",docId:"NYC311-FLD-CB6",citeId:"c7",mapLayer:"complaints"},{id:"fc-prithvi-pluvial",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC-Pluvial",agency:"NASA-IBM Prithvi v2 · NYC fine-tune",vintage:"2026-05-02 · Sentinel-2",title:"Pluvial flood prediction · Prithvi-NYC-Pluvial",rasterKind:"prithvi",headline:"0.3% flooded",subhead:"no flooding apparent · scene 2026-05-02",sub:"Model interpretation of imagery, not real-time observation. Confidence-mean 0.84 across non-flooded pixels.",docId:"PRITHVI-NYC-PLUV-V2-20260502",citeId:"c-prithvi",illustrative:!0,mapLayer:"prithvi-pluvial"},{id:"fc-terramind-lulc",stone:"touchstone",tier:"synthetic",variant:"lulc",source:"TerraMind v1.2",agency:"IBM TerraMind v1.2 · Sentinel-2 inputs",vintage:"Sentinel-2 · 2024-09-18",title:"Land use / land cover · TerraMind v1.2",rasterKind:"lulc",classMix:[{k:"urban",pct:62,color:"#C66"},{k:"water",pct:18,color:"#5B7FB4"},{k:"vegetation",pct:12,color:"#5B8A4A"},{k:"barren",pct:6,color:"#A89A78"},{k:"wetland",pct:2,color:"#D9C75A"}],sub:"Synthetic prior. LULC palette is a layer convention, not a tier signal.",docId:"TERRAMIND-LULC-20240918",citeId:"c-tm-lulc",illustrative:!0,mapLayer:"terramind-lulc"},{id:"fc-nws",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS KNYC",agency:"NOAA · National Weather Service",vintage:"2026-05-05",title:"Current weather, station KNYC",scalars:[{value:"0.02 in",label:"precip · last 24h"},{value:"67°F",label:"temp · current"},{value:"PC",label:"conditions"}],sub:"Observation timestamp 2026-05-05 14:18 ET. Central Park station; not point-of-query.",docId:"NWS-KNYC",citeId:"c-nws",mapLayer:"nws"},{id:"fc-ttm-surge",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 (zero-shot)",agency:"IBM Granite-TimeSeries · regional",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 9.6 h horizon (regional)",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:"+47 cm @ +38h"},headline:"+47 cm",subhead:"peak surge residual · 9.6h horizon · 6-min cadence",sub:"Regional disclosure. Nowcast applies city-wide via NOAA station 8518750. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_zeroshot",citeId:"c-ttm",mapLayer:null},{id:"fc-ttm-surge-ft",stone:"lodestone",tier:"modeled",variant:"timeseries-ft",source:"msradam/Granite-TTM-r2-Battery-Surge",agency:"Granite TTM r2 · NYC-specialized fine-tune",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 96 h horizon (NYC-specialized fine-tune)",timeseries:{hours:96,peak:{x:38,y:53},peakLabel:"+53 cm @ +38h"},headline:"+53 cm",subhead:"peak surge · 96h horizon · hourly cadence",sub:"Fine-tuned on NYC tide-gauge history. Trained on AMD MI300X.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_finetune",citeId:"c-ttm-ft",mapLayer:null,hfModelCard:"huggingface.co/msradam/Granite-TTM-r2-Battery-Surge",rmse:"0.157 m",skillVsPersistence:"−35% vs persistence",hardwareBadge:"MI300X"},{id:"fc-npcc4",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"NYC Panel on Climate Change, 4th Assessment",vintage:"2024-03",title:"Sea-level rise projections, Lower NY Harbor",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2080,low:28,mid:49,high:75},{year:2100,low:38,mid:71,high:114}],sub:"inches MSL · 17th–83rd %ile range, median line. Battery tide-gauge baseline.",docId:"NPCC4-Ch3-Tbl3.2",citeId:"c6",mapLayer:null},{id:"fc-mellea-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · grounding check",vintage:"2026-05-05 14:22 ET",title:"Briefing reconciliation",metaRows:[{k:"mellea reroll",v:"1 reroll"},{k:"grounding checks",v:"4/4 passed"},{k:"citations resolved",v:"4"},{k:"wall-clock",v:"24.0 s"}],sub:"Capstone produces prose, not cards. This meta-card summarizes the reconciler chain that wrote the four-section briefing above.",docId:"RIPRAP-CAP-RH80",citeId:null,mapLayer:null}],stones:[{key:"cornerstone",members:[{id:"CORN-001",name:"sandy_inundation",status:"fired",tier:"empirical",ms:412},{id:"CORN-002",name:"dep_stormwater",status:"fired",tier:"modeled",ms:540},{id:"CORN-003",name:"ida_hwm_2021",status:"fired",tier:"empirical",ms:612},{id:"CORN-004",name:"prithvi_eo_v2",status:"fired",tier:"modeled",ms:980},{id:"CORN-005",name:"microtopo_lidar",status:"fired",tier:"proxy",ms:1240}]},{key:"keystone",members:[{id:"KEY-001",name:"mta_entrance_exposure",status:"silent_by_design",tier:"empirical",ms:30,note:"no entrances within radius"},{id:"KEY-002",name:"nycha_development_exposure",status:"silent_by_design",tier:"empirical",ms:28,note:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe_school_exposure",status:"silent_by_design",tier:"empirical",ms:24,note:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh_hospital_exposure",status:"silent_by_design",tier:"empirical",ms:22,note:"no acute-care hospitals within 1.0 mi"}]},{key:"touchstone",members:[{id:"TCH-001",name:"floodnet",status:"fired",tier:"empirical",ms:285},{id:"TCH-002",name:"nyc311",status:"fired",tier:"proxy",ms:410},{id:"TCH-003",name:"nws_obs",status:"fired",tier:"empirical",ms:240},{id:"TCH-004",name:"noaa_tides",status:"fired",tier:"empirical",ms:196},{id:"TCH-005",name:"prithvi_eo_live",status:"fired",tier:"modeled",ms:4920},{id:"TCH-006",name:"terramind_lulc",status:"fired",tier:"synthetic",ms:2100}]},{key:"lodestone",members:[{id:"LOD-001",name:"nws_alerts",status:"fired",tier:"modeled",ms:110},{id:"LOD-002",name:"ttm_forecast",status:"fired",tier:"modeled",ms:1500},{id:"LOD-003",name:"ttm_battery_surge",status:"fired",tier:"modeled",ms:1480},{id:"LOD-004",name:"floodnet_forecast",status:"silent_by_design",tier:"modeled",ms:14,note:"sensor has only 2 historical events; forecast omitted (silent-floor: 5)"},{id:"LOD-005",name:"ttm_311_forecast",status:"errored",tier:"modeled",ms:0,note:"311 history fetch failed: HTTP 503 at NYC OpenData (3 retries)"}]},{key:"capstone",members:[{id:"CAP-001",name:"rag_granite_embedding",status:"fired",tier:"proxy",ms:410},{id:"CAP-002",name:"gliner_extract",status:"fired",tier:"proxy",ms:280},{id:"CAP-003",name:"reconcile_granite41",status:"fired",tier:"modeled",ms:6240}]}].map(a=>({key:a.key,members:re(a.key,a.members)}))};var me=q('<section class="hero-band"><div class="hero-band-inner"><div class="app-shell-top is-desktop"><main id="region-briefing" class="app-region app-region-brief" aria-labelledby="brief-h1"><header class="region-head"><span class="section-label">Briefing</span> <button type="button" class="region-action" aria-label="Replay streaming">↻ replay stream</button></header> <h1 id="brief-h1" class="brief-h1">Flood-exposure briefing <span class="brief-h1-addr"> </span></h1> <!></main> <div class="app-region-side" style="grid-area: side;"><aside id="region-map" class="app-region app-region-map" aria-label="Map region"><header class="region-head"><span class="section-label">Map</span> <span class="region-head-meta">Carto Positron · z15 · 40.6776°N 74.0096°W</span></header> <div style="position: relative; flex: 1; min-height: 0;"><!> <!></div></aside> <aside id="region-cites" class="app-region app-region-cites" aria-label="Citations"><!></aside></div></div> <div class="app-shell-bottom"><section class="app-region app-region-findings" aria-label="Findings"><!></section></div></div></section>');function ye(a,T){Z(T,!0);let c=l(null),F="comfortable",B="smart",b=l(!1);X(()=>{typeof window<"u"&&d(b,new URL(window.location.href).searchParams.get("grammar")==="1")});function Y(o){d(c,o,!0)}function E(o){const s=document.getElementById("region-cites");s&&s.scrollIntoView({behavior:"smooth",block:"start"})}let n=l(Q({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),m=l(0);$(()=>(de({queryId:"sample",queryText:R,intent:"single_address",specialists:9,blocks:x,citations:y,generatedAt:new Date().toISOString(),attempts:1}),M.markReady(),()=>M.reset()));const L={label:"80 Pioneer St",lat:40.6776,lon:-74.0096},C={type:"FeatureCollection",features:[{type:"Feature",properties:{source:"sample-fixture",tier:"synthetic"},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]};var u=me(),N=e(u),p=e(N),h=e(p),g=e(h),D=r(e(g),2);t(g);var v=r(g,2),w=r(e(v)),H=e(w,!0);t(w),t(v);var O=r(v,2);ie(O,{get blocks(){return x},get citations(){return y},streaming:!0,get replayKey(){return i(m)}}),t(h);var I=r(h,2),f=e(I),S=r(e(f),2),k=e(S);ae(k,{get address(){return L},get activeLayers(){return i(n)},get syntheticPrior(){return C},get linkedKey(){return i(c)}});var K=r(k,2);{let o=te(()=>({empirical:0,modeled:0,synthetic:C.features.length,proxy:0}));ne(K,{get active(){return i(n)},get featureCounts(){return i(o)},onToggle:s=>d(n,{...i(n),[s]:!i(n)[s]},!0)})}t(S),t(f);var _=r(f,2),G=e(_);se(G,{get citations(){return y}}),t(_),t(I),t(p);var P=r(p,2),A=e(P),W=e(A);oe(W,{get data(){return ce},density:F,provenanceMode:B,get showGrammar(){return i(b)},get linkedKey(){return i(c)},onLink:Y,onCite:E}),t(A),t(P),t(N),t(u),J(()=>j(H,R)),V("click",D,()=>d(m,i(m)+1)),U(a,u),ee()}z(["click"]);export{ye as component,fe as universal};
 
 
web/sveltekit/build/_app/immutable/nodes/{5.NbriEyGS.js → 5.C0xKDhXA.js} RENAMED
@@ -1 +1 @@
1
- import{d as z,e as V,a as U,f as q,s as j}from"../chunks/CWw6qgC_.js";import{p as Z,am as X,a5 as d,a4 as l,a9 as Q,ai as $,t as J,a as ee,s as r,c as e,o as i,r as t,al as te}from"../chunks/BTUA7_xE.js";import{B as ie}from"../chunks/BatqQaKj.js";import{f as re,R as ae,M as ne,C as se,F as oe}from"../chunks/zVqBGhq2.js";import{p as de,b as M}from"../chunks/DxQlA7U2.js";const le=!0,fe=Object.freeze(Object.defineProperty({__proto__:null,prerender:le},Symbol.toStringTag,{value:"Module"})),R="80 Pioneer Street · Red Hook · Brooklyn",y={c1:{id:"c1",n:1,tier:"empirical",source:"USGS",title:"Hurricane Sandy storm tide elevations, NY-NJ Harbor",docId:"USGS-OFR-2013-1234",url:"https://pubs.usgs.gov/of/2013/1234/",vintage:"2013-05",retrieved:"2026-04-28"},c2:{id:"c2",n:2,tier:"empirical",source:"NYC OEM",title:"Hurricane Sandy Inundation Zone (2012)",docId:"NYCOEM-SIZ-2013",url:"https://data.cityofnewyork.us/dataset/sandy-inundation-zone",vintage:"2013-01",retrieved:"2026-04-28"},c3:{id:"c3",n:3,tier:"empirical",source:"FloodNet NYC",title:"Sensor BK-RH-002 — Coffey Park, monthly exceedance",docId:"FN-BK-RH-002",url:"https://floodnet.nyc/sensor/BK-RH-002",vintage:"2026-04",retrieved:"2026-05-02"},c4:{id:"c4",n:4,tier:"modeled",source:"FEMA",title:"Preliminary Flood Insurance Rate Map, panel 36047C0207G",docId:"FEMA-FIRM-36047C0207G",url:"https://msc.fema.gov/portal/search",vintage:"2024-09",retrieved:"2026-04-28"},c5:{id:"c5",n:5,tier:"modeled",source:"NYC DEP",title:"Stormwater Flood Map — Moderate Stormwater Scenario",docId:"NYCDEP-SWFM-2024",url:"https://nyc.gov/stormwater-map",vintage:"2024-06",retrieved:"2026-04-28"},c6:{id:"c6",n:6,tier:"modeled",source:"NPCC4",title:"Sea-level rise projections, 2050 90th percentile",docId:"NPCC4-Ch3-Tbl3.2",url:"https://nyas.org/npcc4",vintage:"2024-03",retrieved:"2026-04-28"},c7:{id:"c7",n:7,tier:"proxy",source:"NYC 311",title:"Flooding service requests, BK CB6 2019–2025",docId:"NYC311-FLD-CB6",url:"https://data.cityofnewyork.us/311",vintage:"2025-12",retrieved:"2026-05-01"},c8:{id:"c8",n:8,tier:"proxy",source:"FEMA NFIP",title:"National Flood Insurance Program claims, tract 36047008500",docId:"NFIP-T36047008500",url:"https://www.fema.gov/openfema",vintage:"2024-12",retrieved:"2026-04-28"},c9:{id:"c9",n:9,tier:"synthetic",source:"TerraMind v1.2",title:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded)",docId:"RIPRAP-SYN-20250914",url:"#methodology-synthetic",vintage:"2025-09",retrieved:"2026-05-02"},c10:{id:"c10",n:10,tier:"modeled",source:"NYC DCP",title:"Waterfront Revitalization Program — Coastal Risk Area",docId:"NYCDCP-WRP-2022",url:"https://nyc.gov/dcp/wrp",vintage:"2022-11",retrieved:"2026-04-28"}},x=[{kind:"status",html:'<p class="briefing-deck"><strong>80 Pioneer Street, Red Hook, Brooklyn 11231.</strong> Block 597, Lot 30. Industrial Business Zone (IBZ-RH). Queried 2026-05-02 14:22 ET. <span class="briefing-meta">Briefing v0.4.2 · 9 specialists fired · 1 silent (TidalGauge: out of range)</span></p>'},{kind:"head",n:"01",label:"Status",title:"Coastal-edge, post-Sandy, multi-hazard"},{kind:"prose",parts:[{tier:"empirical",text:"The address sits 380 ft inland of the Erie Basin bulkhead, at a ground elevation of 6.2 ft NAVD88",cite:"c1"},{text:" — within the "},{tier:"empirical",text:"2012 Sandy Inundation Zone, which recorded a peak storm tide of 11.4 ft NAVD88 at the Battery",cite:"c2"},{text:" 2.4 mi to the northwest. "},{tier:"modeled",text:"FEMA's preliminary FIRM places the parcel in Zone AE (BFE 11 ft NAVD88)",cite:"c4"},{text:", a 4.8 ft freeboard above current grade. The site is upgradient of two FloodNet sensors and three blocks from a chronic 311 cluster."}]},{kind:"head",n:"02",label:"Empirical evidence",tier:"empirical"},{kind:"prose",parts:[{tier:"empirical",text:"FloodNet sensor BK-RH-002 (Coffey Park, 1,200 ft south) recorded 7 above-curb events between 2024-06 and 2026-04",cite:"c3"},{text:", with a peak depth of 14.3 cm during the 2025-09-29 nor'easter. "},{tier:"empirical",text:"USGS post-Sandy high-water marks within 500 ft cluster between 6.8 and 8.1 ft NAVD88",cite:"c1"},{text:", consistent with 0.6–1.9 ft of standing water at the queried address during the storm."}]},{kind:"head",n:"03",label:"Modeled scenarios",tier:"modeled"},{kind:"prose",parts:[{tier:"modeled",text:"DEP's Moderate Stormwater Scenario (2.13 in/hr design storm) shows ponding ≥4 in across the western half of the lot",cite:"c5"},{text:", routed by the 1.2% slope toward Imlay St. "},{tier:"modeled",text:"Under NPCC4's 2050 90th-percentile sea-level rise (30 in)",cite:"c6"},{text:", the parcel falls within the projected daily-tidal floodplain by mid-century. "},{tier:"synthetic",text:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded) was generated by TerraMind v1.2 and is presented as a prior, not an observation",cite:"c9"},{text:"; treat with appropriate caution."}]},{kind:"head",n:"04",label:"Policy context"},{kind:"prose",parts:[{tier:"proxy",text:"311 flood complaints within the surrounding census tract total 89 calls over 2019���2025, with seasonal clustering in Aug–Oct",cite:"c7"},{text:". "},{tier:"proxy",text:"NFIP claims aggregated to tract 36047008500 total $4.1M across 47 paid losses since 2000",cite:"c8"},{text:". "},{tier:"modeled",text:"The site lies within the NYC Waterfront Revitalization Program Coastal Risk Area; CEQR §817 review applies to any discretionary action",cite:"c10"},{text:"."}]}],ce={wallSeconds:14,cacheHit:.92,cards:[{id:"fc-fema",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"Federal Emergency Management Agency",vintage:"2024-09",title:"Preliminary FIRM, panel 36047C0207G",headline:"Zone AE",subhead:"BFE 11 ft NAVD88 · freeboard +4.8 ft",body:"Address sits within the regulatory 1% annual-chance floodplain. Base Flood Elevation 11.0 ft NAVD88; first floor must be at or above this datum for NFIP rating.",docId:"FEMA-FIRM-36047C0207G",citeId:"c4",mapLayer:"fema-ae"},{id:"fc-hwm",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"U.S. Geological Survey",vintage:"2013-05",title:"Post-Sandy high-water marks within 500 ft",columns:["id","elev.","dist."],rows:[["HWM-NY-3081","7.4 ft NAVD88","0.18 mi"],["HWM-NY-3082","8.1 ft NAVD88","0.22 mi"],["HWM-NY-3105","6.8 ft NAVD88","0.31 mi"]],sub:"3 marks · max 8.1 ft · surveyed Nov 2012",docId:"USGS-OFR-2013-1234",citeId:"c1",mapLayer:"hwm"},{id:"fc-stormwater",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"NYC Dept. of Environmental Protection",vintage:"2024-06",title:"Stormwater Flood Map · moderate scenario",rasterKind:"stormwater",sub:"2.13 in/hr · ponding ≥4 in W half of lot · routed toward Imlay St",docId:"NYCDEP-SWFM-2024",citeId:"c5",mapLayer:"stormwater"},{id:"fc-register-rh",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"NYC OpenData · multi-agency join",vintage:"2026-05",title:"Nearby exposed assets",registers:[{reg:"MTA",tier:"empirical",label:"Smith–9 St subway entrance",detail:"0.34 mi · F · G",sourceId:"MTA-ENT-N048",vintage:"2025-11",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook East Houses",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-RHE",vintage:"2025-Q3",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook West Houses",detail:"0.52 mi · 3,142 res.",sourceId:"NYCHA-RHW",vintage:"2025-Q3",note:null},{reg:"DOE",tier:"empirical",label:"PS 27 Agnes Y. Humphrey",detail:"0.29 mi · 271 K-5",sourceId:"DOE-K027",vintage:"2024-25",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,vintage:null,note:"no acute-care hospital within 1.0 mi (silent)"},{reg:"PLUTO",tier:"empirical",label:"Lot 36047 / 521 / 7",detail:"BIN 3018472 · MX-1",sourceId:"PLUTO-2024v2",vintage:"2024-12",note:null}],sub:"5 of 6 registers fired · 1 silent · joined within 1.0 mi",docId:"RIPRAP-EXP-RH80",citeId:"c-reg-rh",mapLayer:"registers"},{id:"fc-floodnet",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"FloodNet NYC sensor network",vintage:"2026-04",title:"Sensor BK-RH-002, monthly above-curb events",headline:"7 events",subhead:"Jun 2024 → Apr 2026 · peak 14.3 cm",spark:[0,0,1,0,2,1,0,0,3,0,1,0,0,0,2,1,0,0,1,0,2,4,1,1],sparkSub:"Sensor located 0.21 mi N at Coffey & Van Brunt. Above-curb depth in cm; events ≥2 cm.",docId:"FN-BK-RH-002",citeId:"c3",mapLayer:"floodnet"},{id:"fc-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests",vintage:"2025-12",title:"Recent 311 flood complaints, BK CB6",headline:"89 calls",subhead:"2019–2025 · seasonal cluster Aug–Oct",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],sparkSub:"Filtered to complaint types: Sewer (Backup), Street Flooding, Catch Basin Clogged. Within 200 m of address.",docId:"NYC311-FLD-CB6",citeId:"c7",mapLayer:"complaints"},{id:"fc-prithvi-pluvial",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC-Pluvial",agency:"NASA-IBM Prithvi v2 · NYC fine-tune",vintage:"2026-05-02 · Sentinel-2",title:"Pluvial flood prediction · Prithvi-NYC-Pluvial",rasterKind:"prithvi",headline:"0.3% flooded",subhead:"no flooding apparent · scene 2026-05-02",sub:"Model interpretation of imagery, not real-time observation. Confidence-mean 0.84 across non-flooded pixels.",docId:"PRITHVI-NYC-PLUV-V2-20260502",citeId:"c-prithvi",illustrative:!0,mapLayer:"prithvi-pluvial"},{id:"fc-terramind-lulc",stone:"touchstone",tier:"synthetic",variant:"lulc",source:"TerraMind v1.2",agency:"IBM TerraMind v1.2 · Sentinel-2 inputs",vintage:"Sentinel-2 · 2024-09-18",title:"Land use / land cover · TerraMind v1.2",rasterKind:"lulc",classMix:[{k:"urban",pct:62,color:"#C66"},{k:"water",pct:18,color:"#5B7FB4"},{k:"vegetation",pct:12,color:"#5B8A4A"},{k:"barren",pct:6,color:"#A89A78"},{k:"wetland",pct:2,color:"#D9C75A"}],sub:"Synthetic prior. LULC palette is a layer convention, not a tier signal.",docId:"TERRAMIND-LULC-20240918",citeId:"c-tm-lulc",illustrative:!0,mapLayer:"terramind-lulc"},{id:"fc-nws",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS KNYC",agency:"NOAA · National Weather Service",vintage:"2026-05-05",title:"Current weather, station KNYC",scalars:[{value:"0.02 in",label:"precip · last 24h"},{value:"67°F",label:"temp · current"},{value:"PC",label:"conditions"}],sub:"Observation timestamp 2026-05-05 14:18 ET. Central Park station; not point-of-query.",docId:"NWS-KNYC",citeId:"c-nws",mapLayer:"nws"},{id:"fc-ttm-surge",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 (zero-shot)",agency:"IBM Granite-TimeSeries · regional",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 9.6 h horizon (regional)",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:"+47 cm @ +38h"},headline:"+47 cm",subhead:"peak surge residual · 9.6h horizon · 6-min cadence",sub:"Regional disclosure. Nowcast applies city-wide via NOAA station 8518750. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_zeroshot",citeId:"c-ttm",mapLayer:null},{id:"fc-ttm-surge-ft",stone:"lodestone",tier:"modeled",variant:"timeseries-ft",source:"msradam/Granite-TTM-r2-Battery-Surge",agency:"Granite TTM r2 · NYC-specialized fine-tune",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 96 h horizon (NYC-specialized fine-tune)",timeseries:{hours:96,peak:{x:38,y:53},peakLabel:"+53 cm @ +38h"},headline:"+53 cm",subhead:"peak surge · 96h horizon · hourly cadence",sub:"Fine-tuned on NYC tide-gauge history. Trained on AMD MI300X.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_finetune",citeId:"c-ttm-ft",mapLayer:null,hfModelCard:"huggingface.co/msradam/Granite-TTM-r2-Battery-Surge",rmse:"0.157 m",skillVsPersistence:"−35% vs persistence",hardwareBadge:"MI300X"},{id:"fc-npcc4",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"NYC Panel on Climate Change, 4th Assessment",vintage:"2024-03",title:"Sea-level rise projections, Lower NY Harbor",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2080,low:28,mid:49,high:75},{year:2100,low:38,mid:71,high:114}],sub:"inches MSL · 17th–83rd %ile range, median line. Battery tide-gauge baseline.",docId:"NPCC4-Ch3-Tbl3.2",citeId:"c6",mapLayer:null},{id:"fc-mellea-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · grounding check",vintage:"2026-05-05 14:22 ET",title:"Briefing reconciliation",metaRows:[{k:"mellea reroll",v:"1 reroll"},{k:"grounding checks",v:"4/4 passed"},{k:"citations resolved",v:"4"},{k:"wall-clock",v:"24.0 s"}],sub:"Capstone produces prose, not cards. This meta-card summarizes the reconciler chain that wrote the four-section briefing above.",docId:"RIPRAP-CAP-RH80",citeId:null,mapLayer:null}],stones:[{key:"cornerstone",members:[{id:"CORN-001",name:"sandy_inundation",status:"fired",tier:"empirical",ms:412},{id:"CORN-002",name:"dep_stormwater",status:"fired",tier:"modeled",ms:540},{id:"CORN-003",name:"ida_hwm_2021",status:"fired",tier:"empirical",ms:612},{id:"CORN-004",name:"prithvi_eo_v2",status:"fired",tier:"modeled",ms:980},{id:"CORN-005",name:"microtopo_lidar",status:"fired",tier:"proxy",ms:1240}]},{key:"keystone",members:[{id:"KEY-001",name:"mta_entrance_exposure",status:"silent_by_design",tier:"empirical",ms:30,note:"no entrances within radius"},{id:"KEY-002",name:"nycha_development_exposure",status:"silent_by_design",tier:"empirical",ms:28,note:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe_school_exposure",status:"silent_by_design",tier:"empirical",ms:24,note:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh_hospital_exposure",status:"silent_by_design",tier:"empirical",ms:22,note:"no acute-care hospitals within 1.0 mi"}]},{key:"touchstone",members:[{id:"TCH-001",name:"floodnet",status:"fired",tier:"empirical",ms:285},{id:"TCH-002",name:"nyc311",status:"fired",tier:"proxy",ms:410},{id:"TCH-003",name:"nws_obs",status:"fired",tier:"empirical",ms:240},{id:"TCH-004",name:"noaa_tides",status:"fired",tier:"empirical",ms:196},{id:"TCH-005",name:"prithvi_eo_live",status:"fired",tier:"modeled",ms:4920},{id:"TCH-006",name:"terramind_lulc",status:"fired",tier:"synthetic",ms:2100}]},{key:"lodestone",members:[{id:"LOD-001",name:"nws_alerts",status:"fired",tier:"modeled",ms:110},{id:"LOD-002",name:"ttm_forecast",status:"fired",tier:"modeled",ms:1500},{id:"LOD-003",name:"ttm_battery_surge",status:"fired",tier:"modeled",ms:1480},{id:"LOD-004",name:"floodnet_forecast",status:"silent_by_design",tier:"modeled",ms:14,note:"sensor has only 2 historical events; forecast omitted (silent-floor: 5)"},{id:"LOD-005",name:"ttm_311_forecast",status:"errored",tier:"modeled",ms:0,note:"311 history fetch failed: HTTP 503 at NYC OpenData (3 retries)"}]},{key:"capstone",members:[{id:"CAP-001",name:"rag_granite_embedding",status:"fired",tier:"proxy",ms:410},{id:"CAP-002",name:"gliner_extract",status:"fired",tier:"proxy",ms:280},{id:"CAP-003",name:"reconcile_granite41",status:"fired",tier:"modeled",ms:6240}]}].map(a=>({key:a.key,members:re(a.key,a.members)}))};var me=q('<section class="hero-band"><div class="hero-band-inner"><div class="app-shell-top is-desktop"><main id="region-briefing" class="app-region app-region-brief" aria-labelledby="brief-h1"><header class="region-head"><span class="section-label">Briefing</span> <button type="button" class="region-action" aria-label="Replay streaming">↻ replay stream</button></header> <h1 id="brief-h1" class="brief-h1">Flood-exposure briefing <span class="brief-h1-addr"> </span></h1> <!></main> <div class="app-region-side" style="grid-area: side;"><aside id="region-map" class="app-region app-region-map" aria-label="Map region"><header class="region-head"><span class="section-label">Map</span> <span class="region-head-meta">Carto Positron · z15 · 40.6776°N 74.0096°W</span></header> <div style="position: relative; flex: 1; min-height: 0;"><!> <!></div></aside> <aside id="region-cites" class="app-region app-region-cites" aria-label="Citations"><!></aside></div></div> <div class="app-shell-bottom"><section class="app-region app-region-findings" aria-label="Findings"><!></section></div></div></section>');function ye(a,T){Z(T,!0);let c=l(null),F="comfortable",B="smart",b=l(!1);X(()=>{typeof window<"u"&&d(b,new URL(window.location.href).searchParams.get("grammar")==="1")});function Y(o){d(c,o,!0)}function E(o){const s=document.getElementById("region-cites");s&&s.scrollIntoView({behavior:"smooth",block:"start"})}let n=l(Q({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),m=l(0);$(()=>(de({queryId:"sample",queryText:R,intent:"single_address",specialists:9,blocks:x,citations:y,generatedAt:new Date().toISOString(),attempts:1}),M.markReady(),()=>M.reset()));const L={label:"80 Pioneer St",lat:40.6776,lon:-74.0096},C={type:"FeatureCollection",features:[{type:"Feature",properties:{source:"sample-fixture",tier:"synthetic"},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]};var u=me(),N=e(u),p=e(N),h=e(p),g=e(h),D=r(e(g),2);t(g);var v=r(g,2),w=r(e(v)),H=e(w,!0);t(w),t(v);var O=r(v,2);ie(O,{get blocks(){return x},get citations(){return y},streaming:!0,get replayKey(){return i(m)}}),t(h);var I=r(h,2),f=e(I),S=r(e(f),2),k=e(S);ae(k,{get address(){return L},get activeLayers(){return i(n)},get syntheticPrior(){return C},get linkedKey(){return i(c)}});var K=r(k,2);{let o=te(()=>({empirical:0,modeled:0,synthetic:C.features.length,proxy:0}));ne(K,{get active(){return i(n)},get featureCounts(){return i(o)},onToggle:s=>d(n,{...i(n),[s]:!i(n)[s]},!0)})}t(S),t(f);var _=r(f,2),G=e(_);se(G,{get citations(){return y}}),t(_),t(I),t(p);var P=r(p,2),A=e(P),W=e(A);oe(W,{get data(){return ce},density:F,provenanceMode:B,get showGrammar(){return i(b)},get linkedKey(){return i(c)},onLink:Y,onCite:E}),t(A),t(P),t(N),t(u),J(()=>j(H,R)),V("click",D,()=>d(m,i(m)+1)),U(a,u),ee()}z(["click"]);export{ye as component,fe as universal};
 
1
+ import{d as z,e as V,a as U,f as q,s as j}from"../chunks/CWw6qgC_.js";import{p as Z,am as X,a5 as d,a4 as l,a9 as Q,ai as $,t as J,a as ee,s as r,c as e,o as i,r as t,al as te}from"../chunks/BTUA7_xE.js";import{B as ie}from"../chunks/BatqQaKj.js";import{f as re,R as ae,M as ne,C as se,F as oe}from"../chunks/FjZhY28w.js";import{p as de,b as M}from"../chunks/DxQlA7U2.js";const le=!0,fe=Object.freeze(Object.defineProperty({__proto__:null,prerender:le},Symbol.toStringTag,{value:"Module"})),R="80 Pioneer Street · Red Hook · Brooklyn",y={c1:{id:"c1",n:1,tier:"empirical",source:"USGS",title:"Hurricane Sandy storm tide elevations, NY-NJ Harbor",docId:"USGS-OFR-2013-1234",url:"https://pubs.usgs.gov/of/2013/1234/",vintage:"2013-05",retrieved:"2026-04-28"},c2:{id:"c2",n:2,tier:"empirical",source:"NYC OEM",title:"Hurricane Sandy Inundation Zone (2012)",docId:"NYCOEM-SIZ-2013",url:"https://data.cityofnewyork.us/dataset/sandy-inundation-zone",vintage:"2013-01",retrieved:"2026-04-28"},c3:{id:"c3",n:3,tier:"empirical",source:"FloodNet NYC",title:"Sensor BK-RH-002 — Coffey Park, monthly exceedance",docId:"FN-BK-RH-002",url:"https://floodnet.nyc/sensor/BK-RH-002",vintage:"2026-04",retrieved:"2026-05-02"},c4:{id:"c4",n:4,tier:"modeled",source:"FEMA",title:"Preliminary Flood Insurance Rate Map, panel 36047C0207G",docId:"FEMA-FIRM-36047C0207G",url:"https://msc.fema.gov/portal/search",vintage:"2024-09",retrieved:"2026-04-28"},c5:{id:"c5",n:5,tier:"modeled",source:"NYC DEP",title:"Stormwater Flood Map — Moderate Stormwater Scenario",docId:"NYCDEP-SWFM-2024",url:"https://nyc.gov/stormwater-map",vintage:"2024-06",retrieved:"2026-04-28"},c6:{id:"c6",n:6,tier:"modeled",source:"NPCC4",title:"Sea-level rise projections, 2050 90th percentile",docId:"NPCC4-Ch3-Tbl3.2",url:"https://nyas.org/npcc4",vintage:"2024-03",retrieved:"2026-04-28"},c7:{id:"c7",n:7,tier:"proxy",source:"NYC 311",title:"Flooding service requests, BK CB6 2019–2025",docId:"NYC311-FLD-CB6",url:"https://data.cityofnewyork.us/311",vintage:"2025-12",retrieved:"2026-05-01"},c8:{id:"c8",n:8,tier:"proxy",source:"FEMA NFIP",title:"National Flood Insurance Program claims, tract 36047008500",docId:"NFIP-T36047008500",url:"https://www.fema.gov/openfema",vintage:"2024-12",retrieved:"2026-04-28"},c9:{id:"c9",n:9,tier:"synthetic",source:"TerraMind v1.2",title:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded)",docId:"RIPRAP-SYN-20250914",url:"#methodology-synthetic",vintage:"2025-09",retrieved:"2026-05-02"},c10:{id:"c10",n:10,tier:"modeled",source:"NYC DCP",title:"Waterfront Revitalization Program — Coastal Risk Area",docId:"NYCDCP-WRP-2022",url:"https://nyc.gov/dcp/wrp",vintage:"2022-11",retrieved:"2026-04-28"}},x=[{kind:"status",html:'<p class="briefing-deck"><strong>80 Pioneer Street, Red Hook, Brooklyn 11231.</strong> Block 597, Lot 30. Industrial Business Zone (IBZ-RH). Queried 2026-05-02 14:22 ET. <span class="briefing-meta">Briefing v0.4.2 · 9 specialists fired · 1 silent (TidalGauge: out of range)</span></p>'},{kind:"head",n:"01",label:"Status",title:"Coastal-edge, post-Sandy, multi-hazard"},{kind:"prose",parts:[{tier:"empirical",text:"The address sits 380 ft inland of the Erie Basin bulkhead, at a ground elevation of 6.2 ft NAVD88",cite:"c1"},{text:" — within the "},{tier:"empirical",text:"2012 Sandy Inundation Zone, which recorded a peak storm tide of 11.4 ft NAVD88 at the Battery",cite:"c2"},{text:" 2.4 mi to the northwest. "},{tier:"modeled",text:"FEMA's preliminary FIRM places the parcel in Zone AE (BFE 11 ft NAVD88)",cite:"c4"},{text:", a 4.8 ft freeboard above current grade. The site is upgradient of two FloodNet sensors and three blocks from a chronic 311 cluster."}]},{kind:"head",n:"02",label:"Empirical evidence",tier:"empirical"},{kind:"prose",parts:[{tier:"empirical",text:"FloodNet sensor BK-RH-002 (Coffey Park, 1,200 ft south) recorded 7 above-curb events between 2024-06 and 2026-04",cite:"c3"},{text:", with a peak depth of 14.3 cm during the 2025-09-29 nor'easter. "},{tier:"empirical",text:"USGS post-Sandy high-water marks within 500 ft cluster between 6.8 and 8.1 ft NAVD88",cite:"c1"},{text:", consistent with 0.6–1.9 ft of standing water at the queried address during the storm."}]},{kind:"head",n:"03",label:"Modeled scenarios",tier:"modeled"},{kind:"prose",parts:[{tier:"modeled",text:"DEP's Moderate Stormwater Scenario (2.13 in/hr design storm) shows ponding ≥4 in across the western half of the lot",cite:"c5"},{text:", routed by the 1.2% slope toward Imlay St. "},{tier:"modeled",text:"Under NPCC4's 2050 90th-percentile sea-level rise (30 in)",cite:"c6"},{text:", the parcel falls within the projected daily-tidal floodplain by mid-century. "},{tier:"synthetic",text:"Synthetic SAR backscatter for 2025-09-14 (Sentinel-1 cloud-occluded) was generated by TerraMind v1.2 and is presented as a prior, not an observation",cite:"c9"},{text:"; treat with appropriate caution."}]},{kind:"head",n:"04",label:"Policy context"},{kind:"prose",parts:[{tier:"proxy",text:"311 flood complaints within the surrounding census tract total 89 calls over 2019–2025, with seasonal clustering in Aug–Oct",cite:"c7"},{text:". "},{tier:"proxy",text:"NFIP claims aggregated to tract 36047008500 total $4.1M across 47 paid losses since 2000",cite:"c8"},{text:". "},{tier:"modeled",text:"The site lies within the NYC Waterfront Revitalization Program Coastal Risk Area; CEQR §817 review applies to any discretionary action",cite:"c10"},{text:"."}]}],ce={wallSeconds:14,cacheHit:.92,cards:[{id:"fc-fema",stone:"cornerstone",tier:"modeled",variant:"headline",source:"FEMA",agency:"Federal Emergency Management Agency",vintage:"2024-09",title:"Preliminary FIRM, panel 36047C0207G",headline:"Zone AE",subhead:"BFE 11 ft NAVD88 · freeboard +4.8 ft",body:"Address sits within the regulatory 1% annual-chance floodplain. Base Flood Elevation 11.0 ft NAVD88; first floor must be at or above this datum for NFIP rating.",docId:"FEMA-FIRM-36047C0207G",citeId:"c4",mapLayer:"fema-ae"},{id:"fc-hwm",stone:"cornerstone",tier:"empirical",variant:"tabular",source:"USGS",agency:"U.S. Geological Survey",vintage:"2013-05",title:"Post-Sandy high-water marks within 500 ft",columns:["id","elev.","dist."],rows:[["HWM-NY-3081","7.4 ft NAVD88","0.18 mi"],["HWM-NY-3082","8.1 ft NAVD88","0.22 mi"],["HWM-NY-3105","6.8 ft NAVD88","0.31 mi"]],sub:"3 marks · max 8.1 ft · surveyed Nov 2012",docId:"USGS-OFR-2013-1234",citeId:"c1",mapLayer:"hwm"},{id:"fc-stormwater",stone:"cornerstone",tier:"modeled",variant:"raster",source:"NYC DEP",agency:"NYC Dept. of Environmental Protection",vintage:"2024-06",title:"Stormwater Flood Map · moderate scenario",rasterKind:"stormwater",sub:"2.13 in/hr · ponding ≥4 in W half of lot · routed toward Imlay St",docId:"NYCDEP-SWFM-2024",citeId:"c5",mapLayer:"stormwater"},{id:"fc-register-rh",stone:"keystone",tier:"empirical",variant:"register",source:"NYC OpenData",agency:"NYC OpenData · multi-agency join",vintage:"2026-05",title:"Nearby exposed assets",registers:[{reg:"MTA",tier:"empirical",label:"Smith–9 St subway entrance",detail:"0.34 mi · F · G",sourceId:"MTA-ENT-N048",vintage:"2025-11",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook East Houses",detail:"0.41 mi · 2,878 res.",sourceId:"NYCHA-RHE",vintage:"2025-Q3",note:null},{reg:"NYCHA",tier:"empirical",label:"Red Hook West Houses",detail:"0.52 mi · 3,142 res.",sourceId:"NYCHA-RHW",vintage:"2025-Q3",note:null},{reg:"DOE",tier:"empirical",label:"PS 27 Agnes Y. Humphrey",detail:"0.29 mi · 271 K-5",sourceId:"DOE-K027",vintage:"2024-25",note:null},{reg:"DOH",tier:"empirical",label:null,detail:null,sourceId:null,vintage:null,note:"no acute-care hospital within 1.0 mi (silent)"},{reg:"PLUTO",tier:"empirical",label:"Lot 36047 / 521 / 7",detail:"BIN 3018472 · MX-1",sourceId:"PLUTO-2024v2",vintage:"2024-12",note:null}],sub:"5 of 6 registers fired · 1 silent · joined within 1.0 mi",docId:"RIPRAP-EXP-RH80",citeId:"c-reg-rh",mapLayer:"registers"},{id:"fc-floodnet",stone:"touchstone",tier:"empirical",variant:"spark",source:"FloodNet",agency:"FloodNet NYC sensor network",vintage:"2026-04",title:"Sensor BK-RH-002, monthly above-curb events",headline:"7 events",subhead:"Jun 2024 → Apr 2026 · peak 14.3 cm",spark:[0,0,1,0,2,1,0,0,3,0,1,0,0,0,2,1,0,0,1,0,2,4,1,1],sparkSub:"Sensor located 0.21 mi N at Coffey & Van Brunt. Above-curb depth in cm; events ≥2 cm.",docId:"FN-BK-RH-002",citeId:"c3",mapLayer:"floodnet"},{id:"fc-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests",vintage:"2025-12",title:"Recent 311 flood complaints, BK CB6",headline:"89 calls",subhead:"2019–2025 · seasonal cluster Aug–Oct",histogram:[3,2,1,0,1,4,7,12,18,11,5,3,4,2,1,0,2,3,8,9,4,2,1,0],sparkSub:"Filtered to complaint types: Sewer (Backup), Street Flooding, Catch Basin Clogged. Within 200 m of address.",docId:"NYC311-FLD-CB6",citeId:"c7",mapLayer:"complaints"},{id:"fc-prithvi-pluvial",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC-Pluvial",agency:"NASA-IBM Prithvi v2 · NYC fine-tune",vintage:"2026-05-02 · Sentinel-2",title:"Pluvial flood prediction · Prithvi-NYC-Pluvial",rasterKind:"prithvi",headline:"0.3% flooded",subhead:"no flooding apparent · scene 2026-05-02",sub:"Model interpretation of imagery, not real-time observation. Confidence-mean 0.84 across non-flooded pixels.",docId:"PRITHVI-NYC-PLUV-V2-20260502",citeId:"c-prithvi",illustrative:!0,mapLayer:"prithvi-pluvial"},{id:"fc-terramind-lulc",stone:"touchstone",tier:"synthetic",variant:"lulc",source:"TerraMind v1.2",agency:"IBM TerraMind v1.2 · Sentinel-2 inputs",vintage:"Sentinel-2 · 2024-09-18",title:"Land use / land cover · TerraMind v1.2",rasterKind:"lulc",classMix:[{k:"urban",pct:62,color:"#C66"},{k:"water",pct:18,color:"#5B7FB4"},{k:"vegetation",pct:12,color:"#5B8A4A"},{k:"barren",pct:6,color:"#A89A78"},{k:"wetland",pct:2,color:"#D9C75A"}],sub:"Synthetic prior. LULC palette is a layer convention, not a tier signal.",docId:"TERRAMIND-LULC-20240918",citeId:"c-tm-lulc",illustrative:!0,mapLayer:"terramind-lulc"},{id:"fc-nws",stone:"touchstone",tier:"empirical",variant:"scalars",source:"NWS KNYC",agency:"NOAA · National Weather Service",vintage:"2026-05-05",title:"Current weather, station KNYC",scalars:[{value:"0.02 in",label:"precip · last 24h"},{value:"67°F",label:"temp · current"},{value:"PC",label:"conditions"}],sub:"Observation timestamp 2026-05-05 14:18 ET. Central Park station; not point-of-query.",docId:"NWS-KNYC",citeId:"c-nws",mapLayer:"nws"},{id:"fc-ttm-surge",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 (zero-shot)",agency:"IBM Granite-TimeSeries · regional",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 9.6 h horizon (regional)",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:"+47 cm @ +38h"},headline:"+47 cm",subhead:"peak surge residual · 9.6h horizon · 6-min cadence",sub:"Regional disclosure. Nowcast applies city-wide via NOAA station 8518750. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_zeroshot",citeId:"c-ttm",mapLayer:null},{id:"fc-ttm-surge-ft",stone:"lodestone",tier:"modeled",variant:"timeseries-ft",source:"msradam/Granite-TTM-r2-Battery-Surge",agency:"Granite TTM r2 · NYC-specialized fine-tune",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery — 96 h horizon (NYC-specialized fine-tune)",timeseries:{hours:96,peak:{x:38,y:53},peakLabel:"+53 cm @ +38h"},headline:"+53 cm",subhead:"peak surge · 96h horizon · hourly cadence",sub:"Fine-tuned on NYC tide-gauge history. Trained on AMD MI300X.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_finetune",citeId:"c-ttm-ft",mapLayer:null,hfModelCard:"huggingface.co/msradam/Granite-TTM-r2-Battery-Surge",rmse:"0.157 m",skillVsPersistence:"−35% vs persistence",hardwareBadge:"MI300X"},{id:"fc-npcc4",stone:"lodestone",tier:"modeled",variant:"forecast",source:"NPCC4",agency:"NYC Panel on Climate Change, 4th Assessment",vintage:"2024-03",title:"Sea-level rise projections, Lower NY Harbor",forecast:[{year:2030,low:4,mid:6,high:9},{year:2050,low:13,mid:22,high:30},{year:2080,low:28,mid:49,high:75},{year:2100,low:38,mid:71,high:114}],sub:"inches MSL · 17th–83rd %ile range, median line. Battery tide-gauge baseline.",docId:"NPCC4-Ch3-Tbl3.2",citeId:"c6",mapLayer:null},{id:"fc-mellea-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · grounding check",vintage:"2026-05-05 14:22 ET",title:"Briefing reconciliation",metaRows:[{k:"mellea reroll",v:"1 reroll"},{k:"grounding checks",v:"4/4 passed"},{k:"citations resolved",v:"4"},{k:"wall-clock",v:"24.0 s"}],sub:"Capstone produces prose, not cards. This meta-card summarizes the reconciler chain that wrote the four-section briefing above.",docId:"RIPRAP-CAP-RH80",citeId:null,mapLayer:null}],stones:[{key:"cornerstone",members:[{id:"CORN-001",name:"sandy_inundation",status:"fired",tier:"empirical",ms:412},{id:"CORN-002",name:"dep_stormwater",status:"fired",tier:"modeled",ms:540},{id:"CORN-003",name:"ida_hwm_2021",status:"fired",tier:"empirical",ms:612},{id:"CORN-004",name:"prithvi_eo_v2",status:"fired",tier:"modeled",ms:980},{id:"CORN-005",name:"microtopo_lidar",status:"fired",tier:"proxy",ms:1240}]},{key:"keystone",members:[{id:"KEY-001",name:"mta_entrance_exposure",status:"silent_by_design",tier:"empirical",ms:30,note:"no entrances within radius"},{id:"KEY-002",name:"nycha_development_exposure",status:"silent_by_design",tier:"empirical",ms:28,note:"no NYCHA developments within 1.0 mi"},{id:"KEY-003",name:"doe_school_exposure",status:"silent_by_design",tier:"empirical",ms:24,note:"no DOE schools within 1.0 mi"},{id:"KEY-004",name:"doh_hospital_exposure",status:"silent_by_design",tier:"empirical",ms:22,note:"no acute-care hospitals within 1.0 mi"}]},{key:"touchstone",members:[{id:"TCH-001",name:"floodnet",status:"fired",tier:"empirical",ms:285},{id:"TCH-002",name:"nyc311",status:"fired",tier:"proxy",ms:410},{id:"TCH-003",name:"nws_obs",status:"fired",tier:"empirical",ms:240},{id:"TCH-004",name:"noaa_tides",status:"fired",tier:"empirical",ms:196},{id:"TCH-005",name:"prithvi_eo_live",status:"fired",tier:"modeled",ms:4920},{id:"TCH-006",name:"terramind_lulc",status:"fired",tier:"synthetic",ms:2100}]},{key:"lodestone",members:[{id:"LOD-001",name:"nws_alerts",status:"fired",tier:"modeled",ms:110},{id:"LOD-002",name:"ttm_forecast",status:"fired",tier:"modeled",ms:1500},{id:"LOD-003",name:"ttm_battery_surge",status:"fired",tier:"modeled",ms:1480},{id:"LOD-004",name:"floodnet_forecast",status:"silent_by_design",tier:"modeled",ms:14,note:"sensor has only 2 historical events; forecast omitted (silent-floor: 5)"},{id:"LOD-005",name:"ttm_311_forecast",status:"errored",tier:"modeled",ms:0,note:"311 history fetch failed: HTTP 503 at NYC OpenData (3 retries)"}]},{key:"capstone",members:[{id:"CAP-001",name:"rag_granite_embedding",status:"fired",tier:"proxy",ms:410},{id:"CAP-002",name:"gliner_extract",status:"fired",tier:"proxy",ms:280},{id:"CAP-003",name:"reconcile_granite41",status:"fired",tier:"modeled",ms:6240}]}].map(a=>({key:a.key,members:re(a.key,a.members)}))};var me=q('<section class="hero-band"><div class="hero-band-inner"><div class="app-shell-top is-desktop"><main id="region-briefing" class="app-region app-region-brief" aria-labelledby="brief-h1"><header class="region-head"><span class="section-label">Briefing</span> <button type="button" class="region-action" aria-label="Replay streaming">↻ replay stream</button></header> <h1 id="brief-h1" class="brief-h1">Flood-exposure briefing <span class="brief-h1-addr"> </span></h1> <!></main> <div class="app-region-side" style="grid-area: side;"><aside id="region-map" class="app-region app-region-map" aria-label="Map region"><header class="region-head"><span class="section-label">Map</span> <span class="region-head-meta">Carto Positron · z15 · 40.6776°N 74.0096°W</span></header> <div style="position: relative; flex: 1; min-height: 0;"><!> <!></div></aside> <aside id="region-cites" class="app-region app-region-cites" aria-label="Citations"><!></aside></div></div> <div class="app-shell-bottom"><section class="app-region app-region-findings" aria-label="Findings"><!></section></div></div></section>');function ye(a,T){Z(T,!0);let c=l(null),F="comfortable",B="smart",b=l(!1);X(()=>{typeof window<"u"&&d(b,new URL(window.location.href).searchParams.get("grammar")==="1")});function Y(o){d(c,o,!0)}function E(o){const s=document.getElementById("region-cites");s&&s.scrollIntoView({behavior:"smooth",block:"start"})}let n=l(Q({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),m=l(0);$(()=>(de({queryId:"sample",queryText:R,intent:"single_address",specialists:9,blocks:x,citations:y,generatedAt:new Date().toISOString(),attempts:1}),M.markReady(),()=>M.reset()));const L={label:"80 Pioneer St",lat:40.6776,lon:-74.0096},C={type:"FeatureCollection",features:[{type:"Feature",properties:{source:"sample-fixture",tier:"synthetic"},geometry:{type:"Polygon",coordinates:[[[-74.014,40.679],[-74.007,40.68],[-74.005,40.677],[-74.009,40.6755],[-74.014,40.679]]]}}]};var u=me(),N=e(u),p=e(N),h=e(p),g=e(h),D=r(e(g),2);t(g);var v=r(g,2),w=r(e(v)),H=e(w,!0);t(w),t(v);var O=r(v,2);ie(O,{get blocks(){return x},get citations(){return y},streaming:!0,get replayKey(){return i(m)}}),t(h);var I=r(h,2),f=e(I),S=r(e(f),2),k=e(S);ae(k,{get address(){return L},get activeLayers(){return i(n)},get syntheticPrior(){return C},get linkedKey(){return i(c)}});var K=r(k,2);{let o=te(()=>({empirical:0,modeled:0,synthetic:C.features.length,proxy:0}));ne(K,{get active(){return i(n)},get featureCounts(){return i(o)},onToggle:s=>d(n,{...i(n),[s]:!i(n)[s]},!0)})}t(S),t(f);var _=r(f,2),G=e(_);se(G,{get citations(){return y}}),t(_),t(I),t(p);var P=r(p,2),A=e(P),W=e(A);oe(W,{get data(){return ce},density:F,provenanceMode:B,get showGrammar(){return i(b)},get linkedKey(){return i(c)},onLink:Y,onCite:E}),t(A),t(P),t(N),t(u),J(()=>j(H,R)),V("click",D,()=>d(m,i(m)+1)),U(a,u),ee()}z(["click"]);export{ye as component,fe as universal};
web/sveltekit/build/_app/version.json CHANGED
@@ -1 +1 @@
1
- {"version":"1778275660567"}
 
1
+ {"version":"1778350475932"}
web/sveltekit/build/index.html CHANGED
@@ -2,29 +2,28 @@
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
- <link rel="icon" type="image/png" href="/favicon.png" />
7
  <meta name="viewport" content="width=device-width, initial-scale=1" />
8
  <meta name="description" content="Riprap — citation-grounded NYC flood-exposure briefings." />
9
  <title>Riprap — flood-exposure briefing</title>
10
- <link href="./_app/immutable/entry/start.BIDfHH4-.js" rel="modulepreload">
11
- <link href="./_app/immutable/chunks/BOtZ6QcV.js" rel="modulepreload">
12
  <link href="./_app/immutable/chunks/BTUA7_xE.js" rel="modulepreload">
13
- <link href="./_app/immutable/entry/app.CoGsDDek.js" rel="modulepreload">
14
  <link href="./_app/immutable/chunks/CXQd8Y6F.js" rel="modulepreload">
15
  <link href="./_app/immutable/chunks/CWw6qgC_.js" rel="modulepreload">
16
  <link href="./_app/immutable/chunks/Bd-v_9Ud.js" rel="modulepreload">
17
  <link href="./_app/immutable/chunks/CW0zSL4D.js" rel="modulepreload">
18
- <link href="./_app/immutable/nodes/0.h-vIKZsr.js" rel="modulepreload">
19
  <link href="./_app/immutable/chunks/DxQlA7U2.js" rel="modulepreload">
20
- <link href="./_app/immutable/chunks/nUW4eUox.js" rel="modulepreload">
21
  <link href="./_app/immutable/chunks/DCD6_LXk.js" rel="modulepreload">
22
  <link href="./_app/immutable/chunks/B0XoTt7U.js" rel="modulepreload">
23
  <link href="./_app/immutable/chunks/DixtWtwq.js" rel="modulepreload">
24
- <link href="./_app/immutable/nodes/2.BWTkJ8km.js" rel="modulepreload">
25
  <link href="./_app/immutable/chunks/cDW0xQNP.js" rel="modulepreload">
26
  <link href="./_app/immutable/chunks/25_y8TFd.js" rel="modulepreload">
27
- <link href="./_app/immutable/chunks/CAMdvC-O.js" rel="modulepreload">
28
  <!--1uha8ag--><meta name="description" content="A citation-grounded flood-exposure briefing tool for any address, neighborhood, or BBL in New York City."/><!----><title>Riprap — Flood Exposure Briefing for NYC</title>
29
  <link href="./_app/immutable/assets/RipMark.ClxF_PAC.css" rel="stylesheet">
30
  <link href="./_app/immutable/assets/0.DiQNUxm-.css" rel="stylesheet">
@@ -38,15 +37,15 @@
38
 
39
  <script>
40
  {
41
- __sveltekit_chon6g = {
42
  base: new URL(".", location).pathname.slice(0, -1)
43
  };
44
 
45
  const element = document.currentScript.parentElement;
46
 
47
  Promise.all([
48
- import("./_app/immutable/entry/start.BIDfHH4-.js"),
49
- import("./_app/immutable/entry/app.CoGsDDek.js")
50
  ]).then(([kit, app]) => {
51
  kit.start(app, element, {
52
  node_ids: [0, 2],
 
2
  <html lang="en">
3
  <head>
4
  <meta charset="utf-8" />
5
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' fill='%23FAFAF7'/%3E%3Crect x='2' y='2' width='5' height='12' fill='%23D17C00'/%3E%3C/svg%3E" />
 
6
  <meta name="viewport" content="width=device-width, initial-scale=1" />
7
  <meta name="description" content="Riprap — citation-grounded NYC flood-exposure briefings." />
8
  <title>Riprap — flood-exposure briefing</title>
9
+ <link href="./_app/immutable/entry/start.YmL7ZSOR.js" rel="modulepreload">
10
+ <link href="./_app/immutable/chunks/CJeJVIjP.js" rel="modulepreload">
11
  <link href="./_app/immutable/chunks/BTUA7_xE.js" rel="modulepreload">
12
+ <link href="./_app/immutable/entry/app.BhktVbRh.js" rel="modulepreload">
13
  <link href="./_app/immutable/chunks/CXQd8Y6F.js" rel="modulepreload">
14
  <link href="./_app/immutable/chunks/CWw6qgC_.js" rel="modulepreload">
15
  <link href="./_app/immutable/chunks/Bd-v_9Ud.js" rel="modulepreload">
16
  <link href="./_app/immutable/chunks/CW0zSL4D.js" rel="modulepreload">
17
+ <link href="./_app/immutable/nodes/0.Dv1TzIuH.js" rel="modulepreload">
18
  <link href="./_app/immutable/chunks/DxQlA7U2.js" rel="modulepreload">
19
+ <link href="./_app/immutable/chunks/B3Pg95Il.js" rel="modulepreload">
20
  <link href="./_app/immutable/chunks/DCD6_LXk.js" rel="modulepreload">
21
  <link href="./_app/immutable/chunks/B0XoTt7U.js" rel="modulepreload">
22
  <link href="./_app/immutable/chunks/DixtWtwq.js" rel="modulepreload">
23
+ <link href="./_app/immutable/nodes/2.CLD-rsu4.js" rel="modulepreload">
24
  <link href="./_app/immutable/chunks/cDW0xQNP.js" rel="modulepreload">
25
  <link href="./_app/immutable/chunks/25_y8TFd.js" rel="modulepreload">
26
+ <link href="./_app/immutable/chunks/D907np-5.js" rel="modulepreload">
27
  <!--1uha8ag--><meta name="description" content="A citation-grounded flood-exposure briefing tool for any address, neighborhood, or BBL in New York City."/><!----><title>Riprap — Flood Exposure Briefing for NYC</title>
28
  <link href="./_app/immutable/assets/RipMark.ClxF_PAC.css" rel="stylesheet">
29
  <link href="./_app/immutable/assets/0.DiQNUxm-.css" rel="stylesheet">
 
37
 
38
  <script>
39
  {
40
+ __sveltekit_1sh7tn8 = {
41
  base: new URL(".", location).pathname.slice(0, -1)
42
  };
43
 
44
  const element = document.currentScript.parentElement;
45
 
46
  Promise.all([
47
+ import("./_app/immutable/entry/start.YmL7ZSOR.js"),
48
+ import("./_app/immutable/entry/app.BhktVbRh.js")
49
  ]).then(([kit, app]) => {
50
  kit.start(app, element, {
51
  node_ids: [0, 2],
web/sveltekit/build/q/sample.html CHANGED
The diff for this file is too large to render. See raw diff
 
web/sveltekit/src/lib/client/agentStream.ts CHANGED
@@ -56,6 +56,51 @@ export interface FinalResult {
56
  /** Present when intent === "compare". */
57
  intent?: string;
58
  targets?: Array<{ label: string; address: string }>;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
60
 
61
  export interface AgentStreamHandlers {
 
56
  /** Present when intent === "compare". */
57
  intent?: string;
58
  targets?: Array<{ label: string; address: string }>;
59
+ /** Per-call emissions ledger from app/emissions.py. Optional —
60
+ * older backends + the not_implemented short-circuit may omit it. */
61
+ emissions?: EmissionsSummary;
62
+ }
63
+
64
+ export interface EmissionsCall {
65
+ kind: 'llm' | 'ml';
66
+ model?: string;
67
+ endpoint?: string;
68
+ backend: string;
69
+ hardware: string;
70
+ hardware_label: string;
71
+ power_w: number;
72
+ duration_s: number;
73
+ prompt_tokens?: number | null;
74
+ completion_tokens?: number | null;
75
+ total_tokens?: number | null;
76
+ stream?: boolean;
77
+ wh: number;
78
+ joules: number;
79
+ }
80
+
81
+ export interface EmissionsSummary {
82
+ n_calls: number;
83
+ total_wh: number;
84
+ total_mwh: number;
85
+ total_joules: number;
86
+ total_duration_s: number;
87
+ tokens: {
88
+ prompt?: number | null;
89
+ completion?: number | null;
90
+ total?: number | null;
91
+ };
92
+ by_kind: Record<string, { wh: number; mwh: number; n: number; duration_s: number }>;
93
+ by_hardware: Record<string, {
94
+ label: string; power_w: number; wh: number; mwh: number; n: number; duration_s: number;
95
+ }>;
96
+ calls: EmissionsCall[];
97
+ comparison: {
98
+ cloud_per_query_wh: number;
99
+ cloud_per_query_mwh: number;
100
+ ratio_cloud_over_query: number | null;
101
+ cloud_source: string;
102
+ };
103
+ method: string;
104
  }
105
 
106
  export interface AgentStreamHandlers {
web/sveltekit/src/lib/client/cardAdapter.ts CHANGED
@@ -659,6 +659,7 @@ export function adaptFinalToFindings(
659
  cards: cards.filter((c): c is Card => c != null),
660
  stones: buildStoneTraces(trace),
661
  wallSeconds,
 
662
  };
663
  }
664
 
 
659
  cards: cards.filter((c): c is Card => c != null),
660
  stones: buildStoneTraces(trace),
661
  wallSeconds,
662
+ emissions: (f as { emissions?: FindingsData['emissions'] }).emissions,
663
  };
664
  }
665
 
web/sveltekit/src/lib/components/findings/FindingsRegion.svelte CHANGED
@@ -66,6 +66,7 @@
66
  stones={data.stones}
67
  wallSeconds={data.wallSeconds}
68
  cacheHit={data.cacheHit}
 
69
  />
70
 
71
  {#each STONE_ORDER as key (key)}
 
66
  stones={data.stones}
67
  wallSeconds={data.wallSeconds}
68
  cacheHit={data.cacheHit}
69
+ emissions={data.emissions}
70
  />
71
 
72
  {#each STONE_ORDER as key (key)}
web/sveltekit/src/lib/components/findings/RunHealthStrip.svelte CHANGED
@@ -1,17 +1,20 @@
1
  <script lang="ts">
2
  import type { Card, StoneTrace } from '$lib/types/card';
 
3
 
4
  /** Top-of-Findings status row. Mirrors findings.jsx RunHealth44:
5
  * Stones · functions fired · evidence cards · wall-clock · silent /
6
- * warn / error chips when nonzero. */
 
7
  interface Props {
8
  cards: Card[];
9
  stones: StoneTrace[];
10
  wallSeconds?: number;
11
  cacheHit?: number;
 
12
  }
13
 
14
- let { cards, stones, wallSeconds, cacheHit }: Props = $props();
15
 
16
  function flatten(ms: StoneTrace['members']): StoneTrace['members'] {
17
  return ms.flatMap((m) => (m.children ? [m, ...flatten(m.children)] : [m]));
@@ -30,6 +33,36 @@
30
  let wall = $derived(wallSeconds == null
31
  ? '—'
32
  : wallSeconds < 1 ? `${Math.round(wallSeconds * 1000)}ms` : `${wallSeconds.toFixed(1)}s`);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  </script>
34
 
35
  <div class="rh">
@@ -62,6 +95,14 @@
62
  {/if}
63
  <span class="rh-sep">·</span>
64
  <span class="rh-item rh-total"><strong>{total}</strong> registered</span>
 
 
 
 
 
 
 
 
65
  </div>
66
 
67
  <style>
@@ -90,4 +131,19 @@
90
  .rh-err { color: #B91C1C; }
91
  .rh-notinvoked { color: var(--ink-tertiary); font-style: italic; }
92
  .rh-total strong { color: var(--ink-tertiary); }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  </style>
 
1
  <script lang="ts">
2
  import type { Card, StoneTrace } from '$lib/types/card';
3
+ import type { EmissionsSummary } from '$lib/client/agentStream';
4
 
5
  /** Top-of-Findings status row. Mirrors findings.jsx RunHealth44:
6
  * Stones · functions fired · evidence cards · wall-clock · silent /
7
+ * warn / error chips when nonzero. Also surfaces a compact emissions
8
+ * chip (mWh + tokens) when the backend reports a per-call ledger. */
9
  interface Props {
10
  cards: Card[];
11
  stones: StoneTrace[];
12
  wallSeconds?: number;
13
  cacheHit?: number;
14
+ emissions?: EmissionsSummary;
15
  }
16
 
17
+ let { cards, stones, wallSeconds, cacheHit, emissions }: Props = $props();
18
 
19
  function flatten(ms: StoneTrace['members']): StoneTrace['members'] {
20
  return ms.flatMap((m) => (m.children ? [m, ...flatten(m.children)] : [m]));
 
33
  let wall = $derived(wallSeconds == null
34
  ? '—'
35
  : wallSeconds < 1 ? `${Math.round(wallSeconds * 1000)}ms` : `${wallSeconds.toFixed(1)}s`);
36
+
37
+ // Format emissions: prefer mWh under 100, else Wh; tokens with K-suffix.
38
+ let emEnergy = $derived.by(() => {
39
+ if (!emissions || emissions.total_wh === 0) return null;
40
+ const wh = emissions.total_wh;
41
+ if (wh < 0.1) return `${emissions.total_mwh.toFixed(1)} mWh`;
42
+ return `${wh.toFixed(2)} Wh`;
43
+ });
44
+ let emTokens = $derived.by(() => {
45
+ const t = emissions?.tokens?.total;
46
+ if (!t) return null;
47
+ return t >= 1000 ? `${(t / 1000).toFixed(1)}K tok` : `${t} tok`;
48
+ });
49
+ let emRatio = $derived(emissions?.comparison?.ratio_cloud_over_query ?? null);
50
+ let emHardware = $derived.by(() => {
51
+ if (!emissions) return null;
52
+ const labels = Object.values(emissions.by_hardware).map(h => h.label);
53
+ return labels.length === 1 ? labels[0] : labels.join(' + ');
54
+ });
55
+ let emTooltip = $derived.by(() => {
56
+ if (!emissions) return '';
57
+ const lines = [
58
+ `${emissions.n_calls} inference calls — ${emissions.total_joules} J total`,
59
+ emHardware ? `Hardware: ${emHardware}` : '',
60
+ emissions.tokens.total ? `Tokens: ${emissions.tokens.prompt ?? 0} prompt + ${emissions.tokens.completion ?? 0} completion` : '',
61
+ emRatio != null ? `~${emRatio}× lower than ${emissions.comparison.cloud_per_query_mwh} mWh frontier-cloud per-query estimate` : '',
62
+ emissions.method,
63
+ ].filter(Boolean);
64
+ return lines.join('\n');
65
+ });
66
  </script>
67
 
68
  <div class="rh">
 
95
  {/if}
96
  <span class="rh-sep">·</span>
97
  <span class="rh-item rh-total"><strong>{total}</strong> registered</span>
98
+ {#if emEnergy}
99
+ <span class="rh-sep">·</span>
100
+ <span class="rh-item rh-em" title={emTooltip}>
101
+ <strong>{emEnergy}</strong> inference
102
+ {#if emTokens}<span class="rh-em-tok">/ {emTokens}</span>{/if}
103
+ {#if emRatio != null}<span class="rh-em-ratio">~{emRatio}× &lt; cloud</span>{/if}
104
+ </span>
105
+ {/if}
106
  </div>
107
 
108
  <style>
 
131
  .rh-err { color: #B91C1C; }
132
  .rh-notinvoked { color: var(--ink-tertiary); font-style: italic; }
133
  .rh-total strong { color: var(--ink-tertiary); }
134
+ .rh-em {
135
+ cursor: help;
136
+ color: var(--ink-secondary);
137
+ }
138
+ .rh-em strong { color: var(--ink); }
139
+ .rh-em-tok { margin-left: 4px; opacity: 0.75; }
140
+ .rh-em-ratio {
141
+ margin-left: 6px;
142
+ padding: 1px 5px;
143
+ border: 1px solid var(--rule-soft);
144
+ border-radius: 2px;
145
+ font-size: 10px;
146
+ letter-spacing: 0.03em;
147
+ color: var(--ink-tertiary);
148
+ }
149
  </style>
web/sveltekit/src/lib/types/card.ts CHANGED
@@ -233,6 +233,9 @@ export type FindingsData = {
233
  wallSeconds?: number;
234
  /** Optional cache-hit ratio, dev-mode surfaced. */
235
  cacheHit?: number;
 
 
 
236
  };
237
 
238
  /** Density toggle — affects card padding + register row height. */
 
233
  wallSeconds?: number;
234
  /** Optional cache-hit ratio, dev-mode surfaced. */
235
  cacheHit?: number;
236
+ /** Per-call inference emissions (energy + tokens). Surfaced as a
237
+ * chip in RunHealthStrip; full breakdown available via tooltip. */
238
+ emissions?: import('$lib/client/agentStream').EmissionsSummary;
239
  };
240
 
241
  /** Density toggle — affects card padding + register row height. */