:root{--bg:#f4efe2;--panel:#fbf8f0;--panel-2:#ece5d3;--ink:#17261c;--muted:#56645a;--line:#d8cfb9;--primary:#1e5a38;--primary-ink:#fbf8f0;--flag:#d63a35;--gold:#e3b341;--good:#23784a;--bad:#b8352c;--overlay:#0e1811b8;--map-rough:#3f6d2c;--map-fairway:#66a346;--map-fringe:#5c9a40;--map-green:#7cc35a;--map-sand:#e8d9a8;--map-water:#3d82b8;--map-tree:#24461c;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--radius:12px;--font:"Inter", system-ui, -apple-system, sans-serif;--display:"Fraunces", Georgia, serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0f1612;--panel:#152019;--panel-2:#1f2c23;--ink:#eef1e8;--muted:#a3b0a5;--line:#2f3d33;--primary:#4fae76;--primary-ink:#0d1a12;--flag:#f0645c;--good:#5fc489;--bad:#ff7d70}}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font:15px/1.45 var(--font);-webkit-font-smoothing:antialiased;overflow:hidden}button{font:inherit;color:inherit}button:disabled{cursor:default;opacity:.5}:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.app{grid-template-rows:minmax(0,1fr) minmax(320px,50dvh);grid-template-columns:minmax(0,1fr);height:100dvh;display:grid;overflow:hidden}@media (width>=900px),(orientation:landscape) and (height>=420px) and (width>=700px){.app{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr) 420px}}.stage{background:#cfe6f2;min-height:0;position:relative;overflow:hidden}.view{touch-action:none;width:100%;height:100%;display:block;position:absolute;inset:0}.topbar{justify-content:space-between;align-items:flex-start;gap:var(--space-2);padding:calc(env(safe-area-inset-top) + var(--space-2)) var(--space-3) var(--space-2);pointer-events:none;display:flex;position:absolute;top:0;left:0;right:0}.topbar>*{pointer-events:auto}.brand{color:#fff;text-shadow:0 1px 4px #0006;flex-direction:column;line-height:1.1;display:flex}.brand-name{font:700 22px/1.1 var(--display);letter-spacing:-.01em}.brand-tag{letter-spacing:.04em;opacity:.95;font-size:12px;font-weight:600}.top-actions{gap:var(--space-2);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.icon-btn{background:var(--overlay);color:#fff;cursor:pointer;border:0;border-radius:22px;justify-content:center;align-items:center;min-width:44px;min-height:44px;display:inline-flex}.icon-btn:hover:not(:disabled){background:#0e1811e0}.icon-btn.soft{background:var(--panel-2);color:var(--ink)}.mode-seg{background:var(--overlay);padding:3px}.mode-seg button{color:#fffc;min-height:38px;padding:0 12px}.mode-seg button.on{color:#17261c;background:#fff}@media (width<=420px){.mode-seg button{padding:0 8px}}.hole-card{top:calc(env(safe-area-inset-top) + 64px);left:var(--space-3);max-width:min(100% - 172px,320px);padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--overlay);color:#fff;flex-direction:column;gap:2px;font-size:13px;display:flex;position:absolute}.hole-card strong{font:700 17px/1.2 var(--display)}.wind{align-items:center;gap:4px;font-weight:600;display:inline-flex}.wind svg{transition:transform .3s}.side-col{top:calc(env(safe-area-inset-top) + 64px);right:var(--space-3);align-items:flex-end;gap:var(--space-2);flex-direction:column;display:flex;position:absolute}.pips{flex-direction:column;align-items:flex-end;gap:4px;margin:0;padding:0;list-style:none;display:flex}.pips li{background:var(--overlay);color:#ffffffbf;border-radius:14px;align-items:center;gap:6px;padding:3px 10px 3px 6px;font-size:12px;font-weight:600;display:inline-flex}.pips li.used,.pips li.next{color:#fff}.pips li.next{outline:2px solid #fffc}.pips i{border:1.5px solid #111;border-radius:50%;width:12px;height:12px}.pips li:not(.used) i{opacity:.5}.mini{left:var(--space-3);bottom:var(--space-3);background:var(--map-rough);cursor:pointer;border:2px solid #ffffffd9;border-radius:10px;width:92px;height:140px;padding:0;position:absolute;overflow:hidden;box-shadow:0 2px 8px #0000004d}@media (width<=640px){.mini.under-banner{display:none}.banner{width:calc(100% - 24px)}}.mini svg{width:100%;height:100%;display:block}@media (height<=640px) and (width<=899px){.mini{width:64px;height:96px}}.banner{left:50%;bottom:var(--space-4);width:min(100% - 140px,440px);padding:var(--space-3) var(--space-4);background:var(--overlay);color:#fff;text-align:center;border-radius:16px;flex-direction:column;align-items:center;gap:2px;animation:.25s ease-out pop;display:flex;position:absolute;transform:translate(-50%)}.banner strong{font:700 clamp(22px, 5vw, 32px)/1.1 var(--display)}.banner span{opacity:.9;font-size:13px}.banner .fault{opacity:1;background:#ffffff26;border-radius:10px;margin-top:2px;padding:2px 10px;font-weight:600}.banner.tone-good{background:#1e643aeb}.banner.tone-ace{color:#1c1405;background:linear-gradient(135deg,#b8860b,#e3b341)}.banner.tone-ace .fault{background:#0000001f}.banner.tone-bad{background:#962820eb}@keyframes pop{0%{opacity:0;transform:translate(-50%)scale(.85)}}.skip-hint{right:var(--space-3);bottom:var(--space-3);background:var(--overlay);color:#fff;pointer-events:none;border-radius:12px;padding:4px 10px;font-size:12px;font-weight:600;position:absolute}.fatal{max-width:90%;padding:var(--space-3) var(--space-4);border-radius:var(--radius);background:var(--overlay);color:#fff;text-align:center;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.fatal p{margin:0 0 var(--space-2)}.panel{gap:var(--space-3);min-height:0;padding:var(--space-3) var(--space-4) calc(env(safe-area-inset-bottom) + var(--space-3));background:var(--panel);border-top:1px solid var(--line);flex-direction:column;display:flex}@media (width>=900px),(orientation:landscape) and (height>=420px) and (width>=700px){.panel{border-top:0;border-left:1px solid var(--line);padding-top:var(--space-4)}}.clubs{scrollbar-width:none;margin:0 calc(-1 * var(--space-4));padding:2px var(--space-4);flex-shrink:0;gap:6px;display:flex;overflow-x:auto}.clubs::-webkit-scrollbar{display:none}.clubs button{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:10px;flex-direction:column;flex:none;justify-content:center;align-items:center;min-width:56px;min-height:48px;line-height:1.1;display:flex}.clubs button strong{font-size:15px}.clubs button span{color:var(--muted);font-size:11px}.clubs button.on{background:var(--primary);border-color:var(--primary);color:var(--primary-ink)}.clubs button.on span{color:var(--primary-ink);opacity:.85}.aim-row{align-items:center;gap:var(--space-2);flex-shrink:0;display:flex}.aim-text{text-align:center;flex-direction:column;flex:1;align-items:center;line-height:1.2;display:flex}.aim-text strong{font:700 17px/1.2 var(--display)}.aim-text span{color:var(--muted);font-size:13px}.seg{border-radius:var(--radius);background:var(--panel-2);flex-shrink:0;gap:4px;padding:4px;display:flex}.seg button{cursor:pointer;min-height:44px;color:var(--muted);background:0 0;border:0;border-radius:9px;flex:1;justify-content:center;align-items:center;gap:6px;font-size:14px;font-weight:600;display:inline-flex}.seg button.on{background:var(--panel);color:var(--ink);box-shadow:0 1px 3px #0000001f}.seg.small button{font-size:13px}.input-area{flex:1;min-height:160px;display:flex}.input-area>*{flex:1}.panel-note{justify-content:center;align-items:center;gap:6px;margin:0;font-size:13px;display:inline-flex}.done{justify-content:center;align-items:center;gap:var(--space-2);text-align:center;flex-direction:column;flex:1;display:flex}.done h2{font:700 26px/1.2 var(--display);margin:0}.done-best{font:600 20px/1.3 var(--display);margin:0}.done p{margin:0}.done-actions{gap:var(--space-2);width:min(100%,320px);margin-top:var(--space-3);flex-direction:column;display:flex}.countdown{font-variant-numeric:tabular-nums;color:var(--ink);font-weight:600}.cam-setup{justify-content:center;gap:var(--space-3);padding:var(--space-4);border-radius:var(--radius);background:var(--panel-2);flex-direction:column;display:flex}.cam-setup ol{gap:var(--space-2);flex-direction:column;margin:0;padding-left:1.3em;display:flex}.cam-setup .btn{align-self:center}.camlayer{z-index:10;color:#fff;background:#0b0f0c;position:fixed;inset:0;overflow:hidden}.camlayer video,.camlayer canvas{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.camlayer.fit-contain video,.camlayer.fit-contain canvas{object-fit:contain}.camlayer.small{inset:auto;left:var(--space-3);bottom:calc(env(safe-area-inset-bottom) + var(--space-3));aspect-ratio:3/4;z-index:30;border-radius:var(--radius);border:2px solid #ffffffd9;width:min(28vw,200px);box-shadow:0 4px 16px #00000059}.mirror{transform:scaleX(-1)}.cam-loading{justify-content:center;align-items:center;gap:var(--space-2);margin:0;font-weight:600;display:flex;position:absolute;inset:0}.cam-status{left:var(--space-3);right:var(--space-3);bottom:calc(env(safe-area-inset-bottom) + 76px);padding:var(--space-3) var(--space-4);background:var(--overlay);font:700 clamp(24px, 6.4vw, 46px)/1.15 var(--display);text-align:center;z-index:26;border-radius:16px;position:absolute}.cam-status.phase-ready{background:#1e6e3cf0}.cam-status.phase-backswing,.cam-status.phase-forward,.cam-status.phase-follow{background:#be7814f0}.cam-status.phase-hint{background:#964614f0}.cam-status.phase-busy{background:#323834e6}.app.cam-mode .panel{display:none}.app.cam-mode{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.app.cam-mode .stage{z-index:20;top:calc(env(safe-area-inset-top) + var(--space-3));right:var(--space-3);aspect-ratio:4/3;border:2px solid #ffffffd9;border-radius:14px;width:min(44vw,380px);position:fixed;box-shadow:0 4px 16px #00000059}.app.cam-mode .stage>:not(.view):not(.banner):not(.skip-hint),.app.cam-mode:not(.show-hole) .stage>.banner{display:none}.app.cam-mode.show-hole .stage{aspect-ratio:auto;width:auto;box-shadow:none;z-index:15;border:0;border-radius:0;inset:0}.app.cam-mode.show-hole .banner{bottom:calc(env(safe-area-inset-bottom) + var(--space-4));left:auto;right:var(--space-3);width:calc(100% - min(28vw,200px) - 36px);max-width:520px;transform:none}.app.cam-mode.show-hole .banner strong{font-size:clamp(26px,6vw,44px)}.camhud{z-index:25;pointer-events:none;color:#fff;position:fixed;inset:0}.camhud>*{pointer-events:auto}.camhud-info{top:calc(env(safe-area-inset-top) + var(--space-3));left:var(--space-3);max-width:calc(100% - min(44vw,380px) - 36px);padding:var(--space-2) var(--space-3);border-radius:var(--radius);background:var(--overlay);flex-direction:column;gap:4px;font-size:14px;font-weight:600;display:flex;position:absolute}.camhud-info strong{font:700 18px/1.2 var(--display)}.camhud-balls{flex-wrap:wrap;gap:4px 8px;display:flex}.camhud-balls span{align-items:center;gap:4px;font-size:12px;display:inline-flex}.camhud-balls i{border:1.5px solid #111;border-radius:50%;width:12px;height:12px}.camhud-balls span:not(.used) i{opacity:.5}.camhud-tools{left:var(--space-3);top:calc(env(safe-area-inset-top) + 150px);align-items:flex-start;gap:var(--space-2);flex-direction:column;display:flex;position:absolute}.camhud-fps{background:var(--overlay);border-radius:10px;padding:2px 8px;font-size:12px;font-weight:600}.camhud-fps.low{background:#964614f0}.camhud-controls{left:var(--space-2);right:var(--space-2);bottom:calc(env(safe-area-inset-bottom) + var(--space-3));justify-content:center;gap:var(--space-2);display:flex;position:absolute}.camhud-pick{background:var(--overlay);border-radius:26px;align-items:center;display:flex}.camhud-pick .icon-btn{background:0 0}.camhud-pick span{text-align:center;flex-direction:column;align-items:center;min-width:5.2em;line-height:1.15;display:flex}.camhud-pick strong{font-size:14px}.camhud-pick small{opacity:.85;font-size:12px}.camhud-toast{padding:var(--space-2) var(--space-4);text-align:center;background:#962820eb;border-radius:20px;margin:0;font-weight:700;position:absolute;top:42%;left:50%;transform:translate(-50%)}.btn{border:1px solid var(--line);background:var(--panel);cursor:pointer;border-radius:22px;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 18px;font-weight:600;display:inline-flex}.btn.primary{background:var(--primary);color:var(--primary-ink);border-color:#0000}.muted{color:var(--muted)}.error{color:var(--bad);margin:0;font-weight:600}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.motion{justify-content:center;align-items:center;gap:var(--space-3);height:100%;padding:var(--space-4);text-align:center;border-radius:var(--radius);background:var(--panel-2);flex-direction:column;display:flex;position:relative;overflow:auto}.motion p{max-width:30em;margin:0}.big-num{font:700 40px/1 var(--display)}.pull{justify-content:center;align-items:center;gap:var(--space-4);border-radius:var(--radius);background:var(--panel-2);touch-action:none;-webkit-user-select:none;user-select:none;cursor:grab;display:flex;position:relative;overflow:hidden}.pull.is-busy{opacity:.6;cursor:default}.pull-meter{background:var(--line);border-radius:14px;align-items:flex-end;width:28px;height:70%;display:flex;overflow:hidden}.pull-fill{background:linear-gradient(to top, var(--good), var(--gold), var(--flag));width:100%}.pull-drift{background:var(--flag);border-radius:2px;width:4px;height:22px;position:absolute;top:12px;left:calc(50% - 2px)}.pull-text{max-width:14em;font:600 18px/1.3 var(--display)}.sheet-backdrop{z-index:20;background:#0006;justify-content:flex-end;display:flex;position:fixed;inset:0}.sheet{width:min(100%,460px);height:100%;padding:calc(env(safe-area-inset-top) + var(--space-4)) var(--space-4) calc(env(safe-area-inset-bottom) + var(--space-5));background:var(--panel);gap:var(--space-3);flex-direction:column;display:flex;overflow:auto}.sheet>*{flex-shrink:0}.sheet-head{justify-content:space-between;align-items:center;display:flex}.sheet h2{font:700 24px/1.2 var(--display);margin:0}.sheet h3{margin:var(--space-3) 0 0;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-size:12px}.sheet p{margin:0}.sheet .icon-btn,.sheet .icon-btn:hover:not(:disabled){background:var(--panel-2);color:var(--ink)}.prose{gap:var(--space-3);flex-direction:column;display:flex}.prose ol{gap:var(--space-2);flex-direction:column;margin:0;padding-left:1.3em;display:flex}.prose .btn{align-self:flex-start}.you-card{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-3);border-radius:var(--radius);background:var(--panel-2);display:flex}.you-card>div{flex-direction:column;display:flex}.you-big{font:700 24px/1.2 var(--display)}.my-balls,.leaders{margin:0;padding:0;list-style:none}.my-balls li{column-gap:var(--space-2);border-bottom:1px solid var(--line);grid-template-rows:auto auto;grid-template-columns:16px auto 1fr;align-items:center;padding:6px 0;display:grid}.my-balls i{border:1.5px solid #111;border-radius:50%;width:14px;height:14px}.my-balls strong{justify-self:end}.my-balls .muted{grid-column:2/4;font-size:13px}.leaders li{gap:var(--space-2);border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;grid-template-columns:2em 1fr auto;padding:7px 4px;display:grid}.leaders li.you{background:var(--panel-2);border-radius:6px;font-weight:700}.leaders .rank{color:var(--muted)}.leaders .who{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.map-green{aspect-ratio:1;border-radius:var(--radius);width:100%}.spread{flex-direction:column;gap:4px;display:flex}.spread-row{gap:var(--space-2);font-variant-numeric:tabular-nums;grid-template-columns:6.5em 1fr 2.5em;align-items:center;font-size:13px;display:grid}.spread-bar{background:var(--panel-2);border-radius:4px;height:14px;overflow:hidden}.spread-bar i{background:var(--muted);opacity:.6;min-width:2px;height:100%;display:block}.spread-row.you{font-weight:700}.spread-row.you .spread-bar i{background:var(--primary);opacity:1}.spread-n{text-align:right}.stat-grid{gap:var(--space-2);grid-template-columns:repeat(4,1fr);margin:0;display:grid}.stat-grid div{padding:var(--space-2);background:var(--panel-2);text-align:center;border-radius:10px}.stat-grid dt{color:var(--muted);font-size:12px}.stat-grid dd{font:700 18px/1.3 var(--display);margin:0}.slider{flex-direction:column;gap:4px;display:flex}.slider span{justify-content:space-between;font-weight:500;display:flex}.slider input{width:100%;min-height:32px;accent-color:var(--primary)}.toggle{justify-content:space-between;align-items:center;gap:var(--space-3);min-height:52px;padding:var(--space-2) var(--space-3);border:1px solid var(--line);border-radius:var(--radius);text-align:left;cursor:pointer;background:0 0;display:flex}.toggle-text{flex-direction:column;display:flex}.toggle-text span{color:var(--muted);font-size:13px}.toggle-knob{background:var(--line);border-radius:13px;flex:none;width:44px;height:26px;transition:background .15s;position:relative}.toggle-knob:after{content:"";background:#fff;border-radius:50%;width:20px;height:20px;transition:transform .15s;position:absolute;top:3px;left:3px}.toggle-knob.on{background:var(--good)}.toggle-knob.on:after{transform:translate(18px)}.plot{background:var(--panel-2);border-radius:var(--radius);width:100%;height:auto}.plot-axis{stroke:var(--line);stroke-width:1px}.plot-mark{stroke:var(--muted);stroke-dasharray:3 3;stroke-width:1px}.plot-tick{fill:var(--muted);font-size:10px}.plot-line{fill:none;stroke:var(--primary);stroke-width:2px}.plot-dot{fill:var(--primary)}.metrics{gap:2px;margin:0;font-size:13px;display:grid}.metrics div{gap:var(--space-2);border-bottom:1px solid var(--line);grid-template-columns:10em 1fr;padding:3px 0;display:grid}.metrics dt{color:var(--muted)}.metrics dd{font-variant-numeric:tabular-nums;margin:0}.field{flex-direction:column;gap:4px;display:flex}.field input{border:1px solid var(--line);background:var(--panel-2);min-height:44px;color:var(--ink);font:inherit;border-radius:10px;padding:0 12px}@media (prefers-reduced-motion:reduce){.banner,.spin{animation:none}}
