/* 하루 할 일 앱 전체 스타일 — 색상 변수(라이트/다크 테마), 공통 레이아웃, 각 탭 화면의 인테리어 규칙 */
:root{
  --bg:#EEF1EC; --card:#fff; --ink:#22302B; --sub:#6B7A73; --line:#EDF1EC;
  --green:#2F7A67; --green-dark:#276754; --green-bg:#EAF5F0; --green-deep:#22624F;
  --red:#BE3B2E; --red-bg:#FBEFEA; --red-dark:#8C3B26;
  --muted:#93A29A; --blue:#3B6FA0; --blue-bg:#EEF3FA;
  --chip:#F0F3EF; --chip-hover:#E1E8E1; --tab-on:#fff;
  --border:#D6DED6; --input-bg:#FAFBF9;
  --panel:#F7FAF7; --panel-line:#E4EBE4;
  --track:#E4E9E3; --label:#3C4A43; --faint:#C4CEC6;
  --done:#A7B3AC; --done-line:#C6CFC8;
  --cell-hover:#F4F8F5; --cell-hover-line:#CFE0D6;
  --disabled:#B9CBC3; --chart:#1F8A68; --grid:#E7ECE7;
  --star:#E2A93B; --shadow:rgba(34,48,43,.08);
  color-scheme:light;
}
:root[data-theme="dark"]{
    --bg:#141917; --card:#1E2622; --ink:#E6ECE8; --sub:#9BABA2; --line:#2B3530;
    --green:#4CAF93; --green-dark:#63C2A7; --green-bg:#20362E; --green-deep:#8FD0B9;
    --red:#E37767; --red-bg:#3B2723; --red-dark:#EE9484;
    --muted:#71827A; --blue:#87ACD3; --blue-bg:#22303E;
    --chip:#28312C; --chip-hover:#333F38; --tab-on:#3A463F;
    --border:#3D4A43; --input-bg:#171E1A;
    --panel:#242E28; --panel-line:#323D36;
    --track:#2C3630; --label:#C6D1CA; --faint:#55635B;
    --done:#66756D; --done-line:#4C5951;
    --cell-hover:#26302A; --cell-hover-line:#3D4A43;
    --disabled:#3C4A43; --chart:#3FB48E; --grid:#2B3530;
    --star:#E8B44C; --shadow:rgba(0,0,0,.45);
    color-scheme:dark;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
body{
  margin:0;min-height:100vh;min-height:100svh;background:var(--bg);
  display:flex;justify-content:center;padding:40px 16px;
  /* 아이폰 노치·홈바(safe area)에 내용이 가리지 않도록 여백 확보 */
  padding-left:max(16px, env(safe-area-inset-left));
  padding-right:max(16px, env(safe-area-inset-right));
  padding-bottom:max(40px, calc(16px + env(safe-area-inset-bottom)));
  font-family:'Apple SD Gothic Neo','Noto Sans KR','Malgun Gothic',sans-serif;
  color:var(--ink);
}
.sheet{
  width:100%;max-width:560px;background:var(--card);border-radius:14px;
  box-shadow:0 8px 30px var(--shadow);padding:22px 26px 30px;height:fit-content;
}
/* 넓은 화면(PC): 카드가 화면 높이·너비에 맞춰 고정되고 모든 탭이 같은 크기.
   페이지 자체는 스크롤되지 않고, 내용이 길면 카드 안에서만 스크롤됨.
   달력 탭은 왼쪽 큰 달력 + 오른쪽 선택한 날짜 패널 2단 구성 */
@media (min-width:1100px){
  body{padding:24px 20px;}
  /* PC에서는 일간 탭 숨김: 달력 탭의 오른쪽 패널이 일간 역할을 대신함 */
  #tabDay{display:none;}
  .tabRow{grid-template-columns:repeat(5,1fr);}
  .sheet{max-width:1340px;height:calc(100vh - 48px);display:flex;flex-direction:column;overflow:hidden;}
  .views{flex:1;min-height:0;overflow-y:auto;padding:2px;}
  .views > div{max-width:840px;margin:0 auto;}
  .foot{margin-top:10px;padding-top:12px;}
  .sheet.wide .legend{margin-top:10px;}
  /* 달력 2단 모드: 행 높이를 화면에 정확히 고정(minmax(0,1fr))해 페이지 스크롤 없이
     달력 그리드가 남은 세로 공간을 6주가 나눠 가짐. 칸이 최소 높이(64px)까지 줄어도
     모자라면 그때만 달력 영역 안에서 스크롤. 오른쪽 날짜 패널도 자체 스크롤 */
  .sheet.wide .views{display:grid;grid-template-columns:minmax(0,1fr) 380px;grid-template-rows:minmax(0,1fr);gap:0 32px;overflow:hidden;}
  .sheet.wide .views > div{max-width:none;margin:0;}
  .sheet.wide #viewCal{order:1;display:flex;flex-direction:column;min-height:0;overflow-y:auto;}
  .sheet.wide #viewCal .calCells{flex:1;min-height:400px;grid-auto-rows:minmax(0,1fr);}
  .sheet.wide #viewDay{order:2;border-left:1px solid var(--line);padding-left:32px;min-height:0;overflow-y:auto;}
  .sheet.wide #viewDay .inputRow input.dateIn{display:none;}
  .sheet.wide .calCell{aspect-ratio:auto;min-height:0;overflow:hidden;align-items:stretch;gap:2px;padding:5px 5px 4px;}
  /* 칸이 낮아져도 할 일 글줄이 세로로 짜부라지지 않게: 못 들어가는 줄은 그냥 잘림 */
  .sheet.wide .calCell > *{flex:none;}
  .sheet.wide .calCell .calNum{text-align:left;padding-left:3px;}
  .calItem{display:block;font-size:10.5px;font-weight:600;color:var(--label);background:var(--panel);border:1px solid var(--panel-line);border-radius:6px;padding:1.5px 5px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
  .calItemDone{color:var(--done);text-decoration:line-through;background:none;}
  .calMore{display:block;font-size:10.5px;color:var(--sub);text-align:left;padding-left:3px;}
  /* 몸무게 탭: 입력줄을 한 줄로 합치고, 차트가 남은 세로 공간을 전부 차지 */
  #viewWeight .hint{display:none;}
  #viewWeight .wForm{display:flex;gap:10px;}
  #viewWeight .wForm .inputRow{flex:1;margin-bottom:14px;}
  #viewWeight .wGoalRow{margin-top:0;}
  #viewWeight .chartCard{flex:1;}
  #viewWeight .chartBox{flex:1;height:auto;min-height:150px;}
  /* 통계·몸무게 탭: 세로 공간이 모자라면 차트가 먼저 줄어들어 모니터 크기와 무관하게 스크롤 없이 맞춤.
     차트가 최소 높이까지 줄어도 모자라면 그때만 스크롤. (:not(.hidden) — 탭 숨김 display:none을 덮어쓰지 않기 위함) */
  #viewStats:not(.hidden), #viewWeight:not(.hidden){display:flex;flex-direction:column;height:100%;}
  #viewStats .chartCard, #viewWeight .chartCard{display:flex;flex-direction:column;min-height:170px;}
  #viewStats .chartCard svg{flex:1;min-height:0;}
}
.tabRow{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;background:var(--chip);padding:4px;border-radius:10px;margin-bottom:20px;}
@media (min-width:520px){.tabRow{grid-template-columns:repeat(6,1fr);}}
.themeBtn{padding:9px 16px;border:none;border-radius:10px;background:var(--chip);color:var(--sub);font-size:13px;font-weight:700;cursor:pointer;font-family:inherit;white-space:nowrap;}
.themeBtn:hover{background:var(--chip-hover);}
.foot{margin-top:26px;padding-top:16px;border-top:1px solid var(--line);text-align:center;}
.tab{padding:9px 2px;border:none;border-radius:8px;background:none;font-size:14px;font-weight:700;color:var(--sub);cursor:pointer;font-family:inherit;white-space:nowrap;}
.tabOn{background:var(--tab-on);color:var(--ink);box-shadow:0 1px 4px rgba(34,48,43,.12);}
header.bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;}
.eyebrow{font-size:12px;letter-spacing:.18em;color:var(--green);font-weight:700;margin-bottom:4px;text-align:center;}
h1.dateTitle{font-size:20px;font-weight:800;margin:0;text-align:center;}
.navBtn{width:36px;height:36px;border:none;border-radius:10px;flex:none;background:var(--chip);color:var(--label);font-size:20px;cursor:pointer;}
.navBtn:hover{background:var(--chip-hover);}
.todayBtn{margin-top:6px;padding:3px 12px;border:1px solid var(--border);border-radius:99px;background:var(--tab-on);color:var(--green);font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;}
.todayBtn:hover{background:var(--cell-hover);}
button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--green);outline-offset:2px;}
.progressTrack{height:8px;background:var(--track);border-radius:99px;overflow:hidden;}
.progressFill{height:100%;background:linear-gradient(90deg,#2F7A67,#4BA88F);border-radius:99px;transition:width .35s ease;}
.progressLabel{display:block;margin:8px 0 22px;font-size:13px;color:var(--sub);}
.inputRow{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;}
.wGoalRow{margin-top:-8px;}
input.txt,textarea.txt{flex:1;width:100%;padding:12px 14px;font-size:15px;border:1.5px solid var(--border);border-radius:10px;outline:none;background:var(--input-bg);font-family:inherit;color:var(--ink);}
textarea.txt{resize:vertical;min-height:96px;font-size:12.5px;line-height:1.5;}
.addBtn{padding:0 20px;border:none;border-radius:10px;background:var(--green);color:#fff;font-size:15px;font-weight:700;cursor:pointer;font-family:inherit;}
.addBtn:hover:not(:disabled){background:var(--green-dark);}
.addBtn:disabled{background:var(--disabled);cursor:not-allowed;}
:root[data-theme="dark"] .addBtn{color:#10201A;}
.ghostBtn{padding:10px 16px;border:1.5px solid var(--border);border-radius:10px;background:var(--tab-on);color:var(--sub);font-size:14px;font-weight:700;cursor:pointer;font-family:inherit;}
.ghostBtn:hover{border-color:var(--red);color:var(--red);}
.neutralBtn:hover{border-color:var(--green);color:var(--green);}
ul.list{list-style:none;margin:0;padding:0;}
.row{display:flex;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--line);}
.rowText{flex:1;font-size:15.5px;line-height:1.45;word-break:break-all;}
.rowDone .rowText{color:var(--done);text-decoration:line-through;text-decoration-color:var(--done-line);}
.memoLine{display:block;font-size:12.5px;color:var(--sub);margin-top:2px;text-decoration:none;}
.stampBtn{width:38px;height:38px;flex:none;border:none;background:none;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;}
.ring{width:24px;height:24px;border-radius:50%;border:2px solid var(--faint);}
.stampBtn:hover .ring{border-color:var(--green);}
.stamp{
  width:32px;height:32px;border-radius:50%;border:2.5px solid var(--red);color:var(--red);
  display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:800;
  transform:rotate(-8deg);animation:stampIn .25s cubic-bezier(.2,1.4,.4,1);
}
@keyframes stampIn{0%{transform:scale(1.8) rotate(-20deg);opacity:0;}100%{transform:scale(1) rotate(-8deg);opacity:1;}}
@media (prefers-reduced-motion:reduce){.stamp{animation:none;}}
.delBtn{width:30px;height:30px;flex:none;border:none;border-radius:8px;background:none;color:var(--faint);font-size:20px;cursor:pointer;}
.row:hover .delBtn{color:var(--red-dark);}
.delBtn:hover{background:var(--red-bg);}
.editBtn{width:30px;height:30px;flex:none;border:none;border-radius:8px;background:none;color:var(--faint);font-size:14px;cursor:pointer;}
.editBtn:hover{background:var(--chip);color:var(--label);}
.starBtn{width:30px;height:30px;flex:none;border:none;border-radius:8px;background:none;color:var(--faint);font-size:17px;cursor:pointer;padding:0;}
.starBtn:hover{background:var(--chip);}
.starOn{color:var(--star);}
.repeatTag{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:99px;background:var(--blue-bg);color:var(--blue);font-size:11px;font-weight:700;vertical-align:1px;text-decoration:none;}
.dueTag{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:99px;background:var(--red-bg);color:var(--red);font-size:11px;font-weight:700;vertical-align:1px;text-decoration:none;}
input.dateIn{flex:none;width:150px;padding:12px 10px;font-size:13px;border:1.5px solid var(--border);border-radius:10px;outline:none;background:var(--input-bg);font-family:inherit;color:var(--sub);}
/* 좁은 화면: 글자 입력칸을 첫 줄 전체로, 날짜·버튼은 다음 줄로. 16px 미만 입력칸은 iOS가 자동 확대하므로 16px로 고정 */
@media (max-width:480px){
  input.txt,textarea.txt,input.dateIn{font-size:16px;}
  .inputRow input.txt{flex:1 1 100%;order:-1;}
  .inputRow input.dateIn{flex:1;width:auto;}
  .inputRow .addBtn{padding:12px 20px;}
  .inputRow .ghostBtn{flex:1;}
}
.repeatIcon{width:32px;height:32px;flex:none;border-radius:50%;background:var(--blue-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:800;}
.ruleDays{display:inline-block;margin-left:8px;padding:1px 8px;border-radius:99px;background:var(--chip);color:var(--label);font-size:11.5px;font-weight:700;vertical-align:1px;}
.empty{text-align:center;color:var(--muted);padding:28px 0;font-size:14px;line-height:1.7;}
.allDone{margin-top:20px;text-align:center;background:var(--green-bg);color:var(--green-deep);padding:12px;border-radius:10px;font-weight:700;font-size:14px;}
.hint{font-size:13px;color:var(--sub);margin:0 0 16px;line-height:1.6;}
.ruleForm{display:flex;flex-direction:column;gap:10px;background:var(--panel);border:1px solid var(--panel-line);border-radius:12px;padding:14px;margin-bottom:20px;}
.dayChipRow{display:flex;gap:6px;flex-wrap:wrap;}
.dayChip{padding:6px 13px;border:1.5px solid var(--border);border-radius:99px;background:var(--tab-on);font-size:13px;font-weight:700;color:var(--sub);cursor:pointer;font-family:inherit;}
.dayChip:hover{border-color:var(--green);}
.dayChipOn{background:var(--green);border-color:var(--green);color:#fff;}
:root[data-theme="dark"] .dayChipOn{color:#10201A;}
.carryBtn{width:100%;padding:10px;border:1.5px dashed var(--border);border-radius:10px;background:var(--panel);color:var(--label);font-size:13.5px;font-weight:700;cursor:pointer;font-family:inherit;margin-bottom:14px;}
.carryBtn:hover{border-color:var(--green);color:var(--green);}
.calGrid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;}
.calDow{text-align:center;font-size:12px;font-weight:700;padding:4px 0;color:var(--sub);}
.calDow.sun{color:var(--red);} .calDow.sat{color:var(--blue);}
.calCell{
  position:relative;aspect-ratio:1/1;min-height:52px;border:1px solid var(--line);border-radius:10px;
  background:var(--card);cursor:pointer;display:flex;flex-direction:column;align-items:center;
  padding-top:6px;gap:2px;font-family:inherit;
}
.calCell:hover{background:var(--cell-hover);border-color:var(--cell-hover-line);}
.calNum{font-size:13px;font-weight:600;color:var(--label);}
.calOut .calNum{color:var(--faint);}
.calToday{border-color:var(--green);border-width:1.5px;}
.calToday .calNum{color:var(--green);font-weight:800;}
.calSelected{background:var(--green-bg);}
.calBadge{font-size:10.5px;font-weight:700;color:var(--green);background:var(--green-bg);border-radius:99px;padding:1px 6px;line-height:1.4;}
.calStamp{width:20px;height:20px;border-radius:50%;border:1.8px solid var(--red);color:var(--red);display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;transform:rotate(-8deg);}
.legend{margin-top:16px;font-size:12.5px;color:var(--sub);display:flex;align-items:center;flex-wrap:wrap;gap:4px;}
.syncBadge{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:99px;font-size:13px;font-weight:700;margin-bottom:16px;}
.syncOn{background:var(--green-bg);color:var(--green-deep);}
.syncOff{background:var(--chip);color:var(--sub);}
.syncErr{background:var(--red-bg);color:var(--red-dark);}
.dot{width:8px;height:8px;border-radius:50%;background:currentColor;}
.stepBox{background:var(--panel);border:1px solid var(--panel-line);border-radius:12px;padding:14px 16px;margin-bottom:16px;font-size:13.5px;line-height:1.75;color:var(--label);}
.stepBox b{color:var(--ink);}
.field{margin-bottom:12px;}
.field label{display:block;font-size:13px;font-weight:700;color:var(--label);margin-bottom:6px;}
@media (max-width:420px){.calCell{min-height:44px;}.calBadge{padding:1px 4px;font-size:9.5px;}}
.statRow{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
.statTile{flex:1;min-width:150px;background:var(--panel);border:1px solid var(--panel-line);border-radius:12px;padding:12px 14px;}
.statLabel{font-size:12px;color:var(--sub);font-weight:700;margin-bottom:4px;}
.statValue{font-size:22px;font-weight:800;color:var(--ink);}
.statSub{font-size:12px;color:var(--sub);margin-top:2px;}
.rangeRow{display:flex;gap:6px;margin-bottom:12px;}
.chartCard{position:relative;border:1px solid var(--panel-line);border-radius:12px;padding:10px 6px 2px;margin-bottom:18px;background:var(--card);}
/* 몸무게 차트 자리: JS가 이 칸의 실제 픽셀 크기를 재서 SVG를 꽉 차게 그림 */
.chartBox{position:relative;height:230px;}
.chartLegend{display:flex;gap:16px;font-size:12px;color:var(--sub);font-weight:700;padding:2px 10px 4px;}
.lkey{display:inline-block;width:18px;height:0;border-top:2.5px solid var(--chart);vertical-align:middle;margin-right:6px;border-radius:2px;}
.lkeyTrend{border-top-style:dashed;border-top-color:var(--sub);}
.chartTip{position:absolute;pointer-events:none;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 4px 14px var(--shadow);padding:6px 10px;font-size:12px;color:var(--sub);display:none;white-space:nowrap;z-index:5;}
.chartTip b{display:block;font-size:14.5px;color:var(--ink);}
.wDiff{font-size:12px;color:var(--muted);margin-left:8px;font-weight:700;}
.gLine{stroke:var(--grid);stroke-width:1;}
.axLbl{fill:var(--sub);}
.wArea{fill:var(--chart);opacity:.1;}
.wLine{fill:none;stroke:var(--chart);stroke-width:2;stroke-linejoin:round;stroke-linecap:round;}
.wTrend{fill:none;stroke:var(--sub);stroke-width:2;stroke-dasharray:6 5;stroke-linecap:round;}
.wDot{fill:var(--chart);stroke:var(--card);stroke-width:2;}
.wEnd{fill:var(--ink);}
.wCrossLine{stroke:var(--faint);stroke-width:1;}
.goalLine{stroke:var(--red);stroke-width:1.5;stroke-dasharray:5 4;}
.goalLbl{fill:var(--red);font-weight:700;}
.sBar{fill:var(--chart);opacity:.5;}
.sBarFull{opacity:1;}
.secTitle{font-size:15px;font-weight:800;margin:20px 0 8px;}
.secSub{font-size:12px;color:var(--sub);font-weight:700;}
.miniTrack{display:block;height:6px;background:var(--track);border-radius:99px;overflow:hidden;margin-top:7px;max-width:260px;}
.miniFill{display:block;height:100%;background:linear-gradient(90deg,#2F7A67,#4BA88F);border-radius:99px;}
.rulePct{font-size:12.5px;color:var(--sub);font-weight:700;flex:none;}
.hidden{display:none;}
