#bowlingStage{height:clamp(340px,58vh,620px);border-radius:24px;overflow:hidden;touch-action:none;background:#181022;box-shadow:0 0 0 1px rgba(255,143,196,.25),0 20px 50px rgba(24,16,34,.55)}#bowlingStage canvas{display:block;width:100%;height:100%}.bowl-header h2,#rouletteSurface h2{font:clamp(26px,4vw,42px) Georgia;margin:12px 0}.bowl-controls{display:flex;flex-wrap:wrap;gap:16px;align-items:end;padding:20px 0}.bowl-controls label{display:grid;gap:8px;flex:1;min-width:90px}.bowl-controls input{width:100%;accent-color:#b34978}.bowl-scores{overflow-x:auto;padding:12px 0}.roulette-options{display:flex;gap:15px;flex-wrap:wrap;margin:25px 0}.roulette-options label{display:grid;gap:8px}.roulette-options select{padding:12px;border:1px solid #d8bbc5;border-radius:12px;color:#633849;background:#fff9f5}.date-actions{display:flex;gap:12px}#savedDates p{padding:15px;border-bottom:1px solid #e1c6d0}@keyframes date-deal{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:none}}@media(max-width:600px){.bowl-controls{gap:10px}.bowl-controls button{width:100%}}@media(prefers-reduced-motion:reduce){.date-result{animation:none}}

/* ── Date Night Roulette: the wheel and its result card ───────────────── */
.wheel-blurb{color:#8a5f74;font-style:italic;margin:-10px 0 18px}
.wheel-layout{display:grid;grid-template-columns:minmax(240px,1fr) 1.15fr;gap:26px;align-items:start}
.wheel-stage{position:relative;aspect-ratio:1;width:100%;max-width:420px;margin-inline:auto}
#dateWheelCanvas{display:block;width:100%;height:100%;filter:drop-shadow(0 14px 30px rgba(98,42,70,.28))}
.date-result{min-height:220px;padding:26px;border:1px solid #e3c2cf;border-radius:24px;background:linear-gradient(135deg,#fff7e1,#fae5ef);animation:date-deal .45s ease-out both}
.date-result.is-spicy{border-color:#7a2d54;color:#ffe6f2;background:linear-gradient(140deg,#2c0f24,#4a1338 55%,#6d1f4a)}
.date-result .result-eyebrow{display:flex;flex-wrap:wrap;gap:10px;align-items:center;letter-spacing:.12em;font-size:12px;text-transform:uppercase;color:#8a5f74}
.date-result.is-spicy .result-eyebrow{color:#ffb3d4}
.date-result h3{font:clamp(24px,3.2vw,34px)/1.2 Georgia;color:#733b52;margin:12px 0 14px}
.date-result.is-spicy h3{color:#ffd9ec}
.date-result p{margin:0 0 14px;line-height:1.6}
.date-result .result-tip,.date-result .result-props{display:block;padding:12px 14px;border-radius:14px;background:rgba(122,45,84,.08);font-size:14px}
.date-result.is-spicy .result-tip,.date-result.is-spicy .result-props{background:rgba(255,255,255,.09)}
.date-result .result-props{margin-top:10px;opacity:.9}
.heat-flames{letter-spacing:2px}
.date-result .result-empty{color:#8a5f74;font-style:italic}
.date-result.is-spicy .result-empty{color:#ffb3d4}
#savedDates p b{display:block}
@media(max-width:820px){.wheel-layout{grid-template-columns:1fr}}
@media(max-width:600px){.date-result{padding:20px}.date-actions{flex-direction:column}.date-actions button{width:100%}}

/* ── The lane: expand button and ball rack ───────────────────────────── */
.bowl-stage-wrap{position:relative}
.bowl-expand{position:absolute;top:14px;right:14px;z-index:2;padding:9px 14px;border:1px solid rgba(255,175,213,.45);border-radius:999px;background:rgba(24,16,34,.72);color:#ffd9ec;font-size:14px;cursor:pointer;backdrop-filter:blur(6px)}
.bowl-expand:hover{background:rgba(58,30,66,.88);border-color:#ffa6cf}
#bowlingStage:fullscreen{height:100vh;border-radius:0}
.bowl-rack{display:flex;flex-wrap:wrap;gap:12px;align-items:center;padding:16px 0 4px}
.bowl-rack-label{letter-spacing:.12em;font-size:12px;text-transform:uppercase;color:#8a5f74}
.ball-rack{display:flex;flex-wrap:wrap;gap:9px}
.ball-swatch{width:32px;height:32px;padding:0;border:2px solid transparent;border-radius:50%;background:radial-gradient(circle at 34% 30%,rgba(255,255,255,.55),transparent 52%),var(--ball);box-shadow:0 3px 8px rgba(88,40,64,.3);cursor:pointer}
.ball-swatch.is-current{border-color:#fff;outline:2px solid #b34978;outline-offset:2px}
.ball-swatch:disabled{cursor:not-allowed;opacity:.45}

/* ── Ten-frame scoresheet ─────────────────────────────────────────────── */
.score-row{display:flex;align-items:stretch;gap:4px;min-width:690px;margin:10px 0;padding:8px;border:1px solid #e8cdd8;border-radius:14px;background:#fffaf6}
.score-row.is-active{border-color:#d1719b;box-shadow:0 0 0 2px rgba(209,113,155,.16)}
.score-who{display:flex;gap:9px;align-items:center;min-width:110px;padding:0 8px;font-size:15px}
.score-ball{width:16px;height:16px;border-radius:50%;box-shadow:inset -2px -2px 4px rgba(0,0,0,.25)}
.score-who b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.score-frame{display:grid;grid-template-rows:auto 1fr auto;flex:1;min-width:46px;border:1px solid #ecd6e0;border-radius:9px;background:#fff;text-align:center}
.score-frame.is-tenth{min-width:66px}
.score-frame.is-current{border-color:#d1719b;background:#fff2f7}
.score-number{padding-top:3px;font-size:10px;color:#a8859a}
.score-rolls{display:flex;justify-content:center;gap:2px;padding:2px}
.score-rolls span{display:grid;place-items:center;min-width:20px;height:22px;border:1px solid #f0dee6;border-radius:5px;font-size:14px;font-weight:600;color:#7c3f5b}
.score-running{padding-bottom:4px;font-size:17px;color:#5f2b44}
.score-total{display:grid;align-content:center;min-width:62px;padding:0 8px;border-left:2px solid #ecd6e0;text-align:right}
.score-total small{font-size:10px;letter-spacing:.1em;color:#a8859a}
.score-total strong{font:22px Georgia;color:#a8325f}
/* Party bowling (3–6 bowlers): a row per seat, edged in the seat's colour, tighter so six fit. */
.bowl-scores.is-party .score-row{margin:6px 0;padding:6px 8px;border-left:5px solid var(--seat,#d1719b)}
.bowl-scores.is-party .score-who{flex:none;width:140px;min-width:0}
.bowl-scores.is-party .score-row.is-winner{background:#fff4dc;border-color:#e2b04c;border-left-color:var(--seat,#e2b04c)}
.bowl-scores.is-party .score-row.is-winner .score-who b::after{content:' ♛';color:#c28a1c}
@media(max-width:600px){
 .bowl-scores.is-party{padding:8px 0}
 .bowl-scores.is-party .score-row{flex-wrap:wrap;min-width:0;gap:2px;margin:4px 0;padding:3px 4px 4px 5px;border-left-width:4px;border-radius:10px}
 .bowl-scores.is-party .score-who{width:100%;flex:0 0 100%;gap:5px;padding:0 2px 1px;font-size:12px}
 .bowl-scores.is-party .score-ball{width:10px;height:10px;flex:none}
 .bowl-scores.is-party .score-frame{min-width:0;border-radius:5px}
 .bowl-scores.is-party .score-frame.is-tenth{flex:1.4}
 .bowl-scores.is-party .score-number{display:none}
 .bowl-scores.is-party .score-rolls{gap:0;padding:1px 0}
 .bowl-scores.is-party .score-rolls span{min-width:0;flex:1;height:14px;border:0;font-size:9px}
 .bowl-scores.is-party .score-running{padding-bottom:1px;font-size:11px}
 .bowl-scores.is-party .score-total{min-width:0;width:30px;flex:none;padding:0 2px;border-left-width:1px}
 .bowl-scores.is-party .score-total small{display:none}
 .bowl-scores.is-party .score-total strong{font-size:15px}
}
.bowl-turn-badge{position:absolute;top:14px;left:14px;z-index:2;display:flex;align-items:center;gap:8px;max-width:calc(100% - 190px);padding:8px 14px 8px 10px;border:1px solid var(--seat);border-radius:999px;background:rgba(24,16,34,.78);color:#fff;font-weight:700;font-size:15px;white-space:nowrap;pointer-events:none;backdrop-filter:blur(6px);box-shadow:0 0 0 3px color-mix(in srgb,var(--seat) 30%,transparent)}
.bowl-turn-badge span{overflow:hidden;text-overflow:ellipsis}
.bowl-turn-badge::before{content:'';flex:none;width:12px;height:12px;border-radius:50%;background:var(--seat);box-shadow:0 0 10px var(--seat)}
@media(max-width:600px){.bowl-expand{top:10px;right:10px;padding:7px 11px;font-size:13px}.bowl-turn-badge{top:10px;left:10px;max-width:calc(100% - 160px);padding:6px 11px 6px 8px;font-size:13px}}

/* ── Eight Ball ───────────────────────────────────────────────────────── */
.pool-header h2{font:clamp(26px,4vw,42px) Georgia;margin:12px 0 6px}
#poolMessage{color:#8a5f74;min-height:1.5em;margin:0}
.pool-stage-wrap{position:relative}
#poolStage{height:clamp(320px,56vh,640px);border-radius:24px;overflow:hidden;touch-action:none;background:#0c0a12;box-shadow:0 0 0 1px rgba(255,143,196,.2),0 20px 50px rgba(18,12,26,.5);cursor:crosshair}
#poolStage canvas{display:block;width:100%;height:100%}
.pool-groups{position:absolute;top:14px;left:14px;display:flex;gap:8px;pointer-events:none}
.pool-group{padding:7px 12px;border:1px solid rgba(255,255,255,.14);border-radius:12px;background:rgba(12,10,18,.72);color:#f2e6ef;backdrop-filter:blur(6px)}
.pool-group.is-active{border-color:#ff8fc4;box-shadow:0 0 0 2px rgba(255,143,196,.28)}
.pool-group b{display:block;font-size:14px}
.pool-group small{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#b79ac9}
.pool-controls{padding:18px 0 4px}
.pool-aimrow{display:flex;gap:18px;flex-wrap:wrap}
.pool-aimrow label{display:grid;gap:7px;flex:1;min-width:150px}
.pool-aimrow input{width:100%;accent-color:#b34978}
.pool-spinrow{display:flex;gap:20px;align-items:end;flex-wrap:wrap;margin-top:16px}
.pool-english{display:grid;gap:7px}
.pool-label{letter-spacing:.12em;font-size:12px;text-transform:uppercase;color:#8a5f74}
.spin-pad{position:relative;width:74px;height:74px;border:2px solid #d8bbc5;border-radius:50%;background:radial-gradient(circle at 34% 30%,#fff,#e6dfe2 62%,#cbbfc6);cursor:pointer;touch-action:none}
.spin-pad::before,.spin-pad::after{content:'';position:absolute;background:rgba(122,74,99,.22)}
.spin-pad::before{left:50%;top:8%;width:1px;height:84%}
.spin-pad::after{top:50%;left:8%;height:1px;width:84%}
.spin-dot{position:absolute;left:50%;top:50%;width:18px;height:18px;padding:0;border:0;border-radius:50%;background:#c8322c;transform:translate(-50%,-50%) translate(var(--x,0),var(--y,0));cursor:pointer}
.pool-remaining{display:grid;gap:10px;padding:16px 0}
.pool-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 12px;border:1px solid #e8cdd8;border-radius:14px;background:#fffaf6}
.pool-row-name{min-width:96px;font-weight:600;color:#733b52}
.pool-row small{color:#8a5f74;font-style:italic}
.pool-chip{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--ball);color:#fff;font:700 12px/1 Helvetica,Arial,sans-serif;font-style:normal;text-shadow:0 1px 2px rgba(0,0,0,.45);box-shadow:inset -2px -3px 6px rgba(0,0,0,.35),0 2px 4px rgba(88,40,64,.25)}
.pool-chip.is-stripe{background:linear-gradient(#fff 0 26%,var(--ball) 26% 74%,#fff 74% 100%);color:#2a2228;text-shadow:none}
.pool-chip.is-eight{background:#15151a}
@media(max-width:600px){.pool-spinrow{flex-direction:column;align-items:stretch}.pool-spinrow .primary{width:100%}.pool-groups{position:static;margin-top:10px}}
.pool-survey{padding:11px 18px;border:1px solid #d8bbc5;border-radius:999px;background:#fff9f5;color:#733b52;font-size:15px;cursor:pointer}
.pool-survey[aria-pressed="true"]{border-color:#b34978;background:#f7e2ea;color:#8f2f55}
.pool-aimrow{align-items:end}

/* Pulling the cue back: the cursor says the drag is a stroke, not an orbit. */
#poolStage canvas{cursor:grab}
#poolStage canvas.is-charging{cursor:ns-resize}
