diff --git a/PROJECT.md b/PROJECT.md index 6c13e5d..cd064cc 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -491,6 +491,19 @@ zombie (now an occasional opponent, `TUNE.racketEvery`, not the every-game fixtu `RETURNED`, `DOUBLE KILL`) is a footnote to something you already watched happen. Sharing the loud FACE with the milestone cards is right; sharing their SIZE made every footnote read as a milestone. +## Session log: THE DRAW SCREEN RETIRES (2026-08-29, same day, STAGING ONLY) + +Oliver: "the draw ist doch jetzt eigentlich obsolet, oder?" — yes. The screen was built for the +18-rung ladder (his own 2026-08-15 ask), where four bands rolling out of a deep hat was a +ceremony; a league cup shuffles 2-3 faces the setup's league panel already shows face-up. Deleted: +the #bracket stage (DOM, CSS, buildBracket, its timers and routing). What survives: the shuffle +itself lives INSIDE the run (cupDraw, without replacement, the final settled — startMatch's `draw` +parameter stays for the suite's validation test, renamed accordingly), each round still announces +itself on the walk-on modal, and the cup's big setup button now says **ENTER THE DRAW** — all the +ritual the moment needs. The rules modal's copy went league-neutral ("UP YOUR LEAGUE'S DEAD +HIERARCHY — THE FINAL IS SET"; a 3-rung league plays three rounds, not four). The screen's +mechanics live in git history (like the lob) if the ceremony is ever asked back. + ## Session log: THE LEAGUES — the plaque moves mid-court, and the 94vw scrollbar (2026-08-29, same day, STAGING ONLY) Live review with Oliver on the pane, three finds: diff --git a/index.html b/index.html index 257a61a..c52b6ef 100644 --- a/index.html +++ b/index.html @@ -177,7 +177,7 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat /* ONE overlay, four panels, swapped by #intro[data-stage]. Keeping the backdrop and the card frame alive across every screen is the point — a screen that unmounts the whole overlay flashes the court through between menus. */ - #splash, #setup, #stats, #ranks, #newbest, #secret, #bosses, #stmode, #stsub, #bracket, #vs, #train, #player, #promo, #card { display: none; } + #splash, #setup, #stats, #ranks, #newbest, #secret, #bosses, #stmode, #stsub, #vs, #train, #player, #promo, #card { display: none; } #intro[data-stage="splash"] #splash { display: flex; flex-direction: column; flex: 1; } /* flex COLUMN, not block: it is what lets the footer's margin-top:auto reach the bottom of a screen whose content does not fill it */ @@ -188,7 +188,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat #intro[data-stage="ranks"] #ranks, #intro[data-stage="secret"] #secret, #intro[data-stage="bosses"] #bosses, - #intro[data-stage="bracket"] #bracket, #intro[data-stage="train"] #train, #intro[data-stage="vs"] #vs, #intro[data-stage="player"] #player, @@ -411,35 +410,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat /* the training picker is 18 rungs deep — the tile carries the HEAD (the same z_*head crop the draw and the walk-on wear), which reads at a third of the boss portrait's height */ #trainList img { height: 44px; width: auto; display: block; image-rendering: pixelated; } - /* THE DRAW. Four rungs read top-down as a ladder, because that is what the mode is — the bracket - shape a real draw is printed in needs width a phone has not got, and half of it would be blank - anyway (you only ever play one side of it). The rows spin their portrait and their name while - the draw is being made, and .set is what a landed one wears: the placeholder look is on the - ROW, so a slot that has stopped is obvious at a glance and START stays out of reach until the - last of them lands. The final wears .set from the first frame — it was never in doubt. */ - #cupRows { display: flex; flex-direction: column; gap: 8px; } - .cupRow { display: grid; grid-template-columns: 54px 1fr auto; grid-template-rows: auto auto; - align-items: center; column-gap: 10px; row-gap: 2px; - padding: 7px 10px; background: var(--panel); border: 2px solid var(--line); - /* the connector: every round but the first hangs off the one above it */ - position: relative; } - .cupRow + .cupRow::before { content: ''; position: absolute; left: 35px; top: -10px; width: 2px; - height: 10px; background: var(--line); } - .cupRow img { grid-column: 1; grid-row: 1 / span 2; width: 54px; height: 54px; - object-fit: contain; object-position: center; image-rendering: pixelated; - /* mid-spin the faces flicker past unreadable; dimming them says "still rolling" - without a second element to keep in sync */ - opacity: 0.5; filter: grayscale(0.7); } - .cupRow u { grid-column: 2; grid-row: 1; font: 400 8px Silkscreen, monospace; color: var(--dim); - letter-spacing: 1.5px; text-decoration: none; text-align: left; } - .cupRow b { grid-column: 2; grid-row: 2; font: 400 11px Silkscreen, monospace; color: var(--dim); - letter-spacing: 0.5px; line-height: 1.35; text-align: left; } - .cupRow i { grid-column: 3; grid-row: 1 / span 2; font: 400 8px Silkscreen, monospace; - font-style: normal; color: var(--dim); letter-spacing: 1px; white-space: nowrap; } - .cupRow.set img { opacity: 1; filter: none; } - .cupRow.set b { color: var(--cream); } - .cupRow.fin { border-color: var(--red); } - .cupRow.fin.set b { color: var(--acid); } /* START is genuinely unreachable until the draw has landed — the wait IS the ceremony */ .btn[disabled] { opacity: 0.32; cursor: default; } /* a row, not a stacked tile: three 3:2 tiles stacked fill a phone twice over, and the art still @@ -774,19 +744,6 @@ if (location.hostname !== 'splatter-tennis.wuwi.one' && !window.Capacitor?.isNat - -