/* Shared tactile response; the cut artwork itself stays flat and readable. */
.bloomSwap .tile.selected{transform:translateY(-4px) scale(1.025);filter:brightness(1.045) drop-shadow(0 7px 5px #140d0a77);z-index:5}
.bloomSwap .tile.moving{filter:brightness(1.055) drop-shadow(0 13px 8px #140d0a99);box-shadow:inset 0 0 0 1px #ffe4a599!important;z-index:12;transition:none}
.bloomSwap .tile{transition:transform .18s ease,filter .18s ease}
.pieceTile{transition:transform .16s ease,box-shadow .16s ease,opacity .16s ease}
.arcade .pieceTile.selected,.pieceTile.selected{transform:translateY(-5px) scale(1.035);box-shadow:0 9px 10px #26120766,inset 0 0 0 1px #ffe2ac!important;z-index:2}
.pieceTile.is-lifted{opacity:.3;transform:translateY(-2px)}
#dragPreview{filter:drop-shadow(0 12px 9px #1e100ca6)!important}
.puzzleFrame:has(.cloth-reveal){animation:clothFrameGlow 2.4s ease both}
#puzzle.cloth-reveal{animation:clothUnfold 1.3s ease both}
@keyframes clothUnfold{from{filter:brightness(1)}45%{filter:brightness(1.16)}to{filter:brightness(1)}}
@keyframes clothFrameGlow{50%{filter:drop-shadow(0 0 14px #eec98488)}}
.textileTreasure{position:fixed;inset:0;margin:auto;width:min(460px,94vw);max-height:93dvh;overflow:auto;border:3px solid #b58b49;border-radius:9px;padding:27px 27px 24px;color:#ffe3ad;background:linear-gradient(145deg,#234048,#122e35);box-shadow:inset 0 0 0 4px #123039,0 20px 70px #0009;text-align:center;font-family:'Bloom Craft Kai','BloomKai',Georgia,serif}
.textileTreasure::backdrop{background:#071e26ba;backdrop-filter:blur(5px)}
.treasureCloth{position:relative;overflow:hidden;padding:9px;background:linear-gradient(135deg,#a3733d,#e4c387 40%,#7c4d28 75%,#c39b60);box-shadow:0 9px 20px #06141e88,inset 0 0 0 2px #f2d7a5;animation:treasureUnfold .75s cubic-bezier(.2,.7,.2,1) both}
.treasureCloth img{display:block;width:100%;max-height:58dvh;object-fit:contain;background:#15333b}
.treasureCloth:after{content:'';position:absolute;inset:-80%;background:linear-gradient(110deg,transparent 43%,#fff2c855 50%,transparent 57%);transform:translateX(-70%);animation:treasureShine 1.6s .25s ease both;pointer-events:none}
.textileTreasure h2{font-size:clamp(19px,4.6vw,25px);font-weight:400;line-height:1.3;margin:20px 22px 8px;color:#ffe5af}
.textileTreasure p{font-size:12px;color:#cdbd9b;margin:0}
.treasureSeal{display:inline-grid;place-items:center;min-width:54px;height:48px;border:3px double #e9b185;border-radius:4px;background:#943c2b;color:#fff0c6;padding:6px 10px;font-size:20px;transform:rotate(-8deg);margin-top:18px;animation:sealPress .35s .8s both;box-shadow:0 2px 0 #5f211a}
html[lang=en] .textileTreasure{font-family:Georgia,'Times New Roman',serif}html[lang=en] .treasureSeal{font-size:15px}
.treasureSkip{position:absolute;right:3px;top:3px;width:29px;height:29px;min-height:29px;border:0;border-radius:50%;font:22px/1 Georgia;color:#ffe5b2;background:#17343b;z-index:3;cursor:pointer}
@keyframes treasureUnfold{from{opacity:0;transform:translateY(15px) scale(.94)}to{opacity:1;transform:none}}
@keyframes treasureShine{to{transform:translateX(70%)}}
@keyframes sealPress{from{opacity:0;transform:rotate(-8deg) scale(1.6)}to{opacity:1;transform:rotate(-8deg) scale(1)}}
@media(prefers-reduced-motion:reduce){.textileTreasure *,.cloth-reveal,.puzzleFrame:has(.cloth-reveal){animation:none!important}.tile,.pieceTile{transition:none!important}}

.puzzleFrame.piece-set{animation:clothSet .28s ease both}@keyframes clothSet{45%{transform:translateY(1px);filter:brightness(1.035)}}@media(prefers-reduced-motion:reduce){.puzzleFrame.piece-set{animation:none}}
