/* CalorAI 공식 웹 (08-20) — 앱 디자인 시스템 축약판. 반응형(모바일 우선). */
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
  --blue: #3D7BFF; --blue-deep: #12306E; --blue-soft: #EAF1FF;
  --text: #17233F; --sub: #55648A; --dim: #8B98B8; --orange: #F65E2E;
  --bg: #F5F7FD; --card: #FFFFFF; --green: #1E9E5A; --red: #D8304A;
}
body { font-family: -apple-system, BlinkMacSystemFont, 'Apple SD Gothic Neo', 'Malgun Gothic', sans-serif;
  background: var(--bg); color: var(--text); line-height: 1.6; }
a { color: var(--blue); text-decoration: none; }

/* 헤더 */
.nav { position: sticky; top: 0; z-index: 50; background: rgba(255,255,255,0.92); backdrop-filter: blur(10px);
  border-bottom: 1px solid rgba(30,60,140,0.08); }
.nav-in { max-width: 960px; margin: 0 auto; padding: 12px 18px; display: flex; align-items: center; gap: 18px; }
.logo { font-size: 19px; font-weight: 900; color: var(--blue-deep); letter-spacing: -0.5px; }
.logo span { color: var(--blue); }
.nav-links { display: flex; gap: 4px; margin-left: auto; flex-wrap: wrap; }
.nav-links a { padding: 7px 12px; border-radius: 999px; font-size: 13.5px; font-weight: 700; color: var(--sub); }
.nav-links a.on, .nav-links a:hover { background: var(--blue-soft); color: var(--blue-deep); }

.wrap { max-width: 960px; margin: 0 auto; padding: 26px 18px 60px; }
.card { background: var(--card); border-radius: 20px; padding: 22px; margin-bottom: 14px;
  border: 1px solid rgba(30,60,140,0.08); box-shadow: 0 8px 24px rgba(18,48,110,0.06); }
h1 { font-size: 26px; letter-spacing: -0.6px; margin-bottom: 8px; }
h2 { font-size: 18px; margin-bottom: 10px; }
.dim { color: var(--dim); font-size: 13px; }
.sub { color: var(--sub); font-size: 14.5px; }

/* 히어로 */
.hero { background: linear-gradient(160deg, #3566FF, #4F7DFF 45%, #7FA6FF); border-radius: 26px;
  color: #fff; padding: 44px 28px; text-align: center; margin-bottom: 18px; }
.hero h1 { color: #fff; font-size: 34px; }
.hero p { opacity: 0.92; font-size: 15.5px; margin-top: 8px; }
.hero .cta { margin-top: 22px; display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; }
.btn { display: inline-block; padding: 12px 22px; border-radius: 999px; font-weight: 900; font-size: 14.5px;
  border: none; cursor: pointer; }
.btn-white { background: #fff; color: var(--blue-deep); }
.btn-blue { background: var(--blue); color: #fff; }
.btn-orange { background: linear-gradient(90deg, #FF8A3D, #F65E2E); color: #fff; }
.btn-line { background: transparent; border: 1.5px solid rgba(30,60,140,0.2); color: var(--sub); }
.btn-kakao { background: #FEE500; color: #3C1E1E; }
.btn:disabled { opacity: 0.5; cursor: default; }

/* 특징 그리드 */
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; }
.feat { background: var(--card); border-radius: 18px; padding: 18px; border: 1px solid rgba(30,60,140,0.08); }
.feat .emoji { font-size: 26px; }
.feat b { display: block; margin: 8px 0 4px; font-size: 15px; }
.feat p { font-size: 13px; color: var(--sub); }

/* 혜택 배너 */
.promo { background: linear-gradient(90deg, #FFF3D6, #FFE9C4); border: 1px solid rgba(255,157,46,0.35);
  border-radius: 18px; padding: 16px 20px; margin-bottom: 14px; }
.promo b { color: #8A5A00; }
.promo p { font-size: 13.5px; color: #7A5A20; margin-top: 3px; }

/* 목록/게시판 */
.row { display: flex; justify-content: space-between; align-items: center; gap: 10px;
  padding: 12px 2px; border-bottom: 1px solid #EEF2F8; }
.row:last-child { border-bottom: none; }
.row .t { font-weight: 800; font-size: 14.5px; flex: 1; min-width: 0; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
input, textarea { width: 100%; background: #F2F5FA; border: none; border-radius: 12px;
  padding: 12px 14px; font-size: 14px; font-family: inherit; margin-bottom: 8px; }
textarea { min-height: 110px; resize: vertical; }
.msg-ok { color: var(--green); font-size: 13px; font-weight: 800; }
.msg-err { color: var(--red); font-size: 13px; font-weight: 800; }

/* FAQ */
details { background: var(--card); border-radius: 14px; padding: 14px 18px; margin-bottom: 8px;
  border: 1px solid rgba(30,60,140,0.08); }
summary { font-weight: 800; font-size: 14.5px; cursor: pointer; }
details p { margin-top: 8px; font-size: 13.5px; color: var(--sub); }

/* 푸터 */
footer { border-top: 1px solid rgba(30,60,140,0.08); padding: 26px 18px 40px; text-align: center; }
footer .links { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; margin-bottom: 10px; }
footer .links a { font-size: 12.5px; font-weight: 700; color: var(--sub); }
footer p { font-size: 11.5px; color: var(--dim); }

@media (max-width: 560px) {
  .hero { padding: 34px 18px; } .hero h1 { font-size: 27px; }
  .nav-in { padding: 10px 12px; gap: 8px; }
  .nav-links a { padding: 6px 9px; font-size: 12.5px; }
}

/* ── 대시보드 (08-26) ─────────────────────────────────────────────
   폰 작은 화면에서 못 보던 걸 큰 화면에서 보는 게 목적이라, 좁은 폭을 쓰지 않는다. */
.wide { max-width: 1180px; }
/* hidden 속성이 실제로 숨기게 한다 (08-27).
   브라우저 기본 스타일시트의 [hidden]{display:none}은 **우리가 쓴 display에 진다.**
   그래서 .dash-grid(display:grid)가 붙은 요약 패널은 hidden을 걸어도 계속 보였고,
   상세·변화 탭을 눌러도 '섭취와 소비'와 '날짜별 기록'이 그대로 남아 있었다.
   마크업만 봐서는 안 보이는 종류의 버그다 — 숨김은 어디서든 이겨야 한다. */
[hidden] { display: none !important; }

.dash-grid { display: grid; grid-template-columns: 2fr 1fr; gap: 14px; align-items: start; }
@media (max-width: 860px) { .dash-grid { grid-template-columns: 1fr; } }

.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); gap: 10px; }
.kpi { background: var(--card); border: 1px solid rgba(30,60,140,0.08); border-radius: 14px; padding: 13px 15px; }
.kpi .k { font-size: 12px; color: var(--dim); font-weight: 700; }
.kpi .v { font-size: 21px; font-weight: 900; letter-spacing: -0.5px; margin-top: 1px;
  font-variant-numeric: tabular-nums; }
.kpi .n { font-size: 12px; color: var(--sub); }
.kpi .v.up { color: var(--red); } .kpi .v.down { color: var(--green); }

.seg { display: inline-flex; background: var(--blue-soft); border-radius: 999px; padding: 3px; gap: 2px; }
.seg button { border: none; background: none; cursor: pointer; font-weight: 800; font-size: 13px;
  color: var(--sub); padding: 6px 14px; border-radius: 999px; font-family: inherit; }
.seg button.on { background: #fff; color: var(--blue-deep); box-shadow: 0 1px 4px rgba(18,48,110,0.12); }

/* 대시보드 주 탭 (08-27 형님) — 기간 선택기(.seg)와 똑같이 생겨서 화면을 통째로
   바꾸는 조작인 줄 모르고 지나쳤다. 눌러야 할 것처럼 보이게 키운다. */
.seg-main { display: flex; width: 100%; padding: 4px; gap: 4px; border-radius: 15px; }
.seg-main button { flex: 1; font-size: 15px; padding: 12px 0; border-radius: 12px; letter-spacing: -0.2px; }
.seg-main button.on { box-shadow: 0 2px 9px rgba(18,48,110,0.16); }

/* 각 탭이 무엇을 보여주는지 한 줄 — 탭 이름만으로는 '상세'와 '변화'가 어떻게 다른지 모른다. */
.seg-hint { color: var(--dim); font-size: 12.5px; margin: 9px 2px 0; }

/* 추이 그래프 끌어 보기 (08-27 형님) — 끌 수 있다는 걸 커서로 알린다.
   touch-action: pan-y 는 세로 스크롤은 브라우저에 맡기고 가로만 우리가 받겠다는 뜻이다.
   이걸 안 주면 그래프를 끌 때 페이지가 같이 흔들린다. */
#v-trend .chart { cursor: grab; touch-action: pan-y; }
#c-combo { cursor: crosshair; }

/* 범례에 색 동그라미 대신 **그 계열의 실제 선 모양**을 그린다 (08-27).
   형님이 색약이시라 색 동그라미만으로는 어느 선이 어느 것인지 맞춰볼 수가 없다. */
.legend.key span { gap: 6px; }
.legend.key svg { width: 26px; height: 12px; flex-shrink: 0; }

#c-combo { cursor: crosshair; }   /* 끌기도 되지만 주로 누르는 그래프 */

/* 고른 날의 숫자 (08-27 형님) — 선 셋을 겹치면 어느 날 값이 얼만지 눈으로 못 읽는다.
   누르면 여기에 나온다. 소모는 어디서 나왔는지까지 쪼개 보여준다 — 막대를 합치며 잃은 정보다. */
.readout { margin-top: 10px; padding: 10px 12px; background: var(--blue-soft); border-radius: 11px;
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 14px; font-size: 12.5px;
  font-variant-numeric: tabular-nums; min-height: 20px; }
.rd-day { font-weight: 800; color: var(--blue-deep); margin-right: 4px; }
.rd { display: inline-flex; align-items: baseline; gap: 5px; }
.rd i { font-style: normal; color: var(--dim); font-size: 11.5px; }
.rd b { font-weight: 800; }
.rd-sub { width: 100%; color: var(--dim); font-size: 11.5px; }
#v-trend .chart.grabbing { cursor: grabbing; }

.chart-wrap { overflow-x: auto; }
.chart { display: block; width: 100%; min-width: 460px; height: 220px; }

.legend { display: flex; gap: 14px; font-size: 12.5px; color: var(--sub); margin-top: 8px; flex-wrap: wrap; }
.legend i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }

/* 날짜별 기록 (08-27 형님) — 기간을 90일로 잡으면 목록만 화면 열 개 분량이 된다.
   높이를 묶고 안에서 스크롤한다. 한 줄도 얇게 줄여 한 번에 더 많이 보이게 했다. */
.daylist { max-height: 330px; overscroll-behavior: contain;
  display: flex; flex-direction: column; gap: 1px; background: rgba(30,60,140,0.08);
  border: 1px solid rgba(30,60,140,0.08); border-radius: 14px;
  /* 세로만 스크롤. 그냥 overflow:hidden으로 두면(둥근 모서리를 자르려던 것)
     세로 스크롤까지 같이 막혀서 목록이 잘린 채 끝난다 — 08-27에 그렇게 잡혔다. */
  overflow-x: hidden; overflow-y: auto; }
.day { background: var(--card); padding: 8px 13px; font-size: 13px; display: grid; grid-template-columns: 1fr auto auto;
  gap: 10px; align-items: center; cursor: pointer; font-size: 14px; text-align: left;
  border: none; font-family: inherit; color: inherit; width: 100%; }
.day:hover, .day:focus-visible { background: var(--blue-soft); outline: none; }
.day .d { font-weight: 800; }
.day .b { font-variant-numeric: tabular-nums; font-weight: 800; }
.day .b.plus { color: var(--red); } .day .b.minus { color: var(--green); }
.day .arrow { color: var(--dim); font-size: 12px; }

.detail { background: var(--blue-soft); padding: 12px 14px; font-size: 13px; }

/* 먹은 것·운동한 것 날짜별 나열 (08-27 형님).
   기간이 길면 항목이 수백 개가 되므로 높이를 묶고 안에서 스크롤한다.
   날짜 머리글은 위에 붙여 둔다 — 스크롤하다 보면 지금 보는 게 며칠 것인지 놓친다. */
.loglist { max-height: 420px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain;
  border: 1px solid rgba(30,60,140,0.08); border-radius: 14px; }
.logday { position: sticky; top: 0; z-index: 1; background: var(--blue-soft); color: var(--blue-deep);
  font-weight: 800; font-size: 12px; padding: 6px 12px; display: flex; justify-content: space-between;
  font-variant-numeric: tabular-nums; }
.logitem { display: grid; grid-template-columns: auto 1fr auto; gap: 8px; align-items: baseline;
  padding: 7px 12px; font-size: 13px; border-bottom: 1px solid rgba(30,60,140,0.06);
  font-variant-numeric: tabular-nums; }
.logitem:last-child { border-bottom: none; }
.logitem .t { color: var(--dim); font-size: 11.5px; min-width: 34px; }
.logitem > span:nth-child(2) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.logitem > span:last-child { font-weight: 700; }

/* 끼니 구분 (08-27 형님) — 같은 날 여러 끼니가 섞여 있어 이름만으로는 안 갈린다.
   색으로 아침·점심·저녁·간식을 구분해 훑을 때 눈에 걸리게 한다. */
.meal { display: inline-block; font-size: 10.5px; font-weight: 800; border-radius: 5px;
  padding: 1px 5px; margin-right: 6px; vertical-align: 1px; }
.meal.breakfast { background: #FFF1D6; color: #8A5A00; }
.meal.lunch     { background: #DCEBFF; color: #1E4FA8; }
.meal.dinner    { background: #E7E2FF; color: #4B36A8; }
.meal.etc       { background: #E9EDF5; color: #5B6B8C; }

/* 사진 크게 보기 (08-27 형님) — 줄 아래에 끼워 넣으니 목록이 밀려 보기 힘들었다.
   화면 위에 따로 띄운다. 사진이 세로로 길어도 화면을 안 넘치게 높이를 묶는다. */
.shot-modal { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center;
  justify-content: center; padding: 20px; background: rgba(12,26,58,0.62);
  -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); }
.shot-modal[hidden] { display: none; }
.shot-in { position: relative; background: var(--card); border-radius: 16px; padding: 14px;
  max-width: 560px; width: 100%; box-shadow: 0 18px 50px rgba(10,22,52,0.35); }
.shot-x { position: absolute; top: 8px; right: 8px; width: 30px; height: 30px; border: 0;
  border-radius: 999px; background: rgba(255,255,255,0.9); color: var(--blue-deep);
  font-size: 15px; font-weight: 800; cursor: pointer; line-height: 1; }
.shot-img { min-height: 120px; display: flex; align-items: center; justify-content: center;
  color: var(--dim); font-size: 13px; }
.shot-img img { display: block; max-width: 100%; max-height: 68vh; border-radius: 11px; }
.shot-cap { margin: 10px 2px 0; font-size: 12.5px; color: var(--dim); text-align: center;
  font-variant-numeric: tabular-nums; }
/* 모달이 떠 있는 동안 뒤 목록이 같이 스크롤되지 않게 */
body.noscroll { overflow: hidden; }

/* 사진 있는 줄 — 누를 수 있다는 걸 알려야 누른다 */
.logitem.has-shot { cursor: pointer; }
.logitem.has-shot:hover { background: var(--blue-soft); }
.cam { font-size: 10.5px; opacity: 0.65; }
.detail h4 { font-size: 13px; color: var(--blue-deep); margin: 10px 0 5px; }
.detail h4:first-child { margin-top: 0; }
.detail .line { display: flex; justify-content: space-between; gap: 12px; font-size: 13.5px;
  padding: 3px 0; border-bottom: 1px dashed rgba(30,60,140,0.12); }
.detail .line:last-child { border-bottom: none; }
.detail .line span:last-child { font-variant-numeric: tabular-nums; font-weight: 700; white-space: nowrap; }

.ai-box { background: linear-gradient(160deg, #F0F5FF, #FFFFFF); border: 1px solid rgba(61,123,255,0.22);
  border-radius: 16px; padding: 17px; }
.ai-box h3 { font-size: 14.5px; color: var(--blue-deep); margin-bottom: 7px; }
.ai-box p { font-size: 14.5px; line-height: 1.72; white-space: pre-wrap; }

/* ── 포인트 쇼핑몰 ───────────────────────────────────────────── */
.shop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
.item { background: var(--card); border: 1px solid rgba(30,60,140,0.08); border-radius: 16px;
  padding: 16px; display: flex; flex-direction: column; gap: 7px; }
.item .emoji { font-size: 38px; line-height: 1; }
.item .nm { font-weight: 800; font-size: 14.5px; }
.item .ds { font-size: 12.5px; color: var(--sub); flex: 1; }
.item .pr { font-weight: 900; font-size: 16px; color: var(--blue-deep); font-variant-numeric: tabular-nums; }
.item .short { font-size: 12px; color: var(--orange); font-weight: 700; }
.item button { width: 100%; }
.item.locked { opacity: 0.62; }

.bal { display: flex; align-items: baseline; gap: 8px; }
.bal .n { font-size: 30px; font-weight: 900; color: var(--blue-deep); font-variant-numeric: tabular-nums; }

dialog.sheet { border: none; border-radius: 18px; padding: 0; max-width: 420px; width: calc(100% - 32px);
  box-shadow: 0 24px 60px rgba(18,48,110,0.24); }
dialog.sheet::backdrop { background: rgba(18,48,110,0.38); }
dialog.sheet .in { padding: 20px; display: flex; flex-direction: column; gap: 11px; }
dialog.sheet input, dialog.sheet textarea { width: 100%; padding: 11px 13px; border-radius: 11px;
  border: 1px solid rgba(30,60,140,0.18); font-size: 14.5px; font-family: inherit; }
dialog.sheet input:focus, dialog.sheet textarea:focus { outline: 2px solid var(--blue); border-color: transparent; }

/* 애플 로그인 (08-26) — 애플 심사 지침상 검정 바탕에 흰 글씨가 표준이다 */
.btn-apple { background: #000; color: #fff; }

/* 대시보드 표 (08-26 상세·변화 탭) */
/* 날짜별 상세 (08-27 형님) — 90일을 잡으면 표만 화면 여러 개 분량이 된다.
   높이를 묶고 안에서 스크롤한다. 가로는 좁은 화면에서 열이 잘리지 않게 그대로 둔다. */
.tblbox { max-height: 380px; overflow: auto; overscroll-behavior: contain;
  border: 1px solid rgba(30,60,140,0.08); border-radius: 14px; }

/* 머리글은 위에 붙여 둔다 — 스크롤하다 보면 어느 열이 섭취고 어느 열이 소모인지 놓친다.
   thead가 아니라 tbody 첫 줄이라 th 자체에 건다. */
.tblbox .tbl th { position: sticky; top: 0; z-index: 1; background: var(--card); }

.tbl { width: 100%; border-collapse: collapse; font-size: 12.5px; min-width: 460px; }
.tbl td, .tbl th { padding: 6px 9px; border-bottom: 1px solid rgba(30,60,140,0.08); text-align: right;
  font-variant-numeric: tabular-nums; white-space: nowrap; }
.tbl td:first-child, .tbl th:first-child { text-align: left; font-weight: 800; }
.tbl thead th { font-size: 11.5px; color: var(--dim); font-weight: 700; border-bottom-width: 2px; }
.tbl tr.click { cursor: pointer; }
.tbl tr.click:hover { background: var(--blue-soft); }
.tbl .plus { color: var(--red); font-weight: 800; }
.tbl .minus { color: var(--green); font-weight: 800; }
.tbl td.sub-row { text-align: left; background: var(--blue-soft); font-size: 12.5px; white-space: normal; }


/* 자유게시판 댓글 (08-27 형님) */
.cmt-wrap { margin-top: 18px; padding-top: 14px; border-top: 1px solid rgba(30,60,140,0.1); }
.cmt-h { font-size: 13.5px; color: var(--blue-deep); margin: 0 0 10px; }
.cmt { position: relative; padding: 9px 0; border-bottom: 1px solid rgba(30,60,140,0.06); }
.cmt:last-child { border-bottom: none; }
.cmt-top { display: flex; gap: 8px; align-items: baseline; font-size: 12.5px; }
.cmt-top b { color: var(--blue-deep); }
.cmt-top .dim { font-size: 11.5px; font-variant-numeric: tabular-nums; }
.cmt p { margin: 4px 0 0; font-size: 13.5px; white-space: pre-wrap; word-break: break-word;
  padding-right: 42px; }   /* 지우기 버튼 자리 — 긴 글이 버튼 밑으로 들어가지 않게 */
.cmt-del { position: absolute; top: 8px; right: 0; border: 0; background: none; cursor: pointer;
  color: var(--dim); font-size: 11.5px; font-weight: 700; padding: 2px 4px; }
.cmt-del:hover { color: var(--red); }
