
:root{color-scheme:dark;--bg:#102b29;--panel:#173632;--cream:#f7efd9;--muted:#a4bdb0;--gold:#e9c77f;--line:#ffffff1b;--green:#20493d;font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--cream);height:100%;}body{display:flex;flex-direction:column;height:100dvh;overflow:hidden}button,input,select,a{font:inherit;-webkit-tap-highlight-color:transparent}button,.button{min-height:44px;padding:10px 16px;border:1px solid #aac4af38;border-radius:10px;background:#22473b;color:var(--cream);cursor:pointer;font-size:13px;font-weight:650;text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;touch-action:manipulation}button:hover,.button:hover{background:#355e4b}button:disabled{opacity:.4;cursor:default}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #f4d495;outline-offset:3px}button.primary,.putt{background:var(--gold);border-color:var(--gold);color:#17352c}.primary:hover,.putt:hover{background:#ffdc99}header{height:74px;flex:none;display:flex;justify-content:space-between;align-items:center;padding:0 30px;background:#0d2424;border-bottom:1px solid var(--line);z-index:2}.brand{display:flex;gap:12px;align-items:center;text-decoration:none;color:var(--cream);font-weight:750;font-size:15px;letter-spacing:1.7px}.brand small{display:block;font-size:8px;letter-spacing:2.3px;color:var(--muted);margin-top:6px}.brand-icon{border:1px solid var(--gold);border-radius:50%;width:42px;height:42px;display:flex;align-items:center;justify-content:center;font:20px Georgia;color:var(--gold);letter-spacing:-5px;padding-right:4px}.brand-icon span{transform:translateY(5px)}nav{display:flex;gap:9px}nav button{background:transparent;font-size:11px;min-height:38px}main{max-width:1600px;width:100%;margin:auto;flex:1;min-height:0;display:grid;grid-template-columns:235px minmax(280px,1fr) 230px;padding:0 28px;gap:26px}.left-panel,.right-panel{padding:34px 0 18px;overflow-y:auto;scrollbar-width:thin}.eyebrow{font-size:9px;letter-spacing:2px;font-weight:750;color:var(--gold)}h1,h2{font-family:Georgia,"Times New Roman",serif;font-weight:400;letter-spacing:-1.1px}h1{font-size:38px;line-height:1.13;margin:22px 0 15px}.intro{font-size:12px;line-height:1.85;color:var(--muted)}.course-summary{margin:32px 0 23px;padding-top:24px;border-top:1px solid var(--line)}.course-summary>span{font-size:8px;letter-spacing:1.8px;color:var(--gold)}.course-summary h2{font-size:25px;margin:12px 0}.course-summary p{font-size:12px;line-height:1.7;color:var(--muted);min-height:60px}.facts{display:flex;gap:30px;margin-top:22px}.facts b{display:block;font:26px Georgia}.facts small{display:block;font-size:8px;letter-spacing:1.5px;color:var(--muted);margin-top:6px}.invite{width:100%}.fine{font-size:10px;line-height:1.7;color:var(--muted)}.text-button{border:0;background:none;padding:0;justify-content:flex-start;font-size:11px;color:var(--gold)}.classic{display:block;font-size:10px;color:#adc6b6;margin-top:16px;line-height:1.5}.play-column{min-height:0;display:flex;flex-direction:column;border-inline:1px solid var(--line);background:#142e2c}.score-strip{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:77px;padding:12px 18px;flex:none}.player{display:flex;align-items:center;gap:9px;opacity:.6;min-width:0}.player.active{opacity:1}.player b{font-size:12px;display:block;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player small{display:block;font-size:10px;color:var(--muted);margin-top:5px}.ball-icon{width:25px;height:25px;flex:none;border-radius:50%;box-shadow:1px 3px 6px #0005;background:radial-gradient(circle at 30% 25%,#fff,#e9eadd 55%,#829b83)}.ball-icon.gold{background:radial-gradient(circle at 30% 25%,#fff4ac,#e0ac4c 55%,#927122)}.hole-pill{font-size:9px;letter-spacing:1px;color:var(--gold);white-space:nowrap}.stage{position:relative;flex:1;min-height:100px;overflow:hidden;background:#477b75}canvas{display:block;width:100%;height:100%;touch-action:none;outline:0}.course-tag{position:absolute;left:15px;top:16px;border:1px solid #ffffff30;background:#123b36ce;border-radius:5px;padding:8px 10px;font-size:8px;letter-spacing:1.5px;pointer-events:none}.course-tag span{margin-left:10px;color:var(--gold)}.view-button{position:absolute;right:12px;top:12px;min-height:32px;font-size:10px;padding:6px 9px;background:#14392be3}.shot-message{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);width:max-content;max-width:90%;text-align:center;font-size:11px;line-height:1.5;padding:8px 15px;border:1px solid #f5df9a30;border-radius:30px;background:#133b30ee;color:#fff2c4;pointer-events:none}.controls{padding:13px 16px;display:flex;gap:15px;align-items:center;flex:none;background:#17372f}.aim{display:flex;align-items:center;gap:4px}.aim button{width:38px;padding:0;font-size:20px}.aim span{font-size:8px;letter-spacing:1px;margin:0 4px;color:var(--muted)}.power{font-size:8px;letter-spacing:1.5px;flex:1;min-width:55px;color:var(--muted)}.power output{float:right;color:var(--gold);letter-spacing:0;font-size:10px}input[type=range]{display:block;width:100%;accent-color:var(--gold);height:30px;margin:4px 0 0}.putt{min-width:108px;font-size:16px;height:53px}.putt span{font-size:23px;margin-left:12px}.mobile-tools{padding:0 14px 8px;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:9px;color:var(--muted);flex:none}.mobile-tools button{display:none}.round-title{border-bottom:1px solid var(--line);padding-bottom:13px}.round-title p{margin:0}.round-title button{min-height:34px}.mini-scores{padding-top:10px}.score-line{display:grid;grid-template-columns:24px 1fr 25px;align-items:center;gap:7px;min-height:40px;border-bottom:1px solid #ffffff09;font-size:10px;color:var(--muted)}.score-line.active{color:var(--cream);background:#e9c77f0e;border-radius:7px}.score-line .num{font:16px Georgia;color:#ddc592;text-align:center}.score-line b{font-size:9px;font-weight:500;display:block}.score-line small{font-size:8px;color:#7e9e8c}.tip-card{border:1px solid var(--line);background:linear-gradient(135deg,#2b4e3c,#16342c);padding:16px;margin-top:25px;border-radius:12px}.tip-icon{font:24px Georgia;color:var(--gold)}.tip-card p{font:19px/1.4 Georgia;margin:6px 0 13px}.tip-card small{font-size:7px;letter-spacing:2px;color:var(--muted)}.legend{display:grid;gap:10px;margin:25px 0;font-size:10px;color:var(--muted)}.legend i{display:inline-block;width:11px;height:11px;border-radius:4px;margin-right:7px;vertical-align:middle}.legend .water{background:#59afc0}.legend .sand{background:#d7ba76}.legend .slope{background:#99b66e}dialog{color:var(--cream);background:linear-gradient(130deg,#234b3d,#102d2c);border:1px solid #ddcfa24d;border-radius:20px;width:min(530px,calc(100% - 24px));max-height:90dvh;padding:32px;box-shadow:0 30px 100px #0009;overflow:auto}dialog::backdrop{background:#062420a3;backdrop-filter:blur(5px)}dialog h2{font-size:35px;line-height:1.08;margin:14px 0}dialog p,dialog li{font-size:13px;line-height:1.7;color:#c4d4c6}dialog ol{padding-left:21px}dialog li{padding-bottom:12px}dialog .eyebrow{color:var(--gold);font-size:9px}dialog .fine{font-size:10px;color:var(--muted)}.dialog-x{position:absolute;top:10px;right:10px;min-height:34px;width:34px;padding:0;border:0;background:transparent;font-size:25px}.welcome{width:min(580px,calc(100% - 24px));padding:38px}.welcome h2{font-size:48px}.mode-grid,.menu-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-top:18px}.mode-grid button{display:block;text-align:left;padding:14px;min-height:65px;font-size:13px}.mode-grid small{display:block;font-size:10px;font-weight:400;opacity:.7;margin-top:4px}.course-choice{margin:20px 0 10px}label{display:block;font-size:10px;color:var(--muted);letter-spacing:.4px}select,input:not([type=range]){display:block;background:#0d2927;border:1px solid #87aa8f66;color:var(--cream);width:100%;min-height:44px;border-radius:7px;padding:10px;margin:8px 0 15px;font-size:13px}.wide{width:100%;margin-top:12px}.opponent-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:22px 0}.opponent-cards button{display:flex;flex-direction:column;text-align:center;padding:20px 12px}.opponent-cards b{font:24px Georgia}.opponent-cards small{font-size:9px;color:var(--gold)}.opponent-cards em{font-style:normal;font-size:10px;line-height:1.5;color:var(--muted);font-weight:400}.avatar{display:grid;place-items:center;border-radius:50%;width:57px;height:57px;border:2px solid #d6c999;background:linear-gradient(120deg,#739c78,#315c52);font:28px Georgia;box-shadow:0 4px 0 #081f24}.avatar.gold{background:linear-gradient(120deg,#c69c59,#675143)}.share-actions{display:flex;flex-wrap:wrap;gap:7px}table{border-collapse:collapse;width:100%;font-size:12px}td,th{border-bottom:1px solid var(--line);padding:10px 5px;text-align:center}td:first-child,th:first-child{text-align:left}th{font-size:10px;color:var(--muted)}.result-stars{font-size:33px;color:var(--gold);letter-spacing:8px;margin:20px 0}.result-scores{display:flex;justify-content:space-around;text-align:center;margin:18px 0}.result-scores b{display:block;font:38px Georgia;color:var(--gold)}.hole-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.hole-grid button{display:block;text-align:left;min-height:98px;padding:11px}.hole-grid b{font:24px Georgia;color:var(--gold);display:block}.hole-grid span{font-size:9px;display:block;line-height:1.5;margin-top:5px}.hole-grid small{font-size:9px;color:var(--muted)}.error{color:#ffc2ad!important}[hidden]{display:none!important}
@media(min-width:1600px){main{grid-template-columns:280px minmax(300px,1fr) 260px;gap:40px}.left-panel h1{font-size:45px}}
@media(max-width:1100px){main{grid-template-columns:185px minmax(270px,1fr);gap:18px;padding:0 20px}.right-panel{display:none}h1{font-size:30px}.facts{gap:25px}.left-panel{padding-top:24px}}
@media(max-width:720px){header{height:53px;padding:0 12px}.brand{font-size:10px;letter-spacing:1px;gap:7px}.brand small{font-size:6px;letter-spacing:1.2px;margin-top:3px}.brand-icon{height:29px;width:29px;font-size:16px}nav{gap:3px}nav button{padding:5px 7px;font-size:9px;min-height:34px}#helpBtn{display:none}main{display:flex;padding:0;gap:0;width:100%;max-width:none}.left-panel{display:none}.play-column{width:100%;border:0}.score-strip{min-height:61px;padding:7px 12px}.player{gap:6px}.player b{font-size:11px;max-width:90px}.player small{font-size:9px}.ball-icon{height:21px;width:21px}.hole-pill{font-size:8px}.course-tag{left:10px;top:12px;padding:6px 8px;font-size:7px}.view-button{right:9px;top:9px;font-size:9px;min-height:31px}.controls{gap:8px;padding:8px 10px}.aim button{width:40px;min-height:44px}.aim span{display:none}.putt{min-width:84px;padding:8px 12px;height:48px;font-size:15px}.putt span{margin:0;font-size:19px}.power{font-size:8px}.mobile-tools{padding:0 10px max(6px,env(safe-area-inset-bottom));gap:6px}.mobile-tools button{display:inline-flex;font-size:10px;min-height:37px;padding:7px 10px}.mobile-tools #connection{font-size:8px;max-width:100px;line-height:1.4}.shot-message{bottom:10px;font-size:10px;padding:7px 12px;max-width:92%}dialog{padding:25px 20px;max-height:92dvh}.welcome{padding:28px 22px}.welcome h2{font-size:39px}.welcome p{font-size:12px}.mode-grid button{padding:11px;font-size:12px}.mode-grid small{font-size:9px}.hole-grid{gap:7px}.hole-grid button{padding:9px;min-height:102px}.opponent-cards{gap:8px}.opponent-cards button{padding:14px 9px}.opponent-cards small{font-size:8px}}
@media(max-height:580px) and (min-width:650px){header{height:45px}main{grid-template-columns:165px 1fr}.left-panel{padding:10px 0}.left-panel h1,.left-panel .intro,.left-panel>.eyebrow{display:none}.course-summary{margin:0 0 10px;padding:10px 0}.facts{margin:10px 0}.course-summary p{min-height:0;margin:5px 0}.left-panel .fine,.classic{display:none}.score-strip{min-height:46px;padding:5px 15px}.stage{min-height:120px}.controls{padding:4px 12px}.putt{height:44px}.mobile-tools{font-size:8px;padding-bottom:3px}.course-tag{top:8px}.shot-message{bottom:6px;font-size:9px}.right-panel{display:none}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}

/* 1035: course collection and handcrafted golfer portraits. */
.avatar{width:80px;height:80px;overflow:hidden}.avatar svg{width:100%;height:100%;display:block}.collection{padding:10px 14px;border:1px solid #d6bb7650;border-radius:9px;background:#12392d;color:var(--gold)!important;font-size:12px!important}.hole-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.hole-grid button{padding:0 0 12px;overflow:hidden;position:relative}.hole-grid .course-preview{display:block;width:100%;height:120px;object-fit:cover;pointer-events:none;border-bottom:1px solid var(--line);margin-bottom:8px}.hole-grid b,.hole-grid span,.hole-grid small,.hole-grid em{margin-left:10px;margin-right:8px}.hole-grid b{font-size:20px}.hole-grid span{font-size:10px;min-height:30px}.earned-stars{display:block;font-style:normal;letter-spacing:2px;color:var(--gold);font-size:12px;margin-top:7px}#practice{width:min(690px,calc(100% - 24px))}.share-actions .button{min-width:80px}dialog a{color:var(--gold)}@media(max-width:480px){.hole-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.hole-grid .course-preview{height:130px}.player small{font-size:8px}.avatar{width:72px;height:72px}}

/* ===================================================================
   #261010-UX-ENHANCE (Franklin) — avatars, putter swing, canvas-corner
   active-player badge, birdie/par sink celebration. All CSS-driven so
   the game loop never pays a frame-time cost. See golf-ux-enhance.js
   for the JS side (DOM observers + window.ufaGolfCelebrate).
   =================================================================== */

/* --- Score-strip golfer avatars (replaces old .ball-icon) ------------- */
.golfer-avatar{position:relative;display:inline-block;width:44px;height:48px;flex:0 0 44px;color:#4a9eff}
.golfer-avatar.seat1{color:#22c55e}
.golfer-avatar svg{width:100%;height:100%;display:block;overflow:visible}
.golfer-avatar .putter{transform-origin:22px 24px;transition:transform .15s ease-out}
.golfer-avatar .ball-pip{position:absolute;bottom:-2px;right:-2px;width:11px;height:11px;border-radius:50%;background:#fff;border:1.5px solid #0f172a;box-shadow:0 1px 3px rgba(0,0,0,.4)}
.golfer-avatar .ball-pip.gold{background:#eab308}
.player.active .golfer-avatar{filter:drop-shadow(0 0 6px currentColor)}
.player.active .golfer-avatar::after{content:"";position:absolute;inset:-6px;border-radius:50%;border:2px solid currentColor;opacity:0;animation:ufaAvatarPulse 1.8s ease-in-out infinite}
@keyframes ufaAvatarPulse{0%{transform:scale(.6);opacity:.9}70%{transform:scale(1.25);opacity:0}100%{transform:scale(1.25);opacity:0}}

/* Putter rocks back-and-forth only when it's actually my turn to aim.
   body.is-aiming is toggled by golf-ux-enhance.js watching #shoot's
   disabled/hidden attrs. .player.active scopes it to the correct seat. */
body.is-aiming .player.active .golfer-avatar .putter{animation:ufaPutterRock 1.2s ease-in-out infinite}
@keyframes ufaPutterRock{0%,100%{transform:rotate(-18deg)}50%{transform:rotate(22deg)}}
@media(prefers-reduced-motion:reduce){
    body.is-aiming .player.active .golfer-avatar .putter{animation:none}
    .player.active .golfer-avatar::after{animation:none;opacity:.4}
}

/* --- Canvas-corner "golfer standing there" badge --------------------- */
#canvasGolferBadge{position:absolute;left:14px;bottom:14px;display:none;align-items:center;gap:10px;padding:6px 12px 6px 6px;background:rgba(10,15,25,.78);backdrop-filter:blur(6px);border:1px solid rgba(74,158,255,.55);border-radius:999px;color:#e2e8f0;font:600 12px/1 system-ui,-apple-system,sans-serif;pointer-events:none;z-index:20;max-width:70%;box-shadow:0 4px 14px rgba(0,0,0,.4)}
#canvasGolferBadge.visible{display:inline-flex}
#canvasGolferBadge.seat1{border-color:rgba(34,197,94,.6)}
#canvasGolferBadge .badge-golfer{display:inline-block;width:32px;height:40px;color:#4a9eff}
#canvasGolferBadge.seat1 .badge-golfer{color:#22c55e}
#canvasGolferBadge .badge-golfer svg{width:100%;height:100%;display:block;overflow:visible}
#canvasGolferBadge .badge-golfer .putter{transform-origin:22px 24px}
body.is-aiming #canvasGolferBadge.visible .badge-golfer .putter{animation:ufaPutterRock 1.2s ease-in-out infinite}
#canvasGolferName{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px;letter-spacing:.02em}
@media(max-width:600px){#canvasGolferBadge{left:8px;bottom:8px;font-size:11px;padding:5px 10px 5px 5px}#canvasGolferBadge .badge-golfer{width:26px;height:34px}#canvasGolferName{max-width:140px}}

/* --- Sink celebration overlay (birdie / par / ace) ------------------- */
#sinkCelebrate{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;opacity:0;transform:scale(.6);transition:opacity .18s ease-out,transform .18s ease-out;z-index:30;gap:4px}
#sinkCelebrate.show{opacity:1;transform:scale(1)}
#sinkCelebrate #sinkCelebrateEmoji{font-size:clamp(42px,10vw,88px);line-height:1;filter:drop-shadow(0 4px 14px rgba(0,0,0,.5));animation:ufaBounce .9s ease-in-out infinite alternate}
#sinkCelebrate #sinkCelebrateLabel{font:900 clamp(28px,6.5vw,56px)/1 system-ui,-apple-system,sans-serif;letter-spacing:.08em;text-shadow:0 2px 10px rgba(0,0,0,.65),0 0 20px currentColor;color:#fde68a}
#sinkCelebrate.ace #sinkCelebrateLabel{color:#f472b6}
#sinkCelebrate.birdie #sinkCelebrateLabel{color:#22c55e}
#sinkCelebrate.par #sinkCelebrateLabel{color:#4a9eff;font-weight:800;font-size:clamp(22px,5vw,42px);letter-spacing:.04em}
#sinkCelebrate.par #sinkCelebrateEmoji{font-size:clamp(32px,7vw,60px)}
@keyframes ufaBounce{from{transform:translateY(-6px) rotate(-6deg)}to{transform:translateY(6px) rotate(6deg)}}

/* Confetti: 6 colored squares drifting outward from center. Only show
   for the louder tiers (ace/birdie) — par gets just the emoji + text. */
#sinkCelebrate .confetti{position:absolute;width:12px;height:12px;border-radius:2px;opacity:0;top:50%;left:50%}
#sinkCelebrate.ace .confetti,#sinkCelebrate.birdie .confetti{animation:ufaConfetti 1.1s ease-out forwards}
#sinkCelebrate .c1{background:#f472b6;--tx:-120px;--ty:-70px;--rot:360deg;animation-delay:0s}
#sinkCelebrate .c2{background:#22c55e;--tx: 110px;--ty:-80px;--rot:-320deg;animation-delay:.05s}
#sinkCelebrate .c3{background:#fde68a;--tx:-140px;--ty: 60px;--rot:280deg;animation-delay:.1s}
#sinkCelebrate .c4{background:#4a9eff;--tx: 130px;--ty: 70px;--rot:-260deg;animation-delay:.08s}
#sinkCelebrate .c5{background:#f97316;--tx: -40px;--ty:-130px;--rot:420deg;animation-delay:.03s}
#sinkCelebrate .c6{background:#a855f7;--tx:  60px;--ty: 130px;--rot:-380deg;animation-delay:.12s}
@keyframes ufaConfetti{0%{opacity:0;transform:translate(-50%,-50%) rotate(0)}10%{opacity:1}100%{opacity:0;transform:translate(calc(-50% + var(--tx)),calc(-50% + var(--ty))) rotate(var(--rot))}}

@media(prefers-reduced-motion:reduce){
    #sinkCelebrate #sinkCelebrateEmoji{animation:none}
    #sinkCelebrate .confetti{animation:none;display:none}
}

/* ===================================================================
   #261010-POLISH (Franklin) — more life for BOTH players, especially
   the one waiting. All CSS; JS half lives in golf-ux-enhance.js.
   =================================================================== */

/* Status pill under each player's name — "aiming…" / "ball rolling…" /
   "up next" / "waiting…". Tiny amber dot pulses on the active one so
   you catch it with peripheral vision while watching the ball. */
.player .ux-status-pill{display:block;font:600 10px/1.4 system-ui,-apple-system,sans-serif;letter-spacing:.08em;text-transform:uppercase;color:#64748b;margin-top:3px}
.player .ux-status-pill[data-active="1"]{color:#fbbf24}
.player .ux-status-pill[data-active="1"]::before{content:"";display:inline-block;width:6px;height:6px;border-radius:50%;background:#fbbf24;margin-right:5px;vertical-align:middle;box-shadow:0 0 4px #fbbf24;animation:ufaStatusDot 1.4s ease-in-out infinite}
@keyframes ufaStatusDot{0%,100%{opacity:.35;transform:scale(.75)}50%{opacity:1;transform:scale(1.15)}}

/* Big "actually swinging" animation when the active player hits Putt.
   One-shot via `.ux-swinging` class added by JS, removed after 480ms.
   Overrides the gentle rock during this window. */
.golfer-avatar.ux-swinging .putter,
#canvasGolferBadge .badge-golfer.ux-swinging .putter{
    animation:ufaPutterSwingShot .45s cubic-bezier(.42,0,.3,1.4) 1!important
}
@keyframes ufaPutterSwingShot{
    0%  {transform:rotate(-32deg)}
    35% {transform:rotate(-55deg)}  /* backswing wind-up */
    70% {transform:rotate(50deg)}   /* follow-through */
    100%{transform:rotate(-18deg)}  /* settle */
}
.golfer-avatar.ux-swinging{animation:ufaBodyShift .45s ease-out}
@keyframes ufaBodyShift{0%{transform:translateX(0)}40%{transform:translateX(-2px)}70%{transform:translateX(1px)}100%{transform:translateX(0)}}

/* Idle breathing for the WAITING player — gentle up/down bob so the
   avatar isn't a frozen mannequin. Pauses when it's your turn (that
   avatar has the rocking putter instead). */
.player:not(.active) .golfer-avatar{animation:ufaIdleBreathe 4s ease-in-out infinite}
@keyframes ufaIdleBreathe{0%,100%{transform:translateY(0)}50%{transform:translateY(-1.5px) scale(1.015)}}
@media(prefers-reduced-motion:reduce){
    .player:not(.active) .golfer-avatar{animation:none}
    .player .ux-status-pill[data-active="1"]::before{animation:none}
}

/* ===================================================================
   #261010-AIM-PRESENCE Claude — opponent aim ghost (online friend only).
   Server populates state.aim[seat] when the opponent broadcasts; the
   enhance script toggles .visible and sets putter rotation + power width.
   =================================================================== */
#oppAimGhost{position:absolute;right:14px;bottom:14px;display:none;align-items:center;gap:12px;padding:10px 14px 10px 10px;background:rgba(10,15,25,.72);backdrop-filter:blur(6px);border:1.5px solid rgba(74,158,255,.65);border-radius:14px;color:#4a9eff;pointer-events:none;z-index:21;max-width:72%;box-shadow:0 4px 14px rgba(0,0,0,.45),0 0 20px rgba(74,158,255,.18);animation:ufaGhostFadeIn .35s ease-out}
#oppAimGhost.visible{display:inline-flex}
#oppAimGhost.seat1{color:#22c55e;border-color:rgba(34,197,94,.6);box-shadow:0 4px 14px rgba(0,0,0,.45),0 0 20px rgba(34,197,94,.18)}
#oppAimGhost .ghost-golfer{position:relative;width:46px;height:58px;flex:0 0 46px}
#oppAimGhost .ghost-golfer svg{width:100%;height:100%;display:block;overflow:visible}
#oppAimGhost .ghost-putter{position:absolute;left:50%;top:48%;width:0;height:0;transform-origin:0 0}
#oppAimGhost .ghost-putter-line{position:absolute;top:0;left:-1px;width:2px;height:34px;background:currentColor;border-radius:1px;transform-origin:1px 0;box-shadow:0 0 6px currentColor;animation:ufaGhostPutterPulse 1.3s ease-in-out infinite}
#oppAimGhost .ghost-putter-line::after{content:"";position:absolute;left:-5px;bottom:-3px;width:12px;height:4px;background:currentColor;border-radius:1px}
#oppAimGhost .ghost-meta{display:flex;flex-direction:column;gap:5px;min-width:0;max-width:200px}
#oppAimGhost #oppAimLabel{font:600 12px/1 system-ui,-apple-system,sans-serif;letter-spacing:.04em;color:#e2e8f0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#oppAimGhost #oppAimLabel::after{content:"…";animation:ufaGhostDots 1.2s steps(4) infinite;color:currentColor}
#oppAimGhost .ghost-power{width:120px;height:5px;background:rgba(255,255,255,.12);border-radius:3px;overflow:hidden}
#oppAimGhost .ghost-power-fill{height:100%;width:0;background:currentColor;transition:width .4s ease-out;border-radius:3px;box-shadow:0 0 4px currentColor}
@keyframes ufaGhostFadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@keyframes ufaGhostPutterPulse{0%,100%{opacity:.65}50%{opacity:1}}
@keyframes ufaGhostDots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}100%{content:""}}
@media(max-width:600px){
    #oppAimGhost{right:8px;bottom:8px;padding:8px 10px 8px 8px;gap:8px}
    #oppAimGhost .ghost-golfer{width:36px;height:46px;flex-basis:36px}
    #oppAimGhost #oppAimLabel{font-size:11px}
    #oppAimGhost .ghost-power{width:90px}
}
@media(prefers-reduced-motion:reduce){
    #oppAimGhost{animation:none}
    #oppAimGhost .ghost-putter-line{animation:none}
    #oppAimGhost #oppAimLabel::after{animation:none;content:"…"}
    #oppAimGhost .ghost-power-fill{transition:none}
}

/*1093: par is always visible; waiting indicators do not invent player motion. */
.hole-summary{flex:none;text-align:center;min-width:64px}#holePar{display:block;font-size:13px;letter-spacing:1px;color:var(--cream);margin-top:4px}
.score-strip .player{flex:1;min-width:0}.score-strip .player>div{min-width:0}.score-strip .player:last-child{justify-content:flex-end}
body.is-aiming .player.active .golfer-avatar .putter,body.is-aiming #canvasGolferBadge.visible .badge-golfer .putter,#oppAimGhost .ghost-putter-line{animation:none}
#oppAimGhost #oppAimLabel::after{content:'';animation:none}
.player .ux-status-pill[data-active="1"]::before{animation:none;opacity:.8}
@media(max-width:600px){.score-strip{gap:6px}.score-strip .player{gap:5px}.score-strip .player b{max-width:100px}.player .ux-status-pill{font-size:8px;letter-spacing:.02em}.hole-pill{font-size:8px}#holePar{font-size:12px}}

#sinkCelebratePlayer{max-width:90%;text-align:center;font-size:clamp(18px,4vw,30px);font-weight:750;color:white;text-shadow:0 2px 8px #000;margin-bottom:5px;overflow-wrap:anywhere}#sinkCelebrateLabel{max-width:94%;text-align:center}.result-scores small{display:block;color:var(--muted);font-size:12px;margin-top:6px}

@media(max-width:600px){#canvasGolferBadge.visible{display:none}.opponent-aim-active .shot-message,.opponent-aim-active .camera-hint{visibility:hidden}}
