Add pitch deck (Marp) + landscape research
Browse filesThree artefacts for the AMD x lablab.ai hackathon submission video.
slides/deck.md + slides/riprap.css β 8-slide Marp deck targeting the
5-minute video format. The theme ports the SvelteKit UI's design
tokens 1:1: IBM Plex (Sans / Mono / Serif), paper register
(#FAFAF7), the four-tier epistemic palette, the five-Stone hint
colours, the orange β accent block from the wordmark. Slides 1β6
land in ~2.5 min of voiceover; slide 7 hands off to the live demo;
slide 8 is the closing CTA. `slides/Makefile` builds PDF / HTML /
PPTX in one command; `slides/README.md` documents the per-slide
voiceover beats.
Slide arc: title β "climate risk data is a black box" + Zillow's
Dec-2025 First Street pullout as the hook β "every number cites
its source or it doesn't appear" with a real cited paragraph β
the stack flaunt (3 of 4 hackathon tracks: Agents + Fine-Tuning +
Vision/Multimodal) β the receipts (5/5 probe pass, Mellea 4/4,
5.8β13.1 s) β civic-tech case (NY disclosure law, $30B DEP plan,
EJNYC FVI) β demo handoff β CTA.
RESEARCH.md β landscape pass underpinning the deck. Direct comps
(First Street, ClimateCheck, Jupiter), NYC government tools
(FloodHelpNY, NYC Flood Hazard Mapper, FloodNet, EJNYC FVI),
academic comps (Flood-LLM Brisbane, GIS-Integrated Flood LLM,
FloodLense). Six stakeholder demo arcs with concrete query
examples (resident, real-estate attorney, OEM/DEP planner,
underwriter, journalist, architect). Ten lateral use cases. Risk
register (real-estate pushback, redlining hazard, disclosure
liability, cold-start, geocoder edge cases).
.gitignore β exclude regenerable deck render artefacts
(deck.pdf / .html / .pptx).
CLAUDE.md β note the deliverables landed and the "3 of 4 tracks"
framing locked in.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- .gitignore +5 -0
- RESEARCH.md +366 -0
- slides/Makefile +19 -0
- slides/README.md +62 -0
- slides/deck.md +170 -0
- slides/riprap.css +520 -0
|
@@ -34,3 +34,8 @@ experiments/**/*.jpg
|
|
| 34 |
experiments/**/*.parquet
|
| 35 |
experiments/**/*.npy
|
| 36 |
pitch/screenshots-*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
experiments/**/*.parquet
|
| 35 |
experiments/**/*.npy
|
| 36 |
pitch/screenshots-*/
|
| 37 |
+
|
| 38 |
+
# Marp deck render artefacts (regenerable via `make` in slides/)
|
| 39 |
+
slides/deck.pdf
|
| 40 |
+
slides/deck.html
|
| 41 |
+
slides/deck.pptx
|
|
@@ -0,0 +1,366 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Riprap β landscape research
|
| 2 |
+
|
| 3 |
+
Captured 2026-05-06 as part of the AMD x lablab.ai hackathon polish
|
| 4 |
+
phase. This document underpins the pitch deck (`slides/deck.md`) and
|
| 5 |
+
the demo-script choices. Re-validate against the live web before
|
| 6 |
+
re-using any specific figure.
|
| 7 |
+
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
## What Riprap is, distinctly
|
| 11 |
+
|
| 12 |
+
A **citation-grounded LLM that writes audit-quality flood-exposure
|
| 13 |
+
briefings for NYC addresses** by fusing 17+ live, historical,
|
| 14 |
+
modeled, and projected data sources, with **Mellea rejection
|
| 15 |
+
sampling** that refuses to publish a numeric claim it can't cite.
|
| 16 |
+
The output isn't a score β it's a four-section prose briefing with
|
| 17 |
+
`[doc_id]` citations on every numeric assertion, where each
|
| 18 |
+
`doc_id` resolves to one specific dataset (Sandy 2012 zone, NYC
|
| 19 |
+
DEP scenario, USGS HWM, Sentinel-2 chip, NOAA gauge reading,
|
| 20 |
+
NPCC4 SLR projection).
|
| 21 |
+
|
| 22 |
+
Granite 4.1 8B drives the prose; Granite Embedding 278M + GLiNER
|
| 23 |
+
drive policy-doc retrieval; Prithvi-EO 2.0 + TerraMind LULC/
|
| 24 |
+
Buildings + Granite TTM r2 drive the EO and forecast specialists,
|
| 25 |
+
with three Apache-2.0 NYC fine-tunes trained on AMD MI300X published
|
| 26 |
+
on HF Hub.
|
| 27 |
+
|
| 28 |
+
The architectural commitments other tools don't make:
|
| 29 |
+
|
| 30 |
+
1. **Silence over confabulation** β when a specialist returns no
|
| 31 |
+
data, the briefing omits the section rather than papering over it.
|
| 32 |
+
2. **Five-stone epistemic structure** so the user can see what's
|
| 33 |
+
empirical vs modeled vs proxy vs synthetic.
|
| 34 |
+
3. **Fully open-source pipeline** β Apache-2.0 end-to-end on
|
| 35 |
+
public-record data, no commercial APIs touched at runtime.
|
| 36 |
+
4. **Deployable on either local Ollama or AMD MI300X via vLLM**
|
| 37 |
+
with auto-failover.
|
| 38 |
+
|
| 39 |
+
Stack as of 2026-05-06: SvelteKit UI on HF Spaces (cpu-basic) at
|
| 40 |
+
the AMD-hackathon org, FastAPI agent FSM, two-container droplet
|
| 41 |
+
(vLLM + riprap-models) on MI300X, full address probe suite at 5/5
|
| 42 |
+
PASS in 5.8β13.1 s end-to-end.
|
| 43 |
+
|
| 44 |
+
---
|
| 45 |
+
|
| 46 |
+
## Landscape map
|
| 47 |
+
|
| 48 |
+
### Direct comps β score-based property risk tools
|
| 49 |
+
|
| 50 |
+
| Tool | What it gives | Who it serves | Hidden cost |
|
| 51 |
+
|---|---|---|---|
|
| 52 |
+
| **First Street Risk Factor** (Flood Factor) | Score 1β10 + 30-yr risk narrative; powers Redfin, Realtor.com (until Dec 2025 also Zillow) | Homebuyers; some lenders | Closed model; commercial partnerships; Zillow removed it under industry pressure in Dec 2025 |
|
| 53 |
+
| **ClimateCheck** | Score 1β100 + ~30-page property report; 2050 projections | Homeowners + REIT/PE diligence | Subscription tiers; methodology behind paywall |
|
| 54 |
+
| **Jupiter ClimateScore Global** | Enterprise SaaS / API; financial metrics (CapEx, OpEx, credit risk) | Banks, insurers, asset managers | Enterprise pricing; not consumer-facing |
|
| 55 |
+
| **Cervest / Climate X / ICEYE** | Variants of above for ESG / reinsurance | Corporate finance & insurance | Same |
|
| 56 |
+
|
| 57 |
+
Score-based tools all converge on the same shape: **one number,
|
| 58 |
+
one chart, an explainer paragraph**. None show what claim is
|
| 59 |
+
grounded in which dataset. None expose the audit trail.
|
| 60 |
+
|
| 61 |
+
### NYC-specific government tools
|
| 62 |
+
|
| 63 |
+
- **FloodHelpNY** (City + State, IDEO-designed) β address lookup
|
| 64 |
+
β flood-zone label + insurance + free resiliency audit. Forms-
|
| 65 |
+
based; consumer-facing; doesn't fuse live signals.
|
| 66 |
+
- **NYC Flood Hazard Mapper** β ArcGIS web map of FEMA + NPCC +
|
| 67 |
+
Sandy + future scenarios. Static visualization; no narrative.
|
| 68 |
+
- **NYC OEM Flood Maps page** β index of the above.
|
| 69 |
+
- **EJNYC Flood Vulnerability Index** (released 2024-04 by
|
| 70 |
+
Mayor's Office of Climate & EJ) β first-ever city FVI, used to
|
| 71 |
+
direct spending under NY's "Disadvantaged Communities" framework
|
| 72 |
+
(35% of climate spend by law).
|
| 73 |
+
- **FloodNet NYC** (NYU + CUNY + city) β 350+ ultrasonic sensors
|
| 74 |
+
at 1-min cadence, growing to 500 by end-2026. Has a public
|
| 75 |
+
dashboard but no narrative layer.
|
| 76 |
+
|
| 77 |
+
### Federal / authoritative
|
| 78 |
+
|
| 79 |
+
- **FEMA Flood Map Service Center / NFHL** β official; covers 90%+
|
| 80 |
+
population; static GIS layer + PDFs. The disclosure-of-record but
|
| 81 |
+
not a synthesis tool.
|
| 82 |
+
|
| 83 |
+
### Real-estate platforms (the volatile zone)
|
| 84 |
+
|
| 85 |
+
- **Redfin** β still shows First Street Flood Factor on every
|
| 86 |
+
listing.
|
| 87 |
+
- **Realtor.com** β still shows it on 110M+ listings.
|
| 88 |
+
- **Zillow** β **removed climate risk display in December 2025**
|
| 89 |
+
under California Regional MLS pressure. Still links out but it's
|
| 90 |
+
hidden. **This created a vacuum that an open citation-grounded
|
| 91 |
+
alternative could fill.**
|
| 92 |
+
|
| 93 |
+
### Closest academic / AI comps
|
| 94 |
+
|
| 95 |
+
- **Flood-LLM** (Brisbane, MDPI Sustainability 2026) β multi-source
|
| 96 |
+
LLM for property-level flood risk, validated on Brisbane against
|
| 97 |
+
official labels. Academic, not deployed; no Mellea-style citation
|
| 98 |
+
discipline; no live signals.
|
| 99 |
+
- **GIS-Integrated Flood LLM** (Tandfonline 2024) β LLM constrained
|
| 100 |
+
by a flood knowledge graph + GIS interaction. Research artefact.
|
| 101 |
+
- **FloodLense** (arXiv 2024) β UNet/RDN/ViT + LLM for satellite
|
| 102 |
+
flood detection. Research; image-only.
|
| 103 |
+
|
| 104 |
+
---
|
| 105 |
+
|
| 106 |
+
## Where Riprap fits β differentiators that demo well
|
| 107 |
+
|
| 108 |
+
Ranked by visibility in a 3-minute demo:
|
| 109 |
+
|
| 110 |
+
1. **Citation prose vs scores.** Riprap returns *"Hurricane Sandy
|
| 111 |
+
flooded this address on October 29β30, 2012, according to the
|
| 112 |
+
empirical inundation zone [sandy]. 19 flood-related 311 service
|
| 113 |
+
requests were logged within 200 m over five years [nyc311]."* Every
|
| 114 |
+
number cites a doc; each doc resolves to a footer source row.
|
| 115 |
+
First Street returns "Flood Factor 8/10". This gap is the demo.
|
| 116 |
+
2. **Live + historical + modeled + projected, in one paragraph.**
|
| 117 |
+
Sandy 2012 (empirical), DEP 2080 stormwater scenarios (modeled),
|
| 118 |
+
311 last 5 years (proxy), FloodNet last 3 years (empirical,
|
| 119 |
+
hyperlocal), NPCC4 SLR (projected), Granite TTM r2 surge nowcast
|
| 120 |
+
(96-h forecast). No comp combines all four temporal modes.
|
| 121 |
+
3. **Open-source NYC fine-tunes.** Three Apache-2.0 models
|
| 122 |
+
(`Prithvi-EO-2.0-NYC-Pluvial`, `TerraMind-NYC-Adapters`,
|
| 123 |
+
`Granite-TTM-r2-Battery-Surge`) trained on AMD MI300X β anyone
|
| 124 |
+
can reproduce, fork to other cities, or audit. First Street's
|
| 125 |
+
model is closed; ClimateCheck's methodology is behind a paywall.
|
| 126 |
+
4. **AMD hardware story.** The whole stack runs on MI300X via vLLM
|
| 127 |
+
(LLM) + a sibling ROCm container (specialists). All Apache-2.0.
|
| 128 |
+
This is the AMD hackathon track's preferred narrative: open
|
| 129 |
+
models, open infra, open data, real GPU acceleration.
|
| 130 |
+
5. **Mellea grounding receipts.** The four checks
|
| 131 |
+
(`numerics_grounded` / `no_placeholder_tokens` / `citations_dense`
|
| 132 |
+
/ `citations_resolve`) are the audit. The meta card surfaces
|
| 133 |
+
"4/4 grounding checks passed, 1 reroll" β that's audit
|
| 134 |
+
credibility no consumer comp shows.
|
| 135 |
+
6. **Self-aware silence.** Touchstone shows "FloodNet sensor: 0
|
| 136 |
+
events in 3 years" with `silent_by_design`. Lodestone shows
|
| 137 |
+
"TTM Battery surge forecast: peak |residual| < 0.3 m, omitted."
|
| 138 |
+
Most tools always render a value. Riprap's silence is a feature.
|
| 139 |
+
|
| 140 |
+
---
|
| 141 |
+
|
| 142 |
+
## Stakeholder demos to craft
|
| 143 |
+
|
| 144 |
+
Six concrete personas, each with a query that exercises a different
|
| 145 |
+
part of the system. These are the demo arcs to rehearse.
|
| 146 |
+
|
| 147 |
+
### 1. Resident / homebuyer (the FloodHelpNY swap-in)
|
| 148 |
+
|
| 149 |
+
> *"I'm thinking about renting an apartment at 80 Pioneer Street,
|
| 150 |
+
> Brooklyn β should I worry?"*
|
| 151 |
+
|
| 152 |
+
**Demo arc.** Type the address. Watch the planner classify
|
| 153 |
+
`single_address`, then 19 specialists fire across the four Stones
|
| 154 |
+
in ~13 s. Briefing names Sandy 2012 inundation, 65 311 complaints,
|
| 155 |
+
2 FloodNet sensors with 4 events including a 51 mm peak on a
|
| 156 |
+
specific date, Ida 2021 HWM 130 m away, microtopo HAND 3.81 m + TWI
|
| 157 |
+
14.79 (very high saturation propensity). Footer shows 7+ named
|
| 158 |
+
primary sources.
|
| 159 |
+
|
| 160 |
+
**Demo hook.** "Compare what we just generated to First Street's
|
| 161 |
+
number-and-bar-chart for the same address. Which would you trust
|
| 162 |
+
to make a $4,000/month decision?"
|
| 163 |
+
|
| 164 |
+
### 2. Real-estate attorney / disclosure compliance
|
| 165 |
+
|
| 166 |
+
> *"Does 100 Gold Street, Manhattan need to disclose flood risk
|
| 167 |
+
> under RPL Β§462(2)?"*
|
| 168 |
+
|
| 169 |
+
**Demo arc.** Same single_address path. Briefing produces a citable
|
| 170 |
+
narrative covering FEMA designation, prior flood claims (where
|
| 171 |
+
present), terrain, recent complaints. Mellea grounding check is
|
| 172 |
+
the *qualifier* β "this prose is grounded against four invariants
|
| 173 |
+
and passed 4/4."
|
| 174 |
+
|
| 175 |
+
**Demo hook.** New York's March-2024 amended Property Condition
|
| 176 |
+
Disclosure Statement requires sellers to disclose flood history
|
| 177 |
+
and FEMA-floodplain status. RPL Β§231-b requires every residential
|
| 178 |
+
lease to disclose prior flood damage. Riprap is the citable
|
| 179 |
+
narrative tool β show how the briefing maps line-by-line to the
|
| 180 |
+
disclosure requirements.
|
| 181 |
+
|
| 182 |
+
### 3. NYC OEM / DEP planner
|
| 183 |
+
|
| 184 |
+
> *"Hollis, Queens"*
|
| 185 |
+
|
| 186 |
+
**Demo arc.** Neighborhood intent fires (9 steps), produces NTA-
|
| 187 |
+
level briefing β 434 flood-related 311 over 3 years (87 catch-
|
| 188 |
+
basin clogged, 42 street-flooding), 4.3% of neighborhood projected
|
| 189 |
+
to flood under DEP moderate-2050 scenario, 25% of cells with
|
| 190 |
+
HAND<1 m. RAG retrieval pulls relevant DEP/NPCC4 policy paragraphs.
|
| 191 |
+
|
| 192 |
+
**Demo hook.** DEP just announced a $30B stormwater priority list
|
| 193 |
+
(86 locations) and a $68M Brooklyn Bluebelt expansion in Prospect
|
| 194 |
+
Park. Riprap supports the prioritization argument with citable
|
| 195 |
+
per-NTA evidence. Pair with the EJNYC Flood Vulnerability Index for
|
| 196 |
+
the EJ-spending overlay (35%-to-disadvantaged-communities legal
|
| 197 |
+
mandate).
|
| 198 |
+
|
| 199 |
+
### 4. Insurance underwriter / actuary
|
| 200 |
+
|
| 201 |
+
> *"442 East Houston Street, Manhattan"*
|
| 202 |
+
|
| 203 |
+
**Demo arc.** Same as resident demo, but emphasize the **provenance
|
| 204 |
+
trace** UI β every Specialist row, every doc_id, every source URL,
|
| 205 |
+
vintage, and tier glyph.
|
| 206 |
+
|
| 207 |
+
**Demo hook.** When an underwriter writes a risk memo, the audit
|
| 208 |
+
chain matters. First Street's "we used a proprietary catastrophe
|
| 209 |
+
model" doesn't survive a regulator review the way "we used FEMA
|
| 210 |
+
Sandy 2012 polygon, NYC DEP 2021 stormwater scenario, USGS Ida
|
| 211 |
+
HWM Event 312, NOAA gauge 8518750, NWS station KNYC, Granite TTM
|
| 212 |
+
r2 fine-tune (test MAE 0.1091 m vs 0.1467 zero-shot, citable)" does.
|
| 213 |
+
|
| 214 |
+
### 5. Climate journalist / advocacy
|
| 215 |
+
|
| 216 |
+
> *"Coney Island, Brooklyn"*
|
| 217 |
+
|
| 218 |
+
**Demo arc.** Neighborhood briefing β 87.5% of NTA in 2012 Sandy
|
| 219 |
+
zone, 382 flood complaints over 3 years, 7.8% projected flooded
|
| 220 |
+
under 2050 moderate, 38.9% of DEM cells with HAND<1 m, DEP
|
| 221 |
+
extreme-2080 β 44.2% flooded.
|
| 222 |
+
|
| 223 |
+
**Demo hook.** ProPublica/NYTimes/THE CITY-style data journalism.
|
| 224 |
+
Every claim in a Riprap briefing is reproducible β anyone can paste
|
| 225 |
+
the same query and get a near-identical narrative. The journalist
|
| 226 |
+
can publish the briefing as the methods section.
|
| 227 |
+
|
| 228 |
+
### 6. Architect / developer
|
| 229 |
+
|
| 230 |
+
> *"What are they building in Gowanus and is it risky"*
|
| 231 |
+
|
| 232 |
+
**Demo arc.** Planner classifies `development_check`. FSM pulls
|
| 233 |
+
DOB filings + flood layers for the project sites. Briefing comments
|
| 234 |
+
on which proposed buildings sit inside Sandy 2012, which intersect
|
| 235 |
+
DEP extreme-2080, what the microtopo says.
|
| 236 |
+
|
| 237 |
+
**Demo hook.** Pre-design siting check. The Gowanus rezoning is
|
| 238 |
+
one of NYC's largest active development zones, well known to flood.
|
| 239 |
+
Show how the tool surfaces flood concerns before architects pour
|
| 240 |
+
concrete.
|
| 241 |
+
|
| 242 |
+
---
|
| 243 |
+
|
| 244 |
+
## Lateral & unexpected use cases
|
| 245 |
+
|
| 246 |
+
10 bets, ordered roughly from most-buildable to most-speculative.
|
| 247 |
+
|
| 248 |
+
1. **Pre-storm cohort briefings.** Subscribe Riprap to NWS flood-
|
| 249 |
+
watch alerts. When a watch lands, fan out one briefing per
|
| 250 |
+
affected NTA + push to OEM / press / advocacy lists. Citable
|
| 251 |
+
evidence on demand for the press cycle that follows.
|
| 252 |
+
2. **Climate-grant evidence sections.** HUD CDBG-DR and FEMA BRIC
|
| 253 |
+
applications need an auditable evidence base. Riprap auto-
|
| 254 |
+
generates the "vulnerability assessment" section so a community
|
| 255 |
+
group can apply for resilience funding without hiring a consultant.
|
| 256 |
+
3. **Local Law disclosure boilerplate.** Plug into a brokerage's
|
| 257 |
+
listing flow: when an agent enters an address, auto-generate
|
| 258 |
+
the NY RPL Β§231-b lease addendum or Β§462(2) disclosure draft.
|
| 259 |
+
ROI is high since the law took effect 2024 and many landlords
|
| 260 |
+
are still figuring out compliance.
|
| 261 |
+
4. **MTA station-hardening prioritization.** Riprap already has the
|
| 262 |
+
MTA-entrance specialist (KEY-001 in the demo). Run the FSM
|
| 263 |
+
across all subway entrances; rank by exposure Γ ridership. The
|
| 264 |
+
MTA's October-2025 Climate Resilience Roadmap Update is the
|
| 265 |
+
policy hook.
|
| 266 |
+
5. **DOE school siting.** When DOE reviews proposed school sites
|
| 267 |
+
or selects schools for retrofit, Riprap briefings (with `expect_311_ge`
|
| 268 |
+
+ Sandy + DEP overlays) would catch flood exposure that form-
|
| 269 |
+
style screens miss.
|
| 270 |
+
6. **Time-machine variant.** Re-run the FSM with snapshot data
|
| 271 |
+
from a past date β *"what would Riprap have said about Hollis
|
| 272 |
+
on August 31, 2021, the day before Ida?"* Useful for retrospective
|
| 273 |
+
analysis, expert testimony, and stress-testing the system.
|
| 274 |
+
7. **Cross-city scaffold.** The architecture is NYC-specific by
|
| 275 |
+
data choice, not by code. Port to Houston (post-Harvey + Hurricane
|
| 276 |
+
Beryl 2024), Miami (king tides), Boston (CSO floods), Charleston
|
| 277 |
+
(chronic tidal), with a per-city specialist set + RAG corpus.
|
| 278 |
+
8. **Federation with FloodNet alerts.** When a sensor triggers a
|
| 279 |
+
flood event NOW, fire a Riprap live_now briefing for the
|
| 280 |
+
surrounding NTA: *"what's at stake in the next 6 hours."*
|
| 281 |
+
Connects FloodNet's hyperlocal sensor reads to the OEM decision
|
| 282 |
+
loop.
|
| 283 |
+
9. **EJNYC Γ Riprap pairing.** Rank all 188 NTAs by Riprap-detected
|
| 284 |
+
exposure, intersect with state DAC designations. Output: a map
|
| 285 |
+
of "underserved + underwater" β the most underfunded high-
|
| 286 |
+
exposure neighborhoods.
|
| 287 |
+
10. **Court testimony / expert witness.** Citable, reproducible
|
| 288 |
+
flood narrative as a court exhibit. The Mellea passes-record +
|
| 289 |
+
provenance trace are the kind of artefact a regulator or judge
|
| 290 |
+
can audit. Especially relevant after the December-2025 Zillow
|
| 291 |
+
controversy created public discussion of climate-data integrity.
|
| 292 |
+
|
| 293 |
+
---
|
| 294 |
+
|
| 295 |
+
## Risks & framing
|
| 296 |
+
|
| 297 |
+
- **Real-estate industry pushback.** December 2025: Zillow removed
|
| 298 |
+
First Street's climate scores under MLS pressure because the data
|
| 299 |
+
was hurting transaction volume. A free, citation-grounded
|
| 300 |
+
alternative could face the same reflex. Riprap's defence is that
|
| 301 |
+
it's a *narrative tool for professional analytical work*, not a
|
| 302 |
+
buy/don't-buy verdict β keep the disclaimer footer prominent.
|
| 303 |
+
- **Redlining hazard.** Exposure narratives can be misused by
|
| 304 |
+
landlords or insurers to discriminate against high-flood-risk
|
| 305 |
+
(often disproportionately disadvantaged) neighborhoods.
|
| 306 |
+
Mitigations: (a) the citation transparency makes biased reasoning
|
| 307 |
+
auditable, (b) the EJNYC pairing in lateral-use #9 reframes
|
| 308 |
+
exposure data as a tool *for* affected communities, not against
|
| 309 |
+
them, (c) keep "for professional analytical work, not personal
|
| 310 |
+
property decisions" front and center.
|
| 311 |
+
- **Disclosure-status liability.** A briefing is *evidence* but
|
| 312 |
+
probably not *the* Β§462(2) disclosure under New York real-estate
|
| 313 |
+
law. Don't position it as legal disclosure-of-record without a
|
| 314 |
+
real-estate-attorney review.
|
| 315 |
+
- **Cold-start latency.** First query after droplet redeploy is
|
| 316 |
+
~30 s while models warm. For demos, ping the Space + run one
|
| 317 |
+
warm-up query 5 minutes before showtime.
|
| 318 |
+
- **Geocoder edge cases.** "PS 188, Lower East Side" geocoded to
|
| 319 |
+
a Brooklyn PS 188 in our test suite. For demos, pick fully-
|
| 320 |
+
qualified street addresses; document the disambiguation behavior.
|
| 321 |
+
|
| 322 |
+
---
|
| 323 |
+
|
| 324 |
+
## Polish punch-list (deck-driven)
|
| 325 |
+
|
| 326 |
+
Concrete polish items the research surfaces, ranked by demo value:
|
| 327 |
+
|
| 328 |
+
1. **Sample-query pills on landing.** Six clickable pills below
|
| 329 |
+
the search bar β one per persona above. Let the audience demo
|
| 330 |
+
themselves.
|
| 331 |
+
2. **A "What this is" bar at the top of the landing.** Three-line:
|
| 332 |
+
*"Citation-grounded NYC flood briefings. Every number cites a
|
| 333 |
+
primary source. Open-source, public data, audit-grade synthesis."*
|
| 334 |
+
3. **Compare-mode link from the briefing.** Once Riprap delivers a
|
| 335 |
+
single_address briefing, surface "compare with another address"
|
| 336 |
+
as a one-click affordance. The compare intent already exists in
|
| 337 |
+
the planner.
|
| 338 |
+
4. **EJNYC-FVI overlay** on the map sidebar (#9 above) β Riprap's
|
| 339 |
+
exposure Γ DAC designation, two clicks to a powerful editorial
|
| 340 |
+
demo.
|
| 341 |
+
5. **First-query warm-up message** during the cold start: *"loading
|
| 342 |
+
specialists on AMD MI300X β first query after redeploy takes
|
| 343 |
+
~30 s; subsequent queries 5β13 s."*
|
| 344 |
+
|
| 345 |
+
---
|
| 346 |
+
|
| 347 |
+
## Sources
|
| 348 |
+
|
| 349 |
+
- [First Street Foundation β Flood Factor methodology](https://firststreet.org/methodology/flood)
|
| 350 |
+
- [FloodHelpNY β NYC + IDEO consumer tool](https://www.floodhelpny.org/en)
|
| 351 |
+
- [ClimateCheck β flood risk methodology](https://climatecheck.com/risks/flood)
|
| 352 |
+
- [Jupiter Intelligence β ClimateScore Global / FloodScore](https://www.jupiterintel.com/climatescore-global)
|
| 353 |
+
- [FEMA Flood Map Service Center](https://msc.fema.gov/)
|
| 354 |
+
- [NY State β RPL Β§231-b residential lease flood disclosure (2023)](https://www.nysenate.gov/legislation/bills/2021/S5472)
|
| 355 |
+
- [NYSBA β Property Condition Disclosure flood-risk amendment (Mar 2024)](https://nysba.org/breaking-news-new-rules-on-property-condition-disclosure-and-flood-risk-go-into-effect-today/)
|
| 356 |
+
- [CNN β Zillow removes climate risk data under industry pressure (Dec 2025)](https://www.cnn.com/2025/12/02/climate/zillow-climate-data-extreme-weather-first-street-redfin)
|
| 357 |
+
- [NYC Stormwater Resiliency Plan](https://www.nyc.gov/assets/orr/pdf/publications/stormwater-resiliency-plan.pdf)
|
| 358 |
+
- [FloodNet NYC β methodology + sensor network](https://www.floodnet.nyc/methodology)
|
| 359 |
+
- [FloodNet WRR 2024 β peer-reviewed sensor paper](https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2023WR036806)
|
| 360 |
+
- [EJNYC Report β Mayor's Office of Climate & Environmental Justice](https://climate.cityofnewyork.us/ejnyc-report/the-state-of-environmental-justice-in-nyc/)
|
| 361 |
+
- [Flood-LLM β Brisbane case study (MDPI 2026)](https://www.mdpi.com/2071-1050/18/6/2957)
|
| 362 |
+
- [GIS-Integrated Flood LLM (Tandfonline 2024)](https://www.tandfonline.com/doi/full/10.1080/13658816.2024.2306167)
|
| 363 |
+
- [THE CITY β Disadvantaged Communities flood funding (NY Climate Law)](https://www.thecity.nyc/2022/05/02/billions-ny-climate-law-disadvantaged-communities-flood/)
|
| 364 |
+
- [Inman β Redfin First Street integration](https://www.inman.com/2021/02/18/redfin-starts-displaying-flood-risk-data-on-listings/)
|
| 365 |
+
- [FACTUM β citation-hallucination detection in long-form RAG](https://arxiv.org/pdf/2601.05866)
|
| 366 |
+
- [AMD x lablab.ai Developer Hackathon (May 4β10, 2026)](https://lablab.ai/ai-hackathons/amd-developer)
|
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
DECK := deck.md
|
| 2 |
+
THEME := riprap.css
|
| 3 |
+
MARP := marp $(DECK) --theme $(THEME) --allow-local-files
|
| 4 |
+
|
| 5 |
+
.PHONY: all pdf html pptx clean
|
| 6 |
+
|
| 7 |
+
all: pdf html pptx
|
| 8 |
+
|
| 9 |
+
pdf:
|
| 10 |
+
$(MARP) --pdf --output deck.pdf
|
| 11 |
+
|
| 12 |
+
html:
|
| 13 |
+
$(MARP) --html --output deck.html
|
| 14 |
+
|
| 15 |
+
pptx:
|
| 16 |
+
$(MARP) --pptx --output deck.pptx
|
| 17 |
+
|
| 18 |
+
clean:
|
| 19 |
+
rm -f deck.pdf deck.html deck.pptx
|
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Riprap β pitch deck
|
| 2 |
+
|
| 3 |
+
Marp-rendered slides for the AMD x lablab.ai hackathon submission
|
| 4 |
+
video (May 4β10, 2026). Eight slides, ~30 s of voiceover each, sized
|
| 5 |
+
to leave 3+ minutes for the live demo inside the 5-minute video cap.
|
| 6 |
+
|
| 7 |
+
## Files
|
| 8 |
+
|
| 9 |
+
- `deck.md` β slide source (Marp markdown).
|
| 10 |
+
- `riprap.css` β Marp theme that ports the SvelteKit UI's design
|
| 11 |
+
tokens 1:1: IBM Plex (Sans / Mono / Serif), paper register
|
| 12 |
+
(`#FAFAF7`), Stone palette, the `β` accent block.
|
| 13 |
+
- `Makefile` β one-command builds.
|
| 14 |
+
|
| 15 |
+
## Render
|
| 16 |
+
|
| 17 |
+
Marp CLI is the simplest path. Install once:
|
| 18 |
+
|
| 19 |
+
```bash
|
| 20 |
+
npm install -g @marp-team/marp-cli
|
| 21 |
+
```
|
| 22 |
+
|
| 23 |
+
Build any of the three artefacts:
|
| 24 |
+
|
| 25 |
+
```bash
|
| 26 |
+
make pdf # β deck.pdf (best for sharing)
|
| 27 |
+
make html # β deck.html (best for live presenting in browser)
|
| 28 |
+
make pptx # β deck.pptx (best for editing in Keynote / PowerPoint)
|
| 29 |
+
make all # all three
|
| 30 |
+
make clean
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
Or directly:
|
| 34 |
+
|
| 35 |
+
```bash
|
| 36 |
+
marp deck.md --theme riprap.css --pdf --output deck.pdf
|
| 37 |
+
marp deck.md --theme riprap.css --html --output deck.html
|
| 38 |
+
marp deck.md --theme riprap.css --pptx --output deck.pptx
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
## Notes
|
| 42 |
+
|
| 43 |
+
- The theme `@import`s IBM Plex from Google Fonts, so Marp needs
|
| 44 |
+
network access on first build. Cache it to `~/.npm/_marp`/etc by
|
| 45 |
+
building once on a connected machine.
|
| 46 |
+
- The deck targets a 1280Γ720 16:9 frame.
|
| 47 |
+
- Slide 7 is the demo handoff β leave the slide visible while you
|
| 48 |
+
cut to the live screen capture, then return to slide 8 for the
|
| 49 |
+
closing CTA.
|
| 50 |
+
|
| 51 |
+
## Slide map (5-min video budget)
|
| 52 |
+
|
| 53 |
+
| # | Slide | Voiceover beat | Time |
|
| 54 |
+
|---|---|---|---|
|
| 55 |
+
| 1 | Title | Hook: "Riprap. Citation-grounded NYC flood briefings on AMD MI300X." | 0:10 |
|
| 56 |
+
| 2 | Problem | Zillow yanked First Street in Dec 2025; black-box scores hit a wall | 0:30 |
|
| 57 |
+
| 3 | What it is | Show the cited paragraph; "every number cites its source or it doesn't appear" | 0:35 |
|
| 58 |
+
| 4 | Stack | Three of four hackathon tracks; MI300X, vLLM, three NYC fine-tunes | 0:40 |
|
| 59 |
+
| 5 | Receipts | 5 of 5 probe pass, 5.8β13.1 s, Mellea 4/4 every run | 0:30 |
|
| 60 |
+
| 6 | Civic impact | NY disclosure law, DEP $30B plan, EJNYC FVI β open-source matters | 0:25 |
|
| 61 |
+
| 7 | Demo handoff | Cut to the live HF Space; type the query; let the FSM speak | ~3:00 |
|
| 62 |
+
| 8 | Closing CTA | github.com/msradam/riprap-nyc | 0:10 |
|
|
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
marp: true
|
| 3 |
+
theme: riprap
|
| 4 |
+
paginate: true
|
| 5 |
+
size: 16:9
|
| 6 |
+
title: Riprap β Citation-grounded NYC flood briefings
|
| 7 |
+
description: AMD x lablab.ai Developer Hackathon, May 4β10 2026
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
<!-- _class: lead -->
|
| 11 |
+
<!-- _paginate: false -->
|
| 12 |
+
|
| 13 |
+
# Riprap
|
| 14 |
+
|
| 15 |
+
## Citation-grounded NYC flood-exposure briefings, on AMD MI300X.
|
| 16 |
+
|
| 17 |
+
<div class="meta">
|
| 18 |
+
AMD × lablab.ai Developer Hackathon Β· <strong>May 4–10, 2026</strong>
|
| 19 |
+
</div>
|
| 20 |
+
|
| 21 |
+
---
|
| 22 |
+
|
| 23 |
+
## the problem
|
| 24 |
+
|
| 25 |
+
# Climate risk data is a black box.
|
| 26 |
+
|
| 27 |
+
<div class="two-col">
|
| 28 |
+
<div>
|
| 29 |
+
|
| 30 |
+
**First Street.** Score 1β10.
|
| 31 |
+
**ClimateCheck.** Score 1β100.
|
| 32 |
+
**Jupiter.** Enterprise SaaS.
|
| 33 |
+
|
| 34 |
+
A number. A bar chart. A black box.
|
| 35 |
+
|
| 36 |
+
</div>
|
| 37 |
+
<div>
|
| 38 |
+
|
| 39 |
+
> *"Zillow removed flood-risk data from listings in December 2025 after pressure from the real-estate industry."*
|
| 40 |
+
|
| 41 |
+
β CNN, Dec 2 2025
|
| 42 |
+
|
| 43 |
+
</div>
|
| 44 |
+
</div>
|
| 45 |
+
|
| 46 |
+
When a number meets resistance, **the only defense is the audit trail**.
|
| 47 |
+
|
| 48 |
+
---
|
| 49 |
+
|
| 50 |
+
## what riprap is
|
| 51 |
+
|
| 52 |
+
# Every number cites its source. Or it doesn't appear.
|
| 53 |
+
|
| 54 |
+
Type a NYC address → **17 specialists fan out** → one paragraph back, with **`[doc_id]` citations** on every numeric claim. If the model can't cite it, it's silent.
|
| 55 |
+
|
| 56 |
+
<div class="codeblock"><span class="label">Status.</span> 442 East Houston Street, Manhattan, is exposed to flood risk: flooded by Hurricane Sandy in 2012, with recurrent localized flooding evidenced by 19 311 complaints and multiple FloodNet sensor events <span class="cite">[sandy], [nyc311], [floodnet]</span>.
|
| 57 |
+
|
| 58 |
+
<span class="label">Empirical evidence.</span> Sandy flooded this address Oct 29-30, 2012 <span class="cite">[sandy]</span>. 19 flood-related 311 service requests within 200 m over five years <span class="cite">[nyc311]</span>. Three of five FloodNet sensors within 600 m documented events in the past three years <span class="cite">[floodnet]</span>.</div>
|
| 59 |
+
|
| 60 |
+
<span class="smallcaps">Mellea rejection sampling · 4 grounding checks · 4/4 pass = ship</span>
|
| 61 |
+
|
| 62 |
+
---
|
| 63 |
+
|
| 64 |
+
## the stack
|
| 65 |
+
|
| 66 |
+
# Three of four hackathon tracks. One project.
|
| 67 |
+
|
| 68 |
+
<div class="stack">
|
| 69 |
+
<div class="stack-row gpu">
|
| 70 |
+
<div class="lbl">MI300X · vLLM</div>
|
| 71 |
+
<div class="body"><strong>IBM Granite 4.1 8B</strong> — planner + reconciler. ROCm 7. AMD-served.</div>
|
| 72 |
+
</div>
|
| 73 |
+
<div class="stack-row gpu">
|
| 74 |
+
<div class="lbl">MI300X · ROCm</div>
|
| 75 |
+
<div class="body"><strong>Three Apache-2.0 NYC fine-tunes</strong> trained on AMD Developer Cloud:
|
| 76 |
+
<code>Prithvi-EO-2.0-NYC-Pluvial</code>,
|
| 77 |
+
<code>TerraMind-NYC-Adapters</code>,
|
| 78 |
+
<code>Granite-TTM-r2-Battery-Surge</code>.</div>
|
| 79 |
+
</div>
|
| 80 |
+
<div class="stack-row gpu">
|
| 81 |
+
<div class="lbl">MI300X · ROCm</div>
|
| 82 |
+
<div class="body"><strong>Multimodal specialists.</strong> Sentinel-2 chip → Prithvi pluvial seg · TerraMind LULC + Buildings adapters · Granite Embedding 278M · GLiNER typed extraction.</div>
|
| 83 |
+
</div>
|
| 84 |
+
<div class="stack-row app">
|
| 85 |
+
<div class="lbl">FastAPI</div>
|
| 86 |
+
<div class="body"><strong>Burr FSM agent.</strong> 17 specialists fuse FEMA, NYC DEP, NYC 311, FloodNet, NOAA, NWS, USGS HWMs, Sentinel-2. Streamed via SSE.</div>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
|
| 90 |
+
<div style="margin-top: 18px;">
|
| 91 |
+
<span class="pill accent">Agents</span><span class="pill accent">Fine-tuning</span><span class="pill accent">Vision/Multimodal</span><span class="pill">Build-in-public</span>
|
| 92 |
+
</div>
|
| 93 |
+
|
| 94 |
+
---
|
| 95 |
+
|
| 96 |
+
## the receipts
|
| 97 |
+
|
| 98 |
+
# 5 of 5 NYC addresses. Mellea 4/4 every run.
|
| 99 |
+
|
| 100 |
+
<table>
|
| 101 |
+
<thead>
|
| 102 |
+
<tr><th>address</th><th>intent</th><th>wall</th><th>specialists</th><th>grounding</th></tr>
|
| 103 |
+
</thead>
|
| 104 |
+
<tbody>
|
| 105 |
+
<tr><td>442 E Houston St · LES</td><td>address</td><td>7.6 s</td><td>19</td><td>4/4</td></tr>
|
| 106 |
+
<tr><td>80 Pioneer St · Red Hook</td><td>address</td><td>13.1 s</td><td>19</td><td>4/4</td></tr>
|
| 107 |
+
<tr><td>100 Gold St · Manhattan</td><td>address</td><td>11.2 s</td><td>19</td><td>4/4</td></tr>
|
| 108 |
+
<tr><td>Hollis · Queens</td><td>nbhd</td><td>5.8 s</td><td>9</td><td>4/4</td></tr>
|
| 109 |
+
<tr><td>Coney Island · Brooklyn</td><td>nbhd</td><td>9.9 s</td><td>9</td><td>4/4</td></tr>
|
| 110 |
+
</tbody>
|
| 111 |
+
</table>
|
| 112 |
+
|
| 113 |
+
<span class="smallcaps">scripts/probe_addresses.py · vLLM on MI300X · <strong style="color: var(--accent-text);">5.8–13.1 s end-to-end</strong></span>
|
| 114 |
+
|
| 115 |
+
---
|
| 116 |
+
|
| 117 |
+
## why it matters
|
| 118 |
+
|
| 119 |
+
# The civic-tech case.
|
| 120 |
+
|
| 121 |
+
<div class="two-col">
|
| 122 |
+
<div>
|
| 123 |
+
|
| 124 |
+
**NY Property Disclosure Law · March 2024.** Sellers must disclose flood history. Riprap is the citable narrative.
|
| 125 |
+
|
| 126 |
+
**NYC DEP Stormwater Plan · 2024.** $30B priority list, 86 sites. Riprap is the per-NTA evidence layer.
|
| 127 |
+
|
| 128 |
+
**EJNYC Flood Vulnerability Index · 2024.** 35% of state climate spend goes to "disadvantaged communities." Riprap stays open-source so advocacy can audit.
|
| 129 |
+
|
| 130 |
+
</div>
|
| 131 |
+
<div>
|
| 132 |
+
|
| 133 |
+
<p style="font-family: var(--font-serif); font-style: italic; font-size: 24px; color: var(--ink); line-height: 1.4;">No commercial APIs. No closed models. No black-box scores.</p>
|
| 134 |
+
|
| 135 |
+
<p style="font-size: 18px; color: var(--ink-2); margin-top: 16px;">Every dataset is public-record federal, state, or city. Every foundation model is Apache-2.0. Every claim cites its source.</p>
|
| 136 |
+
|
| 137 |
+
</div>
|
| 138 |
+
</div>
|
| 139 |
+
|
| 140 |
+
---
|
| 141 |
+
|
| 142 |
+
## now
|
| 143 |
+
|
| 144 |
+
# Live demo.
|
| 145 |
+
|
| 146 |
+
<div style="margin-top: 24px; font-family: var(--font-mono); font-size: 18px; line-height: 1.6;">
|
| 147 |
+
|
| 148 |
+
<span style="color: var(--accent-text);">βΆ</span> <code>https://lablab-ai-amd-developer-hackathon-riprap-nyc.hf.space</code>
|
| 149 |
+
|
| 150 |
+
<span style="color: var(--accent-text);">βΆ</span> query: <em style="font-family: var(--font-serif); font-style: italic; color: var(--ink); border: none; padding: 0;">442 East Houston Street, Manhattan</em>
|
| 151 |
+
|
| 152 |
+
</div>
|
| 153 |
+
|
| 154 |
+
<div style="margin-top: 36px;">
|
| 155 |
+
<blockquote>17 specialists, ~10 seconds, audit-grade prose. Watch the Stones light up.</blockquote>
|
| 156 |
+
</div>
|
| 157 |
+
|
| 158 |
+
---
|
| 159 |
+
|
| 160 |
+
<!-- _class: cta -->
|
| 161 |
+
|
| 162 |
+
# riprap
|
| 163 |
+
|
| 164 |
+
## github.com/msradam/riprap-nyc
|
| 165 |
+
|
| 166 |
+
Apache-2.0 · public data · AMD MI300X · IBM Granite 4.1 · Mellea grounding
|
| 167 |
+
|
| 168 |
+
<p style="margin-top: 32px; font-family: var(--font-mono); font-size: 14px; letter-spacing: 0.1em; text-transform: uppercase; color: rgba(250,250,247,0.6);">
|
| 169 |
+
AMD × lablab.ai · May 4–10 2026
|
| 170 |
+
</p>
|
|
@@ -0,0 +1,520 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* @theme riprap
|
| 2 |
+
*
|
| 3 |
+
* Marp theme that mirrors the SvelteKit UI's design tokens 1:1.
|
| 4 |
+
* IBM Plex (Sans / Mono / Serif), paper register, Stone palette,
|
| 5 |
+
* the orange accent block from the wordmark. The same CSS variables
|
| 6 |
+
* defined in web/sveltekit/src/lib/tokens.css live here so a print
|
| 7 |
+
* of a slide and a screenshot of the app feel like one document.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@300;400;500;600;700&family=IBM+Plex+Serif:wght@400;600;700&display=swap');
|
| 11 |
+
|
| 12 |
+
:root {
|
| 13 |
+
/* Tier (epistemic) β verified WCAG AA against paper. */
|
| 14 |
+
--tier-empirical: #0B5394;
|
| 15 |
+
--tier-modeled: #2A6FA8;
|
| 16 |
+
--tier-proxy: #6B6B6B;
|
| 17 |
+
--tier-synthetic: #2A6FA8;
|
| 18 |
+
|
| 19 |
+
/* Stone accents β five muted hint-colors keyed to the FSM stones. */
|
| 20 |
+
--stone-cornerstone: #7C6F5E;
|
| 21 |
+
--stone-keystone: #5E6E7C;
|
| 22 |
+
--stone-touchstone: #6B7C66;
|
| 23 |
+
--stone-lodestone: #7C6E5E;
|
| 24 |
+
--stone-capstone: #5E5E6E;
|
| 25 |
+
|
| 26 |
+
/* Neutrals β paper register from the SvelteKit UI. */
|
| 27 |
+
--paper: #FAFAF7;
|
| 28 |
+
--paper-deep: #F2F2EE;
|
| 29 |
+
--ink: #1A1A1A;
|
| 30 |
+
--ink-2: #4A4A4A;
|
| 31 |
+
--ink-3: #6B6B6B;
|
| 32 |
+
--rule: #1A1A1A;
|
| 33 |
+
--rule-soft: #C9C9C5;
|
| 34 |
+
|
| 35 |
+
/* Accent block (the riprap wordmark glyph). */
|
| 36 |
+
--accent: #D17C00;
|
| 37 |
+
--accent-text: #B8620A;
|
| 38 |
+
|
| 39 |
+
--font-sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
|
| 40 |
+
--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;
|
| 41 |
+
--font-serif: "IBM Plex Serif", Georgia, "Times New Roman", serif;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/* ββ Section ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 45 |
+
|
| 46 |
+
section {
|
| 47 |
+
width: 1280px;
|
| 48 |
+
height: 720px;
|
| 49 |
+
padding: 56px 72px;
|
| 50 |
+
background: var(--paper);
|
| 51 |
+
color: var(--ink);
|
| 52 |
+
font-family: var(--font-sans);
|
| 53 |
+
font-size: 24px;
|
| 54 |
+
line-height: 1.45;
|
| 55 |
+
letter-spacing: 0;
|
| 56 |
+
position: relative;
|
| 57 |
+
display: flex;
|
| 58 |
+
flex-direction: column;
|
| 59 |
+
justify-content: flex-start;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/* Persistent wordmark on every slide except title β bottom-left, mono. */
|
| 63 |
+
section::before {
|
| 64 |
+
content: "β riprap";
|
| 65 |
+
position: absolute;
|
| 66 |
+
left: 72px;
|
| 67 |
+
bottom: 32px;
|
| 68 |
+
font-family: var(--font-mono);
|
| 69 |
+
font-size: 13px;
|
| 70 |
+
font-weight: 600;
|
| 71 |
+
letter-spacing: 0.06em;
|
| 72 |
+
text-transform: lowercase;
|
| 73 |
+
color: var(--ink);
|
| 74 |
+
}
|
| 75 |
+
section::before {
|
| 76 |
+
/* the leading block β inherits the accent color via this trick β split
|
| 77 |
+
into two pseudo elements isn't supported in Marp; instead we rely on
|
| 78 |
+
the orange β glyph being colored at render via overprint. */
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/* Slide number β bottom-right, mono. */
|
| 82 |
+
section::after {
|
| 83 |
+
content: attr(data-marpit-pagination) " / " attr(data-marpit-pagination-total);
|
| 84 |
+
position: absolute;
|
| 85 |
+
right: 72px;
|
| 86 |
+
bottom: 32px;
|
| 87 |
+
font-family: var(--font-mono);
|
| 88 |
+
font-size: 12px;
|
| 89 |
+
font-weight: 500;
|
| 90 |
+
letter-spacing: 0.08em;
|
| 91 |
+
color: var(--ink-3);
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/* ββ Headings βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 95 |
+
|
| 96 |
+
h1 {
|
| 97 |
+
font-family: var(--font-serif);
|
| 98 |
+
font-weight: 600;
|
| 99 |
+
font-size: 64px;
|
| 100 |
+
line-height: 1.05;
|
| 101 |
+
letter-spacing: -0.02em;
|
| 102 |
+
margin: 0 0 16px;
|
| 103 |
+
color: var(--ink);
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
h2 {
|
| 107 |
+
font-family: var(--font-mono);
|
| 108 |
+
font-weight: 500;
|
| 109 |
+
font-size: 13px;
|
| 110 |
+
letter-spacing: 0.18em;
|
| 111 |
+
text-transform: uppercase;
|
| 112 |
+
color: var(--ink-3);
|
| 113 |
+
margin: 0 0 24px;
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
h3 {
|
| 117 |
+
font-family: var(--font-sans);
|
| 118 |
+
font-weight: 600;
|
| 119 |
+
font-size: 32px;
|
| 120 |
+
line-height: 1.2;
|
| 121 |
+
margin: 0 0 12px;
|
| 122 |
+
color: var(--ink);
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
/* ββ Body βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 126 |
+
|
| 127 |
+
p {
|
| 128 |
+
margin: 0 0 16px;
|
| 129 |
+
max-width: 60ch;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
strong {
|
| 133 |
+
font-weight: 600;
|
| 134 |
+
color: var(--ink);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
em {
|
| 138 |
+
font-style: normal;
|
| 139 |
+
border-bottom: 2px solid var(--accent);
|
| 140 |
+
padding-bottom: 1px;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
ul, ol {
|
| 144 |
+
margin: 0 0 16px;
|
| 145 |
+
padding-left: 0;
|
| 146 |
+
list-style: none;
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
ul li, ol li {
|
| 150 |
+
position: relative;
|
| 151 |
+
padding-left: 28px;
|
| 152 |
+
margin: 0 0 14px;
|
| 153 |
+
font-size: 22px;
|
| 154 |
+
line-height: 1.4;
|
| 155 |
+
max-width: 60ch;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
ul li::before {
|
| 159 |
+
content: "";
|
| 160 |
+
position: absolute;
|
| 161 |
+
left: 0;
|
| 162 |
+
top: 0.65em;
|
| 163 |
+
width: 14px;
|
| 164 |
+
height: 2px;
|
| 165 |
+
background: var(--ink);
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
ol {
|
| 169 |
+
counter-reset: ol-num;
|
| 170 |
+
}
|
| 171 |
+
ol li {
|
| 172 |
+
counter-increment: ol-num;
|
| 173 |
+
}
|
| 174 |
+
ol li::before {
|
| 175 |
+
content: counter(ol-num, decimal-leading-zero);
|
| 176 |
+
position: absolute;
|
| 177 |
+
left: 0;
|
| 178 |
+
top: 0;
|
| 179 |
+
font-family: var(--font-mono);
|
| 180 |
+
font-size: 13px;
|
| 181 |
+
font-weight: 600;
|
| 182 |
+
letter-spacing: 0.04em;
|
| 183 |
+
color: var(--accent-text);
|
| 184 |
+
width: auto;
|
| 185 |
+
height: auto;
|
| 186 |
+
background: transparent;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
/* ββ Code βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 190 |
+
|
| 191 |
+
code {
|
| 192 |
+
font-family: var(--font-mono);
|
| 193 |
+
font-size: 0.9em;
|
| 194 |
+
background: var(--paper-deep);
|
| 195 |
+
padding: 1px 6px;
|
| 196 |
+
border-radius: 2px;
|
| 197 |
+
color: var(--ink);
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
pre {
|
| 201 |
+
font-family: var(--font-mono);
|
| 202 |
+
font-size: 16px;
|
| 203 |
+
line-height: 1.5;
|
| 204 |
+
background: var(--paper-deep);
|
| 205 |
+
border-left: 3px solid var(--accent);
|
| 206 |
+
padding: 18px 22px;
|
| 207 |
+
margin: 12px 0;
|
| 208 |
+
color: var(--ink);
|
| 209 |
+
border-radius: 2px;
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
pre code {
|
| 213 |
+
background: transparent;
|
| 214 |
+
padding: 0;
|
| 215 |
+
font-size: inherit;
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
/* ββ Quote / aside / strapline ββββββββββββββββββββββββββββββββββββββββββ */
|
| 219 |
+
|
| 220 |
+
blockquote {
|
| 221 |
+
font-family: var(--font-serif);
|
| 222 |
+
font-style: italic;
|
| 223 |
+
font-size: 28px;
|
| 224 |
+
line-height: 1.35;
|
| 225 |
+
color: var(--ink-2);
|
| 226 |
+
border-left: 3px solid var(--rule);
|
| 227 |
+
padding: 4px 0 4px 24px;
|
| 228 |
+
margin: 24px 0;
|
| 229 |
+
max-width: 56ch;
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
/* ββ Rules ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 233 |
+
|
| 234 |
+
hr {
|
| 235 |
+
border: 0;
|
| 236 |
+
border-top: 1px solid var(--rule-soft);
|
| 237 |
+
margin: 24px 0;
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
/* ββ Table ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 241 |
+
|
| 242 |
+
table {
|
| 243 |
+
border-collapse: collapse;
|
| 244 |
+
font-family: var(--font-sans);
|
| 245 |
+
font-size: 18px;
|
| 246 |
+
margin: 12px 0;
|
| 247 |
+
width: 100%;
|
| 248 |
+
}
|
| 249 |
+
th {
|
| 250 |
+
text-align: left;
|
| 251 |
+
font-family: var(--font-mono);
|
| 252 |
+
font-size: 12px;
|
| 253 |
+
font-weight: 500;
|
| 254 |
+
letter-spacing: 0.1em;
|
| 255 |
+
text-transform: uppercase;
|
| 256 |
+
color: var(--ink-3);
|
| 257 |
+
padding: 10px 12px;
|
| 258 |
+
border-bottom: 1px solid var(--rule);
|
| 259 |
+
}
|
| 260 |
+
td {
|
| 261 |
+
padding: 12px;
|
| 262 |
+
border-bottom: 1px solid var(--rule-soft);
|
| 263 |
+
vertical-align: top;
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
/* ββ Title slide variant (lead) βββββββββββββββββββββββββββββββββββββββββ */
|
| 267 |
+
|
| 268 |
+
section.lead {
|
| 269 |
+
display: flex;
|
| 270 |
+
flex-direction: column;
|
| 271 |
+
justify-content: center;
|
| 272 |
+
background: var(--paper);
|
| 273 |
+
padding-left: 96px;
|
| 274 |
+
}
|
| 275 |
+
section.lead::before {
|
| 276 |
+
content: "β";
|
| 277 |
+
position: absolute;
|
| 278 |
+
left: 96px;
|
| 279 |
+
top: 80px;
|
| 280 |
+
bottom: auto;
|
| 281 |
+
font-family: var(--font-mono);
|
| 282 |
+
font-size: 64px;
|
| 283 |
+
font-weight: 600;
|
| 284 |
+
color: var(--accent);
|
| 285 |
+
line-height: 1;
|
| 286 |
+
}
|
| 287 |
+
section.lead h1 {
|
| 288 |
+
font-size: 96px;
|
| 289 |
+
line-height: 0.95;
|
| 290 |
+
letter-spacing: -0.025em;
|
| 291 |
+
margin: 0 0 8px;
|
| 292 |
+
}
|
| 293 |
+
section.lead h2 {
|
| 294 |
+
font-family: var(--font-serif);
|
| 295 |
+
font-style: italic;
|
| 296 |
+
font-weight: 400;
|
| 297 |
+
font-size: 32px;
|
| 298 |
+
letter-spacing: 0;
|
| 299 |
+
text-transform: none;
|
| 300 |
+
color: var(--ink-2);
|
| 301 |
+
margin: 0 0 32px;
|
| 302 |
+
max-width: 28ch;
|
| 303 |
+
}
|
| 304 |
+
section.lead .meta {
|
| 305 |
+
font-family: var(--font-mono);
|
| 306 |
+
font-size: 13px;
|
| 307 |
+
font-weight: 500;
|
| 308 |
+
letter-spacing: 0.12em;
|
| 309 |
+
text-transform: uppercase;
|
| 310 |
+
color: var(--ink-3);
|
| 311 |
+
margin-top: 32px;
|
| 312 |
+
}
|
| 313 |
+
section.lead .meta strong {
|
| 314 |
+
color: var(--ink);
|
| 315 |
+
font-weight: 600;
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
/* ββ Closing slide variant ββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 319 |
+
|
| 320 |
+
section.cta {
|
| 321 |
+
background: var(--ink);
|
| 322 |
+
color: var(--paper);
|
| 323 |
+
display: flex;
|
| 324 |
+
flex-direction: column;
|
| 325 |
+
justify-content: center;
|
| 326 |
+
padding-left: 96px;
|
| 327 |
+
}
|
| 328 |
+
section.cta::before {
|
| 329 |
+
content: "β";
|
| 330 |
+
color: var(--accent);
|
| 331 |
+
font-size: 64px;
|
| 332 |
+
position: absolute;
|
| 333 |
+
left: 96px;
|
| 334 |
+
top: 80px;
|
| 335 |
+
bottom: auto;
|
| 336 |
+
}
|
| 337 |
+
section.cta::after { color: rgba(250, 250, 247, 0.5); }
|
| 338 |
+
section.cta h1 {
|
| 339 |
+
font-size: 80px;
|
| 340 |
+
color: var(--paper);
|
| 341 |
+
margin: 0 0 16px;
|
| 342 |
+
}
|
| 343 |
+
section.cta h2 {
|
| 344 |
+
color: rgba(250, 250, 247, 0.7);
|
| 345 |
+
}
|
| 346 |
+
section.cta p {
|
| 347 |
+
font-size: 22px;
|
| 348 |
+
color: rgba(250, 250, 247, 0.85);
|
| 349 |
+
}
|
| 350 |
+
section.cta a, section.cta code {
|
| 351 |
+
color: var(--accent);
|
| 352 |
+
background: transparent;
|
| 353 |
+
padding: 0;
|
| 354 |
+
}
|
| 355 |
+
|
| 356 |
+
/* ββ Two-column variant βββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 357 |
+
|
| 358 |
+
section.split {
|
| 359 |
+
padding-top: 64px;
|
| 360 |
+
}
|
| 361 |
+
section.split .columns {
|
| 362 |
+
display: grid;
|
| 363 |
+
grid-template-columns: 1fr 1fr;
|
| 364 |
+
gap: 56px;
|
| 365 |
+
margin-top: 12px;
|
| 366 |
+
}
|
| 367 |
+
section.split .columns > div h3 {
|
| 368 |
+
font-size: 22px;
|
| 369 |
+
margin-bottom: 8px;
|
| 370 |
+
}
|
| 371 |
+
section.split .columns > div p,
|
| 372 |
+
section.split .columns > div li {
|
| 373 |
+
font-size: 18px;
|
| 374 |
+
line-height: 1.45;
|
| 375 |
+
}
|
| 376 |
+
|
| 377 |
+
/* ββ Stone-tinted heading rules (subtle) ββββββββββββββββββββββββββββββββ */
|
| 378 |
+
|
| 379 |
+
section[data-stone="cornerstone"] h1 { border-bottom: 4px solid var(--stone-cornerstone); padding-bottom: 8px; display: inline-block; }
|
| 380 |
+
section[data-stone="keystone"] h1 { border-bottom: 4px solid var(--stone-keystone); padding-bottom: 8px; display: inline-block; }
|
| 381 |
+
section[data-stone="touchstone"] h1 { border-bottom: 4px solid var(--stone-touchstone); padding-bottom: 8px; display: inline-block; }
|
| 382 |
+
section[data-stone="lodestone"] h1 { border-bottom: 4px solid var(--stone-lodestone); padding-bottom: 8px; display: inline-block; }
|
| 383 |
+
section[data-stone="capstone"] h1 { border-bottom: 4px solid var(--stone-capstone); padding-bottom: 8px; display: inline-block; }
|
| 384 |
+
|
| 385 |
+
/* ββ Big-stat panel βββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 386 |
+
|
| 387 |
+
.stat {
|
| 388 |
+
display: flex;
|
| 389 |
+
flex-direction: column;
|
| 390 |
+
gap: 4px;
|
| 391 |
+
}
|
| 392 |
+
.stat-value {
|
| 393 |
+
font-family: var(--font-serif);
|
| 394 |
+
font-weight: 600;
|
| 395 |
+
font-size: 56px;
|
| 396 |
+
line-height: 1;
|
| 397 |
+
color: var(--ink);
|
| 398 |
+
letter-spacing: -0.02em;
|
| 399 |
+
}
|
| 400 |
+
.stat-label {
|
| 401 |
+
font-family: var(--font-mono);
|
| 402 |
+
font-size: 11px;
|
| 403 |
+
font-weight: 500;
|
| 404 |
+
letter-spacing: 0.14em;
|
| 405 |
+
text-transform: uppercase;
|
| 406 |
+
color: var(--ink-3);
|
| 407 |
+
}
|
| 408 |
+
|
| 409 |
+
/* ββ Stack diagram (slide 4 visual) βββββββββββββββββββββββββββββββββββββ */
|
| 410 |
+
|
| 411 |
+
.stack {
|
| 412 |
+
display: grid;
|
| 413 |
+
grid-template-columns: 1fr;
|
| 414 |
+
gap: 8px;
|
| 415 |
+
margin-top: 8px;
|
| 416 |
+
}
|
| 417 |
+
.stack-row {
|
| 418 |
+
background: var(--paper-deep);
|
| 419 |
+
border-left: 3px solid var(--rule);
|
| 420 |
+
padding: 14px 18px;
|
| 421 |
+
font-size: 18px;
|
| 422 |
+
display: grid;
|
| 423 |
+
grid-template-columns: 180px 1fr;
|
| 424 |
+
gap: 24px;
|
| 425 |
+
align-items: baseline;
|
| 426 |
+
}
|
| 427 |
+
.stack-row .lbl {
|
| 428 |
+
font-family: var(--font-mono);
|
| 429 |
+
font-size: 12px;
|
| 430 |
+
font-weight: 500;
|
| 431 |
+
letter-spacing: 0.08em;
|
| 432 |
+
text-transform: uppercase;
|
| 433 |
+
color: var(--ink-3);
|
| 434 |
+
}
|
| 435 |
+
.stack-row .body {
|
| 436 |
+
font-family: var(--font-sans);
|
| 437 |
+
color: var(--ink);
|
| 438 |
+
}
|
| 439 |
+
.stack-row.gpu { border-left-color: var(--accent); }
|
| 440 |
+
.stack-row.gpu .lbl { color: var(--accent-text); }
|
| 441 |
+
.stack-row.app { border-left-color: var(--tier-empirical); }
|
| 442 |
+
|
| 443 |
+
/* ββ Small caps utility βββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 444 |
+
|
| 445 |
+
.smallcaps {
|
| 446 |
+
font-family: var(--font-mono);
|
| 447 |
+
font-size: 13px;
|
| 448 |
+
font-weight: 500;
|
| 449 |
+
letter-spacing: 0.12em;
|
| 450 |
+
text-transform: uppercase;
|
| 451 |
+
color: var(--ink-3);
|
| 452 |
+
}
|
| 453 |
+
|
| 454 |
+
/* ββ Two-column layout (used on slides 2, 6) βββββββββββββββββββββββββββ */
|
| 455 |
+
|
| 456 |
+
.two-col {
|
| 457 |
+
display: grid;
|
| 458 |
+
grid-template-columns: 1fr 1fr;
|
| 459 |
+
gap: 56px;
|
| 460 |
+
margin-top: 16px;
|
| 461 |
+
}
|
| 462 |
+
.two-col > div p,
|
| 463 |
+
.two-col > div li {
|
| 464 |
+
font-size: 20px;
|
| 465 |
+
line-height: 1.45;
|
| 466 |
+
max-width: none;
|
| 467 |
+
}
|
| 468 |
+
.two-col > div p:last-child,
|
| 469 |
+
.two-col > div li:last-child {
|
| 470 |
+
margin-bottom: 0;
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
/* ββ Pseudo-codeblock (HTML-rendered, so inline spans keep color) βββββββ */
|
| 474 |
+
|
| 475 |
+
.codeblock {
|
| 476 |
+
font-family: var(--font-mono);
|
| 477 |
+
font-size: 15px;
|
| 478 |
+
line-height: 1.55;
|
| 479 |
+
background: var(--paper-deep);
|
| 480 |
+
border-left: 3px solid var(--accent);
|
| 481 |
+
padding: 18px 22px;
|
| 482 |
+
margin: 12px 0;
|
| 483 |
+
color: var(--ink);
|
| 484 |
+
border-radius: 2px;
|
| 485 |
+
}
|
| 486 |
+
.codeblock p {
|
| 487 |
+
margin: 0 0 12px;
|
| 488 |
+
}
|
| 489 |
+
.codeblock p:last-child {
|
| 490 |
+
margin-bottom: 0;
|
| 491 |
+
}
|
| 492 |
+
.codeblock .cite {
|
| 493 |
+
color: var(--accent-text);
|
| 494 |
+
font-weight: 600;
|
| 495 |
+
}
|
| 496 |
+
.codeblock .label {
|
| 497 |
+
font-weight: 700;
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
/* ββ Highlight pill βββββββββββββββββββββββββββββββββββββββββββββββββββββ */
|
| 501 |
+
|
| 502 |
+
.pill {
|
| 503 |
+
display: inline-block;
|
| 504 |
+
font-family: var(--font-mono);
|
| 505 |
+
font-size: 12px;
|
| 506 |
+
font-weight: 500;
|
| 507 |
+
letter-spacing: 0.1em;
|
| 508 |
+
text-transform: uppercase;
|
| 509 |
+
background: var(--paper-deep);
|
| 510 |
+
border: 1px solid var(--rule-soft);
|
| 511 |
+
padding: 4px 10px;
|
| 512 |
+
border-radius: 100px;
|
| 513 |
+
color: var(--ink-2);
|
| 514 |
+
margin-right: 6px;
|
| 515 |
+
}
|
| 516 |
+
.pill.accent {
|
| 517 |
+
background: var(--accent);
|
| 518 |
+
color: var(--paper);
|
| 519 |
+
border-color: var(--accent);
|
| 520 |
+
}
|