.login-modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.7);z-index:var(--z-modal-backdrop);align-items:center;justify-content:center;animation:fadeIn .3s ease}.login-modal.show{display:flex}.login-modal-content{background:#fff;border-radius:16px;padding:32px;width:90%;max-width:440px;box-shadow:0 20px 60px rgba(0,0,0,.3);animation:slideUp .4s cubic-bezier(.34,1.56,.64,1);position:relative;border:1px solid rgba(102,126,234,.1)}.login-modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.login-modal-header h2{margin:0;font-size:24px;color:#333}.login-modal-close{background:0 0;border:none;font-size:28px;color:#999;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s}.login-modal-close:hover{background:#f5f5f5;color:#333}.login-modal-body{display:flex;flex-direction:column;align-items:center}#wechatQrcodeContainer{width:100%;min-height:300px;display:flex;flex-direction:column;align-items:center;justify-content:center}.qrcode-wrapper{position:relative;display:flex;flex-direction:column;align-items:center;gap:16px}.qrcode-img{width:240px;height:240px;border:2px solid #e0e0e0;border-radius:12px;display:block;box-shadow:0 4px 12px rgba(0,0,0,.08);transition:all .3s ease;background:#fff;padding:12px}.qrcode-img:hover{transform:scale(1.02);box-shadow:0 6px 16px rgba(102,126,234,.15)}.qrcode-tips{text-align:center;padding:8px 16px;background:#f9fafb;border-radius:8px;min-height:40px;display:flex;align-items:center;justify-content:center}.qrcode-tips p{margin:0;color:#666;font-size:14px;line-height:1.5}.scanned-tips{color:#4caf50!important;font-weight:600;animation:pulse .5s ease}@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.qrcode-actions{margin-top:16px;text-align:center}.btn-refresh,.btn-retry{background:linear-gradient(135deg,#f5f5f5 0,#e8e8e8 100%);border:1px solid #d0d0d0;padding:10px 20px;border-radius:8px;cursor:pointer;font-size:14px;color:#555;transition:all .3s ease;font-weight:500;box-shadow:0 2px 4px rgba(0,0,0,.05)}.btn-refresh:hover,.btn-retry:hover{background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff;transform:translateY(-2px);box-shadow:0 4px 8px rgba(102,126,234,.3);border-color:transparent}.qrcode-expired-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(255,255,255,.97);display:flex;align-items:center;justify-content:center;border-radius:12px;backdrop-filter:blur(4px);animation:fadeIn .3s ease}.expired-content{text-align:center;padding:20px}.expired-content p{margin:0 0 16px 0;color:#555;font-size:16px;font-weight:600}.btn-refresh-overlay{background:linear-gradient(135deg,#667eea 0,#764ba2 100%);border:none;color:#fff;padding:12px 28px;border-radius:8px;cursor:pointer;font-size:15px;font-weight:600;transition:all .3s ease;box-shadow:0 4px 12px rgba(102,126,234,.3)}.btn-refresh-overlay:hover{transform:translateY(-2px);box-shadow:0 6px 16px rgba(102,126,234,.4)}.qrcode-loading{text-align:center;padding:60px 20px}.loading-spinner{width:50px;height:50px;border:4px solid #f0f0f0;border-top:4px solid #667eea;border-right:4px solid #764ba2;border-radius:50%;animation:spin .8s cubic-bezier(.68,-.55,.265,1.55) infinite;margin:0 auto 20px;box-shadow:0 4px 12px rgba(102,126,234,.2)}.qrcode-loading p{margin:0;color:#666;font-size:15px;font-weight:500;animation:fadeInOut 1.5s ease-in-out infinite}@keyframes fadeInOut{0%,100%{opacity:.6}50%{opacity:1}}.qrcode-error{text-align:center;padding:40px 20px;background:#fff5f5;border-radius:12px;border:1px solid #ffebee}.qrcode-error p{margin:0 0 20px 0;color:#d32f2f;font-size:15px;font-weight:500;line-height:1.6}.header-login-btn{background:linear-gradient(135deg,#667eea 0,#764ba2 100%);color:#fff;padding:8px 20px;border-radius:20px;text-decoration:none;font-size:14px;transition:transform .2s,box-shadow .2s;cursor:pointer;border:none;font-weight:500}.header-login-btn:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(102,126,234,.4)}.header-user-info{display:none;align-items:center;gap:10px;position:relative;cursor:pointer;padding:4px 8px;border-radius:8px;transition:background .2s ease}.header-user-info:hover{background:rgba(102,126,234,.05)}.user-avatar{width:36px;height:36px;border-radius:50%;border:2px solid #667eea;object-fit:cover;background:#fff;transition:transform .2s ease}.header-user-info:hover .user-avatar{transform:scale(1.05)}.user-nickname{font-size:14px;color:#333;max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}.user-dropdown{display:none;position:absolute;top:calc(100% + 2px);right:0;background:#fff;border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.15);min-width:160px;z-index:1000;opacity:0;transform:translateY(-10px);transition:opacity .2s ease,transform .2s ease;border:1px solid rgba(0,0,0,.05);overflow:hidden}.header-user-info::after{content:'';position:absolute;top:100%;left:0;right:0;height:10px}.header-user-info:hover .user-dropdown,.user-dropdown:hover{display:block;opacity:1;transform:translateY(0)}.user-dropdown::before{content:'';position:absolute;top:-6px;right:20px;width:12px;height:12px;background:#fff;transform:rotate(45deg);border-left:1px solid rgba(0,0,0,.05);border-top:1px solid rgba(0,0,0,.05)}.user-dropdown a,.user-dropdown button{display:block;width:100%;padding:12px 18px;color:#333;text-decoration:none;border:none;background:0 0;cursor:pointer;text-align:left;font-size:14px;transition:all .2s ease;border-bottom:1px solid rgba(0,0,0,.05);font-weight:500}.user-dropdown a:hover,.user-dropdown button:hover{background:rgba(102,126,234,.08);padding-left:22px}.user-dropdown a:last-child,.user-dropdown button:last-child{color:#f44336;border-bottom:none}.user-dropdown button:last-child:hover{background:rgba(244,67,54,.08)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes slideUp{from{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}@keyframes slideIn{from{transform:translateX(100%);opacity:0}to{transform:translateX(0);opacity:1}}@keyframes slideOut{from{transform:translateX(0);opacity:1}to{transform:translateX(100%);opacity:0}}@media (max-width:768px){.login-modal-content{width:95%;padding:20px}.qrcode-img{width:200px;height:200px}.user-nickname{display:none}.user-dropdown{min-width:140px}.user-dropdown a,.user-dropdown button{padding:10px 14px;font-size:13px}.user-avatar{width:32px;height:32px}}@media (max-width:1024px) and (min-width:769px){.user-nickname{max-width:80px}}