1/*! @preserve Third-party software notices: /legal/THIRD_PARTY_NOTICES.txt; asset licenses: /legal/ASSET_LICENSES.txt; CycloneDX SBOM: /legal/sbom.cdx.json */ 2import{require_react as e}from"./react.BuDAbuFp.js";import{CARD_SIZE_CHANGE_EVENT as t,siteIdentity as n}from"./surface-registry.BsPd8wmk.js";import{createSafeImage as r,requestRecipient as i,safeImageUrl as a,safeInlineStyle as o,setSafeImageSource as s,setSafeSourceSrcset as c}from"./network-gateway.B96DxIRj.js";import{useTranslations as l}from"./i18n.DDSf8M06.js";import{require_jsx_runtime as u}from"./jsx-runtime.CCEDXH2B.js";import{useOptionalSettings as d}from"./saveProjectionSignal.DuMId2fX.js";import{cn as f}from"./cn.CyiUqsc4.js";var p=`playsolitaire:manual-gameplay`,m=`playsolitaire:new-game-persisted`;function h(){let e=null;return{observe(t,n,r){t&&n&&(e=r)},accept(t,n){return!t||e===null||n<e||n-e>2e3?!1:(e=null,!0)}}}var g=h(),_=!1;function v(){if(_)return;_=!0;let e=e=>{if(!(e.target instanceof Element))return;let t=e.target,n=t.closest(`input,textarea,select,[contenteditable="true"],[role="dialog"]`),r=e instanceof KeyboardEvent&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&[` `,`Enter`,`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`].includes(e.key);g.observe(e.isTrusted,!n&&(!!t.closest(`.game-main,[data-game-deal-shortcut]`)||r),performance.now())};for(let t of[`pointerdown`,`pointerup`,`click`,`keydown`,`keyup`])document.addEventListener(t,e,!0)}function y(e){typeof window>`u`||!g.accept(e,performance.now())||window.dispatchEvent(new Event(p))}function b(e){return e.reason===`new_game`&&e.previousId!==null&&e.nextId!==null&&e.previousId!==e.nextId&&e.origin===`local`&&e.status===`saved`}var x=e(),S=`(max-width: 720px), (max-height: 600px) and (orientation: landscape) and (max-width: 932px)`,C=1e3/60,w=1e3/180;function T(e,t,n,r){return e.x+r<=0||e.x>=t||e.settled&&e.y>=n}function E(e,t,n,r){for(let i=e.length-1;i>=0;i--)T(e[i],t,n,r)&&e.splice(i,1)}function D(e,t,n){return e<t||n>0}async function O(e,t,n){try{await e()}catch{return}t()||n()}function k(e,t,n=C,r=4){if(e.previousTimestampMs===null)return{clock:{previousTimestampMs:t,carriedMs:0},steps:1};let i=Math.max(0,t-e.previousTimestampMs),a=Math.min(i,n*r)+e.carriedMs,o=Math.min(r,Math.floor((a+n*1e-6)/n));return{clock:{previousTimestampMs:t,carriedMs:a-o*n},steps:o}}function A(e){return e?180:120}function j({flightMs:e,flightDelayMs:t=0,staggerHoldMs:n=0,flipToFront:r=!1,compactViewport:i=!1}){let a=e+t,o=r?30+A(i):0;return Math.max(a,o)+n}var M=/#(?:4E574A|E4D8BE)\b/gi,ee=4,N=5e3;function P(e,t){return e.replace(M,e=>e.toUpperCase()===`#4E574A`?t.cardBack:t.cardBackAccent)}var F=null,I=new Map,L=[];function R(e){return F||(F=i(`first-party`,e).then(e=>{if(!e.ok)throw Error(`back svg ${e.status}`);return e.text()}),F.catch(()=>{F=null})),F}function z(e,t){let n=`${t.cardBack}|${t.cardBackAccent}`,r=I.get(n);return r||(r=R(e).then(e=>{let r=P(e,t),i=URL.createObjectURL(new Blob([r],{type:`image/svg+xml`}));for(L.push({key:n,url:i});L.length>ee;){let e=L.shift();I.delete(e.key),setTimeout(()=>URL.revokeObjectURL(e.url),N)}return i}),r.catch(()=>I.delete(n)),I.set(n,r)),r}function te(e){return{observedFaceUp:e,generation:0,flip:null,engaged:!1}}function ne(e,t,n,r){if(e.observedFaceUp===t)return e;let i=e.generation+1;return e.flip&&!e.engaged&&t!==e.flip.showFace?{observedFaceUp:t,generation:i,flip:null,engaged:!1}:{observedFaceUp:t,generation:i,flip:{showFace:t,durationMs:n,delayMs:r,generation:i},engaged:e.flip?e.engaged:!1}}function re(e,t){return!e.flip||e.flip.generation!==t||e.engaged?e:{...e,engaged:!0}}function ie(e,t){return!e.flip||e.flip.generation!==t?e:{...e,flip:null,engaged:!1}}function ae(e,t){return e.observedFaceUp===t&&!e.flip&&!e.engaged?e:{observedFaceUp:t,generation:e.generation+1,flip:null,engaged:!1}}var oe=`ease-out`,B=new WeakMap;function V(e){return`perspective(1000px) rotateY(${e?0:180}deg)`}function se(e,t){return{keyframes:[{transform:t??V(!e.showFace)},{transform:V(e.showFace)}],options:{delay:e.delayMs,duration:e.durationMs,easing:oe,fill:`both`}}}function ce(e,t){if(e===null)return!1;let n=typeof e==`number`?e:Number(e);return Number.isFinite(n)&&n>=t}function le(e=typeof Element>`u`?void 0:Element.prototype,t=typeof Animation>`u`?void 0:Animation.prototype){return typeof e?.animate==`function`&&typeof t?.commitStyles==`function`&&`finished`in t}function H(e){return B.get(e)??null}function ue(e,t,n,r){let i={animation:t,flip:n,owner:r,settled:!1};return B.set(e,i),e.dataset.retainedFlipActive=`true`,i}function de(e,t){let n={animation:null,flip:t,owner:`scene`,settled:!0};return B.set(e,n),delete e.dataset.retainedFlipActive,n}function fe(e,t){B.get(e)===t&&(delete e.dataset.retainedFlipActive,B.delete(e))}function U(e,t){fe(e,t);try{t.animation?.cancel()}catch{}}function pe({element:e,flip:t}){let n=H(e),r;if(n)if(n.animation){let i=t.showFace!==n.flip.showFace&&!ce(n.animation.currentTime,n.flip.delayMs)?`settle-painted-side`:`handoff-current-transform`;if(i===`settle-painted-side`)return U(e,n),de(e,t);if(i===`handoff-current-transform`)try{n.animation.commitStyles(),r=e.style.transform}finally{U(e,n)}
2else U(e,n)}else fe(e,n);let i=se(t,r);e.dataset.retainedFlipActive=`true`;try{return ue(e,e.animate(i.keyframes,i.options),t,`scene`)}catch(t){throw delete e.dataset.retainedFlipActive,t}}function me(e){let t=[];try{for(let n of e)t.push({element:n.element,record:pe(n)});return t.map(({record:e})=>e)}catch(e){for(let{element:e,record:n}of t)U(e,n);throw e}}var W=u(),he=[`hearts`,`diamonds`,`clubs`,`spades`],ge=[1,2,3,4,5,6,7,8,9,10,11,12,13],_e=e=>e.suit===`spades`&&e.rank===1?n.spadesAce:`/commissioned-deck/${e.suit}-${e.rank}.svg`,G=e=>`/commissioned-deck-mobile/${e.suit}-${e.rank}.svg`,K=`/cards/back-playsolitaire.svg`,q=1502,J=2105,Y=[],ve=new Set,ye=[],be=!1;function xe(){be=!1;let e=Y.splice(0,4);for(let t of e){let e=r(t.url);t.decode&&(ye.push(e),e.decode?.().catch(()=>void 0))}Y.length>0&&(be=!0,setTimeout(()=>xe(),64))}function Se(){let e=window.matchMedia(S).matches,t=[];for(let n of he)for(let r of ge)t.push(e?G({suit:n,rank:r}):_e({suit:n,rank:r}));t.push(K);for(let n of t)ve.has(n)||(ve.add(n),Y.push({url:n,decode:e}));!be&&Y.length>0&&xe()}function Ce(e){let t,n=requestAnimationFrame(()=>{t=setTimeout(()=>e(),0)});return()=>{cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}}function we(e,t,n,r){return e&&t&&n&&r>=180}function Te({onChange:e}){return(0,x.useLayoutEffect)(()=>(e(!0),()=>e(!1)),[e]),null}var Ee=(0,x.memo)(function({card:e,faceUp:t=!0,dragging:n=!1,highlighted:r=!1,selected:i=!1,className:a,style:s,presentationResetEpoch:c=0,revealDelayMs:u=180,onFlipPresentationChange:p,retainedFlipAnimation:m=!1,retainedPainted:h=!0,retainedFlipElementRef:g,onClick:_,onDoubleClick:v,onPointerDown:y}){let b=l(),C=d()?.effectiveReducedMotion??!1,w=(0,x.useRef)(null),T=(0,x.useCallback)(e=>{w.current=e,g?.(e)},[g]),E=(0,x.useRef)(t),D=m&&w.current?H(w.current):null,O=m&&!C&&le()&&D?.owner===`scene`&&D.flip.showFace===t,k=E.current!==t,j=(0,x.useRef)(t&&h),M=(0,x.useRef)(!t&&h),[,ee]=(0,x.useState)(0),N=we(O,k,t,D?.flip.delayMs??0);(0,x.useLayoutEffect)(()=>{if(!m||!D?.settled||D.owner!==`scene`||D.flip.showFace!==t)return;let e=w.current;e&&fe(e,D)},[D,t,m]);let[P,F]=(0,x.useState)(()=>te(t)),[I,L]=(0,x.useState)(c);if(I!==c)E.current=t,L(c),F(te(t));else if(!O&&m&&!h&&(P.flip||k))E.current=t,F(ae(P,t));else if(!O&&C&&(P.flip||k))E.current=t,F(ae(P,t));else if(!O&&k){let e=t?A(window.matchMedia(S).matches):100,n=P.observedFaceUp===E.current?P:te(E.current);E.current=t,F(ne(n,t,e,t?u:0))}else O&&k&&(E.current=t);let R=O?null:P.flip,z=O?!1:P.engaged;m&&!h?(j.current=!1,M.current=!1):h&&(O?(N||(j.current=!0),M.current=!0):(t&&(j.current=!0),(!t||R)&&(M.current=!0))),(0,x.useEffect)(()=>{if(!N||!D||!h)return;let e=w.current;if(e)return Ce(()=>{let t=H(e);t!==null&&t!==D||E.current!==!0||(j.current=!0,ee(e=>e+1))})},[D,N,t,c,h]),(0,x.useEffect)(()=>{if(O||!R||z)return;let e,t=R.generation,n=requestAnimationFrame(()=>{e=requestAnimationFrame(()=>{F(e=>re(e,t))})});return()=>{cancelAnimationFrame(n),e!==void 0&&cancelAnimationFrame(e)}},[O,R,z]),(0,x.useEffect)(()=>{if(O||!R||!z)return;let e=R.generation,t=setTimeout(()=>{F(t=>ie(t,e))},R.delayMs+R.durationMs+40);return()=>clearTimeout(t)},[O,R,z]);let oe=b.ui.game.rankLabels?.[e.rank-1]??String(e.rank),B=b.ui.game.suitLabels?.[e.suit]??e.suit,V=(b.ui.game.cardFaceUp??`{rank} of {suit}`).replace(`{rank}`,oe).replace(`{suit}`,B);if(m){let c=t&&!!_,l=t&&!!y,u=R?.showFace?0:180,d=R?.showFace?180:0,m=O?t?0:180:R?z?u:d:t?0:180;return(0,W.jsxs)(`div`,{"data-card-id":e.id,"data-board-focusable":c?`card`:void 0,"data-board-selected":c&&i?`true`:void 0,draggable:!1,className:f(`card`,R?`card-flipping`:t?`card-face`:`card-back`,n&&`card-dragging`,!R&&r&&`card-highlighted`,!R&&i&&c&&`card-selected`,a),style:o(s),role:c?`button`:`img`,tabIndex:c?-1:void 0,"aria-pressed":c?i:void 0,"aria-label":t?V:b.ui.game.cardFaceDown,onClick:c?_:void 0,onDoubleClick:c?v:void 0,onPointerDown:l?y:void 0,children:[!O&&R&&p?(0,W.jsx)(Te,{onChange:p}):null,(0,W.jsxs)(`div`,{ref:T,className:`retained-card-flip-shell`,style:o({transform:`perspective(1000px) rotateY(${m}deg)`,transition:O?`none`:R&&z?`transform ${R.durationMs}ms ease-out ${R.delayMs}ms`:`none`}),"aria-hidden":`true`,children:[(0,W.jsx)(`div`,{className:`card-flip-back card-back`,children:M.current?(0,W.jsx)(je,{}):null},`back`),(0,W.jsx)(`div`,{className:`card-flip-face`,children:j.current?(0,W.jsx)(ke,{card:e}):null},`face`)]})]})}if(R){let t=R.showFace?0:180,r=R.showFace?180:0,c=z?t:r,l=R.delayMs,u=R.durationMs,d=R.showFace&&!!_;return(0,W.jsxs)(`div`,{ref:T,"data-card-id":e.id,"data-board-focusable":d?`card`:void 0,"data-board-selected":d&&i?`true`:void 0,draggable:!1,
2className:f(`card card-flipping`,n&&`card-dragging`,a),style:o({...s,transform:`perspective(1000px) rotateY(${c}deg)`,transition:z?`transform ${u}ms ease-out ${l}ms`:`none`}),role:d?`button`:`img`,tabIndex:d?-1:void 0,"aria-pressed":d?i:void 0,"aria-label":R.showFace?V:b.ui.game.cardFaceDown,onClick:d?_:void 0,onDoubleClick:d?v:void 0,onPointerDown:d?y:void 0,children:[p?(0,W.jsx)(Te,{onChange:p}):null,(0,W.jsx)(`div`,{className:`card-flip-back card-back`,"aria-hidden":`true`,children:(0,W.jsx)(je,{})},`back`),(0,W.jsx)(`div`,{className:`card-flip-face`,children:(0,W.jsx)(ke,{card:e})},`face`)]})}return t?(0,W.jsx)(`div`,{ref:T,"data-card-id":e.id,"data-board-focusable":_?`card`:void 0,"data-board-selected":i?`true`:void 0,draggable:!1,className:f(`card card-face`,n&&`card-dragging`,r&&`card-highlighted`,i&&`card-selected`,a),style:o(s),role:_?`button`:`img`,tabIndex:_?-1:void 0,"aria-pressed":_?i:void 0,"aria-label":V,onClick:_,onDoubleClick:v,onPointerDown:y,children:(0,W.jsx)(`div`,{className:`card-flip-face`,children:(0,W.jsx)(ke,{card:e})},`face`)}):(0,W.jsx)(`div`,{ref:T,"data-card-id":e.id,draggable:!1,className:f(`card card-back`,n&&`card-dragging`,a),style:o(s),"aria-label":b.ui.game.cardFaceDown,role:`img`,children:(0,W.jsx)(je,{})})}),De=3;function Oe(e){let t=e.currentTarget,n=Number(t.dataset.retry||0);if(n>=De)return;t.dataset.retry=String(n+1);let r=e=>`${e.split(`?`)[0]}?r=${n+1}`;setTimeout(()=>{let e=t.parentElement instanceof HTMLPictureElement?t.parentElement.querySelector(`source`):null;e?.srcset&&c(e,r(e.srcset)),s(t,r(t.src))},300*(n+1)*(n+1))}function ke({card:e}){return(0,W.jsxs)(`picture`,{style:{display:`contents`},children:[(0,W.jsx)(`source`,{media:S,srcSet:a(G(e))}),(0,W.jsx)(`img`,{className:`card-img`,src:a(_e(e)),alt:``,width:q,height:J,draggable:!1,decoding:`async`,onError:Oe})]})}function Ae(){let e=d(),t=e?.settings.theme,n=e?.settings.customTheme,[r,i]=(0,x.useState)(K);return(0,x.useEffect)(()=>{if(t!==`custom`||!n){i(K);return}let e=!1;return z(K,n).then(t=>{e||i(t)}).catch(()=>{}),()=>{e=!0}},[t,n]),r}function je(){let e=Ae();return(0,W.jsx)(`img`,{className:`card-img`,src:a(e),alt:``,width:q,height:J,draggable:!1,decoding:`async`,onError:e===`/cards/back-playsolitaire.svg`?Oe:void 0})}function Me(e,t){let n=t.querySelector(`img.card-img`)??t.querySelector(`img`),i=typeof window<`u`&&window.matchMedia?.(`(max-width: 720px), (max-height: 600px) and (orientation: landscape) and (max-width: 932px)`).matches?G(e):_e(e),a=r(n?.currentSrc||i);return a.className=`hint-ghost-card`,a.alt=``,a.draggable=!1,a.decoding=`sync`,a.loading=`eager`,a}var Ne=1300,Pe=2400,Fe=1100,Ie=`card-hint-pulse`,Le=`pile-hint-pulse`,Re=`card-hint-glow`,ze=`cubic-bezier(0.33, 1, 0.68, 1)`,Be=`playsolitaire:hint-deadlock`;function Ve(e){return e?`proven-unwinnable`:null}var He=2600,X=new Map,Z=new Map;function Q(e){Z.get(e)?.forEach(e=>e())}function $(e,t){return t.timeout!==null&&globalThis.clearTimeout(t.timeout),X.get(e)===t?(X.delete(e),Q(e),!0):!1}function Ue(e,t){let n=Z.get(e)??new Set;return n.add(t),Z.set(e,n),()=>{n.delete(t),n.size===0&&Z.delete(e)}}function We(e,t){let n=X.get(e);return n?.state===t?n.status:`idle`}function Ge(e,t,n,r,i=He){let a=X.get(e);if(a?.stateKey===t&&a.state===n)return a.owner===r;a&&$(e,a);let o={stateKey:t,state:n,owner:r,status:`pending`,timeout:null};return X.set(e,o),o.timeout=globalThis.setTimeout(()=>{X.get(e)===o&&(o.timeout=null,o.status=`unavailable`,Q(e))},i),Q(e),!0}function Ke(e,t,n,r){let i=X.get(e);return i?.stateKey===t&&i.state===n&&i.owner===r}function qe(e,t,n){let r=X.get(e);return r?.state===t&&r.owner===n}function Je(e,t,n,r){let i=X.get(e);return i?.stateKey!==t||i.state!==n||i.owner!==r?!1:$(e,i)}function Ye(e,t,n,r){let i=X.get(e);return i?.stateKey!==t||i.state!==n||i.owner!==r?!1:(i.timeout!==null&&globalThis.clearTimeout(i.timeout),i.timeout=null,i.status!==`unavailable`&&(i.status=`unavailable`,Q(e)),!0)}function Xe(e,t,n){let r=X.get(e);return r?.stateKey!==t||r.state!==n?!1:$(e,r)}function Ze(e,t,n,r){let i=X.get(e);return i?.stateKey!==t||i.state!==n||i.owner!==r?!1:$(e,i)}function Qe(e,t,n){let r=X.get(e);return r?.state!==t||r.owner!==n?!1:$(e,r)}var $e={arm:Ge,cancel:Ze,cancelOwnedState:Qe,claim:Je,clearForState:Xe,markUnavailable:Ye,ownedBy:Ke,stateOwnedBy:qe,status:We,subscribe:Ue};function et(e=`hint`,t){typeof window>`u`||window.dispatchEvent(new CustomEvent(Be,{detail:{trigger:e,providerId:t}}))}function tt(e){return`[data-card-id="${typeof CSS<`u`&&CSS.escape?CSS.escape(e):e.replace(/["\\]/g,`\\$&`)}"]`}function nt(e,t){e.classList.remove(t),e.offsetWidth,e.classList.add(t)}function rt(){return typeof window>`u`?!1:document.documentElement.dataset.reducedMotion===`true`?!0:window.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches??!1}var it=4e3,at=new WeakMap;function ot(e){let t=at.get(e);t!==void 0&&(globalThis.clearTimeout(t),at.delete(e))}function st(e){ot(e);let t=globalThis.setTimeout(()=>{ct(e)},it);at.set(e,t)}function ct(e){ot(e),e.remove()}function lt(e,t,n){let r=document.createElement(`div`);r.className=`hint-ghost`,r.setAttribute(`aria-hidden`,`true`),r.dataset.cardId=e[0].id,r.style.left=`${n.left}px`,r.style.top=`${n.top}px`,r.style.width=`${n.width}px`;let i=n.bottom;return t.forEach((t,a)=>{let o=t.getBoundingClientRect();i=Math.max(i,o.bottom);let s=Me(e[a],t);s.style.left=`${o.left-n.left}px`,s.style.top=`${o.top-n.top}px`,s.style.width=`${o.width}px`,s.style.height=`${o.height}px`,r.appendChild(s)}),r.style.height=`${i-n.top}px`,document.body.appendChild(r),st(r),r}function ut(e,n,r,i,a=i){let o=e.animate([{transform:`translate(0px, 0px)`,offset:0,easing:ze},{transform:`translate(${n}px, ${r}px)`,offset:.45},{transform:`translate(${n}px, ${r}px)`,offset:.55,easing:ze},{transform:`translate(0px, 0px)`,offset:1}],{duration:Ne}),s=!1,c=()=>o.cancel(),l=e=>{window.removeEventListener(t,c),!s&&(s=!0,e())};return window.addEventListener(t,c),o.onfinish=()=>l(i),o.oncancel=()=>l(a),o}function dt(e,t){let n=document.createElement(`div`);n.className=`stock-hint-medallion`,n.setAttribute(`aria-hidden`,`true`);let r=document.createElement(`span`);if(r.className=`stock-hint-medallion-word`,r.textContent=e,n.append(r),t!==void 0){n.dataset.hintCount=String(t);let e=document.createElement(`span`);e.className=`stock-hint-medallion-num`,e.textContent=`Ã${t}`,n.append(e)}return n}function ft(e,t){nt(e,Re);let n=()=>t();return window.addEventListener(`pointerdown`,n,{once:!0,capture:!0}),n}export{J as CARD_ART_INTRINSIC_HEIGHT,q as CARD_ART_INTRINSIC_WIDTH,Ie as CARD_CLASS,S as COMPACT_VIEWPORT_QUERY,Ee as CardView,Be as DEADLOCK_EVENT,Re as GLOW_CLASS,p as MANUAL_GAMEPLAY_EVENT,m as NEW_GAME_PERSISTED_EVENT,Le as PILE_CLASS,Fe as PULSE_DURATION_MS,Pe as STOCK_CUE_MS,w as WIN98_CASCADE_RAW_STEP_MS,k as advanceCascadeFrameClock,ut as animateGhostGlide,nt as applyClass,ft as armSettleGlow,et as broadcastHintDeadlock,lt as buildRunGhost,U as cancelRetainedCardFlipAnimation,j as cardFlightVisualHoldMs,tt as cardIdSelector,A as cardRevealDurationMs,D as cascadeHasPendingWork,H as currentRetainedCardFlipAnimation,O as decodeCascadeSprite,$e as klondikePendingHint,dt as makeStockMedallion,v as observeManualGameplay,rt as prefersReducedMotion,Ve as provenDeadlockTrigger,E as pruneFinis
2hedCascadeCards,y as publishPersistedManualGameplay,ct as removeHintGhost,b as shouldNavigateAfterReplacement,me as startRetainedCardFlipHandoffBatch,le as supportsRetainedCardFlipWaapi,Ae as useCardBackSrc,Se as warmCardArt};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.