Skip to content

Commit 7b985e5

Browse files
committed
review style
1 parent 8517675 commit 7b985e5

1 file changed

Lines changed: 50 additions & 38 deletions

File tree

pages/bingo/bingo-day.html

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
--shadow:0 24px 60px -20px rgba(0,0,0,.7);
1515
--serif:'Didot','Bodoni MT','Bodoni 72','Playfair Display',Georgia,'Times New Roman',serif;
1616
--sans:'Optima','Avenir Next','Gill Sans',ui-sans-serif,'Helvetica Neue',sans-serif;
17-
--mono:'Courier New',ui-monospace,monospace;
17+
--mono:'SF Mono','JetBrains Mono','IBM Plex Mono','Roboto Mono',ui-monospace,'Courier New',monospace;
1818
}
1919
*{box-sizing:border-box;margin:0;padding:0;}
2020
html{scroll-behavior:smooth;}
@@ -31,7 +31,8 @@
3131
/* ---------- two-column row helper ---------- */
3232
.dual{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,2.2vw,26px);margin-bottom:clamp(16px,2.4vw,26px);align-items:start;}
3333
.dual>.panel{margin-bottom:0;height:100%;}
34-
@media(max-width:1000px){.dual{grid-template-columns:1fr;}}
34+
.dualStage{grid-template-columns:0.9fr 1.1fr;}
35+
@media(max-width:1000px){.dual{grid-template-columns:1fr;}.dualStage{grid-template-columns:1fr;}.field--seg{grid-column:auto;}}
3536

3637
/* ---------- tab nav ---------- */
3738
.tabs{display:flex;justify-content:center;gap:8px;margin-bottom:clamp(20px,3vw,34px);}
@@ -42,27 +43,30 @@
4243

4344
/* ---------- header ---------- */
4445
header{text-align:center;margin-bottom:clamp(20px,3vw,32px);}
45-
.kicker{font-size:.7rem;letter-spacing:.42em;text-transform:uppercase;color:var(--gold);font-weight:600;display:inline-flex;align-items:center;gap:.9em;}
46+
.kicker{font-size:.7rem;letter-spacing:.36em;text-transform:uppercase;color:var(--gold);font-weight:600;display:inline-flex;align-items:center;gap:.9em;}
4647
.kicker::before,.kicker::after{content:"";width:42px;height:1px;background:linear-gradient(90deg,transparent,var(--gold));}
4748
.kicker::after{background:linear-gradient(90deg,var(--gold),transparent);}
4849
h1{font-family:var(--serif);font-weight:400;font-size:clamp(2.3rem,7vw,4.2rem);line-height:1;margin:.16em 0 .1em;}
4950
.dek{font-family:var(--serif);font-style:italic;font-size:clamp(1rem,2.3vw,1.25rem);color:rgba(243,234,214,.74);max-width:46ch;margin:.2em auto 0;}
5051

5152
.panel{border:1px solid var(--line);border-radius:6px;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(0,0,0,.18));box-shadow:var(--shadow),inset 0 1px 0 rgba(255,255,255,.05);padding:clamp(16px,2.2vw,24px);}
52-
.seclabel{font-size:.68rem;letter-spacing:.28em;text-transform:uppercase;color:var(--gold);display:flex;align-items:center;gap:10px;margin-bottom:14px;}
53+
.seclabel{font-size:.68rem;letter-spacing:.24em;text-transform:uppercase;color:var(--gold);display:flex;align-items:center;gap:10px;margin-bottom:14px;}
5354
.seclabel .grow{flex:1;height:1px;background:var(--line);}
5455

5556
/* ---------- console / controls ---------- */
5657
.console{margin-bottom:clamp(16px,2.4vw,26px);}
57-
.ctlGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:12px 16px;align-items:end;}
58-
.field label{display:flex;justify-content:space-between;align-items:baseline;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:rgba(243,234,214,.62);margin-bottom:7px;}
59-
.field label .val{font-family:var(--mono);font-size:.92rem;letter-spacing:0;color:var(--gold-bright);text-transform:none;}
60-
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:4px;background:linear-gradient(90deg,var(--gold) var(--p,30%),rgba(255,255,255,.12) var(--p,30%));outline:none;cursor:pointer;}
58+
.ctlGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:14px 18px;align-items:stretch;}
59+
.field--seg{grid-column:span 2;}
60+
.field{display:flex;flex-direction:column;}
61+
.field>.seg,.field>select,.field>input[type=range],.field>.toggle{margin-top:auto;}
62+
.field label{display:flex;justify-content:space-between;align-items:baseline;min-height:2.5em;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(243,234,214,.62);margin-bottom:7px;}
63+
.field label .val{font-family:var(--mono);font-size:.92rem;letter-spacing:0;color:var(--gold-bright);text-transform:none;font-variant-numeric:tabular-nums;}
64+
input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:4px;box-sizing:content-box;border-radius:4px;padding:9px 0;background:linear-gradient(90deg,var(--gold) var(--p,30%),rgba(255,255,255,.12) var(--p,30%));background-clip:content-box;outline:none;cursor:pointer;}
6165
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:radial-gradient(circle at 38% 32%,var(--gold-bright),var(--gold-dim));border:2px solid var(--ink);box-shadow:0 2px 6px rgba(0,0,0,.6);}
6266
input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--gold-bright);border:2px solid var(--ink);}
63-
select{width:100%;font-family:var(--sans);font-size:.86rem;color:var(--ivory);background:rgba(0,0,0,.3);border:1px solid var(--line-strong);border-radius:4px;padding:9px 10px;cursor:pointer;}
64-
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:4px;overflow:hidden;flex-wrap:wrap;}
65-
.seg button{font-family:var(--sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;background:transparent;color:rgba(243,234,214,.6);border:none;cursor:pointer;padding:9px 14px;transition:all .2s;}
67+
select{width:100%;font-family:var(--sans);font-size:.86rem;color:var(--ivory);background:rgba(0,0,0,.3);border:1px solid var(--line-strong);border-radius:4px;padding:10px 12px;cursor:pointer;}
68+
.seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:4px;overflow:hidden;flex-wrap:nowrap;}
69+
.seg button{font-family:var(--sans);font-size:.74rem;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;background:transparent;color:rgba(243,234,214,.6);border:none;cursor:pointer;padding:10px 12px;transition:all .2s;}
6670
.seg button.active{background:var(--crimson);color:#fff;}
6771
.seg button:not(.active):hover{color:var(--ivory);background:rgba(255,255,255,.05);}
6872
.toggle{display:inline-flex;align-items:center;gap:9px;font-size:.78rem;color:rgba(243,234,214,.75);cursor:pointer;user-select:none;}
@@ -78,11 +82,14 @@
7882
.btn.primary:hover{background:var(--crimson-bright);}
7983
.btn.gold{background:var(--gold);border-color:var(--gold);color:var(--ink);font-weight:600;}
8084
.btn:disabled{opacity:.35;cursor:not-allowed;}
85+
#btnReset:hover{border-color:var(--crimson-bright);color:var(--crimson-bright);background:rgba(155,28,46,.12);}
8186

8287
/* ---------- caller board ---------- */
88+
.stagePanel{display:flex;flex-direction:column;}
89+
.stagePanel .stage{flex:0 0 auto;}
8390
.stage{display:grid;grid-template-columns:auto 1fr;gap:clamp(16px,2.4vw,28px);margin-bottom:clamp(16px,2.4vw,26px);align-items:center;}
8491
@media(max-width:680px){.stage{grid-template-columns:1fr;}}
85-
.ball{width:clamp(96px,14vw,140px);height:clamp(96px,14vw,140px);border-radius:50%;display:grid;place-items:center;position:relative;
92+
.ball{width:clamp(104px,15vw,156px);height:clamp(104px,15vw,156px);border-radius:50%;display:grid;place-items:center;position:relative;
8693
background:radial-gradient(circle at 36% 30%,#fff7e6,var(--gold-bright) 42%,var(--gold-dim) 90%);
8794
border:3px solid var(--gold);box-shadow:inset 0 -8px 18px rgba(0,0,0,.35),var(--shadow);}
8895
.ball .bn{font-family:var(--serif);font-size:clamp(2.6rem,6vw,3.6rem);color:var(--ink);font-variant-numeric:tabular-nums;line-height:1;}
@@ -92,32 +99,36 @@
9299
.ball.pulse{animation:ballpop .5s cubic-bezier(.2,.8,.2,1);}
93100
@keyframes ballpop{0%{transform:scale(.6);}60%{transform:scale(1.12);}100%{transform:scale(1);}}
94101

95-
.boardInfo{display:flex;flex-direction:column;gap:12px;}
102+
.boardInfo{display:flex;flex-direction:column;gap:16px;}
96103
.gameMeta{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:baseline;}
97104
.gameMeta .gm{display:flex;flex-direction:column;}
98-
.gameMeta .gm .k{font-size:.62rem;letter-spacing:.18em;text-transform:uppercase;color:rgba(243,234,214,.5);}
105+
.gameMeta .gm .k{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(243,234,214,.5);}
99106
.gameMeta .gm .v{font-family:var(--mono);font-size:1.15rem;color:var(--ivory);}
100107
.gameMeta .gm .v.gold{color:var(--gold-bright);}
101108
.gameMeta .gm .v.crim{color:var(--crimson-bright);}
102109
.recent{display:flex;gap:6px;flex-wrap:wrap;}
103110
.recent .rb{font-family:var(--mono);font-size:.82rem;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:rgba(0,0,0,.3);border:1px solid var(--line);color:rgba(243,234,214,.78);}
104111
.recent .rb.last{background:var(--gold);color:var(--ink);border-color:var(--gold);font-weight:700;}
105-
.numbers{display:grid;grid-template-columns:repeat(30,1fr);gap:3px;margin-top:4px;}
106-
@media(max-width:680px){.numbers{grid-template-columns:repeat(15,1fr);}}
107-
.numbers span{font-family:var(--mono);font-size:.62rem;height:16px;line-height:16px;display:grid;place-items:center;border-radius:3px;background:rgba(255,255,255,.04);color:rgba(243,234,214,.32);transition:all .25s;}
108-
.numbers span.called{background:var(--gold-dim);color:var(--ink);font-weight:700;}
112+
.numbers{display:grid;grid-template-columns:repeat(auto-fit,minmax(22px,1fr));gap:3px;margin-top:4px;}
113+
.numbers span{font-family:var(--mono);font-size:.66rem;height:19px;line-height:19px;display:grid;place-items:center;border-radius:3px;background:rgba(255,255,255,.04);color:rgba(243,234,214,.46);transition:all .25s;}
114+
.numbers span.called{background:var(--gold);color:var(--ink);font-weight:700;}
109115
.numbers span.justcalled{background:var(--gold-bright);color:var(--ink);box-shadow:0 0 10px var(--gold-bright);}
116+
@media(max-width:460px){
117+
.numbers{grid-template-columns:repeat(10,1fr);}
118+
.numbers span{color:rgba(243,234,214,.56);}
119+
}
110120

111121
/* announcement banner */
112-
.announce{margin-top:14px;border-radius:5px;padding:12px 16px;border:1px solid var(--line-strong);background:linear-gradient(90deg,rgba(155,28,46,.2),rgba(0,0,0,.2));font-size:.92rem;min-height:46px;display:flex;align-items:center;gap:12px;}
122+
.announce{margin-top:auto;border-radius:5px;padding:12px 16px;border:1px solid var(--line-strong);background:linear-gradient(90deg,rgba(155,28,46,.2),rgba(0,0,0,.2));font-size:.92rem;min-height:46px;display:flex;align-items:center;gap:12px;}
113123
.announce b{font-family:var(--serif);font-size:1.1rem;}
114124
.announce .win{color:var(--gold-bright);}
115125
.announce.youwin{background:linear-gradient(90deg,rgba(205,163,73,.28),rgba(0,0,0,.2));border-color:var(--gold);}
116126

117127
/* ---------- your cards ---------- */
118-
.mine{margin-bottom:clamp(16px,2.4vw,26px);}
119-
.book{display:flex;gap:clamp(8px,1.4vw,16px);flex-wrap:wrap;}
120-
.ticket{flex:1 1 240px;min-width:210px;border:1px solid var(--line);border-radius:5px;padding:7px;background:rgba(0,0,0,.18);}
128+
.mine{margin-bottom:clamp(16px,2.4vw,26px);display:flex;flex-direction:column;}
129+
.book{display:flex;gap:clamp(8px,1.4vw,16px);flex-wrap:wrap;flex:1 1 auto;align-content:center;align-items:center;justify-content:center;}
130+
.book.books-1 .ticket,.book.books-2 .ticket{max-width:clamp(360px,32vw,500px);}
131+
.ticket{flex:1 1 240px;min-width:210px;max-width:360px;border:1px solid var(--line);border-radius:5px;padding:7px;background:rgba(0,0,0,.18);}
121132
.ticket .tgrid{display:grid;grid-template-columns:repeat(9,1fr);grid-template-rows:repeat(3,1fr);gap:3px;}
122133
.cell{aspect-ratio:1;display:grid;place-items:center;font-family:var(--mono);font-size:clamp(.6rem,1.2vw,.82rem);border-radius:3px;}
123134
.cell.blank{background:repeating-linear-gradient(45deg,rgba(255,255,255,.025) 0 4px,transparent 4px 8px);}
@@ -132,15 +143,15 @@
132143

133144
/* ---------- the room (compact per-player tiles: wins | away) ---------- */
134145
.roomSec{margin-bottom:clamp(16px,2.4vw,26px);}
135-
.roomGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:5px;max-height:clamp(300px,46vh,560px);overflow-y:auto;padding-right:4px;}
146+
.roomGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:5px;align-content:start;max-height:clamp(280px,40vh,460px);overflow-y:auto;padding-right:4px;}
136147
.roomGrid::-webkit-scrollbar{width:8px;}
137148
.roomGrid::-webkit-scrollbar-thumb{background:var(--gold-dim);border-radius:8px;}
138-
.rtile{border:1px solid var(--line);border-radius:6px;padding:7px 4px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(0,0,0,.2));
139-
display:flex;align-items:center;justify-content:center;gap:5px;font-family:var(--mono);font-size:.84rem;line-height:1;font-variant-numeric:tabular-nums;
149+
.rtile{border:1px solid var(--line);border-radius:6px;padding:6px 4px;background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(0,0,0,.2));
150+
display:flex;align-items:center;justify-content:center;gap:5px;font-family:var(--mono);font-size:.84rem;line-height:1.05;font-variant-numeric:tabular-nums;
140151
transition:background-color .18s,border-color .18s,box-shadow .18s,transform .18s;}
141-
.rtile .rwins{color:rgba(243,234,214,.38);font-weight:700;min-width:1ch;text-align:right;}
152+
.rtile .rwins{color:rgba(243,234,214,.52);font-weight:700;min-width:1ch;text-align:right;}
142153
.rtile .rwins.has{color:var(--gold-bright);}
143-
.rtile .rsep{color:rgba(243,234,214,.18);}
154+
.rtile .rsep{color:rgba(243,234,214,.4);}
144155
.rtile .raway{color:rgba(243,234,214,.82);min-width:1.6ch;text-align:left;}
145156
.rtile.close{border-color:var(--crimson-bright);background:linear-gradient(180deg,rgba(200,52,74,.18),rgba(155,28,46,.12));}
146157
.rtile.close .raway{color:var(--crimson-bright);font-weight:700;}
@@ -151,7 +162,8 @@
151162
.roomLegend{display:flex;gap:18px;flex-wrap:wrap;font-size:.72rem;color:rgba(243,234,214,.6);margin-top:14px;}
152163
.roomLegend span{display:inline-flex;align-items:center;gap:7px;}
153164
.roomLegend i{width:11px;height:11px;border-radius:3px;display:inline-block;}
154-
.roomLegend i.idle{background:#6f5a2a;} .roomLegend i.close{background:var(--crimson-bright);} .roomLegend i.win{background:var(--gold-bright);}
165+
.roomLegend i.idle{background:rgba(243,234,214,.14);border:1px solid var(--line);} .roomLegend i.close{background:var(--crimson-bright);} .roomLegend i.win{background:var(--gold-bright);}
166+
.roomLegend i.ever{background:transparent;border:1px solid var(--gold);box-shadow:0 0 0 1px var(--gold-dim);}
155167
@media (prefers-reduced-motion:reduce){.rtile{transition:none;}}
156168

157169
/* ---------- ledger / stats ---------- */
@@ -161,7 +173,7 @@
161173
.scard .k{font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:rgba(243,234,214,.5);}
162174
.scard .v{font-family:var(--mono);font-size:1.35rem;color:var(--ivory);margin-top:5px;font-variant-numeric:tabular-nums;}
163175
.scard .v.gold{color:var(--gold-bright);} .scard .v.pos{color:#5fc587;} .scard .v.neg{color:var(--crimson-bright);}
164-
.scard .sub{font-size:.66rem;color:rgba(243,234,214,.4);margin-top:3px;}
176+
.scard .sub{font-size:.66rem;color:rgba(243,234,214,.55);margin-top:3px;}
165177

166178
/* economics tie-in */
167179
.econ .ebody{font-size:.9rem;color:rgba(243,234,214,.72);line-height:1.6;}
@@ -192,7 +204,7 @@ <h1>A Day at the Hall</h1>
192204
<section class="panel console">
193205
<div class="seclabel">Set the room<span class="grow"></span><span id="venueName" style="color:rgba(243,234,214,.6);letter-spacing:.04em;text-transform:none;font-size:.8rem;"></span></div>
194206
<div class="ctlGrid">
195-
<div class="field">
207+
<div class="field field--seg">
196208
<label>Venue</label>
197209
<div class="seg" id="venueSeg" role="group" aria-label="Venue">
198210
<button type="button" data-v="fg" class="active">Fountain Gate</button>
@@ -223,7 +235,7 @@ <h1>A Day at the Hall</h1>
223235
<option value="3">3 games (quick look)</option>
224236
</select>
225237
</div>
226-
<div class="field">
238+
<div class="field field--seg">
227239
<label>Ball speed</label>
228240
<div class="seg" id="speedSeg" role="group" aria-label="Speed">
229241
<button type="button" data-ms="650">Slow</button>
@@ -232,7 +244,7 @@ <h1>A Day at the Hall</h1>
232244
<button type="button" data-ms="0">Instant</button>
233245
</div>
234246
</div>
235-
<div class="field" style="align-self:center;">
247+
<div class="field">
236248
<label class="toggle"><input type="checkbox" id="pauseGame"> Pause after each game</label>
237249
</div>
238250
</div>
@@ -242,15 +254,15 @@ <h1>A Day at the Hall</h1>
242254
<button class="btn" id="btnSkip">Skip to win</button>
243255
<button class="btn" id="btnUntil">Simulate until <b style="color:var(--gold-bright);font-weight:700;">you</b> win</button>
244256
<button class="btn gold" id="btnNext" style="display:none;">Next game ▶</button>
245-
<button class="btn" id="btnReset">Reset day</button>
257+
<button class="btn" id="btnReset" style="margin-left:auto;">Reset day</button>
246258
</div>
247259
</section>
248260

249261
<!-- NUMBERS DRAWN + THE DAY'S LEDGER (side by side) -->
250-
<div class="dual">
262+
<div class="dual dualStage">
251263

252264
<!-- STAGE / CALLER -->
253-
<section class="panel">
265+
<section class="panel stagePanel">
254266
<div class="stage">
255267
<div class="ball empty" id="ball"><span class="bl" id="ballL"></span><span class="bn" id="ballN"></span></div>
256268
<div class="boardInfo">
@@ -306,7 +318,7 @@ <h1>A Day at the Hall</h1>
306318
<span><i class="idle"></i>Playing</span>
307319
<span><i class="close"></i>One or two away</span>
308320
<span><i class="win"></i>Full house</span>
309-
<span><i class="win"></i>Won before (gold outline)</span>
321+
<span><i class="ever"></i>Won before (gold outline)</span>
310322
</div>
311323
</section>
312324

@@ -672,7 +684,7 @@ <h1>A Day at the Hall</h1>
672684

673685
/* ---------- rendering ---------- */
674686
function renderBook(){
675-
var book=$("book");book.innerHTML="";state.cellByNum={};
687+
var book=$("book");book.innerHTML="";book.className="book books-"+state.books;state.cellByNum={};
676688
state.userTickets.forEach(function(t){
677689
var tk=document.createElement("div");tk.className="ticket";
678690
var grid=document.createElement("div");grid.className="tgrid";
@@ -901,7 +913,7 @@ <h1>A Day at the Hall</h1>
901913
$("btnPlay").textContent="▶ Replay";$("btnNext").style.display="none";state.running=false;state.awaiting=false;state.ended=true;
902914
var net=state.winnings-currentSpend();
903915
// let the final game's result (incl. any follow-up prize) stay readable before the day summary
904-
var show=function(){ if(!state.ended)return; setAnnounce('<b>That\'s the day.</b> '+state.games+' games · '+money(state.hallPaid)+' paid out · your net '+(net>=0?"+":"")+money(net)+'.', net>0); };
916+
var show=function(){ if(!state.ended)return; setAnnounce('<b>That\'s the day.</b> '+state.games+' games · '+money(state.hallPaid)+' paid out · your net '+(net>=0?"+":"")+money(Math.abs(net))+'.', net>0); };
905917
if(state.ballMs===0) show(); else setTimeout(show,1600);
906918
}
907919

0 commit comments

Comments
 (0)