/* Direct manipulation follows the pointer; easing is applied only after release. */
.tactile-control[data-tactile=tear],.tactile-control[data-tactile=untie],.tactile-control[data-tactile=flip],.tactile-control[data-tactile=turn]{touch-action:pan-y}
.tactile-control .machine-knob{pointer-events:auto;touch-action:none}
.tactile-control.is-finishing{cursor:default}
.is-dragging .gesture-track i,.is-finishing .gesture-track i{transition:none}
.is-finishing .foil-tear,.is-finishing .ticket-cover,.is-finishing .reward-turner,.is-finishing .capsule-top,.is-finishing .capsule-band,.is-finishing .machine-knob,.is-finishing .bag-cord b,.is-finishing .bag-cord:after,.is-finishing .bag-neck{transition:none}
.tactile-table:has(.is-dragging) .gesture-track i,.tactile-table:has(.is-finishing) .gesture-track i{transition:none}
.tactile-access{flex-wrap:wrap;align-items:center}
.tactile-sound{background:transparent;border:1px solid var(--line);border-radius:5px;color:var(--muted);font-size:11px;padding:7px 10px;min-height:34px;white-space:nowrap;touch-action:manipulation}
.tactile-sound[aria-pressed=true]{color:var(--text);border-color:var(--muted)}
.reveal-sound{display:flex;justify-content:center;margin-top:12px}
.reveal-sound .tactile-sound{border-color:#c5c9bd;color:#566260}
.tactile-control[data-tactile=flip] .reward-turner{transform:translateX(var(--pull-x,0px)) rotateY(calc(var(--p)*180deg*var(--flip-sign,1)))}
.flow-reveal.just-revealed .reward-turner{animation:none}
.flow-reveal.revealed .reward-turner{transform:rotateY(180deg)}
.flow-reveal.revealed .reward-back{visibility:hidden}
.flow-reveal.revealed .reward-front{backface-visibility:visible;-webkit-backface-visibility:visible}
.table-card .flow-reveal.revealed .reward-turner{transform:none!important;transform-style:flat}
.table-card .flow-reveal.revealed .reward-front{transform:none!important}
.table-card .flow-reveal.revealed .reward-back{display:none}
.flow-reveal.just-revealed .printed-card{animation:card-ink-confirm .5s ease-out}
.deck-counter{display:flex;justify-content:center;align-items:center;gap:16px;color:#566260;font-size:12px;margin:0 0 20px}
.deck-dots{display:flex;gap:6px}.deck-dots i{display:block;width:5px;height:5px;border-radius:50%;background:#c6cbc1}.deck-dots .done{background:#3c6353}.deck-dots .current{background:#bb683e;box-shadow:0 0 0 3px #bb683e1c}
.flow-cards.card-deck{position:relative;display:block;max-width:530px;height:430px;margin:0 auto;overflow:visible}
.card-deck .reward-item{position:absolute;top:0;left:calc(50% - 95px);width:190px;z-index:calc(10 - var(--depth));transform:translate(calc(var(--depth)*8px),calc(var(--depth)*5px)) rotate(calc(var(--depth)*3deg));transform-origin:50% 90%}
.card-deck .reward-item.is-current{z-index:12;transform:none}
.card-deck .reward-item.is-waiting .reward-caption{display:none}
.card-deck .reward-item.is-waiting .playing-card-back{filter:brightness(.9)}
.card-deck .reward-item.is-revealed:not(.is-inspecting){top:330px;left:calc(50% - 122px + var(--revealed-index)*84px);height:100px;width:76px;transform:none;z-index:1}
.card-deck .reward-item.is-revealed:not(.is-inspecting) .flow-reveal{width:190px;height:270px;transform:scale(.34);transform-origin:top left}
.card-deck .reward-item.is-revealed:not(.is-inspecting) .reward-caption{position:absolute;top:94px;left:0;right:0;margin:0;min-height:0}
.card-deck .reward-item.is-revealed:not(.is-inspecting) .reward-caption small{display:none}
.card-deck .reward-item.is-revealed:not(.is-inspecting) .reward-caption b{font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.card-deck .reward-item.is-current .reward-caption{margin-top:16px}
.has-card-deck .gesture-feedback{margin-top:13px}
.has-card-deck:not(.has-card-history) .card-deck{height:330px}
.reveal-table.table-card:not(.has-card-deck) .tactile-rewards{animation:deck-settle .24s ease-out}
.foil-pack:before,.pin-bag:before{content:'';position:absolute;top:20px;left:7px;right:7px;height:7px;background:#102b2b;transform:scaleX(var(--p));transform-origin:left;z-index:2}
.is-complete .foil-pack:before,.is-complete .pin-bag:before{transform:scaleX(1)}
.tear-joined{display:flex;align-items:center;justify-content:space-between;position:absolute;top:15px;left:-7px;right:-7px;height:24px;padding:0 8px;background:linear-gradient(100deg,#e9ebe2,#b2b9b4 45%,#f5f3e7);color:#344a43;border-bottom:1px dashed #687e73;z-index:3;clip-path:polygon(calc(var(--p)*100%) 0,100% 0,100% 100%,calc(var(--p)*100%) 100%);transition:clip-path .25s}
.tear-joined i{font-style:normal;font-size:9px}.tear-joined b{font-size:21px}
.foil-tear{z-index:4;transform-origin:calc(var(--p)*100%) 50%;transform:translate(calc(var(--p)*5px),calc(var(--p)*-18px)) rotate(calc(var(--p)*-8deg));clip-path:polygon(0 0,calc(var(--p)*100%) 0,calc(var(--p)*100% - 3px) 42%,calc(var(--p)*100%) 72%,calc(var(--p)*100% - 1px) 100%,0 100%);transition:transform .25s,clip-path .25s}
.is-dragging .tear-joined,.is-dragging .foil-tear,.is-finishing .tear-joined,.is-finishing .foil-tear{transition:none}
.is-complete .tear-joined{clip-path:polygon(100% 0,100% 0,100% 100%,100% 100%)}
.is-complete .foil-tear{clip-path:none;animation:strip-release .34s ease-out both}
.table-card.is-complete .foil-pack,.table-chougu.is-complete .pin-bag{animation:opened-pack .65s ease-out both}
.ticket-body:after{content:'赏级已封存';position:absolute;top:50%;left:25px;font-size:13px;color:#725345;letter-spacing:.15em;z-index:0}
.ticket-body>b,.ticket-body>small{position:relative;z-index:1}.ticket-cover{z-index:3}
.bag-neck{transform-origin:50% 100%;transform:scaleX(calc(1 + var(--p)*.4)) scaleY(calc(1 - var(--p)*.16))}
.is-dragging .bag-neck{transition:none}
.table-lucky.is-complete .cloth-bag{animation:bag-open .65s ease-out both}
.knob-ring{position:relative}.knob-ring:after{content:'';position:absolute;top:-7px;left:calc(50% - 3px);width:6px;height:5px;border-radius:1px;background:#fff2c7;box-shadow:0 0 0 1px #7c4c29}
.tactile-control[data-detent="1"] .knob-ring:after,.tactile-control[data-detent="2"] .knob-ring:after,.tactile-control[data-detent="3"] .knob-ring:after{background:#ffe7a1;box-shadow:0 0 0 2px #f8ce7d66}
.tactile-control[data-tactile=turn]:focus-visible .knob-ring{outline:2px solid #f0cfa0;outline-offset:5px}
.machine-knob{position:relative}.machine-knob:after{content:'';position:absolute;width:6px;height:6px;border-radius:50%;background:#606e60;left:calc(50% - 3px);top:6px}
.capsule-inside{position:absolute;left:30%;right:30%;top:48%;height:55px;background:#f1e8cb;border:1px solid #b6b99c;border-radius:4px;font-size:9px;line-height:1.6;display:grid;place-content:center;color:#4b6559;transform:translateY(calc(var(--p)*-18px));z-index:-1}
.capsule-shell{isolation:isolate}.capsule-top,.capsule-bottom{z-index:1}.capsule-band{z-index:2}
.capsule-inside{z-index:0}.table-capsule .tactile-control{animation:capsule-land .34s cubic-bezier(.2,.7,.3,1) both}
.table-capsule .is-dragging,.table-capsule .is-finishing{animation:none}
.is-dragging .reward-front,.is-dragging .reward-back,.is-finishing .reward-front,.is-finishing .reward-back{transition:none}
@keyframes opened-pack{0%{transform:rotate(-4deg)}55%{transform:rotate(1deg) translateY(3px)}100%{transform:rotate(0) translateY(10px)}}
@keyframes strip-release{from{transform:translate(5px,-18px) rotate(-8deg);opacity:1}to{transform:translate(145px,-40px) rotate(-25deg);opacity:0}}
@keyframes bag-open{0%{transform:rotate(-3deg)}65%{transform:rotate(1deg) scaleX(1.03)}100%{transform:rotate(0)}}
@keyframes capsule-land{0%{transform:translateY(-20px) rotate(-8deg);opacity:.4}70%{transform:translateY(2px) rotate(2deg);opacity:1}100%{transform:none}}
@keyframes deck-settle{from{opacity:.7;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes card-ink-confirm{0%{filter:brightness(1.13)}100%{filter:brightness(1)}}
@media(max-width:760px){.flow-cards.card-deck{height:405px;padding:0;scroll-snap-type:none;overflow:visible}.card-deck .reward-item{left:calc(50% - 87px);width:174px}.card-deck .reward-item.is-revealed:not(.is-inspecting){top:310px;left:calc(50% - 114px + var(--revealed-index)*80px);width:70px}.card-deck .reward-item.is-revealed:not(.is-inspecting) .flow-reveal{width:190px;height:270px}.deck-counter{font-size:11px;margin-bottom:20px}.tactile-access>span{flex:1;min-width:145px}.table-gacha .tactile-access>span{min-width:170px}}
@media(max-width:360px){.card-deck .reward-item{width:166px;left:calc(50% - 83px)}.card-deck .reward-item.is-revealed:not(.is-inspecting) .flow-reveal{width:190px}.flow-dialog .tactile-table{padding-inline:10px}.deck-counter{gap:10px}}
@media(max-width:760px){.has-card-deck:not(.has-card-history) .card-deck{height:300px}.flow-dialog:has(.has-card-deck) .flow-actions{position:sticky;bottom:-20px;z-index:30;display:flex;flex-wrap:wrap;gap:8px;padding:12px 0 8px;background:var(--surface);border-top:1px solid var(--line)}.flow-dialog:has(.has-card-deck) .flow-actions .btn{font-size:12px;min-height:42px}.flow-dialog:has(.has-card-deck) .flow-actions .btn-primary{flex:1}}
@media(max-width:360px){.summary-object .capsule-shell{right:12px;bottom:-9px;width:75px;height:75px;transform:rotate(12deg)}.summary-object .capsule-top,.summary-object .capsule-bottom{height:38px}}
@media(prefers-reduced-motion:reduce){.tactile-table *{animation:none!important;transition:none!important}.reveal-table.table-card:not(.has-card-deck) .tactile-rewards{animation:none}}
