.qq-music-login[data-v-0b590dd3]{display:flex;justify-content:center;align-items:center;min-height:100vh;background-color:#f5f5f5}.login-container[data-v-0b590dd3]{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,.1);text-align:center;max-width:400px;width:100%}h2[data-v-0b590dd3]{color:#333;margin-bottom:1.5rem}.qr-container[data-v-0b590dd3]{margin:1rem 0}.loading[data-v-0b590dd3],.qr-container img[data-v-0b590dd3]{width:200px;height:200px;border:1px solid #eee}.loading[data-v-0b590dd3]{display:flex;align-items:center;justify-content:center;background:#f5f5f5;margin:0 auto}.status-message[data-v-0b590dd3]{margin-top:1rem;padding:.5rem;border-radius:4px}.status-scan[data-v-0b590dd3]{color:#666;background:#f5f5f5}.status-confirm[data-v-0b590dd3]{color:#1890ff;background:#e6f7ff}.status-done[data-v-0b590dd3]{color:#52c41a;background:#f6ffed}.status-timeout[data-v-0b590dd3]{color:#faad14;background:#fffbe6}.status-refuse[data-v-0b590dd3]{color:#ff4d4f;background:#fff2f0}.status-other[data-v-0b590dd3]{color:#666;background:#f5f5f5}.login-success[data-v-0b590dd3]{margin:1rem 0}.success-icon[data-v-0b590dd3]{font-size:48px;color:#52c41a;margin-bottom:1rem}.user-info[data-v-0b590dd3]{font-size:1.1rem;color:#333;margin:.5rem 0}.expire-info[data-v-0b590dd3]{color:#666;font-size:.9rem}.actions[data-v-0b590dd3]{margin-top:1.5rem}button[data-v-0b590dd3]{padding:.5rem 1.5rem;border:none;border-radius:4px;cursor:pointer;font-size:1rem;transition:all .3s}.refresh-btn[data-v-0b590dd3]{background:#1890ff;color:#fff}.refresh-btn[data-v-0b590dd3]:hover{background:#40a9ff}.refresh-btn[data-v-0b590dd3]:disabled{background:#d9d9d9;cursor:not-allowed}.logout-btn[data-v-0b590dd3]{background:#ff4d4f;color:#fff}.logout-btn[data-v-0b590dd3]:hover{background:#ff7875}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;min-height:5vh;display:flex;flex-direction:column}:root{--bottom-nav-height:56px;--primary-color:#1976d2;--error-color:#f44336}.spring-festival .main-content{background:linear-gradient(180deg,#fffbf5,#fff5eb 50%,#fffbf5);min-height:100%}.spring-festival .v-app-bar{background:linear-gradient(90deg,#c41e3a,#a01830)!important}.spring-festival .v-footer{background:linear-gradient(90deg,#a01830,#c41e3a)!important}.spring-festival .bottom-nav{background:linear-gradient(0deg,#c41e3a,#a01830)!important}.spring-festival #app{color:#2c3e50}.main-with-festival{position:relative}.festival-lanterns{position:absolute;top:8px;left:0;right:0;display:flex;justify-content:center;gap:24px;z-index:1;pointer-events:none}.lantern{display:inline-block;position:relative;width:32px;height:44px;border-radius:50% 50% 48% 48%;background:linear-gradient(145deg,#e63946,#c41e3a 40%,#8b1538);box-shadow:0 2px 8px rgba(139,21,56,.4),inset -4px -4px 12px rgba(0,0,0,.2),inset 4px 2px 12px rgba(255,220,180,.35);border:1px solid rgba(212,175,55,.5);transform-origin:top center;animation:lantern-sway 2.5s ease-in-out infinite,lantern-glow 2s ease-in-out infinite}.lantern:first-child{animation-delay:0s,0s}.lantern:nth-child(2){animation-delay:.2s,.4s}.lantern:nth-child(3){animation-delay:.4s,.8s}.lantern:nth-child(4){animation-delay:.2s,.4s}.lantern:nth-child(5){animation-delay:0s,0s}.lantern:before{top:-6px;width:10px;height:6px;background:#d4af37;border-radius:2px}.lantern:after,.lantern:before{content:"";position:absolute;left:50%;transform:translateX(-50%)}.lantern:after{bottom:-8px;width:2px;height:8px;background:linear-gradient(180deg,#d4af37,#8b7355)}@keyframes lantern-sway{0%,to{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}@keyframes lantern-glow{0%,to{box-shadow:0 2px 8px rgba(139,21,56,.4),inset -4px -4px 12px rgba(0,0,0,.2),inset 4px 2px 12px rgba(255,220,180,.35),0 0 12px rgba(212,175,55,.2)}50%{box-shadow:0 2px 12px rgba(139,21,56,.5),inset -4px -4px 12px rgba(0,0,0,.2),inset 4px 2px 12px rgba(255,220,180,.4),0 0 20px rgba(212,175,55,.45)}}.fu-char{position:absolute;font-size:42px;font-weight:700;color:#c41e3a;text-shadow:1px 1px 0 #d4af37,2px 2px 4px rgba(0,0,0,.2);opacity:.9;pointer-events:none;z-index:1;font-family:KaiTi,STKaiti,楷体,serif}.fu-tl{top:56px;left:12px;animation:fu-float 4s ease-in-out infinite,fu-glow 2.5s ease-in-out infinite}.fu-tr{top:56px;right:12px;animation:fu-float 4s ease-in-out .5s infinite,fu-glow 2.5s ease-in-out .3s infinite}.fu-bl{bottom:72px;left:12px;animation:fu-float-bl 4s ease-in-out .3s infinite,fu-glow 2.5s ease-in-out .6s infinite}.fu-br{bottom:72px;right:12px;animation:fu-float-br 4s ease-in-out .7s infinite,fu-glow 2.5s ease-in-out .2s infinite}@keyframes fu-float{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}@keyframes fu-float-bl{0%,to{transform:translateY(0) rotate(-8deg)}50%{transform:translateY(-10px) rotate(-8deg)}}@keyframes fu-float-br{0%,to{transform:translateY(0) rotate(180deg)}50%{transform:translateY(-10px) rotate(180deg)}}@keyframes fu-glow{0%,to{text-shadow:1px 1px 0 #d4af37,2px 2px 4px rgba(0,0,0,.2),0 0 8px rgba(212,175,55,.3)}50%{text-shadow:1px 1px 0 #d4af37,2px 2px 6px rgba(0,0,0,.25),0 0 16px rgba(212,175,55,.6),0 0 24px rgba(196,30,58,.25)}}@media (max-width:600px){.fu-char{font-size:28px}.fu-tl,.fu-tr{top:48px}.festival-lanterns{gap:12px;top:4px}.lantern{width:24px;height:34px}}.app-footer .footer-inner{display:flex;flex-direction:column;align-items:center;gap:4px}.app-footer .footer-blessing{font-size:1rem;letter-spacing:.05em}.main-content{padding-bottom:var(--bottom-nav-height)!important;flex:1}.component-wrapper{min-height:100%;width:100%}.bottom-nav{height:var(--bottom-nav-height)!important;z-index:2}.bottom-nav .nav-label{font-size:11px;line-height:1.2;margin-top:2px}.bottom-nav .v-btn{min-width:60px!important;padding:4px 8px!important}.bottom-nav .v-btn .v-icon{font-size:20px!important}@media (max-width:360px){.bottom-nav .nav-label{font-size:10px}.bottom-nav .v-btn{min-width:50px!important;padding:4px 4px!important}.bottom-nav .v-btn .v-icon{font-size:18px!important}}.fade-enter-active,.fade-leave-active{transition:opacity .3s ease,transform .3s ease}.fade-enter-from{opacity:0;transform:translateX(20px)}.fade-leave-to{opacity:0;transform:translateX(-20px)}