/* ============================================================
   KidDaily 首页 index.html — 弹层 / 表单 / 上传区 / 计划列表 / Toast
   由原型机械抽取，裸 hex 全部收编为 var() Token
   ============================================================ */

/* ---------- 弹层（通用） ---------- */
.mask{
  position:absolute;inset:0;z-index:20;
  background:var(--mask-bg);
  backdrop-filter:blur(3px);
  display:flex;align-items:center;justify-content:center;
  opacity:0;visibility:hidden;transition:opacity .24s ease,visibility .24s ease;
}
.mask.is-open{opacity:1;visibility:visible;}
.modal{
  width:560px;background:var(--card);border-radius:var(--radius-card);
  border:1px solid var(--line);box-shadow:var(--shadow-modal);
  padding:28px;display:flex;flex-direction:column;gap:18px;
  transform:translateY(12px) scale(.98);
  transition:transform var(--motion-slow) var(--ease-out-expo);
}
.mask.is-open .modal{transform:translateY(0) scale(1);}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;}
.modal-head h3{font-size:20px;font-weight:700;color:var(--ink);line-height:28px;}
.modal-head p{font-size:12.5px;color:var(--muted);line-height:18px;margin-top:4px;}
.modal-close{
  width:30px;height:30px;border-radius:50%;background:var(--field);
  display:flex;align-items:center;justify-content:center;flex:0 0 auto;
  transition:background-color .16s ease;color:var(--ink-3);
}
.modal-close:hover{background:var(--icon-btn-hover);}
.modal-body{display:flex;flex-direction:column;gap:14px;}
.modal-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;}
.btn-lg{height:42px;padding:0 22px;}
.btn-lg span{font-size:14px;font-weight:500;line-height:20px;}

.field{display:flex;flex-direction:column;gap:7px;}
.field label{font-size:12.5px;font-weight:500;color:var(--muted);line-height:17px;}
.field input,.field textarea{
  width:100%;border-radius:var(--radius-sm);background:var(--field);
  border:1px solid var(--line);padding:0 14px;height:44px;
  font-size:14px;color:var(--ink);line-height:20px;outline:none;
  transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease;
}
.field textarea{height:80px;padding:11px 14px;resize:none;line-height:22px;}
.field input:focus,.field textarea:focus{
  border-color:var(--field-focus-border);background:var(--field-focus-bg);
  box-shadow:var(--focus-ring);
}
.field input::placeholder,.field textarea::placeholder{color:var(--placeholder);}
.field input[disabled]{color:var(--faded);}

/* 数值输入 + 单位后缀（成长记录弹窗） */
.input-unit{position:relative;display:flex;align-items:center;}
.input-unit input{padding-right:44px;}
.input-unit em{
  position:absolute;right:14px;font-style:normal;
  font-size:13px;color:var(--muted);line-height:18px;pointer-events:none;
}

/* 指标四 chip 横排单选（成长记录弹窗，圆点色 = 曲线签名色） */
.metric-chips{display:flex;gap:10px;}
.metric-chip{
  flex:1 1 0;height:44px;border-radius:var(--radius-sm);
  display:flex;align-items:center;justify-content:center;gap:7px;
  border:1px solid var(--line-soft);background:var(--field);
  transition:border-color .18s ease,background-color .18s ease;
}
.metric-chip i{width:8px;height:8px;border-radius:50%;display:block;flex:0 0 auto;}
.metric-chip span{font-size:13px;font-weight:500;color:var(--muted-2);line-height:18px;}
.metric-chip:hover{background:var(--chip-hover);}
.metric-chip.is-active{background:var(--card);border-color:currentColor;}
.metric-chip.is-active span{font-weight:600;color:var(--ink);}

.dropzone{
  width:100%;height:150px;border-radius:var(--radius-md);background:var(--field);
  border:1.5px dashed var(--dropzone-border);display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;cursor:pointer;
  overflow:hidden;position:relative;
  transition:border-color .16s ease,background-color .16s ease;
  color:var(--label);
}
.dropzone:hover{border-color:var(--dropzone-hover-border);background:var(--dropzone-hover-bg);}
.dropzone img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.dropzone .dz-tip{font-size:12.5px;color:var(--muted);line-height:18px;}
.dropzone .dz-change{
  position:absolute;left:50%;bottom:10px;transform:translateX(-50%);
  height:26px;padding:0 12px;border-radius:var(--radius-pill);
  background:var(--overlay-dark);color:#fff;font-size:11.5px;
  display:none;align-items:center;
}
.dropzone.has-img .dz-icon,.dropzone.has-img .dz-tip{display:none;}
.dropzone.has-img .dz-change{display:flex;}
.dropzone.is-circle img{border-radius:50%;width:120px;height:120px;inset:15px auto auto 50%;
  transform:translateX(-50%);}
/* 竖版档案照预览：与档案卡（227:403 圆角矩形）同形状，保持一致 */
.dropzone.is-portrait img{border-radius:14px;width:79px;height:140px;inset:50% auto auto 50%;
  transform:translate(-50%,-50%);}

/* 当日计划列表 */
.plan-list{display:flex;flex-direction:column;gap:10px;}
.plan-item{
  display:flex;align-items:center;gap:12px;
  padding:13px 16px;border-radius:var(--radius-md);background:var(--field);
}
.plan-check{
  width:20px;height:20px;border-radius:50%;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;
  border:2px solid var(--check-border);background:#fff;
  color:#fff;
}
.plan-item.done .plan-check{background:var(--success);border-color:var(--success);}
.plan-time{
  font-family:var(--font-num);font-size:13px;font-weight:600;color:var(--muted);
  min-width:44px;font-variant-numeric:tabular-nums;
}
.plan-title{font-size:14px;font-weight:500;color:var(--ink);flex:1 1 auto;}
.plan-item.done .plan-title{color:var(--muted);text-decoration:line-through;}
.plan-tag{font-size:11.5px;font-weight:500;padding:3px 9px;border-radius:var(--radius-pill);flex:0 0 auto;}
.plan-tag.done{background:var(--course-green-bg);color:var(--course-green);}
.plan-tag.todo{background:var(--course-yellow-bg);color:var(--course-yellow-ink);}
.empty-note{padding:36px 0;text-align:center;color:var(--muted);font-size:13px;line-height:20px;}

/* ---------- 轻提示 ---------- */
.toast{
  position:absolute;left:50%;bottom:64px;z-index:30;
  transform:translate(-50%,14px);
  background:var(--toast-bg);color:#fff;
  font-size:13.5px;line-height:20px;padding:12px 22px;border-radius:var(--radius-pill);
  opacity:0;visibility:hidden;
  transition:opacity .24s ease,transform .24s ease,visibility .24s ease;
  white-space:nowrap;
}
.toast.is-open{opacity:1;visibility:visible;transform:translate(-50%,0);}
