:root{
  --blue:#1E5FD9; --blue-dark:#143E8F; --blue-light:#5B8FF9; --blue-bg:#EAF1FF;
  --ink:#1a2233; --gray:#8a93a6; --line:#eceff5; --red:#e23c3c; --green:#19a974;
  --gold:#E0A93B;
}
*{box-sizing:border-box; -webkit-tap-highlight-color:transparent;}
html,body{margin:0; padding:0; background:#f3f5f9; color:var(--ink);
  font-family:"PingFang SC","Microsoft YaHei","Hiragino Sans GB",sans-serif;
  font-size:15px; line-height:1.6;}
a{color:inherit; text-decoration:none;}
img{display:block; max-width:100%;}
.app{max-width:480px; margin:0 auto; min-height:100vh; background:#f3f5f9;
  display:flex; flex-direction:column; position:relative; box-shadow:0 0 24px rgba(0,0,0,.05);}
/* 顶部栏 */
.topbar{height:50px; background:linear-gradient(120deg,var(--blue),var(--blue-dark)); color:#fff;
  display:flex; align-items:center; padding:0 14px; position:sticky; top:0; z-index:20;
  font-size:17px; font-weight:600; letter-spacing:1px;}
.topbar .back{font-size:22px; margin-right:8px; cursor:pointer; width:28px;}
.topbar .title{flex:1; text-align:center;}
.topbar .title img{height:26px; vertical-align:middle;}
.topbar .right{font-size:14px; font-weight:400; cursor:pointer;}
/* 内容区 */
.content{flex:1; overflow-y:auto; padding:14px; padding-bottom:76px;}
/* 底部 tab */
.tabbar{position:fixed; bottom:0; left:50%; transform:translateX(-50%); width:100%; max-width:480px;
  height:60px; background:#fff; border-top:1px solid var(--line); display:flex; z-index:30;}
.tabbar a{flex:1; display:flex; flex-direction:column; align-items:center; justify-content:center;
  color:var(--gray); font-size:12px; gap:3px;}
.tabbar a.active{color:var(--blue);}
.tabbar a .ic{font-size:20px;}
/* 卡片 */
.card{background:#fff; border-radius:14px; padding:16px; margin-bottom:14px; box-shadow:0 2px 12px rgba(30,95,217,.05);}
.card h3{margin:0 0 10px; font-size:16px; color:var(--blue-dark); display:flex; align-items:center; gap:8px;}
/* 按钮 */
.btn{display:block; width:100%; border:none; border-radius:12px; padding:13px; font-size:16px;
  font-weight:600; color:#fff; background:linear-gradient(120deg,var(--blue),var(--blue-light));
  cursor:pointer; transition:.2s; letter-spacing:1px;}
.btn:active{transform:scale(.98); opacity:.92;}
.btn.ghost{background:#fff; color:var(--blue); border:1.5px solid var(--blue);}
.btn.sm{width:auto; display:inline-block; padding:8px 16px; font-size:14px; border-radius:9px;}
.btn:disabled{opacity:.5; cursor:not-allowed;}
/* 表单 */
.field{margin-bottom:14px;}
.field label{display:block; font-size:13px; color:var(--gray); margin-bottom:6px;}
.field input,.field select,.field textarea{width:100%; border:1.5px solid var(--line); border-radius:10px;
  padding:12px; font-size:15px; outline:none; transition:.2s; background:#fff; font-family:inherit;}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--blue); background:var(--blue-bg);}
.field textarea{resize:vertical; min-height:80px;}
.codebox{display:flex; gap:10px;}
.codebox input{flex:1;}
.codebox .btn{width:auto; padding:12px 14px; font-size:14px; white-space:nowrap;}
.mockcode{font-size:12px; color:var(--red); margin-top:6px;}
/* 等级徽章 */
.level-badge{display:inline-block; padding:3px 12px; border-radius:20px; font-size:12px; font-weight:600;}
.level-0{background:#eef1f6; color:#7a8499;}
.level-1{background:var(--blue-bg); color:var(--blue);}
.level-2{background:linear-gradient(120deg,var(--gold),#f3c66b); color:#fff;}
/* 进度条 */
.progress{height:10px; background:#eef1f6; border-radius:20px; overflow:hidden; margin:10px 0;}
.progress > i{display:block; height:100%; background:linear-gradient(90deg,var(--blue),var(--blue-light)); border-radius:20px; transition:width .6s;}
/* 广告轮播 */
.swiper{position:relative; border-radius:14px; overflow:hidden; margin-bottom:14px; height:150px; background:#dfe7f5;}
.swiper .slide{position:absolute; inset:0; opacity:0; transition:opacity .6s; background-size:cover; background-position:center;}
.swiper .slide.on{opacity:1;}
.swiper .cap{position:absolute; bottom:0; left:0; right:0; padding:20px 14px 10px; color:#fff;
  font-size:15px; font-weight:600; background:linear-gradient(transparent,rgba(0,0,0,.55));}
.swiper .dots{position:absolute; bottom:8px; right:12px; display:flex; gap:5px;}
.swiper .dots i{width:7px; height:7px; border-radius:50%; background:rgba(255,255,255,.5);}
.swiper .dots i.on{background:#fff;}
/* 公告 */
.notice{background:#fff8ec; border:1px solid #ffe2b0; color:#9a6b12; border-radius:10px;
  padding:10px 14px; font-size:13px; margin-bottom:14px; display:flex; gap:8px; align-items:flex-start;}
.notice .nt{white-space:nowrap; font-weight:600; color:#c98a18;}
/* 统计 */
.stats{display:flex; gap:10px;}
.stats .st{flex:1; background:linear-gradient(135deg,var(--blue),var(--blue-dark)); color:#fff;
  border-radius:14px; padding:14px 10px; text-align:center;}
.stats .st b{display:block; font-size:24px; font-weight:700;}
.stats .st span{font-size:12px; opacity:.9;}
/* 任务列表 */
.task{border:1px solid var(--line); border-radius:12px; padding:14px; margin-bottom:10px;
  display:flex; align-items:center; gap:12px;}
.task .tinfo{flex:1;}
.task .tname{font-weight:600; font-size:15px;}
.task .tdesc{font-size:12px; color:var(--gray); margin-top:3px;}
.task .tright{text-align:right;}
.task .tarrow{color:var(--blue); font-size:18px;}
.task .done{color:var(--green); font-size:13px; font-weight:600;}
/* 列表项 */
.item{border:1px solid var(--line); border-radius:12px; padding:13px; margin-bottom:10px; background:#fff;}
.item .row{display:flex; justify-content:space-between; align-items:center;}
.item .tag{font-size:12px; padding:2px 9px; border-radius:8px; background:var(--blue-bg); color:var(--blue);}
.item .tag.need{background:#fdeced; color:var(--red);}
.item .tag.ok{background:#e8f7ef; color:var(--green);}
.item .reason{font-size:12px; color:var(--red); margin-top:6px;}
/* 弹窗 */
.modal-mask{position:fixed; inset:0; background:rgba(20,30,50,.55); z-index:50; display:flex;
  align-items:center; justify-content:center; padding:24px;}
.modal{background:#fff; border-radius:16px; padding:22px; width:100%; max-width:340px; text-align:center;}
.modal h3{margin:0 0 8px; color:var(--blue-dark); font-size:18px;}
.modal p{font-size:14px; color:var(--gray); margin:0 0 16px;}
/* 升级引导浮标 */
.levelup{position:fixed; right:14px; bottom:74px; z-index:40; background:linear-gradient(120deg,var(--gold),#f0c264);
  color:#fff; border-radius:30px; padding:9px 15px; font-size:13px; font-weight:600; box-shadow:0 6px 18px rgba(224,169,59,.5);
  display:flex; align-items:center; gap:6px; cursor:pointer; animation:pulse 2s infinite;}
@keyframes pulse{0%,100%{transform:scale(1);}50%{transform:scale(1.06);}}
/* toast */
.toast{position:fixed; left:50%; top:42%; transform:translate(-50%,-50%); background:rgba(20,30,50,.9);
  color:#fff; padding:12px 22px; border-radius:10px; font-size:14px; z-index:99; max-width:80%; text-align:center;}
/* 海报 */
.poster{width:300px; background:linear-gradient(160deg,var(--blue-dark),var(--blue)); color:#fff;
  border-radius:16px; padding:22px; margin:0 auto; position:relative;}
.poster .pt{font-size:20px; font-weight:700; letter-spacing:2px;}
.poster .ps{font-size:12px; opacity:.85; margin-top:4px;}
.poster .pavatar{width:46px; height:46px; border-radius:50%; background:rgba(255,255,255,.25); margin:14px 0;}
.poster .pname{font-size:16px; font-weight:600;}
.poster .pmeta{font-size:13px; opacity:.9; margin-top:4px;}
.poster .plogo{width:64px; height:64px; margin:16px auto 6px; display:block;}
.poster .pqr{background:#fff; border-radius:12px; padding:10px; display:inline-block; margin-top:14px;}
.poster .pcode{font-size:12px; opacity:.85; margin-top:8px;}
.empty{text-align:center; color:var(--gray); padding:40px 0; font-size:14px;}
.section-tip{font-size:12px; color:var(--gray); margin:-4px 0 12px; line-height:1.6;}
