.viewbar{display:flex;align-items:center;justify-content:center;gap:7px;padding:7px 14px;background:#17262a;border-bottom:1px solid #bea36b30;flex:none;flex-wrap:wrap}.viewbar button{font-size:11px;min-height:36px;padding:7px 12px;border-radius:8px}.viewbar button[aria-pressed=true]{color:#182a28;background:#e9c780;border-color:#e9c780}.view-label{font-size:9px;color:#e9c780;letter-spacing:2px;margin-right:12px}#viewStatus{font-size:10px;color:#b2c9c4}.stage .pool-webgl{position:absolute;inset:0;pointer-events:none;z-index:-1}.stage.is-3d #board{opacity:0}.stage.is-3d .pool-webgl{z-index:0}.stage.is-3d #board{position:relative;z-index:1}.stage .notice,.stage-hint{z-index:2}.stage.is-orbit #board{cursor:grab}.stage.is-orbit #board:active{cursor:grabbing}.pool .stage-hint{display:none}.pool .welcome h1{font-size:38px}.pool .welcome{background:linear-gradient(135deg,#263b3cef,#112426f5)}@media(max-width:650px){.viewbar{gap:5px;padding:5px 7px}.viewbar button{font-size:10px;min-height:40px;padding:6px 8px}.view-label{display:none}#viewStatus{width:100%;text-align:center;font-size:9px}.pool .welcome h1{font-size:29px}.pool .scorebar{height:62px}.pool .notice{max-width:94%}}@media(max-height:500px){.viewbar{padding:3px 8px}.viewbar button{min-height:30px}.view-label,#viewStatus{display:none}.pool .scorebar{height:42px}}
@media(max-width:360px){.pool .brand{font-size:15px;white-space:nowrap}.pool header{padding:0 8px;gap:5px}.pool header nav{gap:5px}.pool header nav a{font-size:9px}.pool header button{padding:5px 7px}.viewbar{gap:4px}.viewbar button{padding:6px;font-size:9px}.pool .round strong{font-size:16px}}
@media(max-height:500px){.pool header{height:32px}.pool .scorebar{height:34px;padding-block:2px}.pool .round strong{font-size:16px;line-height:1}.pool .scorebar .eyebrow{display:none}.pool .controls{padding:3px 12px;gap:12px}.pool .shoot{min-height:44px}.pool .footer{min-height:32px}.pool .footer .invite-direct{min-height:30px}.pool .notice{top:4px;font-size:9px;padding:4px 12px}}
@media(max-width:360px){.pool .round{min-width:78px}.pool .round strong{white-space:nowrap;font-size:16px}.pool .player{min-width:80px}.pool .player small{max-width:93px}}

/* 1081: precise, accessible aiming without changing the table layout. */
#precision{font-size:10px;line-height:1.15;max-width:58px;min-height:42px;padding:4px 6px;border-color:#bfa46a66}#precision[aria-pressed=true]{background:#e9c780;color:#182a28}.pool button:focus-visible{outline:2px solid #ffdf8e;outline-offset:3px}

@media(min-width:361px) and (max-width:650px){.viewbar{gap:4px}.viewbar button{font-size:9px;padding:6px}.viewbar #viewStatus{line-height:1.3}}
@media(max-width:360px){.viewbar{display:grid;grid-template-columns:repeat(3,1fr)}.viewbar button{width:100%}#viewStatus{grid-column:1/-1}}

/*1092: placement actions remain reachable on narrow screens. */
#moveCue,#cancelCue{min-height:44px}body.placing #shoot,body.placing #moveCue{display:none}body.placing #board{cursor:move}
@media(max-width:600px){#moveCue,#cancelCue,#placeCue{font-size:12px;padding:8px 10px}.pool .controls{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px}.pool .controls .power{min-width:0;width:100%}.pool .controls #moveCue,.pool .controls #shoot{width:100%}.pool.placing .controls{display:flex}.pool.placing #cancelCue{flex:none}}

/*1116: one explicit camera mode, touch-sized controls and a full-table escape. */
#cameraTools{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap}#cameraTools[hidden]{display:none}#zoomValue{font-size:11px;min-width:37px;text-align:center;color:#ead5a9}#cameraTools #zoomIn,#cameraTools #zoomOut,#cameraTools #turnView{min-width:40px;font-size:18px}.stage.is-pan #board{cursor:move}.pool #board{touch-action:none}.pool .stage .notice{pointer-events:none}.pool .viewbar button{min-height:40px}.pool #moveView{border-color:#e9c780;color:#f4dca9}.pool #moveView[aria-pressed=true]{color:#182a28}.pool .stage.is-orbit~.controls #shoot{opacity:.45}
@media(max-width:650px){.pool .viewbar{display:flex;gap:5px;padding:5px 7px}.pool .viewbar>button{flex:1;width:auto;font-size:11px;min-height:44px;padding:6px}.pool #cameraTools{width:100%;gap:5px}.pool #cameraTools button{width:auto;min-height:44px;padding:6px 9px;font-size:11px}.pool #cameraTools #closeView{display:none}.pool #viewStatus{font-size:10px;line-height:1.35}}
@media(max-height:500px){.pool .viewbar{padding:3px 8px;gap:5px}.pool #cameraTools{width:auto}.pool .viewbar button,.pool #cameraTools button{min-height:36px}.pool #cameraTools #closeView{display:none}}

/* Give short phones the table space while shot input is suspended. */
@media(max-width:650px) and (max-height:700px){.pool .stage.is-orbit~.controls{display:none}.pool .stage.is-orbit .notice{display:none}}

/*1121: warm private-club materials and a definitive match-complete card. */
body.pool{background:#101a18}.pool header,.pool .footer{background:linear-gradient(100deg,#101b19,#172621);border-color:#bfa16a30}.pool .scorebar{background:linear-gradient(110deg,#142421,#0c1918 70%)}.pool .viewbar{background:#13201e;border-color:#c5a96c36}.pool .stage{background:#2d211b}.pool .controls{background:linear-gradient(110deg,#182724,#11201e);border-top:1px solid #d1b67733}.pool button,.pool .button{border-radius:8px}.pool button.primary{background:linear-gradient(125deg,#f2d69a,#c5a163);border-color:#efdcab;color:#20281f;box-shadow:inset 0 1px #fff5d940,0 4px 14px #0002}.pool .welcome{background:linear-gradient(135deg,#172e29f5,#0b1817f7);border:1px solid #c4a46670;box-shadow:0 32px 100px #0008,inset 0 0 0 5px #c8a76608}.pool .welcome .fine{color:#acb6aa}.pool .notice{background:#0c1714d9;border-color:#d7b77770;color:#eddfbc;backdrop-filter:blur(7px)}.pool .dialog{background:linear-gradient(135deg,#182b26,#0d1916);border:1px solid #b99b60;color:#f5ead7}.pool .pool-result{text-align:center;width:min(430px,calc(100vw - 32px));padding:34px 30px 30px;border-radius:22px;box-shadow:0 28px 100px #000a,inset 0 0 0 5px #c3a76a0b}.pool .pool-result::backdrop{background:#030a09bb;backdrop-filter:blur(8px)}.pool-result h2{font:normal 30px/1.15 Georgia,serif;color:#f4dfae;margin:16px 0 12px}.pool-result #resultText{color:#b7c9bf;line-height:1.6}.pool-result #resultNext{width:100%;min-height:50px;margin-top:20px;font-size:16px}.result-ball{width:76px;height:76px;border-radius:50%;margin:0 auto 23px;display:grid;place-items:center;background:radial-gradient(circle at 28% 24%,#78817c 0,#26302a 22%,#0b120f 50%,#000 85%);box-shadow:0 8px 20px #0009,inset -3px -3px 8px #0007;border:1px solid #a4ab9129}.result-ball span{display:grid;place-items:center;background:#eee4ce;width:34px;height:34px;border-radius:50%;font:bold 28px Georgia;color:#19241d;box-shadow:inset 1px 2px 4px #8c887740}.pool-result .eyebrow{color:#c9ac71;letter-spacing:3px;font-size:10px}@media(max-height:500px){.pool .pool-result{padding:18px 24px}.result-ball{width:52px;height:52px;margin-bottom:12px}.pool-result h2{font-size:24px;margin:10px 0}.pool-result #resultNext{margin-top:8px}}

.pool .stage{background:#171614}

/* A compact cue ball is always reachable without shrinking the playing surface. */
.spin-open{position:absolute;z-index:4;left:12px;bottom:12px;display:flex;align-items:center;gap:8px;padding:7px 11px;background:#10241fee;color:#f3dfb4;border:1px solid #c6a66b88;box-shadow:0 4px 16px #0006;min-height:52px;text-align:left;backdrop-filter:blur(8px)}.spin-open small{display:block;font-size:10px;color:#c0ccbd;max-width:100px}.mini-cue{position:relative;display:block;width:34px;height:34px;border-radius:50%;background:radial-gradient(circle at 30% 25%,#fff 0,#f7eedb 48%,#a6a596 80%,#4e5d51);box-shadow:0 2px 5px #0008;flex:none}.mini-cue i,#contactDot{position:absolute;left:50%;top:50%;border-radius:50%;transform:translate(-50%,-50%);background:#d72b30;border:1px solid #ff8e83;box-shadow:0 1px 4px #490606aa}.mini-cue i{width:7px;height:7px}.spin-dialog{width:min(420px,calc(100vw - 28px));padding:25px 28px;max-height:calc(100dvh - 32px);overflow:auto}.spin-dialog h2{font:30px Georgia;margin:10px 0;color:#f2ddb0}.spin-dialog>p{font-size:13px;color:#b7cbbf;line-height:1.45}.contact-wrap{position:relative;width:240px;height:208px;margin:18px auto 8px;display:grid;place-items:center}.cue-contact{position:relative;width:164px;height:164px;border-radius:50%;background:radial-gradient(circle at 31% 25%,#fff 0,#fff9eb 37%,#ddd8c8 65%,#7e8e82 85%,#314b40 100%);box-shadow:0 10px 22px #0007,inset -2px -3px 8px #0002;touch-action:none;cursor:crosshair;outline-offset:5px}.cue-contact:focus-visible{outline:2px solid #eac781}.safe-tip{position:absolute;inset:10%;border:1px dashed #667a6555;border-radius:50%;pointer-events:none}.cross-x,.cross-y{position:absolute;background:#667a6530;pointer-events:none}.cross-x{left:12%;right:12%;height:1px;top:50%}.cross-y{top:12%;bottom:12%;width:1px;left:50%}#contactDot{width:16px;height:16px;pointer-events:none}.contact-wrap>span{position:absolute;font-size:9px;letter-spacing:1px;color:#bda875}.contact-top{top:0}.contact-bottom{bottom:0}.contact-left{left:0;top:50%}.contact-right{right:0;top:50%}.spin-readout{text-align:center;min-height:18px;margin:7px 0 12px!important}.spin-presets{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:18px}.spin-presets button{min-height:38px;padding:7px;font-size:12px}.spin-dialog .elevation-label{display:flex;justify-content:space-between;font-size:12px;color:#d7c298}.elevation-label output{font-weight:bold}.spin-dialog input[type=range]{width:100%;margin:14px 0;accent-color:#e4bd76}.spin-help{font-size:11px!important;margin:0 0 18px}.spin-dialog .row{display:flex;gap:10px}.spin-dialog .row button{flex:1;min-height:44px}.pool .stage.is-orbit .spin-open{display:none}
@media(max-height:600px){.spin-dialog{padding:14px 20px}.contact-wrap{height:150px;margin:8px auto}.cue-contact{width:118px;height:118px}.spin-dialog h2{font-size:24px}.spin-presets{margin-bottom:10px}.spin-help{margin-bottom:10px}}

@media(max-width:650px){.pool .spin-open{left:8px;bottom:8px;width:50px;min-height:60px;padding:5px;flex-direction:column;gap:3px;text-align:center}.spin-open>span:last-child{font-size:10px;line-height:11px}.spin-open small{display:none}}

/* Subtle photographic edge falloff, never an image behind the room. */
.pool .stage.is-3d::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse at 50% 44%,transparent 48%,#040b102b 100%)}
