diff --git a/JoshHeaps.Net/Pages/Casino/TexasHoldem.cshtml b/JoshHeaps.Net/Pages/Casino/TexasHoldem.cshtml index 8fc4291..896ee76 100644 --- a/JoshHeaps.Net/Pages/Casino/TexasHoldem.cshtml +++ b/JoshHeaps.Net/Pages/Casino/TexasHoldem.cshtml @@ -509,37 +509,53 @@ not during it.
- + @* Twelve rulings, shut. -If the fourth board card gets turned before the betting round is finished, that card is out of play for the round. Finish the betting, then burn and turn what would have been the fifth card in the fourth card's place.
-A one-off is usually just backed up if no one has acted behind them. Doing it repeatedly is what earns a penalty.
-Any player may ask for a clock once a decision is taking unreasonably long; it is the dealer, not the table, who grants it. The player then @@ -553,10 +569,10 @@ count once you tap Call the clock, and offers the ruling as one button when it ends.
-The player left of the big blind may put out twice it before the cards, without looking. It is a blind bet, not a raise made in turn, so it does @@ -570,10 +586,10 @@ posts it, puts the right player on the clock and prices the raise; the seat wears an STR badge for the hand.
-Somebody shoving in less than a full raise — say $3 more when the last raise was $8 — does not give the players behind them another go. Anyone @@ -585,20 +601,20 @@ the minimum raise stays measured off the last full raise, not off the short one. The action bar follows this for you.
-Bet more than anyone was able to call and the excess is returned to you before the showdown — it was never contested, so it isn't part of the pot. The pot breakdown shows it as "uncalled" rather than pretending it's a side pot you could win.
-The most common argument at a home table. A player facing a bet who pushes out a single oversized chip without saying anything has @@ -611,10 +627,10 @@ clear verbal declaration in turn is binding either way — if words and chips disagree, whichever came first is the action.
-At least as much again as the last raise, or the big blind if there hasn't been one. Anything between a call and that minimum isn't a raise @@ -622,10 +638,10 @@ in. The raise pad says so if you type one, and won't stop you: your ruling beats the arithmetic.
-If there was a bet on the river, the last player to bet or raise shows first. If the river was checked all the way round, it's the first live @@ -638,20 +654,20 @@ was. The action bar names the seat and the reason at every showdown, so the call is already made before anyone asks.
-When a chopped pot won't divide evenly, the odd chip goes to the first player left of the button, not to whoever the dealer happened to tick first. Pot payouts here order the winners that way, so the leftover lands on the right seat every time.
-A bet is whatever goes in on the first trip to the stack, unless the amount was said out loud first. Reaching back for more chips without @@ -664,7 +680,7 @@ fine — the point is that a player can't watch the table react and then decide how much to bet. Say it, or push it all at once.
-
Follows the Tournament Directors Association rules, which most rooms and
diff --git a/JoshHeaps.Net/wwwroot/css/casino/holdem.css b/JoshHeaps.Net/wwwroot/css/casino/holdem.css
index 6d42aa1..f323aa9 100644
--- a/JoshHeaps.Net/wwwroot/css/casino/holdem.css
+++ b/JoshHeaps.Net/wwwroot/css/casino/holdem.css
@@ -2131,63 +2131,63 @@ button,
white-space: nowrap;
}
-/* One chip per ruling, wrapped across the top of the sheet. Names rather than icons:
- a dealer scanning this is looking for the words somebody at the table just said. */
-.rulingsIndex {
- display: flex;
- flex-wrap: wrap;
- gap: var(--sp-1);
- margin: 0 0 var(--sp-4);
-}
-
-.rulingsIndexBtn {
- box-sizing: border-box;
- min-height: 32px;
- padding: var(--sp-1) var(--sp-2);
- border-radius: var(--r-pill);
- border: 1px solid var(--line);
- background: var(--surface-2);
- color: var(--gold);
- font-family: inherit;
- font-size: var(--fs-sm);
- line-height: 1.25;
- text-align: left;
- cursor: pointer;
-}
-
-@media (hover: hover) {
- .rulingsIndexBtn:hover {
- background: var(--surface-3);
- border-color: var(--line-strong);
- }
-}
-
-/* A thumb needs the same 44px here as everywhere else. */
-@media (pointer: coarse) {
- .rulingsIndexBtn {
- min-height: 44px;
- font-size: var(--fs-sm);
- }
-}
-
-/* The heading the index jumps to takes focus, and a focus ring on a heading that the
- dealer just asked for reads as noise rather than as help. */
-.ruling h3:focus {
- outline: none;
-}
-
+/* A shut ruling is a row you can read; an open one is a passage you can read. The gold
+ left bar used to run down all twelve at once, which on a list of headings is twelve
+ vertical rules and no hierarchy. It belongs to the one that is open. */
.ruling {
- margin-bottom: var(--sp-4);
+ border-bottom: 1px solid var(--line);
+}
+
+.ruling[open] {
+ margin-bottom: var(--sp-2);
padding-left: var(--sp-3);
border-left: 2px solid rgba(216, 180, 106, 0.4);
+ border-bottom-color: transparent;
}
-.ruling h3 {
- margin: 0 0 var(--sp-1);
- color: var(--gold);
+/* Padding rather than a flex box with min-height, because a .+<\/h3><\/summary>/,
+ `ruling ${i + 1} does not carry its heading in its summary`);
+ });
+ });
+});
+
+describe("the index that was above them is gone, not merely hidden", () => {
+ test("nothing builds a chip row any more", () => {
+ assert.ok(!/rulingsIndex/.test(PAGE), "the index nav is still in the markup");
+ assert.ok(!/buildRulingsIndex|rulingsIndexBtn/.test(MAIN), "main.js still builds the index");
+ assert.ok(!/rulingsIndexBtn/.test(CSS), "the index chips still have styles");
+ });
+
+ // The short labels existed only to fit three chips on a line. With the full
+ // headings doing the work there is nothing left to read them.
+ test("and the short labels it read are gone with it", () => {
+ assert.ok(!/data-short=/.test(PAGE));
+ });
+});
+
+describe("what a summary has to be to work", () => {
+ // A
is announced as a button and not as a heading, so without this the
+ // twelve names — the whole of this sheet's navigation — are invisible to anybody
+ // moving through it by heading. Same fix as the sidebar's panel names.
+ test("the heading survives being a control", () => {
+ assert.match(ruleFor(".ruling > summary > h3"), /display:\s*inline/);
+ assert.match(ruleFor(".ruling > summary > h3"), /font:\s*inherit/);
+ });
+
+ // A
is content-box, so a min-height is *added* to its padding — the trap
+ // the sidebar's headers were in, one stylesheet section over.
+ test("a thumb gets its 44px, counted the way the box actually counts", () => {
+ const rule = ruleFor(".ruling > summary");
+ assert.match(rule, /box-sizing:\s*border-box/);
+ assert.match(rule, /min-height:\s*44px/);
+ });
+
+ test("the accent belongs to the ruling being read, not to all twelve", () => {
+ assert.match(ruleFor(".ruling > summary"), /color:\s*var\(--text\)/);
+ assert.match(ruleFor(".ruling[open] > summary"), /color:\s*var\(--gold\)/);
+ });
+
+ test("and so does the gold bar down the side", () => {
+ assert.match(ruleFor(".ruling[open]"), /border-left:\s*2px solid/);
+ assert.ok(!/border-left/.test(ruleFor(".ruling")),
+ "every ruling wears the open one's marker");
+ });
+});
+
+describe("reading one of them", () => {
+ // Five of the twelve are two paragraphs and they ran into each other: the sections
+ // were spaced from one another, but nothing separated the halves of one ruling.
+ test("two paragraphs of a ruling are two paragraphs", () => {
+ assert.match(ruleFor(".ruling p + p"), /margin-top:\s*var\(--sp-\d\)/);
+ });
+
+ //