/* 12주 커리큘럼: 측정 접수·보고서·회원 화면·홈 추가 섹션. tokens-v3.css 위에 얹는다 — 새 색은 만들지 않는다. */

/* display:grid 등을 준 요소도 hidden 속성이 이기게 한다. */
.mto [hidden] { display: none !important; }

.page-head { padding: clamp(2rem, 1.2rem + 4cqi, 4rem) var(--pad) 1.5rem; background: var(--bg-band); border-bottom: var(--rule); }
.page-head .eyebrow { color: var(--ink-dim); margin-bottom: 0.75rem; }
.page-head p { max-width: 58ch; margin-top: 1rem; color: var(--ink-dim); }

/* 진행 단계 — 그리드 셀 안의 큰 번호 */
.step__no { font-family: var(--font-display); font-weight: 900; font-size: var(--t-h2); line-height: 1; color: var(--accent-text); }
.step__meta { color: var(--ink-dim); font-size: var(--t-small); }

/* ---------------------------------------------------------------- 폼 */
.form { display: grid; gap: 1px; background: var(--rule-color); border-bottom: var(--rule); }
.form fieldset { border: 0; min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 1px; background: var(--rule-color); }
.form legend { display: contents; }
.form__label { padding: var(--pad); background: var(--bg); display: grid; align-content: start; gap: 0.6rem; }
.form__label .step__no { font-size: var(--t-h3); }
.form__label p { color: var(--ink-dim); font-size: var(--t-small); max-width: 34ch; }
.form__body { padding: var(--pad); background: var(--bg); display: grid; gap: 1.5rem; align-content: start; }
.field { display: grid; gap: 0.5rem; }
.field > span, .field > .field__name { font-weight: 700; }
.field small { color: var(--ink-dim); font-size: var(--t-small); }
.field input[type="text"], .field input[type="tel"], .field input[type="number"], .field textarea {
  width: 100%; min-height: 48px; padding: 0.7rem 0.9rem;
  font: inherit; color: var(--ink); background: var(--bg-band);
  border: var(--rule); border-radius: var(--radius-btn);
}
.field textarea { min-height: 88px; resize: vertical; }
.field input:focus-visible, .field textarea:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 1px; }
.row-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }

/* 선택 칩 — 라디오·체크박스를 버튼처럼 */
.chips { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.chip { position: relative; }
.chip input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.chip span {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px;
  border: var(--rule); border-radius: var(--radius-btn); background: var(--bg-band);
  font-family: var(--font-mono); font-size: var(--t-mono); font-weight: 500;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.chip input:checked + span { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.chip input:focus-visible + span { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* 파일 업로드 */
.upload { display: grid; gap: 0.5rem; padding: 1rem; border: 1px dashed var(--rule-color); border-radius: var(--radius-btn); background: var(--bg-band); }
.upload input[type="file"] { font: inherit; color: var(--ink-dim); max-width: 100%; }
.upload input[type="file"]::file-selector-button {
  margin-right: 0.8rem; min-height: 41px; padding: 0 17px; border: 0; border-radius: var(--radius-btn);
  background: var(--bg-raised); color: var(--ink); font-family: var(--font-mono); cursor: pointer;
}
.upload__list { color: var(--ink-dim); font-size: var(--t-small); }

/* 동의 */
.consent { display: grid; gap: 0.5rem; padding-bottom: 1rem; border-bottom: var(--rule); }
.consent:last-child { border-bottom: 0; padding-bottom: 0; }
.check { display: flex; gap: 0.7rem; align-items: flex-start; font-weight: 700; cursor: pointer; }
.check input { width: 20px; height: 20px; margin-top: 2px; accent-color: var(--accent); flex: none; }
.consent details { color: var(--ink-dim); font-size: var(--t-small); padding-left: 2rem; }
.consent summary { cursor: pointer; width: fit-content; }
.consent dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 0.35rem 1rem; margin-top: 0.6rem; }

.form__submit { display: grid; gap: 1rem; justify-items: start; padding: var(--pad); background: var(--bg); }
/* 동의 — 큰 칸 대신 제출 버튼 위 작은 줄글 */
.agree { display: grid; gap: 0.45rem; width: 100%; padding-bottom: 1rem; border-bottom: var(--rule); color: var(--ink-dim); font-size: var(--t-small); }
.agree label { display: flex; gap: 0.55rem; align-items: center; cursor: pointer; }
.agree input { width: 16px; height: 16px; accent-color: var(--accent); flex: none; margin: 0; }
.agree .agree__all { color: var(--ink); font-weight: 700; padding-bottom: 0.35rem; }
.agree p { margin: 0.2rem 0 0; }
.agree a { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
.form__error { color: var(--accent-text); font-weight: 700; }
.form__error:empty { display: none; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.btn[disabled] { opacity: 0.5; cursor: progress; }

.done { display: grid; gap: 1rem; justify-items: start; padding: clamp(2rem, 1rem + 5cqi, 5rem) var(--pad); background: var(--bg); border-bottom: var(--rule); }
.done p { max-width: 52ch; color: var(--ink-dim); }
.receipt { font-family: var(--font-mono); font-size: var(--t-h4); color: var(--accent-text); }

@container (max-width: 760px) {
  .form fieldset { grid-template-columns: minmax(0, 1fr); }
  .row-2 { grid-template-columns: minmax(0, 1fr); }
}

/* ---------------------------------------------------------------- 보고서 */
.report-flag { padding: 0.7rem var(--pad); background: var(--accent); color: var(--on-accent); font-weight: 700; }
.report-cover { display: grid; gap: 1.25rem; padding: clamp(2rem, 1rem + 5cqi, 5rem) var(--pad); background: var(--bg-band); border-bottom: var(--rule); }
.report-cover dl { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--rule-color); border: var(--rule); }
.report-cover dl > div { padding: 0.9rem 1rem; background: var(--bg-band); display: grid; gap: 0.3rem; }
.report-cover dt { color: var(--ink-dim); font-size: var(--t-small); }
.report-cover dd { font-weight: 700; }

.r-sec { border-bottom: var(--rule); scroll-margin-top: 80px; }
/* 표지 아래 바로가기 — 선택 칩과 같은 모양 */
.r-jump { display: flex; flex-wrap: wrap; gap: 0.5rem; padding: 1rem var(--pad); border-bottom: var(--rule); }
.r-jump a {
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 16px;
  border: var(--rule); border-radius: var(--radius-btn); background: var(--bg-band);
  font-size: var(--t-small); font-weight: 700;
}
.r-jump a:first-child { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.r-jump a:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }
/* 예시 보고서 끝 — 가입·접수로 */
.r-cta { display: grid; gap: 1rem; justify-items: start; padding: clamp(2rem, 1rem + 5cqi, 4rem) var(--pad); background: var(--bg-band); border-bottom: var(--rule); }
.r-cta p:not(.eyebrow) { max-width: 52ch; color: var(--ink-dim); }
.r-sec__head { display: flex; align-items: baseline; gap: 1rem; padding: 1.25rem var(--pad); background: var(--bg-band); border-bottom: var(--rule); }
.r-sec__head .mono { color: var(--ink-dim); }
.r-lead { padding: var(--pad); max-width: 60ch; font-size: var(--t-h5); line-height: 1.5; }

.targets { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--rule-color); border-top: var(--rule); }
.target { padding: var(--pad); background: var(--bg); display: grid; gap: 0.5rem; }
.target__label { color: var(--ink-dim); }
.target__nums { font-family: var(--font-display); font-weight: 900; font-size: var(--t-h3); line-height: 1; }
.target__nums .accent { color: var(--accent-text); }
.target__unit { color: var(--ink-dim); font-size: var(--t-small); }

.metrics { width: 100%; border-collapse: collapse; }
.metrics th, .metrics td { padding: 0.9rem var(--pad); text-align: left; vertical-align: top; border-bottom: var(--rule); }
.metrics thead th { color: var(--ink-dim); font-weight: 500; font-size: var(--t-small); background: var(--bg-band); }
.metrics td.num { white-space: nowrap; font-weight: 700; }
.metrics .src { color: var(--ink-dim); font-size: var(--t-small); display: block; }
.pill { display: inline-block; padding: 0.15rem 0.55rem; border-radius: 999px; border: var(--rule); font-size: var(--t-small); white-space: nowrap; }
.pill--above, .pill--caution { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }

.phases { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--rule-color); }
.phase { padding: var(--pad); background: var(--bg); display: grid; gap: 0.9rem; align-content: start; }
.phase__weeks { color: var(--accent-text); }
.phase dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 0.4rem 1rem; font-size: var(--t-small); }
.phase dt { color: var(--ink-dim); }

.week-goal { padding: var(--pad); display: flex; flex-wrap: wrap; gap: 0.5rem 1.5rem; align-items: baseline; }
.week-goal strong { font-family: var(--font-display); font-weight: 900; font-size: var(--t-h4); color: var(--accent-text); }
.sessions { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 1px; background: var(--rule-color); border-top: var(--rule); }
.session { background: var(--bg); display: grid; align-content: start; }
.session h3 { padding: 1rem var(--pad); border-bottom: var(--rule); }
.session ol { counter-reset: ex; }
.session li { counter-increment: ex; display: grid; grid-template-columns: 2rem minmax(0, 1fr); gap: 0.2rem 0.6rem; padding: 0.85rem var(--pad); border-bottom: var(--rule); }
.session li::before { content: counter(ex, decimal-leading-zero); grid-row: span 2; font-family: var(--font-mono); color: var(--ink-dim); }
.session li a { font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.session li a:hover { color: var(--accent-text); }
.session li a .go { display: inline-block; margin-left: 0.5rem; font-weight: 500; font-size: var(--t-small); color: var(--accent-text); text-decoration: none; white-space: nowrap; }
.session .meta { color: var(--ink-dim); font-size: var(--t-small); }
.session .cardio { padding: 0.9rem var(--pad); font-size: var(--t-small); color: var(--ink-dim); }
/* 2026-09-30: 준비운동·정리 스트레칭 줄 — 근력 목록 위아래에 붙는다 */
.session .warmup { border-bottom: var(--rule); }
.session .cooldown { border-top: var(--rule); }
.session .cardio a { color: var(--ink); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.session .cardio a:hover, .phase dd a:hover { color: var(--accent-text); }
/* 다음 운동·달력 칸에도 쓰인다 — .session 안으로 묶으면 제목과 운동 이름이 붙어 보인다 */
.step-label { display: inline-block; margin-right: 0.5rem; font-family: var(--font-mono); font-size: 0.75rem; letter-spacing: 0.04em; color: var(--accent-text); text-transform: uppercase; }
.phase dd a { font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.phase dd .extra { display: block; color: var(--ink-dim); font-size: var(--t-small); }

.coach { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 1px; background: var(--rule-color); }
.coach > * { padding: var(--pad); background: var(--bg); }
.coach blockquote { font-size: var(--t-h5); line-height: 1.55; }
.coach ul { display: grid; gap: 0.5rem; margin-top: 1rem; }
.coach li::before { content: "— "; color: var(--accent-text); }
.notice { padding: var(--pad); color: var(--ink-dim); font-size: var(--t-small); }
.report-state { padding: clamp(3rem, 2rem + 5cqi, 6rem) var(--pad); display: grid; gap: 1rem; justify-items: start; }

@container (max-width: 760px) {
  .report-cover dl { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .targets, .phases, .coach { grid-template-columns: minmax(0, 1fr); }
  .metrics thead { display: none; }
  .metrics, .metrics tbody, .metrics tr, .metrics td { display: block; width: 100%; }
  .metrics tr { padding: 0.9rem var(--pad); border-bottom: var(--rule); display: grid; gap: 0.3rem; }
  .metrics td { padding: 0; border: 0; }
}

@media print {
  .site-head, .head-wrap, .site-foot, .report-actions { display: none !important; }
}

.site-foot .legal, .legal { max-width: 70ch; color: var(--ink-dim); font-size: 0.75rem; }
.legal a { text-decoration: underline; text-underline-offset: 3px; }

/* ---------------------------------------------------------------- 회원 (카카오 로그인) */
.preview-flag { padding: 0.6rem var(--pad); background: var(--bg-raised); color: var(--ink-dim); font-size: var(--t-small); border-bottom: var(--rule); }
.auth { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 1px; background: var(--rule-color); border-bottom: var(--rule); }
.auth > * { background: var(--bg); padding: clamp(2rem, 1rem + 4cqi, 4rem) var(--pad); display: grid; gap: 1.5rem; align-content: start; }
.auth__perks { display: grid; gap: 0; border-top: var(--rule); }
.auth__perks li { display: grid; grid-template-columns: 2.5rem minmax(0, 1fr); gap: 0.2rem 0.5rem; padding: 1rem 0; border-bottom: var(--rule); }
.auth__perks li > span:first-child { grid-row: span 2; font-family: var(--font-mono); color: var(--accent-text); }
.auth__perks small { color: var(--ink-dim); font-size: var(--t-small); }
.auth__card { justify-items: stretch; }
.auth__card > * { max-width: 420px; }
.auth__note { color: var(--ink-dim); font-size: var(--t-small); }
.auth__note a { text-decoration: underline; text-underline-offset: 3px; }

/* 카카오 로그인 버튼 — 카카오 디자인 가이드의 고정 색. 사이트 팔레트 예외는 이것 하나. */
.btn-kakao {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.6rem;
  width: 100%; min-height: 52px; padding: 0 1rem; border-radius: 12px;
  background: #FEE500; color: rgba(0, 0, 0, 0.85);
  font-family: var(--font-body); font-size: 1rem; font-weight: 700; text-decoration: none;
}
.btn-kakao svg { width: 20px; height: 20px; flex: none; }
.btn-kakao:hover { background: #F5DC00; }
.btn-kakao[disabled] { opacity: 0.6; cursor: progress; }

.switch { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: 1rem 0; border-bottom: var(--rule); }
.switch:last-child { border-bottom: 0; }
.switch small { display: block; color: var(--ink-dim); font-size: var(--t-small); margin-top: 0.2rem; }
.switch input { appearance: none; flex: none; width: 48px; height: 28px; border-radius: 999px; background: var(--bg-raised); border: var(--rule); position: relative; cursor: pointer; transition: background-color var(--dur) var(--ease); }
.switch input::after { content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: var(--ink-dim); transition: transform var(--dur) var(--ease), background-color var(--dur) var(--ease); }
.switch input:checked { background: var(--accent); border-color: var(--accent); }
.switch input:checked::after { transform: translateX(20px); background: var(--on-accent); }
.switch input:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }

/* 마이페이지 */
.me-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: end; gap: 1rem; }
.stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--rule-color); border-bottom: var(--rule); }
.stat { background: var(--bg); padding: var(--pad); display: grid; gap: 0.6rem; align-content: start; }
.stat__label { color: var(--ink-dim); font-size: var(--t-small); }
.stat__value { font-family: var(--font-display); font-weight: 900; font-size: var(--t-h3); line-height: 1; }
.stat__value .accent { color: var(--accent-text); }
.meter { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 3px; }
.meter i { height: 8px; background: var(--bg-raised); }
.meter i.on { background: var(--accent); }
.meter i.now { background: var(--ink); }
.dots { display: flex; gap: 6px; }
.dots i { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--accent); }
.dots i.on { background: var(--accent); }
.rows { display: grid; }
.rows a, .rows div.row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 0.3rem 1rem; align-items: center; padding: 1rem var(--pad); border-bottom: var(--rule); }
.rows a:hover { background: var(--bg-raised); }
.rows small { color: var(--ink-dim); font-size: var(--t-small); grid-column: 1; }
.rows .go { grid-row: span 2; grid-column: 2; color: var(--accent-text); font-family: var(--font-mono); }

@container (max-width: 760px) {
  .auth, .stats { grid-template-columns: minmax(0, 1fr); }
}
.consent__more { padding-left: 2rem; width: fit-content; color: var(--ink-dim); font-size: var(--t-small); text-decoration: underline; text-underline-offset: 3px; }
.form__label a { text-decoration: underline; text-underline-offset: 3px; }

/* 개인정보 처리방침 */
.policy { display: grid; }
.policy section { display: grid; gap: 0.9rem; padding: var(--pad); border-bottom: var(--rule); scroll-margin-top: 1rem; }
.policy section:target { background: var(--bg-raised); }
.policy dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 0.5rem 1.5rem; max-width: 70ch; }
.policy dt { color: var(--ink-dim); }
.policy p { max-width: 70ch; color: var(--ink-dim); }
.policy a { text-decoration: underline; text-underline-offset: 3px; }
@container (max-width: 760px) { .policy dl { grid-template-columns: minmax(0, 1fr); gap: 0.2rem; } .policy dd { margin-bottom: 0.6rem; } }

/* 홈 첫 화면(front-v3 .panel--default) 추가 요소 */
.panel__lead { max-width: 46ch; color: var(--ink); }
.panel__cta { display: flex; flex-wrap: wrap; gap: 0.6rem; }
.band--accent .btn + .btn { margin-top: 0.6rem; }

/* ========================================================================== */
/* 12주 달력 (2026-09-30) — 월별 7열 격자, 회차는 단계 색, 누르면 아래 상세         */
/* ========================================================================== */
.cal-legend { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; padding: 0 var(--pad) 1rem; font-size: var(--t-small); color: var(--ink-dim); }
.cal-key::before { content: ""; display: inline-block; width: 10px; height: 10px; margin-right: 0.4rem; border-radius: 2px; background: var(--bg-raised); vertical-align: -1px; }
.cal-key--adapt::before { background: #6b8f5e; } .cal-key--build::before { background: var(--accent); } .cal-key--focus::before { background: #d9534f; }
.cal-key--cardio::before { background: transparent; box-shadow: inset 0 0 0 1.5px var(--ink-dim); } .cal-key--remeasure::before { background: #fff; border-radius: 50%; }
.cal-months { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); gap: 1px; background: var(--rule-color); border-top: var(--rule); }
.cal-month { background: var(--bg); padding: 1rem var(--pad) 1.25rem; }
.cal-month h3 { margin-bottom: 0.75rem; }
.cal-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; }
.cal-wd { text-align: center; font-size: 0.7rem; color: var(--ink-dim); padding-bottom: 2px; }
.cal-wd:first-child { color: #d9534f; }
.cal-cell { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; aspect-ratio: 1; min-height: 40px; border-radius: 6px; background: var(--bg-raised); color: var(--ink-dim); font: inherit; border: 0; padding: 0; }
.cal-cell--pad { background: transparent; }
.cal-cell--out { opacity: 0.35; }
.cal-num { font-size: 0.8rem; line-height: 1; }
.cal-tag { font-size: 0.7rem; font-weight: 700; line-height: 1; }
button.cal-cell { cursor: pointer; color: #111; transition: transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease); }
button.cal-cell:hover, button.cal-cell:focus-visible { transform: translateY(-1px); box-shadow: 0 0 0 2px var(--ink); outline: 0; }
.cal-cell--strength.cal-cell--adapt { background: #6b8f5e; color: #fff; }
.cal-cell--strength.cal-cell--build { background: var(--accent); }
.cal-cell--strength.cal-cell--focus { background: #d9534f; color: #fff; }
.cal-cell--cardio { background: transparent; box-shadow: inset 0 0 0 1.5px var(--ink-dim); color: var(--ink); }
.cal-cell--remeasure { background: #fff; color: #111; }
.cal-cell--today .cal-num { text-decoration: underline; text-underline-offset: 2px; }
.cal-cell.is-selected { box-shadow: 0 0 0 2px var(--ink); }
.cal-dot { position: absolute; top: 3px; right: 3px; width: 6px; height: 6px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 1px #111; }
.cal-detail { border-top: var(--rule); padding: 1rem var(--pad) 1.5rem; }
.cal-detail .eyebrow { margin-bottom: 0.5rem; }
.cal-day { padding: 0.75rem 0; border-top: 1px dashed var(--rule-color); }
.cal-day:first-of-type { border-top: 0; }
.cal-day ol { margin: 0.4rem 0; padding-left: 1.2rem; }
.cal-day li { padding: 0.15rem 0; }
.cal-day li a { font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.cal-day .cardio { padding: 0.35rem 0; font-size: var(--t-small); color: var(--ink-dim); }
.cal-day .cardio a { color: var(--ink); font-weight: 700; text-decoration: underline; text-underline-offset: 3px; }
.cal-day--remeasure h3 { color: var(--accent-text); }
@container (max-width: 420px) { .cal-grid { gap: 3px; } .cal-cell { min-height: 36px; border-radius: 5px; } .cal-tag { font-size: 0.62rem; } }

/* 04 일별 커리큘럼 (2026-09-30) — 1일차부터 전체가 접힌 목록, 오늘 이후 첫 회차만 열림 */
.days { border-top: var(--rule); }
.days__phase { padding: 1rem var(--pad) 0.5rem; }
.days__phase .meta { font-family: var(--font-body); font-weight: 400; font-size: var(--t-small); color: var(--ink-dim); }
.day { border-bottom: var(--rule); }
.day summary { display: flex; align-items: center; gap: 0.75rem; padding: 0.8rem var(--pad); cursor: pointer; list-style: none; }
.day summary::-webkit-details-marker { display: none; }
.day summary::after { content: "+"; margin-left: auto; font-family: var(--font-mono); color: var(--ink-dim); }
.day[open] summary::after { content: "−"; }
.day summary:hover { background: var(--bg-raised); }
.day__date { min-width: 5.5em; font-size: 0.8rem; color: var(--ink-dim); }
.day__title { font-weight: 700; }
.day__today { font-size: 0.7rem; padding: 2px 6px; border-radius: 4px; background: var(--accent); color: var(--on-accent); }
.day--strength.day--adapt .day__date { color: #8fb282; } .day--strength.day--build .day__date { color: var(--accent-text); } .day--strength.day--focus .day__date { color: #e0716d; }
.day--cardio summary, .day--remeasure summary { color: var(--ink-dim); }
.day--remeasure .day__title { color: var(--accent-text); }
.day .cal-day { padding: 0 var(--pad) 1rem; border-top: 0; }
.day .cal-day ol { padding-left: 1.4rem; }

/* 04 다음 운동 — 회원 첫 화면. 07 전체 일정은 접힘 */
.next { padding: 1rem var(--pad) 1.5rem; }
.next .eyebrow { margin-bottom: 0.4rem; }
.next h3 { margin-bottom: 0.75rem; }
.next .cal-day { padding: 0; border-top: 0; }
.next .cal-day ol { padding-left: 1.4rem; }
.next .cal-day li { padding: 0.35rem 0; font-size: 1.05rem; }
.next .cal-day li .meta { display: block; margin-left: 0; }
.next .cal-day .cardio { font-size: var(--t-body); color: var(--ink); padding: 0.5rem 0; border-top: 1px dashed var(--rule-color); }
.next__extra { border-top: 1px dashed var(--rule-color); }
.next__after { margin-top: 1rem; padding-top: 0.75rem; border-top: var(--rule); color: var(--ink-dim); font-size: var(--t-small); }
.full__toggle { padding: 0 var(--pad) 1rem; }
.full { border-top: var(--rule); }
.full .r-sec { border-top: 0; }

/* 재측정 — 접어 둔 정보(fold) + 마이페이지 '다음 측정' (2026-09-30) */
.fold { border-bottom: var(--rule); }
.fold > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.4rem 0.9rem; padding: 1rem var(--pad); cursor: pointer; list-style: none; }
.fold > summary::-webkit-details-marker { display: none; }
.fold__title { font-weight: 700; }
.fold__sum { color: var(--ink-dim); font-size: var(--t-small); }
.fold__edit { margin-left: auto; font-family: var(--font-mono); font-size: 0.75rem; color: var(--accent-text); }
.fold[open] > summary .fold__edit { visibility: hidden; }
.fold--agree { width: 100%; border-bottom: 0; }
.fold--agree > summary { padding-inline: 0; }
.measure { display: grid; gap: 0.9rem; padding: 1rem var(--pad) 1.5rem; }
.measure__date { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; }
.measure__date label { font-weight: 700; }
.measure__date input[type="date"] { min-height: 41px; padding: 0 12px; border: 1px solid var(--rule-color); border-radius: var(--radius-btn); background: var(--bg-raised); color: var(--ink); font: inherit; color-scheme: dark; }
.measure__note { flex-basis: 100%; color: var(--ink-dim); font-size: var(--t-small); }
.measure__upload { justify-self: start; }

/* ==========================================================================
   운동 행 목록 (2026-09-30) — 밑줄 글자 링크 대신 썸네일 달린 큰 터치 행.
   위에서 아래로 순서대로 누르면 되는 체크리스트. 행 높이 72px 이상.
   ========================================================================== */
.xlist { display: grid; gap: 8px; }
.next .xlist { margin-top: 0.25rem; }
.day .xlist, .cal-detail .xlist { padding: 0 var(--pad) 1rem; }
.cal-detail .xlist { padding-inline: 0; }
.xrow { display: grid; grid-template-columns: 56px minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 72px; padding: 8px 12px 8px 8px; border-radius: 10px; background: var(--bg-raised); color: var(--ink); text-decoration: none; transition: background-color .15s ease, transform .12s ease; }
a.xrow:active { transform: scale(.985); background: var(--bg-hover); }
@media (hover: hover) and (pointer: fine) { a.xrow:hover { background: var(--bg-hover); } a.xrow:hover .xrow__go { transform: translateX(3px); color: var(--accent); } }
a.xrow:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.xrow__img { width: 56px; height: 56px; border-radius: 8px; object-fit: cover; object-position: center 35%; background: var(--bg-band); }
.xrow__img--none { display: grid; place-items: center; font-family: var(--font-display); font-size: 1.25rem; color: var(--ink-dim); }
.xrow__text { display: grid; gap: 2px; min-width: 0; }
.xrow__label { font-family: var(--font-mono); font-size: 0.7rem; letter-spacing: 0.04em; color: var(--accent-text); }
.xrow__name { font-size: 1.05rem; font-weight: 700; line-height: 1.25; }
.xrow__sub { font-size: 0.875rem; color: var(--ink-dim); }
.xrow__go { font-size: 1.6rem; line-height: 1; color: var(--ink-dim); transition: transform .15s ease, color .15s ease; }
div.xrow .xrow__go { visibility: hidden; }

.next__guide { margin: 0.1rem 0 0.9rem; font-size: 1.125rem; font-weight: 700; line-height: 1.4; color: var(--ink); }

/* ==========================================================================
   분석 보고서 = 흰 종이 한 장 (2026-09-30)
   다크 운동 화면과 구분되게, 기존 PDF 보고서처럼 밝은 문서로 분리한다.
   .paper 안에서는 색 토큰만 밝은 값으로 바꿔 기존 구역 스타일을 그대로 쓴다.
   ========================================================================== */
.paper-wrap { background: var(--bg-band); padding: 0 0 clamp(1.5rem, 4cqi, 3rem); border-bottom: var(--rule); scroll-margin-top: 80px; }
.paper-wrap__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0.75rem; padding-right: var(--pad); }
.paper-wrap__head .r-sec__head { border-bottom: 0; }
.paper {
  --bg: #ffffff; --bg-band: #f6f4ef; --bg-raised: #efece6;
  --ink: #17171a; --ink-dim: #5d5b57; --rule-color: #d9d5cc; --rule: 1px solid var(--rule-color);
  --accent-text: #9a5a10; --on-accent: #17171a;
  max-width: 860px; margin: 0.5rem auto 0; background: var(--bg); color: var(--ink);
  border-radius: 6px; overflow: hidden; box-shadow: 0 1px 0 rgb(255 255 255 / .06), 0 18px 50px rgb(0 0 0 / .55);
}
@container (max-width: 900px) { .paper { margin-inline: 12px; } }
.paper .report-cover { background: var(--bg); border-bottom: 3px solid var(--ink); padding: clamp(1.5rem, 1rem + 3cqi, 3rem) var(--pad) var(--pad); gap: 0.9rem; }
.paper__brand { display: flex; align-items: baseline; gap: 0.5rem; font-family: var(--font-display); font-weight: 900; font-size: 1.125rem; letter-spacing: -0.01em; }
.paper__brand span { font-family: var(--font-body); font-weight: 500; font-size: 0.8rem; color: var(--ink-dim); }
.paper .report-cover .eyebrow { color: var(--accent-text); }
.paper .report-cover dl { background: var(--rule-color); border: var(--rule); }
.paper .report-cover dl > div { background: var(--bg-band); }
.paper .r-sec { border-bottom: var(--rule); }
.paper .r-sec__head { background: var(--bg); border-bottom: var(--rule); }
.paper .r-sec__head .mono { color: var(--accent-text); }
.paper .target, .paper .coach > * { background: var(--bg); }
.paper .target__nums .accent, .paper .accent { color: var(--accent-text); }
.paper .metrics thead th { background: var(--bg-band); }
.paper .pill { border-color: var(--rule-color); color: var(--ink); }
.paper .pill--above, .paper .pill--caution { background: #f3c98f; border-color: #e0a85c; color: #3a2204; }
.paper .report-state { background: var(--bg); color: var(--ink); }
.paper__foot { padding: 0.9rem var(--pad); font-size: 0.78rem; color: var(--ink-dim); background: var(--bg-band); }
@container (max-width: 760px) {
  .paper .report-cover dl { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .paper-wrap__head .paper__print { margin-left: var(--pad); margin-bottom: 0.5rem; }
}

/* 인쇄·PDF 저장: 종이 보고서만 남긴다 */
@media print {
  .report-flag, .r-jump, .r-cta, #report > .r-sec, .paper-wrap__head, .skip-link { display: none !important; }
  .paper-wrap { padding: 0; background: #fff; border: 0; }
  .paper { max-width: none; margin: 0; box-shadow: none; border-radius: 0; }
  .mto, body { background: #fff !important; }
  /* 구역 전체를 묶으면 '지금 내 몸' 표가 통째로 다음 쪽으로 밀려 1쪽이 빈다 — 줄·카드 단위로만 묶는다 */
  .paper .metrics tr, .paper .target, .paper .coach, .paper .r-sec__head { break-inside: avoid; }
  .paper .r-sec__head { break-after: avoid; }
  @page { size: A4; margin: 12mm; }
  /* A4 폭은 760px 보다 좁아 모바일(세로 쌓기) 규칙이 걸린다 — 인쇄에서는 표·3칸 카드를 데스크톱 모양으로 되돌린다 */
  .paper .report-cover dl { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .paper .targets { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .paper .coach { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); }
  .paper .metrics { display: table; width: 100%; font-size: 0.85rem; }
  .paper .metrics thead { display: table-header-group; }
  .paper .metrics tbody { display: table-row-group; }
  .paper .metrics tr { display: table-row; padding: 0; border: 0; }
  .paper .metrics th, .paper .metrics td { display: table-cell; width: auto; padding: 0.55rem 0.7rem; border-bottom: var(--rule); }
  .paper .report-cover { padding-top: 0.5rem; }
  .paper .r-lead { font-size: 1rem; }
}

/* ==========================================================================
   분석 보고서 차트 (2026-09-30) — 종이(.paper) 안 전용.
   한 색조(갈색) 옅은·짙은 두 단계 + 중립 회색. 상태는 색만이 아니라 글자로도 말한다.
   점은 지름 12px + 2px 종이색 테두리, 막대 두께 12px, 격자는 1px 옅은 선.
   ========================================================================== */
.chart { --c-ink: #17171a; --c-dim: #5d5b57; --c-track: #ece8df; --c-band: #ecc99a; --c-strong: #8a4d0a; --c-alert: #b3400e; --c-grid: #ddd8ce;
  margin: 0; padding: 1.1rem var(--pad) 1.3rem; border-top: var(--rule); display: grid; gap: 1.15rem; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.r-sec > .chart:first-of-type { border-top: 0; }
.chart__title { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 0.4rem 1rem; font-weight: 700; color: var(--c-ink); }
.chart__legend { display: inline-flex; align-items: center; gap: 0.4rem; font-weight: 400; font-size: 0.8rem; color: var(--c-dim); }
.chart__key { display: inline-block; width: 12px; height: 12px; margin-left: 0.5rem; border-radius: 50%; }
.chart__key--band { width: 18px; height: 8px; border-radius: 2px; background: var(--c-band); }
.chart__key--dot, .chart__key--to { background: var(--c-ink); }
.chart__key--from { background: var(--c-band); box-shadow: inset 0 0 0 1px #c99a5c; }
.chart__key--to { background: var(--c-strong); }
.rng { display: grid; grid-template-columns: minmax(84px, 1.1fr) minmax(0, 4fr) minmax(74px, 0.9fr); align-items: center; gap: 12px; }
.rng__name { font-weight: 700; font-size: 0.95rem; line-height: 1.25; color: var(--c-ink); }
.rng__name span { display: block; font-weight: 400; font-size: 0.75rem; color: var(--c-dim); }
.rng__val { text-align: right; line-height: 1.25; color: var(--c-ink); }
.rng__val strong { display: block; font-size: 0.95rem; font-variant-numeric: tabular-nums; }
.rng__val span { font-size: 0.75rem; color: var(--c-dim); }
.rng__val .is-out { color: var(--c-alert); font-weight: 700; }
.rng__track { position: relative; height: 12px; margin: 4px 8px 20px; border-radius: 6px; background: var(--c-track); }
.rng__track--bare { background: transparent; }
.rng__track--bare::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: var(--c-grid); }
.rng__track--grid { background: transparent; border-radius: 0; }
.rng__band { position: absolute; top: 0; bottom: 0; border-radius: 4px; background: var(--c-band); }
.rng__dot { position: absolute; top: 50%; width: 12px; height: 12px; margin: -8px 0 0 -8px; border-radius: 50%; background: var(--c-ink); border: 2px solid #fff; box-sizing: content-box; }
.rng__dot--out { background: var(--c-alert); }
.rng__tick { position: absolute; top: 16px; transform: translateX(-50%); font-size: 0.72rem; color: var(--c-dim); white-space: nowrap; font-variant-numeric: tabular-nums; }
.rng__tick--strong { color: var(--c-ink); font-weight: 700; }
.dmb__line { position: absolute; top: 50%; height: 2px; margin-top: -1px; background: var(--c-strong); }
.dmb__from { background: var(--c-band); box-shadow: 0 0 0 1px #c99a5c; }
.dmb__to { background: var(--c-strong); }
.hr__grid { position: absolute; top: -6px; bottom: -6px; width: 1px; background: var(--c-grid); }
.hr__bar { position: absolute; top: 0; bottom: 0; border-radius: 4px; background: var(--c-strong); }
.rng--axis { margin-top: -0.9rem; }
.rng--axis .rng__track { height: 0; margin-bottom: 18px; }
.rng--axis .rng__track::before { display: none; }
.rng--axis .rng__tick { top: 0; }
@container (max-width: 560px) {
  .rng { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "name val" "track track"; gap: 4px 12px; }
  .rng__name { grid-area: name; } .rng__val { grid-area: val; } .rng__track { grid-area: track; margin-top: 8px; }
  .rng__name span { display: inline; margin-left: 0.4rem; }
  .rng__val strong { display: inline; margin-right: 0.4rem; }
}
@media print { .chart { break-inside: avoid; } }

/* ==========================================================================
   덜어내기 (2026-09-30) — 마이페이지·보고서: 통계 3칸·구역 번호·설명 문장 제거 뒤 남은 것들의 모양
   ========================================================================== */
.page-head--me { padding-block: 1.1rem 0.9rem; }
.page-head--me .me-head { align-items: center; }
.me-state { display: grid; gap: 0.5rem; justify-items: start; padding: 1.5rem var(--pad); border-bottom: var(--rule); }
.me-state__title { font-size: var(--t-h4); font-weight: 800; line-height: 1.25; }
.me-state__sub { color: var(--ink-dim); }
.me-out { padding: 1.5rem var(--pad) 2.5rem; text-align: center; }
.me-out a { color: var(--ink-dim); text-decoration: underline; text-underline-offset: 4px; font-size: var(--t-small); }
.measure { grid-auto-flow: row; }
.measure__date input[type="date"] { min-height: 48px; }
.r-sec--full .r-sec__head { justify-content: space-between; align-items: center; gap: 1rem; padding-right: var(--pad); }
.cal-lead { padding: 0.9rem var(--pad) 0.5rem; color: var(--ink-dim); font-size: var(--t-small); }
.cal-tag { font-size: 0.75rem; }
.cal-num { font-size: 0.875rem; }
.cal-cell--strength.cal-cell--adapt { background: #4f7443; }
.cal-cell--strength.cal-cell--focus { background: #b8403c; }
.r-jump a:focus-visible { outline: 2px solid var(--accent-hi); outline-offset: 2px; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* 로그인 화면 혜택 3줄 — 번호·설명을 없앤 뒤 한 줄짜리 목록 (2026-09-30 덜어내기) */
.auth__perks li { display: block; padding: 0.7rem 0; }
.auth__perks li strong { display: block; font-size: 1rem; }

/* 완료 체크 (2026-09-30) — 행 오른쪽 44px 동그라미. 누르면 골드 체크, 행은 옅어진다 */
/* 시작 · 종료 버튼 (2026-10-01) — 행 오른쪽에 라운드 네모 두 개. 시작 = 상세로, 종료 = 완료 표시(다시 누르면 취소) */
.xitem { position: relative; }
.xitem .xrow { padding-right: 148px; }
.xitem .xrow__go { display: none; }
.xbtns { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); display: flex; gap: 6px; }
.xbtn { display: grid; place-items: center; min-width: 62px; height: 44px; padding: 0 10px; border-radius: 10px; font: inherit; font-size: 0.95rem; font-weight: 800; white-space: nowrap; text-decoration: none; cursor: pointer; transition: background-color .15s ease, border-color .15s ease, color .15s ease, transform .12s ease; }
.xbtn--start { border: 0; background: #2f9e5b; color: #fff; }   /* 시작 = 초록 (2026-10-01) — 쨍하지 않은 톤 */
.xbtn--end { border: 0; background: #c8423b; color: #fff; }     /* 종료 = 빨강 */
.xbtn--end[aria-pressed="true"] { border: 2px solid #2f9e5b; background: transparent; color: #4cc27c; }  /* 끝낸 운동 = 초록 테두리 '완료 ✓' */
:root[data-theme="light"] .xbtn--end[aria-pressed="true"] { color: #1f7a45; }  /* 밝은 바탕에선 진한 초록이 읽힌다 */
.xbtn:active { transform: scale(.94); }
.xbtn:focus-visible { outline: 2px solid var(--accent-hi); outline-offset: 2px; }
.xitem.is-done .xrow, .xitem.is-done .xbtn--start { opacity: .45; }
@media (max-width: 420px) { .xitem .xrow { padding-right: 132px; } .xbtn { min-width: 56px; padding: 0 8px; font-size: 0.9rem; } .xbtns { right: 8px; gap: 5px; } }
.xdone { margin: 0 0 0.6rem; font-family: var(--font-mono); font-size: 0.875rem; color: var(--ink-dim); }
.xdone.is-all { color: var(--accent); font-family: var(--font-body); font-size: 1.125rem; font-weight: 800; }
