/* Rewards tab (rewards-vault.js; owner's picture, 2026-11-04). Painted pieces in assets/rewards, the chest in
   assets/chests/vault-*. Sizes follow the picture at 412 wide; the stage scales with the screen (cqw). Stretchy pieces
   use border-image so their gold corners keep their shape. */
#rewards-view{padding:0;background:#2a1d4c}
.vault{--ink:#0d1440;--gold:#ffd24a;position:relative;container-type:inline-size;min-height:100%;padding:4px 10px 18px;
  background:url(/assets/rewards/room.webp) center top/100% auto no-repeat,linear-gradient(#3a2a63 0,#2a1d4c 900px) #2a1d4c;
  font-family:'Lilita One',sans-serif;color:#fff}
.vault h1,.vault h2,.vault h3,.vault p{margin:0;font-weight:400}
.vault .v-coin,.vault .v-gem,.v-loot .v-coin,.v-loot .v-gem{width:20px;height:20px;flex:none;vertical-align:middle}
/* Thick dark outline for painted-game text */
.v-title,.v-btn,.v-pill,.v-dayname,.v-day>b,.v-timer,.v-meter b,.v-tab,.v-tag,.v-head,.v-hero-title,.v-plate,.v-big-name b,.v-card b,.v-loot h2,.v-starter-tag,.v-tomorrow,.v-pay b{-webkit-text-stroke:2px var(--ink);paint-order:stroke fill;text-shadow:0 2px 0 var(--ink)}

/* Crown ribbon title */
.vault .v-title{position:relative;z-index:12;width:min(300px,74cqw);aspect-ratio:600/217;margin:0 auto;padding:0;text-align:center;font-size:min(34px,8.6cqw);line-height:1;letter-spacing:.5px;color:#fff6dc;background:url(/assets/rewards/title.webp) center/100% 100% no-repeat}
/* The word sits on the middle of the blue band (the ribbon dips in the middle; 70% puts the capitals, not the line box, on its centre). */
.v-title span{position:absolute;left:0;right:0;top:70%;transform:translateY(-50%);line-height:1}

/* DAILY / WEEKLY with the reset timer; they stay at the top while the tab scrolls */
.v-tabs{position:sticky;top:0;z-index:15;display:flex;align-items:center;gap:6px;height:52px;margin:2px -2px 0;padding:3px 4px;border-radius:26px;background:#140f35cc;box-shadow:inset 0 0 0 2px #c8962f}
.v-tab{flex:1;height:44px;border:0;border-image:url(/assets/rewards/tab-idle.webp) 0 50 fill/0 22px;background:none;color:#e6e9ff;font:400 21px/1 'Lilita One',sans-serif;cursor:pointer}
.v-tab[aria-selected="true"]{border-image-source:url(/assets/rewards/tab-active.webp);color:#fff}
.v-timer{display:flex;align-items:center;justify-content:center;gap:4px;min-width:104px;height:38px;padding:0 12px 0 8px;font-size:15px;color:#fff;border-image:url(/assets/rewards/timer.webp) 0 31 fill/0 19px}
.v-hourglass{width:16px;height:25px}

/* The chest on its pedestal, the day plate and CLAIM pill under it */
.v-hero{position:relative;display:flex;flex-direction:column;align-items:center;padding-top:8px}
.v-hero-title{position:relative;z-index:7;font-size:min(32px,8cqw);line-height:1;color:#fff6dc;transform:rotate(-1.5deg)}
.v-stage{--foot:calc(var(--size)*.98 + 6px);--ped:78cqw;--size:56cqw;position:relative;width:100%;height:calc(var(--foot) + var(--ped)*.317*.55);isolation:isolate}
.v-pedestal{position:absolute;left:50%;top:calc(var(--foot) - var(--ped)*.317*.42);width:var(--ped);height:auto;transform:translateX(-50%);z-index:1;filter:drop-shadow(0 8px 4px #120a2a90)}
.v-shadow{position:absolute;left:50%;top:calc(var(--foot) - 8px);width:calc(var(--size)*.82);height:14px;transform:translateX(-50%);border-radius:50%;background:#140a2aa0;filter:blur(4px);z-index:2}
.v-rays{position:absolute;left:50%;top:calc(var(--foot) - var(--size)*.75);width:calc(var(--size)*1.5);aspect-ratio:1;transform:translate(-50%,-25%);z-index:0;border-radius:50%;background:repeating-conic-gradient(#ffe18a55 0deg 9deg,transparent 9deg 27deg);-webkit-mask-image:radial-gradient(#000b,transparent 66%);mask-image:radial-gradient(#000b,transparent 66%);opacity:0;transition:opacity .4s;pointer-events:none}
.v-stage:has(.is-ready,.is-open) .v-rays{opacity:.8;animation:v-spin 24s linear infinite}
/* The render's chest stands at 98.5% of the frame's height. */
.v-chest{position:absolute;left:50%;top:calc(var(--foot) - var(--size)*1.1229*.985);width:var(--size);aspect-ratio:480/539;transform:translateX(-50%);z-index:3}
.v-chest[data-reward]{cursor:pointer}
.v-chest-move{position:absolute;inset:0;transform-origin:50% 98%}
.v-chest-art{position:absolute;inset:0;width:100%;height:100%;z-index:2;pointer-events:none;filter:drop-shadow(0 0 10px #ffcf4a66)}
.v-glow{position:absolute;left:5%;right:5%;top:20%;height:55%;z-index:1;border-radius:50%;background:radial-gradient(#fff6c0,#ffcf4a88 45%,transparent 70%);opacity:0;pointer-events:none}
.v-chest.is-open .v-glow{opacity:1}
.v-mouth{position:absolute;left:50%;top:52%;width:1px;height:1px}
.v-flash{position:absolute;inset:-10%;z-index:3;border-radius:50%;background:radial-gradient(ellipse 46% 44% at 50% 55%,#fffbe6 0%,#ffe9a0 55%,#ffc84a00 100%);opacity:0;pointer-events:none}
.v-chest.is-done .v-chest-move{animation:v-bob 4s ease-in-out infinite}
.v-chest.is-done .v-chest-art{filter:saturate(.45) brightness(.62)}
/* Sparkles twinkle around a ready chest */
.v-twinkle{position:absolute;z-index:4;width:16px;height:auto;pointer-events:none;animation:v-twinkle 2.4s ease-in-out infinite}
.v-tw1{left:calc(50% - var(--size)*.45);top:calc(var(--foot) - var(--size)*.95)}
.v-tw2{left:calc(50% + var(--size)*.42);top:calc(var(--foot) - var(--size)*.8);animation-delay:-.6s}
.v-tw3{left:calc(50% - var(--size)*.2);top:calc(var(--foot) - var(--size)*1.08);width:12px;animation-delay:-1.2s}
.v-tw4{left:calc(50% + var(--size)*.18);top:calc(var(--foot) - var(--size)*.25);width:12px;animation-delay:-1.8s}
.v-tw5{left:calc(50% - var(--size)*.7);top:calc(var(--foot) - var(--size)*.3);width:14px;animation-delay:-.3s}
.v-tw6{left:calc(50% + var(--size)*.62);top:calc(var(--foot) - var(--size)*1.02);width:14px;animation-delay:-1.5s}
/* Ready: a pulsing gold halo, a gleam over the chest, and the Jackpot Jump (rewards-vault.js readyChest): a beam
   from the lid, the game's coins spinning out (v-jump-coin), stars, and a gold ring on landing */
.v-halo{position:absolute;left:50%;top:calc(var(--foot) - var(--size)*.55);width:calc(var(--size)*1.25);aspect-ratio:1;transform:translate(-50%,-50%);z-index:0;border-radius:50%;background:radial-gradient(#fff0b0,#ffc23f99 38%,transparent 68%);opacity:0;pointer-events:none}
.v-stage:has(.v-chest.is-ready) .v-halo{animation:v-halo 2s ease-in-out infinite}
.v-chest.is-ready .v-chest-art{animation:v-shine-chest 2s ease-in-out infinite}
.v-beam{position:absolute;left:50%;top:44%;width:70%;height:70%;transform:translate(-50%,-100%);z-index:1;pointer-events:none;background:linear-gradient(to top,#fff3b0ee,#ffd75a66 40%,transparent);clip-path:polygon(30% 100%,70% 100%,100% 0,0 0);filter:blur(3px);opacity:0;mix-blend-mode:screen}
.v-shine{position:absolute;inset:0;z-index:3;pointer-events:none;opacity:0;-webkit-mask:url(/assets/chests/vault-0.webp) center/100% 100%;mask:url(/assets/chests/vault-0.webp) center/100% 100%;background:linear-gradient(115deg,transparent 38%,#fff8 47%,#fffbe0cc 50%,#fff8 53%,transparent 62%) 120% 0/250% 100% no-repeat;mix-blend-mode:screen}
.v-chest.is-ready:not(.is-jump) .v-shine{opacity:1;animation:v-sweep 2.8s ease-in-out infinite}
.v-ring{position:absolute;left:50%;bottom:-4%;width:120%;height:22%;transform:translateX(-50%) scale(.3);border-radius:50%;border:4px solid #ffe38a;box-shadow:0 0 14px #ffd75a,inset 0 0 10px #ffd75a;opacity:0;z-index:0;pointer-events:none}
/* No z-index: the coins stack with the chest art (behind it as they leave the lid, then in front) */
.v-jump-fx{position:absolute;inset:0;pointer-events:none}
.v-jump-coin{position:absolute;z-index:4;pointer-events:none;filter:drop-shadow(0 2px 2px #0008)}
.v-jump-coin b{display:block;width:100%;height:100%;animation:v-coin-spin 1.1s linear infinite}
.vault .v-jump-coin .v-coin{display:block;width:100%;height:100%}
.v-jump-star{position:absolute;width:16px;pointer-events:none;z-index:5}
/* Collected: everything stops, the chest and pedestal dim, the next chest's time shows */
.v-stage:has(.is-done) .v-twinkle,.v-loot .v-twinkle{display:none}
.v-stage:has(.is-done) .v-pedestal{filter:brightness(.7) drop-shadow(0 8px 4px #120a2a90)}
.v-next{margin-top:4px;font:italic 800 13px/16px Nunito,system-ui,sans-serif;color:#e6e0ff;text-shadow:0 1px 2px #000}
.v-plate{position:relative;z-index:6;display:flex;align-items:center;justify-content:center;width:min(270px,68cqw);height:min(47px,11.7cqw);margin-top:-10px;background:url(/assets/rewards/nameplate.webp) center/100% 100% no-repeat;filter:drop-shadow(0 3px 2px #0008)}
.v-plate p{display:flex;align-items:center;justify-content:center;gap:6px;font-size:min(22px,5.6cqw);line-height:1;color:#fff}
.v-plate p span{display:inline-flex;align-items:center;gap:3px}
.v-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 1.5px var(--ink)}
.v-pill{position:relative;z-index:7;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:170px;height:44px;margin-top:4px;padding:0 22px;border:0;border-image:url(/assets/rewards/button-green.webp) 0 13% fill/0 15px;background:none;color:#fff;font:400 22px/1 'Lilita One',sans-serif;cursor:pointer;touch-action:manipulation;overflow:hidden}
.v-pill:disabled{border-image-source:url(/assets/rewards/button-grey.webp);color:#e8e8f0;font-size:18px;cursor:default}
.v-pill:not(:disabled){animation:v-pulse 1.8s ease-in-out infinite}
.v-pill:not(:disabled):active{transform:translateY(2px) scale(.97)}

/* Buttons: painted plates, Lilita with a dark outline */
.v-btn{display:inline-flex;align-items:center;justify-content:center;gap:3px;min-width:44px;min-height:44px;padding:4px 12px;border:0;border-image:url(/assets/rewards/button-gold.webp) 0 13% fill/0 15px;background:none;color:#fff;font:400 17px/1 'Lilita One',sans-serif;white-space:nowrap;cursor:pointer;touch-action:manipulation;position:relative;overflow:hidden}
.v-btn:not(:disabled):not(.v-wait):active{transform:translateY(2px) scale(.97)}
.v-btn:not(:disabled):not(.v-grey):after,.v-pill:not(:disabled):after{content:'';position:absolute;top:0;bottom:0;left:-40%;width:28%;background:linear-gradient(100deg,transparent,#fff8 50%,transparent);transform:skewX(-18deg);animation:v-shine 3.2s ease-in-out infinite;pointer-events:none}
.v-green{border-image-source:url(/assets/rewards/button-green.webp)}
.v-blue{border-image-source:url(/assets/rewards/button-blue.webp)}
.v-grey{border-image-source:url(/assets/rewards/button-grey.webp);color:#e8e8f0;cursor:default}
.v-btn:disabled{cursor:default}
.v-btn .v-coin,.v-pill .v-coin{width:20px;height:20px;flex:none}
.v-wait{font-size:12px;white-space:normal;line-height:1.05;text-align:center}

/* Section headings with gold dividers */
.v-head{display:flex;align-items:center;justify-content:center;gap:8px;font-size:21px;line-height:1;color:var(--gold)}
.v-head:before,.v-head:after{content:'';flex:1;max-width:76px;height:8px;background:url(/assets/rewards/divider.webp) center/100% 100% no-repeat}
.v-head.v-left{justify-content:flex-start;margin:16px 2px 2px;font-size:23px;color:#fff6dc}
.v-head.v-left:before{display:none}.v-head.v-left:after{max-width:none;min-width:30px}
.v-note{order:3;font:italic 800 12px/1 Nunito,system-ui,sans-serif;color:#fff;-webkit-text-stroke:0;text-shadow:0 1px 2px #000}

/* YOUR DAILY REWARDS: days 1-6 on the gold track, Day 7's Big Chest banner */
.v-panel{position:relative;margin:24px 0 0;padding:12px 10px 8px;border:0;border-image:url(/assets/rewards/panel.webp) 20 fill/8px;filter:drop-shadow(0 4px 4px #0007)}
.v-days{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:5px;margin-top:12px}
.v-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;height:62px;min-width:0;padding:17px 0 5px;background:url(/assets/rewards/day-tile.webp) center/100% 100% no-repeat}
.v-day.is-today{background-image:url(/assets/rewards/day-tile-today.webp);filter:drop-shadow(0 0 7px #ffd54a)}
.v-day.is-today:not(.v-big):after{content:'';position:absolute;inset:14% 6% 4%;border-radius:10px;box-shadow:inset 0 0 10px #fff4b0;pointer-events:none;animation:v-glow 1.6s ease-in-out infinite}
.v-dayname{position:absolute;top:1px;z-index:2;font-size:min(12px,3cqw);line-height:1.35;color:#4a2a00;-webkit-text-stroke:0;text-shadow:none}
.v-day>b{font-size:min(17px,4.2cqw);line-height:1;color:#fff}
.v-prize{width:66%;height:auto;filter:drop-shadow(0 2px 1px #0007)}
.v-coins{position:relative;width:62%;height:min(23px,5.6cqw)}
.v-coins svg{position:absolute;width:56%;height:auto;aspect-ratio:1;filter:drop-shadow(0 1px 1px #0008)}
.v-coins svg:nth-child(1){left:0;bottom:0}.v-coins svg:nth-child(2){right:0;bottom:0}.v-coins svg:nth-child(3){left:22%;bottom:30%}
.v-day.is-got>*{opacity:.8}
.v-tomorrow{position:absolute;bottom:-13px;z-index:4;padding:1px 5px;border-radius:5px;background:#1e2a7a;box-shadow:0 0 0 1.5px var(--gold);font-size:10px;color:#fff;-webkit-text-stroke:1px var(--ink)}
.v-track{grid-column:1/-1;position:relative;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:5px;height:22px;margin-top:4px;background:radial-gradient(circle,#e3b143 1.4px,transparent 1.8px) center/7px 7px repeat-x}
.v-track i{justify-self:center;align-self:center;width:12px;height:12px;background:url(/assets/rewards/path-dot.webp) center/contain no-repeat;filter:grayscale(.7) brightness(.7)}
.v-track i.is-lit{filter:drop-shadow(0 0 4px #ffd54a)}
.v-arrow{position:absolute;left:50%;bottom:-8px;width:20px;height:auto;margin-left:-10px}
.v-big{grid-column:1/-1;flex-direction:row;justify-content:space-between;gap:6px;aspect-ratio:auto;height:72px;margin-top:14px;padding:0 10px 0 4px;background:none;border-image:url(/assets/rewards/banner.webp) 40 fill/14px}
.v-big-chest{width:88px;height:auto;margin-top:-26px;filter:drop-shadow(0 3px 3px #0007)}
.v-big.is-today .v-big-chest{animation:v-wobble 1.6s ease-in-out infinite;transform-origin:50% 90%}
.v-big-name{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px}
.v-tag{display:inline-block;padding:3px 14px 4px;font-size:14px;line-height:1;color:#fff;border-image:url(/assets/rewards/day7-tag.webp) 0 26% fill/0 12px}
.v-big-name b{font-size:min(26px,6.2cqw);line-height:1;white-space:nowrap;color:#fff6dc}
.v-big .v-btn{min-width:110px;height:48px;font-size:22px}
.v-big .v-wait{white-space:nowrap;font-size:16px}
.v-big.is-got{filter:saturate(.6)}
.v-safe{margin-top:6px;text-align:center;font:italic 800 13px/16px Nunito,system-ui,sans-serif;color:#fff;text-shadow:0 1px 2px #000}

/* Quest cards */
.v-list{display:flex;flex-direction:column;gap:7px}
.vault .rewards-section{margin-top:0}
.v-list[hidden]{display:none}
.v-quest{position:relative;display:grid;grid-template-columns:56px minmax(0,1fr) 52px 82px;gap:6px;align-items:center;min-height:78px;padding:6px 10px 6px 8px;border:0;border-image:url(/assets/rewards/quest-card.webp) 44 fill/14px;color:#fff;filter:drop-shadow(0 3px 2px #0008)}
#rewards-view .v-quest .reward-glyph{width:54px;height:54px;object-fit:contain}
#rewards-view .v-quest .reward-glyph.reward-fighter{width:48px;height:48px;margin:3px}
.v-quest-body{min-width:0;padding-left:8px;border-left:2px solid #c8962f66}
.v-quest h3{font-size:15px;line-height:17px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}
.v-quest.no-action{grid-template-columns:56px minmax(0,1fr) 56px}
.v-quest p{font:800 12px/13px Nunito,system-ui,sans-serif;color:#dfe5ff;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}
.v-meter{position:relative;height:17px;margin-top:4px;overflow:hidden;border-radius:9px;background:url(/assets/rewards/quest-bar.webp) center/100% 100% no-repeat;text-align:center}
/* The fill and its shine are one background, so the shine never leaves the filled part (it used to show as a grey
   block past the end of the fill). */
.v-meter i{position:absolute;left:2px;top:2px;bottom:2px;right:2px;border-radius:7px;background:linear-gradient(100deg,transparent 42%,#ffffff70 50%,transparent 58%) -150% 0/250% 100% no-repeat,url(/assets/rewards/quest-fill.webp) center/100% 100% no-repeat;transform:scaleX(var(--p));transform-origin:left;animation:v-bar 3s ease-in-out infinite}
.v-meter b{position:relative;font-size:11px;line-height:17px;font-weight:400;color:#fff;-webkit-text-stroke:1.5px var(--ink)}
.v-pay{display:flex;flex-direction:column;align-items:center;padding-left:4px;border-left:2px solid #c8962f66}
.v-pay b{display:flex;align-items:center;gap:2px;font-size:19px;font-weight:400;color:#fff}
.v-pay .v-coin{width:20px;height:20px}
.v-pay small{font-size:14px;color:#4fc3ff;white-space:nowrap;-webkit-text-stroke:1px var(--ink);paint-order:stroke fill}
.v-pay .v-pay-gems{font-size:15px}.v-pay .v-gem{width:16px;height:16px}
.v-quest>.v-btn,.v-quest>.v-done{width:82px;font-size:17px}
.v-quest.is-ready{filter:drop-shadow(0 0 6px #ffe86d) drop-shadow(0 3px 2px #0008)}
.v-quest.is-claimed{opacity:.75}
.v-quest.is-claimed .v-pay{filter:saturate(.5)}
.v-done{display:inline-flex;align-items:center;justify-content:center;gap:4px;min-height:44px;font-size:16px;color:#6ee36a;-webkit-text-stroke:1.5px var(--ink);paint-order:stroke fill}
.v-seal{display:inline-block;flex:none;width:24px;height:24px;background:url(/assets/rewards/done-stamp.webp) center/contain no-repeat}
.v-seal.v-slam{position:absolute;z-index:8}

/* The Full Set: three crowns light up as the daily quests are claimed */
.v-bonus{display:flex;align-items:center;justify-content:space-between;gap:6px;min-height:62px;margin-top:2px;padding:4px 10px 4px 12px;border:0;border-image:url(/assets/rewards/quest-card.webp) 44 fill/14px;filter:drop-shadow(0 3px 2px #0008)}
.v-bonus .v-tag{font-size:17px;padding:6px 16px 7px}
.v-crowns{display:flex;gap:4px}
.v-crown{width:32px;height:32px;object-fit:contain}
.v-crown.is-lit{filter:drop-shadow(0 0 5px #ffdc56)}
.v-bonus .v-btn{min-width:82px;font-size:19px}
.v-bonus.is-ready{filter:drop-shadow(0 0 6px #ffe86d) drop-shadow(0 3px 2px #0008)}

/* The starter quest (the tutorial's prize) */
.v-starter{margin:22px 0 4px}
.v-starter-tag{position:absolute;left:16px;top:-13px;padding:3px 10px;border-radius:8px;background:linear-gradient(#ffe27a,#f2b51e);font-size:12px;letter-spacing:.8px;color:#fff;-webkit-text-stroke:1.5px #6b3d06;box-shadow:0 2px 0 #8a5a00}
.v-starter>.v-pay{grid-column:3}


/* Effects */
.v-spark{position:fixed;z-index:90;width:18px;height:auto;pointer-events:none;filter:drop-shadow(0 0 3px #fff3a5)}

/* The Big Chest / weekly chest stage */
.v-loot{position:fixed;inset:0;z-index:80;display:grid;grid-template-rows:auto auto auto auto;align-content:center;justify-items:center;row-gap:12px;padding:calc(var(--top,0px) + 16px) max(16px,env(safe-area-inset-right)) calc(var(--bottom,0px) + 16px) max(16px,env(safe-area-inset-left));overflow:hidden;isolation:isolate;container-type:inline-size;font-family:'Lilita One',sans-serif;color:#fff;--ink:#0d1440;--gold:#ffd24a}
.v-loot:before{content:'';position:absolute;inset:var(--top,0px) -8px var(--bottom,0px);z-index:-1;background:linear-gradient(#120d3080,#0e0a2ae6),url(/assets/rewards/room.webp) center 20%/cover;filter:blur(3px)}
.v-loot h2{margin:0;font:400 34px/38px 'Lilita One',sans-serif;color:#fff6dc;letter-spacing:.5px}
.v-loot .v-stage{--size:min(250px,62cqw);--ped:min(320px,80cqw)}
.v-cards{display:flex;justify-content:center;gap:10px;width:100%;min-height:118px;perspective:900px}
.v-card[hidden]{display:none}
.v-card{flex:0 1 112px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;height:118px;padding:12px 8px 14px;border:0;border-image:url(/assets/rewards/quest-card.webp) 44 fill/14px;color:#dfe5ff;filter:drop-shadow(0 4px 3px #0008)}
.v-card svg,.v-card .tk-art{width:44px;height:40px;object-fit:contain}
.v-card b{font-size:28px;line-height:30px;font-weight:400;color:#fff}
.v-card span{font-size:11px;line-height:12px;text-align:center}
.v-awesome{width:180px;min-height:48px;font-size:24px}
.v-awesome:disabled{border-image-source:url(/assets/rewards/button-grey.webp)}

@keyframes v-bob{50%{transform:translateY(-3px)}}
@keyframes v-halo{0%,100%{opacity:.45;transform:translate(-50%,-50%) scale(.92)}50%{opacity:1;transform:translate(-50%,-50%) scale(1.06)}}
@keyframes v-sweep{0%,45%{background-position:120% 0}85%,100%{background-position:-120% 0}}
@keyframes v-coin-spin{0%,100%{transform:scaleX(1)}25%,75%{transform:scaleX(.4)}50%{transform:scaleX(-1)}}
@keyframes v-shine-chest{0%,100%{filter:drop-shadow(0 0 8px #ffcf4a66)}50%{filter:drop-shadow(0 0 18px #ffd95ccc) brightness(1.08)}}
@keyframes v-twinkle{0%,100%{opacity:0;transform:scale(.4) rotate(0)}50%{opacity:1;transform:scale(1) rotate(45deg)}}
@keyframes v-spin{to{transform:translate(-50%,-25%) rotate(360deg)}}
@keyframes v-pulse{50%{transform:scale(1.05)}}
@keyframes v-shine{0%,55%{left:-40%}85%,100%{left:120%}}
@keyframes v-bar{0%{background-position:-150% 0,center}60%,100%{background-position:250% 0,center}}
@keyframes v-glow{50%{opacity:.4}}
@keyframes v-wobble{0%,60%,100%{transform:none}70%{transform:rotate(-5deg)}80%{transform:rotate(5deg)}90%{transform:rotate(-2deg)}}

@media(max-width:380px){
  .v-quest.no-action{grid-template-columns:46px minmax(0,1fr) 48px}
  .v-quest{grid-template-columns:46px minmax(0,1fr) 44px 70px;gap:4px;padding:6px 8px 6px 6px}
  #rewards-view .v-quest .reward-glyph{width:44px;height:44px}
  #rewards-view .v-quest .reward-glyph.reward-fighter{width:40px;height:40px}
  .v-quest h3{font-size:14px;line-height:15px}
  .v-quest p{font-size:11px;line-height:12px;-webkit-line-clamp:3}
  .v-quest>.v-btn,.v-quest>.v-done{width:70px;font-size:15px}
  .v-pay b{font-size:16px}.v-pay small{font-size:12px}
  .v-tab{font-size:19px}.v-timer{min-width:92px;font-size:13px}
  .v-day:not(.v-big){height:56px;padding-top:15px}
  .v-big .v-btn{min-width:92px;font-size:19px}.v-big .v-wait{font-size:14px}
  .v-bonus .v-tag{font-size:15px;padding:5px 12px 6px}
  .v-crown{width:26px;height:26px}
  .v-loot{row-gap:8px}
  .v-cards{gap:6px;min-height:96px}.v-card{flex-basis:98px;height:96px;padding:8px 6px 10px}
  .v-card b{font-size:23px;line-height:24px}
}
.reduce-motion .vault *,.reduce-motion .v-loot *{animation:none!important}
.reduce-motion .v-stage:has(.v-chest.is-ready) .v-halo{opacity:.6}
