/* V3: reusable, native controls and paper components. No game rules or animation loop. */
.jv3{--jv-ink:#24134b;--jv-muted:#65507e;--jv-paper:#fffdf7;--jv-edge:#d7bfae;--jv-shadow:1px 5px 0 #e8d8c8,2px 9px 14px #64422c18;color:var(--jv-ink);font-family:Nunito,system-ui,sans-serif}
.jv3 .jvButton,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-width:44px;min-height:48px;padding:10px 20px;border:1px solid #d2bdcb;border-radius:17px;background:linear-gradient(#fffefa,#f7ede3);color:var(--jv-ink);box-shadow:inset 0 2px #fff,0 3px 0 #d5c2b4,1px 5px 8px #64422c17;font:900 16px/1.2 Nunito,system-ui,sans-serif;cursor:pointer;touch-action:manipulation;text-decoration:none;transition:transform 120ms,box-shadow 120ms}
.jv3 .jvButton--primary,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton--primary{border-color:#6219b4;background:linear-gradient(175deg,#b05dff,#852bea 57%,#7220da);color:#fff;box-shadow:inset 0 2px #e0b7ff, inset 0 -3px #5913a74d,0 4px 0 #5316a1,1px 7px 11px #5316a126;text-shadow:0 1px 1px #5316a150}
.jv3 .jvButton--gold{background:linear-gradient(#ffe68e,#ffc947);border-color:#b78022;color:#533508;box-shadow:inset 0 2px #fff5c5,0 3px #b77a18,1px 6px 9px #64422c17}
.jv3 .jvButton--quiet,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton--quiet{background:transparent;border-color:transparent;box-shadow:none;color:#6333a4;padding:8px 10px}
.jv3 .jvButton--round{padding:8px;width:48px;height:48px;border-radius:50%;font-size:28px}
@media(hover:hover){:is(.jv3 .jvButton,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton):not(:disabled):hover{transform:translateY(-2px)}.jv3 .jvButton--quiet:hover{text-decoration:underline;text-underline-offset:4px}}
:is(.jv3 .jvButton,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton):not(:disabled):active{transform:translateY(3px);box-shadow:inset 0 1px #ffffff80,0 1px 0 #bca2c8}
:is(.jv3 .jvButton,body.jv3[data-ui-theme=sticker-club] #screen-home button.jvButton):disabled{opacity:.52;cursor:default;transform:none;text-shadow:none}
:is(.jv3 button,.jv3 a):focus-visible{outline:3px solid #5b32a5;outline-offset:4px}
.jv3 .jvButton[aria-busy=true]{opacity:1;cursor:progress}
.jv3 .jvButton[aria-busy=true]:before{content:'';width:15px;height:15px;flex:none;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:jvBusy 850ms linear infinite}
@keyframes jvBusy{to{transform:rotate(360deg)}}
.jv3 .jvPhotoCard{position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;padding:12px 12px 0;border:1px solid #77639a;border-radius:19px;background:var(--jv-paper) url('../sticker-club-v2/cotton-paper-256-v2.webp?v=0d7fbd3200') repeat;box-shadow:var(--jv-shadow)}
.jv3 .jvPhotoWindow{position:relative;overflow:hidden;min-height:80px;border:1px solid #d7bfba;border-radius:11px;background:#eee0d1;isolation:isolate}
.jv3 .jvPhotoWindow:before{content:'';position:absolute;inset:0;display:grid;place-content:center;background:url('../sticker-club-v2/doodle-stars-v2.svg?v=1') center/54px no-repeat,radial-gradient(ellipse,#fbead2,#e9dfeb);color:#ab88ba;font-size:64px;z-index:-1}
.jv3 .jvPhotoWindow img{display:block;width:100%;height:100%;object-fit:cover}
.jv3 .jvPhotoWindow[data-state=empty]:after,.jv3 .jvPhotoWindow[data-state=error]:after{content:attr(data-message);position:absolute;bottom:16px;left:10px;right:10px;text-align:center;font-size:14px;color:var(--jv-muted)}
.jv3 .jvPhotoTape{position:absolute;z-index:2;left:12px;top:-21px;max-width:calc(100% - 24px);transform:rotate(-3deg);text-transform:none;letter-spacing:0;white-space:normal}
.jv3 .jvPhotoCopy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 16px;align-items:center;padding:12px 5px 10px}
.jv3 .jvPhotoCopy h1,.jv3 .jvPhotoCopy h2{margin:0;grid-column:1;font:900 28px/1.15 Nunito,system-ui,sans-serif;letter-spacing:-.03em;overflow-wrap:anywhere}
.jv3 .jvPhotoCopy p{grid-column:1;margin:0;font-weight:800;color:var(--jv-muted);font-size:16px;line-height:1.3}
.jv3 .jvPhotoCopy>.jvButton--primary{grid-column:2;grid-row:1/3;font-size:22px;min-height:57px;max-width:220px}
.jv3 .jvPhotoCopy>.jvButton--quiet{grid-column:1/-1;border-top:1px solid #c9b3dc;border-radius:0;width:100%;margin-top:3px}
.jv3 .jvGoalTicket{display:grid;grid-template-columns:104px minmax(0,1fr);gap:10px 18px;align-items:center;min-width:0;padding:26px;background:url('../sticker-club-v2/ticket-mint-v2.svg?v=a10032617d') center/100% 100% no-repeat;filter:drop-shadow(1px 4px 3px #64422c1c)}
.jv3 .jvGoalTicket h2{font:900 22px/1.15 Nunito,system-ui,sans-serif;margin:5px 0 8px}
.jv3 .jvGoalTicket p{font-size:15px;line-height:1.4;margin:5px 0}
.jv3 .jvGoalTicket .jvButton{padding-left:0;justify-content:start}
.jv3 .jvKicker{display:block;font:700 22px/1.2 JiggizV2Accent,cursive;color:#326859}
.jv3 .jvPhotoTile{position:relative;display:grid;grid-template-columns:90px minmax(0,1fr);gap:5px 12px;align-content:center;min-width:0;min-height:100px;padding:8px;border:1px solid #dfcbbd;border-radius:15px;background:var(--jv-paper) url('../sticker-club-v2/cotton-paper-256-v2.webp?v=0d7fbd3200');box-shadow:0 3px 0 #e0cfc1,1px 5px 8px #64422c12;color:var(--jv-ink);text-align:left;font-family:inherit;cursor:pointer;touch-action:manipulation}
.jv3 .jvPhotoTile img{grid-column:1;grid-row:1/3;display:block;width:90px;height:80px;object-fit:cover;border-radius:9px;background:#eee2db}
.jv3 .jvPhotoTile strong{grid-column:2;font-size:16px;font-weight:900;line-height:1.2;overflow-wrap:anywhere}
.jv3 .jvPhotoTile small{grid-column:2;font-size:13px;font-weight:800;color:#65507e}
.jv3 .jvNotice{display:flex;align-items:center;gap:12px;padding:14px 18px;background:#fff4d8;border:1px solid #e0cba6;border-radius:13px;color:#67482d;font-size:14px;line-height:1.4}
.jv3 .jvNotice[data-state=error]{background:#fff0eb;border-color:#dcaa99;color:#81402f}
.jv3 [hidden]{display:none!important}
@media(prefers-reduced-motion:reduce){.jv3 .jvButton{transition:none}.jv3 .jvButton[aria-busy=true]:before{animation:none}}
@media(forced-colors:active){.jv3 :is(.jvButton,.jvPhotoCard,.jvGoalTicket,.jvPhotoTile,.jvNotice){background:Canvas;color:CanvasText;box-shadow:none;filter:none;border:1px solid CanvasText}.jv3 .jvButton:disabled{color:GrayText;opacity:1}}

/* V6 reusable motion. Opt in on a stage; one pass, transform/opacity only.
   Backwards fill avoids retaining animated transforms or compositor layers.
   Remove data-jv-motion="play" on navigation, hiding or replay cancellation. */
@keyframes jvCardArrive{0%{opacity:.35;transform:translateY(10px) scale(.985)}72%{opacity:1;transform:translateY(-1px) scale(1.003)}100%{opacity:1;transform:none}}
@keyframes jvLabelSettle{0%{opacity:.4;transform:translateY(-5px) rotate(-7deg)}70%{opacity:1;transform:translateY(1px) rotate(-2deg)}100%{opacity:1;transform:translateY(0) rotate(-3deg)}}
@keyframes jvArtSettle{0%{opacity:.45;transform:translateY(5px) rotate(-7deg) scale(.92)}65%{opacity:1;transform:translateY(-2px) rotate(2deg) scale(1.025)}100%{opacity:1;transform:none}}
@keyframes jvTileArrive{from{opacity:.4;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes jvDialogArrive{from{opacity:.6;transform:translateY(7px) scale(.985)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:no-preference){
 .jv3 .jvMotionStage[data-jv-motion=play] .jvMotionCard{animation:jvCardArrive 340ms cubic-bezier(.2,.8,.25,1) var(--jv-delay,0ms) 1 backwards}
 .jv3 .jvMotionStage[data-jv-motion=play] .jvMotionLabel{animation:jvLabelSettle 350ms ease-out var(--jv-delay,30ms) 1 backwards}
 .jv3 .jvMotionStage[data-jv-motion=play] .jvMotionArt{animation:jvArtSettle 440ms cubic-bezier(.2,.8,.25,1) var(--jv-delay,80ms) 1 backwards}
 .jv3 .jvMotionStage[data-jv-motion=play] .jvMotionTile{animation:jvTileArrive 220ms ease-out var(--jv-delay,120ms) 1 backwards}
 .jv3 .jvMotionStage[data-jv-motion=play] .jvMotionDialog{animation:jvDialogArrive 180ms ease-out 1 backwards}
}
html.reduced-motion .jv3 .jvMotionStage [class*=jvMotion],.jv3 .jvMotionStage[data-jv-motion=still] [class*=jvMotion]{animation:none!important;transition:none!important}
html.reduced-motion .jv3 .jvButton,.jv3 .jvMotionStage[data-jv-motion=still] .jvButton{transition:none!important}
html.reduced-motion .jv3 .jvButton:not(:disabled):hover,html.reduced-motion .jv3 .jvButton:not(:disabled):active,.jv3 .jvMotionStage[data-jv-motion=still] .jvButton:hover,.jv3 .jvMotionStage[data-jv-motion=still] .jvButton:active{transform:none!important}
@media(prefers-reduced-motion:reduce){.jv3 .jvButton:hover,.jv3 .jvButton:active{transform:none!important}}
