# BUILD SPEC â€” "Umbra Approach over Castrojeriz" (drone @ 3 km, 12 Aug 2026)

Animated HTML-canvas simulation. Camera is a stationary drone at 3 km altitude, **facing WNW (azimuth 282.2Â°)**, watching the total-solar-eclipse umbra sweep in low over the meseta. All contact times CEST (UTC+2). Single authoritative source resolved below.

**Conflict resolutions (decisive):**
- **Contact times â†’ use Xavier Jubier (xjubier.free.fr)**, computed at 42.288 N / 4.142 W, elev 827 m, Î”T 69.1 s. Rejected tutiempo's set (runs ~6 s early because it assumes ~sea-level elevation â€” matters for a near-horizon sunset eclipse).
- **Umbral velocity â†’ 2.675 km/s** (Jubier). The earlier "2.673" was a rounding artifact; difference is immaterial.
- **C4 / partial end â†’ 21:22:01 with Sun at âˆ’0.9Â° (below horizon, NOT observable).** Rejected tutiempo's 21:18:00; both agree the partial phase ends unseen after sunset. Do not render anything after sunset.
- **Obscuration/magnitude â†’ 100.00% / 1.01621** (Jubier). Rejected tutiempo's "103.3% covered" as a mislabeled/anomalous figure.

---

## 1) Verified numbers table

| Quantity | Value | Notes |
|---|---|---|
| Site | Castrojeriz, 42.288 N, 4.142 W, 827 m | Jubier exact-point |
| C1 (first contact) | **19:33:28** | Sun alt +18.7Â°, az 273.2Â° (off-screen, pre-shot) |
| **C2 (totality begins)** | **20:28:36** | Sun alt **+8.6Â°**, az **282.2Â°** â€” animation anchor **t = 0** |
| Maximum eclipse | 20:29:29 | Sun alt +8.5Â°, az 282.3Â° |
| C3 (totality ends) | **20:30:22** | Sun alt +8.3Â°, az 282.5Â° â†’ **t = +106 s** |
| Sunset | 21:22 | Sun alt âˆ’0.8Â° |
| C4 (partial end) | 21:22:01 | Sun alt âˆ’0.9Â° â€” below horizon, unobserved |
| Totality duration | **106.0 s** (1m46s) | |
| Umbral velocity (ground) | **2.675 km/s** | constant ground speed |
| Path width | 297.1 km | |
| Obscuration / magnitude | 100.00% / 1.01621 | Moon/Sun ratio 1.03318; umbral depth 97.74% |
| Drone altitude H | 3 km | |
| Horizon distance | **195.5 km** | geometric horizon from 3 km |
| Horizon depression | 1.8Â° below true level | terrain skyline sits below the alt-0Â° line |
| Shadow first visible | 195.5 km out, **73.1 s before C2 (t â‰ˆ âˆ’73)** | edge crosses the geometric horizon |
| Umbra approach bearing | from WNW (az 282Â°), same side as Sun | ground track runs bearing ~110â€“120Â° (NWâ†’SE) |
| Footprint elongation | Ã—6.7 along track (1/sin 8.6Â°) | wall is a horizon-spanning band, NOT a compact circle; edge is SOFT/diffuse (~1â€“2Â° blur) |
| Recommended FOV | **84Â° horizontal** (â‰ˆ47.25Â° vertical @ 16:9) | |

---

## 2) Phase-by-phase palette (hex)

Interpolate linearly between keyframes; hold within a phase.

| Phase | Sky top (toward zenith) | Sky at horizon | Land / meseta | Sun-glow / corona |
|---|---|---|---|---|
| **Deep-partial** (t â‰¤ âˆ’45) | `#3E5F8A` | `#EBCB8B` | `#B4A06E` | `#FFD27E` |
| **Approach** (wall arriving, âˆ’45â†’âˆ’2) | `#1E2A4A` | `#C96A3A` | `#454F63` | `#E8641F` |
| **Totality** (0â†’~100) | `#14152E` | `#E79A55` | `#22243F` | `#F4E3BE` |
| **Egress** (diamond ring / return, 106â†’120) | `#2C3A63` | `#F0B36A` | `#3A4258` | `#FFFDF4` |

**Horizon-ring color detail (360Â° band, only WNW arc in frame):** brightest/most saturated dead-center (WNW): salmon `#E79A55` grading to a redder `#D46A3E` right at the skyline; cools to peach/old-rose toward frame edges. Ring is only a few degrees tall, fading up into blue-violet within 10â€“15Â° of the horizon.

**Sky is inverted from daytime:** darkest at top of frame (violet-indigo, "hole in the sky" skewed toward the WNW Sun), brightening steadily downward to the warm horizon ring. High contrast, strongly domed.

---

## 3) Scene composition (WNW-facing, 84Â° FOV, 16:9)

**Coordinate convention** (fractions of canvas WÃ—H, origin top-left):
- `x = 0.5 + (az_obj âˆ’ 282.2)/84`
- `y = 0.68 âˆ’ alt_obj/47.25`   â†’ true horizon (alt 0Â°) at **y = 0.68**
- **Terrain skyline** (1.8Â° depressed) at **y â‰ˆ 0.72**; land fills y = 0.72 â†’ 1.0.

Layers, back to front:

1. **Sky gradient / dome** â€” vertical gradient using the phase palette (top = sky-top hex, bottom = horizon hex). Darkest patch biased toward center-top (the umbra "hole"), which is above the eclipsed Sun. Steepest, warmest gradient in the WNW (center of frame).
2. **360Â° horizon glow ring** â€” luminous skirt hugging the skyline (y â‰ˆ 0.68â€“0.72), a few degrees tall, brightest at center (`#E79A55`â†’`#D46A3E`), cooling to frame edges. This is the signature feature; keep it lit through totality.
3. **Low eclipsed Sun** â€” **horizontally centered (x â‰ˆ 0.50), y â‰ˆ 0.50** (8.6Â° above the horizon). Render as a **flattened black oval** (differential refraction squashes it vertically, so the disk is wider than tall). Corona = **warm pearly ivoryâ†’yellow-orange** (`#F4E3BE`/`#EAD3A0`), **inner corona + near-Sun streamers only** (outer streamers extinguished by 5â€“7 airmasses), and visibly **wider than tall**. Add vivid **pink-red prominences/chromosphere flecks** on the limb. Optional sub-pixel drift: Sun descends 8.6Â°â†’8.3Â° and az +0.3Â° across totality (negligible; can ignore).
4. **Land / meseta** â€” fills y > 0.72; flat plateau with distant sierras and low valley haze silhouetted against the ring. Use per-phase land hex. From altitude, the shadow's curved edge visibly races across this terrain a few seconds before engulfing the drone.
5. **Castle hill silhouette (Castrojeriz)** â€” dark triangular hill topped by a ruined keep breaking the skyline, placed **right-of-center (x â‰ˆ 0.62)** so it does not occult the Sun (center) or the left-side sky beacons. Pure silhouette against the warm ring.
6. **The shadow wall** â€” approaches from dead center (WNW = camera bearing), so it **rises vertically up the frame** rather than sweeping sideways. A **soft, gradational** band (1â€“2Â° blur, NOT a knife edge): cobalt/slate-blue `#3A4F7A`-ish at its top, down through indigo to charcoal, with a **compressed glowing-orange underline** where sunlit air still shows beneath the edge. First appears as a low dark strip on the horizon at t=âˆ’73; climbs and accelerates (see Â§4) until it sweeps over the top of frame at C2. Darkens fastest toward WNW (center).
7. **Shadow bands** (optional, ~t=âˆ’12â†’âˆ’2 and ~+100â†’+112) â€” pale neutral-grey moving stripes, low opacity (few-% contrast), ~hand-span apart, drifting roughly parallel to the thin crescent. Overlay on land/haze. NOT bold black bars.

---

## 4) Animation timeline (t relative to C2; C2 = t 0 = 20:28:36)

**Apparent-motion law (critical):** the wall's angular rise-rate scales ~1/(xÂ²+HÂ²), so it **crawls on the horizon, then rockets in the final seconds**. Drive the shadow boundary's vertical screen-climb by this table, not linearly in time:

| Ground distance x | Sweep rate |
|---|---|
| 195 km (horizon) | 0.012 Â°/s |
| 80 km | 0.07 Â°/s |
| 32 km | 0.44 Â°/s |
| 16 km | 1.7 Â°/s |
| 5 km | 13.5 Â°/s |
| last km | 46 Â°/s |

(`x = |t|Â·2.675 km`; >1000Ã— perceived acceleration over the approach.)

| t (s) | Local time | Beat | Visual state |
|---|---|---|---|
| âˆ’90 | 20:27:06 | Deep partial; edge ~241 km (beyond horizon) | Thin solar crescent low WNW; flat metallic colour-drained twilight; WNW sky staining steel-grey/violet ahead of the ground edge. **Deep-partial palette.** |
| âˆ’73 | 20:27:23 | Edge crosses horizon (195 km) | A distinct **soft dark band** materialises low on the WNW skyline; appears near-stationary, a bruise-coloured strip beneath pale sky. |
| âˆ’60 | 20:27:36 | Wall defined (160 km) | Broad diffuse dark band spans the WNW horizon, elongated; colour still draining; wall still crawls (~0.02Â°/s). |
| âˆ’45 | 20:27:51 | 360Â° glow forming (120 km) | Wall thickens/rises; orange-yellow false-sunset ring wraps the horizon beneath it; chill sets in; meseta turns grey-green. **Begin blend deep-partial â†’ approach.** |
| âˆ’30 | 20:28:06 | First stars/planets (80 km) | Wall visibly rising; zenith deepens to dark blue; **Venus + brightest stars pop out**; faint shadow bands may begin. |
| âˆ’20 | 20:28:16 | Acceleration begins (53 km) | Wall looms taller, motion obviously quickening (~0.16Â°/s); deep twilight; Sun a dwindling sliver. |
| âˆ’12 | 20:28:24 | Onrushing curtain (32 km) | Light drops fast; wall sweeps forward as a palpable curtain (~0.45Â°/s); last thin crescent burning WNW; shadow bands vivid. |
| âˆ’6 | 20:28:30 | Speed spikes (16 km) | Sweep-rate past 1.7Â°/s and climbing; Baily's beads break up the crescent. |
| âˆ’2 | 20:28:34 | Umbra overruns foreground (5 km) | Wall races over near land (~13.5Â°/s), tipping from horizon strip toward overhead; brightness collapses. **Rapid blend approach â†’ totality.** |
| **0** | **20:28:36** | **C2 â€” diamond ring + corona** | Brilliant diamond ring flashes on the Sun's E limb, snaps out; **flattened pearly-ivory corona** blazes around the inky oval disk; drone fully engulfed; **360Â° orange ring ignites**; corona low (8.6Â°) over the WNW. **Totality palette.** |
| +8 | 20:28:44 | Chromosphere/prominences | Pink chromosphere + flame prominences on the limb; inner streamers reach out; meseta deep blue-grey, eerie stillness. |
| +30 | 20:29:06 | Deep totality | Full (extinction-limited) corona; stars/planets scattered; sunset ring persists 360Â°; ground near darkest. |
| +53 | 20:29:29 | Mid-totality / max darkness | Steadiest, darkest moment; umbra centre overhead, already moving toward ESE; corona symmetric. |
| +80 | 20:29:56 | Late totality, WNW limb pales | WNW lunar limb begins to brighten; corona asymmetric; horizon glow strengthens toward WNW. |
| +100 | 20:30:16 | Baily's beads return | Bright beads glint on the W limb; corona fades that side; land edges toward re-illumination. |
| **+106** | **20:30:22** | **C3 â€” second diamond ring** | Dazzling diamond ring bursts on the W (WNW) limb; corona vanishes; trailing edge sweeps off to ESE (behind camera); single blinding flash. **Begin blend â†’ egress palette.** |
| +112 | 20:30:28 | Light floods back (trailing edge ~16 km, receding) | Daylight surges from WNW; colour/warmth return fast; thin re-lit crescent low WNW; receding wall shrinks on ESE horizon behind drone. |
| +120 | 20:30:36 | End of shot (trailing edge ~37 km) | Plateau re-colours/brightens; widening crescent low WNW; planets fade from paling sky; departed umbra a thin dark band low on ESE horizon. Shot ends. |

---

## 5) Visible planets/stars â€” screen placement

Camera faces az 282.2Â°, 84Â° FOV. Positions below use Â§3 mapping. **Only three objects fall inside the WNW frame; all others are behind the camera or beyond the left edge** â€” do not render them (listed for completeness).

| Object | Mag | Az / Alt | In frame? | Screen (x, y) | Render notes |
|---|---|---|---|---|---|
| **Eclipsed Sun** | â€” | 282.2Â° / 8.6Â° | âœ… center-low | **(0.50, 0.50)** | Anchor; flattened corona (Â§3). |
| **Venus** | âˆ’4.0 | 240Â° / 29Â° | âœ… extreme left edge | **(0.00, 0.07)** | THE dominant beacon, brilliant white; appears well before totality, blazes through. Sits exactly on the left boundary at 84Â° FOV â€” see decision below. |
| **Regulus** | 1.4 | 273Â° / 14Â° | âœ… upper-left of Sun | **(0.39, 0.38)** | Lone star hugging the black Sun (~9Â° upper-left) â€” cinematic. |
| Arcturus | âˆ’0.05 | 224Â° / 62Â° | âŒ just past left edge & too high | (âˆ’0.19, âˆ’0.63) | Would need FOV widen/pan. |
| Spica | 1.0 | 217Â° / 29Â° | âŒ past left edge | (âˆ’0.28, 0.07) | Faint, marginal. |
| Vega | 0.0 | 79Â° / 56Â° | âŒ behind camera (E/ENE) | â€” | Summer Triangle, anti-Sun side. |
| Deneb | 1.25 | 58Â° / 37Â° | âŒ behind camera | â€” | |
| Altair | 0.8 | 101Â° / 26Â° | âŒ behind camera | â€” | |
| Jupiter / Mercury / Mars / Saturn | â€” | â€” | âŒ none visible | â€” | Jupiter/Mars are the Aug-15 *dawn* lineup; Mercury drowned at WNW horizon post-inferior-conjunction; Saturn still ~28Â° below E horizon. **Do not render.** |

**Venus framing decision (recommended):** keep the Sun dead-centered (strongest composition per the "low Sun in frame" requirement) and let Venus ride the extreme left edge as a corner beacon. If Venus needs breathing room, either nudge camera center to **az ~279Â°** (Venus â†’ xâ‰ˆ0.03, Sun â†’ xâ‰ˆ0.54) or widen FOV to ~110Â° to also bring in Spica/Arcturus. Default: **282.2Â° center, 84Â° FOV, Venus at left edge.**

Star/planet visibility: fade Venus in around tâ‰ˆâˆ’45, fainter stars (Regulus) around tâ‰ˆâˆ’30; hold through totality; fade all out tâ‰ˆ+106â†’+120.

---

## 6) HUD overlay

Persistent telemetry, unobtrusive (monospace, low-opacity panel):

| Field | Source / behavior |
|---|---|
| **Local time** | CEST clock, `HH:MM:SS`. Runs 20:27:06 (t=âˆ’90) â†’ 20:30:36 (t=+120). C2 = 20:28:36, C3 = 20:30:22. |
| **Sun alt / az** | `ALT 8.6Â° Â· AZ 282.2Â° (WNW)`. Optionally tick alt 8.6â†’8.3Â° and az 282.2â†’282.5Â° across totality. |
| **Shadow distance** | `UMBRA 195 km` etc. For t<0: `dist = |t|Â·2.675 km` (approaching WNW). For t>+106: `dist = (tâˆ’106)Â·2.675 km` (receding ESE). At t=0: `OVERHEAD`. |
| **Closing speed** | `2.675 km/s` ground speed (constant). Optionally also show apparent sweep-rate from Â§4 table (e.g. `0.44Â°/s`) to sell the acceleration. Flip label to `RECEDING ESE` after C3. |
| **Phase label** | `DEEP PARTIAL` (â‰¤âˆ’45) â†’ `SHADOW APPROACHING` (âˆ’45â†’âˆ’2) â†’ `DIAMOND RING` (âˆ’2â†’+1) â†’ `TOTALITY` (+1â†’+100) â†’ `BAILY'S BEADS` (+100â†’+106) â†’ `DIAMOND RING` (+106â†’+108) â†’ `EGRESS` (+108â†’+120). |

Optional secondary readouts: altitude `H 3.0 km`, FOV `84Â°`, totality countdown `Tâˆ’073 â€¦ T+000 â€¦ T+106`.

---

**Physics-consistency check (verified):** `dist = |t|Â·2.675 km` reproduces every FRAMING annotation (tâˆ’73â†’195 km, tâˆ’30â†’80 km, tâˆ’2â†’5 km); sweep-rate `HÂ·v/(xÂ²+HÂ²)` with H=3, v=2.675 reproduces the Â§4 table (0.012Â°/s @195 km, 13.5Â°/s @5 km, 46Â°/s @1 km). Trailing-edge post-C3 distances match (t+112â†’16 km, t+120â†’37 km). Timeline is internally coherent â€” build directly from these formulas.
