@charset "UTF-8";*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:#f5f7fa;color:#333;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}.app-container{min-height:100dvh;padding-bottom:calc(60px + env(safe-area-inset-bottom,0px))}.app-container>div:first-child{animation:appPageEnter .3s cubic-bezier(.25,.46,.45,.94)}@keyframes toastIn{0%{opacity:0;transform:translateY(-12px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes appPageEnter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}a{color:inherit;text-decoration:none}.lazy-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:12px}.lazy-loading-spinner{width:32px;height:32px;border:3px solid #e0e0e0;border-top-color:#667eea;border-radius:50%;animation:lazySpin .8s linear infinite}@keyframes lazySpin{to{transform:rotate(360deg)}}ul,ol{list-style:none}img{display:block;max-width:100%}input,textarea,select,button{font:inherit}.card{background:#fff;border-radius:12px;padding:16px;margin-bottom:12px;box-shadow:0 2px 8px #0000000f;transition:transform .2s ease,box-shadow .2s ease}.card:active{transform:scale(.985);box-shadow:0 1px 4px #00000014}.header-gradient{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;padding:50px 16px 20px}.btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border-radius:24px;padding:12px 24px;font-size:14px;border:none;cursor:pointer;text-align:center}[class*=-pull-refresh]{text-align:center;padding:12px 0;color:#667eea;font-size:13px}[class*=-load-more]{text-align:center;padding:16px 0;color:#667eea;font-size:14px;cursor:pointer;font-weight:500}[class*=-load-more]:active{opacity:.7}.page-transition{will-change:transform,opacity}.page-exit{opacity:0;transform:translate(30px)}.page-enter{animation:pageSlideIn .28s cubic-bezier(.25,.46,.45,.94) forwards}@keyframes pageSlideIn{0%{opacity:0;transform:translate(30px)}to{opacity:1;transform:translate(0)}}.page-back-enter{animation:pageSlideBack .28s cubic-bezier(.25,.46,.45,.94) forwards}@keyframes pageSlideBack{0%{opacity:0;transform:translate(-30px)}to{opacity:1;transform:translate(0)}}.tabbar{position:fixed;bottom:0;left:0;right:0;height:calc(60px + env(safe-area-inset-bottom,0px));padding-bottom:env(safe-area-inset-bottom,0px);background:#fff;display:flex;justify-content:space-around;align-items:center;border-top:1px solid #eee;z-index:1000}.tabbar-item{display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;padding:4px 12px}.tabbar-icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center}.tabbar-icon svg{fill:#999;transition:fill .2s}.tabbar-icon.active svg{fill:#667eea}.tabbar-text{font-size:10px;color:#999}.tabbar-item.active .tabbar-text{color:#667eea;font-weight:700}.pwa-update-prompt{position:fixed;bottom:80px;left:50%;transform:translate(-50%);z-index:1000;animation:pwa-slide-up .4s cubic-bezier(.16,1,.3,1)}@media(max-width:480px){.pwa-update-prompt{bottom:70px;left:16px;right:16px;transform:none}}@keyframes pwa-slide-up{0%{opacity:0;transform:translate(-50%) translateY(100px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.pwa-update-content{background:#fff;border-radius:16px;padding:20px 24px;box-shadow:0 12px 40px #00000026;display:flex;align-items:center;gap:16px;max-width:480px;border:1px solid #e0e0e0}@media(max-width:480px){.pwa-update-content{flex-direction:column;text-align:center;padding:16px;gap:12px}}.pwa-update-icon{font-size:32px;flex-shrink:0;animation:pwa-spin 2s linear infinite}@media(max-width:480px){.pwa-update-icon{font-size:28px}}@keyframes pwa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.pwa-update-text{flex:1}.pwa-update-text h4{font-size:16px;font-weight:700;color:#1a1a2e;margin-bottom:4px}@media(max-width:480px){.pwa-update-text h4{font-size:15px}}.pwa-update-text p{font-size:13px;color:#666;line-height:1.4}@media(max-width:480px){.pwa-update-text p{font-size:12px}}.pwa-update-actions{display:flex;gap:8px;flex-shrink:0}@media(max-width:480px){.pwa-update-actions{width:100%;justify-content:center}}.pwa-update-btn{padding:10px 20px;border:none;border-radius:10px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease}@media(max-width:480px){.pwa-update-btn{flex:1;padding:12px 16px;font-size:13px}}.pwa-update-btn.primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.pwa-update-btn.primary:hover{transform:translateY(-2px);box-shadow:0 6px 16px #667eea66}.pwa-update-btn.primary:active{transform:translateY(0)}.pwa-update-btn.secondary{background:#f5f5f5;color:#666}.pwa-update-btn.secondary:hover{background:#eee}.pwa-update-btn.secondary:active{background:#e0e0e0}.page-not-found{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#f5f7fa;padding:40px 16px}.not-found-icon{font-size:64px;font-weight:800;background:linear-gradient(135deg,#667eea,#764ba2);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;margin-bottom:16px}.not-found-title{font-size:20px;font-weight:600;color:#333;margin-bottom:8px}.not-found-desc{font-size:14px;color:#999;margin-bottom:32px;text-align:center}.not-found-btn{padding:12px 40px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:24px;font-size:15px;font-weight:500;cursor:pointer;box-shadow:0 4px 12px #667eea4d}.not-found-btn:active{opacity:.8}.nb-bell{position:fixed;top:38px;right:14px;width:46px;height:46px;border-radius:50%;background:#fff;box-shadow:0 3px 14px #0000001f;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:20;transition:transform .18s,box-shadow .18s;animation:nbBounceIn .35s cubic-bezier(.175,.885,.32,1.275)}.nb-bell svg{display:block;transition:stroke .15s}.nb-bell:hover{transform:scale(1.1);box-shadow:0 5px 18px #667eea4d}.nb-bell:hover svg{stroke:#764ba2}.nb-bell:active{transform:scale(.93)}@keyframes nbBounceIn{0%{opacity:0;transform:scale(.3)}to{opacity:1;transform:scale(1)}}.nb-badge{position:absolute;top:1px;right:1px;min-width:16px;height:16px;background:#e53935;color:#fff;font-size:10px;font-weight:700;border-radius:8px;display:flex;align-items:center;justify-content:center;padding:0 4px;border:2px solid #fff;z-index:1;animation:nbBadgePop .3s cubic-bezier(.175,.885,.32,1.275)}@keyframes nbBadgePop{0%{transform:scale(0)}to{transform:scale(1)}}.login-page{min-height:100dvh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#667eea,#764ba2);padding:16px}.login-container{width:100%;max-width:400px;background:#fff;border-radius:20px;padding:40px 32px;box-shadow:0 20px 60px #00000026}.login-header{text-align:center;margin-bottom:32px}.login-header .login-logo{margin-bottom:16px}.login-header .login-logo svg{filter:drop-shadow(0 4px 8px rgba(102,126,234,.3))}.login-header h1{font-size:24px;font-weight:700;color:#1a1a2e;margin:8px 0 4px}.login-header p{font-size:14px;color:#999;margin:0}.login-form .form-group{margin-bottom:20px}.login-form .form-group label{display:block;font-size:14px;font-weight:500;color:#333;margin-bottom:8px}.login-form .phone-input-wrap,.login-form .code-input-wrap{display:flex;align-items:center;border:1.5px solid #e0e0e0;border-radius:12px;padding:0 14px;height:48px;transition:border-color .2s}.login-form .phone-input-wrap:focus-within,.login-form .code-input-wrap:focus-within{border-color:#667eea}.login-form .phone-input-wrap input,.login-form .code-input-wrap input{flex:1;border:none;outline:none;font-size:16px;color:#333;background:transparent}.login-form .phone-input-wrap input::placeholder,.login-form .code-input-wrap input::placeholder{color:#bbb}.login-form .phone-input-wrap input[type=number],.login-form .code-input-wrap input[type=number]{-moz-appearance:textfield}.login-form .phone-input-wrap input[type=number]::-webkit-inner-spin-button,.login-form .phone-input-wrap input[type=number]::-webkit-outer-spin-button,.login-form .code-input-wrap input[type=number]::-webkit-inner-spin-button,.login-form .code-input-wrap input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.login-form .code-input-wrap{padding-right:8px}.login-form .code-input-wrap .send-code-btn{flex-shrink:0;margin-left:8px;padding:6px 12px;border:none;border-radius:8px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;transition:opacity .2s}.login-form .code-input-wrap .send-code-btn:disabled{opacity:.5;cursor:not-allowed}.login-button{width:100%;height:48px;border:none;border-radius:12px;font-size:16px;font-weight:600;cursor:pointer;transition:opacity .2s,transform .1s}.login-button.primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;margin-top:8px}.login-button.primary:disabled{opacity:.6;cursor:not-allowed}.login-button.primary:active:not(:disabled){transform:scale(.98)}.login-button.wechat{background:#07c160;color:#fff;margin-top:8px}.login-button.wechat:disabled{opacity:.6;cursor:not-allowed}.login-button.wechat:active:not(:disabled){transform:scale(.98)}.login-button.dev{background:#eee;color:#666;margin-top:12px}.login-error{margin-top:16px;padding:10px 14px;background:#fff2f0;border-radius:8px;color:#ff4d4f;font-size:13px;text-align:center}.global-search-overlay{position:fixed;inset:0;background:#00000073;z-index:9999;display:flex;flex-direction:column;animation:fadeIn .15s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.global-search-panel{background:#fff;max-height:80dvh;display:flex;flex-direction:column;border-radius:0 0 16px 16px;animation:slideDown .2s ease-out}@keyframes slideDown{0%{transform:translateY(-16px);opacity:0}to{transform:translateY(0);opacity:1}}.search-header{display:flex;align-items:center;gap:8px;padding:12px 16px;border-bottom:1px solid #f0f0f0;background:#fff}.search-input-wrap{flex:1;display:flex;align-items:center;gap:8px;background:#f5f7fa;border-radius:20px;padding:0 12px;height:40px}.search-icon{flex-shrink:0}.search-input{flex:1;border:none;background:transparent;font-size:15px;color:#333;outline:none}.search-input::placeholder{color:#bbb}.search-clear{color:#bbb;font-size:16px;cursor:pointer;padding:2px 4px}.search-clear:hover{color:#666}.search-cancel{font-size:14px;color:#667eea;padding:8px 4px;cursor:pointer;flex-shrink:0}.search-tips{padding:16px}.tips-title{font-size:12px;color:#999;margin-bottom:10px}.tips-grid{display:flex;gap:8px}.tip-chip{display:flex;align-items:center;gap:4px;background:linear-gradient(135deg,#667eea18,#764ba218);border:1px solid rgba(102,126,234,.1882352941);border-radius:16px;padding:6px 14px;font-size:13px;color:#667eea;cursor:pointer;transition:all .2s}.tip-chip:hover{background:linear-gradient(135deg,#667eea30,#764ba230);transform:translateY(-1px)}.search-tabs{display:flex;padding:0 16px;gap:4px;border-bottom:1px solid #f5f5f5}.search-tab{display:flex;align-items:center;gap:5px;font-size:13px;color:#666;padding:10px 12px;cursor:pointer;border-bottom:2px solid transparent;transition:all .15s}.search-tab.active{color:#667eea;font-weight:600;border-bottom-color:#667eea}.tab-count{font-size:11px;background:#667eea;color:#fff;border-radius:8px;padding:0 5px;min-width:16px;text-align:center;line-height:16px}.search-results{flex:1;overflow-y:auto;padding:4px 0}.search-item{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;transition:background .15s;border-bottom:1px solid #f8f8f8}.search-item:hover{background:#f9f9fb}.search-item:last-child{border-bottom:none}.item-icon{flex-shrink:0}.item-type{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;font-size:12px;font-weight:600;border-radius:8px}.item-body{flex:1;min-width:0}.item-title{font-size:15px;color:#333;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.item-sub{font-size:12px;color:#999;margin-top:2px}.item-arrow{color:#ccc;font-size:18px;flex-shrink:0}.search-highlight{background:#ffe566;color:#d48806;border-radius:2px;padding:0 1px}.search-empty{display:flex;flex-direction:column;align-items:center;padding:40px 0}.search-empty .empty-icon{font-size:40px;margin-bottom:12px}.search-empty .empty-text{font-size:14px;color:#999}.page-index{min-height:100dvh;background:#f5f7fa;padding-bottom:calc(70px + env(safe-area-inset-bottom,0px));overflow-x:hidden}.page-index .header-gradient{position:relative;background:url(../banner-bg-v3.jpg) no-repeat center center/cover;background-color:#1a1a2e;padding:0;min-height:0;height:clamp(160px,28vw,220px);border-radius:0 0 24px 24px;overflow:hidden}.page-index .header-title{font-size:32px;font-weight:700;color:#fff}.page-index .header-subtitle{font-size:16px;color:#fffc;margin-bottom:8px}.page-index .header-right{display:flex;align-items:center;gap:8px}.page-index .header-search-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:#ffffff2e;border:1px solid rgba(255,255,255,.3);border-radius:50%;cursor:pointer;transition:background .2s,transform .2s}.page-index .header-search-btn:hover{background:#ffffff47;transform:scale(1.05)}.page-index .header-search-btn svg{flex-shrink:0}.page-index .header-vip-btn{position:absolute;bottom:20px;right:16px;background:linear-gradient(135deg,#f5af19,#f12711);padding:7px 16px;border-radius:20px;color:#fff;font-size:12px;font-weight:700;cursor:pointer;box-shadow:0 2px 8px #f127114d;transition:transform .15s}.page-index .header-vip-btn:active{transform:scale(.95)}.page-index .container{padding:16px}.page-index .card{background:#fff;border-radius:16px;padding:16px;margin-bottom:14px;box-shadow:0 2px 12px #0000000f}.page-index .stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;padding:8px 0}.page-index .stat-item{text-align:center;cursor:pointer;padding:8px 4px;border-radius:10px;transition:background .15s}.page-index .stat-item:active{background:#f5f7fa}.page-index .stat-value{font-size:22px;font-weight:700;color:#667eea;display:block}.page-index .stat-label{font-size:11px;color:#999;display:block;margin-top:4px}.page-index .card-title{font-size:16px;font-weight:700;color:#333;margin-bottom:14px}.page-index .grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.page-index .grid-item{background:#fff;padding:18px 14px;border-radius:14px;text-align:center;cursor:pointer;box-shadow:0 2px 8px #0000000d;border:1px solid #f0f0f0;transition:transform .15s,box-shadow .15s}.page-index .grid-item:active{transform:scale(.97);box-shadow:0 1px 4px #00000014}.page-index .grid-item-icon{width:52px;height:52px;margin:0 auto 10px;border-radius:14px;display:flex;align-items:center;justify-content:center}.page-index .grid-item-text{font-size:13px;color:#555;display:block;font-weight:500}.page-index .schedule-item{display:flex;align-items:center;padding:12px 0;border-bottom:1px solid #f5f5f5}.page-index .schedule-item:last-child{border-bottom:none}.page-index .schedule-time{font-size:14px;color:#667eea;font-weight:700;width:52px;flex-shrink:0}.page-index .schedule-title{font-size:14px;color:#333;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page-index .schedule-badge{font-size:11px;padding:3px 8px;border-radius:4px;font-weight:500;margin-left:8px;flex-shrink:0}.page-index .schedule-badge.pending{background:#fff7e6;color:#fa8c16}.page-index .schedule-badge.done{background:#f6ffed;color:#52c41a}.page-index .schedule-empty{text-align:center;padding:20px;color:#999;font-size:14px}.page-index .chart-row{display:flex;align-items:center;gap:16px;margin-top:8px}.page-index .donut-chart{flex-shrink:0}.page-index .chart-legend{flex:1;display:flex;flex-direction:column;gap:6px}.page-index .legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:#666}.page-index .legend-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.page-index .trend-chart{margin:8px 0 4px}.page-index .trend-legend{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#888;padding-top:4px;border-top:1px solid #f0f0f0}.page-index .trend-label{color:#555}.page-index .trend-value{color:#667eea;font-size:12px}.page-index .trend-value strong{font-size:16px}.pull-refresh-indicator{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 0 4px;color:#999;font-size:13px}.pull-refresh-spinner{width:18px;height:18px;border:2px solid #e0e0e0;border-top-color:#667eea;border-radius:50%;animation:spin .6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
