:root{
  --coral:#E07856; --coral-d:#C75F40; --green:#6FA38B; --green-d:#4E8870;
  --cream:#FBF5EA; --paper:#FFFFFF; --ink:#3D3530; --mute:#9a8b7d;
  --line:#ECE2D3; --gold:#D99A3C;
  --ok:#6FA38B; --part:#D99A3C; --no:#C98B7C;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  background:var(--cream); color:var(--ink); line-height:1.55;
  font-size:16px; -webkit-text-size-adjust:100%;
}
.wrap{max-width:560px;margin:0 auto;padding:0 16px 40px}
a{color:var(--coral-d)}

/* header */
.topbar{
  background:linear-gradient(135deg,var(--coral),var(--coral-d));
  color:#fff;padding:22px 18px 18px;border-radius:0 0 22px 22px;
  box-shadow:0 6px 18px rgba(199,95,64,.22);
}
.topbar .cls{font-size:13px;opacity:.9;letter-spacing:.5px}
.topbar h1{margin:6px 0 2px;font-size:23px;font-weight:800}
.topbar .sub{font-size:14px;opacity:.92}
.topbar .week-pill{
  display:inline-block;margin-top:10px;background:rgba(255,255,255,.22);
  padding:5px 14px;border-radius:999px;font-size:14px;font-weight:700;
}

/* cards */
.card{
  background:var(--paper);border-radius:18px;padding:18px;margin-top:16px;
  box-shadow:0 3px 14px rgba(120,90,68,.08);border:1px solid #f3ece0;
}
.card.sub{padding:16px 16px 8px}
.sub-head{display:flex;align-items:center;gap:10px;margin-bottom:4px}
.badge{
  width:38px;height:38px;border-radius:11px;display:grid;place-items:center;
  font-size:19px;font-weight:800;color:#fff;flex:none;
}
.badge.语文{background:var(--coral)} .badge.数学{background:var(--green)} .badge.英语{background:var(--gold)}
.sub-name{font-size:18px;font-weight:800}
.sub-meta{font-size:12px;color:var(--mute)}

/* segmented choice */
.seg{display:flex;gap:8px;margin:12px 0 6px}
.seg label{
  flex:1;text-align:center;padding:11px 6px;border-radius:12px;border:1.5px solid var(--line);
  background:#fcf9f3;font-weight:700;font-size:15px;color:var(--mute);cursor:pointer;
  transition:.15s;user-select:none;
}
.seg input{position:absolute;opacity:0;pointer-events:none}
.seg label.s-all.on{background:var(--ok);border-color:var(--ok);color:#fff}
.seg label.s-part.on{background:var(--part);border-color:var(--part);color:#fff}
.seg label.s-none.on{background:var(--no);border-color:var(--no);color:#fff}

/* day chips */
.days{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 10px}
.day-chip{
  display:flex;flex-direction:column;align-items:center;gap:1px;
  min-width:62px;padding:8px 8px;border-radius:12px;border:1.5px solid var(--line);
  background:#fcf9f3;cursor:pointer;transition:.12s;flex:1 0 auto;
}
.day-chip .dlabel{font-weight:800;font-size:15px}
.day-chip .dtask{font-size:11px;color:var(--mute);text-align:center;line-height:1.25;
  max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.day-chip.on{background:#fbeede;border-color:var(--part);color:var(--coral-d)}
.day-chip.on .dtask{color:var(--coral-d);opacity:.8}
.days-hint{font-size:12px;color:var(--mute);margin:2px 0 4px}
.collapse{overflow:hidden;transition:max-height .22s ease;max-height:0}
.collapse.open{max-height:400px}

/* inputs */
.field{margin:14px 0}
.field label{display:block;font-size:14px;font-weight:700;margin-bottom:6px;color:var(--ink)}
.idrow{display:flex;align-items:center;gap:8px}
.idfix{background:#f0e7da;border-radius:12px;padding:13px 14px;font-weight:800;color:var(--mute);font-size:18px;letter-spacing:1px}
input[type=text],input[type=tel],input[type=password]{
  width:100%;padding:13px 14px;border:1.5px solid var(--line);border-radius:12px;
  font-size:18px;background:#fff;color:var(--ink);outline:none;
}
input:focus{border-color:var(--coral)}
.idrow input{flex:1;letter-spacing:4px;font-weight:700}

/* buttons */
.btn{
  display:block;width:100%;border:none;border-radius:14px;padding:15px;
  font-size:18px;font-weight:800;color:#fff;background:var(--coral);
  box-shadow:0 4px 12px rgba(199,95,64,.28);cursor:pointer;margin-top:18px;
}
.btn:active{transform:translateY(1px)}
.btn.green{background:var(--green);box-shadow:0 4px 12px rgba(78,136,112,.26)}
.btn.ghost{background:#fff;color:var(--coral-d);border:1.5px solid var(--line);box-shadow:none}
.btn[disabled]{opacity:.5}

/* misc */
.note{font-size:13px;color:var(--mute);text-align:center;margin-top:14px}
.banner{background:#eef5f0;border:1px solid #d8e8df;color:var(--green-d);
  border-radius:12px;padding:10px 12px;font-size:13.5px;margin-top:12px}
.banner.warn{background:#fdf2e6;border-color:#f3ddc0;color:var(--coral-d)}
.toast{
  position:fixed;left:50%;bottom:40px;transform:translateX(-50%) translateY(20px);
  background:rgba(40,30,25,.92);color:#fff;padding:12px 20px;border-radius:12px;
  font-weight:700;opacity:0;transition:.25s;z-index:99;pointer-events:none;max-width:80%;text-align:center;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.success-card{text-align:center;padding:34px 18px}
.success-card .big{font-size:54px}
.success-card h2{margin:8px 0 4px;color:var(--green-d)}
.recap{text-align:left;margin-top:14px;border-top:1px dashed var(--line);padding-top:12px}
.recap-row{display:flex;justify-content:space-between;padding:5px 0;font-size:14px}
.tag{font-size:12px;font-weight:800;padding:2px 9px;border-radius:999px}
.tag.all{background:#e3efe9;color:var(--green-d)} .tag.part{background:#fbeede;color:var(--coral-d)} .tag.none{background:#f6e4df;color:#b06a58}

/* week index */
.weeks-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
.week-link{
  background:var(--paper);border:1px solid #f3ece0;border-radius:16px;padding:16px;
  text-decoration:none;color:var(--ink);box-shadow:0 3px 12px rgba(120,90,68,.07);
}
.week-link .wk{font-size:18px;font-weight:800;color:var(--coral-d)}
.week-link .rg{font-size:13px;color:var(--mute);margin-top:2px}
.week-link .ar{font-size:12px;color:var(--green-d);margin-top:8px;font-weight:700}

/* 未到日期（不可提前打卡）*/
.day-chip.locked{opacity:.5;background:#efe9df;border-style:dashed;cursor:not-allowed}
.day-chip.locked .dlabel{color:#a99a8a}
.day-chip.locked .dtask{color:#b8ab9b}
.card.sub.locked{opacity:.72}
.card.sub.locked .sub-meta{color:var(--gold)}
