/* Flight stays above the Mac; the cursor itself becomes the crosshair. */
.coastal-gulls .gull-route { display:none; }
.flyby-game { position:absolute;inset:0;z-index:3;pointer-events:none; }
.flyby-lane { position:absolute;pointer-events:none; }
.flyby-controls { position:absolute;z-index:3;left:18px;top:124px;display:flex;align-items:center;gap:1px;pointer-events:auto; }
.flyby-controls button { min-height:44px;appearance:none;background:transparent;border:0;color:#294d61;cursor:pointer; }
.flyby-score { display:flex;align-items:center;gap:6px;padding:0 6px;font:11px/1 ui-monospace,SFMono-Regular,monospace;white-space:nowrap;text-shadow:0 1px #f5fafc; }
.flyby-score svg { width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2; }.flyby-score output { font-size:10px; }
.flyby-pause { width:44px;padding:0;font-size:13px; }.flyby-controls button:focus-visible { border-radius:12px;outline:2px solid #32708b;outline-offset:-3px;background:#f6f9f2; }
.flyby-target { position:absolute;left:0;top:0;width:72px;height:48px;padding:0;border:0;background:transparent;pointer-events:auto;cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='48' height='48' viewBox='0 0 48 48'%3E%3Cg fill='none' stroke='%23fff' stroke-width='3.5' stroke-linecap='round'%3E%3Ccircle cx='24' cy='24' r='12'/%3E%3Cpath d='M24 3v14m0 14v14M3 24h14m14 0h14'/%3E%3C/g%3E%3Cg fill='none' stroke='%2316242b' stroke-width='1.5' stroke-linecap='round'%3E%3Ccircle cx='24' cy='24' r='12'/%3E%3Cpath d='M24 3v14m0 14v14M3 24h14m14 0h14'/%3E%3C/g%3E%3Ccircle cx='24' cy='24' r='2' fill='%2316242b' stroke='%23fff' stroke-width='1'/%3E%3C/svg%3E") 24 24,crosshair;touch-action:manipulation; }
/* The fixed button owns aiming. Wingbeats, transparent feather gaps and the
   global pressed-button scale must never change its hit region or cursor. */
.flyby-target * { pointer-events:none;cursor:inherit; }
.flyby-target:active:not(:disabled) { scale:1; }
.flyby-target:focus-visible { outline:2px solid #fff8dd;outline-offset:3px;border-radius:24px;box-shadow:0 0 0 4px #244857; }
.flyby-bird { display:block;width:72px;height:48px;filter:drop-shadow(0 1px 1px #29455435);overflow:hidden; }
.flyby-target[data-direction="left"] .flyby-bird { transform:scaleX(-1); }
/* Each intact wing rotates at its shoulder. No squash or separate feather
   transforms: the tapered silhouette stays coherent through the downstroke. */
.bird-near-wing { transform-box:view-box;transform-origin:52px 34px;animation:bird-wingbeat 650ms ease-in-out infinite alternate; }
.bird-far-wing { transform-box:view-box;transform-origin:54px 32px;animation:bird-far-wingbeat 650ms ease-in-out infinite alternate; }
.flyby-target[data-moving="false"] .flyby-bird * { animation-play-state:paused; }
@keyframes bird-wingbeat { from { transform:rotate(30deg); }to { transform:rotate(-45deg); } }
@keyframes bird-far-wingbeat { from { transform:rotate(22deg); }to { transform:rotate(-32deg); } }
.flyby-game[data-available="false"],.flyby-target[data-visible="false"] { visibility:hidden;pointer-events:none; }
.flyby-burst { position:absolute;width:1px;height:1px;pointer-events:none;z-index:2; }
.burst-ring { position:absolute;width:110px;height:110px;left:-55px;top:-55px;border:3px solid #fff8d4;border-radius:50%;box-shadow:0 0 0 1px #5c819580; }
.burst-smoke { position:absolute;left:-54px;top:-54px;width:108px;height:108px;background:#eaf2e6;clip-path:polygon(50% 0,59% 24%,80% 6%,78% 34%,100% 34%,85% 51%,99% 74%,74% 73%,72% 99%,51% 81%,30% 100%,28% 75%,1% 78%,19% 55%,0 35%,27% 32%,24% 4%,45% 23%); }
.burst-word { position:absolute;left:-45px;top:-15px;width:90px;text-align:center;font:italic 700 23px/1 system-ui,sans-serif;letter-spacing:-2px;color:#2b526c;text-shadow:1px 2px #fff1c8; }
.burst-point { position:absolute;left:-15px;top:-49px;width:30px;text-align:center;font:700 19px/1 ui-monospace,monospace;color:#fff6dc;text-shadow:0 1px 2px #772d36; }
.burst-fragment { position:absolute;left:-8px;top:-8px;width:17px;height:24px;border-radius:70% 20% 80% 0;background:linear-gradient(115deg,#fffdee,#bbd1da 65%,#48748b);box-shadow:inset 1px 1px #ffce9b;clip-path:polygon(0 0,100% 12%,68% 57%,85% 100%,11% 83%,32% 41%); }
.burst-fragment.fragment-1 { width:10px;height:20px;background:#e9c776;clip-path:polygon(20% 0,100% 20%,75% 100%,0 80%); }.burst-fragment.fragment-2 { background:#e4edf0;transform-origin:0 0; }
.flyby-burst.quiet>:not(.burst-point) { display:none; }.flyby-burst.quiet .burst-point { top:-10px; }
@media(max-width:899px) { .playground { padding-top:290px; }.flyby-controls { left:14px;top:174px; }.flyby-score { gap:4px;padding:0 3px;font-size:10px; } }
@media(prefers-reduced-motion:reduce) { .flyby-target * { animation:none!important;transition:none!important; } }
@media(prefers-contrast:more) { .flyby-controls { background:#edf7ef;border-radius:22px; }.flyby-controls button { color:#123b52; }.flyby-bird { filter:drop-shadow(0 1px 0 #173e55); } }
