
#app{position:fixed;inset:0;background:#000}
/* THE FRAME IS THE HOUSE'S, AND ROUND 1 PUT IT ON THE WRONG OBJECT.
   Measured against both siblings at 1400x860: Mines and Plinko are inset 14px,
   radius 20, `1px solid #22252F`, with a FRAMELESS dock floating on the board.
   Round 1 shipped a bleeding frame with no border and a bordered, rounded dock
   — the house's window treatment moved onto the panel inside it. Both halves
   are corrected here and in #dock below.

   ONE ROOM, TWO GRADIENTS, NO CANVAS. Mines bakes a plate because it dithers a
   25-tile field; this frame has one bright object on it and a CSS radial is the
   whole requirement. --cx/--cy are written by layout().

   THE GROUND'S TEMPERATURE IS MEASURED, NOT ASSUMED. All three reviewers called
   a "red-tinted vignette" the strongest not-our-operator tell and said both
   house games have one. Sampled instead — the darkest 40% of 6px patches across
   each full frame — they do not: Plinko is R-B -4.05 (COOL), Bird Crash -2.36,
   and only Mines is warm at +1.02. Round 1's Dice was -4.94, i.e. 0.89 cooler
   than Plinko and inside the siblings' own 5.07-unit spread. So a red vignette
   would put this game further from the family than it was, and it would reverse
   an owner ruling Mines records twice ("the owner removed it from the
   background TWICE... mode 'a' carries no hue at all").
   What the ground DOES do is move to the middle of the measured spread rather
   than sit at its cold end. The real cause of the tell is treated where it
   lives: the CTA, which is this frame's only red mass and which round 1 shipped
   as a gradient at 52px against the siblings' flat 60px slab. */
/* AND IT BLEEDS ON A SMALL FRAME. A 14px inset with a border costs 28px on
   both axes, which is 9.3% of the height of a 380x300 docked window — the size
   where the board already has the least to spend. Both siblings ship exactly
   this escape (`#frame[data-bleed]{border:0;border-radius:0;box-shadow:none}`)
   for exactly this reason, so it arrives here as the house rule rather than as
   a local exception. The window chrome is the frame at that size. */
#frame[data-bleed]{inset:0;border:0;border-radius:0;box-shadow:none}
/* ROUND 3: THE GROUND IS THE WHOLE FRAME'S, AND IT IS TWO LAYERS.
   Owner: "have the background everywhere". r2 had TWO grounds — this cool
   measured one on #frame and a warm one scoped to #board — so the sky
   stopped at the stage's border and the bet panel sat on flat black. They
   are one stack now, under everything.
   The BASE layer is unchanged, and deliberately: the sampling above is why
   it is cool, and a red vignette over the whole window is the one thing all
   three reviewers named as the not-our-operator tell.
   What sits on top of it is not a vignette — it is a BLOOM, and it is
   tied to the object that emits it. --cx/--cy are written by layout() and
   point at the goo track's own centre (they used to point at the middle
   of the board column), so the warm light in the room reads as coming from
   the one bright object on the frame rather than being painted on the walls.
   It is held under .17 alpha and fades out by 72%, which keeps the corners
   and the console on the measured cool ground.
   WIN ROUND (2026-08-27): THE BLOOM'S PAINTING ELEMENT MOVED — the red
   radial that was this background's FIRST layer now lives on #roomwarm
   (20-stage.css), a frame child under the sky, same geometry, same alphas,
   same --cx/--cy, so the room's light can CHANGE HANDS on a win: warm
   CROSSFADES to the gold #roomlit, never stacks under it — the stacked
   version was rendered and it is sepia mud (W4's own proof,
   work/dice/shots/win-round/p4-room). Only the painting element moved; the
   measured cool-ground argument above still governs what the base layer is,
   and the idle/loss frame is pixel-identical to what this rule painted. */
#frame{
  position:absolute;inset:14px;overflow:hidden;
  border:1px solid var(--frame-line);border-radius:20px;
  box-shadow:0 24px 70px -20px rgba(0,0,0,.9), inset 0 0 0 1px rgba(255,255,255,.02);
  background:
    radial-gradient(120% 90% at var(--cx,50%) var(--cy,46%), #16151A 0%, #0C0B0F 46%, #060608 100%),
    #000;
}
