:root{
  --ink:#33313B;
  --ink-soft:#8B857C;
  --green1:#37D99A;
  --green2:#0FA3A6;
  --line:#EFE9E1;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  color:var(--ink);
  background:
    radial-gradient(1100px 560px at 88% -8%, #FFF0E2 0%, rgba(255,240,226,0) 60%),
    radial-gradient(900px 520px at -6% 108%, #E6F2FF 0%, rgba(230,242,255,0) 55%),
    #F7F4EF;
  min-height:100vh;
  overscroll-behavior-y:none;
}
.page{
  max-width:520px;margin:0 auto;
  padding:30px 18px 44px;
  padding-top:calc(30px + env(safe-area-inset-top));
  padding-bottom:calc(44px + env(safe-area-inset-bottom));
}

/* ---------- 顶部卡片 ---------- */
.hero{
  position:relative;overflow:hidden;
  border-radius:28px;
  padding:24px 22px 22px;
  background:linear-gradient(135deg,#FFF3E4 0%,#FDE9EE 48%,#E7F5ED 100%);
  box-shadow:0 14px 34px rgba(150,110,80,.10);
}
.blob{position:absolute;border-radius:50%;pointer-events:none}
.blob-a{width:170px;height:170px;right:-55px;top:-60px;background:rgba(255,255,255,.55);filter:blur(6px)}
.blob-b{width:130px;height:130px;left:-40px;bottom:-70px;background:rgba(255,255,255,.45);filter:blur(8px)}
.hero-top{position:relative;z-index:1;display:flex;align-items:center;justify-content:space-between;gap:14px}
.greeting{margin:0 0 4px;font-size:14px;color:#A08D79}
.date{margin:0;font-size:27px;font-weight:800;letter-spacing:.5px;color:#4A3E33}
.msg{margin:10px 0 0;font-size:14px;color:#7C6F5F;line-height:1.5}
.msg b{color:#1F9D6E;font-weight:700}

/* 进度环 */
.ring{position:relative;width:106px;height:106px;flex:0 0 auto}
.ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.ring circle{fill:none}
.ring-track{stroke:rgba(255,255,255,.85);stroke-width:11}
.ring-bar{stroke:url(#ringGrad);stroke-width:11;stroke-linecap:round;
  stroke-dasharray:326.7;stroke-dashoffset:326.7;transition:stroke-dashoffset .6s cubic-bezier(.4,0,.2,1)}
.ring-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
.ring-num{font-size:23px;font-weight:800;color:#3D3540;line-height:1}
.ring-label{margin-top:3px;font-size:10px;color:#8C8177}

/* ---------- 习惯列表 ---------- */
.list{display:flex;flex-direction:column;gap:11px;margin-top:18px}
.item{
  display:flex;align-items:center;gap:13px;
  background:#fff;border:1px solid rgba(120,100,80,.05);
  border-radius:20px;padding:12px 14px;
  box-shadow:0 6px 18px rgba(120,95,65,.06);
  animation:pop .28s ease both;
  transition:background .25s ease, box-shadow .25s ease;
}
@keyframes pop{from{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}
.check{
  width:36px;height:36px;flex:0 0 auto;border-radius:50%;
  border:2px solid #E2DCD2;background:#fff;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  color:transparent;
  transition:all .22s ease;padding:0;
}
.check svg{width:17px;height:17px;display:block;pointer-events:none}
.check:active{transform:scale(.88)}
.item.done .check{
  background:linear-gradient(135deg,var(--green1),var(--green2));
  border-color:transparent;color:#fff;
  box-shadow:0 4px 12px rgba(24,170,150,.35);
  animation:tick .35s ease;
}
@keyframes tick{0%{transform:scale(.7)}60%{transform:scale(1.14)}100%{transform:scale(1)}}
.face{
  width:42px;height:42px;flex:0 0 auto;border-radius:14px;
  background:#F5F0EA;display:flex;align-items:center;justify-content:center;font-size:22px;
}
.name{flex:1;min-width:0;font-size:16px;font-weight:600;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .2s}
.item.done{
  background:#F0F0F3;
  border-color:transparent;
  box-shadow:none;
}
.item.done .face{
  background:#E4E4E8;
  filter:grayscale(1);
  opacity:.55;
}
.item.done .name{color:#B9B7BE}
.del{
  flex:0 0 auto;width:32px;height:32px;border-radius:50%;border:none;cursor:pointer;
  background:transparent;color:#C9C2B8;font-size:16px;line-height:1;
  display:flex;align-items:center;justify-content:center;transition:all .2s;padding:0;
}
.del:hover{background:#FBEEEE;color:#E2574C}
.del.confirm{
  background:#E2574C;color:#fff;width:auto;padding:0 12px;border-radius:999px;
  font-size:12px;font-weight:700;letter-spacing:1px;
}
.item.pending .name{opacity:.45}
.item.pending .face{opacity:.45}

/* ---------- 空状态 ---------- */
.empty{
  margin-top:18px;border:1.5px dashed #E0D8CD;border-radius:20px;
  background:rgba(255,255,255,.55);padding:30px 20px;text-align:center;
}
.empty-emoji{font-size:38px;margin-bottom:8px}
.empty-title{margin:0;font-weight:700;font-size:16px}
.empty-sub{margin:6px 0 0;font-size:13px;color:var(--ink-soft);line-height:1.6}

/* ---------- 添加区域 ---------- */
.add{
  margin-top:18px;background:#fff;border:1px solid var(--line);
  border-radius:22px;padding:16px 16px 14px;
  box-shadow:0 8px 22px rgba(120,95,65,.06);
}
.add-title{margin:0 0 12px;font-size:14px;font-weight:700;color:#6E6458}
.emoji-row{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:13px}
.e-btn{
  width:36px;height:36px;border-radius:50%;border:1.5px solid transparent;
  background:#F5F1EB;font-size:19px;cursor:pointer;padding:0;
  display:flex;align-items:center;justify-content:center;transition:all .18s;
}
.e-btn:hover{transform:translateY(-1px)}
.e-btn.active{border-color:var(--green2);background:#E6F7F1;box-shadow:0 0 0 2px rgba(15,163,166,.15)}
.e-btn.auto{border-style:dashed;border-color:#D8D0C4}
.e-btn.auto.active{border-style:solid}
.add-form{display:flex;gap:9px}
.input{
  flex:1;min-width:0;border:2px solid var(--line);border-radius:14px;
  padding:11px 14px;font-size:16px;color:var(--ink);background:#FBF9F6;outline:none;
  transition:border-color .2s, background .2s;
}
.input::placeholder{color:#B7B0A5}
.input:focus{border-color:var(--green2);background:#fff}
.add-btn{
  border:none;border-radius:14px;padding:0 21px;cursor:pointer;
  background:linear-gradient(135deg,var(--green1),var(--green2));color:#fff;
  font-size:15px;font-weight:700;letter-spacing:2px;
  box-shadow:0 5px 14px rgba(24,170,150,.30);transition:transform .15s, box-shadow .2s;
}
.add-btn:active{transform:scale(.95)}
.add-btn:disabled{opacity:.6;cursor:default;box-shadow:none}
.chips{display:flex;flex-wrap:wrap;gap:7px;margin-top:13px;padding-top:12px;border-top:1px solid #F3EEE7}
.chip{
  display:inline-flex;align-items:center;gap:4px;
  background:#F7F3ED;border:1px solid #EDE6DC;color:#6A6157;
  border-radius:999px;padding:6px 12px;font-size:13px;cursor:pointer;transition:all .15s;
}
.chip:hover{background:#EFF7F2;border-color:#BFE5D5;color:#1F9D6E}
.chip:active{transform:scale(.95)}

.foot{margin:18px 0 0;text-align:center;font-size:11px;color:#B5AEA2}

/* ---------- 提示条 ---------- */
.toast{
  position:fixed;left:50%;bottom:36px;transform:translate(-50%,16px);
  background:rgba(45,43,51,.92);color:#fff;padding:10px 18px;border-radius:999px;
  font-size:14px;opacity:0;pointer-events:none;transition:all .3s ease;z-index:99;
  max-width:86vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- 手机触控优化 ---------- */
.check,.add-btn,.chip,.e-btn,.del{touch-action:manipulation}

/* ---------- 顶部工具按钮 ---------- */
.toolbar{display:flex;gap:10px;margin-top:14px}
.tool-btn{
  flex:1;border:1px solid var(--line);background:#fff;color:#5C5348;
  border-radius:16px;padding:10px 12px;font-size:14px;font-weight:600;cursor:pointer;
  box-shadow:0 4px 12px rgba(120,95,65,.05);transition:all .18s;
}
.tool-btn:hover{border-color:#BFE5D5;background:#F0FAF5;color:#1F9D6E}
.tool-btn:active{transform:scale(.97)}

/* ---------- 弹窗通用 ---------- */
.overlay{
  position:fixed;inset:0;z-index:60;background:rgba(45,40,50,.40);
  display:flex;align-items:flex-end;justify-content:center;padding:0;
  -webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);
}
.overlay[hidden]{display:none}
.sheet{
  width:100%;max-width:520px;max-height:88vh;overflow-y:auto;
  background:#FDFBF8;border-radius:26px 26px 0 0;padding:20px 18px calc(24px + env(safe-area-inset-bottom));
  animation:up .28s ease both;
}
@media (min-width:560px){
  .overlay{align-items:center;padding:20px}
  .sheet{border-radius:26px}
}
@keyframes up{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
.sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px}
.sheet-title{margin:0;font-size:19px;font-weight:800;color:var(--ink)}
.sheet-sub{margin:3px 0 0;font-size:12px;color:var(--ink-soft)}
.sheet-close{
  width:32px;height:32px;border-radius:50%;border:none;background:#F1ECE5;color:#8B8177;
  font-size:15px;cursor:pointer;flex:0 0 auto;
}
.sheet-close:active{transform:scale(.92)}

/* ---------- 历史记录 ---------- */
.hist-nav{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.nav-btn{
  width:40px;height:40px;border-radius:12px;border:1px solid var(--line);background:#fff;
  color:#6E6458;font-size:15px;cursor:pointer;flex:0 0 auto;
}
.nav-btn:disabled{opacity:.35;cursor:default}
.date-input{
  flex:1;min-width:0;border:2px solid var(--line);border-radius:12px;background:#fff;
  padding:9px 10px;font-size:16px;color:var(--ink);text-align:center;outline:none;
}
.date-input:focus{border-color:var(--green2)}
.hist-stats{
  background:linear-gradient(135deg,#FFF3E4,#EAF6EF);border-radius:18px;
  padding:12px 16px;margin-bottom:12px;font-size:14px;color:#5C5348;
}
.hist-stats b{color:#1F9D6E;font-weight:800;font-size:17px}
.hist-list{display:flex;flex-direction:column;gap:10px}
.hist-item{
  display:flex;align-items:center;gap:13px;background:#fff;border:1px solid rgba(120,100,80,.05);
  border-radius:18px;padding:12px 14px;box-shadow:0 4px 12px rgba(120,95,65,.05);
}
.hist-check{
  width:30px;height:30px;flex:0 0 auto;border-radius:50%;border:2px solid #E2DCD2;
  display:flex;align-items:center;justify-content:center;color:transparent;
}
.hist-check svg{width:15px;height:15px}
.hist-item.done .hist-check{background:linear-gradient(135deg,var(--green1),var(--green2));border-color:transparent;color:#fff}
.hist-face{
  width:38px;height:38px;flex:0 0 auto;border-radius:12px;background:#F5F0EA;
  display:flex;align-items:center;justify-content:center;font-size:20px;
}
.hist-name{flex:1;min-width:0;font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hist-item.done .hist-name{color:#B9B7BE}
.hist-empty{padding:26px 14px;text-align:center;color:var(--ink-soft);font-size:14px;background:#fff;border-radius:18px;border:1.5px dashed #E0D8CD}

/* ---------- 提醒设置 ---------- */
.remind-form{display:flex;gap:9px;margin-bottom:14px}
.select{
  flex:1.4;min-width:0;border:2px solid var(--line);border-radius:14px;background:#FBF9F6;
  padding:10px 10px;font-size:16px;color:var(--ink);outline:none;
}
.select:focus{border-color:var(--green2)}
.time-input{
  flex:.9;min-width:0;border:2px solid var(--line);border-radius:14px;background:#FBF9F6;
  padding:9px 8px;font-size:16px;color:var(--ink);outline:none;
}
.time-input:focus{border-color:var(--green2)}
.remind-list{display:flex;flex-direction:column;gap:9px}
.remind-item{
  display:flex;align-items:center;gap:11px;background:#fff;border:1px solid rgba(120,100,80,.06);
  border-radius:16px;padding:11px 13px;box-shadow:0 3px 10px rgba(120,95,65,.05);
}
.remind-time{font-size:17px;font-weight:800;color:#3D3540;min-width:66px}
.remind-name{flex:1;min-width:0;font-size:14px;color:#5C5348;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.remind-name small{display:block;color:#B5AEA2;font-size:11px;margin-top:1px}
.switch{
  width:46px;height:27px;border-radius:999px;border:none;background:#DCD6CC;position:relative;
  cursor:pointer;transition:background .2s;flex:0 0 auto;
}
.switch::after{
  content:'';position:absolute;top:3px;left:3px;width:21px;height:21px;border-radius:50%;
  background:#fff;transition:left .2s;box-shadow:0 1px 3px rgba(0,0,0,.2);
}
.switch.on{background:linear-gradient(135deg,var(--green1),var(--green2))}
.switch.on::after{left:22px}
.rm-del{
  width:30px;height:30px;border-radius:50%;border:none;background:transparent;color:#C9C2B8;
  font-size:14px;cursor:pointer;flex:0 0 auto;
}
.rm-del:active{color:#E2574C}
.remind-note{
  margin:14px 2px 0;font-size:12px;color:#A79E91;line-height:1.7;
  background:#F6F1EA;border-radius:12px;padding:10px 12px;
}

/* ---------- 到点响铃 ---------- */
.alarm-overlay{z-index:80;align-items:center;padding:22px}
.alarm-box{
  width:100%;max-width:330px;background:#fff;border-radius:26px;padding:26px 22px 20px;
  text-align:center;box-shadow:0 18px 50px rgba(40,30,50,.25);animation:pop .3s ease both;
}
.alarm-icon{font-size:52px;line-height:1;animation:ring .6s ease infinite alternate}
@keyframes ring{from{transform:rotate(-12deg) scale(1)}to{transform:rotate(12deg) scale(1.08)}}
.alarm-title{margin:12px 0 0;font-size:20px;font-weight:800}
.alarm-text{margin:8px 0 0;font-size:14px;color:#6E6458;line-height:1.6}
.alarm-actions{display:flex;flex-direction:column;gap:9px;margin-top:20px}
.alarm-btn{
  border:none;border-radius:14px;padding:12px;font-size:15px;font-weight:700;cursor:pointer;
  transition:transform .15s;
}
.alarm-btn:active{transform:scale(.97)}
.alarm-btn.solid{background:linear-gradient(135deg,var(--green1),var(--green2));color:#fff}
.alarm-btn.ghost{background:#F4F0EA;color:#5C5348}

/* ---------- 待办提醒横幅 ---------- */
.missed{margin-bottom:11px}
.missed-card{
  background:#FFF6E0;border:1px solid #F3DFAE;border-radius:16px;padding:10px 12px;margin-bottom:8px;
  display:flex;align-items:center;gap:10px;font-size:13px;color:#8A6D1F;
}
.missed-card b{font-weight:700}
.missed-x{
  margin-left:auto;flex:0 0 auto;border:none;background:transparent;color:#C2A24E;
  font-size:14px;cursor:pointer;padding:4px;
}
