ux: stream Findings cards in real time + fade-in instead of typing caret
Browse filesTwo follow-ups from the live Red Hook walkthrough:
1) **Findings stream as specialists fire.** Previously cards only
populated from `finalResult` (one event at end of stream). Now a
`liveResults` map updates on every SSE `step` event and feeds the
adapter; cards pop into each Stone's rail as their specialist
completes.
* lib/client/cardAdapter.ts gains `applyStepEventToLiveState()`,
mapping step names like `sandy_inundation` / `dep_stormwater` /
`mta_entrance_exposure` to the FSM state-keys the card builders
expect (`sandy`, `dep`, `mta_entrances`, ...). The slim `step.result`
summary shapes are translated into the doc-payload shapes the
builders read; one card per fired specialist, partial-data tolerant.
* `adaptFinalToFindings()` accepts `Partial<FinalResult> | null` and
skips the Capstone meta card until at least one of streaming /
finalResult has produced something to summarise.
* src/routes/q/[queryId]/+page.svelte plumbs `liveResults` and a
`liveTick` counter into a `$derived.by` block so cards re-render
incrementally; on `final`, the richer payload merges over the
top of the slim summaries (same key shape, more fields).
2) **Replace the typing-caret animation with a per-block fade-in.**
The blinking ▍ cursor at the tail of the streaming briefing felt
chatty; citation-grounded paragraphs should land with authority.
* src/lib/components/briefing/Briefing.svelte wraps each rendered
block (status / head / para) with `.briefing-fade-in` and adds a
scoped 320ms ease-out keyframe (opacity 0→1 + 2px translateY).
The `<span class="streaming-caret">` is gone.
* src/lib/components/findings/FindingCard.svelte applies the same
pattern to `.fc` so each new card eases into the rail rather than
popping. 360ms / 4px translateY for slightly softer entrance.
Both animations respect prefers-reduced-motion via the global
override in lib/tokens.css.
Build clean, type-check unchanged (5 pre-existing errors stay
unchanged in unrelated files; my code is zero-warning, zero-error).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- web/sveltekit/build/200.html +8 -8
- web/sveltekit/build/_app/immutable/assets/{Briefing.Cg0TTl7h.css → Briefing.Dmn9LgiV.css} +1 -1
- web/sveltekit/build/_app/immutable/assets/{FindingsRegion.D6bfATou.css → FindingsRegion.NjYRUAvf.css} +1 -1
- web/sveltekit/build/_app/immutable/chunks/{Bww_RjdA.js → BV_WLJ_i.js} +1 -1
- web/sveltekit/build/_app/immutable/chunks/{TTdyitJv.js → CAli5X_k.js} +1 -1
- web/sveltekit/build/_app/immutable/chunks/Cl16PtNL.js +1 -0
- web/sveltekit/build/_app/immutable/chunks/CtphE0zf.js +0 -1
- web/sveltekit/build/_app/immutable/chunks/{BPL6dYL1.js → yTOzveqN.js} +1 -1
- web/sveltekit/build/_app/immutable/entry/{app.ccWcazJ_.js → app.DXmMqCY7.js} +2 -2
- web/sveltekit/build/_app/immutable/entry/start.CBEzc0_C.js +1 -0
- web/sveltekit/build/_app/immutable/entry/start.DwypF5JZ.js +0 -1
- web/sveltekit/build/_app/immutable/nodes/{0.CLNNGkkj.js → 0.BOY_jD4V.js} +1 -1
- web/sveltekit/build/_app/immutable/nodes/{1.DS9Ak1PH.js → 1.rUM1MjPf.js} +1 -1
- web/sveltekit/build/_app/immutable/nodes/{2.CtcjjzWF.js → 2.DUHn2QIZ.js} +1 -1
- web/sveltekit/build/_app/immutable/nodes/{3.CIBu62VC.js → 3.B4iCcTlf.js} +1 -1
- web/sveltekit/build/_app/immutable/nodes/4.C7yZGpb8.js +1 -0
- web/sveltekit/build/_app/immutable/nodes/4.DKy6jurO.js +0 -1
- web/sveltekit/build/_app/immutable/nodes/{5.bzoVhlKW.js → 5.CBtbiPE_.js} +1 -1
- web/sveltekit/build/_app/version.json +1 -1
- web/sveltekit/build/index.html +9 -9
- web/sveltekit/build/q/sample.html +0 -0
- web/sveltekit/src/lib/client/cardAdapter.ts +87 -5
- web/sveltekit/src/lib/components/briefing/Briefing.svelte +19 -6
- web/sveltekit/src/lib/components/findings/FindingCard.svelte +7 -0
- web/sveltekit/src/routes/q/[queryId]/+page.svelte +29 -8
|
@@ -6,16 +6,16 @@
|
|
| 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.
|
| 10 |
-
<link href="/_app/immutable/chunks/
|
| 11 |
<link href="/_app/immutable/chunks/DwbuJhNu.js" rel="modulepreload">
|
| 12 |
-
<link href="/_app/immutable/entry/app.
|
| 13 |
<link href="/_app/immutable/chunks/1oGnrPC6.js" rel="modulepreload">
|
| 14 |
<link href="/_app/immutable/chunks/Dlpu43Tj.js" rel="modulepreload">
|
| 15 |
<link href="/_app/immutable/chunks/8F5LpR-T.js" rel="modulepreload">
|
| 16 |
-
<link href="/_app/immutable/nodes/0.
|
| 17 |
<link href="/_app/immutable/chunks/DNaFzQeI.js" rel="modulepreload">
|
| 18 |
-
<link href="/_app/immutable/chunks/
|
| 19 |
<link href="/_app/immutable/chunks/DFFHaukH.js" rel="modulepreload">
|
| 20 |
|
| 21 |
<link href="/_app/immutable/assets/0.KpTzaSsX.css" rel="stylesheet">
|
|
@@ -24,15 +24,15 @@
|
|
| 24 |
<div style="display: contents">
|
| 25 |
<script>
|
| 26 |
{
|
| 27 |
-
|
| 28 |
base: ""
|
| 29 |
};
|
| 30 |
|
| 31 |
const element = document.currentScript.parentElement;
|
| 32 |
|
| 33 |
Promise.all([
|
| 34 |
-
import("/_app/immutable/entry/start.
|
| 35 |
-
import("/_app/immutable/entry/app.
|
| 36 |
]).then(([kit, app]) => {
|
| 37 |
kit.start(app, element);
|
| 38 |
});
|
|
|
|
| 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.CBEzc0_C.js" rel="modulepreload">
|
| 10 |
+
<link href="/_app/immutable/chunks/BV_WLJ_i.js" rel="modulepreload">
|
| 11 |
<link href="/_app/immutable/chunks/DwbuJhNu.js" rel="modulepreload">
|
| 12 |
+
<link href="/_app/immutable/entry/app.DXmMqCY7.js" rel="modulepreload">
|
| 13 |
<link href="/_app/immutable/chunks/1oGnrPC6.js" rel="modulepreload">
|
| 14 |
<link href="/_app/immutable/chunks/Dlpu43Tj.js" rel="modulepreload">
|
| 15 |
<link href="/_app/immutable/chunks/8F5LpR-T.js" rel="modulepreload">
|
| 16 |
+
<link href="/_app/immutable/nodes/0.BOY_jD4V.js" rel="modulepreload">
|
| 17 |
<link href="/_app/immutable/chunks/DNaFzQeI.js" rel="modulepreload">
|
| 18 |
+
<link href="/_app/immutable/chunks/yTOzveqN.js" rel="modulepreload">
|
| 19 |
<link href="/_app/immutable/chunks/DFFHaukH.js" rel="modulepreload">
|
| 20 |
|
| 21 |
<link href="/_app/immutable/assets/0.KpTzaSsX.css" rel="stylesheet">
|
|
|
|
| 24 |
<div style="display: contents">
|
| 25 |
<script>
|
| 26 |
{
|
| 27 |
+
__sveltekit_144sd2o = {
|
| 28 |
base: ""
|
| 29 |
};
|
| 30 |
|
| 31 |
const element = document.currentScript.parentElement;
|
| 32 |
|
| 33 |
Promise.all([
|
| 34 |
+
import("/_app/immutable/entry/start.CBEzc0_C.js"),
|
| 35 |
+
import("/_app/immutable/entry/app.DXmMqCY7.js")
|
| 36 |
]).then(([kit, app]) => {
|
| 37 |
kit.start(app, element);
|
| 38 |
});
|
|
@@ -1 +1 @@
|
|
| 1 |
-
.tier-badge.svelte-1acpjpp{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;font-weight:500}
|
|
|
|
| 1 |
+
.tier-badge.svelte-1acpjpp{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;font-weight:500}.briefing-fade-in.svelte-cc2m0h{animation:svelte-cc2m0h-briefing-fade .32s ease-out both}@keyframes svelte-cc2m0h-briefing-fade{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}
|
|
@@ -1 +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}.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}.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}.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-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%}.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}.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.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary)}.prov-status-warn.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b7791f}.prov-status-error.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b91c1c}.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}.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-forecast,.rail.svelte-16iv0n8>.fc.fc-raster,.rail.svelte-16iv0n8>.fc.fc-raster-pred,.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}
|
|
|
|
| 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}.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}.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}.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-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}.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.svelte-qakefz .prov-name:where(.svelte-qakefz){color:var(--ink-tertiary)}.prov-status-warn.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b7791f}.prov-status-error.svelte-qakefz .prov-name:where(.svelte-qakefz){color:#b91c1c}.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}.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-forecast,.rail.svelte-16iv0n8>.fc.fc-raster,.rail.svelte-16iv0n8>.fc.fc-raster-pred,.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}
|
|
@@ -1 +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{bc as Pe,bd as Vt,G as at,j as T,k as I,l as O,o as we,be as Bt}from"./DwbuJhNu.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 Ge{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 ze 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 Gt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function $e({href:e}){return e.split("#")[0]}function j(){}function zt(...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 Ft(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(Fe(e)),Ht(e,t));const X=new Map;function Wt(e,t){const n=Fe(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=Ft(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Jt(e,t,n){if(X.size>0){const a=Fe(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 Fe(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="${zt(...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 je(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return je(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 je(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 je(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_1k2uwdb)==null?void 0:ht.base)??"";var pt;const nn=((pt=globalThis.__sveltekit_1k2uwdb)==null?void 0:pt.assets)??U??"",rn="1778019086140",vt="sveltekit:snapshot",yt="sveltekit:scroll",bt="sveltekit:states",an="sveltekit:pageurl",z="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 G(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=G(o,"preload-code")),r===null&&(r=G(o,"preload-data")),t===null&&(t=G(o,"keepfocus")),n===null&&(n=G(o,"noscroll")),i===null&&(i=G(o,"reload")),s===null&&(s=G(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:j};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 ze?e.status:500}function cn(e){return e instanceof ze?e.text:"Internal Error"}let R,ee,Ce;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},Ce={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),Ce=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=()=>Ce.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)??{},C={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(j)}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_1k2uwdb&&(globalThis.__sveltekit_1k2uwdb.query,globalThis.__sveltekit_1k2uwdb.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[z],L=(l=history.state)==null?void 0:l[Z],k||(k=L=Date.now(),history.replaceState({...history.state,[z]: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 F({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 F({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:jt({...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:C,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 jt({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(j)),c.forEach(h=>h==null?void 0:h[1]().catch(j));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(j);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 Ge)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 C.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 Ge)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:Gt(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 Ct({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 F({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s={},redirect_count:o=0,nav_token:l={},accept:c=j,block:d=j,event:u}){var K;const w=V;V=l;const p=await Te(t,!1),f=e==="enter"?tt(_,p,t,e):Ct({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"&&C.navigating.set(ee.current=f.navigation);let g=p&&await jt(p);if(!g){if(Ae(t,U,S.hash))return await ne(t,i);g=await Nt(t,{id:null},await ae(new ze(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 F({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 C.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={[z]: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)),C.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)){Ct({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 F({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(),F({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[z]){const r=n.state[z];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 F({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,[z]:++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&&C.navigating.set(ee.current=null)});function e(n){_.url=R.url=n,C.page.set(nt(R)),C.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 Ge){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(j),{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,C as s};
|
|
|
|
| 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{bc as Pe,bd as Vt,G as at,j as T,k as I,l as O,o as we,be as Bt}from"./DwbuJhNu.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 Ge{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 ze 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 Gt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function $e({href:e}){return e.split("#")[0]}function j(){}function zt(...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 Ft(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(Fe(e)),Ht(e,t));const X=new Map;function Wt(e,t){const n=Fe(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=Ft(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function Jt(e,t,n){if(X.size>0){const a=Fe(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 Fe(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="${zt(...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 je(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return je(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 je(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 je(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_144sd2o)==null?void 0:ht.base)??"";var pt;const nn=((pt=globalThis.__sveltekit_144sd2o)==null?void 0:pt.assets)??U??"",rn="1778019603760",vt="sveltekit:snapshot",yt="sveltekit:scroll",bt="sveltekit:states",an="sveltekit:pageurl",z="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 G(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=G(o,"preload-code")),r===null&&(r=G(o,"preload-data")),t===null&&(t=G(o,"keepfocus")),n===null&&(n=G(o,"noscroll")),i===null&&(i=G(o,"reload")),s===null&&(s=G(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:j};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 ze?e.status:500}function cn(e){return e instanceof ze?e.text:"Internal Error"}let R,ee,Ce;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},Ce={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),Ce=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=()=>Ce.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)??{},C={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(j)}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_144sd2o&&(globalThis.__sveltekit_144sd2o.query,globalThis.__sveltekit_144sd2o.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[z],L=(l=history.state)==null?void 0:l[Z],k||(k=L=Date.now(),history.replaceState({...history.state,[z]: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 F({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 F({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:jt({...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:C,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 jt({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(j)),c.forEach(h=>h==null?void 0:h[1]().catch(j));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(j);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 Ge)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 C.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 Ge)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:Gt(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 Ct({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 F({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:s={},redirect_count:o=0,nav_token:l={},accept:c=j,block:d=j,event:u}){var K;const w=V;V=l;const p=await Te(t,!1),f=e==="enter"?tt(_,p,t,e):Ct({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"&&C.navigating.set(ee.current=f.navigation);let g=p&&await jt(p);if(!g){if(Ae(t,U,S.hash))return await ne(t,i);g=await Nt(t,{id:null},await ae(new ze(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 F({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 C.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={[z]: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)),C.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)){Ct({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 F({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(),F({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[z]){const r=n.state[z];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 F({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,[z]:++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&&C.navigating.set(ee.current=null)});function e(n){_.url=R.url=n,C.page.set(nt(R)),C.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 Ge){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(j),{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,C as s};
|
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import{k as Ee,o as Pe,a as f,f as S,s as _,t as xe,d as pe,c as he,b as we,l as oe}from"./Dlpu43Tj.js";import{q as re,T as ke,B as _e,ba as ze,i as De,E as Te,aX as Re,b8 as He,F as Ne,w as je,z as Se,A as me,h as Oe,ax as We,p as K,t as M,a as G,s as n,c as r,r as a,v as te,k as t,J as P,K as se,G as Ye,bb as Ue,l as ge,j as be,f as J}from"./DwbuJhNu.js";import{B as Ke,i as I,p as ee}from"./8F5LpR-T.js";import{e as $,s as c,a as de,b as ne,i as ie,c as Ge,C as Qe}from"./CBcGqa-S.js";import{T as le,c as Ve,b as Ze,d as Ae}from"./
|
| 2 |
state, and city sources. No commercial APIs contacted at runtime.</p></div></aside>`);function rr(q,e){K(e,!0);let k=P(()=>Object.values(e.citations).sort((y,u)=>y.n-u.n));var h=at(),l=r(h),p=r(l),b=r(p);a(p),te(2),a(l);var i=n(l,2);$(i,21,()=>t(k),y=>y.id,(y,u)=>{var w=tt();let m;var o=r(w),s=r(o);a(o);var v=n(o,2),d=r(v),C=r(d);le(C,{get tier(){return t(u).tier},size:10,get color(){return`var(--tier-${t(u).tier??""})`}});var B=n(C,2),g=r(B,!0);a(B);var x=n(B,2),F=r(x);a(x),a(d);var E=n(d,2),z=r(E);{var H=R=>{var L=et(),j=r(L,!0);a(L),M(()=>{c(L,"href",t(u).url),_(j,t(u).title)}),f(R,L)},D=P(()=>t(u).url&&t(u).url.startsWith("http")),A=R=>{var L=xe();M(()=>_(L,t(u).title)),f(R,L)};I(z,R=>{t(D)?R(H):R(A,-1)})}a(E);var T=n(E,2),W=r(T),Q=r(W,!0);a(W);var N=n(W,2),O=r(N);a(N),a(T),a(v),a(w),M(()=>{c(w,"id",`cite-${t(u).id??""}`),m=de(w,1,"citation-item",null,m,{"is-active":Ve.active===t(u).id}),_(s,`[${t(u).n??""}]`),_(g,t(u).source),_(F,`v. ${t(u).vintage??""}`),_(Q,t(u).docId),_(O,`retr. ${t(u).retrieved??""}`)}),f(y,w)}),a(i),te(2),a(h),M(()=>_(b,`Citations · ${t(k).length??""}`)),f(q,h),G()}const rt="https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",Me=`<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">
|
|
|
|
| 1 |
+
import{k as Ee,o as Pe,a as f,f as S,s as _,t as xe,d as pe,c as he,b as we,l as oe}from"./Dlpu43Tj.js";import{q as re,T as ke,B as _e,ba as ze,i as De,E as Te,aX as Re,b8 as He,F as Ne,w as je,z as Se,A as me,h as Oe,ax as We,p as K,t as M,a as G,s as n,c as r,r as a,v as te,k as t,J as P,K as se,G as Ye,bb as Ue,l as ge,j as be,f as J}from"./DwbuJhNu.js";import{B as Ke,i as I,p as ee}from"./8F5LpR-T.js";import{e as $,s as c,a as de,b as ne,i as ie,c as Ge,C as Qe}from"./CBcGqa-S.js";import{T as le,c as Ve,b as Ze,d as Ae}from"./Cl16PtNL.js";import{b as Xe,_ as Je}from"./1oGnrPC6.js";function $e(q,e,k,h,l,p){let b=re;re&&ke();var i=null;re&&_e.nodeType===ze&&(i=_e,ke());var y=re?_e:q,u=new Ke(y,!1);De(()=>{const w=e()||null;var m=w==="svg"?He:void 0;if(w===null){u.ensure(null,null);return}return u.ensure(w,o=>{if(w){if(i=re?i:Re(w,m),Ee(i,i),h){re&&Pe(w)&&i.append(document.createComment(""));var s=re?Ne(i):i.appendChild(je());re&&(s===null?Se(!1):me(s)),h(i,s)}Oe.nodes.end=i,o.before(i)}re&&me(o)}),()=>{}},Te),We(()=>{}),b&&(Se(!0),me(y))}var et=S('<a target="_blank" rel="noopener noreferrer"> </a>'),tt=S('<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>'),at=S(`<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 rr(q,e){K(e,!0);let k=P(()=>Object.values(e.citations).sort((y,u)=>y.n-u.n));var h=at(),l=r(h),p=r(l),b=r(p);a(p),te(2),a(l);var i=n(l,2);$(i,21,()=>t(k),y=>y.id,(y,u)=>{var w=tt();let m;var o=r(w),s=r(o);a(o);var v=n(o,2),d=r(v),C=r(d);le(C,{get tier(){return t(u).tier},size:10,get color(){return`var(--tier-${t(u).tier??""})`}});var B=n(C,2),g=r(B,!0);a(B);var x=n(B,2),F=r(x);a(x),a(d);var E=n(d,2),z=r(E);{var H=R=>{var L=et(),j=r(L,!0);a(L),M(()=>{c(L,"href",t(u).url),_(j,t(u).title)}),f(R,L)},D=P(()=>t(u).url&&t(u).url.startsWith("http")),A=R=>{var L=xe();M(()=>_(L,t(u).title)),f(R,L)};I(z,R=>{t(D)?R(H):R(A,-1)})}a(E);var T=n(E,2),W=r(T),Q=r(W,!0);a(W);var N=n(W,2),O=r(N);a(N),a(T),a(v),a(w),M(()=>{c(w,"id",`cite-${t(u).id??""}`),m=de(w,1,"citation-item",null,m,{"is-active":Ve.active===t(u).id}),_(s,`[${t(u).n??""}]`),_(g,t(u).source),_(F,`v. ${t(u).vintage??""}`),_(Q,t(u).docId),_(O,`retr. ${t(u).retrieved??""}`)}),f(y,w)}),a(i),te(2),a(h),M(()=>_(b,`Citations · ${t(k).length??""}`)),f(q,h),G()}const rt="https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json",Me=`<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">
|
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
var Q=i=>{throw TypeError(i)};var dt=(i,t,e)=>t.has(i)||Q("Cannot "+e);var N=(i,t,e)=>(dt(i,t,"read from private field"),e?e.call(i):t.get(i)),X=(i,t,e)=>t.has(i)?Q("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);import{k as Y,s as T,a as v,l as z,f as W,d as ht,b as vt,c as $,t as ft}from"./Dlpu43Tj.js";import{q as G,A as tt,F as L,t as x,T as et,h as ut,b7 as mt,B as rt,C as _t,y as gt,b6 as yt,b3 as bt,aX as pt,b8 as wt,b9 as xt,c as _,r as f,s as k,k as r,J as K,f as U,j,l as C,p as q,a as J,L as Wt,K as at,v as Mt}from"./DwbuJhNu.js";import{p as B,i as A}from"./8F5LpR-T.js";import{s,a as nt,b as St,e as it,i as st}from"./CBcGqa-S.js";import{s as Tt}from"./DNaFzQeI.js";function kt(i,t,e=!1,a=!1,l=!1,c=!1){var h=i,d="";if(e){var o=i;G&&(h=tt(L(o)))}x(()=>{var u=ut;if(d===(d=t()??"")){G&&et();return}if(e&&!G){u.nodes=null,o.innerHTML=d,d!==""&&Y(L(o),o.lastChild);return}if(u.nodes!==null&&(mt(u.nodes.start,u.nodes.end),u.nodes=null),d!==""){if(G){rt.data;for(var y=et(),b=y;y!==null&&(y.nodeType!==_t||y.data!=="");)b=y,y=gt(y);if(y===null)throw yt(),bt;Y(rt,b),h=tt(y);return}var p=a?wt:l?xt:void 0,M=pt(a?"svg":l?"math":"template",p);M.innerHTML=d;var m=a||l?M:M.content;if(Y(L(m),m.lastChild),a||l)for(;L(m);)h.before(L(m));else h.before(m)}})}var Ct=z('<rect x="0" y="0"></rect>'),Et=z('<rect fill="none"></rect>'),It=z("<circle></circle>"),Dt=z('<defs><pattern width="3" height="3" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><line x1="0" y1="0" x2="0" y2="3" stroke-width="1.5"></line></pattern></defs><rect></rect>',1),At=z('<svg role="img" style="flex: none; display: inline-block; vertical-align: -0.12em;"><title> </title><!></svg>');function ot(i,t){let e=B(t,"size",3,12),a=B(t,"color",3,"currentColor");const l={empirical:"Empirical: directly measured or observed",modeled:"Modeled: scenario-based prediction",proxy:"Proxy: indirect indicator",synthetic:"Synthetic prior: generated, not observed"};let c=K(()=>Math.max(1,Math.round(e()/9))),h=K(()=>t.title??l[t.tier]),d=K(()=>`rip-stripe-${t.tier}-${e()}`);var o=At(),u=_(o),y=_(u,!0);f(u);var b=k(u);{var p=g=>{var n=Ct();x(()=>{s(n,"width",e()),s(n,"height",e()),s(n,"fill",a())}),v(g,n)},M=g=>{var n=Et();x(()=>{s(n,"x",r(c)/2),s(n,"y",r(c)/2),s(n,"width",e()-r(c)),s(n,"height",e()-r(c)),s(n,"stroke",a()),s(n,"stroke-width",r(c))}),v(g,n)},m=g=>{var n=It();x(()=>{s(n,"cx",e()/2),s(n,"cy",e()/2),s(n,"r",e()/2-.5),s(n,"fill",a())}),v(g,n)},w=g=>{var n=Dt(),E=U(n),P=_(E),V=_(P);f(P),f(E);var S=k(E);x(()=>{s(P,"id",r(d)),s(V,"stroke",a()),s(S,"x",r(c)/2),s(S,"y",r(c)/2),s(S,"width",e()-r(c)),s(S,"height",e()-r(c)),s(S,"fill",`url(#${r(d)??""})`),s(S,"stroke",a()),s(S,"stroke-width",r(c))}),v(g,n)};A(b,g=>{t.tier==="empirical"?g(p):t.tier==="modeled"?g(M,1):t.tier==="proxy"?g(m,2):g(w,-1)})}f(o),x(()=>{s(o,"width",e()),s(o,"height",e()),s(o,"viewBox",`0 0 ${e()??""} ${e()??""}`),s(o,"aria-label",r(h)),T(y,r(h))}),v(i,o)}var Pt=W('<span><span class="claim-glyph" aria-hidden="false"><!></span> <span class="claim-body"><!></span></span>');function Rt(i,t){var e=Pt(),a=_(e),l=_(a);ot(l,{get tier(){return t.tier},size:11,get color(){return`var(--tier-${t.tier??""})`}}),f(a);var c=k(a,2),h=_(c);Tt(h,()=>t.children),f(c),f(e),x(()=>{nt(e,1,`claim claim-${t.tier??""}`),s(e,"data-tier",t.tier)}),v(i,e)}var F,O;class Nt{constructor(){X(this,F,j(null));X(this,O,j(null))}get active(){return r(N(this,F))}set active(t){C(N(this,F),t,!0)}get highlightDocId(){return r(N(this,O))}set highlightDocId(t){C(N(this,O),t,!0)}}F=new WeakMap,O=new WeakMap;const Lt=new Nt;var Bt=W('<a class="inline-cite"><sup> </sup></a>');function Ft(i,t){q(t,!0);function e(h){h.preventDefault(),Lt.active=t.c.id;const d=document.getElementById(`cite-${t.c.id}`);d==null||d.scrollIntoView({block:"center",behavior:"smooth"})}var a=Bt(),l=_(a),c=_(l);f(l),f(a),x(()=>{s(a,"href",`#cite-${t.c.id??""}`),s(a,"data-cite",t.c.id),s(a,"aria-label",`Citation ${t.c.n??""}: ${t.c.source??""}, ${t.c.title??""}`),T(c,`[${t.c.n??""}]`)}),vt("click",a,e),v(i,a),J()}ht(["click"]);const Ot={empirical:{label:"Empirical",short:"EMP",desc:"Directly measured or observed",examples:"USGS high-water marks · FloodNet sensors · Sandy Inundation Zone"},modeled:{label:"Modeled",short:"MOD",desc:"Scenario-based prediction",examples:"FEMA flood zones · DEP stormwater scenarios · NPCC4 SLR"},proxy:{label:"Proxy",short:"PRX",desc:"Indirect indicator",examples:"311 flood complaints · NFIP claims · terrain indices"},synthetic:{label:"Synthetic prior",short:"SYN",desc:"Generated, not observed",examples:"TerraMind land-cover · synthetic SAR for occluded days"}};function se(i){const t=i.toLowerCase();return t.startsWith("syn")||t.startsWith("terramind")||t.includes("synthetic")?"synthetic":t.startsWith("sandy")||t.startsWith("floodnet")||t.startsWith("usgs")||t.startsWith("mta_entrance")||t.startsWith("nycha_dev")||t.startsWith("doe_school")||t.startsWith("doh_hospital")||t.startsWith("ida_hwm")||t.startsWith("hwm")||t.startsWith("noaa")||t.startsWith("nws_obs")||t.startsWith("prithvi_eo")?"empirical":t.startsWith("dep")||t.startsWith("fema_firm")||t.startsWith("npcc")||t.startsWith("wrp")||t.includes("scenario")||t.includes("forecast")||t.startsWith("prithvi")||t.startsWith("ttm")||t.startsWith("nws_alert")?"modeled":(t.startsWith("nyc311")||t.startsWith("311")||t.startsWith("nfip")||t.startsWith("rag")||t.startsWith("dob")||t.startsWith("hand")||t.startsWith("twi")||t.startsWith("microtopo"),"proxy")}function ne(i){const t=i.toLowerCase();return t==="geocode"||t.startsWith("fan")||t.startsWith("merge")||t==="plan"||t==="compose"||t==="reconcile"||t==="stream"?null:t==="sandy"||t==="sandy_inundation"||t==="floodnet"||t==="ida_hwm"||t==="noaa_tides"||t==="nws_obs"||t==="prithvi_eo_v2"||t==="prithvi_eo_live"||t==="mta_entrance_exposure"||t==="mta_entrances"||t==="nycha_developments"||t==="doe_school_exposure"||t==="doe_schools"||t==="doh_hospital_exposure"||t==="doh_hospitals"?"empirical":t==="dep"||t==="dep_stormwater"||t==="ttm_forecast"||t==="ttm_311_forecast"||t==="floodnet_forecast"||t==="nws_alerts"||t==="prithvi_water"?"modeled":t==="nyc311"||t==="microtopo"||t==="microtopo_lidar"||t==="rag"||t==="rag_mta"?"proxy":t==="terramind"||t==="terramind_synthesis"?"synthetic":null}var zt=W("<span><!> </span>");function Ht(i,t){q(t,!0);let e=B(t,"compact",3,!1),a=K(()=>Ot[t.tier]);var l=zt();let c;var h=_(l);ot(h,{get tier(){return t.tier},size:10,get color(){return`var(--tier-${t.tier??""})`}});var d=k(h);f(l),x(()=>{nt(l,1,`tier-badge tier-badge-${t.tier??""}`,"svelte-1acpjpp"),s(l,"title",r(a).desc),c=St(l,"",c,{color:`var(--tier-${t.tier??""})`}),T(d,` ${(e()?r(a).short:r(a).label)??""}`)}),v(i,l),J()}var Gt=W('<span class="briefing-section-tier"><!></span>'),Kt=W('<span class="briefing-section-title"> </span>'),Ut=W('<h3 class="briefing-section-head"><span class="briefing-section-num"> </span> <span class="briefing-section-label"> </span> <!> <!></h3>');function jt(i,t){var e=Ut(),a=_(e),l=_(a,!0);f(a);var c=k(a,2),h=_(c,!0);f(c);var d=k(c,2);{var o=b=>{var p=Gt(),M=_(p);Ht(M,{get tier(){return t.tier},compact:!0}),f(p),v(b,p)};A(d,b=>{t.tier&&b(o)})}var u=k(d,2);{var y=b=>{var p=Kt(),M=_(p,!0);f(p),x(()=>T(M,t.title)),v(b,p)};A(u,b=>{t.title&&b(y)})}f(e),x(()=>{T(l,t.n),T(h,t.label)}),v(i,e)}var Vt=W('<div class="briefing-status briefing-fade-in svelte-cc2m0h"></div>'),Xt=W('<div class="briefing-fade-in svelte-cc2m0h"><!></div>'),Yt=W("<!><!>",1),qt=W("<span> </span>"),Jt=W('<p class="briefing-para briefing-fade-in svelte-cc2m0h"></p>'),Zt=W('<div class="briefing-prose" role="log" aria-live="polite" aria-atomic="false" aria-label="Streaming flood-exposure briefing"></div>');function oe(i,t){q(t,!0);let e=B(t,"streaming",3,!1),a=B(t,"replayKey",3,0),l=j(Wt(t.blocks.length)),c=j(!1);at(()=>{typeof window>"u"||C(c,window.matchMedia("(prefers-reduced-motion: reduce)").matches,!0)}),at(()=>{if(a(),!e()){C(l,t.blocks.length,!0);return}if(r(c)){C(l,t.blocks.length,!0);return}C(l,0);let d=0,o;const u=()=>{d++,C(l,d,!0),d<t.blocks.length&&(o=setTimeout(u,d<2?280:420))};return o=setTimeout(u,240),()=>clearTimeout(o)});var h=Zt();it(h,21,()=>t.blocks.slice(0,r(l)),st,(d,o)=>{var u=$(),y=U(u);{var b=m=>{var w=Vt();kt(w,()=>r(o).html,!0),f(w),v(m,w)},p=m=>{var w=Xt(),g=_(w);jt(g,{get n(){return r(o).n},get label(){return r(o).label},get tier(){return r(o).tier},get title(){return r(o).title}}),f(w),v(m,w)},M=m=>{var w=Jt();it(w,21,()=>r(o).parts,st,(g,n)=>{var E=$(),P=U(E);{var V=I=>{var D=Yt(),H=U(D);Rt(H,{get tier(){return r(n).tier},children:(R,Qt)=>{Mt();var Z=ft();x(()=>T(Z,r(n).text)),v(R,Z)}});var lt=k(H);{var ct=R=>{Ft(R,{get c(){return t.citations[r(n).cite]}})};A(lt,R=>{r(n).cite&&t.citations[r(n).cite]&&R(ct)})}v(I,D)},S=I=>{var D=qt(),H=_(D,!0);f(D),x(()=>T(H,r(n).text)),v(I,D)};A(P,I=>{r(n).tier?I(V):I(S,-1)})}v(g,E)}),f(w),v(m,w)};A(y,m=>{r(o).kind==="status"?m(b):r(o).kind==="head"?m(p,1):m(M,-1)})}v(d,u)}),f(h),v(i,h),J()}export{oe as B,ot as T,ne as a,Ht as b,Lt as c,Ot as d,se as t};
|
|
@@ -1 +0,0 @@
|
|
| 1 |
-
var Q=i=>{throw TypeError(i)};var ft=(i,t,e)=>t.has(i)||Q("Cannot "+e);var N=(i,t,e)=>(ft(i,t,"read from private field"),e?e.call(i):t.get(i)),X=(i,t,e)=>t.has(i)?Q("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);import{k as Y,s as C,a as f,l as z,f as w,d as ut,b as _t,c as $,t as mt}from"./Dlpu43Tj.js";import{q as G,A as tt,F as L,t as p,T as et,h as gt,b7 as yt,B as at,C as bt,y as pt,b6 as wt,b3 as xt,aX as Wt,b8 as Mt,b9 as kt,c as m,r as u,s as T,k as a,J as K,f as U,j,l as E,p as q,a as J,L as St,K as rt,v as Tt}from"./DwbuJhNu.js";import{p as B,i as I}from"./8F5LpR-T.js";import{s as n,a as nt,b as Ct,e as it,i as st}from"./CBcGqa-S.js";import{s as Et}from"./DNaFzQeI.js";function It(i,t,e=!1,r=!1,o=!1,c=!1){var v=i,h="";if(e){var g=i;G&&(v=tt(L(g)))}p(()=>{var b=gt;if(h===(h=t()??"")){G&&et();return}if(e&&!G){b.nodes=null,g.innerHTML=h,h!==""&&Y(L(g),g.lastChild);return}if(b.nodes!==null&&(yt(b.nodes.start,b.nodes.end),b.nodes=null),h!==""){if(G){at.data;for(var d=et(),l=d;d!==null&&(d.nodeType!==bt||d.data!=="");)l=d,d=pt(d);if(d===null)throw wt(),xt;Y(at,l),v=tt(d);return}var _=r?Mt:o?kt:void 0,x=Wt(r?"svg":o?"math":"template",_);x.innerHTML=h;var k=r||o?x:x.content;if(Y(L(k),k.lastChild),r||o)for(;L(k);)v.before(L(k));else v.before(k)}})}var Dt=z('<rect x="0" y="0"></rect>'),At=z('<rect fill="none"></rect>'),Pt=z("<circle></circle>"),Rt=z('<defs><pattern width="3" height="3" patternUnits="userSpaceOnUse" patternTransform="rotate(45)"><line x1="0" y1="0" x2="0" y2="3" stroke-width="1.5"></line></pattern></defs><rect></rect>',1),Nt=z('<svg role="img" style="flex: none; display: inline-block; vertical-align: -0.12em;"><title> </title><!></svg>');function ot(i,t){let e=B(t,"size",3,12),r=B(t,"color",3,"currentColor");const o={empirical:"Empirical: directly measured or observed",modeled:"Modeled: scenario-based prediction",proxy:"Proxy: indirect indicator",synthetic:"Synthetic prior: generated, not observed"};let c=K(()=>Math.max(1,Math.round(e()/9))),v=K(()=>t.title??o[t.tier]),h=K(()=>`rip-stripe-${t.tier}-${e()}`);var g=Nt(),b=m(g),d=m(b,!0);u(b);var l=T(b);{var _=y=>{var s=Dt();p(()=>{n(s,"width",e()),n(s,"height",e()),n(s,"fill",r())}),f(y,s)},x=y=>{var s=At();p(()=>{n(s,"x",a(c)/2),n(s,"y",a(c)/2),n(s,"width",e()-a(c)),n(s,"height",e()-a(c)),n(s,"stroke",r()),n(s,"stroke-width",a(c))}),f(y,s)},k=y=>{var s=Pt();p(()=>{n(s,"cx",e()/2),n(s,"cy",e()/2),n(s,"r",e()/2-.5),n(s,"fill",r())}),f(y,s)},V=y=>{var s=Rt(),W=U(s),P=m(W),S=m(P);u(P),u(W);var M=T(W);p(()=>{n(P,"id",a(h)),n(S,"stroke",r()),n(M,"x",a(c)/2),n(M,"y",a(c)/2),n(M,"width",e()-a(c)),n(M,"height",e()-a(c)),n(M,"fill",`url(#${a(h)??""})`),n(M,"stroke",r()),n(M,"stroke-width",a(c))}),f(y,s)};I(l,y=>{t.tier==="empirical"?y(_):t.tier==="modeled"?y(x,1):t.tier==="proxy"?y(k,2):y(V,-1)})}u(g),p(()=>{n(g,"width",e()),n(g,"height",e()),n(g,"viewBox",`0 0 ${e()??""} ${e()??""}`),n(g,"aria-label",a(v)),C(d,a(v))}),f(i,g)}var Lt=w('<span><span class="claim-glyph" aria-hidden="false"><!></span> <span class="claim-body"><!></span></span>');function Bt(i,t){var e=Lt(),r=m(e),o=m(r);ot(o,{get tier(){return t.tier},size:11,get color(){return`var(--tier-${t.tier??""})`}}),u(r);var c=T(r,2),v=m(c);Et(v,()=>t.children),u(c),u(e),p(()=>{nt(e,1,`claim claim-${t.tier??""}`),n(e,"data-tier",t.tier)}),f(i,e)}var F,O;class Ft{constructor(){X(this,F,j(null));X(this,O,j(null))}get active(){return a(N(this,F))}set active(t){E(N(this,F),t,!0)}get highlightDocId(){return a(N(this,O))}set highlightDocId(t){E(N(this,O),t,!0)}}F=new WeakMap,O=new WeakMap;const Ot=new Ft;var zt=w('<a class="inline-cite"><sup> </sup></a>');function Ht(i,t){q(t,!0);function e(v){v.preventDefault(),Ot.active=t.c.id;const h=document.getElementById(`cite-${t.c.id}`);h==null||h.scrollIntoView({block:"center",behavior:"smooth"})}var r=zt(),o=m(r),c=m(o);u(o),u(r),p(()=>{n(r,"href",`#cite-${t.c.id??""}`),n(r,"data-cite",t.c.id),n(r,"aria-label",`Citation ${t.c.n??""}: ${t.c.source??""}, ${t.c.title??""}`),C(c,`[${t.c.n??""}]`)}),_t("click",r,e),f(i,r),J()}ut(["click"]);const Gt={empirical:{label:"Empirical",short:"EMP",desc:"Directly measured or observed",examples:"USGS high-water marks · FloodNet sensors · Sandy Inundation Zone"},modeled:{label:"Modeled",short:"MOD",desc:"Scenario-based prediction",examples:"FEMA flood zones · DEP stormwater scenarios · NPCC4 SLR"},proxy:{label:"Proxy",short:"PRX",desc:"Indirect indicator",examples:"311 flood complaints · NFIP claims · terrain indices"},synthetic:{label:"Synthetic prior",short:"SYN",desc:"Generated, not observed",examples:"TerraMind land-cover · synthetic SAR for occluded days"}};function le(i){const t=i.toLowerCase();return t.startsWith("syn")||t.startsWith("terramind")||t.includes("synthetic")?"synthetic":t.startsWith("sandy")||t.startsWith("floodnet")||t.startsWith("usgs")||t.startsWith("mta_entrance")||t.startsWith("nycha_dev")||t.startsWith("doe_school")||t.startsWith("doh_hospital")||t.startsWith("ida_hwm")||t.startsWith("hwm")||t.startsWith("noaa")||t.startsWith("nws_obs")||t.startsWith("prithvi_eo")?"empirical":t.startsWith("dep")||t.startsWith("fema_firm")||t.startsWith("npcc")||t.startsWith("wrp")||t.includes("scenario")||t.includes("forecast")||t.startsWith("prithvi")||t.startsWith("ttm")||t.startsWith("nws_alert")?"modeled":(t.startsWith("nyc311")||t.startsWith("311")||t.startsWith("nfip")||t.startsWith("rag")||t.startsWith("dob")||t.startsWith("hand")||t.startsWith("twi")||t.startsWith("microtopo"),"proxy")}function ce(i){const t=i.toLowerCase();return t==="geocode"||t.startsWith("fan")||t.startsWith("merge")||t==="plan"||t==="compose"||t==="reconcile"||t==="stream"?null:t==="sandy"||t==="sandy_inundation"||t==="floodnet"||t==="ida_hwm"||t==="noaa_tides"||t==="nws_obs"||t==="prithvi_eo_v2"||t==="prithvi_eo_live"||t==="mta_entrance_exposure"||t==="mta_entrances"||t==="nycha_developments"||t==="doe_school_exposure"||t==="doe_schools"||t==="doh_hospital_exposure"||t==="doh_hospitals"?"empirical":t==="dep"||t==="dep_stormwater"||t==="ttm_forecast"||t==="ttm_311_forecast"||t==="floodnet_forecast"||t==="nws_alerts"||t==="prithvi_water"?"modeled":t==="nyc311"||t==="microtopo"||t==="microtopo_lidar"||t==="rag"||t==="rag_mta"?"proxy":t==="terramind"||t==="terramind_synthesis"?"synthetic":null}var Kt=w("<span><!> </span>");function Ut(i,t){q(t,!0);let e=B(t,"compact",3,!1),r=K(()=>Gt[t.tier]);var o=Kt();let c;var v=m(o);ot(v,{get tier(){return t.tier},size:10,get color(){return`var(--tier-${t.tier??""})`}});var h=T(v);u(o),p(()=>{nt(o,1,`tier-badge tier-badge-${t.tier??""}`,"svelte-1acpjpp"),n(o,"title",a(r).desc),c=Ct(o,"",c,{color:`var(--tier-${t.tier??""})`}),C(h,` ${(e()?a(r).short:a(r).label)??""}`)}),f(i,o),J()}var jt=w('<span class="briefing-section-tier"><!></span>'),Vt=w('<span class="briefing-section-title"> </span>'),Xt=w('<h3 class="briefing-section-head"><span class="briefing-section-num"> </span> <span class="briefing-section-label"> </span> <!> <!></h3>');function Yt(i,t){var e=Xt(),r=m(e),o=m(r,!0);u(r);var c=T(r,2),v=m(c,!0);u(c);var h=T(c,2);{var g=l=>{var _=jt(),x=m(_);Ut(x,{get tier(){return t.tier},compact:!0}),u(_),f(l,_)};I(h,l=>{t.tier&&l(g)})}var b=T(h,2);{var d=l=>{var _=Vt(),x=m(_,!0);u(_),p(()=>C(x,t.title)),f(l,_)};I(b,l=>{t.title&&l(d)})}u(e),p(()=>{C(o,t.n),C(v,t.label)}),f(i,e)}var qt=w('<div class="briefing-status"></div>'),Jt=w("<!><!>",1),Zt=w("<span> </span>"),Qt=w('<p class="briefing-para"></p>'),$t=w('<span class="streaming-caret" aria-hidden="true">▍</span>'),te=w('<div class="briefing-prose" role="log" aria-live="polite" aria-atomic="false" aria-label="Streaming flood-exposure briefing"><!> <!></div>');function de(i,t){q(t,!0);let e=B(t,"streaming",3,!1),r=B(t,"replayKey",3,0),o=j(St(t.blocks.length)),c=j(!1);rt(()=>{typeof window>"u"||E(c,window.matchMedia("(prefers-reduced-motion: reduce)").matches,!0)}),rt(()=>{if(r(),!e()){E(o,t.blocks.length,!0);return}if(a(c)){E(o,t.blocks.length,!0);return}E(o,0);let d=0,l;const _=()=>{d++,E(o,d,!0),d<t.blocks.length&&(l=setTimeout(_,d<2?280:420))};return l=setTimeout(_,240),()=>clearTimeout(l)});var v=te(),h=m(v);it(h,17,()=>t.blocks.slice(0,a(o)),st,(d,l)=>{var _=$(),x=U(_);{var k=s=>{var W=qt();It(W,()=>a(l).html,!0),u(W),f(s,W)},V=s=>{Yt(s,{get n(){return a(l).n},get label(){return a(l).label},get tier(){return a(l).tier},get title(){return a(l).title}})},y=s=>{var W=Qt();it(W,21,()=>a(l).parts,st,(P,S)=>{var M=$(),lt=U(M);{var ct=D=>{var A=Jt(),H=U(A);Bt(H,{get tier(){return a(S).tier},children:(R,ee)=>{Tt();var Z=mt();p(()=>C(Z,a(S).text)),f(R,Z)}});var ht=T(H);{var vt=R=>{Ht(R,{get c(){return t.citations[a(S).cite]}})};I(ht,R=>{a(S).cite&&t.citations[a(S).cite]&&R(vt)})}f(D,A)},dt=D=>{var A=Zt(),H=m(A,!0);u(A),p(()=>C(H,a(S).text)),f(D,A)};I(lt,D=>{a(S).tier?D(ct):D(dt,-1)})}f(P,M)}),u(W),f(s,W)};I(x,s=>{a(l).kind==="status"?s(k):a(l).kind==="head"?s(V,1):s(y,-1)})}f(d,_)});var g=T(h,2);{var b=d=>{var l=$t();f(d,l)};I(g,d=>{a(o)<t.blocks.length&&d(b)})}u(v),f(i,v),J()}export{de as B,ot as T,ce as a,Ut as b,Ot as c,Gt as d,le as t};
|
|
|
|
|
|
|
@@ -1 +1 @@
|
|
| 1 |
-
import{s as e,p as r}from"./
|
|
|
|
| 1 |
+
import{s as e,p as r}from"./BV_WLJ_i.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,2 +1,2 @@
|
|
| 1 |
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.
|
| 2 |
-
var S=e=>{throw TypeError(e)};var B=(e,t,r)=>t.has(e)||S("Cannot "+r);var c=(e,t,r)=>(B(e,t,"read from private field"),r?r.call(e):t.get(e)),I=(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),k=(e,t,r,n)=>(B(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);import{b as j,_ as b}from"../chunks/1oGnrPC6.js";import{q as M,T as W,i as X,E as Z,U as $,V as tt,A as et,z as N,a8 as rt,B as at,l as x,a7 as st,k as l,a9 as nt,aa as ot,ab as it,p as ct,ac as ut,K as dt,G as _t,o as mt,f as A,s as lt,a as ft,j as p,c as ht,r as vt,t as gt,J as w}from"../chunks/DwbuJhNu.js";import{h as yt,m as Et,u as bt,a as R,c as D,f as F,t as Rt,s as Pt}from"../chunks/Dlpu43Tj.js";import{B as Ot,p as L,i as V}from"../chunks/8F5LpR-T.js";function q(e,t,r){var n;M&&(n=at,W());var o=new Ot(e);X(()=>{var i=t()??null;if(M){var a=$(n),s=a===rt,m=i!==null;if(s!==m){var P=tt();et(P),o.anchor=P,N(!1),o.ensure(i,i&&(y=>r(y,i))),N(!0);return}}o.ensure(i,i&&(y=>r(y,i)))},Z)}function Tt(e){return class extends At{constructor(t){super({component:e,...t})}}}var f,d;class At{constructor(t){I(this,f);I(this,d);var i;var r=new Map,n=(a,s)=>{var m=it(s,!1,!1);return r.set(a,m),m};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,m){return x(r.get(s)??n(s,m),m),Reflect.set(a,s,m)}});k(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(),k(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 Ct={};var xt=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>'),It=F("<!> <!>",1);function kt(e,t){ct(t,!0);let r=L(t,"components",23,()=>[]),n=L(t,"data_0",3,null),o=L(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=p(!1),a=p(!1),s=p(null);_t(()=>{const u=t.stores.page.subscribe(()=>{l(i)&&(x(a,!0),mt().then(()=>{x(s,document.title||"untitled page",!0)}))});return x(i,!0),u});const m=w(()=>t.constructors[1]);var P=It(),y=A(P);{var Y=u=>{const h=w(()=>t.constructors[0]);var v=D(),O=A(v);q(O,()=>l(h),(g,E)=>{j(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(_,pt)=>{var C=D(),K=A(C);q(K,()=>l(m),(U,Q)=>{j(Q(U,{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(_,C)},$$slots:{default:!0}}),_=>r()[0]=_,()=>{var _;return(_=r())==null?void 0:_[0]})}),R(u,v)},z=u=>{const h=w(()=>t.constructors[0]);var v=D(),O=A(v);q(O,()=>l(h),(g,E)=>{j(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),_=>r()[0]=_,()=>{var _;return(_=r())==null?void 0:_[0]})}),R(u,v)};V(y,u=>{t.constructors[1]?u(Y):u(z,-1)})}var H=lt(y,2);{var J=u=>{var h=xt(),v=ht(h);{var O=g=>{var E=Rt();gt(()=>Pt(E,l(s))),R(g,E)};V(v,g=>{l(a)&&g(O)})}vt(h),R(u,h)};V(H,u=>{l(i)&&u(J)})}R(e,P),ft()}const St=Tt(kt),Bt=[()=>b(()=>import("../nodes/0.
|
|
|
|
| 1 |
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BOY_jD4V.js","../chunks/Dlpu43Tj.js","../chunks/DwbuJhNu.js","../chunks/DNaFzQeI.js","../chunks/8F5LpR-T.js","../chunks/yTOzveqN.js","../chunks/BV_WLJ_i.js","../chunks/DFFHaukH.js","../assets/0.KpTzaSsX.css","../nodes/1.rUM1MjPf.js","../nodes/2.DUHn2QIZ.js","../chunks/CBcGqa-S.js","../nodes/3.B4iCcTlf.js","../chunks/Cl16PtNL.js","../assets/Briefing.Dmn9LgiV.css","../assets/3.BZfqQRM0.css","../nodes/4.C7yZGpb8.js","../chunks/CAli5X_k.js","../chunks/1oGnrPC6.js","../assets/FindingsRegion.NjYRUAvf.css","../assets/4.BIuIAgmk.css","../nodes/5.CBtbiPE_.js"])))=>i.map(i=>d[i]);
|
| 2 |
+
var S=e=>{throw TypeError(e)};var B=(e,t,r)=>t.has(e)||S("Cannot "+r);var c=(e,t,r)=>(B(e,t,"read from private field"),r?r.call(e):t.get(e)),I=(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),k=(e,t,r,n)=>(B(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);import{b as j,_ as b}from"../chunks/1oGnrPC6.js";import{q as M,T as W,i as X,E as Z,U as $,V as tt,A as et,z as N,a8 as rt,B as at,l as x,a7 as st,k as l,a9 as nt,aa as ot,ab as it,p as ct,ac as ut,K as dt,G as _t,o as mt,f as A,s as lt,a as ft,j as p,c as ht,r as vt,t as gt,J as w}from"../chunks/DwbuJhNu.js";import{h as yt,m as Et,u as bt,a as R,c as D,f as F,t as Rt,s as Pt}from"../chunks/Dlpu43Tj.js";import{B as Ot,p as L,i as V}from"../chunks/8F5LpR-T.js";function q(e,t,r){var n;M&&(n=at,W());var o=new Ot(e);X(()=>{var i=t()??null;if(M){var a=$(n),s=a===rt,m=i!==null;if(s!==m){var P=tt();et(P),o.anchor=P,N(!1),o.ensure(i,i&&(y=>r(y,i))),N(!0);return}}o.ensure(i,i&&(y=>r(y,i)))},Z)}function Tt(e){return class extends At{constructor(t){super({component:e,...t})}}}var f,d;class At{constructor(t){I(this,f);I(this,d);var i;var r=new Map,n=(a,s)=>{var m=it(s,!1,!1);return r.set(a,m),m};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,m){return x(r.get(s)??n(s,m),m),Reflect.set(a,s,m)}});k(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(),k(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 Ct={};var xt=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>'),It=F("<!> <!>",1);function kt(e,t){ct(t,!0);let r=L(t,"components",23,()=>[]),n=L(t,"data_0",3,null),o=L(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=p(!1),a=p(!1),s=p(null);_t(()=>{const u=t.stores.page.subscribe(()=>{l(i)&&(x(a,!0),mt().then(()=>{x(s,document.title||"untitled page",!0)}))});return x(i,!0),u});const m=w(()=>t.constructors[1]);var P=It(),y=A(P);{var Y=u=>{const h=w(()=>t.constructors[0]);var v=D(),O=A(v);q(O,()=>l(h),(g,E)=>{j(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(_,pt)=>{var C=D(),K=A(C);q(K,()=>l(m),(U,Q)=>{j(Q(U,{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(_,C)},$$slots:{default:!0}}),_=>r()[0]=_,()=>{var _;return(_=r())==null?void 0:_[0]})}),R(u,v)},z=u=>{const h=w(()=>t.constructors[0]);var v=D(),O=A(v);q(O,()=>l(h),(g,E)=>{j(E(g,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),_=>r()[0]=_,()=>{var _;return(_=r())==null?void 0:_[0]})}),R(u,v)};V(y,u=>{t.constructors[1]?u(Y):u(z,-1)})}var H=lt(y,2);{var J=u=>{var h=xt(),v=ht(h);{var O=g=>{var E=Rt();gt(()=>Pt(E,l(s))),R(g,E)};V(v,g=>{l(a)&&g(O)})}vt(h),R(u,h)};V(H,u=>{l(i)&&u(J)})}R(e,P),ft()}const St=Tt(kt),Bt=[()=>b(()=>import("../nodes/0.BOY_jD4V.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8]),import.meta.url),()=>b(()=>import("../nodes/1.rUM1MjPf.js"),__vite__mapDeps([9,1,2,5,6]),import.meta.url),()=>b(()=>import("../nodes/2.DUHn2QIZ.js"),__vite__mapDeps([10,1,2,7,11,6]),import.meta.url),()=>b(()=>import("../nodes/3.B4iCcTlf.js"),__vite__mapDeps([12,1,2,4,11,5,6,13,3,14,15]),import.meta.url),()=>b(()=>import("../nodes/4.C7yZGpb8.js"),__vite__mapDeps([16,1,2,4,5,6,13,11,3,14,17,18,19,7,20]),import.meta.url),()=>b(()=>import("../nodes/5.CBtbiPE_.js"),__vite__mapDeps([21,1,2,13,4,11,3,14,17,18,19]),import.meta.url)],Mt=[],Nt={"/":[2],"/print/[queryId]":[3],"/q/sample":[5],"/q/[queryId]":[4]},G={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},jt=Object.fromEntries(Object.entries(G.transport).map(([e,t])=>[e,t.decode])),Ft=Object.fromEntries(Object.entries(G.transport).map(([e,t])=>[e,t.encode])),Gt=!1,Yt=(e,t)=>jt[e](t);export{Yt as decode,jt as decoders,Nt as dictionary,Ft as encoders,Gt as hash,G as hooks,Ct as matchers,Bt as nodes,St as root,Mt as server_loads};
|
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
import{l as o,a as r}from"../chunks/BV_WLJ_i.js";export{o as load_css,r as start};
|
|
@@ -1 +0,0 @@
|
|
| 1 |
-
import{l as o,a as r}from"../chunks/Bww_RjdA.js";export{o as load_css,r as start};
|
|
|
|
|
|
|
@@ -1,2 +1,2 @@
|
|
| 1 |
-
import{d as N,a as i,s as O,b as R,f as l}from"../chunks/Dlpu43Tj.js";import{p as P,c as n,s as p,r as s,v as S,a as C,t as j,f as F,k as y,J as x}from"../chunks/DwbuJhNu.js";import{b as D,s as H}from"../chunks/DNaFzQeI.js";import{p as T,i as g}from"../chunks/8F5LpR-T.js";import{p as _}from"../chunks/
|
| 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.4.2 · build 2026-05-03</p></div></footer>`);function W(o){var r=V();i(o,r)}var $=l('<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 B(o){var r=$();S(4),i(o,r)}var G=l("<!> <!>",1),K=l('<!> <main class="svelte-12qhfyh"><!></main> <!>',1);function oe(o,r){P(r,!0);let v=x(()=>()=>{const e=_.params.queryId;if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}),h=x(()=>_.url.pathname.startsWith("/print/"));var d=K(),c=F(d);{var f=e=>{var a=G(),t=F(a);B(t);var b=p(t,2);{let q=x(()=>y(v)());M(b,{get query(){return y(q)},onResetCold:()=>window.location.href="/"})}i(e,a)};g(c,e=>{y(h)||e(f)})}var u=p(c,2),k=n(u);H(k,()=>r.children),s(u);var m=p(u,2);{var w=e=>{W(e)};g(m,e=>{y(h)||e(w)})}i(o,d),C()}export{oe as component,te as universal};
|
|
|
|
| 1 |
+
import{d as N,a as i,s as O,b as R,f as l}from"../chunks/Dlpu43Tj.js";import{p as P,c as n,s as p,r as s,v as S,a as C,t as j,f as F,k as y,J as x}from"../chunks/DwbuJhNu.js";import{b as D,s as H}from"../chunks/DNaFzQeI.js";import{p as T,i as g}from"../chunks/8F5LpR-T.js";import{p as _}from"../chunks/yTOzveqN.js";import"../chunks/DFFHaukH.js";const U=!0,Y=!0,z="never",te=Object.freeze(Object.defineProperty({__proto__:null,prerender:U,ssr:Y,trailingSlash:z},Symbol.toStringTag,{value:"Module"}));var E=l('<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>'),J=l('<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>'),L=l('<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> <!> <span class="app-header-status" aria-live="polite"><span class="app-header-status-dot" aria-hidden="true"></span> live</span></div></div></header>');function M(o,r){P(r,!0);let v=T(r,"query",3,null);function h(){if(typeof window>"u")return;const a=_.params.queryId??(_.url.pathname==="/q/sample"?"sample":"");a&&window.open(`/print/${encodeURIComponent(a)}`,"_blank","noopener")}var d=L(),c=n(d),f=p(n(c),2),u=n(f);{var k=a=>{var t=E(),b=p(n(t),2),q=n(b,!0);s(b),S(2),s(t),j(()=>O(q,v())),R("click",t,function(...I){var A;(A=r.onResetCold)==null||A.apply(this,I)}),i(a,t)};g(u,a=>{v()&&a(k)})}s(f);var m=p(f,2),w=p(n(m),2);{var e=a=>{var t=J();R("click",t,h),i(a,t)};g(w,a=>{D.ready&&a(e)})}S(2),s(m),s(c),s(d),i(o,d),C()}N(["click"]);var V=l(`<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.4.2 · build 2026-05-03</p></div></footer>`);function W(o){var r=V();i(o,r)}var $=l('<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 B(o){var r=$();S(4),i(o,r)}var G=l("<!> <!>",1),K=l('<!> <main class="svelte-12qhfyh"><!></main> <!>',1);function oe(o,r){P(r,!0);let v=x(()=>()=>{const e=_.params.queryId;if(!e)return null;try{return decodeURIComponent(e)}catch{return e}}),h=x(()=>_.url.pathname.startsWith("/print/"));var d=K(),c=F(d);{var f=e=>{var a=G(),t=F(a);B(t);var b=p(t,2);{let q=x(()=>y(v)());M(b,{get query(){return y(q)},onResetCold:()=>window.location.href="/"})}i(e,a)};g(c,e=>{y(h)||e(f)})}var u=p(c,2),k=n(u);H(k,()=>r.children),s(u);var m=p(u,2);{var w=e=>{W(e)};g(m,e=>{y(h)||e(w)})}i(o,d),C()}export{oe as component,te as universal};
|
|
@@ -1 +1 @@
|
|
| 1 |
-
import{a as c,f as u,s as e}from"../chunks/Dlpu43Tj.js";import{p as v,f as l,t as _,a as g,c as p,r as o,s as x}from"../chunks/DwbuJhNu.js";import{p as m}from"../chunks/
|
|
|
|
| 1 |
+
import{a as c,f as u,s as e}from"../chunks/Dlpu43Tj.js";import{p as v,f as l,t as _,a as g,c as p,r as o,s as x}from"../chunks/DwbuJhNu.js";import{p as m}from"../chunks/yTOzveqN.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,4 +1,4 @@
|
|
| 1 |
-
import{d as H,e as I,a as S,f as q,s as _,b as P}from"../chunks/Dlpu43Tj.js";import"../chunks/DFFHaukH.js";import{m as Y,n as b,o as B,u as M,g as Q,q as j,p as D,k as m,a as L,c as r,s as v,v as k,r as s,t as U,l as V,j as $}from"../chunks/DwbuJhNu.js";import{e as z,r as G,i as T}from"../chunks/CBcGqa-S.js";import{g as W}from"../chunks/
|
| 2 |
Type an address, neighborhood, or proposed development — Riprap returns a written briefing
|
| 3 |
where every numeric claim links to its primary public-record source.</p> <p class="cold-start-deck cold-start-deck-secondary">Built for agency analysts, planners, journalists, community boards, and researchers. <strong>Not for individual residents making personal property decisions.</strong> For residents seeking flood guidance, see <a href="https://www.floodhelpny.org" class="cold-start-redir">FloodHelpNY</a>.
|
| 4 |
For real-time conditions, see <a href="https://www.floodnet.nyc" class="cold-start-redir">FloodNet NYC</a>.</p></div> <form class="cold-start-form" role="search"><label for="riprap-query" class="cold-start-label section-label">Query</label> <div class="cold-start-input-row"><input id="riprap-query" type="text" placeholder="address · neighborhood · proposed development" class="cold-start-input" autocomplete="off"/> <button type="submit" class="cold-start-submit">Generate briefing →</button></div></form> <div class="cold-start-samples"><span class="section-label cold-start-samples-label">Sample queries</span> <div class="cold-start-samples-grid"></div></div> <div class="cold-start-trust"><span class="section-label">How Riprap is built</span> <ul class="cold-start-trust-list"><li>All foundation models <strong>Apache-2.0</strong>; no commercial APIs at runtime.</li> <li>All data from public-record federal, state, and city sources.</li> <li>Four epistemic tiers — empirical, modeled, proxy, synthetic prior — visible in the briefing margin and the trace.</li> <li>Sections without supporting documents are omitted entirely. Silence over confabulation.</li></ul> <a href="#methodology" class="cold-start-method-link">Methodology paper →</a></div></section>`);function O(e,a){D(a,!0);const n=[{mode:"address",q:"80 Pioneer Street, Red Hook, Brooklyn",sub:"Address-mode · Sandy edge · IBZ · NYCHA proximity"},{mode:"neighborhood",q:"Far Rockaway flood exposure briefing",sub:"Neighborhood-mode · chronic stormwater · 2050 SLR"},{mode:"development",q:"Hunts Point proposed rezoning — flood-context check",sub:"Development-check · CEQR §817 · 311 proxy density"}];let o=$("");function l(c){const u=c.trim();u&&W(`/q/${encodeURIComponent(u)}`)}function t(c){c.preventDefault(),l(m(o))}var p=K(),i=v(r(p),2),f=v(r(i),2),d=r(f);G(d),k(2),s(f),s(i);var E=v(i,2),R=v(r(E),2);z(R,21,()=>n,T,(c,u)=>{var h=J(),y=r(h),N=r(y,!0);s(y);var g=v(y,2),C=r(g,!0);s(g);var A=v(g,2),F=r(A,!0);s(A),k(2),s(h),U(()=>{_(N,m(u).mode),_(C,m(u).q),_(F,m(u).sub)}),P("click",h,()=>l(m(u).q)),S(c,h)}),s(R),s(E),k(2),s(p),I("submit",i,t),Z(d,()=>m(o),c=>V(o,c)),S(e,p),L()}H(["click"]);var X=q('<section class="hero-band"><div class="hero-band-inner"><!></div></section>');function oe(e){var a=X(),n=r(a),o=r(n);O(o,{}),s(n),s(a),S(e,a)}export{oe as component};
|
|
|
|
| 1 |
+
import{d as H,e as I,a as S,f as q,s as _,b as P}from"../chunks/Dlpu43Tj.js";import"../chunks/DFFHaukH.js";import{m as Y,n as b,o as B,u as M,g as Q,q as j,p as D,k as m,a as L,c as r,s as v,v as k,r as s,t as U,l as V,j as $}from"../chunks/DwbuJhNu.js";import{e as z,r as G,i as T}from"../chunks/CBcGqa-S.js";import{g as W}from"../chunks/BV_WLJ_i.js";function Z(e,a,n=a){var o=new WeakSet;Y(e,"input",async l=>{var t=l?e.defaultValue:e.value;if(t=w(e)?x(t):t,n(t),b!==null&&o.add(b),await B(),t!==(t=a())){var p=e.selectionStart,i=e.selectionEnd,f=e.value.length;if(e.value=t??"",i!==null){var d=e.value.length;p===i&&i===f&&d>f?(e.selectionStart=d,e.selectionEnd=d):(e.selectionStart=p,e.selectionEnd=Math.min(i,d))}}}),(j&&e.defaultValue!==e.value||M(a)==null&&e.value)&&(n(w(e)?x(e.value):e.value),b!==null&&o.add(b)),Q(()=>{var l=a();if(e===document.activeElement){var t=b;if(o.has(t))return}w(e)&&l===x(e.value)||e.type==="date"&&!l&&!e.value||l!==e.value&&(e.value=l??"")})}function w(e){var a=e.type;return a==="number"||a==="range"}function x(e){return e===""?null:+e}var J=q('<button type="button" class="cold-start-sample"><span class="cold-start-sample-mode"> </span> <span class="cold-start-sample-q"> </span> <span class="cold-start-sample-sub"> </span> <span class="cold-start-sample-arrow" aria-hidden="true">↗</span></button>'),K=q(`<section class="cold-start" aria-label="Empty query state"><div class="cold-start-band"><p class="cold-start-deck"><strong>Riprap</strong> is a citation-grounded flood-exposure briefing tool for New York City.
|
| 2 |
Type an address, neighborhood, or proposed development — Riprap returns a written briefing
|
| 3 |
where every numeric claim links to its primary public-record source.</p> <p class="cold-start-deck cold-start-deck-secondary">Built for agency analysts, planners, journalists, community boards, and researchers. <strong>Not for individual residents making personal property decisions.</strong> For residents seeking flood guidance, see <a href="https://www.floodhelpny.org" class="cold-start-redir">FloodHelpNY</a>.
|
| 4 |
For real-time conditions, see <a href="https://www.floodnet.nyc" class="cold-start-redir">FloodNet NYC</a>.</p></div> <form class="cold-start-form" role="search"><label for="riprap-query" class="cold-start-label section-label">Query</label> <div class="cold-start-input-row"><input id="riprap-query" type="text" placeholder="address · neighborhood · proposed development" class="cold-start-input" autocomplete="off"/> <button type="submit" class="cold-start-submit">Generate briefing →</button></div></form> <div class="cold-start-samples"><span class="section-label cold-start-samples-label">Sample queries</span> <div class="cold-start-samples-grid"></div></div> <div class="cold-start-trust"><span class="section-label">How Riprap is built</span> <ul class="cold-start-trust-list"><li>All foundation models <strong>Apache-2.0</strong>; no commercial APIs at runtime.</li> <li>All data from public-record federal, state, and city sources.</li> <li>Four epistemic tiers — empirical, modeled, proxy, synthetic prior — visible in the briefing margin and the trace.</li> <li>Sections without supporting documents are omitted entirely. Silence over confabulation.</li></ul> <a href="#methodology" class="cold-start-method-link">Methodology paper →</a></div></section>`);function O(e,a){D(a,!0);const n=[{mode:"address",q:"80 Pioneer Street, Red Hook, Brooklyn",sub:"Address-mode · Sandy edge · IBZ · NYCHA proximity"},{mode:"neighborhood",q:"Far Rockaway flood exposure briefing",sub:"Neighborhood-mode · chronic stormwater · 2050 SLR"},{mode:"development",q:"Hunts Point proposed rezoning — flood-context check",sub:"Development-check · CEQR §817 · 311 proxy density"}];let o=$("");function l(c){const u=c.trim();u&&W(`/q/${encodeURIComponent(u)}`)}function t(c){c.preventDefault(),l(m(o))}var p=K(),i=v(r(p),2),f=v(r(i),2),d=r(f);G(d),k(2),s(f),s(i);var E=v(i,2),R=v(r(E),2);z(R,21,()=>n,T,(c,u)=>{var h=J(),y=r(h),N=r(y,!0);s(y);var g=v(y,2),C=r(g,!0);s(g);var A=v(g,2),F=r(A,!0);s(A),k(2),s(h),U(()=>{_(N,m(u).mode),_(C,m(u).q),_(F,m(u).sub)}),P("click",h,()=>l(m(u).q)),S(c,h)}),s(R),s(E),k(2),s(p),I("submit",i,t),Z(d,()=>m(o),c=>V(o,c)),S(e,p),L()}H(["click"]);var X=q('<section class="hero-band"><div class="hero-band-inner"><!></div></section>');function oe(e){var a=X(),n=r(a),o=r(n);O(o,{}),s(n),s(a),S(e,a)}export{oe as component};
|
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import{d as we,c as Ee,a as p,s as l,b as Fe,f as d}from"../chunks/Dlpu43Tj.js";import{w as $e,i as ke,H as Te,x as qe,q as D,C as Me,y as Z,z as ee,A as te,B as Oe,F as Se,p as je,G as Ce,f as De,a as Ie,k as e,l as I,I as Re,J as m,j as R,$ as Ae,c as a,s,r as t,t as A}from"../chunks/DwbuJhNu.js";import{i as P}from"../chunks/8F5LpR-T.js";import{e as Pe}from"../chunks/CBcGqa-S.js";import{p as Be}from"../chunks/
|
| 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>`),We=d('<div class="curl svelte-uialbm"> </div>'),Ke=d('<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>'),Qe=d('<section class="print-citations svelte-uialbm"><h2 class="svelte-uialbm">Citations</h2> <ol class="svelte-uialbm"></ol></section>'),Ue=d('<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>'),Xe=d('<div class="empty svelte-uialbm"><p>Loading…</p></div>');function nt(f,_){je(_,!0);let c=m(()=>Be.params.queryId??""),r=R(null),u=R(!1),o=R(!1);Ce(()=>{const i=ze(e(c));if(!i){I(u,!0);return}I(r,i,!0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{typeof window<"u"&&(window.print(),I(o,!0))})})});function b(){typeof window<"u"&&window.print()}let B=m(()=>e(r)?Object.values(e(r).citations).sort((i,n)=>i.n-n.n):[]),G=m(()=>e(r)?new Date(e(r).generatedAt).toISOString().slice(0,10):"");var N=Ee();He("uialbm",i=>{Re(()=>{var n;Ae.title=`Riprap briefing — ${((n=e(r))==null?void 0:n.queryText)??"export"??""}`})});var ae=De(N);{var se=i=>{var n=Ve();p(i,n)},re=i=>{var n=Ue(),g=a(n),h=a(g),z=s(a(h),2),ne=a(z);t(z),t(h);var y=s(h,2),le=a(y,!0);t(y);var H=s(y,2),x=s(a(H)),oe=a(x,!0);t(x);var ve=s(x);t(H),t(g);var w=s(g,2),L=a(w),J=s(L,2),pe=a(J,!0);t(J),t(w);var V=s(w,2);Ge(V,{get blocks(){return e(r).blocks},get citations(){return e(r).citations},streaming:!1});var W=s(V,2);{var de=E=>{var F=Qe(),Q=s(a(F),2);Pe(Q,21,()=>e(B),$=>$.id,($,v)=>{var k=Ke(),T=a(k),ce=a(T);t(T);var q=s(T,2),me=a(q);Ne(me,{get tier(){return e(v).tier},size:9,get color(){return`var(--tier-${e(v).tier??""})`}}),t(q);var M=s(q,2),fe=a(M,!0);t(M);var O=s(M,2),_e=a(O);t(O);var S=s(O,2),be=a(S,!0);t(S);var U=s(S,2);{var ge=j=>{var C=We(),xe=a(C,!0);t(C),A(()=>l(xe,e(v).url)),p(j,C)},he=m(()=>e(v).url&&e(v).url.startsWith("http"));P(U,j=>{e(he)&&j(ge)})}var X=s(U,2),Y=s(a(X)),ye=a(Y,!0);t(Y),t(X),t(k),A(()=>{l(ce,`[${e(v).n??""}]`),l(fe,e(v).source),l(_e,`v. ${e(v).vintage??""}`),l(be,e(v).title),l(ye,e(v).docId)}),p($,k)}),t(Q),t(F),p(E,F)};P(W,E=>{e(B).length&&E(de)})}var K=s(W,2),ue=a(K);t(K),t(n),A(()=>{l(ne,`flood-exposure briefing · v0.4.2 · ${e(G)??""}`),l(le,e(r).queryText),l(oe,e(r).intent??"briefing"),l(ve,` · ${e(r).specialists??""} specialists
|
| 4 |
· ${e(r).attempts??1??""} reconcile${(e(r).attempts??1)===1?"":"s"}
|
|
|
|
| 1 |
+
import{d as we,c as Ee,a as p,s as l,b as Fe,f as d}from"../chunks/Dlpu43Tj.js";import{w as $e,i as ke,H as Te,x as qe,q as D,C as Me,y as Z,z as ee,A as te,B as Oe,F as Se,p as je,G as Ce,f as De,a as Ie,k as e,l as I,I as Re,J as m,j as R,$ as Ae,c as a,s,r as t,t as A}from"../chunks/DwbuJhNu.js";import{i as P}from"../chunks/8F5LpR-T.js";import{e as Pe}from"../chunks/CBcGqa-S.js";import{p as Be}from"../chunks/yTOzveqN.js";import{B as Ge,T as Ne}from"../chunks/Cl16PtNL.js";import{l as ze}from"../chunks/DNaFzQeI.js";function He(f,_){let c=null,r=D;var u;if(D){c=Oe;for(var o=Se(document.head);o!==null&&(o.nodeType!==Me||o.data!==f);)o=Z(o);if(o===null)ee(!1);else{var b=Z(o);o.remove(),te(b)}}D||(u=document.head.appendChild($e()));try{ke(()=>_(u),Te|qe)}finally{r&&(ee(!0),te(c))}}const Le=!1,Je=!1,it=Object.freeze(Object.defineProperty({__proto__:null,prerender:Le,ssr:Je},Symbol.toStringTag,{value:"Module"}));var Ve=d(`<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>`),We=d('<div class="curl svelte-uialbm"> </div>'),Ke=d('<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>'),Qe=d('<section class="print-citations svelte-uialbm"><h2 class="svelte-uialbm">Citations</h2> <ol class="svelte-uialbm"></ol></section>'),Ue=d('<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>'),Xe=d('<div class="empty svelte-uialbm"><p>Loading…</p></div>');function nt(f,_){je(_,!0);let c=m(()=>Be.params.queryId??""),r=R(null),u=R(!1),o=R(!1);Ce(()=>{const i=ze(e(c));if(!i){I(u,!0);return}I(r,i,!0),requestAnimationFrame(()=>{requestAnimationFrame(()=>{typeof window<"u"&&(window.print(),I(o,!0))})})});function b(){typeof window<"u"&&window.print()}let B=m(()=>e(r)?Object.values(e(r).citations).sort((i,n)=>i.n-n.n):[]),G=m(()=>e(r)?new Date(e(r).generatedAt).toISOString().slice(0,10):"");var N=Ee();He("uialbm",i=>{Re(()=>{var n;Ae.title=`Riprap briefing — ${((n=e(r))==null?void 0:n.queryText)??"export"??""}`})});var ae=De(N);{var se=i=>{var n=Ve();p(i,n)},re=i=>{var n=Ue(),g=a(n),h=a(g),z=s(a(h),2),ne=a(z);t(z),t(h);var y=s(h,2),le=a(y,!0);t(y);var H=s(y,2),x=s(a(H)),oe=a(x,!0);t(x);var ve=s(x);t(H),t(g);var w=s(g,2),L=a(w),J=s(L,2),pe=a(J,!0);t(J),t(w);var V=s(w,2);Ge(V,{get blocks(){return e(r).blocks},get citations(){return e(r).citations},streaming:!1});var W=s(V,2);{var de=E=>{var F=Qe(),Q=s(a(F),2);Pe(Q,21,()=>e(B),$=>$.id,($,v)=>{var k=Ke(),T=a(k),ce=a(T);t(T);var q=s(T,2),me=a(q);Ne(me,{get tier(){return e(v).tier},size:9,get color(){return`var(--tier-${e(v).tier??""})`}}),t(q);var M=s(q,2),fe=a(M,!0);t(M);var O=s(M,2),_e=a(O);t(O);var S=s(O,2),be=a(S,!0);t(S);var U=s(S,2);{var ge=j=>{var C=We(),xe=a(C,!0);t(C),A(()=>l(xe,e(v).url)),p(j,C)},he=m(()=>e(v).url&&e(v).url.startsWith("http"));P(U,j=>{e(he)&&j(ge)})}var X=s(U,2),Y=s(a(X)),ye=a(Y,!0);t(Y),t(X),t(k),A(()=>{l(ce,`[${e(v).n??""}]`),l(fe,e(v).source),l(_e,`v. ${e(v).vintage??""}`),l(be,e(v).title),l(ye,e(v).docId)}),p($,k)}),t(Q),t(F),p(E,F)};P(W,E=>{e(B).length&&E(de)})}var K=s(W,2),ue=a(K);t(K),t(n),A(()=>{l(ne,`flood-exposure briefing · v0.4.2 · ${e(G)??""}`),l(le,e(r).queryText),l(oe,e(r).intent??"briefing"),l(ve,` · ${e(r).specialists??""} specialists
|
| 4 |
· ${e(r).attempts??1??""} reconcile${(e(r).attempts??1)===1?"":"s"}
|
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
import{d as De,s as Y,a as M,f as E,c as Ft,b as Et,t as Lt}from"../chunks/Dlpu43Tj.js";import{c as x,s as $,r as w,v as ze,t as W,k as a,f as ge,J as te,p as jt,j as S,L as ee,K as Oe,l as h,G as Ot,a as Pt}from"../chunks/DwbuJhNu.js";import{p as Xe,i as H}from"../chunks/8F5LpR-T.js";import{p as Dt}from"../chunks/yTOzveqN.js";import{T as ot,t as lt,a as zt,B as Yt}from"../chunks/Cl16PtNL.js";import{C as Rt,F as Bt,R as Ht,M as Gt}from"../chunks/CAli5X_k.js";import"../chunks/DFFHaukH.js";import{b as se,e as ct,a as Pe,s as Ut,i as Wt}from"../chunks/CBcGqa-S.js";import{b as Qe,p as Kt}from"../chunks/DNaFzQeI.js";const Zt=!1,Jt=!1,dr=Object.freeze(Object.defineProperty({__proto__:null,prerender:Zt,ssr:Jt},Symbol.toStringTag,{value:"Module"}));De(["click"]);De(["click"]);var Vt=E('<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>'),Xt=E('<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 Qt(n){const e=[{n:"01",label:"Status"},{n:"02",label:"Empirical evidence"},{n:"03",label:"Modeled scenarios"},{n:"04",label:"Policy context"}];var t=Xt(),r=x(t),s=x(r);se(s,"",{},{width:"62%"});var u=$(s,2);se(u,"",{},{width:"40%"}),w(r);var o=$(r,2);ct(o,1,()=>e,_=>_.n,(_,m)=>{var l=Vt(),c=x(l),v=x(c),L=x(v,!0);w(v);var R=$(v,2),j=x(R,!0);w(R),ze(2),w(c);var G=$(c,2);se(G,"",{},{width:"92%"});var F=$(G,2);se(F,"",{},{width:"78%"});var P=$(F,2);se(P,"",{},{width:"85%"}),w(l),W(()=>{Y(L,a(m).n),Y(j,a(m).label)}),M(_,l)}),w(t),M(n,t)}var en=E('<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 tn(n,e){let t=Xe(e,"attempt",3,2),r=Xe(e,"max",3,3);var s=en(),u=x(s);ot(u,{tier:"modeled",size:11,color:"var(--tier-modeled)"});var o=$(u,2),_=$(x(o),2),m=x(_);w(_),w(o),ze(2),w(s),W(()=>Y(m,`Mellea reconciler · attempt ${t()??""} of ${r()??""} · previous draft dimmed below`)),M(n,s)}var nn=E("<a> </a>"),rn=E('<button type="button"> </button>'),an=E('<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 sn(n,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 r=te(()=>t[e.state]),s=te(()=>e.actions??a(r).defaultActions.map(G=>({label:G})));var u=an(),o=x(u),_=x(o);ot(_,{get tier(){return a(r).tier},size:11,get color(){return`var(--tier-${a(r).tier??""})`}});var m=$(_,2),l=x(m,!0);w(m),w(o);var c=$(o,2),v=x(c,!0);w(c);var L=$(c,2),R=x(L,!0);w(L);var j=$(L,2);ct(j,21,()=>a(s),Wt,(G,F,P)=>{var ne=Ft(),Ne=ge(ne);{var Ae=U=>{var O=nn();Pe(O,1,"error-card-action",null,{},{"is-primary":P===0});var X=x(O,!0);w(O),W(()=>{Ut(O,"href",a(F).href),Y(X,a(F).label)}),M(U,O)},ce=U=>{var O=rn();Pe(O,1,"error-card-action",null,{},{"is-primary":P===0});var X=x(O,!0);w(O),W(()=>Y(X,a(F).label)),Et("click",O,function(...re){var de;(de=a(F).onClick)==null||de.apply(this,re)}),M(U,O)};H(Ne,U=>{a(F).href?U(Ae):U(ce,-1)})}M(G,ne)}),w(j),ze(2),w(u),W(()=>{Pe(u,1,`error-card error-card-${e.state??""}`),Y(l,e.eyebrowOverride??a(r).eyebrow),Y(v,e.headlineOverride??a(r).headline),Y(R,e.bodyOverride??a(r).body)}),M(n,u)}De(["click"]);const V="2026-05";function on(n){return n==="fan"||n==="merge"?"ok":n==="silent"?"silent":n==="error"?"error":"ok"}function dt(n){return[n,...(n.children??[]).flatMap(dt)]}function ln(n){const e=n.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 cn(n){const e={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};if(n)for(const t of dt(n)){const r=ln(t.name);r&&e[r].push({id:t.id||t.name,name:t.name,status:on(t.status),tier:t.tier,ms:t.ms,note:t.note??t.error??void 0})}return Object.keys(e).map(t=>({key:t,members:e[t]}))}function b(n){return typeof n=="number"&&Number.isFinite(n)?n:null}function A(n){return typeof n=="string"?n:null}function q(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:null}function dn(n,e){return n.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&&A(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(n){const e=q(n.dep);if(!e)return null;const t=[];for(const[r,s]of Object.entries(e)){const u=q(s);if(!u)continue;const o=b(u.depth_class)??0;o<=0||t.push([r.replace("dep_",""),A(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 pn(n){const e=q(n.ida_hwm);if(!e)return null;const t=b(e.n_within_radius);if(!t||t<=0)return null;const r=[];return r.push(["count",`${t}`,`${b(e.radius_m)??800} m radius`]),b(e.max_height_above_gnd_ft)!=null&&r.push(["max above gnd",`${e.max_height_above_gnd_ft} ft`,"—"]),b(e.nearest_dist_m)!=null&&r.push(["nearest",A(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:r,docId:"ida_hwm",citeId:"ida_hwm",mapLayer:"hwm"}}function mn(n){const e=q(n.prithvi_water);if(!e)return null;const t=b(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:`${b(e.n_polygons_within_500m)??0} distinct polygons within 500 m`,docId:"prithvi_water",citeId:"prithvi_water",mapLayer:"prithvi"}}function _n(n){const e=q(n.microtopo);if(!e)return null;const t=b(e.point_elev_m);if(t==null)return null;const r=[{value:`${t.toFixed(1)} m`,label:"elevation"}];return b(e.hand_m)!=null&&r.push({value:`${e.hand_m.toFixed(1)} m`,label:"HAND"}),b(e.twi)!=null&&r.push({value:`${e.twi.toFixed(1)}`,label:"TWI"}),b(e.rel_elev_pct_200m)!=null&&r.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:r,sub:"Lower percentile = topographic low point; runoff routes here.",docId:"microtopo",citeId:"microtopo"}}function fn(n){const e=[],t=q(n.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:A(o.station_name)??A(o.entrance_id)??"entrance",detail:`${b(o.distance_m)??"—"} m · ${A(o.daytime_routes)??""}`.trim(),sourceId:A(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 r=q(n.nycha_developments);if(r!=null&&r.available&&Array.isArray(r.developments))for(const o of r.developments.slice(0,3))e.push({reg:"NYCHA",tier:"empirical",label:A(o.development)??"development",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(o.tds_num)??null,note:null});else r&&r.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=q(n.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:A(o.loc_name)??"school",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(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=q(n.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:A(o.facility_name)??"hospital",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(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:V,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 hn(n){const e=q(n.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:`${b(e.pct_buildings)??0}%`,subhead:"building-footprint coverage in chip",sub:`${b(e.n_building_components)??0} distinct components · test mIoU 0.5511`,illustrative:!0,docId:"tm_buildings",citeId:"tm_buildings",mapLayer:"buildings"}:null}function vn(n){const e=q(n.floodnet);if(!e||(b(e.n_sensors)??0)<=0)return null;const t=b(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:`${b(e.n_sensors)??0} sensors · last 3 y`,spark:Array.from({length:24},(r,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 yn(n){var _;const e=q(n.nyc311);if(!e)return null;const t=b(e.n)??0;if(t<=0)return null;const r=q(e.by_year),s=q(e.by_descriptor),u=r?Object.values(r).map(m=>b(m)??0):Array.from({length:12},()=>Math.round(t/12)),o=s?(_=Object.entries(s).sort((m,l)=>(b(l[1])??0)-(b(m[1])??0))[0])==null?void 0:_[0]:null;return{id:"fsm-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests (Socrata erm2-nwe9)",vintage:V,title:"Recent 311 flood complaints",headline:`${t} calls`,subhead:o?`top descriptor: ${o}`:"all flood-related descriptors",histogram:u,sparkSub:`Within ${b(e.radius_m)??200} m · ${b(e.years)??5} y window. Filtered to flood-relevant descriptors.`,docId:"nyc311",citeId:"nyc311",mapLayer:"complaints"}}function gn(n){var r;const e=q(n.nws_obs);if(!e||e.error||e.station_id==null)return null;const t=[];return b(e.precip_last_hour_mm)!=null&&t.push({value:`${e.precip_last_hour_mm} mm`,label:"precip · 1h"}),b(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 ${A(e.station_id)??"?"}`,vintage:((r=A(e.obs_time))==null?void 0:r.slice(0,10))??V,title:"Recent precipitation",scalars:t,sub:`Nearest hourly METAR: ${A(e.station_name)??"?"} (${b(e.distance_km)??"?"} km).`,docId:"nws_obs",citeId:"nws_obs",mapLayer:"nws"}:null}function bn(n){var r;const e=q(n.noaa_tides);if(!e||e.error||b(e.observed_ft_mllw)==null)return null;const t=[{value:`${e.observed_ft_mllw} ft`,label:"observed (MLLW)"}];return b(e.predicted_ft_mllw)!=null&&t.push({value:`${e.predicted_ft_mllw} ft`,label:"predicted"}),b(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 ${A(e.station_name)??A(e.station_id)??"?"}`,vintage:((r=A(e.obs_time))==null?void 0:r.slice(0,10))??V,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 wn(n){var t;const e=q(n.prithvi_live);return e!=null&&e.ok?{id:"fsm-prithvi-live",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC v2",agency:"msradam/Prithvi-EO-2.0-NYC-Pluvial · v2 fine-tune",vintage:((t=A(e.item_datetime))==null?void 0:t.slice(0,10))??V,title:"Live Sentinel-2 pluvial flood prediction",rasterKind:"prithvi",headline:`${b(e.pct_water_within_500m)??0}%`,subhead:`water within 500 m · cloud ${b(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"}:null}function xn(n){const e=q(n.terramind_lulc);return e!=null&&e.ok?{id:"fsm-tm-lulc",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"TerraMind-NYC",agency:"msradam/TerraMind-NYC-Adapters · LULC LoRA",vintage:"2026",title:"Land-cover (current Sentinel-2 chip)",rasterKind:"lulc",headline:A(e.dominant_class)??"dominant class",subhead:`${b(e.dominant_pct)??0}% of chip`,sub:"Test mIoU 0.5866 on held-out NYC chips.",illustrative:!0,docId:"tm_lulc",citeId:"tm_lulc",mapLayer:"lulc"}:null}function kn(n){const e=q(n.ttm_forecast);if(!(e!=null&&e.available)||!e.interesting)return null;const t=b(e.forecast_peak_ft),r=b(e.forecast_peak_minutes_ahead);return t==null||r==null?null:{id:"fsm-ttm-fc",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2",agency:"IBM Granite TimeSeries TTM r2 · zero-shot Battery surge",vintage:V,title:"Surge nowcast at the Battery — 9.6 h horizon",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:`${t} ft @ +${Math.round(r/60)}h`},headline:`${t} ft`,subhead:"peak surge residual",sub:"Zero-shot 6-min cadence. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · Battery, not point-of-query",docId:"ttm_forecast",citeId:"ttm_forecast"}}function Sn(n){const e=q(n.ttm_battery_surge);if(!(e!=null&&e.available)||!e.interesting)return null;const t=b(e.forecast_peak_m),r=b(e.forecast_peak_hours_ahead);return t==null||r==null?null:{id:"fsm-ttm-batt",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 · NYC fine-tune",agency:"msradam/Granite-TTM-r2-Battery-Surge · 96 h horizon",vintage:V,title:"Battery storm-surge nowcast (96 h)",timeseries:{hours:96,peak:{x:r,y:Math.round(t*100)},peakLabel:`${(t*100).toFixed(0)} cm @ +${r}h`},headline:`${(t*100).toFixed(0)} cm`,subhead:`peak surge · +${r}h ahead`,sub:"Test MAE 0.1091 m, −41% vs persistence. Hourly cadence; applies city-wide via NOAA station 8518750.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery",citeId:"ttm_battery"}}function $n(n){const e=q(n.nws_alerts);if(!e)return null;const t=b(e.n_active)??0;if(t<=0)return null;const r=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:V,title:`${t} active flood-relevant alert${t===1?"":"s"}`,columns:["event","severity","expires"],rows:r.slice(0,4).map(s=>[A(s.event)??"?",A(s.severity)??"?",(A(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 Nn(n,e){var _,m,l;const t=n.mellea,r=((_=t==null?void 0:t.passed)==null?void 0:_.length)??0,s=((m=t==null?void 0:t.failed)==null?void 0:m.length)??0,u=r+s,o=(t==null?void 0:t.attempts)??0;return{id:"fsm-capstone-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · Granite 4.1 + Mellea grounding check",vintage:V,title:"Briefing reconciliation",metaRows:[{k:"Mellea reroll",v:`${o} attempt${o===1?"":"s"}`},{k:"Grounding checks",v:`${r} / ${u||4} passed`},{k:"Citations resolved",v:`${((l=n.citations)==null?void 0:l.length)??0}`},{k:"Wall-clock",v:e!=null?`${e.toFixed(1)} s`:"—"}],sub:"Capstone produces prose, not cards. This meta-card summarises the reconciler chain that wrote the briefing above.",docId:"capstone"}}function et(n,e,t,r=!0){const s=n??{},u=q(s.geocode);return{cards:[dn(s,u),un(s),pn(s),mn(s),_n(s),fn(s),hn(s),vn(s),yn(s),gn(s),bn(s),wn(s),xn(s),$n(s),kn(s),Sn(s),r?Nn(n??{},t):null].filter(_=>_!=null),stones:cn(e),wallSeconds:t}}function An(n,e,t,r){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;n[u]=r&&(o==null?void 0:o.inside)===!0?!0:r?!1:null}else if(e==="dep_stormwater"){const o=t??{},_={};for(const[m,l]of Object.entries(o)){const c=typeof l=="string"?l:"";c&&(_[m]={depth_class:1,depth_label:c})}n[u]=Object.keys(_).length?_:null}else r&&t!=null?n[u]=t:n[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"},we={subway:"subway entrances",nycha:"NYCHA developments",school:"public schools",hospital:"hospitals"};function xe(n){return!n||!Number.isFinite(n)?"—":`${Math.round(n)}m`}function ke(n){return n==null||!Number.isFinite(n)?"—":`${(n*3.28084).toFixed(1)} ft`}function Se(n,e){return typeof e=="number"?e>=.5?`Inundated 2012 (${Math.round(e*100)}%)`:e>0?`Edge (${Math.round(e*100)}%)`:"—":n?"Inundated 2012":"—"}function $e(n,e,t){return typeof t=="number"?t>=.5?`≥${Math.round(t*100)}% in scenario`:t>0?`${Math.round(t*100)}% edge`:"minimal":n&&n.length?n:e&&e>0?`class ${e}`:"minimal"}function Tn(n){return n?/elevator|easement|stair.*ramp/i.test(n):!1}function In(n){if(!n.available)return null;const t=(n.entrances??[]).map(r=>{const s=Tn(r.entrance_type);return{name:`${r.station_name??"?"}${r.daytime_routes?` (${String(r.daytime_routes).split(/\s+/).slice(0,3).join("/")})`:""}`,elev:ke(r.elev_m),ada:s,fema:"Zone X",sandy:Se(r.inside_sandy_2012),dep:$e(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"subway",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}});return{type:we.subway,radius:xe(n.radius_m),count:n.n_entrances??t.length,rows:t,sourceLabel:be.subway}}function Cn(n){if(!n.available)return null;const t=(n.developments??[]).map(r=>{const s=r.pct_inside_sandy_2012,u=r.pct_in_dep_extreme_2080;return{name:`${r.development??"?"}${r.borough?` · ${r.borough}`:""}`,elev:ke(r.rep_elevation_m),ada:!1,fema:"—",sandy:Se(void 0,s),dep:$e(void 0,void 0,u),asset:"nycha",primaryTier:s&&s>0?"empirical":"modeled"}});return{type:we.nycha,radius:xe(n.radius_m),count:n.n_developments??t.length,rows:t,sourceLabel:be.nycha}}function Mn(n){if(!n.available)return null;const t=(n.schools??[]).map(r=>({name:`${r.school_name??r.name??"?"}${r.borough?` · ${r.borough}`:""}`,elev:ke(r.elev_m),ada:!1,fema:"—",sandy:Se(r.inside_sandy_2012),dep:$e(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"school",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}));return{type:we.school,radius:xe(n.radius_m),count:n.n_schools??t.length,rows:t,sourceLabel:be.school}}function qn(n){if(!n.available)return null;const t=(n.hospitals??[]).map(r=>({name:`${r.facility_name??r.name??"?"}${r.borough?` · ${r.borough}`:""}`,elev:ke(r.elev_m),ada:!0,fema:"—",sandy:Se(r.inside_sandy_2012),dep:$e(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"hospital",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}));return{type:we.hospital,radius:xe(n.radius_m),count:n.n_hospitals??t.length,rows:t,sourceLabel:be.hospital}}function Fn(n){if(!n)return[];const e=[],t=In(n.mta_entrances??{});t&&t.rows.length&&e.push(t);const r=Cn(n.nycha_developments??{});r&&r.rows.length&&e.push(r);const s=Mn(n.doe_schools??{});s&&s.rows.length&&e.push(s);const u=qn(n.doh_hospitals??{});return u&&u.rows.length&&e.push(u),e}function En(n,e){const t=`/api/agent/stream?q=${encodeURIComponent(n)}`,r=new EventSource(t);let s="",u;const o=/([.?!])(\s|$)/;function _(l=!1){var v,L;let c;for(;c=o.exec(s);){const R=c.index+c[1].length+(c[2]?c[2].length:0),j=s.slice(0,R).trim();s=s.slice(R),j&&((v=e.onSentence)==null||v.call(e,j,u))}l&&s.trim()&&((L=e.onSentence)==null||L.call(e,s.trim(),u),s="")}function m(l,c){r.addEventListener(l,v=>{try{c(JSON.parse(v.data))}catch{}})}return m("hello",l=>{var c;return(c=e.onHello)==null?void 0:c.call(e,l.query)}),m("plan_token",l=>{var c;return(c=e.onPlanToken)==null?void 0:c.call(e,l.delta)}),m("plan",l=>{var c;return(c=e.onPlan)==null?void 0:c.call(e,l)}),m("step",l=>{var c;return(c=e.onStep)==null?void 0:c.call(e,l)}),m("token",l=>{var c,v;l.attempt!==u&&(u=l.attempt,s="",(c=e.onAttemptStart)==null||c.call(e,l.attempt??1)),(v=e.onToken)==null||v.call(e,l.delta,l.attempt),s+=l.delta,_(!1)}),m("mellea_attempt",l=>{var c;return(c=e.onMelleaAttempt)==null?void 0:c.call(e,l)}),m("final",l=>{var c;_(!0),(c=e.onFinal)==null||c.call(e,l)}),m("error",l=>{var c;return(c=e.onError)==null?void 0:c.call(e,l.err)}),r.addEventListener("done",()=>{var l;_(!0),(l=e.onDone)==null||l.call(e),r.close()}),r.addEventListener("error",()=>{var l;_(!0),(l=e.onError)==null||l.call(e,"SSE connection error"),r.close()}),{close:()=>r.close()}}const ut=[{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 tt(n){const e=n.toLowerCase().replace(/[.:]+\s*$/,"").trim();return ut.find(t=>t.aliases.includes(e))}const nt=/(^|\n)\s*(?:\*\*([A-Z][A-Za-z\s/]+?)\.\s*\*\*|#{1,3}\s*(0[1-4])\s*[:\-—.]?\s*([^\n]+))/g;function pt(n,e,t){return{id:e,n,tier:lt(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 Ln=/\[([a-z][a-z0-9_]*(?:\s*,\s*[a-z][a-z0-9_]*)*)\]/gi;function rt(n){return n.split(new RegExp("(?<=[.!?])\\s+(?=[A-Z(])","g")).filter(t=>t.trim().length>0)}function it(n,e,t){let r=0;const s=[],u=[...n.matchAll(Ln)];if(u.length===0)return[{text:n}];for(const o of u){const _=n.slice(r,o.index??0),m=o[1].split(/\s*,\s*/).filter(Boolean);r=(o.index??0)+o[0].length;const l=lt(m[0]);s.push({text:_,tier:l,cite:m[0]});for(const c of m)e[c]||(e[c]=t(c))}if(r<n.length){const o=n.slice(r);o.trim()&&s.push({text:o})}return s}function jn(n,e={}){const t={...e};let r=Object.values(t).reduce((l,c)=>Math.max(l,c.n),0)+1;const s=new Set,u=l=>(e[l]||s.add(l),pt(r++,l)),o=[],_=[];let m;for(nt.lastIndex=0;m=nt.exec(n);)if(m[2]!==void 0){const l=tt(m[2]);if(!l)continue;_.push({num:l.n,label:l.label,tier:l.tier,start:m.index+m[1].length,bodyStart:m.index+m[0].length})}else if(m[3]!==void 0){const l=m[3],c=(m[4]??"").trim(),v=ut.find(L=>L.n===l)??tt(c);_.push({num:l,label:(v==null?void 0:v.label)??c,tier:v==null?void 0:v.tier,titleExtra:v&&c.toLowerCase()!==v.label.toLowerCase()?c:void 0,start:m.index+m[1].length,bodyStart:m.index+m[0].length})}for(let l=0;l<_.length;l++){const c=_[l],v=_[l+1],L=n.slice(c.bodyStart,v?v.start:n.length).trim();if(L){o.push({kind:"head",n:c.num,label:c.label,tier:c.tier,title:c.titleExtra});for(const R of L.split(/\n\s*\n/)){const j=R.replace(/\s+/g," ").trim();if(!j)continue;const G=rt(j),F=[];for(const P of G)F.push(...it(P,t,u)),F.push({text:" "});for(;F.length&&F[F.length-1].text.trim()===""&&!F[F.length-1].tier;)F.pop();F.length&&o.push({kind:"prose",parts:F})}}}if(o.length===0&&n.trim()){o.push({kind:"head",n:"01",label:"Status"});const l=n.replace(/\s+/g," ").trim(),c=rt(l),v=[];for(const L of c)v.push(...it(L,t,u)),v.push({text:" "});for(;v.length&&v[v.length-1].text.trim()===""&&!v[v.length-1].tier;)v.pop();v.length&&o.push({kind:"prose",parts:v})}return{blocks:o,citations:t,unresolvedDocIds:[...s]}}const oe={type:"FeatureCollection",features:[]};async function le(n){try{const e=await fetch(n);if(!e.ok)return oe;const t=await e.json();return!t||t.type!=="FeatureCollection"?oe:t}catch{return oe}}async function On(n,e,t=1500){return le(`/api/layers/sandy?lat=${n}&lon=${e}&r=${t}`)}async function Pn(n,e,t=1500){return le(`/api/layers/dep_extreme_2080?lat=${n}&lon=${e}&r=${t}`)}async function at(n,e,t=1500){return le(`/api/layers/prithvi_water?lat=${n}&lon=${e}&r=${t}`)}async function Dn(n){return le(`/api/layers/sandy_clipped?code=${encodeURIComponent(n)}`)}async function zn(n,e="dep_extreme_2080"){return le(`/api/layers/dep_clipped?code=${encodeURIComponent(n)}&scenario=${e}`)}async function st(n,e,t=1500){try{const r=await fetch(`/api/floodnet_near?lat=${n}&lon=${e}&r=${t}`);return r.ok?{type:"FeatureCollection",features:(await r.json()).features.map(o=>{const _=o.properties??{};return{...o,properties:{..._,count:typeof _.n_events_3y=="number"?_.n_events_3y:1}}})}:oe}catch{return oe}}var Yn=E('<span class="region-head-meta svelte-1q8jizq"> <!></span>'),Rn=E('<span class="region-head-meta svelte-1q8jizq">planning…</span>'),Bn=E('<div class="reroll-prev svelte-1q8jizq" aria-hidden="true"><p class="reroll-prev-line svelte-1q8jizq"> </p></div>'),Hn=E("<!> <!>",1),Gn=E('<span class="streaming-caret svelte-1q8jizq" aria-hidden="true">▍</span>'),Un=E("<!> <!>",1),Wn=E('<details class="plan-details svelte-1q8jizq"><summary class="svelte-1q8jizq"> </summary> <pre class="plan-stream svelte-1q8jizq"> </pre></details>'),Kn=E('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Planning intent… <!></div>'),Zn=E('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Resolving address…</div>'),Jn=E("<!> <!>",1),Vn=E('<span class="region-head-meta svelte-1q8jizq"> </span>'),Xn=E('<span class="region-head-meta svelte-1q8jizq">awaiting geocode…</span>'),Qn=E('<div style="position: relative; flex: 1; min-height: 0;" class="svelte-1q8jizq"><!> <!></div>'),er=E('<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 ur(n,e){jt(e,!0);let t=te(()=>Dt.params.queryId??""),r=te(()=>()=>{try{return decodeURIComponent(a(t))}catch{return a(t)}}),s=S(null),u=S(""),o=S(""),_=S(null),m=S(!1),l=S(0),c=2,v=S(!1),L=S(!1),R=S(""),j=S(null),G=S(ee([])),F=te(()=>{var d,i,f,p;return{empirical:((d=a(pe))==null?void 0:d.features.length)??0,modeled:((i=a(me))==null?void 0:i.features.length)??0,synthetic:((f=a(_e))==null?void 0:f.features.length)??0,proxy:((p=a(fe))==null?void 0:p.features.length)??0}}),P=S(ee({id:"root",name:"briefing.run",status:"ok",ms:0,tier:null,children:[]})),ne=S(null),Ne="comfortable",Ae="smart",ce=S(!1);Oe(()=>{typeof window<"u"&&h(ce,new URL(window.location.href).searchParams.get("grammar")==="1")});let U=S(null),O=S(void 0),X=ee({}),re=S(0),de=te(()=>{if(a(re),a(_)){const d={...X,...a(_)};return et(d,a(P),a(O),!0)}return et(X,a(P),a(O),!1)});function mt(d){h(ne,d,!0)}function _t(d){const i=document.getElementById("region-cites");i&&i.scrollIntoView({behavior:"smooth",block:"start"})}const Ye=new Set(["ttm_forecast","ttm_311_forecast","floodnet_forecast"]),Te="group-ttm-r2";function ft(d,i,f,p){if(p==="error")return f??void 0;if(p==="silent")return f??"no data";if(i==null||typeof i!="object")return;const T=i,y={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_majority_inside_sandy_2012"],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"]}[d],C=[];if(y){for(const I of y)if(T[I]!==void 0&&C.push(Be(I,T[I])),C.length>=3)break}else for(const[I,g]of Object.entries(T))if(g!==null&&typeof g!="object"&&(C.push(Be(I,g)),C.length>=2))break;return C.join(" · ")||void 0}function ht(d){const i=[],f=d.mta_entrances;if(f&&Array.isArray(f.entrances))for(const y of f.entrances){const C=Number(y.entrance_lat),I=Number(y.entrance_lon);!Number.isFinite(C)||!Number.isFinite(I)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[I,C]},properties:{kind:"subway",name:`${y.station_name??"?"} (${y.daytime_routes??"?"})`,doc_id:`mta_entrance_${y.station_id??""}`,inside_sandy_2012:y.inside_sandy_2012===!0}})}const p=d.doe_schools;if(p&&Array.isArray(p.schools))for(const y of p.schools){const C=Number(y.school_lat),I=Number(y.school_lon);!Number.isFinite(C)||!Number.isFinite(I)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[I,C]},properties:{kind:"school",name:String(y.loc_name??y.school_name??"?"),doc_id:`doe_school_${y.loc_code??""}`,inside_sandy_2012:y.inside_sandy_2012===!0}})}const T=d.nycha_developments;if(T&&Array.isArray(T.developments))for(const y of T.developments){const C=Number(y.centroid_lat),I=Number(y.centroid_lon);if(!Number.isFinite(C)||!Number.isFinite(I))continue;const g=Number(y.pct_inside_sandy_2012??0);i.push({type:"Feature",geometry:{type:"Point",coordinates:[I,C]},properties:{kind:"nycha",name:String(y.development??"?"),doc_id:`nycha_dev_${y.tds_num??""}`,inside_sandy_2012:g>=50,pct_inside_sandy:g}})}const k=d.doh_hospitals;if(k&&Array.isArray(k.hospitals))for(const y of k.hospitals){const C=Number(y.hospital_lat),I=Number(y.hospital_lon);!Number.isFinite(C)||!Number.isFinite(I)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[I,C]},properties:{kind:"hospital",name:String(y.facility_name??"?"),doc_id:`nyc_hospital_${y.fac_id??""}`,inside_sandy_2012:y.inside_sandy_2012===!0}})}return{type:"FeatureCollection",features:i}}function vt(d){return{type:"FeatureCollection",features:[]}}function Re(d){return 1+(d.children??[]).reduce((f,p)=>f+Re(p),0)}function Be(d,i){if(typeof i=="number"){const f=Number.isInteger(i)?`${i}`:i.toFixed(2);return`${d}=${f}`}if(typeof i=="boolean")return`${d}=${i}`;if(typeof i=="string"){const f=i.length>24?i.slice(0,22)+"…":i;return`${d}=${f}`}return d}let ie=S(ee({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),K=S(null),ue=S(null),He=S(void 0),Ge=S(void 0),pe=S(void 0),me=S(void 0),_e=S(void 0),fe=S(void 0),Q=S(ee([])),ae=S(ee({})),he=[];function yt(){var T;if(!a(o)){h(Q,[],!0),h(ae,{},!0),he=[];return}const d={};(T=a(_))!=null&&T.citations&&a(_).citations.forEach((k,y)=>{d[k.doc_id]=pt(y+1,k.doc_id,{source:k.source,title:k.title,url:k.url,vintage:k.vintage})});const i=jn(a(o),d),f={};let p=1;for(const k of he){const y=i.citations[k];y&&(f[k]={...y,n:p++})}for(const[k,y]of Object.entries(i.citations))f[k]||(f[k]={...y,n:p++},he.push(k));h(Q,i.blocks,!0),h(ae,f,!0)}Oe(()=>{a(o),a(_),yt()}),Oe(()=>{if(!a(K))return;const{lat:d,lon:i,source:f}=a(K);f==="nta"&&a(ue)?(Dn(a(ue)).then(p=>h(pe,p,!0)),zn(a(ue)).then(p=>h(me,p,!0)),at(d,i,2500).then(p=>h(_e,p,!0)),st(d,i,3e3).then(p=>h(fe,p,!0))):(On(d,i).then(p=>h(pe,p,!0)),Pn(d,i).then(p=>h(me,p,!0)),at(d,i).then(p=>h(_e,p,!0)),st(d,i).then(p=>h(fe,p,!0)))}),Ot(()=>{if(Qe.reset(),!a(r)())return;h(U,Date.now(),!0);const d=En(a(r)(),{onPlanToken:i=>h(u,a(u)+i),onPlan:i=>h(s,i,!0),onStep:i=>{if(An(X,i.step,i.result,i.ok),h(re,a(re)+1),i.step==="geocode")if(i.ok&&i.result&&typeof i.result=="object"){const g=i.result;if(typeof g.lat=="number"&&typeof g.lon=="number"){const N=typeof g.address=="string"?g.address:a(r)();h(K,{label:N,lat:g.lat,lon:g.lon,source:"geocode"},!0),h(L,!0)}}else h(j,"geocoder");if(i.step==="nta_resolve"&&i.ok&&i.result&&typeof i.result=="object"){const g=i.result,N=Array.isArray(g.bbox)?g.bbox:null,D=typeof g.nta_code=="string"?g.nta_code:null;if(N&&N.length===4&&D){h(ue,D,!0);const Z=(N[0]+N[2])/2,z=(N[1]+N[3])/2,B=typeof g.nta_name=="string"?g.nta_name:a(r)();h(K,{label:B,lat:z,lon:Z,source:"nta"},!0)}}const f=zt(i.step),p=i.ok?i.result==null&&i.err==null?"silent":"ok":"error",T=Math.round((i.elapsed_s??0)*1e3),k=i.result!=null?i.result:i.err??null,y=ft(i.step,i.result,i.err,p),C={id:`step-${Re(a(P))}`,name:i.step,status:p,ms:T,tier:f,note:y,output:k,error:p==="error"?i.err??"unknown error":void 0,model:Ye.has(i.step)?"granite-timeseries-ttm-r2":void 0},I={...a(P),ms:(a(P).ms??0)+T};if(Ye.has(i.step)){const g=[...I.children??[]];let N=g.find(z=>z.id===Te);N||(N={id:Te,name:"forecasting.granite-timeseries-ttm-r2",status:"fan",ms:0,tier:"modeled",note:"1 instance",model:"granite-timeseries-ttm-r2",children:[]},g.push(N));const D=[...N.children??[],C],Z={...N,ms:(N.ms??0)+T,note:`${D.length} instance${D.length===1?"":"s"}`,children:D};h(P,{...I,children:g.map(z=>z.id===Te?Z:z)},!0)}else h(P,{...I,children:[...I.children??[],C]},!0)},onAttemptStart:i=>{h(l,i,!0),i>1&&(h(R,a(o),!0),h(o,""),he=[])},onToken:i=>{a(v)||(h(v,!0),a(l)===0&&h(l,1)),h(o,a(o)+i)},onMelleaAttempt:i=>{i.attempt>0&&h(l,i.attempt,!0)},onFinal:i=>{h(_,i,!0),i.paragraph&&h(o,i.paragraph,!0),h(G,Fn(i),!0),h(He,ht(i),!0),h(Ge,vt(),!0);const p=i.mellea;p&&p.failed&&p.failed.length>0&&p.attempts&&p.attempts>=c&&h(j,"grounding")},onError:i=>{const f=i.toLowerCase();(f.includes("connection")||f.includes("502")||f.includes("503")||f.includes("timeout")||f.includes("routing"))&&h(j,"backend")},onDone:()=>{var i,f,p,T,k;h(m,!0),a(U)!=null&&h(O,(Date.now()-a(U))/1e3),!a(v)&&!a(j)&&a(L)&&h(j,"all-silent"),!a(j)&&a(Q).length>0&&(Kt({queryId:a(t),queryText:a(r)(),intent:((i=a(s))==null?void 0:i.intent)??null,specialists:((p=(f=a(s))==null?void 0:f.specialists)==null?void 0:p.length)??0,blocks:a(Q),citations:a(ae),generatedAt:new Date().toISOString(),attempts:((k=(T=a(_))==null?void 0:T.mellea)==null?void 0:k.attempts)??a(l)}),Qe.markReady())}});return()=>d.close()});var Ie=er(),Ue=x(Ie),Ce=x(Ue),Me=x(Ce),qe=x(Me),gt=$(x(qe),2);{var bt=d=>{var i=Yn(),f=x(i),p=$(f);{var T=k=>{var y=Lt("· ✓ done");M(k,y)};H(p,k=>{a(m)&&k(T)})}w(i),W(()=>{var k;return Y(f,`intent: ${a(s).intent??""} · ${((k=a(s).specialists)==null?void 0:k.length)??0??""} specialists · attempt ${a(l)??""} `)}),M(d,i)},wt=d=>{var i=Rn();M(d,i)};H(gt,d=>{a(s)?d(bt):d(wt,-1)})}w(qe);var Fe=$(qe,2),We=$(x(Fe)),xt=x(We,!0);w(We),w(Fe);var kt=$(Fe,2);{var St=d=>{sn(d,{get state(){return a(j)}})},$t=d=>{var i=Jn(),f=ge(i);{var p=g=>{var N=Hn(),D=ge(N);tn(D,{get attempt(){return a(l)},max:c});var Z=$(D,2);{var z=B=>{var J=Bn(),ve=x(J),ye=x(ve);w(ve),w(J),W(je=>Y(ye,`${je??""}…`),[()=>a(R).slice(0,360)]),M(B,J)};H(Z,B=>{a(R)&&B(z)})}M(g,N)};H(f,g=>{a(l)>1&&g(p)})}var T=$(f,2);{var k=g=>{var N=Un(),D=ge(N);Yt(D,{get blocks(){return a(Q)},get citations(){return a(ae)},streaming:!1});var Z=$(D,2);{var z=B=>{var J=Gn();M(B,J)};H(Z,B=>{a(m)||B(z)})}M(g,N)},y=g=>{Qt(g)},C=g=>{var N=Kn(),D=$(x(N),2);{var Z=z=>{var B=Wn(),J=x(B),ve=x(J);w(J);var ye=$(J,2),je=x(ye,!0);w(ye),w(B),W(()=>{Y(ve,`Planner streaming (${a(u).length??""} chars)`),Y(je,a(u))}),M(z,B)};H(D,z=>{a(u)&&z(Z)})}w(N),M(g,N)},I=g=>{var N=Zn();M(g,N)};H(T,g=>{a(Q).length?g(k):a(L)&&!a(v)?g(y,1):a(s)?g(I,-1):g(C,2)})}M(d,i)};H(kt,d=>{a(j)?d(St):d($t,-1)})}w(Me);var Ke=$(Me,2),Ee=x(Ke),Le=x(Ee),Nt=$(x(Le),2);{var At=d=>{var i=Vn(),f=x(i);w(i),W((p,T)=>Y(f,`Carto Positron · z15 · ${p??""}°N ${T??""}°W`),[()=>a(K).lat.toFixed(4),()=>Math.abs(a(K).lon).toFixed(4)]),M(d,i)},Tt=d=>{var i=Xn();M(d,i)};H(Nt,d=>{a(K)?d(At):d(Tt,-1)})}w(Le);var It=$(Le,2);{var Ct=d=>{var i=Qn(),f=x(i);Ht(f,{get address(){return a(K)},get activeLayers(){return a(ie)},get sandyEmpirical(){return a(pe)},get depModeled(){return a(me)},get syntheticPrior(){return a(_e)},get proxy311(){return a(fe)},get registerPoints(){return a(He)},get registerPolygons(){return a(Ge)}});var p=$(f,2);Gt(p,{get active(){return a(ie)},get featureCounts(){return a(F)},onToggle:T=>h(ie,{...a(ie),[T]:!a(ie)[T]},!0)}),w(i),M(d,i)};H(It,d=>{a(K)&&d(Ct)})}w(Ee);var Ze=$(Ee,2),Mt=x(Ze);Rt(Mt,{get citations(){return a(ae)}}),w(Ze),w(Ke),w(Ce);var Je=$(Ce,2),Ve=x(Je),qt=x(Ve);Bt(qt,{get data(){return a(de)},density:Ne,provenanceMode:Ae,get showGrammar(){return a(ce)},get linkedKey(){return a(ne)},onLink:mt,onCite:_t}),w(Ve),w(Je),w(Ue),w(Ie),W(d=>Y(xt,d),[()=>a(r)()]),M(n,Ie),Pt()}export{ur as component,dr as universal};
|
|
@@ -1 +0,0 @@
|
|
| 1 |
-
import{d as De,s as z,a as M,f as L,c as Ct,b as Mt,t as qt}from"../chunks/Dlpu43Tj.js";import{c as x,s as S,r as w,v as ze,t as W,k as a,f as ge,J as Q,p as Ft,j as N,L as ie,K as Pe,l as _,G as Lt,a as Et}from"../chunks/DwbuJhNu.js";import{p as Xe,i as H}from"../chunks/8F5LpR-T.js";import{p as jt}from"../chunks/BPL6dYL1.js";import{T as st,t as ot,a as Pt,B as Ot}from"../chunks/CtphE0zf.js";import{C as Dt,F as zt,R as Yt,M as Rt}from"../chunks/TTdyitJv.js";import"../chunks/DFFHaukH.js";import{b as ae,e as lt,a as Oe,s as Bt,i as Ht}from"../chunks/CBcGqa-S.js";import{b as Qe,p as Gt}from"../chunks/DNaFzQeI.js";const Ut=!1,Wt=!1,or=Object.freeze(Object.defineProperty({__proto__:null,prerender:Ut,ssr:Wt},Symbol.toStringTag,{value:"Module"}));De(["click"]);De(["click"]);var Kt=L('<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>'),Zt=L('<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 Jt(n){const e=[{n:"01",label:"Status"},{n:"02",label:"Empirical evidence"},{n:"03",label:"Modeled scenarios"},{n:"04",label:"Policy context"}];var t=Zt(),r=x(t),l=x(r);ae(l,"",{},{width:"62%"});var p=S(l,2);ae(p,"",{},{width:"40%"}),w(r);var o=S(r,2);lt(o,1,()=>e,y=>y.n,(y,m)=>{var s=Kt(),c=x(s),h=x(c),E=x(h,!0);w(h);var Y=S(h,2),j=x(Y,!0);w(Y),ze(2),w(c);var G=S(c,2);ae(G,"",{},{width:"92%"});var F=S(G,2);ae(F,"",{},{width:"78%"});var R=S(F,2);ae(R,"",{},{width:"85%"}),w(s),W(()=>{z(E,a(m).n),z(j,a(m).label)}),M(y,s)}),w(t),M(n,t)}var Vt=L('<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 Xt(n,e){let t=Xe(e,"attempt",3,2),r=Xe(e,"max",3,3);var l=Vt(),p=x(l);st(p,{tier:"modeled",size:11,color:"var(--tier-modeled)"});var o=S(p,2),y=S(x(o),2),m=x(y);w(y),w(o),ze(2),w(l),W(()=>z(m,`Mellea reconciler · attempt ${t()??""} of ${r()??""} · previous draft dimmed below`)),M(n,l)}var Qt=L("<a> </a>"),en=L('<button type="button"> </button>'),tn=L('<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 nn(n,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 r=Q(()=>t[e.state]),l=Q(()=>e.actions??a(r).defaultActions.map(G=>({label:G})));var p=tn(),o=x(p),y=x(o);st(y,{get tier(){return a(r).tier},size:11,get color(){return`var(--tier-${a(r).tier??""})`}});var m=S(y,2),s=x(m,!0);w(m),w(o);var c=S(o,2),h=x(c,!0);w(c);var E=S(c,2),Y=x(E,!0);w(E);var j=S(E,2);lt(j,21,()=>a(l),Ht,(G,F,R)=>{var ee=Ct(),$e=ge(ee);{var Ne=U=>{var P=Qt();Oe(P,1,"error-card-action",null,{},{"is-primary":R===0});var te=x(P,!0);w(P),W(()=>{Bt(P,"href",a(F).href),z(te,a(F).label)}),M(U,P)},le=U=>{var P=en();Oe(P,1,"error-card-action",null,{},{"is-primary":R===0});var te=x(P,!0);w(P),W(()=>z(te,a(F).label)),Mt("click",P,function(...Ae){var ce;(ce=a(F).onClick)==null||ce.apply(this,Ae)}),M(U,P)};H($e,U=>{a(F).href?U(Ne):U(le,-1)})}M(G,ee)}),w(j),ze(2),w(p),W(()=>{Oe(p,1,`error-card error-card-${e.state??""}`),z(s,e.eyebrowOverride??a(r).eyebrow),z(h,e.headlineOverride??a(r).headline),z(Y,e.bodyOverride??a(r).body)}),M(n,p)}De(["click"]);const V="2026-05";function rn(n){return n==="fan"||n==="merge"?"ok":n==="silent"?"silent":n==="error"?"error":"ok"}function ct(n){return[n,...(n.children??[]).flatMap(ct)]}function an(n){const e=n.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 sn(n){const e={cornerstone:[],keystone:[],touchstone:[],lodestone:[],capstone:[]};if(n)for(const t of ct(n)){const r=an(t.name);r&&e[r].push({id:t.id||t.name,name:t.name,status:rn(t.status),tier:t.tier,ms:t.ms,note:t.note??t.error??void 0})}return Object.keys(e).map(t=>({key:t,members:e[t]}))}function b(n){return typeof n=="number"&&Number.isFinite(n)?n:null}function A(n){return typeof n=="string"?n:null}function q(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:null}function on(n,e){return n.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&&A(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 ln(n){const e=q(n.dep);if(!e)return null;const t=[];for(const[r,l]of Object.entries(e)){const p=q(l);if(!p)continue;const o=b(p.depth_class)??0;o<=0||t.push([r.replace("dep_",""),A(p.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 cn(n){const e=q(n.ida_hwm);if(!e)return null;const t=b(e.n_within_radius);if(!t||t<=0)return null;const r=[];return r.push(["count",`${t}`,`${b(e.radius_m)??800} m radius`]),b(e.max_height_above_gnd_ft)!=null&&r.push(["max above gnd",`${e.max_height_above_gnd_ft} ft`,"—"]),b(e.nearest_dist_m)!=null&&r.push(["nearest",A(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:r,docId:"ida_hwm",citeId:"ida_hwm",mapLayer:"hwm"}}function dn(n){const e=q(n.prithvi_water);if(!e)return null;const t=b(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:`${b(e.n_polygons_within_500m)??0} distinct polygons within 500 m`,docId:"prithvi_water",citeId:"prithvi_water",mapLayer:"prithvi"}}function un(n){const e=q(n.microtopo);if(!e)return null;const t=b(e.point_elev_m);if(t==null)return null;const r=[{value:`${t.toFixed(1)} m`,label:"elevation"}];return b(e.hand_m)!=null&&r.push({value:`${e.hand_m.toFixed(1)} m`,label:"HAND"}),b(e.twi)!=null&&r.push({value:`${e.twi.toFixed(1)}`,label:"TWI"}),b(e.rel_elev_pct_200m)!=null&&r.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:r,sub:"Lower percentile = topographic low point; runoff routes here.",docId:"microtopo",citeId:"microtopo"}}function pn(n){const e=[],t=q(n.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:A(o.station_name)??A(o.entrance_id)??"entrance",detail:`${b(o.distance_m)??"—"} m · ${A(o.daytime_routes)??""}`.trim(),sourceId:A(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 r=q(n.nycha_developments);if(r!=null&&r.available&&Array.isArray(r.developments))for(const o of r.developments.slice(0,3))e.push({reg:"NYCHA",tier:"empirical",label:A(o.development)??"development",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(o.tds_num)??null,note:null});else r&&r.available===!1&&e.push({reg:"NYCHA",tier:"empirical",label:null,detail:null,sourceId:null,note:"no NYCHA developments within 1.0 mi (silent)"});const l=q(n.doe_schools);if(l!=null&&l.available&&Array.isArray(l.schools))for(const o of l.schools.slice(0,3))e.push({reg:"DOE",tier:"empirical",label:A(o.loc_name)??"school",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(o.loc_code)??null,note:null});else l&&l.available===!1&&e.push({reg:"DOE",tier:"empirical",label:null,detail:null,sourceId:null,note:"no schools within 1.0 mi (silent)"});const p=q(n.doh_hospitals);if(p!=null&&p.available&&Array.isArray(p.hospitals))for(const o of p.hospitals.slice(0,3))e.push({reg:"DOH",tier:"empirical",label:A(o.facility_name)??"hospital",detail:`${b(o.distance_m)??"—"} m · ${A(o.borough)??""}`.trim(),sourceId:A(o.fac_id)??null,note:null});else p&&p.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:V,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 mn(n){const e=q(n.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:`${b(e.pct_buildings)??0}%`,subhead:"building-footprint coverage in chip",sub:`${b(e.n_building_components)??0} distinct components · test mIoU 0.5511`,illustrative:!0,docId:"tm_buildings",citeId:"tm_buildings",mapLayer:"buildings"}:null}function fn(n){const e=q(n.floodnet);if(!e||(b(e.n_sensors)??0)<=0)return null;const t=b(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:`${b(e.n_sensors)??0} sensors · last 3 y`,spark:Array.from({length:24},(r,l)=>Math.max(0,Math.round(t/24*1.4*Math.exp(-Math.pow((l-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 _n(n){var y;const e=q(n.nyc311);if(!e)return null;const t=b(e.n)??0;if(t<=0)return null;const r=q(e.by_year),l=q(e.by_descriptor),p=r?Object.values(r).map(m=>b(m)??0):Array.from({length:12},()=>Math.round(t/12)),o=l?(y=Object.entries(l).sort((m,s)=>(b(s[1])??0)-(b(m[1])??0))[0])==null?void 0:y[0]:null;return{id:"fsm-311",stone:"touchstone",tier:"proxy",variant:"histogram",source:"NYC 311",agency:"NYC 311 service requests (Socrata erm2-nwe9)",vintage:V,title:"Recent 311 flood complaints",headline:`${t} calls`,subhead:o?`top descriptor: ${o}`:"all flood-related descriptors",histogram:p,sparkSub:`Within ${b(e.radius_m)??200} m · ${b(e.years)??5} y window. Filtered to flood-relevant descriptors.`,docId:"nyc311",citeId:"nyc311",mapLayer:"complaints"}}function hn(n){var r;const e=q(n.nws_obs);if(!e||e.error||e.station_id==null)return null;const t=[];return b(e.precip_last_hour_mm)!=null&&t.push({value:`${e.precip_last_hour_mm} mm`,label:"precip · 1h"}),b(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 ${A(e.station_id)??"?"}`,vintage:((r=A(e.obs_time))==null?void 0:r.slice(0,10))??V,title:"Recent precipitation",scalars:t,sub:`Nearest hourly METAR: ${A(e.station_name)??"?"} (${b(e.distance_km)??"?"} km).`,docId:"nws_obs",citeId:"nws_obs",mapLayer:"nws"}:null}function vn(n){var r;const e=q(n.noaa_tides);if(!e||e.error||b(e.observed_ft_mllw)==null)return null;const t=[{value:`${e.observed_ft_mllw} ft`,label:"observed (MLLW)"}];return b(e.predicted_ft_mllw)!=null&&t.push({value:`${e.predicted_ft_mllw} ft`,label:"predicted"}),b(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 ${A(e.station_name)??A(e.station_id)??"?"}`,vintage:((r=A(e.obs_time))==null?void 0:r.slice(0,10))??V,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 gn(n){var t;const e=q(n.prithvi_live);return e!=null&&e.ok?{id:"fsm-prithvi-live",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC v2",agency:"msradam/Prithvi-EO-2.0-NYC-Pluvial · v2 fine-tune",vintage:((t=A(e.item_datetime))==null?void 0:t.slice(0,10))??V,title:"Live Sentinel-2 pluvial flood prediction",rasterKind:"prithvi",headline:`${b(e.pct_water_within_500m)??0}%`,subhead:`water within 500 m · cloud ${b(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"}:null}function yn(n){const e=q(n.terramind_lulc);return e!=null&&e.ok?{id:"fsm-tm-lulc",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"TerraMind-NYC",agency:"msradam/TerraMind-NYC-Adapters · LULC LoRA",vintage:"2026",title:"Land-cover (current Sentinel-2 chip)",rasterKind:"lulc",headline:A(e.dominant_class)??"dominant class",subhead:`${b(e.dominant_pct)??0}% of chip`,sub:"Test mIoU 0.5866 on held-out NYC chips.",illustrative:!0,docId:"tm_lulc",citeId:"tm_lulc",mapLayer:"lulc"}:null}function bn(n){const e=q(n.ttm_forecast);if(!(e!=null&&e.available)||!e.interesting)return null;const t=b(e.forecast_peak_ft),r=b(e.forecast_peak_minutes_ahead);return t==null||r==null?null:{id:"fsm-ttm-fc",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2",agency:"IBM Granite TimeSeries TTM r2 · zero-shot Battery surge",vintage:V,title:"Surge nowcast at the Battery — 9.6 h horizon",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:`${t} ft @ +${Math.round(r/60)}h`},headline:`${t} ft`,subhead:"peak surge residual",sub:"Zero-shot 6-min cadence. Distinct from the fine-tuned Battery surge nowcast.",spatialNote:"regional · Battery, not point-of-query",docId:"ttm_forecast",citeId:"ttm_forecast"}}function wn(n){const e=q(n.ttm_battery_surge);if(!(e!=null&&e.available)||!e.interesting)return null;const t=b(e.forecast_peak_m),r=b(e.forecast_peak_hours_ahead);return t==null||r==null?null:{id:"fsm-ttm-batt",stone:"lodestone",tier:"modeled",variant:"timeseries",source:"Granite TTM r2 · NYC fine-tune",agency:"msradam/Granite-TTM-r2-Battery-Surge · 96 h horizon",vintage:V,title:"Battery storm-surge nowcast (96 h)",timeseries:{hours:96,peak:{x:r,y:Math.round(t*100)},peakLabel:`${(t*100).toFixed(0)} cm @ +${r}h`},headline:`${(t*100).toFixed(0)} cm`,subhead:`peak surge · +${r}h ahead`,sub:"Test MAE 0.1091 m, −41% vs persistence. Hourly cadence; applies city-wide via NOAA station 8518750.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery",citeId:"ttm_battery"}}function xn(n){const e=q(n.nws_alerts);if(!e)return null;const t=b(e.n_active)??0;if(t<=0)return null;const r=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:V,title:`${t} active flood-relevant alert${t===1?"":"s"}`,columns:["event","severity","expires"],rows:r.slice(0,4).map(l=>[A(l.event)??"?",A(l.severity)??"?",(A(l.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 kn(n,e){var y,m,s;const t=n.mellea,r=((y=t==null?void 0:t.passed)==null?void 0:y.length)??0,l=((m=t==null?void 0:t.failed)==null?void 0:m.length)??0,p=r+l,o=(t==null?void 0:t.attempts)??0;return{id:"fsm-capstone-meta",stone:"capstone",tier:"modeled",variant:"meta",source:"Mellea",agency:"Capstone synthesis · Granite 4.1 + Mellea grounding check",vintage:V,title:"Briefing reconciliation",metaRows:[{k:"Mellea reroll",v:`${o} attempt${o===1?"":"s"}`},{k:"Grounding checks",v:`${r} / ${p||4} passed`},{k:"Citations resolved",v:`${((s=n.citations)==null?void 0:s.length)??0}`},{k:"Wall-clock",v:e!=null?`${e.toFixed(1)} s`:"—"}],sub:"Capstone produces prose, not cards. This meta-card summarises the reconciler chain that wrote the briefing above.",docId:"capstone"}}function Sn(n,e,t){const r=n,l=q(r.geocode);return{cards:[on(r,l),ln(r),cn(r),dn(r),un(r),pn(r),mn(r),fn(r),_n(r),hn(r),vn(r),gn(r),yn(r),xn(r),bn(r),wn(r),kn(n,t)].filter(o=>o!=null),stones:sn(e),wallSeconds:t}}const ye={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"},be={subway:"subway entrances",nycha:"NYCHA developments",school:"public schools",hospital:"hospitals"};function we(n){return!n||!Number.isFinite(n)?"—":`${Math.round(n)}m`}function xe(n){return n==null||!Number.isFinite(n)?"—":`${(n*3.28084).toFixed(1)} ft`}function ke(n,e){return typeof e=="number"?e>=.5?`Inundated 2012 (${Math.round(e*100)}%)`:e>0?`Edge (${Math.round(e*100)}%)`:"—":n?"Inundated 2012":"—"}function Se(n,e,t){return typeof t=="number"?t>=.5?`≥${Math.round(t*100)}% in scenario`:t>0?`${Math.round(t*100)}% edge`:"minimal":n&&n.length?n:e&&e>0?`class ${e}`:"minimal"}function $n(n){return n?/elevator|easement|stair.*ramp/i.test(n):!1}function Nn(n){if(!n.available)return null;const t=(n.entrances??[]).map(r=>{const l=$n(r.entrance_type);return{name:`${r.station_name??"?"}${r.daytime_routes?` (${String(r.daytime_routes).split(/\s+/).slice(0,3).join("/")})`:""}`,elev:xe(r.elev_m),ada:l,fema:"Zone X",sandy:ke(r.inside_sandy_2012),dep:Se(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"subway",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}});return{type:be.subway,radius:we(n.radius_m),count:n.n_entrances??t.length,rows:t,sourceLabel:ye.subway}}function An(n){if(!n.available)return null;const t=(n.developments??[]).map(r=>{const l=r.pct_inside_sandy_2012,p=r.pct_in_dep_extreme_2080;return{name:`${r.development??"?"}${r.borough?` · ${r.borough}`:""}`,elev:xe(r.rep_elevation_m),ada:!1,fema:"—",sandy:ke(void 0,l),dep:Se(void 0,void 0,p),asset:"nycha",primaryTier:l&&l>0?"empirical":"modeled"}});return{type:be.nycha,radius:we(n.radius_m),count:n.n_developments??t.length,rows:t,sourceLabel:ye.nycha}}function In(n){if(!n.available)return null;const t=(n.schools??[]).map(r=>({name:`${r.school_name??r.name??"?"}${r.borough?` · ${r.borough}`:""}`,elev:xe(r.elev_m),ada:!1,fema:"—",sandy:ke(r.inside_sandy_2012),dep:Se(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"school",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}));return{type:be.school,radius:we(n.radius_m),count:n.n_schools??t.length,rows:t,sourceLabel:ye.school}}function Tn(n){if(!n.available)return null;const t=(n.hospitals??[]).map(r=>({name:`${r.facility_name??r.name??"?"}${r.borough?` · ${r.borough}`:""}`,elev:xe(r.elev_m),ada:!0,fema:"—",sandy:ke(r.inside_sandy_2012),dep:Se(r.dep_extreme_2080_label,r.dep_extreme_2080_class),asset:"hospital",primaryTier:r.inside_sandy_2012?"empirical":"modeled"}));return{type:be.hospital,radius:we(n.radius_m),count:n.n_hospitals??t.length,rows:t,sourceLabel:ye.hospital}}function Cn(n){if(!n)return[];const e=[],t=Nn(n.mta_entrances??{});t&&t.rows.length&&e.push(t);const r=An(n.nycha_developments??{});r&&r.rows.length&&e.push(r);const l=In(n.doe_schools??{});l&&l.rows.length&&e.push(l);const p=Tn(n.doh_hospitals??{});return p&&p.rows.length&&e.push(p),e}function Mn(n,e){const t=`/api/agent/stream?q=${encodeURIComponent(n)}`,r=new EventSource(t);let l="",p;const o=/([.?!])(\s|$)/;function y(s=!1){var h,E;let c;for(;c=o.exec(l);){const Y=c.index+c[1].length+(c[2]?c[2].length:0),j=l.slice(0,Y).trim();l=l.slice(Y),j&&((h=e.onSentence)==null||h.call(e,j,p))}s&&l.trim()&&((E=e.onSentence)==null||E.call(e,l.trim(),p),l="")}function m(s,c){r.addEventListener(s,h=>{try{c(JSON.parse(h.data))}catch{}})}return m("hello",s=>{var c;return(c=e.onHello)==null?void 0:c.call(e,s.query)}),m("plan_token",s=>{var c;return(c=e.onPlanToken)==null?void 0:c.call(e,s.delta)}),m("plan",s=>{var c;return(c=e.onPlan)==null?void 0:c.call(e,s)}),m("step",s=>{var c;return(c=e.onStep)==null?void 0:c.call(e,s)}),m("token",s=>{var c,h;s.attempt!==p&&(p=s.attempt,l="",(c=e.onAttemptStart)==null||c.call(e,s.attempt??1)),(h=e.onToken)==null||h.call(e,s.delta,s.attempt),l+=s.delta,y(!1)}),m("mellea_attempt",s=>{var c;return(c=e.onMelleaAttempt)==null?void 0:c.call(e,s)}),m("final",s=>{var c;y(!0),(c=e.onFinal)==null||c.call(e,s)}),m("error",s=>{var c;return(c=e.onError)==null?void 0:c.call(e,s.err)}),r.addEventListener("done",()=>{var s;y(!0),(s=e.onDone)==null||s.call(e),r.close()}),r.addEventListener("error",()=>{var s;y(!0),(s=e.onError)==null||s.call(e,"SSE connection error"),r.close()}),{close:()=>r.close()}}const dt=[{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 et(n){const e=n.toLowerCase().replace(/[.:]+\s*$/,"").trim();return dt.find(t=>t.aliases.includes(e))}const tt=/(^|\n)\s*(?:\*\*([A-Z][A-Za-z\s/]+?)\.\s*\*\*|#{1,3}\s*(0[1-4])\s*[:\-—.]?\s*([^\n]+))/g;function ut(n,e,t){return{id:e,n,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 qn=/\[([a-z][a-z0-9_]*(?:\s*,\s*[a-z][a-z0-9_]*)*)\]/gi;function nt(n){return n.split(new RegExp("(?<=[.!?])\\s+(?=[A-Z(])","g")).filter(t=>t.trim().length>0)}function rt(n,e,t){let r=0;const l=[],p=[...n.matchAll(qn)];if(p.length===0)return[{text:n}];for(const o of p){const y=n.slice(r,o.index??0),m=o[1].split(/\s*,\s*/).filter(Boolean);r=(o.index??0)+o[0].length;const s=ot(m[0]);l.push({text:y,tier:s,cite:m[0]});for(const c of m)e[c]||(e[c]=t(c))}if(r<n.length){const o=n.slice(r);o.trim()&&l.push({text:o})}return l}function Fn(n,e={}){const t={...e};let r=Object.values(t).reduce((s,c)=>Math.max(s,c.n),0)+1;const l=new Set,p=s=>(e[s]||l.add(s),ut(r++,s)),o=[],y=[];let m;for(tt.lastIndex=0;m=tt.exec(n);)if(m[2]!==void 0){const s=et(m[2]);if(!s)continue;y.push({num:s.n,label:s.label,tier:s.tier,start:m.index+m[1].length,bodyStart:m.index+m[0].length})}else if(m[3]!==void 0){const s=m[3],c=(m[4]??"").trim(),h=dt.find(E=>E.n===s)??et(c);y.push({num:s,label:(h==null?void 0:h.label)??c,tier:h==null?void 0:h.tier,titleExtra:h&&c.toLowerCase()!==h.label.toLowerCase()?c:void 0,start:m.index+m[1].length,bodyStart:m.index+m[0].length})}for(let s=0;s<y.length;s++){const c=y[s],h=y[s+1],E=n.slice(c.bodyStart,h?h.start:n.length).trim();if(E){o.push({kind:"head",n:c.num,label:c.label,tier:c.tier,title:c.titleExtra});for(const Y of E.split(/\n\s*\n/)){const j=Y.replace(/\s+/g," ").trim();if(!j)continue;const G=nt(j),F=[];for(const R of G)F.push(...rt(R,t,p)),F.push({text:" "});for(;F.length&&F[F.length-1].text.trim()===""&&!F[F.length-1].tier;)F.pop();F.length&&o.push({kind:"prose",parts:F})}}}if(o.length===0&&n.trim()){o.push({kind:"head",n:"01",label:"Status"});const s=n.replace(/\s+/g," ").trim(),c=nt(s),h=[];for(const E of c)h.push(...rt(E,t,p)),h.push({text:" "});for(;h.length&&h[h.length-1].text.trim()===""&&!h[h.length-1].tier;)h.pop();h.length&&o.push({kind:"prose",parts:h})}return{blocks:o,citations:t,unresolvedDocIds:[...l]}}const se={type:"FeatureCollection",features:[]};async function oe(n){try{const e=await fetch(n);if(!e.ok)return se;const t=await e.json();return!t||t.type!=="FeatureCollection"?se:t}catch{return se}}async function Ln(n,e,t=1500){return oe(`/api/layers/sandy?lat=${n}&lon=${e}&r=${t}`)}async function En(n,e,t=1500){return oe(`/api/layers/dep_extreme_2080?lat=${n}&lon=${e}&r=${t}`)}async function it(n,e,t=1500){return oe(`/api/layers/prithvi_water?lat=${n}&lon=${e}&r=${t}`)}async function jn(n){return oe(`/api/layers/sandy_clipped?code=${encodeURIComponent(n)}`)}async function Pn(n,e="dep_extreme_2080"){return oe(`/api/layers/dep_clipped?code=${encodeURIComponent(n)}&scenario=${e}`)}async function at(n,e,t=1500){try{const r=await fetch(`/api/floodnet_near?lat=${n}&lon=${e}&r=${t}`);return r.ok?{type:"FeatureCollection",features:(await r.json()).features.map(o=>{const y=o.properties??{};return{...o,properties:{...y,count:typeof y.n_events_3y=="number"?y.n_events_3y:1}}})}:se}catch{return se}}var On=L('<span class="region-head-meta svelte-1q8jizq"> <!></span>'),Dn=L('<span class="region-head-meta svelte-1q8jizq">planning…</span>'),zn=L('<div class="reroll-prev svelte-1q8jizq" aria-hidden="true"><p class="reroll-prev-line svelte-1q8jizq"> </p></div>'),Yn=L("<!> <!>",1),Rn=L('<span class="streaming-caret svelte-1q8jizq" aria-hidden="true">▍</span>'),Bn=L("<!> <!>",1),Hn=L('<details class="plan-details svelte-1q8jizq"><summary class="svelte-1q8jizq"> </summary> <pre class="plan-stream svelte-1q8jizq"> </pre></details>'),Gn=L('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Planning intent… <!></div>'),Un=L('<div class="generating-status svelte-1q8jizq" aria-live="polite"><span class="pulse svelte-1q8jizq"></span> Resolving address…</div>'),Wn=L("<!> <!>",1),Kn=L('<span class="region-head-meta svelte-1q8jizq"> </span>'),Zn=L('<span class="region-head-meta svelte-1q8jizq">awaiting geocode…</span>'),Jn=L('<div style="position: relative; flex: 1; min-height: 0;" class="svelte-1q8jizq"><!> <!></div>'),Vn=L('<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 lr(n,e){Ft(e,!0);let t=Q(()=>jt.params.queryId??""),r=Q(()=>()=>{try{return decodeURIComponent(a(t))}catch{return a(t)}}),l=N(null),p=N(""),o=N(""),y=N(null),m=N(!1),s=N(0),c=2,h=N(!1),E=N(!1),Y=N(""),j=N(null),G=N(ie([])),F=Q(()=>{var d,i,f,u;return{empirical:((d=a(ue))==null?void 0:d.features.length)??0,modeled:((i=a(pe))==null?void 0:i.features.length)??0,synthetic:((f=a(me))==null?void 0:f.features.length)??0,proxy:((u=a(fe))==null?void 0:u.features.length)??0}}),R=N(ie({id:"root",name:"briefing.run",status:"ok",ms:0,tier:null,children:[]})),ee=N(null),$e="comfortable",Ne="smart",le=N(!1);Pe(()=>{typeof window<"u"&&_(le,new URL(window.location.href).searchParams.get("grammar")==="1")});let U=N(null),P=N(void 0),te=Q(()=>a(y)?Sn(a(y),a(R),a(P)):{cards:[],stones:[],wallSeconds:a(P)});function Ae(d){_(ee,d,!0)}function ce(d){const i=document.getElementById("region-cites");i&&i.scrollIntoView({behavior:"smooth",block:"start"})}const Ye=new Set(["ttm_forecast","ttm_311_forecast","floodnet_forecast"]),Ie="group-ttm-r2";function pt(d,i,f,u){if(u==="error")return f??void 0;if(u==="silent")return f??"no data";if(i==null||typeof i!="object")return;const I=i,v={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_majority_inside_sandy_2012"],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"]}[d],C=[];if(v){for(const T of v)if(I[T]!==void 0&&C.push(Be(T,I[T])),C.length>=3)break}else for(const[T,g]of Object.entries(I))if(g!==null&&typeof g!="object"&&(C.push(Be(T,g)),C.length>=2))break;return C.join(" · ")||void 0}function mt(d){const i=[],f=d.mta_entrances;if(f&&Array.isArray(f.entrances))for(const v of f.entrances){const C=Number(v.entrance_lat),T=Number(v.entrance_lon);!Number.isFinite(C)||!Number.isFinite(T)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[T,C]},properties:{kind:"subway",name:`${v.station_name??"?"} (${v.daytime_routes??"?"})`,doc_id:`mta_entrance_${v.station_id??""}`,inside_sandy_2012:v.inside_sandy_2012===!0}})}const u=d.doe_schools;if(u&&Array.isArray(u.schools))for(const v of u.schools){const C=Number(v.school_lat),T=Number(v.school_lon);!Number.isFinite(C)||!Number.isFinite(T)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[T,C]},properties:{kind:"school",name:String(v.loc_name??v.school_name??"?"),doc_id:`doe_school_${v.loc_code??""}`,inside_sandy_2012:v.inside_sandy_2012===!0}})}const I=d.nycha_developments;if(I&&Array.isArray(I.developments))for(const v of I.developments){const C=Number(v.centroid_lat),T=Number(v.centroid_lon);if(!Number.isFinite(C)||!Number.isFinite(T))continue;const g=Number(v.pct_inside_sandy_2012??0);i.push({type:"Feature",geometry:{type:"Point",coordinates:[T,C]},properties:{kind:"nycha",name:String(v.development??"?"),doc_id:`nycha_dev_${v.tds_num??""}`,inside_sandy_2012:g>=50,pct_inside_sandy:g}})}const k=d.doh_hospitals;if(k&&Array.isArray(k.hospitals))for(const v of k.hospitals){const C=Number(v.hospital_lat),T=Number(v.hospital_lon);!Number.isFinite(C)||!Number.isFinite(T)||i.push({type:"Feature",geometry:{type:"Point",coordinates:[T,C]},properties:{kind:"hospital",name:String(v.facility_name??"?"),doc_id:`nyc_hospital_${v.fac_id??""}`,inside_sandy_2012:v.inside_sandy_2012===!0}})}return{type:"FeatureCollection",features:i}}function ft(d){return{type:"FeatureCollection",features:[]}}function Re(d){return 1+(d.children??[]).reduce((f,u)=>f+Re(u),0)}function Be(d,i){if(typeof i=="number"){const f=Number.isInteger(i)?`${i}`:i.toFixed(2);return`${d}=${f}`}if(typeof i=="boolean")return`${d}=${i}`;if(typeof i=="string"){const f=i.length>24?i.slice(0,22)+"…":i;return`${d}=${f}`}return d}let ne=N(ie({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),K=N(null),de=N(null),He=N(void 0),Ge=N(void 0),ue=N(void 0),pe=N(void 0),me=N(void 0),fe=N(void 0),X=N(ie([])),re=N(ie({})),_e=[];function _t(){var I;if(!a(o)){_(X,[],!0),_(re,{},!0),_e=[];return}const d={};(I=a(y))!=null&&I.citations&&a(y).citations.forEach((k,v)=>{d[k.doc_id]=ut(v+1,k.doc_id,{source:k.source,title:k.title,url:k.url,vintage:k.vintage})});const i=Fn(a(o),d),f={};let u=1;for(const k of _e){const v=i.citations[k];v&&(f[k]={...v,n:u++})}for(const[k,v]of Object.entries(i.citations))f[k]||(f[k]={...v,n:u++},_e.push(k));_(X,i.blocks,!0),_(re,f,!0)}Pe(()=>{a(o),a(y),_t()}),Pe(()=>{if(!a(K))return;const{lat:d,lon:i,source:f}=a(K);f==="nta"&&a(de)?(jn(a(de)).then(u=>_(ue,u,!0)),Pn(a(de)).then(u=>_(pe,u,!0)),it(d,i,2500).then(u=>_(me,u,!0)),at(d,i,3e3).then(u=>_(fe,u,!0))):(Ln(d,i).then(u=>_(ue,u,!0)),En(d,i).then(u=>_(pe,u,!0)),it(d,i).then(u=>_(me,u,!0)),at(d,i).then(u=>_(fe,u,!0)))}),Lt(()=>{if(Qe.reset(),!a(r)())return;_(U,Date.now(),!0);const d=Mn(a(r)(),{onPlanToken:i=>_(p,a(p)+i),onPlan:i=>_(l,i,!0),onStep:i=>{if(i.step==="geocode")if(i.ok&&i.result&&typeof i.result=="object"){const g=i.result;if(typeof g.lat=="number"&&typeof g.lon=="number"){const $=typeof g.address=="string"?g.address:a(r)();_(K,{label:$,lat:g.lat,lon:g.lon,source:"geocode"},!0),_(E,!0)}}else _(j,"geocoder");if(i.step==="nta_resolve"&&i.ok&&i.result&&typeof i.result=="object"){const g=i.result,$=Array.isArray(g.bbox)?g.bbox:null,O=typeof g.nta_code=="string"?g.nta_code:null;if($&&$.length===4&&O){_(de,O,!0);const Z=($[0]+$[2])/2,D=($[1]+$[3])/2,B=typeof g.nta_name=="string"?g.nta_name:a(r)();_(K,{label:B,lat:D,lon:Z,source:"nta"},!0)}}const f=Pt(i.step),u=i.ok?i.result==null&&i.err==null?"silent":"ok":"error",I=Math.round((i.elapsed_s??0)*1e3),k=i.result!=null?i.result:i.err??null,v=pt(i.step,i.result,i.err,u),C={id:`step-${Re(a(R))}`,name:i.step,status:u,ms:I,tier:f,note:v,output:k,error:u==="error"?i.err??"unknown error":void 0,model:Ye.has(i.step)?"granite-timeseries-ttm-r2":void 0},T={...a(R),ms:(a(R).ms??0)+I};if(Ye.has(i.step)){const g=[...T.children??[]];let $=g.find(D=>D.id===Ie);$||($={id:Ie,name:"forecasting.granite-timeseries-ttm-r2",status:"fan",ms:0,tier:"modeled",note:"1 instance",model:"granite-timeseries-ttm-r2",children:[]},g.push($));const O=[...$.children??[],C],Z={...$,ms:($.ms??0)+I,note:`${O.length} instance${O.length===1?"":"s"}`,children:O};_(R,{...T,children:g.map(D=>D.id===Ie?Z:D)},!0)}else _(R,{...T,children:[...T.children??[],C]},!0)},onAttemptStart:i=>{_(s,i,!0),i>1&&(_(Y,a(o),!0),_(o,""),_e=[])},onToken:i=>{a(h)||(_(h,!0),a(s)===0&&_(s,1)),_(o,a(o)+i)},onMelleaAttempt:i=>{i.attempt>0&&_(s,i.attempt,!0)},onFinal:i=>{_(y,i,!0),i.paragraph&&_(o,i.paragraph,!0),_(G,Cn(i),!0),_(He,mt(i),!0),_(Ge,ft(),!0);const u=i.mellea;u&&u.failed&&u.failed.length>0&&u.attempts&&u.attempts>=c&&_(j,"grounding")},onError:i=>{const f=i.toLowerCase();(f.includes("connection")||f.includes("502")||f.includes("503")||f.includes("timeout")||f.includes("routing"))&&_(j,"backend")},onDone:()=>{var i,f,u,I,k;_(m,!0),a(U)!=null&&_(P,(Date.now()-a(U))/1e3),!a(h)&&!a(j)&&a(E)&&_(j,"all-silent"),!a(j)&&a(X).length>0&&(Gt({queryId:a(t),queryText:a(r)(),intent:((i=a(l))==null?void 0:i.intent)??null,specialists:((u=(f=a(l))==null?void 0:f.specialists)==null?void 0:u.length)??0,blocks:a(X),citations:a(re),generatedAt:new Date().toISOString(),attempts:((k=(I=a(y))==null?void 0:I.mellea)==null?void 0:k.attempts)??a(s)}),Qe.markReady())}});return()=>d.close()});var Te=Vn(),Ue=x(Te),Ce=x(Ue),Me=x(Ce),qe=x(Me),ht=S(x(qe),2);{var vt=d=>{var i=On(),f=x(i),u=S(f);{var I=k=>{var v=qt("· ✓ done");M(k,v)};H(u,k=>{a(m)&&k(I)})}w(i),W(()=>{var k;return z(f,`intent: ${a(l).intent??""} · ${((k=a(l).specialists)==null?void 0:k.length)??0??""} specialists · attempt ${a(s)??""} `)}),M(d,i)},gt=d=>{var i=Dn();M(d,i)};H(ht,d=>{a(l)?d(vt):d(gt,-1)})}w(qe);var Fe=S(qe,2),We=S(x(Fe)),yt=x(We,!0);w(We),w(Fe);var bt=S(Fe,2);{var wt=d=>{nn(d,{get state(){return a(j)}})},xt=d=>{var i=Wn(),f=ge(i);{var u=g=>{var $=Yn(),O=ge($);Xt(O,{get attempt(){return a(s)},max:c});var Z=S(O,2);{var D=B=>{var J=zn(),he=x(J),ve=x(he);w(he),w(J),W(je=>z(ve,`${je??""}…`),[()=>a(Y).slice(0,360)]),M(B,J)};H(Z,B=>{a(Y)&&B(D)})}M(g,$)};H(f,g=>{a(s)>1&&g(u)})}var I=S(f,2);{var k=g=>{var $=Bn(),O=ge($);Ot(O,{get blocks(){return a(X)},get citations(){return a(re)},streaming:!1});var Z=S(O,2);{var D=B=>{var J=Rn();M(B,J)};H(Z,B=>{a(m)||B(D)})}M(g,$)},v=g=>{Jt(g)},C=g=>{var $=Gn(),O=S(x($),2);{var Z=D=>{var B=Hn(),J=x(B),he=x(J);w(J);var ve=S(J,2),je=x(ve,!0);w(ve),w(B),W(()=>{z(he,`Planner streaming (${a(p).length??""} chars)`),z(je,a(p))}),M(D,B)};H(O,D=>{a(p)&&D(Z)})}w($),M(g,$)},T=g=>{var $=Un();M(g,$)};H(I,g=>{a(X).length?g(k):a(E)&&!a(h)?g(v,1):a(l)?g(T,-1):g(C,2)})}M(d,i)};H(bt,d=>{a(j)?d(wt):d(xt,-1)})}w(Me);var Ke=S(Me,2),Le=x(Ke),Ee=x(Le),kt=S(x(Ee),2);{var St=d=>{var i=Kn(),f=x(i);w(i),W((u,I)=>z(f,`Carto Positron · z15 · ${u??""}°N ${I??""}°W`),[()=>a(K).lat.toFixed(4),()=>Math.abs(a(K).lon).toFixed(4)]),M(d,i)},$t=d=>{var i=Zn();M(d,i)};H(kt,d=>{a(K)?d(St):d($t,-1)})}w(Ee);var Nt=S(Ee,2);{var At=d=>{var i=Jn(),f=x(i);Yt(f,{get address(){return a(K)},get activeLayers(){return a(ne)},get sandyEmpirical(){return a(ue)},get depModeled(){return a(pe)},get syntheticPrior(){return a(me)},get proxy311(){return a(fe)},get registerPoints(){return a(He)},get registerPolygons(){return a(Ge)}});var u=S(f,2);Rt(u,{get active(){return a(ne)},get featureCounts(){return a(F)},onToggle:I=>_(ne,{...a(ne),[I]:!a(ne)[I]},!0)}),w(i),M(d,i)};H(Nt,d=>{a(K)&&d(At)})}w(Le);var Ze=S(Le,2),It=x(Ze);Dt(It,{get citations(){return a(re)}}),w(Ze),w(Ke),w(Ce);var Je=S(Ce,2),Ve=x(Je),Tt=x(Ve);zt(Tt,{get data(){return a(te)},density:$e,provenanceMode:Ne,get showGrammar(){return a(le)},get linkedKey(){return a(ee)},onLink:Ae,onCite:ce}),w(Ve),w(Je),w(Ue),w(Te),W(d=>z(yt,d),[()=>a(r)()]),M(n,Te),Et()}export{lr as component,or as universal};
|
|
|
|
|
|
|
@@ -1 +1 @@
|
|
| 1 |
-
import{d as V,b as U,a as j,f as q,s as z}from"../chunks/Dlpu43Tj.js";import{p as Z,K as Q,l as s,j as d,L as J,G as X,t as $,a as ee,s as i,c as e,k as a,r as t,J as te}from"../chunks/DwbuJhNu.js";import{B as ie}from"../chunks/CtphE0zf.js";import{R as ae,M as re,C as oe,F as ne}from"../chunks/TTdyitJv.js";import{p as se,b as R}from"../chunks/DNaFzQeI.js";const de=!0,ve=Object.freeze(Object.defineProperty({__proto__:null,prerender:de},Symbol.toStringTag,{value:"Module"})),E="80 Pioneer Street · Red Hook · Brooklyn",v={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"}},M=[{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:"."}]}],le={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",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC",agency:"Prithvi-NYC-Pluvial v2 · IBM/NASA × Riprap",vintage:"2026-05-02",title:"Pluvial flood prediction, current Sentinel-2 chip",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"},{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",agency:"IBM Granite-TimeSeries · Riprap fine-tune",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery, 96-hour horizon",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:"+47 cm @ +38h"},headline:"+47 cm",subhead:"peak surge residual · Wed 04:00 ET",sub:"Nowcast applies city-wide via NOAA station 8518750. Not localized to query address. Residual above harmonic tide.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_v2",citeId:"c-ttm",mapLayer:null},{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 attempt"},{k:"Grounding checks",v:"4 / 4 passed"},{k:"Citations resolved",v:"11 / 11"},{k:"RAG → GLiNER",v:"9 entities · 0 unresolved"}],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:"pull FEMA NFHL panel 36047C0207G",status:"ok",tier:"modeled",ms:412},{id:"CORN-002",name:"parse panel index for AE / VE bands",status:"ok",tier:"modeled",ms:88},{id:"CORN-003",name:"USGS STN: post-Sandy HWM survey within 500 ft",status:"ok",tier:"empirical",ms:612},{id:"CORN-004",name:"NYC DEP stormwater flood map 2024",status:"ok",tier:"modeled",ms:980},{id:"CORN-005",name:"microtopo: 3DEP DEM + HAND + TWI",status:"ok",tier:"proxy",ms:1240}]},{key:"keystone",members:[{id:"KEY-001",name:"MTA subway entrance proximity",status:"ok",tier:"empirical",ms:220},{id:"KEY-002",name:"NYCHA developments in 1 mi",status:"ok",tier:"empirical",ms:410},{id:"KEY-003",name:"DOE schools in 1 mi",status:"ok",tier:"empirical",ms:360},{id:"KEY-004",name:"NYS DOH hospitals in 1 mi",status:"silent",tier:"empirical",ms:95,note:"no acute-care within 1 mi"},{id:"KEY-005",name:"PLUTO BBL fetch",status:"ok",tier:"empirical",ms:130}]},{key:"touchstone",members:[{id:"TCH-001",name:"FloodNet sensor lookup",status:"ok",tier:"empirical",ms:285},{id:"TCH-002",name:"NYC 311 flood complaints",status:"ok",tier:"proxy",ms:410},{id:"TCH-003",name:"NWS station KNYC observation",status:"ok",tier:"empirical",ms:240},{id:"TCH-004",name:"NOAA tide gauge water level",status:"ok",tier:"empirical",ms:196},{id:"TCH-005",name:"Prithvi-EO 2.0 NYC-Pluvial v2",status:"ok",tier:"modeled",ms:4920}]},{key:"lodestone",members:[{id:"LOD-001",name:"Granite TTM r2 surge fine-tune",status:"ok",tier:"modeled",ms:1820},{id:"LOD-002",name:"NPCC4 SLR projection table",status:"ok",tier:"modeled",ms:38},{id:"LOD-003",name:"NWS active flood alerts",status:"silent",tier:"modeled",ms:110}]},{key:"capstone",members:[{id:"CAP-001",name:"Granite Embedding RAG retrieval",status:"ok",tier:"proxy",ms:410},{id:"CAP-002",name:"GLiNER typed extraction",status:"ok",tier:"proxy",ms:280},{id:"CAP-003",name:"Granite 4.1 reconcile (Mellea)",status:"ok",tier:"modeled",ms:6240}]}]};var ce=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(F,x){Z(x,!0);let y=d(null),Y="comfortable",T="smart",f=d(!1);Q(()=>{typeof window<"u"&&s(f,new URL(window.location.href).searchParams.get("grammar")==="1")});function H(n){s(y,n,!0)}function B(n){const o=document.getElementById("region-cites");o&&o.scrollIntoView({behavior:"smooth",block:"start"})}let r=d(J({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),l=d(0);X(()=>(se({queryId:"sample",queryText:E,intent:"single_address",specialists:9,blocks:M,citations:v,generatedAt:new Date().toISOString(),attempts:1}),R.markReady(),()=>R.reset()));const L={label:"80 Pioneer St",lat:40.6776,lon:-74.0096},b={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 c=ce(),N=e(c),m=e(N),p=e(m),u=e(p),D=i(e(u),2);t(u);var g=i(u,2),C=i(e(g)),O=e(C,!0);t(C),t(g);var G=i(g,2);ie(G,{get blocks(){return M},get citations(){return v},streaming:!0,get replayKey(){return a(l)}}),t(p);var k=i(p,2),h=e(k),S=i(e(h),2),w=e(S);ae(w,{get address(){return L},get activeLayers(){return a(r)},get syntheticPrior(){return b}});var _=i(w,2);{let n=te(()=>({empirical:0,modeled:0,synthetic:b.features.length,proxy:0}));re(_,{get active(){return a(r)},get featureCounts(){return a(n)},onToggle:o=>s(r,{...a(r),[o]:!a(r)[o]},!0)})}t(S),t(h);var I=i(h,2),K=e(I);oe(K,{get citations(){return v}}),t(I),t(k),t(m);var P=i(m,2),A=e(P),W=e(A);ne(W,{get data(){return le},density:Y,provenanceMode:T,get showGrammar(){return a(f)},get linkedKey(){return a(y)},onLink:H,onCite:B}),t(A),t(P),t(N),t(c),$(()=>z(O,E)),U("click",D,()=>s(l,a(l)+1)),j(F,c),ee()}V(["click"]);export{ye as component,ve as universal};
|
|
|
|
| 1 |
+
import{d as V,b as U,a as j,f as q,s as z}from"../chunks/Dlpu43Tj.js";import{p as Z,K as Q,l as s,j as d,L as J,G as X,t as $,a as ee,s as i,c as e,k as a,r as t,J as te}from"../chunks/DwbuJhNu.js";import{B as ie}from"../chunks/Cl16PtNL.js";import{R as ae,M as re,C as oe,F as ne}from"../chunks/CAli5X_k.js";import{p as se,b as R}from"../chunks/DNaFzQeI.js";const de=!0,ve=Object.freeze(Object.defineProperty({__proto__:null,prerender:de},Symbol.toStringTag,{value:"Module"})),E="80 Pioneer Street · Red Hook · Brooklyn",v={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"}},M=[{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:"."}]}],le={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",stone:"touchstone",tier:"modeled",variant:"raster-pred",source:"Prithvi-NYC",agency:"Prithvi-NYC-Pluvial v2 · IBM/NASA × Riprap",vintage:"2026-05-02",title:"Pluvial flood prediction, current Sentinel-2 chip",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"},{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",agency:"IBM Granite-TimeSeries · Riprap fine-tune",vintage:"2026-05-05 12:00 ET",title:"Storm surge nowcast at The Battery, 96-hour horizon",timeseries:{hours:96,peak:{x:38,y:47},peakLabel:"+47 cm @ +38h"},headline:"+47 cm",subhead:"peak surge residual · Wed 04:00 ET",sub:"Nowcast applies city-wide via NOAA station 8518750. Not localized to query address. Residual above harmonic tide.",spatialNote:"regional · The Battery, not point-of-query",docId:"ttm_battery_surge_v2",citeId:"c-ttm",mapLayer:null},{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 attempt"},{k:"Grounding checks",v:"4 / 4 passed"},{k:"Citations resolved",v:"11 / 11"},{k:"RAG → GLiNER",v:"9 entities · 0 unresolved"}],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:"pull FEMA NFHL panel 36047C0207G",status:"ok",tier:"modeled",ms:412},{id:"CORN-002",name:"parse panel index for AE / VE bands",status:"ok",tier:"modeled",ms:88},{id:"CORN-003",name:"USGS STN: post-Sandy HWM survey within 500 ft",status:"ok",tier:"empirical",ms:612},{id:"CORN-004",name:"NYC DEP stormwater flood map 2024",status:"ok",tier:"modeled",ms:980},{id:"CORN-005",name:"microtopo: 3DEP DEM + HAND + TWI",status:"ok",tier:"proxy",ms:1240}]},{key:"keystone",members:[{id:"KEY-001",name:"MTA subway entrance proximity",status:"ok",tier:"empirical",ms:220},{id:"KEY-002",name:"NYCHA developments in 1 mi",status:"ok",tier:"empirical",ms:410},{id:"KEY-003",name:"DOE schools in 1 mi",status:"ok",tier:"empirical",ms:360},{id:"KEY-004",name:"NYS DOH hospitals in 1 mi",status:"silent",tier:"empirical",ms:95,note:"no acute-care within 1 mi"},{id:"KEY-005",name:"PLUTO BBL fetch",status:"ok",tier:"empirical",ms:130}]},{key:"touchstone",members:[{id:"TCH-001",name:"FloodNet sensor lookup",status:"ok",tier:"empirical",ms:285},{id:"TCH-002",name:"NYC 311 flood complaints",status:"ok",tier:"proxy",ms:410},{id:"TCH-003",name:"NWS station KNYC observation",status:"ok",tier:"empirical",ms:240},{id:"TCH-004",name:"NOAA tide gauge water level",status:"ok",tier:"empirical",ms:196},{id:"TCH-005",name:"Prithvi-EO 2.0 NYC-Pluvial v2",status:"ok",tier:"modeled",ms:4920}]},{key:"lodestone",members:[{id:"LOD-001",name:"Granite TTM r2 surge fine-tune",status:"ok",tier:"modeled",ms:1820},{id:"LOD-002",name:"NPCC4 SLR projection table",status:"ok",tier:"modeled",ms:38},{id:"LOD-003",name:"NWS active flood alerts",status:"silent",tier:"modeled",ms:110}]},{key:"capstone",members:[{id:"CAP-001",name:"Granite Embedding RAG retrieval",status:"ok",tier:"proxy",ms:410},{id:"CAP-002",name:"GLiNER typed extraction",status:"ok",tier:"proxy",ms:280},{id:"CAP-003",name:"Granite 4.1 reconcile (Mellea)",status:"ok",tier:"modeled",ms:6240}]}]};var ce=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(F,x){Z(x,!0);let y=d(null),Y="comfortable",T="smart",f=d(!1);Q(()=>{typeof window<"u"&&s(f,new URL(window.location.href).searchParams.get("grammar")==="1")});function H(n){s(y,n,!0)}function B(n){const o=document.getElementById("region-cites");o&&o.scrollIntoView({behavior:"smooth",block:"start"})}let r=d(J({empirical:!0,modeled:!0,synthetic:!0,proxy:!0})),l=d(0);X(()=>(se({queryId:"sample",queryText:E,intent:"single_address",specialists:9,blocks:M,citations:v,generatedAt:new Date().toISOString(),attempts:1}),R.markReady(),()=>R.reset()));const L={label:"80 Pioneer St",lat:40.6776,lon:-74.0096},b={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 c=ce(),N=e(c),m=e(N),p=e(m),u=e(p),D=i(e(u),2);t(u);var g=i(u,2),C=i(e(g)),O=e(C,!0);t(C),t(g);var G=i(g,2);ie(G,{get blocks(){return M},get citations(){return v},streaming:!0,get replayKey(){return a(l)}}),t(p);var k=i(p,2),h=e(k),S=i(e(h),2),w=e(S);ae(w,{get address(){return L},get activeLayers(){return a(r)},get syntheticPrior(){return b}});var _=i(w,2);{let n=te(()=>({empirical:0,modeled:0,synthetic:b.features.length,proxy:0}));re(_,{get active(){return a(r)},get featureCounts(){return a(n)},onToggle:o=>s(r,{...a(r),[o]:!a(r)[o]},!0)})}t(S),t(h);var I=i(h,2),K=e(I);oe(K,{get citations(){return v}}),t(I),t(k),t(m);var P=i(m,2),A=e(P),W=e(A);ne(W,{get data(){return le},density:Y,provenanceMode:T,get showGrammar(){return a(f)},get linkedKey(){return a(y)},onLink:H,onCite:B}),t(A),t(P),t(N),t(c),$(()=>z(O,E)),U("click",D,()=>s(l,a(l)+1)),j(F,c),ee()}V(["click"]);export{ye as component,ve as universal};
|
|
@@ -1 +1 @@
|
|
| 1 |
-
{"version":"
|
|
|
|
| 1 |
+
{"version":"1778019603760"}
|
|
@@ -6,18 +6,18 @@
|
|
| 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.
|
| 10 |
-
<link href="./_app/immutable/chunks/
|
| 11 |
<link href="./_app/immutable/chunks/DwbuJhNu.js" rel="modulepreload">
|
| 12 |
-
<link href="./_app/immutable/entry/app.
|
| 13 |
<link href="./_app/immutable/chunks/1oGnrPC6.js" rel="modulepreload">
|
| 14 |
<link href="./_app/immutable/chunks/Dlpu43Tj.js" rel="modulepreload">
|
| 15 |
<link href="./_app/immutable/chunks/8F5LpR-T.js" rel="modulepreload">
|
| 16 |
-
<link href="./_app/immutable/nodes/0.
|
| 17 |
<link href="./_app/immutable/chunks/DNaFzQeI.js" rel="modulepreload">
|
| 18 |
-
<link href="./_app/immutable/chunks/
|
| 19 |
<link href="./_app/immutable/chunks/DFFHaukH.js" rel="modulepreload">
|
| 20 |
-
<link href="./_app/immutable/nodes/2.
|
| 21 |
<link href="./_app/immutable/chunks/CBcGqa-S.js" rel="modulepreload">
|
| 22 |
|
| 23 |
<link href="./_app/immutable/assets/0.KpTzaSsX.css" rel="stylesheet">
|
|
@@ -31,15 +31,15 @@
|
|
| 31 |
|
| 32 |
<script>
|
| 33 |
{
|
| 34 |
-
|
| 35 |
base: new URL(".", location).pathname.slice(0, -1)
|
| 36 |
};
|
| 37 |
|
| 38 |
const element = document.currentScript.parentElement;
|
| 39 |
|
| 40 |
Promise.all([
|
| 41 |
-
import("./_app/immutable/entry/start.
|
| 42 |
-
import("./_app/immutable/entry/app.
|
| 43 |
]).then(([kit, app]) => {
|
| 44 |
kit.start(app, element, {
|
| 45 |
node_ids: [0, 2],
|
|
|
|
| 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.CBEzc0_C.js" rel="modulepreload">
|
| 10 |
+
<link href="./_app/immutable/chunks/BV_WLJ_i.js" rel="modulepreload">
|
| 11 |
<link href="./_app/immutable/chunks/DwbuJhNu.js" rel="modulepreload">
|
| 12 |
+
<link href="./_app/immutable/entry/app.DXmMqCY7.js" rel="modulepreload">
|
| 13 |
<link href="./_app/immutable/chunks/1oGnrPC6.js" rel="modulepreload">
|
| 14 |
<link href="./_app/immutable/chunks/Dlpu43Tj.js" rel="modulepreload">
|
| 15 |
<link href="./_app/immutable/chunks/8F5LpR-T.js" rel="modulepreload">
|
| 16 |
+
<link href="./_app/immutable/nodes/0.BOY_jD4V.js" rel="modulepreload">
|
| 17 |
<link href="./_app/immutable/chunks/DNaFzQeI.js" rel="modulepreload">
|
| 18 |
+
<link href="./_app/immutable/chunks/yTOzveqN.js" rel="modulepreload">
|
| 19 |
<link href="./_app/immutable/chunks/DFFHaukH.js" rel="modulepreload">
|
| 20 |
+
<link href="./_app/immutable/nodes/2.DUHn2QIZ.js" rel="modulepreload">
|
| 21 |
<link href="./_app/immutable/chunks/CBcGqa-S.js" rel="modulepreload">
|
| 22 |
|
| 23 |
<link href="./_app/immutable/assets/0.KpTzaSsX.css" rel="stylesheet">
|
|
|
|
| 31 |
|
| 32 |
<script>
|
| 33 |
{
|
| 34 |
+
__sveltekit_144sd2o = {
|
| 35 |
base: new URL(".", location).pathname.slice(0, -1)
|
| 36 |
};
|
| 37 |
|
| 38 |
const element = document.currentScript.parentElement;
|
| 39 |
|
| 40 |
Promise.all([
|
| 41 |
+
import("./_app/immutable/entry/start.CBEzc0_C.js"),
|
| 42 |
+
import("./_app/immutable/entry/app.DXmMqCY7.js")
|
| 43 |
]).then(([kit, app]) => {
|
| 44 |
kit.start(app, element, {
|
| 45 |
node_ids: [0, 2],
|
|
The diff for this file is too large to render.
See raw diff
|
|
|
|
@@ -545,13 +545,23 @@ function buildCapstoneMeta(final: FinalResult, wallSeconds?: number): Card {
|
|
| 545 |
}
|
| 546 |
|
| 547 |
/** Public adapter. Combines per-specialist card builders with the trace
|
| 548 |
-
* → StoneTrace mapper into a single FindingsData payload.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 549 |
export function adaptFinalToFindings(
|
| 550 |
-
final: FinalResult,
|
| 551 |
trace: TraceNode | undefined | null,
|
| 552 |
wallSeconds?: number,
|
|
|
|
|
|
|
|
|
|
|
|
|
| 553 |
): FindingsData {
|
| 554 |
-
const f = final as Final;
|
| 555 |
const geocode = obj(f.geocode);
|
| 556 |
const cards: (Card | null)[] = [
|
| 557 |
// Cornerstone
|
|
@@ -574,8 +584,8 @@ export function adaptFinalToFindings(
|
|
| 574 |
buildNwsAlerts(f),
|
| 575 |
buildTtmForecast(f),
|
| 576 |
buildTtmBatterySurge(f),
|
| 577 |
-
// Capstone (
|
| 578 |
-
buildCapstoneMeta(final, wallSeconds),
|
| 579 |
];
|
| 580 |
|
| 581 |
return {
|
|
@@ -584,3 +594,75 @@ export function adaptFinalToFindings(
|
|
| 584 |
wallSeconds,
|
| 585 |
};
|
| 586 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 545 |
}
|
| 546 |
|
| 547 |
/** Public adapter. Combines per-specialist card builders with the trace
|
| 548 |
+
* → StoneTrace mapper into a single FindingsData payload.
|
| 549 |
+
*
|
| 550 |
+
* Accepts either a real FinalResult (at end-of-stream) or a partial
|
| 551 |
+
* one synthesized from in-flight step events (during streaming). Each
|
| 552 |
+
* builder returns null when its slice of state is missing — so cards
|
| 553 |
+
* pop into the rail as their specialist completes, without waiting
|
| 554 |
+
* for the full reconcile. */
|
| 555 |
export function adaptFinalToFindings(
|
| 556 |
+
final: FinalResult | Partial<FinalResult> | null | undefined,
|
| 557 |
trace: TraceNode | undefined | null,
|
| 558 |
wallSeconds?: number,
|
| 559 |
+
/** When true, the Capstone meta card renders even with a stub final
|
| 560 |
+
* (we always want the run-summary). When false (no final at all),
|
| 561 |
+
* the meta card is skipped — there's nothing to summarise yet. */
|
| 562 |
+
hasFinal: boolean = true,
|
| 563 |
): FindingsData {
|
| 564 |
+
const f = (final ?? {}) as Final;
|
| 565 |
const geocode = obj(f.geocode);
|
| 566 |
const cards: (Card | null)[] = [
|
| 567 |
// Cornerstone
|
|
|
|
| 584 |
buildNwsAlerts(f),
|
| 585 |
buildTtmForecast(f),
|
| 586 |
buildTtmBatterySurge(f),
|
| 587 |
+
// Capstone (only once we have something to summarise)
|
| 588 |
+
hasFinal ? buildCapstoneMeta((final ?? { paragraph: '' }) as FinalResult, wallSeconds) : null,
|
| 589 |
];
|
| 590 |
|
| 591 |
return {
|
|
|
|
| 594 |
wallSeconds,
|
| 595 |
};
|
| 596 |
}
|
| 597 |
+
|
| 598 |
+
/** Per-step-event live-state mapper. The FSM action `step_X` writes to
|
| 599 |
+
* state key `X` (sometimes munged — e.g. `step_311` writes `nyc311`,
|
| 600 |
+
* `step_terramind` writes `terramind`). The SSE `step.result` payload
|
| 601 |
+
* is a slim summary (not the full doc body); cards adapt to whichever
|
| 602 |
+
* fields are present.
|
| 603 |
+
*
|
| 604 |
+
* Mutates `live` in place and returns the keys that changed so callers
|
| 605 |
+
* can decide whether to re-render. */
|
| 606 |
+
export function applyStepEventToLiveState(
|
| 607 |
+
live: Record<string, unknown>,
|
| 608 |
+
stepName: string,
|
| 609 |
+
result: unknown,
|
| 610 |
+
ok: boolean,
|
| 611 |
+
): string[] {
|
| 612 |
+
const STEP_TO_STATE: Record<string, string> = {
|
| 613 |
+
sandy_inundation: 'sandy',
|
| 614 |
+
dep_stormwater: 'dep',
|
| 615 |
+
floodnet: 'floodnet',
|
| 616 |
+
nyc311: 'nyc311',
|
| 617 |
+
noaa_tides: 'noaa_tides',
|
| 618 |
+
nws_alerts: 'nws_alerts',
|
| 619 |
+
nws_obs: 'nws_obs',
|
| 620 |
+
ttm_forecast: 'ttm_forecast',
|
| 621 |
+
ttm_311_forecast: 'ttm_311_forecast',
|
| 622 |
+
ttm_battery_surge: 'ttm_battery_surge',
|
| 623 |
+
floodnet_forecast: 'floodnet_forecast',
|
| 624 |
+
ida_hwm_2021: 'ida_hwm',
|
| 625 |
+
prithvi_eo_v2: 'prithvi_water',
|
| 626 |
+
prithvi_eo_live: 'prithvi_live',
|
| 627 |
+
microtopo_lidar: 'microtopo',
|
| 628 |
+
mta_entrance_exposure: 'mta_entrances',
|
| 629 |
+
nycha_development_exposure: 'nycha_developments',
|
| 630 |
+
doe_school_exposure: 'doe_schools',
|
| 631 |
+
doh_hospital_exposure: 'doh_hospitals',
|
| 632 |
+
terramind_synthesis: 'terramind',
|
| 633 |
+
terramind_lulc: 'terramind_lulc',
|
| 634 |
+
terramind_buildings: 'terramind_buildings',
|
| 635 |
+
eo_chip_fetch: 'eo_chip',
|
| 636 |
+
geocode: 'geocode',
|
| 637 |
+
};
|
| 638 |
+
const key = STEP_TO_STATE[stepName];
|
| 639 |
+
if (!key) return [];
|
| 640 |
+
|
| 641 |
+
// Translate the slim summary shapes the FSM emits into the
|
| 642 |
+
// doc-payload shapes the card builders expect. Mostly identity
|
| 643 |
+
// (the summaries already nest the relevant fields), with a few
|
| 644 |
+
// exceptions documented inline.
|
| 645 |
+
if (stepName === 'sandy_inundation') {
|
| 646 |
+
// FSM summary: { inside: bool }. Adapter expects state.sandy === true.
|
| 647 |
+
const r = result as Record<string, unknown> | null;
|
| 648 |
+
live[key] = ok && r?.inside === true ? true : (ok ? false : null);
|
| 649 |
+
} else if (stepName === 'dep_stormwater') {
|
| 650 |
+
// FSM summary: { dep_extreme_2080: 'label', dep_moderate_2050: 'label', ... }.
|
| 651 |
+
// Adapter expects state.dep[scen] = { depth_class, depth_label }.
|
| 652 |
+
// Reconstruct depth_class>0 from any non-empty label.
|
| 653 |
+
const r = (result as Record<string, unknown>) ?? {};
|
| 654 |
+
const dep: Record<string, unknown> = {};
|
| 655 |
+
for (const [scen, label] of Object.entries(r)) {
|
| 656 |
+
const lbl = typeof label === 'string' ? label : '';
|
| 657 |
+
if (!lbl) continue;
|
| 658 |
+
dep[scen] = { depth_class: 1, depth_label: lbl };
|
| 659 |
+
}
|
| 660 |
+
live[key] = Object.keys(dep).length ? dep : null;
|
| 661 |
+
} else if (ok && result != null) {
|
| 662 |
+
live[key] = result;
|
| 663 |
+
} else {
|
| 664 |
+
live[key] = null;
|
| 665 |
+
}
|
| 666 |
+
|
| 667 |
+
return [key];
|
| 668 |
+
}
|
|
@@ -62,11 +62,13 @@
|
|
| 62 |
No user-supplied input flows here.
|
| 63 |
-->
|
| 64 |
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
|
| 65 |
-
<div class="briefing-status">{@html block.html}</div>
|
| 66 |
{:else if block.kind === 'head'}
|
| 67 |
-
<
|
|
|
|
|
|
|
| 68 |
{:else}
|
| 69 |
-
<p class="briefing-para">
|
| 70 |
{#each block.parts as part, j (j)}
|
| 71 |
{#if part.tier}
|
| 72 |
<Claim tier={part.tier}>{part.text}</Claim>{#if part.cite && cites[part.cite]}<Cite c={cites[part.cite]} />{/if}
|
|
@@ -77,7 +79,18 @@
|
|
| 77 |
</p>
|
| 78 |
{/if}
|
| 79 |
{/each}
|
| 80 |
-
{#if visibleCount < blocks.length}
|
| 81 |
-
<span class="streaming-caret" aria-hidden="true">▍</span>
|
| 82 |
-
{/if}
|
| 83 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
No user-supplied input flows here.
|
| 63 |
-->
|
| 64 |
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
|
| 65 |
+
<div class="briefing-status briefing-fade-in">{@html block.html}</div>
|
| 66 |
{:else if block.kind === 'head'}
|
| 67 |
+
<div class="briefing-fade-in">
|
| 68 |
+
<SectionHead n={block.n} label={block.label} tier={block.tier} title={block.title} />
|
| 69 |
+
</div>
|
| 70 |
{:else}
|
| 71 |
+
<p class="briefing-para briefing-fade-in">
|
| 72 |
{#each block.parts as part, j (j)}
|
| 73 |
{#if part.tier}
|
| 74 |
<Claim tier={part.tier}>{part.text}</Claim>{#if part.cite && cites[part.cite]}<Cite c={cites[part.cite]} />{/if}
|
|
|
|
| 79 |
</p>
|
| 80 |
{/if}
|
| 81 |
{/each}
|
|
|
|
|
|
|
|
|
|
| 82 |
</div>
|
| 83 |
+
|
| 84 |
+
<style>
|
| 85 |
+
/* Each newly-revealed block fades in over 320ms instead of the
|
| 86 |
+
blinking-cursor "typing" cadence. Citation-grounded paragraphs
|
| 87 |
+
should land with authority, not chatter. Respects
|
| 88 |
+
prefers-reduced-motion via the global rule in tokens.css. */
|
| 89 |
+
.briefing-fade-in {
|
| 90 |
+
animation: briefing-fade 320ms ease-out both;
|
| 91 |
+
}
|
| 92 |
+
@keyframes briefing-fade {
|
| 93 |
+
from { opacity: 0; transform: translateY(2px); }
|
| 94 |
+
to { opacity: 1; transform: translateY(0); }
|
| 95 |
+
}
|
| 96 |
+
</style>
|
|
@@ -117,6 +117,13 @@
|
|
| 117 |
font: inherit;
|
| 118 |
padding: 0;
|
| 119 |
width: 100%;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
}
|
| 121 |
.fc.is-interactive { cursor: pointer; }
|
| 122 |
.fc:hover { background: var(--paper-deep); }
|
|
|
|
| 117 |
font: inherit;
|
| 118 |
padding: 0;
|
| 119 |
width: 100%;
|
| 120 |
+
/* Fade each card in as it lands in the rail. Respects
|
| 121 |
+
prefers-reduced-motion via the global rule in tokens.css. */
|
| 122 |
+
animation: fc-fade-in 360ms ease-out both;
|
| 123 |
+
}
|
| 124 |
+
@keyframes fc-fade-in {
|
| 125 |
+
from { opacity: 0; transform: translateY(4px); }
|
| 126 |
+
to { opacity: 1; transform: translateY(0); }
|
| 127 |
}
|
| 128 |
.fc.is-interactive { cursor: pointer; }
|
| 129 |
.fc:hover { background: var(--paper-deep); }
|
|
@@ -10,7 +10,7 @@
|
|
| 10 |
import RerollBanner from '$lib/components/states/RerollBanner.svelte';
|
| 11 |
import ErrorCard from '$lib/components/states/ErrorCard.svelte';
|
| 12 |
import FindingsRegion from '$lib/components/findings/FindingsRegion.svelte';
|
| 13 |
-
import { adaptFinalToFindings } from '$lib/client/cardAdapter';
|
| 14 |
import type { Density, ProvenanceMode, FindingsData } from '$lib/types/card';
|
| 15 |
import type { ErrorKey, RegisterData } from '$lib/types/states';
|
| 16 |
import { extractRegisters } from '$lib/client/registerAdapter';
|
|
@@ -79,13 +79,27 @@
|
|
| 79 |
let runStartedAt = $state<number | null>(null);
|
| 80 |
let runWallSeconds = $state<number | undefined>(undefined);
|
| 81 |
|
| 82 |
-
/**
|
| 83 |
-
*
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
|
| 90 |
function handleFindingsLink(key: string | null) { linkedKey = key; }
|
| 91 |
function handleFindingsCite(citeId: string) {
|
|
@@ -367,6 +381,13 @@
|
|
| 367 |
onPlanToken: (d) => (planTokens += d),
|
| 368 |
onPlan: (p) => (plan = p),
|
| 369 |
onStep: (s) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 370 |
// address from the geocode step (single_address / live_now)
|
| 371 |
if (s.step === 'geocode') {
|
| 372 |
if (s.ok && s.result && typeof s.result === 'object') {
|
|
|
|
| 10 |
import RerollBanner from '$lib/components/states/RerollBanner.svelte';
|
| 11 |
import ErrorCard from '$lib/components/states/ErrorCard.svelte';
|
| 12 |
import FindingsRegion from '$lib/components/findings/FindingsRegion.svelte';
|
| 13 |
+
import { adaptFinalToFindings, applyStepEventToLiveState } from '$lib/client/cardAdapter';
|
| 14 |
import type { Density, ProvenanceMode, FindingsData } from '$lib/types/card';
|
| 15 |
import type { ErrorKey, RegisterData } from '$lib/types/states';
|
| 16 |
import { extractRegisters } from '$lib/client/registerAdapter';
|
|
|
|
| 79 |
let runStartedAt = $state<number | null>(null);
|
| 80 |
let runWallSeconds = $state<number | undefined>(undefined);
|
| 81 |
|
| 82 |
+
/** Live per-specialist results, keyed by FSM state name (sandy / dep
|
| 83 |
+
* / floodnet / ...). Updated incrementally on every `step` event so
|
| 84 |
+
* cards stream into the rail as their specialists complete; the
|
| 85 |
+
* full final payload merges in once the reconcile event fires. */
|
| 86 |
+
let liveResults = $state<Record<string, unknown>>({});
|
| 87 |
+
/** Bumped on every step event so the $derived below recomputes even
|
| 88 |
+
* though Svelte doesn't deep-track plain objects. */
|
| 89 |
+
let liveTick = $state(0);
|
| 90 |
+
|
| 91 |
+
/** Compose the FindingsData payload. During streaming we feed the
|
| 92 |
+
* adapter from `liveResults` (slim per-step summaries). When `final`
|
| 93 |
+
* arrives, its richer payload supersedes — same key shape, just
|
| 94 |
+
* more fields populated. */
|
| 95 |
+
let findingsData = $derived.by<FindingsData>(() => {
|
| 96 |
+
void liveTick;
|
| 97 |
+
if (finalResult) {
|
| 98 |
+
const merged = { ...liveResults, ...finalResult } as Partial<typeof finalResult>;
|
| 99 |
+
return adaptFinalToFindings(merged, traceRoot, runWallSeconds, true);
|
| 100 |
+
}
|
| 101 |
+
return adaptFinalToFindings(liveResults, traceRoot, runWallSeconds, false);
|
| 102 |
+
});
|
| 103 |
|
| 104 |
function handleFindingsLink(key: string | null) { linkedKey = key; }
|
| 105 |
function handleFindingsCite(citeId: string) {
|
|
|
|
| 381 |
onPlanToken: (d) => (planTokens += d),
|
| 382 |
onPlan: (p) => (plan = p),
|
| 383 |
onStep: (s) => {
|
| 384 |
+
// Mirror the step's slim result into liveResults so Findings cards
|
| 385 |
+
// can stream in as specialists complete. The card adapter is
|
| 386 |
+
// tolerant of partial summaries — at the end of the stream the
|
| 387 |
+
// richer `final` payload merges over the top.
|
| 388 |
+
applyStepEventToLiveState(liveResults, s.step, s.result, s.ok);
|
| 389 |
+
liveTick = liveTick + 1;
|
| 390 |
+
|
| 391 |
// address from the geocode step (single_address / live_now)
|
| 392 |
if (s.step === 'geocode') {
|
| 393 |
if (s.ok && s.result && typeof s.result === 'object') {
|