/* goal-flow.css — 목표 탭 전용 스타일 (goal_flow v2 "새 틀")
 * SDD: docs/sdd/goal_flow_v2.md §5 · 정본: docs/sdd/goal_flow/handoff/proto/*.css
 *
 * 두 부분이다:
 *   ① 설문(INTRO·W2·STEP1~6) — 예전 rtp-screens.css 의 `.rtp-goal-*` 를 **그대로 옮겼다**
 *      (정본 클래스 → 구현 클래스 대응은 contract PROTO_CLASS_MAP).
 *   ② v2 신규 화면(W1·W2 수집목록·W3·W4·수집 로딩·해볼 만하다·목표 홈) — 정본 CSS 를
 *      **클래스 이름 그대로** 옮겼다. 이 파일은 목표 페이지에서만 로드되므로 전역 충돌이 없다
 *      (실측: 새 화면 클래스와 레포 CSS 이름 충돌 0 — 겹치는 건 ①의 설문 클래스뿐).
 * 값은 정본 토큰(`--bb-goal-*`, tokens.css 의 goal_flow v2 블록)을 그대로 쓴다.
 */

/* ══════════════════════════════════════════════════════════════════════════
 * goal_flow — 목표 설문 6단계 + 완료 카드
 * SDD: docs/sdd/goal_flow.md §4 UI Design. 정본: docs/sdd/goal_flow/handoff/
 * screenshots/ 01~07, proto/flow.css(구조 참고 — .homefull 스코프는 벗기고
 * .rtp-step-header/.rtp-progress/.rtp-btn/.rtp-field 등 기존 컴포넌트에 얹는다).
 * 토큰은 전부 --bb-* (auto_rules frontend/ — 신규 코드에서 --rtp-* 금지).
 * ══════════════════════════════════════════════════════════════════════════ */

/* ── 준비 안 됨 (R14 not_ready) ─────────────────────────────────────────── */
.rtp-goal-notready {
  padding: var(--bb-space-6) var(--bb-space-3) var(--bb-space-4);
  display: flex; flex-direction: column; align-items: center; gap: var(--bb-space-2);
  text-align: center;
}
.rtp-goal-notready__title {
  font: var(--bb-type-h4); color: var(--bb-ink); margin: 0;
}
.rtp-goal-notready__sub {
  font-size: var(--bb-text-sm); color: var(--bb-ink-sub); margin: 0 0 var(--bb-space-3);
}

/* ── 스텝 헤더 override (정본 flow.css "스텝 헤더" 섹션) ─────────────────────
   레포 공용 컴포넌트(.rtp-step-header/.rtp-progress/.rtp-back-btn/.rtp-stat-toggle,
   rtp-components.css·rtp-screens.css 소유) 위에 goal_flow 배치만 얹는다.
   `.rtp-goal` 로 스코프 — 다른 화면(F5 계좌 흐름 등)의 같은 컴포넌트에는 영향 없다. */
.rtp-goal .rtp-step-header {
  gap: var(--bb-space-2);
  padding: 6px 14px 10px;
  background: var(--bb-bg);
}
.rtp-goal .rtp-step-header .rtp-progress { flex: 1; margin: 0; }
.rtp-goal .rtp-back-btn {
  width: var(--bb-tap-target); height: var(--bb-tap-target);  /* 탭타겟 44px — 프로토 34px 보다 접근성 규칙 우선 */
  margin-left: -6px;
  border: 0; background: 0;
  font-size: var(--bb-goal-fs-20); line-height: 1; color: var(--rtp-ink-2);
  cursor: pointer; padding: 0;
}

/* ── 공통 스텝 스캐폴드 ──────────────────────────────────────────────────── */
.rtp-goal-step {
  padding: var(--bb-space-1) var(--bb-space-3) var(--bb-space-5);
  display: flex; flex-direction: column;
}
.rtp-goal-step__title {
  font: var(--bb-type-h4);
  letter-spacing: var(--bb-tracking-h4);
  color: var(--bb-ink);
  margin: var(--bb-space-2) 0 var(--bb-space-1);
  word-break: keep-all;
  white-space: pre-line;
}
.rtp-goal-step__sub {
  font-size: var(--bb-text-sm);
  color: var(--bb-ink-sub);
  line-height: 1.6;
  margin: 0 0 var(--bb-space-3);
  word-break: keep-all;
}
.rtp-goal-note {
  font-size: var(--bb-text-11);
  font-weight: 600;
  color: var(--bb-ink-muted);
  line-height: 1.6;
  margin: var(--bb-space-1) 0 var(--bb-space-3);
  word-break: keep-all;
}
/* 필수 선택 미이행 인라인 안내 — 상시 힌트(.rtp-goal-note)와 색으로도 구분된다. */
.rtp-goal-note--error {
  color: #991B1B;
  background: var(--bb-danger-soft);
  border-radius: var(--bb-radius-sm, 8px);
  padding: 8px 10px;
}
/* 평균 마커 pill 안의 대학 로고 — 어느 대학 기준선인지 막대 위에서 바로 보인다. */
.rtp-goal-stat__mark-logo {
  width: 11px; height: 11px;
  object-fit: contain;
  margin-right: 4px;
  vertical-align: -1px;
}
/* 인사이트 배너의 근거 한 줄 — 본문과 같은 굵기로 붙이면 3줄짜리 빽빽한 블록이 된다.
   한 칸 내려 흐리게 깔아 "이 숫자가 어디서 왔는지" 로 읽히게 한다. */
.rtp-goal-why__src {
  display: block;
  margin-top: 6px;
  font-size: var(--bb-text-11);
  font-weight: 600;
  color: var(--bb-ink-muted);
}
.rtp-goal-form { display: flex; flex-direction: column; }
.rtp-goal-form > .rtp-btn { margin-top: var(--bb-space-3); }

/* estimate_mode 배지 — 전 화면 상단 상시 노출(R18)
   F5(2026-09-24 대비 감사) — `--bb-primary-dark`(#D94E1F) on `--bb-primary-soft`
   (#FFEEE6) 는 3.68:1 로 11px 글자 기준(4.5:1) 미달. 새 색을 만들지 않고 같은
   계열의 더 어두운 기존 토큰 `--bb-primary-heavy`(#B8401A, tokens.css) 로 교체
   — 이 배경 위에서 4.92:1. */
.rtp-goal-estimate {
  display: inline-flex; align-self: flex-start; align-items: center;
  margin: var(--bb-space-2) var(--bb-space-3) 0;
  padding: 4px 10px;
  border-radius: var(--bb-radius-pill);
  background: var(--bb-primary-soft);
  color: var(--bb-primary-heavy);
  font-size: var(--bb-text-11);
  font-weight: 700;
}

/* ── INTRO ───────────────────────────────────────────────────────────── */
.rtp-goal-intro {
  position: relative;
  /* 62vh 였다 — INTRO 는 이 히어로 하나가 화면의 전부인데 그러면 히어로가 끝나고
     하단바까지 **흰 띠 80px** 가 남아 화면이 반쯤 잘린 것처럼 보였다(정본
     01-intro.png 은 끝까지 어둡다). 헤더(106) + 하단바(62) + 여유(8) = 176 을
     뺀 만큼 채운다. dvh 를 모르는 구형 사파리용으로 vh 를 먼저 둔다. */
  min-height: calc(100vh - 176px);
  min-height: calc(100dvh - 176px);
  overflow: hidden;
  /* design-port T51 — 정본 .in 은 #191f28(--rtp-ink) 다. --bb-hero-dark(#15171c) 는
     goal_flow v2 이전 값이 남아 있던 것 — .rtp-goal-gate 가 이미 같은 교정을 했다. */
  background: var(--rtp-ink);
  color: var(--bb-bg);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  margin: 0;
}
/* ⚠️ 레일은 히어로 **전체**를 덮으면 안 된다. 예전 `__sky` 는 `inset: 0` 이었고,
   본문이 바닥 정렬인데 로고 top 이 히어로 높이의 %% 라 **실기기(360~430px)에서 로고
   6개 중 최대 4개가 제목·설명 글자 위에 얹혔다**(흰 원 + 흰 글씨 = 읽기 어렵다).
   정본 레일도 `position:absolute; padding-top:120px` 이라 같은 병이다 — 실측하면
   밴드(히어로 top 120~324px)가 **전 기기에서 제목(top 205)을 덮는다**
   (SDD goal_intro_rail §D-f). 정본 목업은 기기 프레임이 길어 안 드러났을 뿐이다.
   → **본문 위에 남는 공간을 차지하는 flex 아이템**으로 둔다. 겹침이 구조적으로 불가능하다. */
.rtp-goal-intro__rail {
  position: relative; flex: 1 1 auto; min-height: 168px;
  pointer-events: none; overflow: hidden;
  display: flex; flex-direction: column; justify-content: center;
  gap: var(--bb-goal-rail-gap);
  /* 정본 `.rail` 의 양끝 페이드 */
  mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent);
}
/* ⚠️ 가로 간격을 flex `gap` 으로 주지 않는다. gap 이면 줄 폭이
   `2N·w + (2N-1)g` 라 `translateX(-50%)` 가 한 주기(`N(w+g)`)보다 **g/2 만큼 짧아
   주기마다 튄다**(정본도 같은 결함을 갖고 있다). 자식의 `margin-right` 로 주면
   `2N(w+g)` 가 되어 절반이 정확히 한 주기다. */
.rtp-goal-intro__rail-line {
  display: flex; width: max-content;
  animation: rtp-goal-rail-slide 26s linear infinite;
}
.rtp-goal-intro__rail-line--b {
  animation-duration: 34s;
  animation-direction: reverse;
}
.rtp-goal-intro__rail-line span {
  flex: 0 0 auto;
  width: var(--bb-goal-rail-a); height: var(--bb-goal-rail-a);
  margin-right: var(--bb-goal-rail-gap);
  border-radius: var(--bb-goal-rail-radius-a);
  background: var(--bb-hero-logo-face);
  border: 1px solid var(--bb-hero-line-2);
  display: grid; place-items: center;
}
.rtp-goal-intro__rail-line span img {
  width: var(--bb-goal-rail-img-a); height: var(--bb-goal-rail-img-a);
  object-fit: contain; opacity: .92;
}
.rtp-goal-intro__rail-line--b span {
  width: var(--bb-goal-rail-b); height: var(--bb-goal-rail-b);
  border-radius: var(--bb-goal-rail-radius-b);
}
.rtp-goal-intro__rail-line--b span img {
  width: var(--bb-goal-rail-img-b); height: var(--bb-goal-rail-img-b);
}
@keyframes rtp-goal-rail-slide { to { transform: translateX(-50%); } }
/* R3 — 움직임을 줄이는 설정이면 멈춘다. */
@media (prefers-reduced-motion: reduce) {
  .rtp-goal-intro__rail-line { animation: none; }
}

/* R4 — '준비 중' 줄. ⚠️ 값은 차수 B 가 같은 정본 `.prep` 을 어두운 히어로 위에서
   이미 번역해 둔 것을 가져왔다(college-gauge.css) — 클래스만 `rtp-goal-*` 이다.
   🔴 칩은 **표시 전용 `<i>`** 다(정본이 font-style 을 리셋한다). 게이지 칩처럼
   `<button>` 으로 만들면 설문에 없는 시트를 약속하게 된다. */
.rtp-goal-intro__prep {
  display: flex; align-items: center; gap: 7px;
  margin: 0 0 11px;
  padding: var(--bb-space-2) 10px;
  border-radius: var(--bb-radius-pill);
  background: var(--bb-hero-surface-2);
}
.rtp-goal-intro__prep-items {
  flex: 1; min-width: 0; display: flex; gap: var(--bb-space-1);
  overflow-x: auto; scrollbar-width: none;
}
.rtp-goal-intro__prep-items::-webkit-scrollbar { height: 0; }
.rtp-goal-intro__prep-items i {
  flex: 0 0 auto; font-style: normal;
  padding: 3px 7px;
  border-radius: var(--bb-radius-pill);
  border: 1px dashed var(--bb-hero-line-dash);
  font-size: var(--bb-text-2xs); font-weight: 700;
  color: var(--bb-hero-ink-muted);
  white-space: nowrap;
}
.rtp-goal-intro__prep-label {
  flex: 0 0 auto;
  font-size: var(--bb-text-2xs); font-weight: 700;
  color: var(--bb-hero-ink-muted);
}
.rtp-goal-intro:after {
  /* design-port T51 — 정본 66%/#191f28(위 .rtp-goal-intro 교정과 같은 사유) */
  content: ""; position: absolute; inset: auto 0 0; height: 66%;
  background: linear-gradient(to top, var(--rtp-ink) 34%, transparent);
}
.rtp-goal-intro__body { position: relative; z-index: 2; padding: 0 var(--bb-space-4) var(--bb-goal-intro-pad-b); }
.rtp-goal-intro__tag {
  display: inline-block; margin-bottom: var(--bb-goal-intro-tag-mb);
  padding: 5px 11px; border-radius: var(--bb-radius-pill);
  background: var(--bb-primary);
  font-size: var(--bb-text-11); font-weight: 800; letter-spacing: .4px;
}
.rtp-goal-intro__title {
  margin: 0 0 var(--bb-space-15);
  font-size: var(--bb-goal-fs-25); font-weight: 800; line-height: 1.4;
  letter-spacing: -.7px; word-break: keep-all; white-space: pre-line;
}
.rtp-goal-intro__sub {
  margin: 0; font-size: var(--bb-goal-fs-13); font-weight: 600; line-height: 1.7;
  color: rgba(255,255,255,.72); word-break: keep-all;
}
.rtp-goal-intro__note {
  margin: var(--bb-space-15) 0 0; font-size: var(--bb-text-11);
  font-weight: 600; color: rgba(255,255,255,.6); word-break: keep-all;
}
.rtp-goal-intro__foot { position: relative; z-index: 2; padding: var(--bb-space-3); }
.rtp-goal-intro__foot .rtp-btn { width: 100%; }
.rtp-goal-intro__foot-note {
  margin: var(--bb-space-2) 0 0; text-align: center;
  font-size: var(--bb-text-11); font-weight: 600; color: rgba(255,255,255,.5);
}

/* ── R146 어두운 첫 화면을 문서 끝까지 (goal_flow v3 mini D · mini E 개정) ─────────────────────
   인트로·소속 고르기는 히어로 높이가 `100vh - 176px` 라 히어로 아래에 컨테이너의 흰 바닥(하단 메뉴 자리 padding-bottom)이
   **흰 띠**로 남았다 → 컨테이너를 어두운 실제 background-color 로 칠한다. 컨테이너 자신이 하단 여백(R150)을 가지므로 그 여백까지 어둡다.
   - 범위: `body.rtp-goal-dark` (goal_survey.html 이 intro·level 에서만 단다 — not_ready·STEP1~6·결과·다른 페이지는 해당 없음).
   - mini E(R150) — 법적 푸터는 홈 탭에만 있어 이 화면에는 푸터가 없다. 푸터용 규칙 5줄은 쓸 곳이 없어 지웠다.
   - ⚠️ 그라데이션·의사요소·box-shadow 로 칠하지 않는다 — 대비 게이트(_contrast.py)는 글자 조상의 실제
     background-color 만 읽는다. 색은 토큰 변수. */
body.rtp-goal-dark .rtp-container { background-color: var(--rtp-ink); }

/* ── W2 소속 확인 게이트 (다크 히어로, goal_level_gate/A2a) ───────────────
   정본: handoff/proto/flow-wgate.js R.S.w2(dark:true) + flow-wgate.css.
   🔴 .wwl*(수집 항목 리스트)은 A2b 이월 — 이 파일에 구현하지 않는다(SDD A-4).
   오렌지 계열 rgba(255,122,44,…)는 auto_rules 의 흰색(rgba(255,255,255,…)) 하드코딩
   금지 대상이 아니다 — 브랜드 강조색 글로우/보더용으로 리터럴 유지(선례: 같은 패턴이
   .rtp-goal-intro 주변 컴포넌트에도 있다). 흰 텍스트/서피스는 전부 --bb-hero-* 토큰. */
.rtp-goal-gate {
  position: relative;
  min-height: calc(100vh - 176px);
  min-height: calc(100dvh - 176px);
  overflow: hidden;
  background: var(--rtp-ink);            /* goal_flow v2 — 정본 .wdk #191f28 (예전 --bb-hero-dark #15171c) */
  color: var(--bb-bg);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  margin: 0;
}
.rtp-goal-gate__glow {
  position: absolute; left: 50%; top: -16%;
  width: 118%; aspect-ratio: 1; transform: translateX(-50%);
  background: radial-gradient(circle at 50% 42%, rgba(255,122,44,.2), rgba(255,122,44,.05) 46%, transparent 68%);
  pointer-events: none;
}
.rtp-goal-gate__body {
  position: relative; z-index: 2;
  padding: var(--bb-space-3) var(--bb-w2-pad-x) var(--bb-w2-pad-b);
}
.rtp-goal-gate__tag {
  display: inline-block; margin-bottom: var(--bb-w2-tag-mb);
  padding: 5px 11px; border-radius: var(--bb-radius-pill);
  background: var(--bb-primary); color: var(--bb-bg);
  font-size: var(--bb-text-11); font-weight: 800; letter-spacing: .4px;
}
.rtp-goal-gate__title {
  margin: 0 0 var(--bb-w2-title-mb);
  font-size: var(--bb-w2-title); font-weight: 800; line-height: 1.42;
  letter-spacing: -.7px; word-break: keep-all; white-space: pre-line;
  color: var(--bb-bg);
}
.rtp-goal-gate__sub {
  margin: 0 0 var(--bb-w2-sub-mb); font-size: var(--bb-w2-sub); font-weight: 600;
  line-height: 1.7; color: var(--bb-hero-ink-sub); word-break: keep-all;
}
.rtp-goal-gate__form { display: flex; flex-direction: column; }

/* 성별 세그먼트 — 402px 폭에서도 두 라벨이 줄바꿈 없이 들어간다(짧은 한글 2자). */
.rtp-goal-gate__seg {
  display: flex; gap: var(--bb-w2-seg-gap);
  padding: 4px; margin-bottom: var(--bb-w2-seg-mb);
  border-radius: var(--bb-w2-seg-radius);
  background: var(--bb-hero-surface-2);
  border: 1px solid var(--bb-hero-surface-3);
}
.rtp-goal-gate__seg-btn {
  flex: 1; min-height: var(--bb-tap-target);   /* 탭타겟 44px — 프로토(40px)보다 접근성 규칙 우선 */
  border: 0; border-radius: var(--bb-w2-seg-btn-radius);
  background: transparent;
  font-family: inherit; font-size: var(--bb-w2-sub); font-weight: 800;
  color: var(--bb-hero-ink-4); cursor: pointer;
}
.rtp-goal-gate__seg-btn[aria-pressed="true"] {
  background: var(--bb-hero-surface-4); color: var(--bb-bg);
}

.rtp-goal-gate__cards { display: flex; flex-direction: column; gap: var(--bb-w2-card-gap); }
/* frontend/ auto_rule — hidden 토글 + display 선언은 같은 파일에 [hidden]{display:none} 가드 필수 */
.rtp-goal-gate__card[hidden] { display: none; }
.rtp-goal-gate__card {
  position: relative; display: flex; align-items: center; gap: var(--bb-w2-card-inner-gap);
  width: 100%; min-height: var(--bb-tap-target);
  padding: var(--bb-w2-card-pad);
  border: 1px solid var(--bb-hero-line); border-radius: var(--bb-radius-xl);
  background: var(--bb-hero-surface);
  font-family: inherit; text-align: left; cursor: pointer;
}
.rtp-goal-gate__card--open {
  border-color: rgba(255,122,44,.6);
  background: linear-gradient(120deg, rgba(255,122,44,.16), rgba(255,122,44,.05));
}
/* 🔴 [6.5] 실캡처에서 잡았다 — 정본 값(테두리 .85 + 1.5px 링 .45)은 `--open`(.6)과
   **다크 화면에서 구분이 안 된다**. 열린 칸이 **2개**(남중·남고)라 "둘 다 고른 건가" 로
   읽힌다. 정본은 열린 칸이 **1개뿐**이라(rev.6 R3) `--open` 과 `--sel` 이 같은 카드에
   겹쳐 이 모호함이 없었다 — **R3(대학만 닫는다) 결정이 만든 상태**다.
   → 링을 2px·불투명 브랜드색으로 올려 선택을 단정한다. PROTO_STYLE_EXCEPTIONS 선언. */
.rtp-goal-gate__card--sel {
  border-color: var(--bb-primary);
  box-shadow: 0 0 0 2px var(--bb-primary);
}
.rtp-goal-gate__card-n {
  flex: 0 0 auto; width: var(--bb-w2-card-glyph); height: var(--bb-w2-card-glyph);
  border-radius: var(--bb-radius);
  background: var(--bb-hero-surface-3);
  display: grid; place-items: center;
  font-family: var(--bb-font-num); font-size: var(--bb-text-sm); font-weight: 800;
  color: var(--bb-hero-ink-2);
}
.rtp-goal-gate__card--open .rtp-goal-gate__card-n {
  background: var(--bb-primary); color: var(--bb-bg);
  box-shadow: 0 6px 16px -4px rgba(255,122,44,.7);
}
.rtp-goal-gate__card-b { flex: 1; min-width: 0; }
.rtp-goal-gate__card-b b {
  display: block; font-size: var(--bb-w2-card-label); font-weight: 800;
  letter-spacing: -.3px; color: var(--bb-bg);
}
/* 🔴 2026-09-23 — 카드 부제. 정본 `.wgc__b span` 의 값 그대로.
   토큰 `--bb-hero-ink-3` 은 주석이 "proto .wgc__b span" 이라고 적힌 채 **쓰는 곳이
   없었다** — 색만 옮기고 정작 그 색을 입을 요소를 안 옮긴 상태였다. */
.rtp-goal-gate__card-b span {
  display: block; margin-top: 3px;
  font-size: var(--bb-text-11-plus); font-weight: 600;
  color: var(--bb-hero-ink-3); line-height: 1.5;
  /* 🔴 재캡처에서 잡았다 — 이게 없으면 "내 기준/선" · "아직 적/어요" 로 **한글 단어가
     중간에서 잘린다**. 정본은 목업 프레임이 넓어 한 줄에 들어가 문제가 안 보였다.
     레포 선례: .bb-gauge-intro__prep-sheet-* 도 같은 이유로 keep-all 이다. */
  word-break: keep-all;
}
.rtp-goal-gate__card-r {
  flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 3px;
}
.rtp-goal-gate__card-badge {
  font-style: normal; font-size: var(--bb-text-11); font-weight: 800; color: var(--bb-primary);
}
.rtp-goal-gate__card-r s {
  display: block; max-width: 108px; text-align: right;
  text-decoration: none; font-size: var(--bb-w2-card-note); font-weight: 700;
  color: var(--bb-hero-ink-muted);
}
.rtp-goal-gate__card--open .rtp-goal-gate__card-r s { color: var(--bb-hero-ink-3); }

.rtp-goal-gate__foot { margin-top: var(--bb-space-3); }
.rtp-goal-gate__foot .rtp-btn { width: 100%; }
/* CTA 부제 — 정본 `.ft__note` + `.ft__note--dk`(다크 화면). 고른 칸이 어디로 가는지
   한 줄로 말한다. 비어 있을 때 자리를 잡아두지 않는다(min-height 없음). */
.rtp-goal-gate__note {
  margin: 9px 0 0; text-align: center; word-break: keep-all;
  font-size: var(--bb-text-11); font-weight: 600;
  color: var(--bb-hero-ink-sub);
}
.rtp-goal-gate__note:empty { display: none; }


/* ── STEP1 코치 카드 + 읽기전용 이름/학교 ────────────────────────────── */
.rtp-goal-coach {
  display: flex; gap: var(--bb-space-15);
  padding: var(--bb-goal-coach-pad-y) var(--bb-space-3);
  border-radius: var(--rtp-radius-lg);
  background: var(--rtp-bg);             /* goal_flow v2 — 정본 #f1f3f5 */
  margin-bottom: var(--bb-goal-coach-mb);
}
.rtp-goal-coach__avatar {
  flex: 0 0 auto; width: 38px; height: 38px; border-radius: 50%;
  background: var(--bb-primary); color: var(--bb-bg);
  display: grid; place-items: center;
  font-family: var(--bb-font-num); font-size: var(--bb-goal-coach-glyph); font-weight: 800;
}
.rtp-goal-coach__body { flex: 1; min-width: 0; }
.rtp-goal-coach__body b { display: block; font-size: var(--bb-text-13); font-weight: 800; letter-spacing: -.2px; margin-bottom: var(--bb-goal-coach-title-mb); }
.rtp-goal-coach__body p { margin: 0; font-size: var(--bb-text-12-plus); font-weight: 600; color: var(--rtp-ink-2); line-height: 1.65; word-break: keep-all; }

.rtp-goal-me-fields { display: flex; flex-direction: column; }
.rtp-goal-me-fields .rtp-field { margin-bottom: var(--bb-space-2); }
/* 프리필·읽기전용 입력 — 수정 불가임을 배경색으로 보여준다(borderless) */
.rtp-goal-step .rtp-field__input--prefilled,
.rtp-goal-step .rtp-field__input[readonly] {
  /* design-port T51 — 정본 .rtp-field__input--prefilled 배경은 --rtp-bg(#f1f3f5) */
  background: var(--rtp-bg); border-color: transparent; color: var(--bb-ink);
}
/* R148 — 목표 설문의 텍스트 입력(키·몸무게·기타·확인 readonly)은 16px. 15px 이면 iOS 사파리가 focus 때 화면을 확대하고
   되돌리지 않는다. 공용 `.rtp-field__input` 도 R151 부터 16px 이라 이 줄은 **이중 안전장치**다(공용이 다시 줄어도 목표 설문은 16px 유지).
   ⚠️ `.v2etc .rtp-field__input`·`--prefilled` 규칙에는 font-size 를 쓰지 말 것(proto-css-diff 가 차이로 잡는다). */
.rtp-goal-step .rtp-field__input { font-size: var(--bb-text-base); }

.rtp-goal-hint {
  display: flex; align-items: center; gap: 6px;
  margin: var(--bb-space-1) 0 var(--bb-space-3);
  font-size: var(--bb-text-11); font-weight: 600; color: var(--bb-ink-sub);
  word-break: keep-all;
}
.rtp-goal-hint i {
  flex: 0 0 auto; width: 5px; height: 5px; border-radius: 50%; background: var(--bb-primary);
}

/* ── STEP1 확인 카드 (레거시 — 현재 template 은 코치 카드를 쓴다. 재사용 대비 유지) ── */
.rtp-goal-me {
  display: flex; align-items: center; gap: var(--bb-space-15);
  padding: var(--bb-space-3);
  border: 1.5px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  background: var(--bb-bg);
  margin-top: var(--bb-space-2);
}
.rtp-goal-me__avatar {
  flex: 0 0 auto; width: 46px; height: 46px; border-radius: var(--bb-radius);
  background: var(--bb-primary); color: var(--bb-bg);
  display: grid; place-items: center; font-size: var(--bb-text-sm); font-weight: 800;
}
.rtp-goal-me__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.rtp-goal-me__body b { font-size: var(--bb-text-base); font-weight: 800; letter-spacing: -.3px; }
.rtp-goal-me__body span { margin-top: 3px; font-size: var(--bb-text-12); font-weight: 600; color: var(--bb-ink-muted); }

.rtp-goal-norecord {
  padding: var(--bb-space-4) var(--bb-space-3);
  border-radius: var(--rtp-radius-lg);
  background: var(--bb-surface);
  text-align: center;
  margin-top: var(--bb-space-2);
}
.rtp-goal-norecord__title { font-size: var(--bb-text-base); font-weight: 800; color: var(--bb-ink); margin: 0 0 6px; }
.rtp-goal-norecord__sub { font-size: var(--bb-text-sm); color: var(--bb-ink-sub); line-height: 1.6; margin: 0; word-break: keep-all; }

/* ── 필드 공통(학년/포지션 pill, 키·몸무게) ─────────────────────────────── */
.rtp-goal-field { display: block; margin-bottom: var(--bb-space-3); }
.rtp-goal-field__label {
  display: block; margin-bottom: var(--bb-space-2);
  font-size: var(--bb-text-11); font-weight: 800; color: var(--bb-ink-muted);
}

.rtp-goal-pill { display: block; cursor: pointer; }
.rtp-goal-pill__input {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.rtp-goal-pill__face {
  display: flex; align-items: center; justify-content: center;
  min-height: var(--bb-tap-target);
  border: 1.5px solid var(--bb-border); border-radius: var(--bb-radius);
  background: var(--bb-bg);
  font-family: var(--bb-font-num); font-size: var(--bb-text-sm); font-weight: 800;
  color: var(--bb-ink-sub);
  transition: border-color var(--bb-t-fast), background var(--bb-t-fast), color var(--bb-t-fast);
}
.rtp-goal-pill__input:checked + .rtp-goal-pill__face {
  border-color: var(--bb-primary);
  background: var(--bb-primary-tint);
  color: var(--bb-primary-dark);
}
.rtp-goal-pill__input:focus-visible + .rtp-goal-pill__face { box-shadow: var(--bb-focus-ring); }

.rtp-goal-gradegrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--bb-space-2); }
.rtp-goal-posgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--bb-space-2); }

/* 학년 3개(고1~고3, ← goal_survey_polish R1 로 중1~중3 제거)는 기존
   .rtp-stat-toggles(단일 행 전용) 컴포넌트를 재사용해 한 줄로 채운다 —
   다른 화면의 단일행 토글(차트 기간 등)엔 영향 없음.

   ⚠️ 크기 규칙은 **.rtp-goal-pill(label)** 에 걸어야 한다. 마크업이
       <label.rtp-goal-pill> > <input hidden> + <span.rtp-stat-toggle>
   구조라, flex/grid 의 **자식은 label** 이다. 안쪽 span 에 `flex:1` 을 걸면
   아무 일도 일어나지 않는다(부모가 flex 컨테이너가 아니다). 실제로 그래서
   버튼이 글자 폭으로 쪼그라든 세로 알약이 됐다.
   그리고 컴포넌트(.rtp-stat-toggle/.rtp-pos-btn)에는 `display` 가 없어서 span 이
   인라인으로 남는다 — padding 이 줄 높이를 못 늘려 **다음 블록("포지션" 라벨)을
   덮어버린다.** 둘 다 여기서 바로잡는다. */
.rtp-goal-field .rtp-stat-toggles { flex-wrap: wrap; margin: 0; }
.rtp-goal-field .rtp-stat-toggles > .rtp-goal-pill { flex: 1 1 30%; min-width: 0; }
.rtp-goal-field .rtp-pos-grid > .rtp-goal-pill { min-width: 0; }
.rtp-goal-pill > .rtp-stat-toggle,
.rtp-goal-pill > .rtp-pos-btn {
  display: flex; align-items: center; justify-content: center;
  width: 100%; box-sizing: border-box;
}
/* ← goal_survey_polish A-1 — 학년 칩 탭 배선. 활성 정본은 여전히 서버(체크된
   radio)다: 서버가 이미 찍는 `checked` 에 맡기고, 화면 반영은 이 :checked 규칙
   하나가 한다. 서버가 찍던 .rtp-stat-toggle--active 클래스는 템플릿에서 뺐다
   (rtp-components.css:795 의 선언 자체는 다른 화면이 써서 그대로 둔다). */
.rtp-stat-toggles .rtp-goal-pill__input:checked + .rtp-stat-toggle {
  background: var(--rtp-ink); color: var(--rtp-white);
}
/* 정본 S25 — 포지션도 학년과 같은 규칙: 화면 반영은 :checked 하나가 한다. 서버가 찍는
   .rtp-pos-btn--active(첫 렌더 표시·테스트 앵커)는 다른 칸을 고르면 기본 모양으로 되돌린다. */
.rtp-goal-pill__input:checked + .rtp-pos-btn {
  background: var(--rtp-ink); border-color: var(--rtp-ink); color: var(--rtp-white);
}
.rtp-goal-pill__input:not(:checked) + .rtp-pos-btn--active {
  background: var(--rtp-white); border-color: var(--rtp-line); color: var(--rtp-ink-2);
}
.rtp-goal-note__em { color: var(--rtp-orange); font-weight: 800; }

.rtp-goal-field-row { display: flex; gap: var(--bb-goal-field-gap); margin-bottom: var(--bb-space-1); }
.rtp-goal-unitfield { flex: 1; display: block; margin-bottom: 0; }
.rtp-goal-unitfield__wrap { position: relative; display: block; }
.rtp-goal-unitfield__wrap .rtp-field__input { padding-right: 40px; }
.rtp-goal-unitfield__unit {
  position: absolute; right: 14px; top: 50%; transform: translateY(-50%);
  font-size: var(--bb-goal-fs-12p5); font-weight: 700; color: var(--rtp-ink-3);
  pointer-events: none;
}

/* ── STEP3 대학 — 고른 순서 칩 + 그리드 ─────────────────────────────────── */
.rtp-goal-picks { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 var(--bb-goal-picks-gap); }
.rtp-goal-picks:empty { display: none; }
.rtp-goal-pick {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 8px 6px var(--bb-goal-pick-pad-l); border-radius: var(--bb-radius-pill);
  background: var(--bb-ink); color: var(--bb-bg); border: 0;
  font-size: var(--bb-text-11-plus); font-weight: 700;
}
.rtp-goal-pick__logo {
  width: 15px; height: 15px; object-fit: contain;
  background: var(--bb-bg); border-radius: 50%; padding: 1px; box-sizing: border-box;
}
.rtp-goal-pick__x {
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  width: 20px; height: 20px; border: 0; border-radius: 50%;
  background: transparent; color: rgba(255,255,255,.7);
  font-size: 13px; line-height: 1; cursor: pointer; padding: 0;
}
/* frontend.md 탭타겟 44px — 시각 크기는 유지하고 히트 영역만 음수 마진 방식으로 확장 */
.rtp-goal-pick__x:before {
  content: ""; position: absolute; inset: -12px;
}

.rtp-goal-unigrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--bb-space-2); margin-bottom: var(--bb-space-1); }
.rtp-goal-unicard {
  position: relative;
  display: flex; flex-direction: column; align-items: center; gap: var(--bb-space-2);
  padding: var(--bb-goal-unicard-pad-t) var(--bb-space-2) var(--bb-space-15);
  border: 1.5px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  background: var(--bb-bg);
  font-family: var(--bb-font); cursor: pointer;
  min-height: var(--bb-tap-target);   /* 탭타겟 44px — 프로토 미지정, 레포 접근성 규칙 우선 */
}
.rtp-goal-unicard--active { border-color: var(--bb-primary); background: var(--bb-primary-tint); }
.rtp-goal-unicard__logo { width: 40px; height: 40px; object-fit: contain; }
.rtp-goal-unicard__name { font-size: var(--bb-text-12); font-weight: 700; letter-spacing: -.2px; text-align: center; }
.rtp-goal-unicard__count { font-size: var(--bb-text-2xs-plus); font-weight: 600; color: var(--rtp-ink-3); }
.rtp-goal-unicard__rank {
  position: absolute; top: 7px; right: 7px;
  width: 19px; height: 19px; border-radius: 50%;
  background: var(--bb-primary); color: var(--bb-bg);
  display: none; place-items: center;
  font-family: var(--bb-font-num); font-size: var(--bb-text-2xs-plus); font-weight: 800;
}
.rtp-goal-unicard--active .rtp-goal-unicard__rank:not(:empty) { display: grid; }

/* ── STEP4·5 강점/기술 — 계열 탭 → 소그룹 → 항목(체크 칩) 3계층 ─────────── */
/* 계열 탭 — STEP6 기준선 카드와 공용 룩(.rtp-goal-cats/.rtp-goal-cat) */
.rtp-goal-cats { display: flex; gap: 6px; padding: 4px; border-radius: var(--bb-radius); background: var(--rtp-bg); }
.rtp-goal-cat {
  flex: 1; padding: 9px 4px; border: 0; border-radius: var(--bb-goal-cat-radius);
  background: transparent; font-family: var(--bb-font); font-size: var(--bb-text-11-plus);
  font-weight: 700; color: var(--rtp-ink-3); cursor: pointer; letter-spacing: -.3px;
  min-height: var(--bb-tap-target);
}
.rtp-goal-cat--active { background: var(--bb-bg); color: var(--bb-ink); font-weight: 800; box-shadow: var(--bb-goal-shadow-1); }
.rtp-goal-cat b {
  display: inline-block; margin-left: 4px; font-family: var(--bb-font-num);
  font-size: var(--bb-text-2xs-plus); font-weight: 800; color: var(--bb-primary);
}
/* E79 — 추천 스탯이 있고 아직 하나도 안 고른 계열 탭의 점(정본 .cat__r). 고르면 점 대신 개수 */
.rtp-goal-cat__r {
  display: inline-block; width: var(--bb-goal-cat-dot); height: var(--bb-goal-cat-dot);
  margin-left: var(--bb-goal-cat-dot); vertical-align: var(--bb-space-05);
  border-radius: 50%; background: var(--rtp-ink-2);
}
.rtp-goal-cat--active .rtp-goal-cat__r { background: var(--rtp-ink); }

.rtp-goal-catpanel { margin-top: var(--bb-space-2); }
.rtp-goal-catpanel[hidden] { display: none; }

/* 소그룹 — 제목 + 가로 구분선 */
.rtp-goal-group { margin-top: var(--bb-space-3); }
.rtp-goal-group__head { display: flex; align-items: center; gap: var(--bb-space-2); margin-bottom: var(--bb-space-2); }
.rtp-goal-group__head b { font-size: var(--bb-text-11-plus); font-weight: 800; color: var(--rtp-ink-2); }
.rtp-goal-group__head s { flex: 1; height: 1px; background: var(--bb-border-soft); text-decoration: none; }
.rtp-goal-group .rtp-goal-chip + .rtp-goal-chip { margin-top: 7px; }

.rtp-goal-chip { display: block; cursor: pointer; }
.rtp-goal-chip__input {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.rtp-goal-chip__face {
  display: flex; align-items: center; gap: var(--bb-goal-chip-gap);
  width: 100%; min-height: var(--bb-tap-target); text-align: left;
  padding: var(--bb-goal-chip-pad-y) var(--bb-goal-chip-pad-x);
  border: 1.5px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  background: var(--bb-bg);
}
.rtp-goal-chip__text { flex: 1; min-width: 0; }
.rtp-goal-chip__text b { display: block; font-size: var(--bb-goal-chip-title); font-weight: 700; letter-spacing: -.2px; color: var(--bb-ink); }
.rtp-goal-chip__text [data-goal-item-desc] { display: block; margin-top: 3px; font-size: var(--bb-text-11-plus); font-weight: 600; color: var(--rtp-ink-3); }
.rtp-goal-chip__check {
  flex: 0 0 auto; order: 2; width: 20px; height: 20px; border-radius: 50%;
  border: 1.8px solid var(--bb-border); background: var(--bb-bg);
  display: grid; place-items: center; position: relative;
  font-size: var(--bb-goal-chip-glyph); color: transparent;
}
.rtp-goal-chip__input:checked + .rtp-goal-chip__face {
  border-color: var(--bb-primary); background: var(--bb-primary-tint);
}
.rtp-goal-chip__input:checked + .rtp-goal-chip__face .rtp-goal-chip__check {
  border-color: var(--bb-primary); background: var(--bb-primary); color: var(--bb-goal-c-white);
}
.rtp-goal-chip__input:checked + .rtp-goal-chip__face .rtp-goal-chip__check:after {
  content: "✓"; font-size: 11px; font-weight: 800; color: var(--bb-bg); line-height: 1;
}
.rtp-goal-chip__input:focus-visible + .rtp-goal-chip__face { box-shadow: var(--bb-focus-ring); }

/* STEP5 상단 인사이트 배너 */
.rtp-goal-why {
  display: flex; gap: 9px; padding: 13px 14px; border-radius: var(--rtp-radius-lg);
  background: var(--rtp-bg); margin-bottom: var(--bb-goal-why-mb);
}
.rtp-goal-why i { flex: 0 0 auto; width: 6px; height: 6px; border-radius: 50%; background: var(--bb-primary); margin-top: 6px; }
.rtp-goal-why p { margin: 0; font-size: var(--bb-text-12); font-weight: 600; color: var(--rtp-ink-2); line-height: 1.6; word-break: keep-all; }

/* ── STEP6 기준선 카드 ────────────────────────────────────────────────── */
.rtp-goal-base {
  border: 1px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  padding: var(--bb-goal-base-pad-t) var(--bb-goal-base-pad-x) var(--bb-space-15);
  margin-bottom: var(--bb-goal-base-mb); background: var(--bb-bg);
}
.rtp-goal-base__head { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.rtp-goal-base__head img { width: 22px; height: 22px; object-fit: contain; flex: 0 0 auto; }
.rtp-goal-base__head b { font-size: var(--bb-text-13); font-weight: 800; letter-spacing: -.2px; }
.rtp-goal-base__head span { flex: 1; font-size: var(--bb-text-11); font-weight: 600; color: var(--rtp-ink-3); }
.rtp-goal-base__note {
  margin: var(--bb-space-15) 0 0; padding-top: var(--bb-goal-note-gap);
  border-top: 1px solid var(--bb-border-soft);
  font-size: var(--bb-text-11); font-weight: 600; color: var(--rtp-ink-3); line-height: 1.65;
  word-break: keep-all;
}

/* ── STEP6 목표 지표 ──────────────────────────────────────────────────── */
.rtp-goal-statlist { display: flex; flex-direction: column; gap: var(--bb-space-2); margin-top: var(--bb-space-15); }
.rtp-goal-stat {
  display: block; width: 100%; text-align: left;
  padding: var(--bb-goal-stat-pad-t) var(--bb-space-15) var(--bb-space-15);
  border: 1.5px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  background: var(--bb-bg); font-family: var(--bb-font); cursor: pointer;
}
.rtp-goal-stat--active { border-color: var(--bb-primary); background: var(--bb-primary-tint); }
.rtp-goal-stat--recommend:not(.rtp-goal-stat--active) { border-color: var(--bb-ink); box-shadow: var(--bb-goal-shadow-2); }
.rtp-goal-stat.rtp-goal-shake { animation: rtp-goal-shake 320ms; }
@keyframes rtp-goal-shake {
  25% { transform: translateX(-5px); }
  50% { transform: translateX(5px); }
  75% { transform: translateX(-3px); }
}
.rtp-goal-stat__top { display: flex; align-items: center; gap: var(--bb-space-2); flex-wrap: wrap; }
.rtp-goal-stat__check {
  flex: 0 0 auto; width: 20px; height: 20px; border-radius: 6px;
  border: 1.8px solid var(--bb-border); background: var(--bb-bg);
  display: grid; place-items: center; line-height: 1;
  font-family: var(--bb-font-num); font-size: var(--bb-text-11-plus); font-weight: 800; color: transparent;
}
.rtp-goal-stat--active .rtp-goal-stat__check { border-color: var(--bb-primary); background: var(--bb-primary); color: var(--bb-bg); }
.rtp-goal-stat__label { font-size: var(--bb-goal-fs-12p5); font-weight: 700; letter-spacing: -.2px; color: var(--bb-ink); }
.rtp-goal-stat .rtp-goal-stat__badge { margin-left: 2px; color: var(--bb-primary-heavy); /* SS-2 AA: 3.68→4.92:1 on primary-soft (STEP6 한정 — 공용 .bb-badge-primary 는 그대로) */ }
.rtp-goal-stat__value { margin-left: auto; font-family: var(--bb-font-num); font-size: var(--bb-goal-fs-17); font-weight: 800; letter-spacing: -.5px; color: var(--bb-ink); }
/* R147 — 값이 비는 이유를 글로 말하는 자리(`시도 수가 없었어요`·`시도가 적어…`). 숫자용 큰 글씨·자간을 쓰지 않는다. */
.rtp-goal-stat__value--reason {
  font-family: inherit; font-size: var(--bb-text-11-plus); font-weight: 700;
  letter-spacing: -.2px; color: var(--bb-ink-muted); text-align: right; word-break: keep-all;
}
.rtp-goal-stat__gap {
  margin-left: auto; font-family: var(--bb-font-num); font-size: var(--bb-text-11-plus);
  font-weight: 800; color: var(--bb-primary);
}
.rtp-goal-stat--recommend .rtp-goal-stat__gap { margin-left: 9px; }

/* 기준선 눈금 위의 대학/전국 평균 마크 */
.rtp-goal-stat__mark { position: relative; display: block; height: 17px; margin-top: 9px; }
.rtp-goal-stat__mark span {
  position: absolute; bottom: 0; transform: translateX(-50%);
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 7px; border-radius: var(--bb-radius-pill);
  background: var(--bb-bg); box-shadow: 0 0 0 1px var(--bb-border);
  font-family: var(--bb-font-num); font-size: var(--bb-goal-fs-9p5); font-weight: 800; color: var(--rtp-ink-2);
  white-space: nowrap;
}

.rtp-goal-stat-bar { display: block; }
.rtp-goal-stat-bar__track {
  position: relative; display: block; height: 9px; border-radius: 5px;
  background: var(--rtp-bg); margin: 6px 0 6px; overflow: hidden;
}
.rtp-goal-stat--active .rtp-goal-stat-bar__track { background: rgba(0,0,0,.06); }
.rtp-goal-stat-bar__fill {
  position: absolute; left: 0; top: 0; bottom: 0; border-radius: 5px;
  background: var(--bb-primary); max-width: 100%;
}
.rtp-goal-stat-bar__fill--lo { background: var(--rtp-ink-3); }
.rtp-goal-stat-bar__tick { position: absolute; top: 0; bottom: 0; width: 2px; border-radius: 2px; background: var(--rtp-ink-2); }
.rtp-goal-stat-bar__tick--best { background: var(--bb-ink); }
.rtp-goal-stat__scale {
  display: flex; justify-content: space-between; gap: var(--bb-space-2);
  font-family: var(--bb-font-num); font-size: var(--bb-text-2xs-plus); font-weight: 700; color: var(--rtp-ink-3);
}

.rtp-goal-stat__source {
  display: block; margin-top: 4px;
  font-size: var(--bb-text-2xs-plus); font-weight: 600; color: var(--bb-ink-muted);
}
.rtp-goal-stat__note {
  display: block; margin-top: 6px; padding-top: 6px; border-top: 1px solid var(--bb-border-soft);
  font-size: var(--bb-text-2xs-plus); font-weight: 600; color: var(--bb-ink-muted); line-height: 1.6;
}
/* F5(2026-09-24 대비 감사) — `--bb-warning`(#FAA800) on 흰 배경은 1.97:1 로 미달이고
   더 어두운 warning 계열 토큰이 없다("경고색을 새로 만들지 않는다" 는 이 감사의
   전제 — contrast-decision.md). 같은 따뜻한(주황~빨강) 계열의 기존 다크 토큰
   `--bb-primary-heavy`(#B8401A) 로 교체 — 흰 배경에서 5.55:1. */
.rtp-goal-stat__thin {
  display: inline-block; margin-top: 6px;
  font-size: var(--bb-text-2xs-plus); font-weight: 700; color: var(--bb-primary-heavy);
}
.rtp-goal-stat__lowinfo {
  margin: var(--bb-space-2) 0 6px; font-size: var(--bb-text-2xs-plus); font-weight: 600; color: var(--bb-ink-muted);
}
.rtp-goal-stat__why {
  display: block; margin-top: var(--bb-goal-stat-why-gap); padding-top: var(--bb-goal-stat-why-gap);
  border-top: 1px solid var(--bb-border-soft);
  font-size: var(--bb-text-11); font-weight: 700; letter-spacing: -.2px; color: var(--bb-ink);
}

/* ── 완료 카드 (goal_done.html) ─────────────────────────────────────────── */
.rtp-goal-done { padding: var(--bb-space-4) var(--bb-space-3) var(--bb-space-5); }
.rtp-goal-done__kicker {
  display: inline-flex; padding: 4px 10px; border-radius: var(--bb-radius-pill);
  background: var(--bb-primary-soft); color: var(--bb-primary-dark);
  font-size: var(--bb-text-11); font-weight: 800; margin: 0 0 var(--bb-space-2);
}
.rtp-goal-done__title {
  font: var(--bb-type-h3); letter-spacing: var(--bb-tracking-h3); color: var(--bb-ink);
  margin: 0 0 var(--bb-space-3); word-break: keep-all; white-space: pre-line;
}
.rtp-goal-done__card {
  border: 1.5px solid var(--bb-border); border-radius: var(--rtp-radius-lg);
  padding: var(--bb-space-3); margin-bottom: var(--bb-space-3);
}
.rtp-goal-done__card-title { font-size: var(--bb-text-11); font-weight: 800; color: var(--bb-ink-muted); margin: 0 0 var(--bb-space-2); }
.rtp-goal-done__stat { display: flex; align-items: baseline; justify-content: space-between; padding: 6px 0; }
.rtp-goal-done__stat + .rtp-goal-done__stat { border-top: 1px solid var(--bb-border-soft); }
.rtp-goal-done__stat-label { font-size: var(--bb-text-sm); font-weight: 700; color: var(--bb-ink); }
.rtp-goal-done__stat-value { font-family: var(--bb-font-num); font-size: var(--bb-text-lg); font-weight: 800; color: var(--bb-ink); }
.rtp-goal-done__next {
  font-size: var(--bb-text-sm); color: var(--bb-ink-sub); text-align: center;
  margin: var(--bb-space-2) 0 var(--bb-space-4);
}

.rtp-goal-notify {
  border: 1.5px dashed var(--bb-border); border-radius: var(--rtp-radius-lg);
  padding: var(--bb-space-3); text-align: center; margin-bottom: var(--bb-space-3);
}
.rtp-goal-notify__title { font-size: var(--bb-text-base); font-weight: 800; color: var(--bb-ink); margin: 0 0 4px; }
.rtp-goal-notify__sub { font-size: var(--bb-text-sm); color: var(--bb-ink-sub); margin: 0 0 var(--bb-space-2); word-break: keep-all; }
.rtp-goal-notify__done { font-size: var(--bb-text-sm); font-weight: 700; color: var(--bb-primary-dark); margin: 0; }

/* [hidden] 가드 (auto_rules frontend/ — hidden 토글 요소는 display 선언 시 가드 필수) */
.rtp-goal-picks[hidden],
.rtp-goal-notify[hidden] { display: none; }

/* ═══════════════════════════════════════════════════════════════════════
 * ② goal_flow v2 신규 화면 — 정본 CSS 를 클래스 이름 그대로(값 수정 없음).
 * 수정이 필요하면 정본 토큰 값(tokens.css v2 블록)을 바꾸거나 contract
 * PROTO_STYLE_EXCEPTIONS 에 사유를 적는다 — 여기 값을 손으로 고치지 않는다.
 * ═══════════════════════════════════════════════════════════════════════ */

/* ── 정본 proto/flow.css (새 화면이 쓰는 공용 뼈대만) ── */
.scn{flex:1;min-height:0;display:flex;flex-direction:column}
.bd{flex:1;min-height:0;overflow-y:auto;padding:14px 22px 16px}
.bd::-webkit-scrollbar{width:0}
.ft{flex:0 0 auto;padding:12px 22px 14px;background:var(--rtp-white);border-top:1px solid var(--rtp-line-soft)}
.ft--dk{background:var(--rtp-ink);border-top:0}
.ft__note{margin:9px 0 0;text-align:center;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-3)}
.ft__note--dk{color:var(--bb-goal-c-white-a66)}
/* R22 — 클립보드 복사 실패 시 선택 가능한 주소(길게 눌러 복사) */
.ft__addr{margin:8px 0 0;padding:9px 12px;border:1px dashed var(--rtp-line);border-radius:var(--bb-goal-radius-9);background:var(--rtp-bg);font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-2);text-align:center;word-break:break-all;user-select:text;-webkit-user-select:text}
.ft__addr[hidden]{display:none}
.later{display:block;width:100%;margin:6px 0 0;padding:10px 0;border:0;background:0;font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer}
.hint{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-2)}
.hint i{flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:var(--rtp-orange)}
.q{margin:0 0 7px;font-size:var(--bb-goal-fs-22);font-weight:800;letter-spacing:-.6px;line-height:1.36}
.q--sm{font-size:var(--bb-goal-fs-19p5)}
.sub{margin:0 0 20px;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-3);line-height:1.65}
.sub b{font-weight:800;color:var(--rtp-ink-2)}

/* ── 정본 proto/flow-gate.css (W1) ── */
.gt{flex:1;min-height:0;display:flex;flex-direction:column}
.gt__bd{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px 24px 18px}
.gt__ic{width:72px;height:72px;border-radius:50%;background:var(--bb-primary-tint);display:grid;place-items:center;font-size:var(--bb-goal-fs-32);animation:gspin 5.2s ease-in-out infinite}
@keyframes gspin{0%,52%{transform:rotate(0)}70%{transform:rotate(-26deg)}86%{transform:rotate(12deg)}100%{transform:rotate(0)}}
.gt__t{margin:20px 0 0;font-size:var(--bb-goal-fs-22);font-weight:800;line-height:1.4;letter-spacing:-.6px}
.gt__s{margin:10px 0 0;max-width:19em;font-size:var(--bb-goal-fs-13);font-weight:600;line-height:1.7;color:var(--rtp-ink-2)}
.gt__lg{width:100%;max-width:320px;display:flex;flex-direction:column;gap:9px;margin-top:20px;text-align:left}
.gt__lg div{display:flex;gap:10px;align-items:flex-start;padding:13px 14px;border-radius:var(--bb-goal-radius-13);background:var(--rtp-bg)}
.gt__lg span{flex:0 0 auto;width:21px;height:21px;border-radius:50%;background:var(--rtp-orange);color:var(--bb-goal-c-white);display:grid;place-items:center;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:800}
.gt__lg p{margin:0;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.gt__lg p b{font-weight:800;color:var(--rtp-ink)}
.gt__hint{display:flex;align-items:center;gap:7px;margin:18px 0 0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-2)}
.gt__hint i{width:5px;height:5px;border-radius:50%;background:var(--rtp-orange)}
.gt__url{margin:16px 0 0;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3)}

/* ── 정본 proto/flow-wgate.css (W2 수집목록·힌트 · W3 · W4 — W2 카드는 .rtp-goal-gate* 가 이미 있다) ── */
/* R69(F2) — W3 CTA `받기 · N개`. `.rtp-btn{display:inline-flex}` 라 라벨 span 이 flex 항목이 되고
   그 **앞 공백이 접혀** `받기· 1개` 로 붙었다. 이 span 만 공백을 살린다(다른 .rtp-btn 무영향). */
[data-goal-w3] [data-n-label]{white-space:pre}
.wgc__bar{display:block;margin-top:8px;height:4px;border-radius:var(--bb-goal-radius-3);background:var(--bb-goal-c-white-a12);overflow:hidden}
.wgc__bar i{display:block;height:100%;border-radius:var(--bb-goal-radius-3);background:var(--bb-goal-c-white-a50)}
.wgc__r em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800;color:var(--bb-goal-c-white-a72);letter-spacing:-.3px}
.wwl{margin-top:14px;padding-top:4px;border-top:1px solid var(--bb-goal-c-white-a10)}
.wwl__h{display:flex;align-items:baseline;gap:8px;padding:10px 2px 6px}
.wwl__h b{font-size:var(--bb-goal-fs-11p5);font-weight:800;color:var(--bb-goal-c-white-a88)}
.wwl__h s{margin-left:auto;text-decoration:none;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10);font-weight:700;color:var(--bb-goal-c-white-a40)}
.wwl__r{display:flex;align-items:center;gap:10px;padding:9px 2px}
.wwl__r+.wwl__r{border-top:1px solid var(--bb-goal-c-white-a6)}
.wwl__c{flex:0 0 auto;width:15px;height:15px;border-radius:50%;display:grid;place-items:center;font-size:var(--bb-goal-fs-8p5);font-weight:800;background:var(--bb-goal-c-white-a10);color:var(--bb-goal-c-white-a35)}
.wwl__r--ok .wwl__c{background:var(--bb-goal-c-ff7a2c-a22);color:var(--rtp-orange)}
.wwl__t{flex:1;min-width:0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--bb-goal-c-white-a62);line-height:1.45}
.wwl__t em{font-style:normal;font-weight:800;margin-right:5px;color:var(--bb-goal-c-white-a34)}
.wwl__r--ok .wwl__t{color:var(--bb-goal-c-white-a90);font-weight:700}
.wwl__r--ok .wwl__t em{color:var(--rtp-orange)}
.wwl__m{flex:0 0 auto;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--bb-goal-c-white-a40)}
.wwl__r--ok .wwl__m{color:var(--bb-goal-c-white-a62)}
.wdk__hint{display:flex;align-items:flex-start;gap:7px;margin:14px 0 0;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--bb-goal-c-white-a45);line-height:1.55}
.wdk__hint i{width:4px;height:4px;border-radius:50%;background:var(--rtp-orange);flex:0 0 auto;margin-top:5px}
.whz{border:1.5px solid var(--rtp-orange);border-radius:var(--bb-goal-radius-16);background:var(--bb-primary-tint);padding:12px 13px 13px;margin-top:4px}
.whz:not(.whz--on){border-color:var(--rtp-line);background:var(--rtp-white)}
.whz__hr,.wcnd__hr{display:flex;align-items:center;gap:5px}
.wck{flex:0 0 auto;display:grid;place-items:center;width:38px;height:38px;margin:-8px -2px -8px -8px;border:0;background:0;cursor:pointer}
.wc{width:20px;height:20px;border-radius:var(--bb-goal-radius-6);border:1.8px solid var(--rtp-line);display:grid;place-items:center;font-size:var(--bb-goal-fs-11);color:transparent}
.whz--on .wc,.wcnd__it--on .wc{background:var(--rtp-orange);border-color:var(--rtp-orange);color:var(--bb-goal-c-white)}
.whz__h{flex:1;min-width:0;display:flex;align-items:center;gap:9px;padding:0;border:0;background:0;font-family:inherit;color:inherit;text-align:left;cursor:pointer}
.whz__h b{flex:1;min-width:0;font-size:var(--bb-goal-fs-14);font-weight:800;letter-spacing:-.3px}
.whz__h em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-15);font-weight:800;color:var(--rtp-orange)}
.wchev{flex:0 0 auto;font-style:normal;font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--rtp-ink-3);transition:transform .2s}
.is-wopen .wchev{transform:rotate(180deg)}
.whz__bar{margin:9px 0 0;height:6px;border-radius:var(--bb-goal-radius-3);background:var(--bb-goal-c-ff7a2c-a18);overflow:hidden}
.whz__bar i{display:block;height:100%;border-radius:var(--bb-goal-radius-3);background:var(--rtp-orange)}
.whz__d,.wcnd__d{display:none}
.is-wopen .whz__d,.is-wopen .wcnd__d{display:block}
.whz__l{display:flex;flex-direction:column;gap:9px;margin-top:12px}
.whz__i{display:flex;align-items:center;gap:9px;font-size:var(--bb-goal-fs-12);font-weight:700;letter-spacing:-.2px}
.whz__i span{flex:0 0 auto;width:17px;height:17px;border-radius:var(--bb-goal-radius-9);background:var(--rtp-orange);color:var(--bb-goal-c-white);display:grid;place-items:center;font-size:var(--bb-goal-fs-9p5)}
.whz__i--todo{color:var(--rtp-ink-3);font-weight:600}
.whz__i--todo span{background:0;border:1.5px solid var(--rtp-line);color:transparent}
.whz__i u{margin-left:auto;text-decoration:none;font-size:var(--bb-goal-fs-10);font-weight:700;color:var(--rtp-ink-3)}
.whz__f{display:flex;align-items:center;justify-content:space-between;margin-top:12px;padding-top:11px;border-top:1px solid var(--bb-goal-c-ff7a2c-a25)}
.whz__f b{font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2)}
.whz__f b i{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800;color:var(--rtp-ink);margin-left:5px}
.whz__f s{text-decoration:none;font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.woth{margin:18px 0 9px;font-size:var(--bb-goal-fs-10p5);font-weight:800;color:var(--rtp-ink-3);letter-spacing:.2px}
.woth span{margin-left:7px;font-weight:700;color:var(--rtp-ink-4)}
.wcnd{display:flex;flex-direction:column;gap:8px}
.wcnd__it{border:1.5px solid var(--rtp-line);border-radius:var(--bb-goal-radius-12);background:var(--rtp-white);padding:10px 12px}
.wcnd__it--on{border-color:var(--rtp-orange);background:var(--bb-primary-tint)}
.wcnd__it.is-wopen{border-color:var(--rtp-ink)}
.wcnd__hd{flex:1;min-width:0;display:flex;align-items:center;gap:9px;padding:0;border:0;background:0;font-family:inherit;color:inherit;text-align:left;cursor:pointer}
.wcnd__hd b{flex:1;min-width:0;font-size:var(--bb-goal-fs-12p5);font-weight:700;letter-spacing:-.3px}
.wcnd__hd s{flex:0 0 auto;width:52px;height:4px;border-radius:var(--bb-goal-radius-3);background:var(--rtp-bg);overflow:hidden;text-decoration:none}
.wcnd__hd s i{display:block;height:100%;border-radius:var(--bb-goal-radius-3);background:var(--rtp-orange)}
.wcnd__hd em{flex:0 0 auto;font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-12);font-weight:800;letter-spacing:-.3px}
.wcnd__hd u{flex:0 0 auto;text-decoration:none;font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
/* SS-1 — 칸이 100% 모였을 때 `%`·막대·체크 대신 문구(COPY_V3 w3_collected_all). 글자는 primary-heavy(흰 바탕 5.55:1 AA) — 오렌지 본색은 흰 바탕 2.9:1 이라 못 쓴다 */
.whz__h .wcol, .wcnd__hd .wcol { flex: 0 1 auto; max-width: 58%; font-style: normal; font-family: inherit; font-size: var(--bb-goal-fs-11p5); font-weight: 800; letter-spacing: -.2px; line-height: 1.35; text-align: right; word-break: keep-all; color: var(--bb-primary-heavy); }
.wcnd__d{padding-top:2px}
.wcnd__d .whz__l{padding-top:10px;border-top:1px solid var(--rtp-line-soft);margin-top:8px}
.wgate{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:center;padding:0 24px;text-align:center;overflow-y:auto}
.wgate::-webkit-scrollbar{width:0}
.wgate__ic{position:relative;width:74px;height:74px;margin:0 auto;border-radius:var(--bb-goal-radius-22);background:linear-gradient(160deg,var(--bb-goal-c-fff1e7),var(--bb-goal-c-ffd9c2) 52%,var(--bb-goal-c-ffc39f));display:grid;place-items:center;box-shadow:var(--bb-goal-shadow-8)}
.wgate__ic span{font-size:var(--bb-goal-fs-34);line-height:1;animation:wbell 4.4s ease-in-out infinite;transform-origin:50% 12%}
@keyframes wbell{0%,58%,100%{transform:rotate(0)}64%{transform:rotate(15deg)}70%{transform:rotate(-12deg)}76%{transform:rotate(8deg)}82%{transform:rotate(-5deg)}88%{transform:rotate(2deg)}}
.wgate__t{margin:20px 0 0;font-size:var(--bb-goal-fs-22);font-weight:800;line-height:1.4;letter-spacing:-.6px}
.wgate__s{margin:11px 0 0;font-size:var(--bb-goal-fs-13);font-weight:600;color:var(--rtp-ink-2);line-height:1.7}
.wgate__s b{font-weight:800;color:var(--rtp-ink)}
.wlg{display:flex;flex-direction:column;gap:9px;margin-top:20px;text-align:left}
.wlg>div{display:flex;gap:10px;align-items:flex-start;padding:13px 14px;border-radius:var(--bb-goal-radius-13);background:var(--rtp-bg)}
.wlg .c{flex:0 0 auto;width:21px;height:21px;border-radius:50%;background:var(--rtp-orange);color:var(--bb-goal-c-white);display:grid;place-items:center;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:800}
.wlg p{margin:0;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.wlg p b{font-weight:800;color:var(--rtp-ink)}
.wwarn{display:flex;gap:8px;margin-top:14px;padding:12px 13px;border-radius:var(--bb-goal-radius-12);background:var(--bb-goal-c-fff4ed);text-align:left}
.wwarn b{font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--bb-goal-c-c2410c)}
.wwarn p{margin:3px 0 0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--bb-goal-c-9a3412);line-height:1.55}
.wdim{position:absolute;inset:0;background:var(--bb-goal-c-dim-a50);z-index:5}
.wsheet{position:absolute;left:0;right:0;bottom:0;z-index:6;background:var(--rtp-white);border-radius:var(--bb-goal-radius-22) var(--bb-goal-radius-22) 0 0;padding:8px 20px 20px}
/* R150(mini E) — 푸터가 사라져 문서가 더 안 늘어난다. 컨테이너 바닥에 붙은 이 완료 시트의 `기록 둘러보기` 버튼이 하단 메뉴 밑에
   영구히 가려졌다(전엔 푸터가 만든 스크롤로 겨우 닿았다). 메뉴가 있는 화면은 메뉴(+본인인증 띠) 위로 띄운다. */
body.rtp-has-nav .wsheet{bottom:calc(var(--rtp-footer-nav-h) + env(safe-area-inset-bottom, 0px))}
body.rtp-has-nav.rtp-has-identity-banner .wsheet{bottom:calc(var(--rtp-footer-nav-h) + env(safe-area-inset-bottom, 0px) + var(--rtp-identity-banner-h))}
.wgrab{width:38px;height:4px;border-radius:var(--bb-goal-radius-2);background:var(--rtp-line);margin:0 auto 14px}
.wok{display:inline-flex;align-items:center;gap:6px;margin-bottom:11px;padding:4px 9px;border-radius:var(--bb-goal-radius-7);background:var(--bb-goal-c-e6f9f2);font-size:var(--bb-goal-fs-10p5);font-weight:800;color:var(--bb-goal-c-0f7b5f)}
.wsh__t{margin:0;font-size:var(--bb-goal-fs-19);font-weight:800;letter-spacing:-.5px;line-height:1.34}
.wsh__d{margin:7px 0 16px;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
@media(prefers-reduced-motion:reduce){.wgate__ic span{animation:none}}

/* ── 정본 proto/flow-result.css (해볼 만하다) — 수집 로딩(.ld2*·.sr*)은 mini C 에서 삭제(사용자 결정 2026-10-01) ── */
.stp{display:flex;align-items:center;gap:7px;margin:0 0 16px}
.stp i{flex:1;height:3px;border-radius:var(--bb-goal-radius-2);background:var(--rtp-line)}
.stp i.on{background:var(--rtp-orange)}
.kd{margin:0;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:800;letter-spacing:.7px;color:var(--rtp-orange)}
.h1{margin:7px 0 6px;font-size:var(--bb-goal-fs-22);font-weight:800;letter-spacing:-.7px;line-height:1.32}
.rsub{margin:0;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.dl{margin-top:22px;display:flex;flex-direction:column;gap:24px}
.d__t{display:flex;align-items:baseline;justify-content:space-between}
.d__t b{font-size:var(--bb-goal-fs-14);font-weight:800;letter-spacing:-.3px}
.d__t em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-18);font-weight:800;letter-spacing:-.5px}
.d__t em u{text-decoration:none;font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-ink-3);margin-left:4px}
.axis{display:flex;justify-content:space-between;margin-top:7px;padding-top:7px;border-top:1px solid var(--rtp-line);font-size:var(--bb-goal-fs-10);font-weight:700;color:var(--rtp-ink-4)}
.d__d{margin:11px 0 0;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.d__d b{font-weight:800;color:var(--rtp-ink)}
.tl{margin-top:20px;display:flex;flex-direction:column;gap:22px}
.tl__t{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:4px}
.tl__t b{font-size:var(--bb-goal-fs-13p5);font-weight:800;letter-spacing:-.3px}
.tl__t s{text-decoration:none;font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.tl__c{position:relative;height:96px;margin-top:12px;border-bottom:1px solid var(--rtp-line)}
.tl__grid{position:absolute;inset:0}
.tl__grid i{position:absolute;top:0;bottom:0;width:1px;background:var(--rtp-line-soft)}
.tl__path{position:absolute;inset:0}
.tl__dot{position:absolute;width:9px;height:9px;border-radius:50%;background:var(--rtp-white);border:2px solid var(--rtp-ink-4);transform:translate(-50%,50%)}
.tl__dot em{position:absolute;bottom:13px;left:50%;transform:translateX(-50%);font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:800;color:var(--rtp-ink-3);white-space:nowrap}
.tl__me{width:13px;height:13px;background:var(--rtp-orange);border-color:var(--rtp-orange);box-shadow:var(--bb-goal-shadow-9)}
.tl__me em{color:var(--rtp-orange);bottom:16px}
.tl__x{display:flex;justify-content:space-between;margin-top:8px;font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.tlsvg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.tlbase{position:absolute;left:0;right:0;height:0;border-top:1.5px dashed var(--bb-goal-c-ff7a2c-a50)}
.tlbase b{position:absolute;left:0;bottom:4px;display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:var(--bb-goal-radius-999);background:var(--rtp-white);box-shadow:var(--bb-goal-shadow-3);font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-9p5);font-weight:800;color:var(--rtp-ink-2);white-space:nowrap}
.tlbase b img{width:11px;height:11px;object-fit:contain}
.tmc{margin-top:22px;padding:16px 18px 15px;border-radius:var(--bb-goal-radius-16);background:var(--rtp-white);border:1px solid var(--rtp-line-soft)}
.tmc__hd{display:flex;align-items:baseline;gap:8px}
.tmc__hd b{flex:1;font-size:var(--bb-goal-fs-12p5);font-weight:800;letter-spacing:-.2px}
.tmc__hd s{text-decoration:none;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.tmc__v{display:flex;align-items:baseline;gap:7px;margin-top:12px}
.tmc__v b{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-38);font-weight:800;letter-spacing:-1.6px;line-height:1}
.tmc__v span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:700;color:var(--rtp-ink-3)}
.tmc__s{margin:13px 0 0;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-2);line-height:1.6}
.tmc__s em{font-style:normal;font-weight:800;color:var(--rtp-orange)}
.tmc__f{display:flex;gap:26px;margin-top:14px;padding-top:13px;border-top:1px solid var(--rtp-line-soft)}
.tmc__f div b{display:block;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-17);font-weight:800;letter-spacing:-.4px}
.tmc__f div span{display:block;margin-top:4px;font-size:var(--bb-goal-fs-10p5);font-weight:600;color:var(--rtp-ink-3)}
.tmc__f div+div b{color:var(--rtp-orange)}

/* ── 정본 proto/home-full.css (목표 홈 — .homefull 스코프) ── */
.homefull a{color:var(--rtp-orange);text-decoration:none}
.homefull a:hover{color:var(--bb-primary-dark,var(--bb-goal-c-d94f1c))}
.homefull .ph__body{flex:1;overflow-y:auto;overscroll-behavior:contain}
.homefull .ph__body::-webkit-scrollbar{width:0}
.homefull [hidden]{display:none !important}
.homefull .gh{padding:12px 16px 20px;display:flex;flex-direction:column;gap:10px}
.homefull .sbadd{display:block;width:100%;margin-top:10px;padding:11px;border:1.5px dashed var(--rtp-line);border-radius:var(--bb-goal-radius-11);background:0;font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:700;color:var(--rtp-ink-3);cursor:pointer}
.homefull .sbadd:disabled{opacity:.4}
.homefull .mp{margin-top:10px;padding:12px;border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.homefull .mp__hd{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.homefull .mp__hd b{flex:1;font-size:var(--bb-goal-fs-12);font-weight:800}
.homefull .mp__hd button{border:0;background:0;font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer;padding:2px 4px}
.homefull .mp__cat{margin:10px 0 6px;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10);font-weight:800;letter-spacing:.6px;color:var(--rtp-ink-3)}
.homefull .mp__it{display:flex;align-items:center;gap:8px;width:100%;padding:9px 10px;margin-bottom:5px;border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-9);background:var(--rtp-white);font-family:inherit;cursor:pointer;text-align:left}
.homefull .mp__it b{flex:1;font-size:var(--bb-goal-fs-12);font-weight:700}
.homefull .mp__it em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11p5);font-weight:800;color:var(--rtp-ink-3)}
.homefull .mp__it[disabled]{opacity:.4;cursor:default}
.homefull .mp__rm{color:var(--rtp-orange)!important}
.homefull .cats{display:flex;gap:6px;margin:0 0 12px;padding:4px;border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.homefull .cats button{flex:1;padding:9px 4px;border:0;border-radius:var(--bb-goal-radius-9);background:0;font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer;letter-spacing:-.3px}
.homefull .cats button[aria-selected="true"]{background:var(--bb-goal-c-white);color:var(--rtp-ink);font-weight:800;box-shadow:var(--bb-goal-shadow-1)}
.homefull .dtpin{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-9p5);font-weight:800;padding:3px 6px;border-radius:var(--bb-goal-radius-5);background:var(--bb-primary-tint);color:var(--bb-primary-dark)}
.homefull .cmp__lg{width:20px;height:20px;object-fit:contain;flex:0 0 auto;margin-right:-2px}
.homefull .pg__lg{width:13px;height:13px;object-fit:contain;vertical-align:-2px;margin-right:4px}
.homefull .cmp__alt img{width:17px;height:17px;object-fit:contain;flex:0 0 auto}
.homefull .sbttl{display:flex;align-items:baseline;gap:8px;margin:14px 0 10px;padding-top:13px;border-top:1px solid var(--rtp-line-soft)}
.homefull .sbttl b{flex:1;font-size:var(--bb-goal-fs-12p5);font-weight:800;letter-spacing:-.2px}
.homefull .sbttl span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-ink-3)}
.homefull .sb__fill--lo{background:var(--rtp-ink-3)!important}
.homefull .sb__sw{margin-left:8px;border:0;background:0;font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--rtp-ink-3);cursor:pointer;padding:0 3px;line-height:1}
.homefull .cmp{background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:14px 16px}
.homefull .cmp__hd{display:flex;align-items:center;gap:8px;width:100%;border:0;background:0;padding:0;font-family:inherit;cursor:pointer;text-align:left}
.homefull .cmp__uni{font-size:var(--bb-goal-fs-13p5);font-weight:800;letter-spacing:-.2px}
.homefull .cmp__who{flex:1;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-3)}
.homefull .cmp__chev{color:var(--rtp-ink-3);font-size:var(--bb-goal-fs-10);transition:transform .18s}
.homefull .cmp__hd[aria-expanded="true"] .cmp__chev{transform:rotate(180deg)}
.homefull .cmp__note{margin:10px 0 0;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-3);line-height:1.5}
.homefull .cmp__more{display:none;margin-top:12px;padding-top:11px;border-top:1px solid var(--rtp-line-soft);flex-direction:column;gap:8px}
.homefull .cmp__more.open{display:flex}
.homefull .cmp__alt{display:flex;align-items:center;gap:10px;width:100%;border:0;background:0;padding:0;font-family:inherit;cursor:pointer;text-align:left}
.homefull .cmp__rank{width:20px;height:20px;border-radius:var(--bb-goal-radius-6);background:var(--rtp-bg);display:grid;place-items:center;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:800;color:var(--rtp-ink-3)}
.homefull .cmp__alt b{flex:1;font-size:var(--bb-goal-fs-12p5);font-weight:700}
.homefull .cmp__alt em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--rtp-ink-2)}
.homefull .cmp__alt s{text-decoration:none;font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-orange)}
.homefull [data-sbv]{position:relative;display:inline-block;transition:transform .25s cubic-bezier(.2,1.4,.4,1),color .25s}
.homefull [data-sbv].tick{transform:scale(1.08);color:var(--rtp-orange)}
.homefull [data-stat]{position:relative;display:inline-block;transition:transform .25s cubic-bezier(.2,1.4,.4,1),color .25s}
.homefull [data-stat].tick{transform:scale(1.08);color:var(--rtp-orange)}
.homefull .pop{position:absolute;left:100%;bottom:2px;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-12p5);font-weight:800;color:var(--rtp-orange);pointer-events:none;animation:pop 1s cubic-bezier(.2,.8,.2,1) forwards;white-space:nowrap}
@keyframes pop{0%{opacity:0;transform:translate(2px,4px)}22%{opacity:1;transform:translate(3px,-2px)}70%{opacity:1;transform:translate(3px,-10px)}100%{opacity:0;transform:translate(3px,-18px)}}
.homefull .pg__line{position:relative;margin:18px 0 0;height:46px}
.homefull .pg__avg{position:absolute;top:0;transform:translateX(-50%);text-align:center}
.homefull .pg__avg b{display:block;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10);font-weight:700;color:var(--rtp-ink-3);white-space:nowrap}
.homefull .pg__avg i{display:block;width:1px;height:14px;background:var(--rtp-ink-4);margin:3px auto 0}
.homefull .pg__track{position:absolute;left:0;right:0;top:31px;height:4px;border-radius:var(--bb-goal-radius-999);background:var(--rtp-bg)}
.homefull .pg__start{position:absolute;left:0;top:31px;height:4px;border-radius:var(--bb-goal-radius-999);background:var(--rtp-ink-4);transition:width .6s cubic-bezier(.2,.8,.2,1)}
.homefull .pg__gain{position:absolute;top:29px;height:8px;border-radius:var(--bb-goal-radius-999);background:var(--rtp-orange);transition:left .6s cubic-bezier(.2,.8,.2,1),width .6s cubic-bezier(.2,.8,.2,1)}
.homefull #ttBar{flex:0 0 auto}
.homefull #ttBar .rtp-tab{border:0;background:0;cursor:pointer;font-family:var(--rtp-font-num);min-height:var(--bb-tap-target,44px)}
.homefull .pgc__lab{position:absolute;left:0;width:42px;text-align:right;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-2);transform:translateY(-50%);white-space:nowrap}
.homefull .pgc__lab b{display:block;font-size:var(--bb-goal-fs-9p5);font-weight:700;color:var(--rtp-ink-3);letter-spacing:-.2px}
.homefull .pgc__lab--top{color:var(--bb-primary-dark)}
.homefull .pgc__lab--me{color:var(--rtp-orange)}
.homefull .pgc__y{position:absolute;left:0;top:-4px;font-size:var(--bb-goal-fs-9p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .dmk{position:relative;height:17px;margin-top:8px}
.homefull .dmk__t{position:absolute;bottom:0;transform:translateX(-50%);display:inline-flex;align-items:center;gap:3px;padding:1px 5px;border-radius:var(--bb-goal-radius-999);background:var(--bb-goal-c-white);font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:800;color:var(--rtp-ink-2);white-space:nowrap}
.homefull .dmk__t img{width:12px;height:12px;object-fit:contain}
.homefull .dt .sb__tk{margin-top:2px}
.homefull .gdd{position:relative}
.homefull .gdd__btn{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:0 10px 0 12px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-10);background:var(--bb-goal-c-white);font-family:inherit;cursor:pointer}
.homefull .gdd__btn b{font-size:var(--bb-goal-fs-13);font-weight:800;color:var(--rtp-ink)}
.homefull .gdd__btn i{font-style:normal;font-size:var(--bb-goal-fs-10);color:var(--rtp-ink-3);transition:transform .18s}
.homefull .gdd__btn[aria-expanded="true"]{border-color:var(--rtp-ink)}
.homefull .gdd__btn[aria-expanded="true"] i{transform:rotate(180deg)}
.homefull .gdd__pop{position:absolute;right:0;top:calc(100% + 6px);z-index:20;min-width:132px;padding:5px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-12);background:var(--bb-goal-c-white);box-shadow:var(--bb-goal-shadow-10);display:flex;flex-direction:column;gap:2px}
.homefull .gdd__pop button{display:flex;align-items:center;gap:8px;min-height:38px;padding:0 10px;border:0;border-radius:var(--bb-goal-radius-9);background:0;font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer;text-align:left}
.homefull .gdd__pop button:hover{background:var(--rtp-bg)}
.homefull .gdd__pop button[aria-pressed="true"]{background:var(--rtp-ink);color:var(--bb-goal-c-white)}
.homefull .gdd__pop button em{margin-left:auto;font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;opacity:.62}
.homefull .gsel{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--rtp-line-soft)}
.homefull .gsel>b{flex:1;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .gmsg{margin:8px 0 0;font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-orange);line-height:1.5}
.homefull .sg{padding:12px 16px 22px;display:flex;flex-direction:column;gap:10px}
.homefull .cd{background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:14px 16px 15px}
.homefull .cd__hd{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:12px}
.homefull .cd__hd b{font-size:var(--bb-goal-fs-12p5);font-weight:800}
.homefull .cd__hd span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-ink-3)}
.homefull .hero{background:var(--rtp-ink);color:var(--bb-goal-c-white);border-radius:var(--bb-goal-radius-16);padding:18px 18px 16px}
.homefull .hero__k{font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--bb-goal-c-white-a62)}
.homefull .hero__v{display:flex;align-items:baseline;gap:6px;margin-top:4px}
.homefull .hero__v b{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-44);font-weight:800;letter-spacing:-1.6px;line-height:1}
.homefull .hero__v em{font-style:normal;font-size:var(--bb-goal-fs-14);font-weight:700;color:var(--bb-goal-c-white-a72)}
.homefull .hero__sub{margin:10px 0 0;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--bb-goal-c-white-a72);line-height:1.5}
.homefull .hero__sub b{color:var(--rtp-orange)}
.homefull .cal__hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.homefull .cal__hd b{font-size:var(--bb-goal-fs-13);font-weight:800}
.homefull .cal__nav{display:flex;gap:6px}
.homefull .cal__nav button{width:28px;height:28px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-8);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--rtp-ink-3);cursor:pointer}
.homefull .cal__dow{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;margin-bottom:5px}
.homefull .cal__dow span{text-align:center;font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .cal__dow span:first-child{color:var(--bb-goal-c-d64545)}
.homefull .cal__g{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.homefull .cal__c{position:relative;aspect-ratio:1;border-radius:var(--bb-goal-radius-9);background:var(--rtp-bg);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
.homefull .cal__c em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .cal__c i{width:4px;height:4px;border-radius:50%;background:transparent}
.homefull .cal__c[data-l="1"]{background:var(--bb-goal-c-f05a22-a18)}
.homefull .cal__c[data-l="2"]{background:var(--bb-goal-c-f05a22-a38)}
.homefull .cal__c[data-l="3"]{background:var(--bb-goal-c-c2451a)}
.homefull .cal__c[data-l="4"]{background:var(--bb-goal-c-8f2f0e)}
.homefull .cal__c[data-l="1"] em{color:var(--rtp-ink-2)}
.homefull .cal__c[data-l="2"] em{color:var(--rtp-ink);font-weight:800}
.homefull .cal__c[data-l="3"] em,.homefull .cal__c[data-l="4"] em{color:var(--bb-goal-c-white);font-weight:800}
.homefull .cal__c[data-l="1"] i,.homefull .cal__c[data-l="2"] i{background:var(--bb-goal-c-8f2f0e)}
.homefull .cal__c[data-l="3"] i,.homefull .cal__c[data-l="4"] i{background:var(--bb-goal-c-white-a90)}
.homefull .cal__c--out{background:transparent}
/* F5(2026-09-24 대비 감사, 부수 발견) — `opacity:.45` 를 얹으면 흰 배경에서 1.34:1 까지
   떨어진다(새 미달, qa_smoke "new"). opacity 를 빼면 `--rtp-ink-4` 단색 그대로가 남는데,
   이건 이미 기준선에 결정돼 있는 조합(rgb(176,184,193) on 흰색 2.01:1 — 지난달/다음달
   날짜라 여전히 흐리게는 보인다, contrast-baseline.json). */
.homefull .cal__c--out em{color:var(--rtp-ink-4)}
.homefull .cal__c--future{background:var(--bb-goal-c-white);border:1px dashed var(--rtp-line)}
.homefull .cal__c--today{box-shadow:var(--bb-goal-shadow-11)}
.homefull .cal__ft{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:11px;padding-top:10px;border-top:1px solid var(--rtp-line-soft);font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2)}
.homefull .cal__ft em{font-style:normal;font-family:var(--bb-font-num);color:var(--rtp-ink-3);font-weight:700}
.homefull .cal__ft b{font-family:var(--bb-font-num);color:var(--rtp-orange)}
.homefull .grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.homefull .mini{background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-12);padding:12px 10px;text-align:center}
.homefull .mini b{display:block;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-21);font-weight:800;letter-spacing:-.6px}
.homefull .mini span{display:block;margin-top:3px;font-size:var(--bb-goal-fs-10p5);font-weight:600;color:var(--rtp-ink-3)}
.homefull .up__r+.up__r{margin-top:13px;padding-top:12px;border-top:1px solid var(--rtp-line-soft)}
.homefull .up__hd{display:flex;align-items:baseline;gap:8px}
.homefull .up__hd b{font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2)}
.homefull .up__hd em{margin-left:auto;font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-13);font-weight:800}
.homefull .up__hd em s{text-decoration:none;color:var(--rtp-ink-4);font-weight:700;margin-right:5px}
.homefull .up__hd i{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11p5);font-weight:800;color:var(--rtp-orange)}
.homefull .up__tk{position:relative;height:8px;margin-top:8px;border-radius:var(--bb-goal-radius-4);background:var(--rtp-bg);overflow:hidden}
.homefull .up__tk s{position:absolute;left:0;top:0;bottom:0;background:var(--bb-goal-c-dfe3e8)}
.homefull .up__tk b{position:absolute;top:0;bottom:0;background:var(--rtp-orange)}
/* R48 — 시작 값이 없는 지표는 빈 카드 대신 안내 한 줄 */
.homefull .up__empty{margin:0;padding:10px 0;text-align:center;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-3)}
.homefull .rc__r{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:9px 0;border-bottom:1px dashed var(--rtp-line)}
.homefull .rc__r:last-child{border-bottom:0}
.homefull .rc__r span{font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--rtp-ink-2)}
.homefull .rc__r b{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800}
.homefull .rc__tot{margin-top:6px;padding-top:11px;border-top:2px solid var(--rtp-ink);display:flex;align-items:baseline;justify-content:space-between}
.homefull .rc__tot span{font-size:var(--bb-goal-fs-12);font-weight:800}
.homefull .rc__tot b{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-20);font-weight:800;color:var(--rtp-orange)}
.homefull .sg__note{margin:2px 2px 0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-3);line-height:1.55;text-wrap:pretty}
.homefull .dt{padding:12px 16px 24px;display:flex;flex-direction:column;gap:10px}
.homefull .dt__sec{background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:14px 16px 16px}
.homefull .dt__hd{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:14px}
.homefull .dt__hd b{font-size:var(--bb-goal-fs-12p5);font-weight:800}
.homefull .dt__hd span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .dt__note{margin:12px 0 0;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-3);line-height:1.55}
.homefull .gap+.gap{margin-top:13px}
.homefull .fly{position:fixed;z-index:99;left:0;top:0;padding:5px 10px;border-radius:var(--bb-goal-radius-999);background:var(--rtp-orange);box-shadow:var(--bb-goal-shadow-12);font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800;color:var(--bb-goal-c-white);pointer-events:none;will-change:transform,opacity}
.homefull .pg__now.land{animation:land .6s cubic-bezier(.2,1.5,.4,1)}
@keyframes land{0%{transform:translateX(-50%) scale(1);box-shadow:0 0 0 0 color-mix(in srgb,var(--rtp-orange) 50%,transparent)}35%{transform:translateX(-50%) scale(1.75)}100%{transform:translateX(-50%) scale(1);box-shadow:0 0 0 9px color-mix(in srgb,var(--rtp-orange) 0%,transparent)}}
.homefull .pg__gain.flash{animation:flash .5s ease-out}
@keyframes flash{0%{filter:brightness(1.6)}100%{filter:brightness(1)}}
@media (prefers-reduced-motion:reduce){.homefull .fly{transition-duration:.01s}
.homefull .pg__now.land,.homefull .pg__gain.flash{animation:none}}
.homefull .sheet{position:absolute;inset:0;z-index:30;display:none}
.homefull .sheet.open{display:block}
.homefull .sheet__bg{position:absolute;inset:0;background:var(--bb-goal-c-black-a40)}
.homefull .sheet__pn{position:absolute;left:0;right:0;bottom:0;background:var(--bb-goal-c-white);border-radius:var(--bb-goal-radius-18) var(--bb-goal-radius-18) 0 0;padding:18px 16px}
.homefull .sheet__ttl{font-size:var(--bb-goal-fs-14p5);font-weight:800;letter-spacing:-.2px}
.homefull .sheet__sub{margin:4px 0 16px;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-3);line-height:1.5}
.homefull .fld{display:block;margin-bottom:14px}
.homefull .fld>span{display:block;margin-bottom:7px;font-size:var(--bb-goal-fs-11);font-weight:700;color:var(--rtp-ink-3)}
.homefull .fld input{width:100%;box-sizing:border-box;min-height:46px;padding:0 13px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-12);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-text-base);font-weight:700;color:var(--rtp-ink)}   /* R148 — 16px 미만이면 iOS 사파리가 focus 때 화면을 확대한다 */
.homefull .fld input::placeholder{color:var(--rtp-ink-4);font-weight:600}
.homefull .fld input:focus{outline:none;border-color:var(--rtp-orange)}
.homefull .chips{display:flex;gap:6px}
.homefull .exs{display:flex;flex-wrap:wrap;gap:6px}
.homefull .exs button{min-height:34px;padding:0 11px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-999);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--rtp-ink-2);cursor:pointer}
.homefull .exs button:active{background:var(--rtp-bg)}
.homefull .chips button{flex:1;min-height:40px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-10);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer}
.homefull .chips button[aria-pressed="true"]{background:var(--bb-primary-tint,var(--bb-goal-c-fff4ef));border-color:var(--rtp-orange);color:var(--rtp-orange)}
/* mini B (R136~R138 · E156~E158) — 직접 추가 시트 `+ 지표 추가`. 정본 proto/v2.css L189~214 와 같은 이름·값.
   [hidden] 가드(W4) — 아래 규칙이 display 를 주는 요소는 hidden 속성이 지고 가지 않게 한다. */
.homefull .sheet__pn{max-height:92%;overflow-y:auto;overscroll-behavior:contain}   /* 지표 목록(E158)을 펼치면 시트가 작은 화면보다 커진다 — 안에서 스크롤 */
.homefull .add__hint[hidden],.homefull .addmp[hidden],.homefull .add__plus[hidden]{display:none}
.homefull .add__hint{margin:-2px 0 8px;font-size:var(--bb-goal-fs-11p5);font-weight:600;line-height:1.5;color:var(--rtp-ink-2)}
.homefull .add__hint b{color:var(--rtp-orange);font-weight:800}
.homefull #addArea{flex-wrap:wrap;flex-direction:row}
.homefull #addArea button{min-width:calc(50% - 3px);white-space:nowrap}
.homefull #addArea .add__plus{flex:0 0 auto;min-width:0;width:auto;padding:0 14px;border-style:dashed;color:var(--rtp-ink-3)}
.homefull #addArea .add__plus[aria-expanded="true"]{border-color:var(--rtp-ink-3);color:var(--rtp-ink)}
.homefull .addmp{margin-top:8px;padding:12px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.homefull .addmp button{white-space:nowrap}
.homefull .addmp__hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px}
.homefull .addmp__hd b{font-size:var(--bb-goal-fs-12p5);font-weight:800;white-space:nowrap}
.homefull .addmp__hd button{border:0;background:none;font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer;white-space:nowrap;
  min-height:var(--bb-tap-target);margin:-6px 0;border-block:6px solid transparent;background-clip:padding-box}   /* 탭타겟 44px — 보이는 크기는 정본 32px(투명 테두리 위아래 6px + 음수 마진) */
.homefull .addmp__tabs{display:flex;gap:4px;margin:6px 0 10px}
.homefull .addmp__tabs button{border:0;border-radius:var(--bb-goal-radius-8) / calc(var(--bb-goal-radius-8) + 6px);background:none;padding:0 10px;font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:700;color:var(--rtp-ink-3);cursor:pointer;white-space:nowrap;
  min-height:var(--bb-tap-target);margin:-6px 0;border-block:6px solid transparent;background-clip:padding-box}   /* 탭타겟 44px — 보이는 크기는 정본 32px */
.homefull .addmp__tabs button[aria-pressed="true"]{background:var(--rtp-white);background-clip:padding-box;color:var(--rtp-ink);box-shadow:inset 0 0 0 1px var(--rtp-line)}   /* 정본 outline:1px — 투명 테두리 때문에 outline 은 44px 박스를 두른다. 안쪽(보이는 32px)에 inset 으로 같은 선 */
.homefull .addmp__row{display:flex;flex-wrap:wrap;gap:6px}
.homefull .addmp__row button{display:inline-flex;align-items:center;gap:5px;min-height:34px;padding:0 11px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-999);background:var(--rtp-white);font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:700;color:var(--rtp-ink-2);cursor:pointer;white-space:nowrap}
.homefull .addmp__row button:active{transform:scale(.97)}
.homefull .addmp__row em{font-style:normal;padding:1px 5px;border-radius:var(--bb-goal-radius-5);background:var(--bb-primary-tint);color:var(--rtp-orange);font-size:var(--bb-goal-fs-10);font-weight:800}
.homefull .addmp__ft{margin:10px 0 0;font-size:var(--bb-goal-fs-10p5);font-weight:600;color:var(--rtp-ink-3)}
.homefull .stp{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0 4px;border-top:1px solid var(--rtp-line-soft)}
.homefull .stp>b{font-size:var(--bb-goal-fs-12p5);font-weight:700}
.homefull .stp__ctl{display:flex;align-items:center;gap:12px}
.homefull .stp__ctl button{width:36px;height:36px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-10);background:var(--bb-goal-c-white);font-size:var(--bb-goal-fs-16);font-weight:700;color:var(--rtp-ink-2);cursor:pointer;line-height:1}
.homefull .stp__ctl b{min-width:44px;text-align:center;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-21);font-weight:800}
.homefull .sheet__save{width:100%;min-height:48px;margin-top:16px;border:0;border-radius:var(--bb-goal-radius-12);background:var(--rtp-orange);color:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-13p5);font-weight:800;cursor:pointer}
.homefull .sheet__save[disabled]{background:var(--rtp-line);color:var(--rtp-ink-4);cursor:default}
.homefull .pg__now{--pg-dot-r:7px;position:absolute;top:24px;width:14px;height:14px;border-radius:50%;background:var(--bb-goal-c-white);border:3px solid var(--rtp-orange);transform:translateX(-50%);transition:left .6s cubic-bezier(.2,.8,.2,1)}
.homefull .pg__goal{position:absolute;right:0;top:24px;width:2px;height:14px;background:var(--rtp-orange);border-radius:var(--bb-goal-radius-1)}
.homefull .pg__ax{display:flex;justify-content:space-between;margin-top:3px;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .ms__hd{display:flex;align-items:baseline;justify-content:space-between;padding:6px 2px 2px}
.homefull .ms__hd b{font-size:var(--bb-goal-fs-13);font-weight:800}
.homefull .ms__hd span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .ms{display:flex;flex-direction:column;gap:8px}
.homefull .mi{display:flex;align-items:center;gap:10px;background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:0 8px 0 15px;min-height:62px}
.homefull .mi__tx{flex:1;min-width:0;border:0;background:0;padding:11px 0;font-family:inherit;text-align:left;cursor:pointer}
.homefull .mi__tx b{display:block;font-size:var(--bb-goal-fs-13p5);font-weight:700;letter-spacing:-.2px}
.homefull .mi__tx span{display:block;margin-top:3px;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-3)}
.homefull .mi__gain{font-style:normal;font-family:var(--bb-font-num);font-weight:800;color:var(--rtp-orange)}
.homefull .mi__more{flex:0 0 auto;width:26px;height:36px;border:0;background:0;color:var(--rtp-ink-4);font-size:var(--bb-goal-fs-15);cursor:pointer;border-radius:var(--bb-goal-radius-8)}
.homefull .mi{position:relative}
.homefull .mm{position:absolute;right:44px;top:46px;z-index:5;display:flex;flex-direction:column;min-width:104px;background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-10);box-shadow:var(--bb-goal-shadow-13);overflow:hidden}
/* F3 — 카드가 화면 하단(고정 하단 내비 근처)에 있으면 아래로 열 공간이 없어 '보관'·
   '삭제'가 내비 밑으로 잘렸다. goal-home.js positionMissionMenu() 가 공간을 재서
   부족하면 이 클래스를 붙인다 — top 을 끄고 카드 위쪽으로 대칭 오프셋(46px)만큼
   올려 연다. */
.homefull .mm--up{top:auto;bottom:46px}
.homefull .mm button{border:0;background:0;padding:11px 13px;font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;text-align:left;cursor:pointer;color:var(--rtp-ink)}
.homefull .mm button+button{border-top:1px solid var(--rtp-line-soft)}
.homefull .mm--del{color:var(--rtp-orange)!important}
.homefull .mi__chk{flex:0 0 auto;width:44px;height:44px;border:0;background:0;padding:0;cursor:pointer;display:grid;place-items:center}
.homefull .mi__chk i{width:26px;height:26px;border-radius:50%;border:1.8px solid var(--rtp-line);background:var(--bb-goal-c-white);display:grid;place-items:center;transition:background .18s,border-color .18s,transform .18s}
.homefull .mi__chk i:after{content:"";width:10px;height:5px;border-left:2px solid var(--bb-goal-c-white);border-bottom:2px solid var(--bb-goal-c-white);transform:rotate(-45deg) translate(1px,-1px);opacity:0;transition:opacity .18s}
.homefull .mi--done{background:var(--bb-primary-tint,var(--bb-goal-c-fff4ef));border-color:color-mix(in srgb,var(--rtp-orange) 26%,transparent)}
.homefull .mi--done .mi__chk i{background:var(--rtp-orange);border-color:var(--rtp-orange)}
.homefull .mi--done .mi__chk i:after{opacity:1}
.homefull .mi--done .mi__tx b{color:var(--rtp-ink-2)}
.homefull .mi__add{display:flex;align-items:center;justify-content:center;gap:6px;flex:1;min-height:48px;border:1px dashed var(--rtp-line);border-radius:var(--bb-goal-radius-14);background:0;font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer}
/* R30(U5) — 보관함 진입 버튼(오늘의 미션 아래) */
.homefull .ms__ft{display:flex;gap:8px;margin-top:2px}
.homefull .shelf-btn{flex:0 0 auto;padding:0 16px;min-height:48px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-14);background:var(--rtp-bg);font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer;white-space:nowrap}
.homefull .note{display:flex;gap:9px;background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:13px 15px}
.homefull .note i{flex:0 0 auto;width:6px;height:6px;border-radius:50%;background:var(--rtp-orange);margin-top:6px}
.homefull .note div b{display:block;font-size:var(--bb-goal-fs-12p5);font-weight:800;margin-bottom:3px}
.homefull .note div span{font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.homefull .note div span a{font-weight:800}
.homefull .note div span button{border:0;background:0;padding:0;margin:0;font:inherit;font-weight:800;color:var(--rtp-ink-3);cursor:pointer;text-decoration:underline}
/* R30 — 보관함 시트 행(추가/수정 시트 .mi 와 같은 레이아웃을 재사용) */
.homefull [data-shelf-row]{display:flex;align-items:center;gap:6px;padding:9px 0;border-bottom:1px solid var(--rtp-line-soft)}
.homefull [data-shelf-row] .mi__tx{flex:1;min-width:0;padding:0}
.homefull [data-shelf-row] button{flex:0 0 auto;min-height:44px;padding:0 10px;border:0;background:0;font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-orange);cursor:pointer}
.homefull [data-shelf-del]{color:var(--rtp-ink-3)!important}
.homefull .shelf-empty{padding:20px 0;text-align:center;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--rtp-ink-3)}
/* R31 — 알림 사전 시트의 denied·미지원·iOS 미설치 안내 */
.nsheet__guide{margin-top:12px;padding:12px 13px;border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.nsheet__guide b{display:block;font-size:var(--bb-goal-fs-12);font-weight:800;margin-bottom:3px}
.nsheet__guide p{margin:0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-2)}
.homefull .done{text-align:center;background:var(--bb-goal-c-white);border:1px solid color-mix(in srgb,var(--rtp-orange) 26%,transparent);border-radius:var(--bb-goal-radius-14);padding:18px 16px}
.homefull .done b{display:block;font-size:var(--bb-goal-fs-14);font-weight:800;margin-bottom:5px}
.homefull .done span{font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.6}
.homefull .detail{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:48px;padding:0 16px;border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer;margin-top:2px}
.homefull .detail span{color:var(--rtp-ink-4);font-size:var(--bb-goal-fs-11)}
.homefull .intro{padding:16px}
.homefull .intro__banner{background:var(--rtp-ink);border-radius:var(--bb-goal-radius-16);padding:18px 18px 16px;color:var(--bb-goal-c-white)}
.homefull .intro__banner b{display:block;font-size:var(--bb-goal-fs-16);font-weight:800;line-height:1.4;letter-spacing:-.3px}
.homefull .intro__banner p{margin:8px 0 14px;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--bb-goal-c-white-a70);line-height:1.6}
.homefull .intro__banner button{width:100%;min-height:46px;border:0;border-radius:var(--bb-goal-radius-12);background:var(--rtp-orange);color:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-13p5);font-weight:800;cursor:pointer}
.homefull .intro__steps{margin-top:14px;display:flex;flex-direction:column;gap:2px}
.homefull .intro__step{display:flex;gap:11px;align-items:flex-start;background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);padding:14px 15px}
.homefull .intro__step:first-child{border-radius:var(--bb-goal-radius-14) var(--bb-goal-radius-14) 0 0}
.homefull .intro__step:last-child{border-radius:0 0 var(--bb-goal-radius-14) var(--bb-goal-radius-14)}
.homefull .intro__step i{flex:0 0 auto;width:20px;height:20px;border-radius:50%;background:var(--rtp-bg);color:var(--rtp-ink-2);display:grid;place-items:center;font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:800;margin-top:1px}
.homefull .intro__step span{font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.5}
.homefull .sb{margin-top:14px}
.homefull .sb__r+.sb__r{margin-top:20px;padding-top:18px;border-top:1px solid var(--rtp-line-soft)}
.homefull .sb__r .pg__line{margin:14px 0 0}
.homefull .sb__up{color:var(--rtp-orange);font-size:var(--bb-goal-fs-13);font-weight:800}
.homefull .sb__hd{display:flex;align-items:baseline;gap:8px}
.homefull .sb__hd b{font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2)}
.homefull .sb__hd em{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-17);font-weight:800;letter-spacing:-.4px}
.homefull .sb__hd s{flex:1;text-decoration:none;text-align:right;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-11);font-weight:800}
.homefull .sb__hd s.u{color:var(--rtp-orange)}
.homefull .sb__hd s.o{color:var(--rtp-ink-2)}
.homefull .sb__tk{position:relative;height:9px;margin-top:8px;border-radius:var(--bb-goal-radius-5);background:var(--rtp-bg)}
.homefull .sb__fill{position:absolute;left:0;top:0;height:9px;border-radius:var(--bb-goal-radius-5);background:var(--rtp-orange);transition:width .5s cubic-bezier(.2,.8,.2,1)}
.homefull .sb__avg{position:absolute;top:-3px;width:2px;height:15px;border-radius:var(--bb-goal-radius-1);background:var(--rtp-ink-3);transform:translateX(-50%)}
.homefull .sb__top{position:absolute;top:-3px;width:2px;height:15px;border-radius:var(--bb-goal-radius-1);background:var(--rtp-ink)}
.homefull .sb__ax{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-top:6px}
.homefull .sb__ax span{font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10);font-weight:700;white-space:nowrap}
.homefull .sb__ax .a{color:var(--rtp-ink-3)}
.homefull .sb__ax .t{color:var(--rtp-ink)}
.homefull .sb__r--nome .sb__hd em{color:var(--rtp-ink-4)}
.homefull .sb__r--nome .sb__tk{box-sizing:border-box;background:var(--bb-goal-c-white);border:1px dashed var(--rtp-line)}
.homefull .sb__r--nome .sb__avg,.homefull .sb__r--nome .sb__top{top:-4px}
.homefull .sb__r--nosr .sb__fill{background:var(--rtp-ink-4)}
.homefull .dtlg{display:flex;flex-direction:column;gap:7px;margin-top:16px;padding-top:12px;border-top:1px solid var(--rtp-line-soft)}
.homefull .dtlg__i{display:flex;align-items:flex-start;gap:7px;font-size:var(--bb-goal-fs-11);font-weight:600;color:var(--rtp-ink-3);line-height:1.5}
.homefull .dtlg__i b{flex:0 0 auto;font-weight:800;color:var(--rtp-ink-2)}
.homefull .dtlg__i i{flex:0 0 auto;width:18px;height:7px;margin-top:4px;border-radius:var(--bb-goal-radius-5)}
.homefull .dtlg__me{box-sizing:border-box;border:1px dashed var(--rtp-line);background:var(--bb-goal-c-white)}
.homefull .dtlg__sr{background:var(--rtp-ink-4)}
.homefull .dtlg__i i.dtlg__star{height:auto;margin-top:0;font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-12);font-weight:800;color:var(--rtp-ink-2);text-align:center}
.homefull .dmk__t--peer{background:var(--rtp-bg);box-shadow:none;color:var(--rtp-ink-2)}
.homefull .sb__avg--peer{background:var(--bb-goal-c-white);border:1.5px dashed var(--rtp-ink-3);width:0;box-sizing:border-box}
.homefull .sb__top--peer{background:var(--rtp-ink-3)}
.homefull .dtlg__peer{box-sizing:border-box;background:var(--rtp-bg);border-radius:var(--bb-goal-radius-999)!important}
.homefull .dtnone{display:flex;gap:9px;margin:0 0 14px;padding:13px 14px;border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.homefull .dtnone i{flex:0 0 auto;width:6px;height:6px;margin-top:6px;border-radius:50%;background:var(--rtp-orange)}
.homefull .dtnone b{display:block;font-size:var(--bb-goal-fs-12p5);font-weight:800;color:var(--rtp-ink)}
.homefull .dtnone p{margin:4px 0 0;font-size:var(--bb-goal-fs-11p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.55}
.homefull .sum1{background:var(--bb-goal-c-white);border:1px solid var(--rtp-line-soft);border-radius:var(--bb-goal-radius-14);padding:14px 16px 15px}
.homefull .sum1__hd{display:flex;align-items:center;gap:8px}
.homefull .sum1__hd b{flex:1;font-size:var(--bb-goal-fs-12p5);font-weight:800}
.homefull .sum1__edit{min-height:32px;padding:0 10px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-9);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer}
.homefull .sum1__tx{margin:10px 0 0;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-2);line-height:1.7}
.homefull .sum1__tx b{font-weight:800;color:var(--rtp-ink)}
.homefull .sum1__tx em{font-style:normal;font-family:var(--bb-font-num);font-weight:800;color:var(--rtp-orange)}
.homefull .sum1__form{margin-top:10px}
.homefull .sum1__ta{width:100%;box-sizing:border-box;padding:11px 12px;border:1.5px solid var(--rtp-orange);border-radius:var(--bb-goal-radius-12);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-text-base);font-weight:600;line-height:1.7;color:var(--rtp-ink);resize:none}   /* R148 — iOS focus 확대 방지(16px) */
.homefull .sum1__ta:focus{outline:none}
.homefull .sum1__row{display:flex;align-items:center;gap:8px;margin-top:9px}
.homefull .sum1__cnt{flex:1;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:700;color:var(--rtp-ink-3)}
.homefull .sum1__reset{min-height:36px;padding:0 11px;border:1px solid var(--rtp-line);border-radius:var(--bb-goal-radius-10);background:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-11p5);font-weight:700;color:var(--rtp-ink-2);cursor:pointer}
.homefull .sum1__save{min-height:36px;padding:0 16px;border:0;border-radius:var(--bb-goal-radius-10);background:var(--rtp-orange);color:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-12);font-weight:800;cursor:pointer}
@media (prefers-reduced-motion:reduce){.homefull [data-stat],.homefull .pg__gain,.homefull .pg__now,.homefull .pg__start,.homefull .mi__chk i{transition:none}
.homefull .pop{animation-duration:.01s}}
.homefull{flex:1;min-height:0;display:flex;flex-direction:column;position:relative;background:var(--rtp-bg);overflow:hidden}
.homefull .ph__body{flex:1;min-height:0;overflow-y:auto}
.homefull .ph__body::-webkit-scrollbar{width:0}
.nsheet{position:absolute;inset:0;z-index:60;display:none}
.nsheet.open{display:block}
.nsheet__bg{position:absolute;inset:0;background:var(--bb-goal-c-black-a42)}
.nsheet__pn{position:absolute;left:0;right:0;bottom:0;background:var(--bb-goal-c-white);border-radius:var(--bb-goal-radius-20) var(--bb-goal-radius-20) 0 0;padding:20px}
.nsheet__ic{width:52px;height:52px;border-radius:50%;background:var(--bb-primary-tint);display:grid;place-items:center;font-size:var(--bb-goal-fs-24)}
.nsheet__t{margin:14px 0 0;font-size:var(--bb-goal-fs-17);font-weight:800;letter-spacing:-.4px;line-height:1.4}
.nsheet__s{margin:9px 0 16px;font-size:var(--bb-goal-fs-12p5);font-weight:600;color:var(--rtp-ink-3);line-height:1.65}
.nsheet__li{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}
.nsheet__li div{display:flex;gap:10px;align-items:flex-start;padding:12px 13px;border-radius:var(--bb-goal-radius-12);background:var(--rtp-bg)}
.nsheet__li span{flex:0 0 auto;width:19px;height:19px;border-radius:50%;background:var(--rtp-orange);color:var(--bb-goal-c-white);display:grid;place-items:center;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-10p5);font-weight:800}
.nsheet__li p{margin:0;font-size:var(--bb-goal-fs-12);font-weight:600;color:var(--rtp-ink-2);line-height:1.5}
.nsheet__li p b{font-weight:800;color:var(--rtp-ink)}
.nsheet__no{display:block;width:100%;margin:8px 0 0;padding:11px 0;border:0;background:0;font-family:inherit;font-size:var(--bb-goal-fs-12p5);font-weight:700;color:var(--rtp-ink-3);cursor:pointer}

/* ── goal_flow v2 — W2 닫힌 칸 진행률 %(정본 `.wgc__r em`) · hidden 가드 ──
 *   카드 마크업은 `.rtp-goal-gate__card-r` 라 정본 `.wgc__r em` 의 값을 이 클래스에 준다
 *   (PROTO_CLASS_MAP `.wgc__r em` → `.rtp-goal-gate__card-r .wgc__r-pct`). */
.rtp-goal-gate__card-r .wgc__r-pct{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800;color:var(--bb-goal-c-white-a72);letter-spacing:-.3px}
.wwl[hidden],.wdk__hint[hidden]{display:none}

/* ── goal_flow v2 — W2 닫힌 칸 진행률 %(정본 `.wgc__r em`) · hidden 가드 ──
 *   카드 마크업은 `.rtp-goal-gate__card-r` 라 정본 `.wgc__r em` 의 값을 이 클래스에 준다
 *   (PROTO_CLASS_MAP `.wgc__r em` → `.rtp-goal-gate__card-r .wgc__r-pct`). */
.rtp-goal-gate__card-r .wgc__r-pct{font-style:normal;font-family:var(--bb-font-num);font-size:var(--bb-goal-fs-14);font-weight:800;color:var(--bb-goal-c-white-a72);letter-spacing:-.3px}
.wwl[hidden],.wdk__hint[hidden]{display:none}

/* ── goal_flow v2 — 정본 JS 인라인 style 의 이관(규약: 인라인 style 금지) ──
 *   W3·W4 헤더 제목: 정본 `style="flex:1;text-align:center;font-size:13.5px;font-weight:800;margin-right:36px"`
 *   `.later`·CTA 를 <a> 로 그린 곳(서버 이동이라 링크가 맞다): 버튼 기본값(가운데·밑줄 없음)을 맞춘다. */
.wgate__hdt{flex:1;text-align:center;font-size:var(--bb-goal-fs-13p5);font-weight:800;margin-right:36px}
a.later{text-align:center;text-decoration:none}
.ft a.rtp-btn.is-disabled,.ft button.rtp-btn.is-disabled{opacity:.4;pointer-events:none}   /* mini G — W3 CTA 가 <button> 이 됐다(aria-disabled 로 막고 이 클래스는 모양만) */
.wdim[hidden],.wsheet[hidden],[data-goal-w4] [hidden]{display:none}
/* 해볼 만하다 — 정본 JS 인라인 style 이관: `.dl` margin-top:20px · 격자선 left 8%/92% */
.dl--gap{margin-top:20px}
.tl__grid .tl__g0{left:8%}
.tl__grid .tl__g1{left:92%}
.tl__dot--0{left:8%}
.tl__dot--1{left:92%}

/* ── 목표 홈 — 실페이지 보정(정본은 390×800 기기 프레임 안을 전제로 짰다) ──
 *   ① 시트 두 개는 프레임 안 `position:absolute` 라 문서 스크롤 페이지에서는 **본문 맨 아래**에
 *     붙어 화면 밖으로 나간다 → `fixed`. (PROTO_STYLE_EXCEPTIONS 에 같은 사유)
 *   ② 상단 바(E97 `.ph__hd`)·하단 내비(E122 `.nav`)는 레포 공용 헤더·하단바가 대신한다.
 *   ③ 되돌리기·저장 실패 토스트 — 정본에 없는 **레포 추가분**(Q5·Q10). */
/* 하단 내비(.rtp-footer-nav z-index 100) 위로 — 레포 시트(.bb-sheet 120)와 같은 층.
   정본 30/60 은 내비가 없는 캡처 프레임 기준이다(z-index 는 css-diff PROPS 밖). */
.homefull .sheet,.nsheet{position:fixed;z-index:120}
/* 한글이 음절 단위로 끊기지 않게(실캡처: 미션 부제 "· 완 / 료"). 정본은 프레임 폭이 넉넉해
   드러나지 않았다. 레포 설문 화면(.rtp-goal-*)과 같은 선례 — keep-all. */
.homefull,.scn{word-break:keep-all}
.homefull [hidden]{display:none}
/* z-index 130 — 시트(.homefull .sheet·.nsheet 120) **위**. 101 이면 시트가 열린 채 실패하는
   저장(직접 추가·수정)·보관함 안 되돌리기 토스트가 시트 뒤에 깔려 안 보인다(code-review). */
.gh-toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));z-index:130;transform:translateX(-50%);display:flex;align-items:center;gap:12px;max-width:calc(100% - 32px);padding:11px 14px;border-radius:var(--rtp-radius-lg);background:var(--rtp-ink);color:var(--bb-goal-c-white);font-size:var(--bb-goal-fs-12p5);font-weight:700;box-shadow:var(--bb-goal-shadow-13)}
.gh-toast button{border:0;background:0;padding:4px 2px;font:inherit;font-weight:800;color:var(--rtp-orange);cursor:pointer}
.gh-toast[hidden]{display:none}
/* F2(2026-09-25 재작업) — 위 z-index 130 부작용: 추가 시트(E123)가 열려 있으면 토스트가
   목표 개수 스텝퍼(−/개수/＋)를 덮었다. bottom 고정값(320px)으로 올려봤지만 시트 내용
   길이에 따라 자리가 또 달라져(이름 입력 칸과 겹침, 390×844 실측 y 524~580 vs 543~589)
   "안 겹치는 bottom 값"을 시트마다/상태마다 맞추는 접근 자체가 부서지기 쉬웠다.
   시트(추가/수정·보관함·알림 사전) 중 **아무거나 열려 있으면** 토스트를 아예 반대편
   (헤더 바로 아래, 화면 맨 위)으로 옮긴다 — 시트 패널은 항상 화면 **하단**에 붙으므로
   위쪽에는 시트 컨트롤이 없어 어떤 시트·어떤 내용 길이든 겹칠 수 없다. 시트 닫힘(하단
   내비) 케이스는 그대로 84px. */
.homefull:has([data-add-sheet].open) .gh-toast,
.homefull:has([data-shelf].open) .gh-toast,
.homefull:has([data-ns].open) .gh-toast{
  top:calc(116px + env(safe-area-inset-top));
  bottom:auto;
}
/* 빈 홈 시작 버튼 — 정본 <button> 을 링크로(설문으로 이동하는 서버 이동). 값은 정본 그대로 */
.homefull .intro__banner .intro__start{display:grid;place-items:center;text-decoration:none;width:100%;min-height:46px;border:0;border-radius:var(--bb-goal-radius-12);background:var(--rtp-orange);color:var(--bb-goal-c-white);font-family:inherit;font-size:var(--bb-goal-fs-13p5);font-weight:800;cursor:pointer}
/* 세부 분석의 비교 기준 줄 — 정본 인라인 style(margin-top:0;padding-top:0;border-top:0;margin-bottom:12px) 이관 */
.homefull .gsel.gsel--dt{margin-top:0;padding-top:0;border-top:0;margin-bottom:12px}
/* 설문 다시 하기 — 정본에 없는 레포 추가분(재설문 진입점이 홈에 없으면 목표를 바꿀 길이 없다) */
.homefull .gh__redo{margin:4px 0 0;text-align:center;font-size:var(--bb-goal-fs-12);font-weight:700}
.homefull .gh__redo a{color:var(--rtp-ink-3);text-decoration:underline}
/* 정본 JS 인라인 style 이관 — 지표 행 머리의 빈 칸(`<span style="flex:1">`) · 통계 노트 강조(`color:var(--rtp-ink-2)`) */
.homefull .sb__hd .sb__sp{flex:1}
.homefull .sg__note .sg__em{color:var(--rtp-ink-2)}
/* 해볼 만하다 — 출발 점(기준선 아래)의 값은 점 **아래**에 단다. 정본처럼 위에 달면 기준선 알약과 겹친다
   (실데이터 캡처에서 13.1 이 알약 밑에 가려졌다). 도착 점(주황)은 정본 그대로 위. */
.tl__dot--0 em{bottom:auto;top:13px}

/* ── 목표 홈 — 탭타겟 44px (레포 규칙이 정본보다 우선 — PROTO_SCALE note 선례) ──
 *   정본의 작은 버튼(⋯ 12px·고치기 32px·드롭다운 32px 등)을 **눈에 보이는 크기는 거의 그대로**
 *   두고 누를 수 있는 영역만 44px 로 넓힌다(음수 마진으로 주변 배치를 유지). */
.homefull .cmp__hd{min-height:44px}
.homefull .gdd__btn{min-height:44px}
.homefull .sb__sw{min-width:44px;min-height:44px;margin:-16px -14px -16px 0}
.homefull .sbadd{min-height:44px}
.homefull .mi__more{min-width:44px;min-height:44px}
.homefull .sum1__edit{min-height:44px;margin:-6px 0}
.homefull .gh__redo a{display:inline-flex;align-items:center;min-height:44px;padding:0 8px}

/* ── goal_flow v3 mini H — 목표 탭 본인인증 게이트 (R159·R161) ──
 *   INTRO 인증 안내 시트는 레포 공용 `.bb-sheet`/`.bb-sheet-dim`(components.css: fixed · 딤 110 · 시트 120 — 하단 메뉴·본인인증 띠 위)을
 *   그대로 쓴다. 여기는 한글 줄바꿈과 열림 상태만 더한다. `hidden` 으로 시작하는 두 요소는 display 를 선언하지 않아 UA [hidden] 이 이기지만,
 *   auto_rules(frontend/) 대로 가드를 명시해 둔다. */
.rtp-goal-idsheet{word-break:keep-all;padding-bottom:calc(var(--bb-space-4) + env(safe-area-inset-bottom, 0px))}
.rtp-goal-idsheet .rtp-btn{margin-top:var(--bb-space-1)}
.bb-sheet-dim[hidden],.bb-sheet.rtp-goal-idsheet[hidden]{display:none}
/* 안내 화면(identity_gate.html) — 자물쇠는 흔들리지 않는다(종 아이콘 애니메이션 해제) */
.wgate__ic--still span{animation:none}
