:root{--primary:#4F6EF7;--primary-light:#EEF1FE;--success:#22C55E;--success-light:#F0FDF4;--danger:#EF4444;--danger-light:#FEF2F2;--warning:#F59E0B;--warning-light:#FFFBEB;--bg:#F0F2F8;--card:#FFFFFF;--text:#1E293B;--text2:#64748B;--text3:#94A3B8;--border:#E2E8F0;--r:12px;--rl:16px;--rx:24px}[data-theme=dark]{--bg:#0F172A;--card:#1E293B;--text:#F1F5F9;--text2:#94A3B8;--text3:#64748B;--border:#334155}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;font-family:-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;overflow:hidden}#app{width:100%;max-width:450px;height:100%;margin:0 auto;display:flex;flex-direction:column;background:var(--bg);position:relative;overflow:hidden}.page-content{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:72px}.page-content::-webkit-scrollbar{display:none}.nav-header{display:flex;align-items:center;padding:12px 16px;background:var(--card);position:sticky;top:0;z-index:100;border-bottom:1px solid var(--border)}.nav-header .back-btn{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;border:none;background:var(--bg);color:var(--text);font-size:18px}.nav-header .title{flex:1;text-align:center;font-size:17px;font-weight:700;margin-right:36px}.tab-bar{position:absolute;bottom:0;left:0;right:0;height:60px;display:flex;align-items:center;background:var(--card);border-top:1px solid var(--border);z-index:200;padding-bottom:env(safe-area-inset-bottom)}.tab-item{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer;text-decoration:none;color:var(--text3);font-size:10px;position:relative}.tab-item.active{color:var(--primary)}.tab-item.active::before{content:'';position:absolute;top:-1px;width:24px;height:3px;background:var(--primary);border-radius:0 0 3px 3px}.tab-item .tab-icon{font-size:22px;line-height:1}.card{background:var(--card);border-radius:var(--rl);padding:16px;margin:10px 16px;box-shadow:0 1px 3px rgba(0,0,0,.04)}.btn{display:inline-flex;align-items:center;justify-content:center;padding:10px 20px;border-radius:var(--r);font-size:14px;font-weight:600;border:none;cursor:pointer;gap:6px}.btn:active{transform:scale(.97);opacity:.85}.btn-primary{background:var(--primary);color:#fff}.btn-success{background:var(--success);color:#fff}.btn-danger{background:var(--danger);color:#fff}.btn-gray{background:var(--bg);color:var(--text2)}.btn-ghost{background:transparent;border:1.5px solid var(--border);color:var(--text)}.btn-block{width:100%}.btn-lg{padding:14px 24px;font-size:16px;border-radius:var(--rl)}.tag{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:11px;font-weight:600}.tag-primary{background:var(--primary-light);color:var(--primary)}.tag-success{background:var(--success-light);color:var(--success)}.tag-danger{background:var(--danger-light);color:var(--danger)}.tag-warning{background:var(--warning-light);color:var(--warning)}.tag-gray{background:var(--bg);color:var(--text3)}.input,.textarea{width:100%;padding:12px 16px;border:1.5px solid var(--border);border-radius:var(--r);font-size:15px;color:var(--text);background:var(--card);outline:none;font-family:inherit}.input:focus,.textarea:focus{border-color:var(--primary)}.textarea{min-height:100px;resize:vertical}.filter-tabs{display:flex;gap:8px;overflow-x:auto;padding:12px 16px;-webkit-overflow-scrolling:touch}.filter-tabs::-webkit-scrollbar{display:none}.filter-tab{padding:7px 16px;border-radius:20px;font-size:13px;white-space:nowrap;font-weight:500;border:1.5px solid var(--border);background:var(--card);color:var(--text2);cursor:pointer}.filter-tab.active{background:var(--primary);color:#fff;border-color:var(--primary)}.swiper-container{position:relative;overflow:hidden;border-radius:var(--rl);margin:12px 16px;box-shadow:0 2px 8px rgba(0,0,0,.06)}.swiper-wrapper{display:flex;transition:transform .4s ease}.swiper-slide{min-width:100%}.swiper-slide img{width:100%;height:150px;object-fit:cover;display:block}.swiper-slide .slide-caption{position:absolute;bottom:0;left:0;right:0;padding:20px 16px 12px;background:linear-gradient(transparent,rgba(0,0,0,.6));color:#fff;font-size:14px;font-weight:600}.swiper-dots{position:absolute;bottom:8px;right:12px;display:flex;gap:5px}.swiper-dot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.4)}.swiper-dot.active{background:#fff;width:18px;border-radius:3px}.grid-menu{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:4px 0}.grid-item{display:flex;flex-direction:column;align-items:center;gap:8px;cursor:pointer}.grid-item:active{opacity:.6}.grid-icon{width:48px;height:48px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:22px}.grid-label{font-size:11px;color:var(--text2);font-weight:500}.checkin-btn-wrap{display:flex;flex-direction:column;align-items:center;padding:20px 0}.checkin-btn{width:110px;height:110px;border-radius:50%;background:linear-gradient(135deg,var(--primary),#818CF8);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;border:none;cursor:pointer;font-size:16px;font-weight:700;box-shadow:0 8px 25px rgba(79,110,247,.35);position:relative}.checkin-btn:active{transform:scale(.93)}.checkin-btn .ripple{position:absolute;inset:-6px;border-radius:50%;border:2px solid rgba(79,110,247,.3);animation:ripple 2.5s infinite}@keyframes ripple{0%{transform:scale(1);opacity:.5}100%{transform:scale(1.35);opacity:0}}.avatar{width:44px;height:44px;border-radius:50%;overflow:hidden;flex-shrink:0}.avatar img{width:100%;height:100%;object-fit:cover}.avatar-lg{width:60px;height:60px}.list-item{display:flex;align-items:center;justify-content:space-between;padding:14px 0;cursor:pointer}.list-item+.list-item{border-top:1px solid var(--border)}.list-item-left{display:flex;align-items:center;gap:12px}.list-item-icon{font-size:20px}.list-item-label{font-size:15px;font-weight:500}.stat-cards{display:flex;gap:10px}.stat-card{flex:1;text-align:center;padding:16px 8px;border-radius:var(--rl);background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.04)}.stat-value{font-size:26px;font-weight:800;color:var(--text)}.stat-label{font-size:11px;color:var(--text3);margin-top:4px;font-weight:500}.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%);padding:12px 24px;border-radius:var(--r);font-size:14px;font-weight:600;color:#fff;z-index:9999;box-shadow:0 4px 12px rgba(0,0,0,.15)}.toast-success{background:var(--success)}.toast-error{background:var(--danger)}.toast-info{background:var(--primary)}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);display:flex;align-items:flex-end;justify-content:center;z-index:1000}.modal-content{background:var(--card);border-radius:var(--rx) var(--rx) 0 0;width:100%;max-width:450px;max-height:80vh;overflow-y:auto;padding:24px;animation:slideUp .3s ease}@keyframes slideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--text3)}.upload-grid{display:flex;gap:10px;flex-wrap:wrap}.upload-item{width:80px;height:80px;border-radius:8px;overflow:hidden;position:relative}.upload-item img{width:100%;height:100%;object-fit:cover}.upload-item .remove-btn{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;cursor:pointer;border:none}.upload-add{width:80px;height:80px;border:2px dashed var(--border);border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;color:var(--text3);font-size:10px}.upload-add:hover{border-color:var(--primary);color:var(--primary)}.progress-bar{height:8px;background:var(--bg);border-radius:4px;overflow:hidden}.progress-fill{height:100%;border-radius:4px;background:var(--primary)}.toggle{width:48px;height:26px;border-radius:13px;background:var(--border);cursor:pointer;position:relative;flex-shrink:0}.toggle.on{background:var(--primary)}.toggle::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:all .2s}.toggle.on::after{left:25px}@media(min-width:451px){#app{border-left:1px solid var(--border);border-right:1px solid var(--border)}}
