The dealer table is a two-handed, big-screen tool. A dealer standing over a chopped pot with a phone in one hand and players waiting needs an answer in seconds, not a table to set up first — so /casino/texasholdem/quicksplit is the whole job on one screen: type the pot, tap how many ways, tap the smallest chip in play, read the payout. Nothing to configure, nothing saved. It splits in whole chips rather than raw arithmetic, because a dealer can't push half a chip across the felt: everyone gets the same stack and the remainder is called out as odd chips going one at a time to the first players left of the button. A pot that doesn't divide into the chosen denomination says so instead of quietly hiding the difference. Money formatting moves out of render.js into its own file so this screen can use it without pulling in the whole seat/chip UI. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_015bnp7xKUPFFSpwkYNFaPgb
302 lines
5.7 KiB
CSS
302 lines
5.7 KiB
CSS
/* Quick Split is phone-first: sized for one thumb at the table, then allowed to
|
|
breathe on a laptop. Palette matches the dealer table so the two read as one tool. */
|
|
|
|
body {
|
|
background: radial-gradient(ellipse at 50% -10%, #1c1c1c 0%, #101010 55%, #0a0a0a 100%);
|
|
min-height: 100vh;
|
|
margin: 0;
|
|
color: #e6e6e6;
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
}
|
|
|
|
#splitApp {
|
|
max-width: 480px;
|
|
margin: 0 auto;
|
|
padding: 1.25rem 1rem 3rem;
|
|
}
|
|
|
|
/* ---------- Header ---------- */
|
|
|
|
#splitHeader h1 {
|
|
margin: 0;
|
|
font-size: 1.5rem;
|
|
font-weight: 300;
|
|
letter-spacing: 0.04em;
|
|
color: #f5f5f5;
|
|
position: relative;
|
|
display: inline-block;
|
|
padding-bottom: 0.35rem;
|
|
}
|
|
|
|
#splitHeader h1::after {
|
|
content: "";
|
|
position: absolute;
|
|
left: 0;
|
|
bottom: 0;
|
|
width: 36px;
|
|
height: 3px;
|
|
border-radius: 2px;
|
|
background: linear-gradient(90deg, #d8b46a, #a9782f);
|
|
}
|
|
|
|
.splitSubtitle {
|
|
margin: 0.35rem 0 1.25rem;
|
|
color: #8f8f8f;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
/* ---------- The answer ---------- */
|
|
|
|
#splitResult {
|
|
background: linear-gradient(160deg, #1f2a21, #161c17);
|
|
border: 1px solid #2c3a2f;
|
|
border-radius: 14px;
|
|
padding: 1.4rem 1.1rem;
|
|
text-align: center;
|
|
margin-bottom: 1.5rem;
|
|
transition: border-color 0.2s ease, box-shadow 0.2s ease;
|
|
}
|
|
|
|
#splitResult.hasAmount {
|
|
border-color: #3c6b46;
|
|
box-shadow: 0 0 0 1px rgba(78, 201, 122, 0.08), 0 6px 20px rgba(0, 0, 0, 0.35);
|
|
}
|
|
|
|
#splitResultLabel {
|
|
color: #8f9d92;
|
|
font-size: 0.78rem;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
#splitResultAmount {
|
|
margin-top: 0.35rem;
|
|
font-size: clamp(2.6rem, 14vw, 3.4rem);
|
|
font-weight: 600;
|
|
line-height: 1.05;
|
|
color: #f2f2f2;
|
|
font-variant-numeric: tabular-nums;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
|
|
#splitResult.hasAmount #splitResultAmount {
|
|
color: #7ee2a0;
|
|
}
|
|
|
|
#splitOddNote {
|
|
margin-top: 0.7rem;
|
|
color: #d8b46a;
|
|
font-size: 0.85rem;
|
|
line-height: 1.45;
|
|
}
|
|
|
|
#splitDustNote {
|
|
margin-top: 0.5rem;
|
|
color: #e0a1a1;
|
|
font-size: 0.8rem;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
/* ---------- Inputs ---------- */
|
|
|
|
.splitField {
|
|
display: block;
|
|
margin-bottom: 1.35rem;
|
|
}
|
|
|
|
.splitLabel {
|
|
display: block;
|
|
margin-bottom: 0.5rem;
|
|
color: #9a9a9a;
|
|
font-size: 0.75rem;
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.potInputWrap {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.4rem;
|
|
background: #141414;
|
|
border: 1px solid #3a3a3a;
|
|
border-radius: 12px;
|
|
padding: 0.2rem 0.75rem;
|
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
}
|
|
|
|
.potInputWrap:focus-within {
|
|
border-color: #d8b46a;
|
|
box-shadow: 0 0 0 3px rgba(216, 180, 106, 0.12);
|
|
}
|
|
|
|
.potCurrency {
|
|
color: #777;
|
|
font-size: 1.6rem;
|
|
font-weight: 300;
|
|
}
|
|
|
|
#potInput {
|
|
flex: 1;
|
|
min-width: 0;
|
|
background: none;
|
|
border: none;
|
|
outline: none;
|
|
color: #f2f2f2;
|
|
font-size: 2rem;
|
|
font-weight: 500;
|
|
font-variant-numeric: tabular-nums;
|
|
padding: 0.55rem 0;
|
|
font-family: inherit;
|
|
}
|
|
|
|
#potInput::placeholder {
|
|
color: #4a4a4a;
|
|
}
|
|
|
|
.clearPotBtn {
|
|
flex: none;
|
|
width: 34px;
|
|
height: 34px;
|
|
border-radius: 50%;
|
|
border: none;
|
|
background: #262626;
|
|
color: #999;
|
|
font-size: 0.85rem;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.clearPotBtn:hover {
|
|
background: #333;
|
|
color: #ddd;
|
|
}
|
|
|
|
/* ---------- Tap targets ---------- */
|
|
|
|
.chipRow {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.choiceChip {
|
|
flex: 1 1 auto;
|
|
min-width: 58px;
|
|
min-height: 52px;
|
|
padding: 0.5rem 0.7rem;
|
|
background: linear-gradient(180deg, #2e2e2e, #232323);
|
|
border: 1px solid #3a3a3a;
|
|
border-radius: 11px;
|
|
color: #ddd;
|
|
font-size: 1rem;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.choiceChip:hover {
|
|
border-color: #4a4a4a;
|
|
background: linear-gradient(180deg, #383838, #2a2a2a);
|
|
}
|
|
|
|
.choiceChip.selected {
|
|
background: linear-gradient(180deg, #3a2f18, #241d0f);
|
|
border-color: #d8b46a;
|
|
color: #f0d9a8;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.waysStepper {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.35rem;
|
|
flex: 1 1 auto;
|
|
min-width: 150px;
|
|
background: #191919;
|
|
border: 1px solid #333;
|
|
border-radius: 11px;
|
|
padding: 0.2rem 0.4rem;
|
|
}
|
|
|
|
.stepBtn {
|
|
width: 40px;
|
|
height: 44px;
|
|
border: none;
|
|
border-radius: 8px;
|
|
background: #262626;
|
|
color: #ddd;
|
|
font-size: 1.25rem;
|
|
line-height: 1;
|
|
font-family: inherit;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.stepBtn:hover {
|
|
background: #333;
|
|
}
|
|
|
|
.waysReadout {
|
|
flex: 1;
|
|
text-align: center;
|
|
color: #999;
|
|
font-size: 0.8rem;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
/* ---------- Footer actions ---------- */
|
|
|
|
#splitActions {
|
|
display: flex;
|
|
gap: 0.6rem;
|
|
margin-top: 1.75rem;
|
|
}
|
|
|
|
.splitBtn {
|
|
flex: 1;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
min-height: 48px;
|
|
padding: 0.6rem 0.9rem;
|
|
border-radius: 10px;
|
|
border: 1px solid #3a3a3a;
|
|
background: linear-gradient(180deg, #2e2e2e, #232323);
|
|
color: #ddd;
|
|
font-size: 0.9rem;
|
|
font-family: inherit;
|
|
text-decoration: none;
|
|
cursor: pointer;
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.splitBtn:hover {
|
|
border-color: #4a4a4a;
|
|
background: linear-gradient(180deg, #383838, #2a2a2a);
|
|
}
|
|
|
|
.splitBtnGhost {
|
|
background: transparent;
|
|
}
|
|
|
|
.splitFootnote {
|
|
margin-top: 1.5rem;
|
|
color: #6f6f6f;
|
|
font-size: 0.78rem;
|
|
line-height: 1.5;
|
|
text-align: center;
|
|
}
|
|
|
|
.splitFootnote a {
|
|
color: #a9782f;
|
|
}
|
|
|
|
/* Roomier once there's a real screen to work with. */
|
|
@media (min-width: 700px) {
|
|
#splitApp {
|
|
padding-top: 2.5rem;
|
|
}
|
|
|
|
#splitHeader h1 {
|
|
font-size: 1.8rem;
|
|
}
|
|
}
|