:root{
  --bg:#ffffff;
  --fg:#1a1a1a;
  --sub:#7a7a7a;
  --line:#ececec;
  --soft:#f6f6f6;
  --main:#1a1a1a;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg);
  color:var(--fg);
  font:15px/1.6 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  display:flex;
  flex-direction:column;
}
.wrap{width:100%;max-width:920px;margin:0 auto;padding:0 18px}

/* 顶栏 */
.top{
  position:sticky;top:0;z-index:20;
  background:rgba(255,255,255,.88);
  backdrop-filter:saturate(180%) blur(14px);
  border-bottom:1px solid var(--line);
}
.top-in{display:flex;align-items:center;justify-content:space-between;height:60px;gap:12px}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand .dot{
  width:9px;height:9px;border-radius:50%;background:#111;flex:0 0 auto;
  box-shadow:0 0 0 4px rgba(17,17,17,.06);
}
.brand h1{
  margin:0;font-size:16px;font-weight:600;letter-spacing:.2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.top-right{display:flex;align-items:center;gap:14px;flex:0 0 auto}
.pulse{font-size:12px;color:var(--sub);display:flex;align-items:center;gap:6px}
.pulse i{
  width:6px;height:6px;border-radius:50%;background:#22c55e;display:inline-block;
  animation:pulse 1.8s infinite;
}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}

/* 按钮 */
.btn{
  font:inherit;font-size:14px;cursor:pointer;border-radius:10px;padding:10px 16px;
  border:1px solid transparent;background:#111;color:#fff;
  transition:transform .18s ease,opacity .18s ease,background .18s ease,border-color .18s ease;
}
.btn:hover{opacity:.88}
.btn:active{transform:scale(.97)}
.btn.sm{padding:7px 13px;font-size:13px;border-radius:9px}
.btn.ghost{background:#fff;color:#333;border-color:#e2e2e2}
.btn.ghost:hover{background:var(--soft);opacity:1}
.btn.danger{background:#fff;color:#c0392b;border-color:#f0d6d2}
.btn.danger:hover{background:#fdf4f2}
.btn[disabled]{opacity:.45;cursor:not-allowed}

/* 首屏 */
.hero{padding:44px 0 8px}
.hero h2{margin:0 0 8px;font-size:26px;font-weight:600;letter-spacing:-.2px}
.hero p{margin:0;color:var(--sub);font-size:14px}
.stats{display:flex;gap:10px;margin-top:26px}
.stat{
  flex:1;background:var(--soft);border-radius:14px;padding:16px 14px;
  transition:background .2s ease;
}
.stat b{display:block;font-size:22px;font-weight:600;line-height:1.2}
.stat span{font-size:12px;color:var(--sub)}

/* 工具条 */
.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:34px 0 16px}
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;padding:3px;background:var(--soft);border-radius:12px}
.tabs::-webkit-scrollbar{display:none}
.tab{
  font:inherit;font-size:13px;cursor:pointer;white-space:nowrap;border:0;background:transparent;
  color:var(--sub);padding:8px 14px;border-radius:9px;
  transition:background .2s ease,color .2s ease,box-shadow .2s ease;
}
.tab:hover{color:#333}
.tab.on{background:#fff;color:#111;box-shadow:0 1px 3px rgba(0,0,0,.07)}

/* 任务卡片 */
.list{display:flex;flex-direction:column;gap:12px}
.card{
  background:#fff;border:1px solid var(--line);border-radius:16px;padding:18px 18px 16px;
  cursor:pointer;
  transition:border-color .2s ease,transform .2s ease,box-shadow .2s ease;
  animation:in .32s ease both;
}
@keyframes in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.card:hover{border-color:#d8d8d8;transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.05)}
.card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.card h3{margin:0;font-size:15.5px;font-weight:600;line-height:1.45}
.card .desc{margin:8px 0 0;color:var(--sub);font-size:13.5px;line-height:1.65;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.meta{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;font-size:12px;color:#a5a5a5}

.tag{
  flex:0 0 auto;font-size:12px;padding:4px 10px;border-radius:999px;
  background:var(--soft);color:#555;border:1px solid #ededed;white-space:nowrap;
}
.tag.wait{background:#fff8ec;color:#a8701a;border-color:#f6e5c8}
.tag.doing{background:#eef4ff;color:#2b62c9;border-color:#dbe6fb}
.tag.done{background:#eefaf1;color:#1f8a4c;border-color:#d5f0de}
.tag.pause{background:#f6f6f6;color:#888;border-color:#e9e9e9}

.bar{height:4px;background:var(--soft);border-radius:99px;margin-top:12px;overflow:hidden}
.bar i{display:block;height:100%;border-radius:99px;background:#1a1a1a;
  transition:width .6s cubic-bezier(.4,0,.2,1)}
.bar i.wait{background:#e0a33a}
.bar i.doing{background:#3b6fd4}
.bar i.done{background:#22a25c}
.bar i.pause{background:#bdbdbd}

.empty{text-align:center;color:#bbb;padding:70px 0;font-size:14px}

/* 弹层 */
.mask{
  position:fixed;inset:0;z-index:50;background:rgba(20,20,20,.28);
  display:flex;align-items:center;justify-content:center;padding:20px;
  opacity:0;transition:opacity .26s ease;
}
.mask.show{opacity:1}
.sheet{
  width:100%;max-width:520px;background:#fff;border-radius:18px;
  padding:22px 22px 24px;max-height:80vh;overflow:auto;
  transform:translateY(14px) scale(.98);opacity:0;
  transition:transform .3s cubic-bezier(.22,1,.36,1),opacity .26s ease;
}
.mask.show .sheet{transform:none;opacity:1}
.sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.sheet-head h3{margin:0;font-size:17px;line-height:1.45}
.x{
  font:inherit;font-size:12px;cursor:pointer;border:0;background:var(--soft);color:#666;
  padding:6px 12px;border-radius:8px;flex:0 0 auto;transition:background .2s ease;
}
.x:hover{background:#ededed}
.mmeta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:14px 0 4px;font-size:12px;color:#a5a5a5}
.mtext{margin-top:14px;font-size:14.5px;line-height:1.85;white-space:pre-wrap;word-break:break-word;color:#2a2a2a}

.foot{margin-top:auto;padding:40px 0 30px;font-size:12px;color:#bfbfbf;text-align:center}

@media (max-width:560px){
  .hero{padding:30px 0 4px}
  .hero h2{font-size:22px}
  .pulse{display:none}
  .stat{padding:14px 12px}
  .stat b{font-size:19px}
  .card{padding:16px}
  .toolbar{margin:26px 0 14px}
}
