diff --git a/PROJECT.md b/PROJECT.md
index 333cdc8..5d0ffdc 100644
--- a/PROJECT.md
+++ b/PROJECT.md
@@ -388,6 +388,17 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu
`assets/_sheet_crowd1.png` is the pre-brightening original of the FIRST crowd, kept for history.
## Settled feel decisions — do not regress silently
+- **The frame is dark at BOTH ends.** The run-off apron already took the bottom of the screen down
+ to near-black below the near baseline; `TUNE.standTop` does the same at the top, so the stand fades
+ UP out of the dark instead of being cut off at y = 0. Oliver, 2026-08-21: "the bottom of the screen
+ falls off into a black tone.. please make the top come out of a black tone." It also gives the
+ scoreboard something to sit on.
+- **Every HUD element on top of the picture carries a drop shadow** (`render.hudShadow`, and the same
+ numbers in CSS on the quit chip): the board, the game/sets panel, the BLOOD panel and each rack
+ tile. They sit on a crowd, and half the overlay lifting off the backdrop while the other half does
+ not is worse than neither. Canvas shadow offsets are NOT scaled by the transform — they are device
+ pixels — so `hudShadow` multiplies by `RES`, or a 3 px shadow reads as three quarters of a logical
+ pixel on a 4x phone. It is sticky state: turn it off the moment the element is drawn.
- **Far bodies draw off a flattened scale curve; the camera holds still.** `TUNE.farK` 0.25
(render.js `farB`): the court projects true, bodies grow toward the far baseline (~20% at the
back), anchored so the near player never changes. Oliver: *"new perspective is really good —
diff --git a/index.html b/index.html
index 741a4c9..c4a1609 100644
--- a/index.html
+++ b/index.html
@@ -99,7 +99,10 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
#quit button { width: calc(var(--hud, 8px) * 4); height: calc(var(--hud, 8px) * 4);
border-radius: 3px; display: grid; place-items: center;
background: rgba(8,26,18,0.82); border: 1px solid rgba(63,149,96,0.35);
- box-shadow: inset 0 1px 0 rgba(242,234,214,0.10), 0 1px 2px rgba(0,0,0,0.45);
+ /* the same drop shadow the canvas HUD carries (render.hudShadow): the chip sits on
+ the crowd like the scoreboard does, and half the overlay lifting off the
+ backdrop while the other half does not is worse than neither. */
+ box-shadow: inset 0 1px 0 rgba(242,234,214,0.10), 3px 3px 3px rgba(0,0,0,0.68);
/* a plain X, not ✕: Silkscreen has no U+2715, so the dingbat fell back to the
system font and drew a smooth glyph inside a pixel HUD */
color: var(--cream); font: 700 14px Silkscreen, monospace; line-height: 1;
@@ -661,6 +664,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat
-
+