[hidden] { display: none !important; }

/* 상품명 메이커 FM — 틀은 개편 시안 v16(머리·고정 단계 탭·칸 제목·카드). 색은 common.css 토큰 + 아래 fm 토큰, 다크는 그 토큰을 덮는다. */
:root {
  --fm-pl-t-bg: #f7e3a1; --fm-pl-t-fg: #4a3a05;
  --fm-pl-g-bg: #d7dfeb; --fm-pl-g-fg: #374f70;
  --fm-pl-a-bg: #d1e4dc; --fm-pl-a-fg: #2e5e46;
  --fm-pl-c-bg: #d3d0cb; --fm-pl-c-fg: #1f1e1b;
  --fm-moved-bg: #e9f0f7;      /* 사람이 직접 옮긴 칩 */
  --fm-moved-line: #9fb4cf;
  --fm-good: #2e5e46; --fm-good-bg: #e8f1ed; --fm-good-line: #b9d6c8; --fm-good-ink: var(--fm-good);
  --fm-bad: #8e362e; --fm-bad-bg: #f7e8e7;
  --fm-warn: #7a5418; --fm-warn-bg: #f7eedf;
  --fm-glow-1: #ee9fbb; --fm-glow-2: #98b2f0; --fm-glow-3: #8fd8b6; --fm-glow-4: #f0c878;   /* 작업 중 말풍선 테두리 */
  --fm-shade: color-mix(in srgb, var(--ink-900) 14%, transparent);
  --fm-max: 65rem;
  --fm-pop-w: 22rem;           /* 내 상품 목록(줄마다 이름 바꾸기·지우기 단추) */
  --fm-chip4-h: 1.625rem;      /* 계약 4 결과 — 칩·자리 표시 한 높이 */
  --fm-row4-pad: var(--spacing-sm);
  --fm-tip-bg: var(--ink-900); --fm-tip-fg: var(--text-inverse);
  --fm-thumb: 104px;
  --fm-kw-h: 46px;             /* 키워드 입력칸·끌어놓기 한 줄 높이 */
  --fm-bar6-h: 8.25rem;        /* 단계 바 자리(원 줄 + 상태 줄) — 접혀도 그대로 */
  --fm-start-w: 100%;
  --fm-track-apply-bg: color-mix(in srgb, var(--accent-color) 10%, var(--bg-card));
  --fm-new-line: color-mix(in srgb, var(--accent-color) 55%, transparent);   /* 새 안 — 원래에 없던 어절 밑줄 */
  --fm-rt-key-w: 9rem;         /* 순위 현황 틀고정 열 — 키워드 · 월 검색량 · (641px~) 오늘 · 7일 · 변동 */
  --fm-rt-vol-w: 4.25rem;
  --fm-rt-day-w: 3.5rem;
  --fm-rt-sp-w: 4.75rem;
  --fm-rt-mv-w: 5.25rem;
  --fm-rt-indent: 2.5rem;
  --fm-rt-max-h: 30rem;
  --fm-rt-tiles-w: 15.5rem;
  --fm-result-gap: calc(var(--spacing-xl) + var(--spacing-sm));
  --fm-ai-after: var(--spacing-lg);
  --fm-sub-w: 6.5rem;
  --fm-sub-h: var(--spacing-xs);
  --fm-result-label-w: 3.5rem;
  --fm-mine-thumb: 2.75rem;
}
/* 다크 — 시스템 설정(prefers-color-scheme)만 따른다 */
@media (prefers-color-scheme: dark) {
  :root {
    --ink-50: #23211d; --ink-100: #26241f; --ink-200: #33312d; --ink-300: #4a4741; --ink-400: #7d7a73;
    --ink-500: #a6a29b; --ink-600: #d3d0cb; --ink-700: #d3d0cb; --ink-800: #e7e5e2; --ink-900: #f4f4f2;
    --brand-50: #2a1d17; --brand-100: #3a251b; --brand-200: #5a3524; --brand-500: #e08a66; --brand-600: #e08a66; --brand-700: #f2c9b4;
    --bg-primary: #14130f; --bg-surface: #14130f; --bg-card: #1c1b18; --bg-alt: #26241f;
    --text-primary: #f4f4f2; --text-secondary: #d3d0cb; --text-muted: #a6a29b; --text-inverse: #14130f; --primary-color: #f4f4f2;
    --fm-pl-t-bg: #4a3d12; --fm-pl-t-fg: #f7e3a1;
    --fm-pl-g-bg: #22303f; --fm-pl-g-fg: #b7c8e0;
    --fm-pl-a-bg: #1f3329; --fm-pl-a-fg: #b5dbc8;
    --fm-pl-c-bg: #3a3833; --fm-pl-c-fg: #e7e5e2;
    --fm-moved-bg: #1e2a36; --fm-moved-line: #3d5570;
    --fm-good: #9fd1b8; --fm-good-bg: #1d2e26; --fm-good-line: #2f4d3f;
    --fm-bad: #f0a8a0; --fm-bad-bg: #3a1f1c; --fm-warn: #e8c27a; --fm-warn-bg: #3a2e17;
    --fm-glow-1: #8a4f62; --fm-glow-2: #4f5f8a; --fm-glow-3: #4f7a66; --fm-glow-4: #8a7450;
    --shadow-sm: 0 1px 2px rgba(0, 0, 0, .4); --shadow-md: 0 1px 3px rgba(0, 0, 0, .4); --shadow-lg: 0 4px 12px rgba(0, 0, 0, .45); --shadow-xl: 0 12px 28px rgba(0, 0, 0, .5);
    color-scheme: dark;
  }
}
/* 상단 바가 없는 넓은 웹(tools.css 821px 규칙과 짝) */
/* 단계 탭이 붙는 자리 — 도구 상단 바 밑. 🔴 :root 에 두면 안 된다 — --tool-topbar-h 는 body.is-app-shell 에 있어 :root 에선 무효(top:auto)가 된다 */
.fm-app { --fm-stick-top: var(--tool-topbar-h, 0px); }
.fm-app b, .fm-app strong, .fm-head b, .fm-head strong { font-weight: 500; }
@media (min-width: 821px) {
  html:not([data-catmad-app]) .fm-app { --fm-stick-top: 0px; }
}
@media (min-width: 1024px) {
  :root { --fm-kw-w: 11em; --fm-start-w: calc(var(--measure) * 0.7); --fm-rt-key-w: 13.75rem; --fm-rt-vol-w: 4.75rem; }
}
@media (max-width: 480px) { :root { --fm-thumb: 80px; } }

/* 머리(시안 .top) — 작은 «냥마드 Hub» 위 제목 · 오른쪽 버튼 줄 */
.tool-main > .page-head { max-width: var(--fm-max); margin: 0 auto; padding: var(--spacing-md) 0 var(--spacing-sm); border-bottom: 0; }
.page-head.has-aside { align-items: center; flex-wrap: nowrap; gap: var(--spacing-sm); }
.page-head-main { flex: 1 1 auto; min-width: 0; }
.page-head-aside { flex: 0 0 auto; }
.page-head-kicker { margin: 0; font-size: var(--font-xs); font-weight: 500; color: var(--ink-500); }
.tool-main > .page-head .page-head-title { margin-top: 2px; font-size: var(--font-xl); font-weight: 500; letter-spacing: var(--tracking-tighter); }
/* 설명 줄은 화면에서만 뺀다(검색엔진용으로 문서에 남김) */
.tool-main > .page-head .page-head-desc { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
/* 폰에선 도구 머리 제목을 숨기는 공용 규칙(tools.css)이 버튼까지 숨긴다 — 버튼만 되살린다(제목은 상단 바에 있다) */
@media (max-width: 640px) {
  .tool-main > .page-head.has-aside {
    position: static; width: auto; height: auto; margin: 0 0 var(--spacing-sm); padding: 0;
    overflow: visible; clip: auto; white-space: normal; border: 0; justify-content: flex-end;
  }
  .page-head.has-aside .page-head-main {
    position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
  }
}

/* 폰 = 내 상품 목록은 머리 줄 오른쪽 끝에 맞춘다(단추 기준이면 넓힌 목록이 왼쪽 화면 밖으로 나감) · 넓은 화면 = 단추 밑 */
.fm-head { position: relative; display: flex; align-items: center; justify-content: flex-end; gap: var(--spacing-sm); flex-wrap: wrap; }
.fm-more { position: relative; }
@media (min-width: 641px) { .fm-mine { position: relative; } }
.fm-ibtn {
  position: relative; width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--ink-300); border-radius: var(--radius-lg); background: var(--bg-card); color: var(--ink-900); cursor: pointer;
}
.fm-ibtn:hover, .fm-ibtn[aria-expanded="true"] { background: var(--ink-100); }
.fm-ibtn .fm-ic { width: 18px; height: 18px; }
.fm-ibtn[hidden] { display: none; }
/* 내 상품 알림 점 — 숫자 배지(위)와 겹치지 않게 아래 오른쪽 */
.fm-mine-dot { position: absolute; bottom: -3px; right: -3px; width: 9px; height: 9px; border-radius: var(--radius-full); background: var(--brand-600); box-shadow: 0 0 0 2px var(--bg-card); }
.fm-mine-dot[hidden] { display: none; }
.fm-badge {
  position: absolute; top: -6px; right: -6px; min-width: 20px; height: 20px; padding: 0 5px; box-sizing: border-box;
  border-radius: var(--radius-full); background: var(--brand-600); color: var(--text-inverse);
  font-size: var(--font-sm); font-weight: 500; display: flex; align-items: center; justify-content: center;
}
.fm-pop {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 60; width: min(var(--fm-pop-w), calc(100vw - 2rem));
  background: var(--bg-card); border: 1px solid var(--ink-200); border-radius: var(--radius-xl); box-shadow: var(--shadow-xl);
  padding: var(--spacing-sm); display: flex; flex-direction: column; gap: 4px;
}
.fm-pop-list { display: flex; flex-direction: column; gap: 2px; }
.fm-pad { padding: var(--spacing-sm); }
/* ⋯ 설정 메뉴(시안 .menu) */
.fm-menu {
  position: absolute; right: 0; top: calc(100% + 6px); z-index: 60; min-width: 220px; padding: 6px;
  background: var(--bg-card); border: 1px solid var(--ink-200); border-radius: var(--radius-xl); box-shadow: var(--shadow-xl);
}
.fm-menu-item {
  width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px; border: 0; background: none;
  border-radius: var(--radius-md); font: inherit; font-size: var(--font-sm); color: var(--ink-900); text-align: left; cursor: pointer;
}
.fm-menu-item:hover, .fm-menu-item:focus-visible { background: var(--ink-100); }
.fm-toggle { position: relative; flex: 0 0 auto; width: 36px; height: 20px; border-radius: var(--radius-full); background: var(--ink-300); transition: background var(--transition-fast); }
.fm-toggle::after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: var(--bg-card); transition: transform var(--transition-fast); }
[aria-checked="true"] > .fm-toggle { background: var(--ink-900); }
[aria-checked="true"] > .fm-toggle::after { transform: translateX(16px); }
.fm-dl-sw { gap: 6px; }
.fm-dl-sw[aria-disabled="true"] { cursor: default; }
.fm-toggle-s { width: 26px; height: 14px; }
.fm-toggle-s::after { top: 2px; left: 2px; width: 10px; height: 10px; }
[aria-checked="true"] > .fm-toggle-s::after { transform: translateX(12px); }

/* 키보드 초점 — 이 페이지 전부 같은 고리 */
.fm-app :focus-visible, .fm-head :focus-visible { outline: 2px solid var(--primary-color); outline-offset: 2px; }
/* 폰 토스트는 아래(엄지 쪽) — 이 페이지만 */
@media (max-width: 640px) {
  .toast { top: auto; bottom: calc(16px + env(safe-area-inset-bottom)); left: 16px; right: 16px; max-width: none; transform: translateY(calc(100% + 32px)); }
  .toast.show { transform: none; }
}

/* 6단계 단계 바 — 맨 위에선 원 6개 + 상태 한 줄, 스크롤하면 단계별 작은 막대 한 줄.
   🔴 바 자리 높이는 고정(--fm-bar6-h) — 접힐 때 자리가 줄면 아래 카드가 따라 올라와 접힘/펼침이 번갈아 깜박인다 */
.fm-bar6 { position: sticky; top: var(--fm-stick-top); z-index: 40; height: var(--fm-bar6-h); pointer-events: none; }
.fm-bar6-in {
  pointer-events: auto; display: flex; flex-direction: column; gap: var(--spacing-sm); padding: 10px 12px 8px;
  background: var(--bg-card); border: 1px solid var(--ink-200); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm);
}
.fm-steps { min-width: 0; }
.fm-st6-row { display: flex; align-items: flex-start; overflow-x: auto; scrollbar-width: none; }
.fm-st6-row::-webkit-scrollbar { display: none; }
.fm-st6 {
  position: relative; flex: 1 0 5.75rem; min-width: 5.75rem; display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 0; border: 0; background: none; font: inherit; color: var(--ink-600); cursor: pointer;
}
.fm-st6:disabled { cursor: default; }
/* 원 사이 선 — 지난 단계까지 진하게 */
.fm-st6::before { content: ""; position: absolute; top: 13px; left: -50%; right: 50%; height: 2px; background: var(--ink-200); z-index: 0; }
.fm-st6:first-child::before { display: none; }
.fm-st6.is-done::before, .fm-st6.is-run::before, .fm-st6.is-wait::before, .fm-st6.is-stop::before, .fm-st6.is-now::before, .fm-st6.is-redo::before { background: var(--ink-600); }
.fm-st6-d {
  position: relative; z-index: 1; width: 26px; height: 26px; display: flex; align-items: center; justify-content: center; box-sizing: border-box;
  border-radius: var(--radius-full); border: 1.5px solid var(--ink-300); background: var(--bg-card); color: var(--ink-400); font-size: var(--font-xs);
}
.fm-st6.is-done .fm-st6-d { border: 0; background: var(--ink-600); color: var(--text-inverse); }
.fm-st6.is-run .fm-st6-d, .fm-st6.is-stop .fm-st6-d, .fm-st6.is-now .fm-st6-d, .fm-st6.is-redo .fm-st6-d { border: 0; background: var(--ink-900); color: var(--text-inverse); }
.fm-st6.is-wait .fm-st6-d { border: 0; background: var(--brand-500); color: var(--text-inverse); box-shadow: 0 0 0 4px var(--brand-100); }
.fm-st6.is-run .fm-st6-d { animation: fm-pulse 1.2s infinite; }
.fm-st6-l { font-size: var(--font-base); white-space: nowrap; }
.fm-st6.is-run .fm-st6-l, .fm-st6.is-wait .fm-st6-l, .fm-st6.is-stop .fm-st6-l, .fm-st6.is-now .fm-st6-l, .fm-st6.is-redo .fm-st6-l { color: var(--ink-900); font-weight: 500; }
.fm-st6-s { display: inline-flex; align-items: center; gap: 4px; font-size: var(--font-sm); color: var(--ink-400); white-space: nowrap; }
.fm-st6.is-wait .fm-st6-s { color: var(--brand-700); }
.fm-stepline { display: flex; align-items: center; gap: 6px; padding-top: 6px; border-top: 1px solid var(--ink-100); font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-stl-t { margin-left: auto; }
.fm-pulse { flex: 0 0 auto; width: 7px; height: 7px; border-radius: var(--radius-full); background: var(--ink-900); animation: fm-pulse 1s infinite; }
@keyframes fm-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.fm-slim { display: none; }
.fm-slim-i { display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 0; border: 0; background: none; font: inherit; text-align: left; cursor: pointer; }
.fm-slim-i:disabled { cursor: default; }
.fm-slim-l { font-size: var(--font-sm); color: var(--ink-400); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fm-slim-i.is-done .fm-slim-l { color: var(--ink-600); }
.fm-slim-i.is-run .fm-slim-l, .fm-slim-i.is-stop .fm-slim-l, .fm-slim-i.is-now .fm-slim-l, .fm-slim-i.is-redo .fm-slim-l { color: var(--ink-900); font-weight: 500; }
.fm-slim-i.is-wait .fm-slim-l { color: var(--brand-700); font-weight: 500; }
.fm-slim-b { display: block; height: 4px; border-radius: var(--radius-full); background: var(--ink-200); overflow: hidden; }
.fm-slim-b i { display: block; height: 100%; border-radius: var(--radius-full); background: var(--ink-600); transition: width .12s; }
.fm-slim-i.is-wait .fm-slim-b i { background: var(--brand-500); }
.fm-bar6.is-slim .fm-bar6-in { flex-direction: row; align-items: center; gap: 10px; padding: 6px 16px; border-radius: var(--radius-full); }
.fm-bar6.is-slim .fm-steps { flex: 1 1 auto; }
.fm-bar6.is-slim .fm-st6-row { display: none; }
.fm-bar6.is-slim .fm-slim { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; }
.fm-bar6.is-slim .fm-stepline { flex: 0 1 16rem; min-width: 0; padding-top: 0; border-top: 0; white-space: nowrap; overflow: hidden; }
.fm-bar6.is-slim .fm-stepline > span:not(.fm-pulse) { overflow: hidden; text-overflow: ellipsis; }
@media (max-width: 640px) { .fm-bar6.is-slim .fm-stepline { display: none; } }

/* 카드(상품 한 장 안 6단계) — 머리(번호·이름·요약·내 차례·접기) · 지금 카드의 진행 블록 · 몸통. 🔴 강조색(클레이)은 «내 차례» 자리만 */
.fm-c6 {
  scroll-margin-top: calc(var(--fm-stick-top) + var(--fm-bar6-h) + var(--spacing-sm));
  display: flex; flex-direction: column; gap: var(--spacing-md); padding: 14px 18px;
  background: var(--bg-card); border: 1px solid var(--ink-200); border-radius: var(--radius-lg);
}
.fm-c6.is-wait { border-color: var(--brand-500); }
.fm-c6-t { margin: 0; font: inherit; }
.fm-c6-hb { display: flex; align-items: center; gap: 10px; width: 100%; padding: 0; border: 0; background: none; font: inherit; color: inherit; text-align: left; cursor: pointer; }
.fm-c6-hb:disabled { cursor: default; }
.fm-c6-n {
  flex: 0 0 auto; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-full);
  background: var(--ink-200); color: var(--ink-400); font-size: var(--font-xs);
}
.fm-c6-n .fm-ic { width: 14px; height: 14px; }
.fm-c6.is-done .fm-c6-n { background: var(--ink-600); color: var(--text-inverse); }
.fm-c6.is-run .fm-c6-n, .fm-c6.is-stop .fm-c6-n, .fm-c6.is-now .fm-c6-n, .fm-c6.is-redo .fm-c6-n { background: var(--ink-900); color: var(--text-inverse); }
.fm-c6.is-wait .fm-c6-n { background: var(--brand-500); color: var(--text-inverse); }
.fm-c6-name { flex: 0 0 auto; font-size: var(--font-md); font-weight: 500; white-space: nowrap; }
.fm-c6-sum { flex: 1 1 auto; min-width: 0; font-size: var(--font-sm); color: var(--ink-500); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.fm-turn { flex: 0 0 auto; padding: 2px 8px; border-radius: var(--radius-full); background: var(--brand-100); color: var(--brand-700); font-size: var(--font-sm); white-space: nowrap; }
.fm-c6-chev { flex: 0 0 auto; width: 14px; height: 14px; color: var(--ink-500); transition: transform .15s; }
.fm-c6-hb[aria-expanded="true"] .fm-c6-chev { transform: rotate(180deg); }
.fm-c6-run, .fm-c6-b { padding-left: 34px; }
.fm-c6-run { padding-top: var(--spacing-sm); }
.fm-c6-b { display: flex; flex-direction: column; gap: var(--spacing-md); min-width: 0; }
.fm-c6-x { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.fm-c6-x:empty { display: none; }
.fm-c6-p { display: flex; flex-direction: column; gap: var(--spacing-sm); min-width: 0; }
@media (max-width: 640px) {
  .fm-c6 { padding: 12px; }
  .fm-c6-run, .fm-c6-b { padding-left: 0; }
}

/* 진행 블록 — 구간 막대 · n/m · 경과 · [중지] */
.fm-run { display: flex; flex-direction: column; gap: var(--spacing-sm); }
.fm-runband { display: flex; flex-direction: column; gap: var(--spacing-sm); min-width: 0; }
.fm-runband.is-wait, .fm-runband.is-idle { flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: flex-end; }
.fm-subs { display: flex; flex-wrap: wrap; gap: var(--spacing-md) var(--spacing-sm); margin: 0; padding: 0; list-style: none; }
.fm-sub { display: flex; flex-direction: column; flex: 0 0 var(--fm-sub-w); min-width: 0; gap: var(--spacing-sm); color: var(--ink-500); font-size: var(--font-sm); }
.fm-sub-bar { display: block; height: var(--fm-sub-h); border-radius: var(--radius-full); background: var(--ink-200); overflow: hidden; }
.fm-sub-bar i { display: block; width: var(--fm-progress, 0%); height: 100%; border-radius: inherit; background: var(--ink-200); }
.fm-sub-label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-sub.is-done { color: var(--ink-600); }
.fm-sub.is-done .fm-sub-bar, .fm-sub.is-done .fm-sub-bar i { background: var(--ink-700); }
.fm-sub.is-now { color: var(--ink-900); font-weight: 500; }
.fm-sub.is-now .fm-sub-bar { background: color-mix(in srgb, var(--accent-color) 24%, var(--bg-card)); }
.fm-sub.is-now .fm-sub-bar i { background: var(--accent-color); }
.fm-sub-bar.is-ind i { width: 30%; animation: fm-ind 1.4s infinite ease-in-out; }
.fm-runline { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; font-size: var(--font-base); color: var(--ink-600); font-variant-numeric: tabular-nums; }
.fm-band-n, .fm-band-t { white-space: nowrap; }
.fm-bar.is-ind i { width: 30%; animation: fm-ind 1.4s infinite ease-in-out; }
@keyframes fm-ind { 0% { transform: translateX(-100%); } 100% { transform: translateX(340%); } }
@media (prefers-reduced-motion: reduce) { .fm-bar.is-ind i, .fm-sub-bar.is-ind i { animation: none; width: 100%; opacity: .35; } }

/* 냥AI 한 줄 — 아이콘(말하는 동안 콩콩) + 말풍선(글 크기에 맞춤) · 단추는 말풍선 안 오른쪽 */
.fm-ai { display: flex; align-items: flex-start; gap: var(--spacing-sm); min-width: 0; }
.fm-p-top, .fm-k-top, .fm-status:has(> .fm-ai):has(+ .fm-runband:not([hidden])) { margin-bottom: calc(var(--fm-ai-after) - var(--spacing-sm)); }
.fm-c6-p > .fm-ai, .fm-cardk > .fm-ai { margin-bottom: calc(var(--fm-ai-after) - var(--spacing-sm)); }
.fm-c6-b > .fm-ai { margin-bottom: calc(var(--fm-ai-after) - var(--spacing-md)); }
.fm-c6-run:has(.fm-status:not([hidden])):not(:has(.fm-runband:not([hidden]))), .fm-runband > .fm-ai:last-child { margin-bottom: calc(var(--fm-ai-after) - var(--spacing-md)); }
.fm-ai-av { flex: 0 0 auto; width: 34px; height: 34px; margin-top: 3px; border-radius: var(--radius-full); animation: fm-hop .38s ease-in-out 0s 4; }
/* 말풍선 테두리 파스텔은 늘(사용자 10-26) — 작업 중에만 돈다 · 🔴 is-still(같은 말 반복)보다 앞서야 해서 도는 선택자가 더 길다 */
@property --fm-ang { syntax: '<angle>'; inherits: false; initial-value: 0deg; }
.fm-aib {
  position: relative; display: inline-flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; max-width: 100%; box-sizing: border-box;
  padding: 7px 7px 7px 15px; border: 2px solid transparent; border-radius: 4px 18px 18px 18px; transform-origin: 0 0; animation: fm-pop .28s ease-out both;
  background: linear-gradient(var(--ink-100), var(--ink-100)) padding-box,
    conic-gradient(from var(--fm-ang), var(--fm-glow-1), var(--fm-glow-2), var(--fm-glow-3), var(--fm-glow-4), var(--fm-glow-1)) border-box;
}
.fm-is-running .fm-ai:not(.is-bad) .fm-aib { animation: fm-ring 3.2s linear infinite; }
@keyframes fm-ring { to { --fm-ang: 360deg; } }
.fm-ai-t { display: inline-block; font-size: var(--font-md); line-height: 1.55; animation: fm-type 1s steps(40, end) .3s both; }
.fm-ai-acts { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.fm-ai.is-bad .fm-ai-t { color: var(--fm-bad); }
.fm-ai-acts .fm-btn-p { animation: fm-nudge .6s ease-out 1.4s 1 both; }
.fm-ai.is-still .fm-ai-av, .fm-ai.is-still .fm-aib, .fm-ai.is-still .fm-ai-t, .fm-ai.is-still .fm-ai-acts .fm-btn-p { animation: none; }
@keyframes fm-hop { 0%, 100% { transform: translateY(0); } 40% { transform: translateY(-5px); } }
@keyframes fm-pop { from { opacity: 0; transform: translateY(6px) scale(.97); } to { opacity: 1; transform: none; } }
@keyframes fm-type { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes fm-nudge { 0%, 100% { transform: translateY(0); } 30% { transform: translateY(-4px); } 55% { transform: translateY(0); } 75% { transform: translateY(-2px); } }
@media (prefers-reduced-motion: reduce) { .fm-ai-av, .fm-aib, .fm-ai-t, .fm-ai-acts .fm-btn-p, .fm-st6.is-run .fm-st6-d, .fm-pulse, .fm-is-running .fm-ai:not(.is-bad) .fm-aib { animation: none; } }

.fm-sec-meta { font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-fold {
  margin-left: auto; height: 32px; padding: 0 12px; display: inline-flex; align-items: center; gap: 4px;
  border: 1px solid var(--ink-300); border-radius: var(--radius-md); background: var(--bg-card);
  font: inherit; font-size: var(--font-sm); font-weight: 500; color: var(--ink-600); cursor: pointer;
}
.fm-fold:hover { background: var(--ink-100); color: var(--ink-900); }
.fm-fold:disabled { opacity: .45; cursor: default; background: var(--bg-card); color: var(--ink-600); }
.fm-fold .fm-chev { margin-left: 0; }
.fm-fold[aria-expanded="true"] .fm-chev { transform: rotate(180deg); }
.fm-locked { display: flex; align-items: center; gap: var(--spacing-sm); font-size: var(--font-sm); color: var(--ink-500); }

/* ① 상품 분석 — 썸네일 · 세트명 */
.fm-thumb { width: var(--fm-thumb); height: var(--fm-thumb); border-radius: var(--radius-lg); object-fit: cover; background: var(--ink-100); border: 1px solid var(--ink-200); box-sizing: border-box; }

.fm-info-dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 8px 12px; margin: 0; padding: 4px; font-size: var(--font-sm); }
.fm-info-dl dt { color: var(--ink-500); }
.fm-info-dl dd { margin: 0; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; }

.fm-pname-w { display: flex; align-items: center; gap: 4px; min-width: 0; }
.fm-pname-w .fm-pname { flex: 1 1 auto; min-width: 0; }
.fm-pname-w span.fm-pname { flex: 0 1 auto; width: auto; cursor: text; overflow-wrap: anywhere; }
.fm-pname {
  font: inherit; font-size: var(--font-sm); font-weight: 500; line-height: var(--line-tight); color: var(--ink-600);
  border: 1px solid transparent; border-radius: var(--radius-md); padding: 2px 4px; margin-left: -5px; background: transparent; width: 100%; box-sizing: border-box;
}
.fm-pname:hover, .fm-pname:focus { border-color: var(--ink-300); }
.fm-pen {
  position: relative; flex: 0 0 auto; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: var(--radius-sm); background: transparent; color: var(--ink-500); cursor: pointer;
}
.fm-pen .fm-ic { width: 14px; height: 14px; }
.fm-pen:hover { color: var(--ink-900); background: var(--ink-100); }
.fm-ptitle { flex: 1 1 auto; min-width: 0; font-size: var(--font-md); font-weight: 500; overflow-wrap: anywhere; }

.fm-skel { height: 28px; background: var(--ink-100); border-radius: var(--radius-md); }

/* ── 공용 조각 ── */
.fm-app { max-width: var(--fm-max); margin: 0 auto; display: flex; flex-direction: column; }
.fm-ic { width: 16px; height: 16px; flex: 0 0 auto; }
.fm-btn {
  height: 44px; padding: 0 18px; border-radius: var(--radius-lg); border: 1px solid var(--ink-300); background: var(--bg-card);
  font: inherit; font-size: var(--font-base); font-weight: 500; color: var(--ink-900); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; gap: 6px; text-decoration: none; white-space: nowrap;
}
.fm-btn:hover:not(:disabled) { border-color: var(--ink-500); }
.fm-btn:disabled { opacity: .45; cursor: not-allowed; }
.fm-btn-p { background: var(--ink-900); border-color: var(--ink-900); color: var(--text-inverse); }
.fm-btn-p:hover:not(:disabled) { background: var(--ink-800); }
.fm-btn-good { background: var(--fm-good); border-color: var(--fm-good); color: var(--text-inverse); }
.fm-btn-sm { height: 34px; padding: 0 12px; font-size: var(--font-sm); }
.fm-btn-xs { position: relative; height: 28px; padding: 0 10px; border-radius: var(--radius-md); font-size: var(--font-xs); }
.fm-btn-lg { height: 52px; padding: 0 24px; border-radius: var(--radius-lg); font-size: var(--font-md); }
.fm-link {
  border: 0; background: none; padding: 0; font: inherit; font-size: var(--font-sm); color: var(--brand-700); cursor: pointer;
  display: inline-flex; align-items: center; gap: 4px;
}
.fm-link:hover { color: var(--brand-600); }
.fm-ml { margin-left: auto; }
.fm-grow { flex: 1 1 auto; min-width: 0; }
.fm-muted, .fm-seed6.fm-muted { color: var(--ink-500); font-size: var(--font-sm); }
.fm-b { font-weight: 500; }
.t-good { color: var(--fm-good); }
.t-bad { color: var(--fm-bad); }

.fm-chip {
  display: inline-flex; align-items: center; height: 26px; padding: 0 10px; border-radius: var(--radius-full);
  background: var(--ink-100); font-size: var(--font-sm); color: var(--ink-700); white-space: nowrap;
}
.fm-chip-ink { background: var(--ink-900); color: var(--text-inverse); }
.fm-chips { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.fm-chip-s { height: 22px; padding: 0 8px; font-size: var(--font-xs); }
.fm-chip.is-bad { background: var(--fm-bad-bg); color: var(--fm-bad); }
.fm-chip-maint { background: var(--fm-warn-bg); color: var(--fm-warn); }
.fm-skipwhy { flex: 1 1 100%; }
.fm-pl {
  display: inline-flex; align-items: center; height: 24px; padding: 0 7px; border-radius: var(--radius-sm);
  font-size: var(--font-sm); white-space: nowrap;
}
.fm-pl-lg { height: 26px; padding: 0 10px; font-size: var(--font-sm); border-radius: var(--radius-full); }
.pl-t { background: var(--fm-pl-t-bg); color: var(--fm-pl-t-fg); }
.pl-c { background: var(--fm-pl-c-bg); color: var(--fm-pl-c-fg); }
.pl-a { background: var(--fm-pl-a-bg); color: var(--fm-pl-a-fg); }
.pl-g { background: var(--fm-pl-g-bg); color: var(--fm-pl-g-fg); }
.pl-n { background: var(--ink-50); color: var(--ink-500); }
.fm-tp { border: 0; font-family: inherit; cursor: pointer; }
.fm-tp[aria-expanded="true"] { box-shadow: inset 0 0 0 1px currentColor; }
.fm-tpd { flex: 1 1 100%; font-size: var(--font-sm); color: var(--ink-600); }
.fm-tpd b { margin-right: 8px; color: var(--ink-900); }
.fm-attr { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.fm-attr b { font-size: var(--font-sm); margin-right: 2px; }

/* 수준 — 오렌지는 «노릴 만한» 근접·도약에만 */
.lv-hold { background: var(--fm-good-bg); color: var(--fm-good); }
.lv-near { background: var(--brand-200); color: var(--brand-700); }
.lv-leap { background: var(--brand-100); color: var(--brand-700); }
.lv-entry { background: var(--ink-100); color: var(--ink-600); }
.lv-out { background: var(--ink-100); color: var(--ink-500); }
.lv-unknown { background: var(--fm-bad-bg); color: var(--fm-bad); }
.lv-catalog { background: var(--ink-100); color: var(--ink-600); }
.use-target { background: var(--ink-900); color: var(--text-inverse); }
.use-keep { background: var(--fm-good-bg); color: var(--fm-good); }
.use-tag { background: var(--fm-pl-g-bg); color: var(--fm-pl-g-fg); }
.use-support { background: var(--ink-100); color: var(--ink-700); }
.use-hold { background: var(--ink-50); color: var(--ink-500); }
.use-exclude { background: var(--fm-bad-bg); color: var(--fm-bad); }

.fm-opt {
  height: 32px; padding: 0 12px; border-radius: var(--radius-full); border: 0; background: transparent; cursor: pointer;
  font: inherit; font-size: var(--font-sm); color: var(--ink-500);
}
.fm-opt[aria-checked="true"] { background: var(--ink-100); color: var(--ink-900); font-weight: 500; }
.fm-opt:disabled { color: var(--ink-500); cursor: not-allowed; }

/* ── 시작 ── */
.fm-start { padding-top: var(--spacing-2xl); display: flex; flex-direction: column; gap: 18px; }
.fm-start-q { margin: 0; text-align: center; font-size: var(--font-2xl); font-weight: 500; letter-spacing: var(--tracking-tight); }
.fm-urlbar {
  width: 100%; max-width: var(--fm-start-w); margin: 0 auto;
  display: flex; gap: 8px; background: var(--bg-card); border: 1px solid var(--ink-300); border-radius: var(--radius-2xl);
  padding: 8px; box-shadow: var(--shadow-lg);
}
.fm-urlbar:focus-within { border-color: var(--ink-900); box-shadow: 0 0 0 1px var(--ink-900), var(--shadow-lg); }
.fm-urlbar .fm-url:focus-visible { outline: none; }
.fm-url {
  flex: 1 1 auto; min-width: 0; height: 52px; border: 0; outline: none; padding: 0 12px; font: inherit;
  font-size: var(--font-md); background: transparent; color: var(--ink-900);
}
/* 입력창 아래 한 줄 — 왼쪽 생성 AI 선택 · 오른쪽 확장 점(둘 다 정상이면 숨김). 좁으면 두 줄 */
.fm-start-row {
  width: 100%; max-width: var(--fm-start-w); margin: calc(var(--spacing-sm) * -1) auto 0; box-sizing: border-box; padding-inline: var(--spacing-sm);
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: var(--spacing-xs) var(--spacing-md); font-size: var(--font-xs);
}
.fm-gen-sel {
  height: 1.75rem; padding: 0 var(--spacing-sm); border: 1px solid var(--ink-200); border-radius: var(--radius-full); background: var(--bg-card);
  font: inherit; font-size: var(--font-xs); color: var(--ink-700); cursor: pointer; field-sizing: content;   /* 고른 항목 폭만(비활성 긴 항목 폭으로 늘지 않게) */
}
.fm-start-row { justify-content: center; }
.fm-gen-sel:hover { border-color: var(--ink-400); }

/* ── 작업 ── */
.fm-work { display: flex; flex-direction: column; gap: 12px; }
.fm-h { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; width: 100%; }
.fm-aux-h { display: flex; align-items: center; gap: var(--spacing-sm); }
.fm-aux-h h3 { margin: 0; font-size: var(--font-base); font-weight: 500; }

/* 판단 근거(ⓘ) */
.fm-whyb {
  flex: 0 0 auto; height: 28px; padding: 0 10px; border: 1px solid var(--ink-200); border-radius: var(--radius-full);
  background: var(--bg-card); color: var(--ink-600); font: inherit; font-size: var(--font-sm); cursor: pointer; white-space: nowrap;
  display: inline-flex; align-items: center; justify-content: center;
}
.fm-whyb.is-s { position: relative; height: auto; padding: 0; margin-left: var(--spacing-xs); border: 0; background: none; font-size: var(--font-sm); vertical-align: middle; }
.fm-whyb.is-s .fm-whyi { margin-right: 0; }
/* 🔴 ⓘ 는 «왜?» 안의 동그라미 하나로 통일 — 줄 버튼(.is-s)은 테두리 없이 이 동그라미만 */
.fm-whyi {
  display: inline-flex; align-items: center; justify-content: center; width: 1.5em; height: 1.5em; margin-right: var(--spacing-xs);
  border: 1px solid currentColor; border-radius: var(--radius-full); font-size: var(--font-2xs); font-weight: 500; line-height: 1;
}
.fm-whyb[aria-expanded="true"] { background: var(--ink-900); border-color: var(--ink-900); color: var(--text-inverse); }
.fm-whyb.is-s[aria-expanded="true"] { background: none; color: var(--ink-900); }
.fm-whyb.is-s[aria-expanded="true"] .fm-whyi { background: var(--ink-900); color: var(--text-inverse); }
.fm-trace {
  display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; margin: 2px 0 8px; border-radius: var(--radius-lg);
  background: var(--ink-50); font-size: var(--font-sm);
}
.fm-trace-h { font-weight: 500; color: var(--ink-600); }
.fm-tl { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 4px; }
.fm-tl li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 8px; }
.fm-tl i { font-style: normal; flex: 0 0 1.2em; text-align: center; color: var(--ink-500); }
.fm-tl i.is-ok { color: var(--fm-good); }
.fm-tl i.is-no { color: var(--fm-bad); }
.fm-tl b { font-variant-numeric: tabular-nums; }
.fm-trace-d { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding-top: 6px; border-top: 1px solid var(--ink-200); }
.fm-trace-tr td { background: var(--ink-50); white-space: normal; }
.fm-trace-tr .fm-trace { margin: 0; }
.fm-h strong { font-size: var(--font-md); }

.fm-chev { flex: 0 0 auto; margin-left: auto; color: var(--ink-500); transition: transform .15s; }

.fm-no { flex: 0 0 2ch; text-align: right; font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-tbl .fm-no { width: 2ch; padding-right: 0; font-size: var(--font-xs); color: var(--ink-500); }

/* 순위 칸 — 1~80위는 수준 색 알약, 밖·미확인은 흐린 글 */
.fm-rk { display: inline-block; padding: 1px 7px; border-radius: var(--radius-full); font-weight: 500; font-variant-numeric: tabular-nums; }
.fm-rk.is-none { padding: 0; font-weight: 400; color: var(--ink-500); }

.fm-dead { padding-top: 6px; border-top: 1px solid var(--ink-100); }
/* 목표 표 키워드 칸 — 키워드만 말줄임(title 로 전체) */
.fm-tkw { display: inline-block; max-width: 11em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
.fm-low { margin-left: var(--spacing-xs); height: 18px; padding: 0 5px; font-size: var(--font-2xs); color: var(--ink-500); }

.fm-chip.is-dim, .fm-pl.is-dim { opacity: .45; }
/* 배치빈도 = 한 줄(앞 2개 + «+n») — 🔴 overflow 를 감추면 «+n» 툴팁이 잘린다 */
.fm-target-terms > * { flex: none; white-space: nowrap; }

.fm-trace .fm-why { color: var(--ink-900); }
.fm-why { flex: 1 1 100%; font-size: var(--font-sm); color: var(--ink-600); }
.fm-why b { margin-right: 6px; color: var(--ink-900); }
.fm-date { flex: 0 0 56px; color: var(--ink-500); }

.fm-bar { flex: 1 1 auto; height: 6px; border-radius: var(--radius-full); background: var(--ink-100); overflow: hidden; }
.fm-bar i { display: block; height: 100%; background: var(--brand-500); transition: width .3s; }
.fm-tiers { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.fm-tiers .fm-muted { margin-right: 6px; }
.fm-len { font-size: var(--font-sm); color: var(--ink-600); }
.fm-len.is-over { color: var(--fm-bad); }
.fm-note {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 12px 14px; border-radius: var(--radius-xl);
  background: var(--ink-50); font-size: var(--font-sm);
}
.fm-note > span { flex: 1 1 200px; }
.fm-note.is-warn { background: var(--brand-50); }
.fm-note.is-bad { background: var(--fm-bad-bg); color: var(--fm-bad); }
.fm-note.is-good { background: var(--fm-good-bg); color: var(--fm-good-ink); flex-direction: column; align-items: flex-start; }
.fm-note.is-good > span { flex: none; }
/* 조회 중 — 움직이는 점(시안 v16 .qing) */
.fm-qing { display: inline-flex; align-items: center; color: var(--brand-600); font-size: var(--font-xs); font-weight: 500; white-space: nowrap; }
.fm-qdots { display: inline-flex; align-items: center; }
.fm-qdots i { display: inline-block; width: 3px; height: 3px; margin-left: 2px; border-radius: 50%; background: currentColor; animation: fm-qdot 1.2s infinite ease-in-out; }
.fm-qdots i:nth-child(2) { animation-delay: .2s; }
.fm-qdots i:nth-child(3) { animation-delay: .4s; }
@keyframes fm-qdot { 0%, 80%, 100% { opacity: .25; } 40% { opacity: 1; } }
.fm-chip.fm-sib { background: var(--fm-pl-c-bg); color: var(--fm-pl-c-fg); font-weight: 500; }
/* 결과 경고·적용 차단(계약 3) */
.fm-warns { margin: var(--spacing-sm) 0 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: var(--spacing-xs); font-size: var(--font-sm); }
.fm-warns li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-xs); }
.fm-warns .fm-ic { flex: none; width: 16px; height: 16px; }
.fm-warns.is-warn { color: var(--fm-warn); }
.fm-block { margin-top: var(--spacing-sm); }
.fm-block > span { flex: 1 1 100%; font-weight: 500; }
.fm-block .fm-warns { margin: 0; }
@media (prefers-reduced-motion: reduce) { .fm-qdots i { animation: none; opacity: .6; } }

/* 사다리 제안 */
.fm-ladder {
  display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 14px 18px; border-radius: var(--radius-2xl);
}
.fm-ladder .fm-ic { width: 22px; height: 22px; }
.fm-ladder.is-next { background: var(--fm-good-bg); border: 1px solid var(--fm-good-line); color: var(--fm-good-ink); }
.fm-ladder.is-revert { background: var(--fm-bad-bg); border: 1px solid var(--brand-200); color: var(--fm-bad); }
.fm-ladder.is-keep { background: var(--ink-50); border: 1px solid var(--ink-100); color: var(--ink-700); }

/* 결과 카드 */
.fm-result { display: flex; flex-direction: column; gap: var(--spacing-sm); }
.fm-title { font-size: var(--font-xl); font-weight: 500; line-height: var(--line-base); word-break: keep-all; overflow-wrap: anywhere; }
.fm-title mark { padding: 0 2px; border-radius: var(--radius-sm); background: var(--fm-good-bg); color: var(--fm-good); }
/* 🔴 후보 줄은 fm-cands — 상단 고정 탭(fm-steps) 이름을 겹쳐 쓰면 후보 줄이 고정 탭처럼 붙는다 */
.fm-cands { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
.fm-cand {
  display: flex; flex-direction: column; gap: 4px; min-width: 0; padding: 10px 12px; border: 1px solid var(--ink-200); border-radius: var(--radius-lg);
  background: var(--bg-card); font: inherit; color: var(--ink-700); text-align: left; cursor: pointer;
}
.fm-cand:hover:not(:disabled) { border-color: var(--ink-500); }
.fm-cand[aria-selected="true"] { border-color: var(--ink-900); box-shadow: inset 0 0 0 1px var(--ink-900); color: var(--ink-900); }
.fm-cand:disabled { background: var(--ink-50); color: var(--ink-500); cursor: not-allowed; }
.fm-cand-t { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: var(--font-sm); font-weight: 500; }
.fm-cand-d { font-size: var(--font-xs); overflow-wrap: anywhere; }
.fm-cand-m { font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
/* 바꿀 내용 — 같은 모양 줄 3개 */
.fm-ops { display: flex; flex-direction: column; }
.fm-op { display: flex; gap: var(--spacing-sm); align-items: flex-start; padding-block: 10px; border-top: 1px solid var(--ink-100); }
.fm-op:first-child { border-top: 0; padding-top: 0; }
.fm-op-l { flex: 0 0 4.5em; padding-top: 4px; font-size: var(--font-xs); font-weight: 500; color: var(--ink-500); }
.fm-op-v { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.fm-op-v.fm-chips { flex-direction: row; }
.fm-op-tags { flex-direction: row; flex-wrap: wrap; align-items: flex-start; gap: 6px 12px; }
.fm-op-tags > .fm-chips { flex: 1 1 16em; min-width: 0; }
/* 효과 — 정보 띠 */
.fm-effect { display: flex; flex-direction: column; gap: 8px; padding: 12px 14px; border-radius: var(--radius-lg); background: var(--ink-50); }
.fm-acts { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 10px; }
/* 결과 ↔ 근거 — 큰 덩어리 사이 옅은 점선 */
.fm-stub { display: flex; flex-direction: column; gap: 10px; padding-top: var(--spacing-md); border-top: 1px dashed var(--ink-200); }
.fm-ev-b { display: flex; flex-direction: column; gap: 10px; }
.fm-target-table.fm-ev-table { min-width: 56rem; }   /* 🔴 .fm-target-table(68rem) 보다 뒤·구체적이어야 PC 에서 잘리지 않는다 */
.fm-to { margin-left: 6px; color: var(--ink-600); font-weight: 500; }
/* 낱말 칩 — 숫자 = 덮는 키워드 수 · 0(기여 0)·?(모름)·지도 밖 */
.fm-wd { gap: 6px; background: var(--ink-50); color: var(--ink-900); cursor: help; }
.fm-wd b {
  min-width: 18px; height: 18px; padding: 0 5px; border-radius: var(--radius-full); background: var(--bg-card); color: var(--ink-600);
  font-size: var(--font-xs); display: inline-flex; align-items: center; justify-content: center; font-variant-numeric: tabular-nums;
}
.fm-wd.is-zero { background: var(--fm-warn-bg); color: var(--fm-warn); }
.fm-wd.is-zero b { color: var(--fm-warn); }
.fm-wd.is-unk { background: transparent; color: var(--ink-500); box-shadow: inset 0 0 0 1px var(--ink-300); }
.fm-wd.is-out { background: var(--fm-pl-g-bg); color: var(--fm-pl-g-fg); }

.fm-before { margin: 0; font-size: var(--font-sm); line-height: 1.6; color: var(--ink-500); word-break: keep-all; overflow-wrap: anywhere; }
.fm-before-k { margin-right: 8px; font-weight: 500; color: var(--ink-600); }
.fm-del { color: var(--ink-500); text-decoration: line-through; text-decoration-color: var(--fm-bad); text-decoration-thickness: 1.5px; }
.fm-plus { margin-right: 3px; font-weight: 500; }
.fm-in:disabled { width: 100%; min-height: 2.75em; border: 1px solid var(--ink-200); border-radius: var(--radius-md); background: var(--ink-50); color: var(--ink-500); cursor: not-allowed; }
.fm-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.fm-dup { padding: 0 6px; border-radius: var(--radius-full); background: var(--ink-100); color: var(--ink-600); font-size: var(--font-xs); font-weight: 400; }
.fm-sim > summary { list-style: none; cursor: pointer; font-variant-numeric: tabular-nums; }
.fm-sim > summary::-webkit-details-marker { display: none; }
.fm-sim > summary.is-warn { background: var(--fm-warn-bg); color: var(--fm-warn); font-weight: 500; }
.fm-sim > summary:not(.is-warn) { background: var(--ink-50); color: var(--ink-500); }
.fm-sim-l { display: flex; flex-direction: column; gap: var(--spacing-xs); margin: var(--spacing-xs) 0 0; padding: 0; list-style: none; }
.fm-sim-l li { display: flex; flex-wrap: wrap; gap: var(--spacing-xs); align-items: center; min-width: 0; font-size: var(--font-sm); color: var(--ink-700); }
.fm-sim-t { min-width: 0; overflow-wrap: anywhere; }
.fm-sim-l .is-warn { color: var(--fm-warn); font-weight: 500; }
.fm-ctp { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; margin: 2px 0 6px; border-radius: var(--radius-lg); background: var(--ink-50); font-size: var(--font-sm); }
.fm-ctp-h { display: flex; align-items: center; gap: 8px; }
.fm-ctp-h .fm-whyb { margin-left: auto; }
.fm-ctl { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 2px; font-variant-numeric: tabular-nums; color: var(--ink-700); }
.fm-ctt th, .fm-ctt td { padding: 4px 6px; background: transparent; }
.fm-gain { font-size: var(--font-base); color: var(--ink-700); }
.fm-gain b { color: var(--fm-good); font-variant-numeric: tabular-nums; }
.fm-gain .fm-muted { margin-left: 8px; }
.fm-weak { flex-basis: 100%; margin: 0; }
.fm-rules { display: flex; flex-direction: column; gap: 4px; padding-bottom: 6px; border-bottom: 1px solid var(--ink-200); }
.fm-rules .fm-chev { margin-left: 0; }
.fm-rules [aria-expanded="true"] .fm-chev { transform: rotate(180deg); }
.fm-rulev { border: 0; font: inherit; font-size: var(--font-sm); cursor: pointer; }

/* 키워드 입력 */
.fm-kwin {
  flex: 1 1 14em; min-width: 0; min-height: 2.5em; border: 1px dashed var(--ink-300); border-radius: var(--radius-lg); padding: 0 10px;
  font: inherit; font-size: var(--font-sm); background: var(--ink-50); color: var(--ink-900);
}
.fm-x button { border: 0; background: none; padding: 0 0 0 6px; cursor: pointer; color: var(--ink-500); font: inherit; }

/* 표(전체 64·순위) — 표만 가로로 넘친다 · 앞 열(키워드)과 ⓘ 열은 붙박이 */
.fm-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.fm-tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: var(--font-sm); }
.fm-tbl th, .fm-tbl td { padding: 8px 6px; border-bottom: 1px solid var(--ink-100); text-align: left; white-space: nowrap; background: var(--bg-card); }
.fm-tbl th { font-weight: 500; color: var(--ink-600); background: var(--ink-50); }
.fm-tbl .fm-n { text-align: right; font-variant-numeric: tabular-nums; }
.fm-tbl td.fm-why { white-space: normal; min-width: 8em; max-width: 11em; color: var(--ink-600); }
.fm-stk { position: sticky; left: 0; z-index: 1; }

/* 내 상품 목록·추적 */
.fm-prod {
  display: flex; gap: var(--spacing-sm); align-items: center; width: 100%; text-align: left; padding: var(--spacing-sm); border-radius: var(--radius-lg);
  border: 1px solid transparent; background: transparent; font: inherit; color: inherit; cursor: pointer;
}
.fm-prod:hover:not(:disabled) { background: var(--ink-50); }
.fm-prod:disabled { opacity: .45; cursor: not-allowed; }
.fm-prod img, .fm-thumb-s { flex: 0 0 var(--fm-mine-thumb); width: var(--fm-mine-thumb); height: var(--fm-mine-thumb); border-radius: var(--radius-md); object-fit: cover; background: var(--ink-200); }
.fm-prod b { display: block; font-size: var(--font-base); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-st { display: block; font-size: var(--font-xs); color: var(--ink-500); }
.fm-st.is-good { color: var(--fm-good); }
.fm-st.is-bad { color: var(--fm-bad); }
.fm-prod-r { display: flex; align-items: center; gap: 2px; }
.fm-prod-r > .fm-prod { flex: 1 1 auto; min-width: 0; }
.fm-prod.is-edit { cursor: default; }
.fm-prod.is-edit .fm-pname { margin-left: 0; font-size: var(--font-base); color: var(--ink-900); border-color: var(--ink-300); background: var(--bg-card); }
.fm-pen-del:hover { color: var(--fm-bad); }
/* 자동 순환 — 연결 아이콘 · 알림 칩(사람이 할 일만 강조색) */
.fm-prod-n { display: block; min-width: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: var(--font-base); font-weight: 500; }
.fm-prod-n > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-prod-n b { min-width: 0; }
.fm-mine-rank { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 0; font-variant-numeric: tabular-nums; white-space: nowrap; }
.fm-mine-avg { font-size: var(--font-base); font-weight: 400; color: var(--ink-900); }
.fm-mine-delta { font-size: var(--font-xs); color: var(--ink-500); }
.fm-mine-delta.is-up { color: var(--fm-good); }
.fm-mine-delta.is-dn { color: var(--fm-bad); }
.fm-mine-foot { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--spacing-sm); padding: var(--spacing-md) var(--spacing-sm) var(--spacing-xs); font-size: var(--font-xs); }
.fm-mine-foot .fm-link { font-size: var(--font-sm); }
.fm-loop-ic { flex: 0 0 auto; display: inline-flex; color: var(--ink-500); }
.fm-loop-ic .fm-ic { width: 14px; height: 14px; }
.fm-prod-al { padding: 0 8px 6px calc(8px + 44px + 10px); }
.fm-chip.fm-al { border: 0; background: var(--brand-50); color: var(--brand-700); cursor: pointer; font: inherit; font-size: var(--font-xs); }
.fm-chip.fm-al:hover:not(:disabled) { background: var(--brand-100); }
.fm-chip.fm-al:disabled { opacity: .45; cursor: not-allowed; }
.fm-start-alert { align-self: center; }
.fm-start-alert[hidden] { display: none; }
.fm-track { display: flex; flex-direction: column; gap: var(--spacing-md); }
/* 순위 현황 — 틀고정(왼쪽 키워드·월 검색량 / 오른쪽 오늘·7일·변동 / 위 날짜) · 칸 색은 의미색 옅은 면만 */
.fm-rt-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm) var(--spacing-md); }
.fm-rt-h { margin: 0; font-size: var(--font-lg); font-weight: 500; color: var(--ink-900); }
.fm-ready-tag:empty { display: none; }
.fm-ready-strip { margin-bottom: var(--spacing-md); border-radius: var(--radius-md); }
.fm-rt-meta { margin-left: auto; }
.fm-rt-tools { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm); font-size: var(--font-xs); }
.fm-c6-p > .fm-rt-tools { justify-content: flex-end; margin-bottom: var(--spacing-sm); }
.fm-rt-sel { height: 28px; padding: 0 var(--spacing-sm); border: 1px solid var(--ink-200); border-radius: var(--radius-md); background: var(--bg-card); font: inherit; font-size: var(--font-xs); color: var(--ink-900); cursor: pointer; }
.fm-rt-sel:focus-visible { outline: 2px solid var(--accent-color); outline-offset: 2px; }
.fm-legend { display: flex; align-items: center; gap: 6px; margin-bottom: var(--spacing-sm); font-size: var(--font-xs); color: var(--ink-500); }
.fm-rt-lg { display: inline-block; width: 14px; height: 10px; border-radius: 3px; background: var(--fm-track-apply-bg); outline: 1px solid var(--brand-100); }
.fm-rt-scroll { max-height: var(--fm-rt-max-h); overflow: auto; border-radius: var(--radius-md); }
.fm-tbl.fm-rt { width: max-content; min-width: 100%; font-variant-numeric: tabular-nums; }
.fm-rt th { font-weight: 400; color: var(--ink-500); font-size: var(--font-xs); }
.fm-rt td { color: var(--ink-700); }
.fm-rt thead th { position: sticky; top: 0; z-index: 2; }
.fm-rt th:nth-child(1), .fm-rt td:nth-child(1) { position: sticky; left: 0; z-index: 1; width: var(--fm-rt-key-w); min-width: var(--fm-rt-key-w); max-width: var(--fm-rt-key-w); box-sizing: border-box; }
.fm-rt th:nth-child(2), .fm-rt td:nth-child(2) { position: sticky; left: var(--fm-rt-key-w); z-index: 1; min-width: var(--fm-rt-vol-w); box-sizing: border-box; box-shadow: inset -1px 0 0 var(--ink-100); }
.fm-rt thead th:nth-child(-n+2) { z-index: 3; }
@media (min-width: 641px) {
  .fm-rt th:nth-last-child(1), .fm-rt td:nth-last-child(1) { position: sticky; right: 0; z-index: 1; min-width: var(--fm-rt-mv-w); box-sizing: border-box; }
  .fm-rt th:nth-last-child(2), .fm-rt td:nth-last-child(2) { position: sticky; right: var(--fm-rt-mv-w); z-index: 1; min-width: var(--fm-rt-sp-w); box-sizing: border-box; }
  .fm-rt th:nth-last-child(3), .fm-rt td:nth-last-child(3) { position: sticky; right: calc(var(--fm-rt-mv-w) + var(--fm-rt-sp-w)); z-index: 1; box-sizing: border-box; box-shadow: inset 1px 0 0 var(--ink-100); }
  .fm-rt thead th:nth-last-child(-n+3) { z-index: 3; }
}
.fm-rt .fm-c { min-width: var(--fm-rt-day-w); text-align: center; }
.fm-rt .is-today { background: color-mix(in srgb, var(--ink-900) 5%, var(--bg-card)); }
.fm-rt-grp td { background: color-mix(in srgb, var(--ink-900) 3%, var(--bg-card)); color: var(--ink-900); border-top: 1px solid var(--ink-300); }
.fm-rt-grp td:first-child { box-shadow: inset 3px 0 0 var(--accent-color); }
.fm-rt .is-ap, .fm-rt-grp td.is-ap { background: var(--fm-track-apply-bg); }
.fm-rt-kc { display: flex; align-items: center; gap: 6px; min-width: 0; }
.fm-rt-kw { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-rt-kwr td:first-child, .fm-rt-rest td:first-child { padding-left: var(--fm-rt-indent); }
.fm-rt-rest td { padding-top: 6px; padding-bottom: 6px; }
.fm-rt-tog { display: inline-flex; align-items: center; gap: 8px; min-width: 0; padding: 0; border: 0; background: none; font: inherit; color: inherit; cursor: pointer; }
.fm-rt-tog .fm-chev { flex: none; width: 12px; height: 12px; transform: rotate(-90deg); }
.fm-rt-tog[aria-expanded="true"] .fm-chev { transform: none; }
.fm-rt-tog:focus-visible, .fm-rt-act:focus-visible, .fm-rt-add:focus-visible { outline: 2px solid var(--accent-color); outline-offset: 2px; }
.fm-rt-thumb { flex: none; display: inline-flex; }
.fm-rt-img { display: block; width: 26px; height: 26px; border-radius: var(--radius-sm); object-fit: cover; background: var(--ink-100); }
.fm-rt-nm { min-width: 0; max-width: 14em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fm-rt-tag { flex: none; padding: 0 6px; border-radius: var(--radius-full); font-size: var(--font-2xs); }
.fm-rt-tag.is-goal { background: var(--fm-pl-g-bg); color: var(--fm-pl-g-fg); }
.fm-rt-tag.is-pin { background: var(--fm-pl-t-bg); color: var(--fm-pl-t-fg); }
.fm-rt-tag.is-keep { background: var(--fm-pl-a-bg); color: var(--fm-pl-a-fg); }
.fm-rt-act { flex: none; margin-left: auto; visibility: hidden; padding: 0 6px; border: 1px solid var(--ink-200); border-radius: var(--radius-sm); background: var(--bg-card); font: inherit; font-size: var(--font-2xs); color: var(--ink-500); cursor: pointer; }
.fm-rt-kwr:hover .fm-rt-act, .fm-rt-kwr:focus-within .fm-rt-act { visibility: visible; }
.fm-rt-kwr.is-paused td { color: var(--ink-500); }
.fm-rt-r.is-wk, .fm-rt-r.is-no { color: var(--ink-400); }
.fm-rt-jump { margin-left: 2px; font-size: var(--font-2xs); vertical-align: 1px; }
.fm-rt-jump.is-up, .fm-rt-td.is-up { color: var(--fm-good); }
.fm-rt-jump.is-dn { color: var(--fm-bad); }
.fm-rt-chg { display: block; font-size: var(--font-2xs); line-height: 1.1; color: var(--brand-700); white-space: nowrap; }
.fm-rt-pill { display: inline-block; min-width: 52px; padding: 2px 8px; border-radius: var(--radius-full); font-size: var(--font-xs); text-align: center; }
.fm-rt-pill.is-up { background: var(--fm-good-bg); color: var(--fm-good); }
.fm-rt-pill.is-dn { background: var(--fm-bad-bg); color: var(--fm-bad); }
.fm-rt-pill.is-new { background: var(--brand-100); color: var(--brand-700); }
.fm-rt-spark { display: block; overflow: visible; color: var(--ink-400); }
.fm-rt-spark path { fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linejoin: round; }
.fm-rt-spark circle { fill: currentColor; }
.fm-rt-spark.is-up { color: var(--fm-good); }
.fm-rt-spark.is-dn { color: var(--fm-bad); }
.fm-rt-spark.is-new, .fm-rt-td.is-new { color: var(--brand-700); }
.fm-rt-add { padding: 1px 10px; border: 1px dashed var(--ink-400); border-radius: var(--radius-full); background: none; font: inherit; font-size: var(--font-xs); color: var(--ink-500); cursor: pointer; }
.fm-rt-add:hover:not(:disabled) { color: var(--ink-900); border-color: var(--ink-500); }
.fm-rt-add:disabled { opacity: .5; cursor: not-allowed; }
.fm-rt-add-in { box-sizing: border-box; width: 100%; height: 28px; padding: 0 var(--spacing-sm); border: 1px solid var(--ink-300); border-radius: var(--radius-md); background: var(--bg-card); font: inherit; font-size: var(--font-sm); color: var(--ink-900); }
@media (pointer: coarse) { .fm-rt-act { visibility: visible; } }
/* 상품 상세 — 카드 4개 + 평균 순위 그래프 */
.fm-rt-detail { display: flex; flex-direction: column; gap: var(--spacing-md); margin-top: var(--spacing-md); padding: var(--spacing-lg); border: 1px solid var(--ink-200); border-radius: var(--radius-xl); background: var(--bg-card); }
.fm-rt-cap { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm) var(--spacing-md); }
.fm-rt-dt { margin: 0; font-size: var(--font-base); font-weight: 500; color: var(--ink-900); }
.fm-rt-cap .fm-muted { font-size: var(--font-xs); }
.fm-rt-acts { display: flex; gap: var(--spacing-xs); margin-left: auto; }
.fm-rt-dgrid { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--spacing-lg); }
@media (min-width: 860px) { .fm-rt-dgrid { grid-template-columns: var(--fm-rt-tiles-w) minmax(0, 1fr); } }
.fm-rt-tiles { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-content: start; gap: var(--spacing-sm); }
.fm-rt-tile { display: grid; gap: 2px; padding: 12px 14px; border: 1px solid var(--ink-200); border-radius: var(--radius-lg); }
.fm-rt-tl, .fm-rt-td { font-size: var(--font-xs); color: var(--ink-500); }
.fm-rt-tv { font-size: var(--font-2xl); line-height: 1.3; color: var(--ink-900); font-variant-numeric: tabular-nums; }
.fm-rt-tile.is-hi { background: var(--ink-700); border-color: var(--ink-700); }
.fm-rt-tile.is-hi .fm-rt-tl, .fm-rt-tile.is-hi .fm-rt-tv, .fm-rt-tile.is-hi .fm-rt-td { color: var(--bg-card); }
.fm-rt-tile.is-hi .fm-rt-tl, .fm-rt-tile.is-hi .fm-rt-td { opacity: .8; }
.fm-rt-chart { min-width: 0; padding: 10px 12px; border: 1px solid var(--ink-200); border-radius: var(--radius-lg); }
.fm-rt-svg text { fill: var(--ink-500); font-family: inherit; font-size: 11px; }
.fm-rt-grid { stroke: var(--ink-100); stroke-width: 1; }
.fm-rt-area { fill: var(--ink-50); }
.fm-rt-base { stroke: var(--ink-400); stroke-dasharray: 2 4; }
.fm-rt-apl { stroke: var(--accent-color); stroke-dasharray: 3 4; }
.fm-rt-svg .fm-rt-apt { fill: var(--accent-color); }
.fm-rt-pre { fill: none; stroke: var(--ink-400); stroke-width: 2; }
.fm-rt-post { fill: none; stroke: var(--ink-700); stroke-width: 1.6; }
.fm-rt-dot, .fm-rt-svg .fm-rt-end { fill: var(--ink-900); }

@media (min-width: 641px) {
  .fm-cands { grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); }
  .fm-op-l { flex-basis: 6em; }
  .fm-title { font-size: var(--font-2xl); }
  .fm-start { padding-top: 72px; }
  .fm-start-q { font-size: var(--font-3xl); }
}

/* 손가락 — 누르는 자리 44px(작은 ⓘ 는 보이는 크기 그대로 누르는 영역만 넓힌다) */
@media (pointer: coarse) {
  .fm-btn-sm, .fm-opt, .fm-whyb, .fm-kwin { min-height: 44px; }
  .fm-link { min-height: 44px; }
  .fm-whyb.is-s { min-height: 0; }
  .fm-whyb.is-s::after, .fm-tp::after, .fm-x button::after { content: ""; position: absolute; inset: -9px; }
  .fm-tp, .fm-x button { position: relative; }
}

/* 변경 이력 */
.fm-hist { display: flex; flex-direction: column; gap: var(--spacing-xs); padding-block: var(--spacing-md); border-top: 1px solid var(--ink-100); }
.fm-hist:first-child { padding-top: 0; border-top: 0; }
.fm-hist:last-child { padding-bottom: 0; }
.fm-hist-h { display: flex; flex-direction: column; align-items: flex-start; gap: var(--spacing-sm); }
.fm-hist-h .fm-date { flex: 0 0 auto; white-space: nowrap; }
@media (min-width: 481px) {
  .fm-hist-h { flex-direction: row; flex-wrap: wrap; align-items: center; }
}
.fm-hist-t { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--spacing-xs) var(--spacing-sm); overflow-wrap: anywhere; }
.fm-hist-b, .fm-hist-arr { color: var(--ink-500); }
.fm-app .--good { color: var(--fm-good); }
.fm-app .--bad { color: var(--fm-bad); }
.fm-hist-a mark { background: var(--fm-good-bg); border-radius: var(--radius-sm); padding-inline: var(--spacing-xs); }
.fm-hist .fm-chip { background: var(--ink-100); color: var(--ink-700); }
.fm-hist .fm-chip.--good { background: var(--fm-good-bg); color: var(--fm-good); }
.fm-hist .fm-chip.--bad { background: var(--fm-bad-bg); color: var(--fm-bad); }
.fm-hist .fm-muted, .fm-hist .fm-date { color: var(--ink-500); }
.fm-rk-total { white-space: nowrap; }

@media (pointer: coarse) {
  .fm-btn-xs::after, .fm-pen::after { content: ""; position: absolute; inset: -8px; }
}

/* 목표 표 — 숫자·자리·낱말 칩은 진단과 같은 토큰. */
.fm-target-inputs, .fm-target-add { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm); }
.fm-target-inputs > .fm-chips { flex-basis: 100%; }
/* 입력칸(안에 [추가]) 2 : 끌어놓기 3 — 폰은 한 줄씩 */
.fm-target-add { width: 100%; display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--spacing-sm); }
@media (min-width: 641px) { .fm-target-add { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); } }
.fm-kwbox { position: relative; display: flex; }
.fm-kwbox .fm-kwin { flex: 1 1 auto; height: var(--fm-kw-h); border-style: solid; border-radius: var(--radius-md); background: var(--bg-card); padding-right: 5.5em; }
.fm-kwbox .fm-btn { position: absolute; right: var(--spacing-xs); top: 50%; transform: translateY(-50%); }
.fm-drop {
  display: flex; align-items: center; justify-content: center; gap: var(--spacing-sm); min-height: var(--fm-kw-h); padding: var(--spacing-xs) var(--spacing-sm);
  border: 2px dashed var(--ink-300); border-radius: var(--radius-md); background: var(--ink-50); color: var(--ink-500);
  font: inherit; font-size: var(--font-sm); font-weight: 500; text-align: center; cursor: pointer;
}
.fm-drop .fm-ic { width: 20px; height: 20px; }
.fm-drop:hover:not(:disabled), .fm-drop:focus-visible { border-color: var(--ink-700); color: var(--ink-700); }
.fm-drop:disabled { opacity: .45; cursor: not-allowed; }
.fm-drop.is-over { border-color: var(--brand-600); background: var(--brand-50); }
.fm-target-scroll { padding-bottom: var(--spacing-xs); }
.fm-target-table { min-width: 68rem; }
.fm-target-table th, .fm-target-table td { padding: var(--spacing-sm); }
.fm-target-table .fm-stk { min-width: 3ch; box-shadow: var(--shadow-sm); }
.fm-target-table thead .fm-stk { z-index: 2; }
.fm-target-key { font-weight: 500; }
.fm-target-terms { display: flex; flex-wrap: nowrap; align-items: center; gap: var(--spacing-xs); max-width: 24em; min-width: 12em; }
.fm-target-table .fm-tpd { white-space: normal; }
.fm-target-check input { width: 1.125em; height: 1.125em; margin: 0; accent-color: var(--ink-900); cursor: pointer; }
.fm-target-check input:disabled { cursor: default; }
.fm-sort { display: inline-flex; align-items: center; gap: var(--spacing-xs); border: 0; padding: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; }
.fm-sort span { color: var(--ink-400); font-size: var(--font-xs); }
.fm-target-goal > button { border: 0; font-family: inherit; cursor: pointer; gap: var(--spacing-xs); }
.fm-target-goal > button .fm-ic { width: 1em; height: 1em; }
.fm-target-goal > button:disabled { cursor: default; }
.fm-target-menu { position: fixed; z-index: 40; display: flex; flex-direction: column; gap: var(--spacing-xs); padding: var(--spacing-sm); min-width: 10em; max-width: calc(100vw - var(--spacing-xl)); border: 1px solid var(--ink-200); border-radius: var(--radius-lg); background: var(--bg-card); box-shadow: var(--shadow-xl); }
.fm-target-menu strong { padding: var(--spacing-xs) var(--spacing-sm); color: var(--ink-600); font-size: var(--font-xs); }
.fm-target-menu button { border: 0; background: transparent; padding: var(--spacing-sm); text-align: left; color: var(--ink-700); font: inherit; cursor: pointer; border-radius: var(--radius-sm); }
.fm-target-menu button[aria-checked="true"] { background: var(--ink-100); color: var(--ink-900); font-weight: 500; }
.fm-target-menu button:hover:not(:disabled) { background: var(--ink-50); }
.fm-target-menu button:disabled { color: var(--ink-400); cursor: default; }
@media (pointer: coarse) {
  .fm-sort, .fm-target-goal > button, .fm-target-menu button { min-height: 2.75rem; }
}

/* 계약 3 목표 추천 묶음 · 이유 · 체급 근거(툴팁) */
.fm-grp-tr td { padding-top: var(--spacing-sm); font-size: var(--font-xs); font-weight: 500; color: var(--ink-500); background: var(--bg-card); }

/* 계약 3 목표 표 — 오른쪽 ⓘ 칸 없음 · PC 는 «목표» 열까지 한 화면(폰은 가로 스크롤) */
.fm-target-table.is-p3 { min-width: 52rem; }
.fm-target-table.is-p3 th, .fm-target-table.is-p3 td { padding: var(--spacing-xs) var(--spacing-sm); }
.fm-target-table.is-p3 .fm-target-key { white-space: nowrap; }
.fm-target-table.is-p3 .fm-target-terms { min-width: 0; max-width: 16em; }
.fm-rkc { display: inline-block; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
.fm-tk { display: flex; align-items: center; gap: var(--spacing-xs); min-width: 0; }
.fm-tk > * { flex: none; }
.fm-tk > .fm-tkw { flex: 0 1 auto; min-width: 2.5em; max-width: 9em; }
/* 🔴 넓은 화면은 표가 칸 폭에 맞는다(고정 열 폭) — 자동 폭이면 순위 글·칩이 표를 밀어 목표 열이 화면 밖으로 잘렸다(실기 14차).
   열 폭은 머리줄(th) 순서 = # · 선택 · 키워드(나머지) · 검색량 · 카테고리 · 추천 자리 · 배치빈도 · 내 순위 · 목표 */
@media (min-width: 1000px) {
  .fm-target-table.is-p3 { min-width: 0; width: 100%; table-layout: fixed; }
  .fm-target-table.is-p3 thead th:nth-child(1) { width: 2rem; }
  .fm-target-table.is-p3 thead th:nth-child(2) { width: 2.75rem; }
  .fm-target-table.is-p3 thead th:nth-child(4) { width: 4.75rem; }
  .fm-target-table.is-p3 thead th:nth-child(5) { width: 6.5rem; }
  .fm-target-table.is-p3 thead th:nth-child(6) { width: 4rem; }
  .fm-target-table.is-p3 thead th:nth-child(7) { width: 12.5rem; }
  .fm-target-table.is-p3 thead th:nth-child(8) { width: 10rem; }
  .fm-target-table.is-p3 thead th:nth-child(9) { width: 6rem; }
  .fm-target-table.is-p3 tbody td:nth-child(5), .fm-target-table.is-p3 tbody td:nth-child(6), .fm-target-table.is-p3 tbody td:nth-child(8) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

/* 계약 4 — 안 결과(자리별 커버리지·AI 설계표) */
.fm-title.fm-title-s { font-size: var(--font-lg); }
.fm-fix4, .fm-diff4 { font-size: var(--font-xs); }
.fm-below4 { background: var(--fm-warn-bg); color: var(--fm-warn); }
.fm-attr4 { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-xs); }
.fm-attr4 .fm-muted { font-size: var(--font-xs); }
.fm-cand .fm-muted { font-size: var(--font-xs); }
/* 계약 4 결과 — 칩 높이·글자·간격 하나 · 표는 격자 하나에 칸을 직접(줄 = contents)으로 열 맞춤 */
.fm-res4 .fm-chips { gap: var(--spacing-xs); }
.fm-res4 .fm-op .fm-chip, .fm-res4 .fm-op .fm-pl, .fm-res4 .fm-g4 .fm-chip, .fm-res4 .fm-g4 .fm-pl {
  height: var(--fm-chip4-h); padding: 0 var(--spacing-sm); border-radius: var(--radius-full); font-size: var(--font-sm);
}
.fm-lead4 { display: inline-flex; align-items: center; gap: var(--spacing-xs); }
.fm-lead4 > .fm-muted { font-size: var(--font-xs); white-space: nowrap; }
.fm-lead4:not(:first-child) { margin-left: var(--spacing-xs); }
.fm-brand4 { color: var(--ink-500); font-weight: 400; }
/* 🔴 align-items 는 기본(stretch) — center 로 두면 칸 높이가 달라 줄 밑선이 어긋난다 */
.fm-g4 { display: grid; grid-template-columns: var(--fm-g4-cols); font-size: var(--font-sm); }
.fm-g4-r { display: contents; }
.fm-g4-r > * { display: flex; align-items: center; min-height: var(--fm-chip4-h); padding: var(--fm-row4-pad); border-bottom: 1px solid var(--ink-100); min-width: 0; }
.fm-g4-h > * { padding-block: var(--spacing-xs); font-size: var(--font-xs); font-weight: 500; color: var(--ink-500); background: var(--ink-50); }
.fm-g4 .fm-n { justify-content: flex-end; font-variant-numeric: tabular-nums; }
.fm-g4-e { justify-content: flex-end; }
.fm-g4-k { font-weight: 500; color: var(--ink-900); overflow-wrap: anywhere; }
.fm-g4-x { grid-column: 1 / -1; flex-wrap: wrap; padding-top: 0; }
.fm-g4-r.has-x > :not(.fm-g4-x) { border-bottom: 0; }
.fm-g4-r.is-hold > * { background: var(--fm-warn-bg); }
.fm-g4-r.is-hold > :first-child { box-shadow: inset 3px 0 0 var(--fm-warn); }
.fm-g4-r.is-out .fm-g4-k { color: var(--ink-500); font-weight: 400; }
.fm-cov4 { --fm-g4-cols: minmax(0, 1fr) auto auto auto; }
.fm-plan4-t { --fm-g4-cols: minmax(0, 1fr) auto auto 2rem; }
.fm-tip4 { position: relative; display: inline-flex; cursor: help; }
.fm-tip4 .fm-whyi { margin-right: 0; }
.fm-tip4::after {
  content: attr(data-tip); position: absolute; right: 0; bottom: calc(100% + var(--spacing-xs)); z-index: 5; display: none; width: max-content; max-width: min(16rem, 70vw);
  padding: var(--spacing-xs) var(--spacing-sm); border-radius: var(--radius-sm); background: var(--fm-tip-bg); color: var(--fm-tip-fg); font-size: var(--font-xs); font-weight: 400; white-space: normal;
}
.fm-tip4:hover::after, .fm-tip4:focus-visible::after, .fm-tip4.is-on::after { display: block; }
.fm-sum4 { display: flex; flex-direction: column; gap: var(--spacing-xs); }
.fm-tb4 { font-size: var(--font-xs); }
/* §13-17 D — 텀 노출 근거 카드 · 키워드별 처리(보류 줄은 경고 바탕) */
.fm-tpc { display: flex; flex-direction: column; gap: var(--spacing-xs); padding: var(--spacing-sm); border: 1px solid var(--ink-200); border-radius: var(--radius-md); background: var(--bg-card); }
.fm-tpc-n { color: var(--ink-900); font-weight: 500; }
.fm-tpc-g, .fm-tpc-f { display: flex; flex-wrap: wrap; gap: var(--spacing-xs); }
.fm-tpc-f span { font-size: var(--font-xs); color: var(--fm-pl-g-fg); }
.fm-tpc-f span + span::before { content: "·"; margin-right: var(--spacing-xs); color: var(--ink-400); }
.fm-plan4 { display: flex; flex-direction: column; gap: var(--spacing-sm); }

/* 카드 안 공용 — 소제목 칸(왼쪽 고정 폭 + 개수 칩) · 작은 단추 · 아이콘 단추 · [근거] 접기. 🔴 칸은 여백으로만(상자·바탕색·선 없음), 볼드 없음 */
.fm-n6 {
  display: inline-flex; align-items: center; justify-content: center; min-width: 22px; height: 20px; padding: 0 7px; margin-left: 6px; box-sizing: border-box;
  border-radius: var(--radius-full); background: var(--ink-100); color: var(--ink-600); font-size: var(--font-xs); font-variant-numeric: tabular-nums;
}
.fm-tog, .fm-mini {
  display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 5px 12px; box-sizing: border-box; border: 1px solid var(--ink-300); border-radius: var(--radius-md);
  background: var(--bg-card); font: inherit; font-size: var(--font-sm); color: var(--ink-900); cursor: pointer; white-space: nowrap;
}
.fm-tog:hover:not(:disabled), .fm-mini:hover:not(:disabled) { border-color: var(--ink-400); background: var(--ink-50); }
.fm-tog:disabled, .fm-mini:disabled { cursor: not-allowed; color: var(--ink-400); }
.fm-tog .fm-chev { margin-left: 0; width: 14px; height: 14px; }
.fm-tog[aria-expanded="true"] .fm-chev { transform: rotate(180deg); }
.fm-ib {
  display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; padding: 0; box-sizing: border-box;
  border: 1px solid var(--ink-200); border-radius: var(--radius-md); background: var(--bg-card); color: var(--ink-600); cursor: pointer;
}
.fm-ib:hover:not(:disabled) { border-color: var(--ink-400); background: var(--ink-50); }
.fm-ib:disabled { cursor: default; color: var(--ink-300); border-color: var(--ink-100); }
.fm-ib[aria-pressed="true"] { background: var(--ink-900); border-color: var(--ink-900); color: var(--text-inverse); }
.fm-q {
  padding: 4px 0; border: 0; background: none; font: inherit; font-size: var(--font-xs); color: var(--ink-600); cursor: pointer; white-space: nowrap;
  text-decoration: underline; text-decoration-color: var(--ink-300); text-underline-offset: 3px;
}
.fm-q:hover { color: var(--ink-900); text-decoration-color: var(--ink-900); }
.fm-none { font-size: var(--font-sm); color: var(--ink-400); }
.fm-why6 { display: flex; flex-direction: column; gap: var(--spacing-sm); padding-top: 12px; border-top: 1px dashed var(--ink-200); }
.fm-why6-h { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm); }
.fm-why6-h .fm-muted { font-size: var(--font-xs); }
.fm-gt tr.is-cur td:first-child { color: var(--brand-600); }

/* ① 상품 분석 — 냥AI 한 줄 · 오른쪽 [다시 만들기][이 상품 다시 분석] · 썸네일 + 소제목 칸 · 순위표 */
.fm-p-top { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--spacing-sm); }
.fm-p-say { flex: 1 1 26rem; min-width: 0; }
.fm-p-say:empty { display: none; }
.fm-p-acts { display: flex; flex-wrap: wrap; gap: 6px; }
.fm-p-main { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 14px; }
.fm-pg { flex: 1 1 22rem; min-width: 0; display: grid; grid-template-columns: 8rem minmax(0, 1fr); gap: 4px 16px; align-items: start; font-size: var(--font-base); line-height: 1.5; }
.fm-pg-l { padding: 4px 0; font-size: var(--font-sm); font-weight: 500; color: var(--ink-900); white-space: nowrap; }
.fm-pg-v { min-width: 0; min-height: 30px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.fm-p-leaf { color: var(--ink-900); }
.fm-pg .fm-ptitle { flex: 0 1 auto; font-size: var(--font-base); font-weight: 500; }
.fm-ilink { display: inline-flex; color: var(--ink-500); }
.fm-ilink:hover { color: var(--ink-900); }
.fm-in6 { width: 10rem; max-width: 100%; height: 32px; box-sizing: border-box; padding: 0 8px; border: 1px solid var(--ink-300); border-radius: var(--radius-md); background: var(--bg-card); font: inherit; font-size: var(--font-base); color: var(--ink-900); }
.fm-in6:disabled { background: var(--ink-50); color: var(--ink-500); }
.fm-in6.is-turn { border-color: var(--brand-500); box-shadow: 0 0 0 3px var(--brand-100); }
/* 이 상품을 부르는 이름(엔진 이름 씨앗) — 같은 물건이 아니면 줄긋기 */
.fm-seed6 { font-size: var(--font-sm); color: var(--ink-600); }
.fm-seed6.is-off { color: var(--ink-400); text-decoration: line-through; }
/* 본질 카드(판 5) — 번호·답·근거 출처 · 흐림 = 사실 근거 아님(상품명 복사·추론) · 🔴 칸은 여백으로만 */
.fm-cds { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; min-width: 0; }
.fm-cd { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px 5px; min-width: 0; }
.fm-cd-n { font-size: var(--font-2xs); color: var(--ink-400); font-variant-numeric: tabular-nums; }
.fm-cd-a { font-size: var(--font-sm); color: var(--ink-900); overflow-wrap: anywhere; }
.fm-cd-src { font-size: var(--font-2xs); color: var(--ink-500); }
.fm-cd.is-dim .fm-cd-a { color: var(--ink-500); }
.fm-cd.is-mod { padding: 0 6px; border-radius: var(--radius-sm); background: var(--fm-moved-bg); }   /* 고쳤고 아직 [적용] 전 — 사람이 옮긴 칩과 같은 표시 */
.fm-cd.is-off .fm-cd-a, .fm-cd.is-off .fm-cd-n { color: var(--ink-400); text-decoration: line-through; }
.fm-cd .fm-pen { width: 22px; height: 22px; }
.fm-cd-in { width: 14rem; height: 30px; }
.fm-cd-sel { width: 7rem; height: 30px; }
/* 본질 카드 덩어리 — 상품 정보 아래, 구분은 여백만 */
.fm-cardk { display: flex; flex-direction: column; gap: var(--spacing-sm); margin-top: var(--spacing-lg); min-width: 0; }
.fm-cardk-acts { display: flex; flex-wrap: wrap; gap: 6px; }
.fm-cardk > .fm-pg { flex: none; }
/* 판 6 — ③ 보호 키 keep/drop */
.fm-p6 { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px 6px; }
.fm-tag6 { padding: 3px 9px; border-radius: var(--radius-sm); background: var(--fm-pl-g-bg); color: var(--fm-pl-g-fg); font-size: var(--font-sm); }
.fm-tag6.is-off { background: var(--fm-bad-bg); color: var(--fm-bad); text-decoration: line-through; }
.fm-grade {
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; box-sizing: border-box; border-radius: var(--radius-full);
  border: 1px solid var(--fm-good); background: var(--fm-good-bg); color: var(--fm-good); font-size: var(--font-xs); cursor: help;
}
.fm-p-rank { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.fm-p-tbl:empty { display: none; }
.fm-rt tr.is-in td:first-child { color: var(--fm-good); }
@media (max-width: 480px) { .fm-pg { grid-template-columns: minmax(0, 1fr); gap: 4px; } .fm-pg-l { padding-bottom: 0; } }

/* ② 키워드 모으기 — 검수 장면 · 냥AI 한 줄(단추는 말풍선 안) · 쓸 것/안 쓸 것 두 줄 · 표 · 직접 추가 · 단어판 */
.fm-scenes { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; }
.fm-scene { padding: 4px 2px; border: 0; background: none; font: inherit; font-size: var(--font-sm); color: var(--ink-400); white-space: nowrap; cursor: default; }
.fm-scene.is-past { color: var(--ink-600); cursor: pointer; }
.fm-scene.is-cur { color: var(--ink-900); text-decoration: underline; text-underline-offset: 5px; text-decoration-thickness: 2px; }
.fm-k-top { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: var(--spacing-sm); }
.fm-k-top > .fm-ai { flex: 1 1 26rem; }
.fm-k-tools { display: flex; gap: 6px; }
.fm-krows { display: grid; grid-template-columns: 8rem minmax(0, 1fr); gap: 18px 16px; align-items: start; }
.fm-k-l { padding: 7px 0; font-size: var(--font-sm); font-weight: 500; color: var(--ink-900); white-space: nowrap; }
.fm-k-chips { min-height: 34px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 6px; }
.fm-kc { display: inline-flex; align-items: center; min-height: 34px; box-sizing: border-box; border-radius: var(--radius-full); background: var(--bg-card); border: 1px dashed var(--ink-300); }
.fm-kc.is-up { border: 1px solid var(--ink-600); }
.fm-kc.is-moved { background: var(--fm-moved-bg); }
.fm-kc-k { display: inline-flex; align-items: baseline; gap: 4px; padding: 6px 4px 6px 12px; border: 0; background: none; font: inherit; font-size: var(--font-base); color: var(--ink-600); cursor: pointer; }
.fm-kc.is-up .fm-kc-k { color: var(--ink-900); }
.fm-kc-k small { font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-kc-k:disabled { cursor: not-allowed; }
.fm-kc-pin + .fm-kc-k, .fm-kc-lock + .fm-kc-k { padding-left: 6px; }
.fm-kc-i { display: flex; align-items: center; min-height: 34px; padding: 0 8px 0 2px; border: 0; background: none; cursor: pointer; }
.fm-kc-i .fm-whyi { margin-right: 0; }
.fm-kc-pin { display: flex; align-items: center; min-height: 34px; padding: 0 0 0 8px; border: 0; background: none; color: var(--ink-400); cursor: pointer; }
.fm-kc-pin .fm-ic, .fm-kc-lock .fm-ic { width: 13px; height: 13px; }
.fm-kc-pin[aria-pressed="true"] { color: var(--brand-600); }
.fm-kc-pin[aria-pressed="true"] .fm-ic { fill: currentColor; }
.fm-kc-lock { display: flex; align-items: center; padding-left: 8px; color: var(--ink-500); }
.fm-kc-lock.is-bad { color: var(--fm-bad); }
/* 고를 곳은 문구 뒤 한 번만 살짝 튐 */
.fm-nudge { animation: fm-nudge .6s ease-out 1.4s 1 both; }
@media (prefers-reduced-motion: reduce) { .fm-nudge { animation: none; } }
.fm-ktbl tbody tr[data-krow] { cursor: pointer; }
.fm-krow-b { padding: 0; border: 0; background: none; font: inherit; color: inherit; text-decoration: inherit; text-align: left; cursor: pointer; }
.fm-krow-b:disabled { cursor: not-allowed; }
/* 안 쓰는 줄 — 키워드 이름만 줄긋기 · 나머지 칸은 회색 글자 · 구분 단추는 보통(줄 전체 줄긋기는 읽히지 않는다) */
.fm-ktbl tr.is-off td { color: var(--ink-600); }
.fm-ktbl tr.is-off .fm-k-name { text-decoration: line-through; }
.fm-ktbl tr.is-off .fm-krow-b { color: var(--ink-900); }
.fm-ktbl tr.is-lock { cursor: default; }
.fm-ktbl td.fm-k-why { white-space: normal; min-width: 12rem; }
.fm-k-rank { display: inline-flex; align-items: center; gap: 4px; }
.fm-cell-i { display: inline-flex; align-items: center; gap: 3px; padding: 2px 4px; border: 0; background: none; font: inherit; font-size: var(--font-xs); color: var(--ink-500); cursor: pointer; text-decoration: none; }
.fm-cell-i:hover { color: var(--ink-900); }
.fm-cell-i .fm-ic { width: 12px; height: 12px; }
.fm-k-more { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; font-size: var(--font-xs); color: var(--ink-500); }
/* 판 5 — 2단계 위 한 줄 · 내 순위 칩(🔴 강조색 하나의 농도: 검증 1~80 > 81~200 > 201~400, 미검증 흐림) */
.fm-k-sum { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; font-size: var(--font-sm); color: var(--ink-600); }
.fm-kc-r { margin-right: 6px; padding: 0 6px; border-radius: var(--radius-full); font-size: var(--font-xs); font-variant-numeric: tabular-nums; }
.fm-kc-r.is-r1 { background: color-mix(in srgb, var(--brand-500) 26%, transparent); color: var(--brand-700); }
.fm-kc-r.is-r2 { background: color-mix(in srgb, var(--brand-500) 13%, transparent); color: var(--brand-700); }
.fm-kc-r.is-r3 { background: color-mix(in srgb, var(--brand-500) 5%, transparent); color: var(--brand-600); }
.fm-kc-r.is-rx { color: var(--ink-400); }
.fm-k-add { display: flex; flex-wrap: wrap; align-items: stretch; gap: 8px; }
.fm-k-box { position: relative; flex: 2 1 18rem; min-width: 0; display: flex; }
.fm-k-in { flex: 1 1 auto; min-width: 0; box-sizing: border-box; padding: 6px 6.5rem 6px 10px; border: 1px solid var(--ink-300); border-radius: var(--radius-md); background: var(--bg-card); font: inherit; font-size: var(--font-sm); resize: vertical; }
.fm-k-put { position: absolute; top: 6px; right: 6px; min-height: 36px; padding: 6px 20px; border: 0; border-radius: var(--radius-sm); background: var(--ink-900); color: var(--text-inverse); font: inherit; font-size: var(--font-base); cursor: pointer; }
.fm-k-put:disabled { background: var(--ink-300); cursor: not-allowed; }
.fm-k-drop {
  flex: 1 1 10rem; min-height: 64px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 8px; box-sizing: border-box;
  border: 1px dashed var(--ink-300); border-radius: var(--radius-md); background: none; font: inherit; font-size: var(--font-sm); color: var(--ink-500); cursor: pointer; text-align: center;
}
.fm-k-drop small { font-size: var(--font-xs); color: var(--ink-400); }
.fm-k-drop.is-over { border-color: var(--brand-500); background: var(--brand-50); }
.fm-words6 { display: flex; flex-direction: column; gap: 8px; padding-top: 12px; border-top: 1px dashed var(--ink-200); }
.fm-words6-h { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.fm-words6-t { flex: 1 1 20rem; min-width: 0; display: flex; align-items: center; gap: 8px; padding: 0; border: 0; background: none; font: inherit; font-size: var(--font-sm); font-weight: 500; color: var(--ink-900); text-align: left; cursor: pointer; }
.fm-words6-t .fm-muted { flex: 1 1 auto; font-size: var(--font-xs); font-weight: 400; }
.fm-words6-t[aria-expanded="true"] .fm-chev { transform: rotate(180deg); }
.fm-pl6-lg { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; font-size: var(--font-xs); color: var(--ink-500); }
.fm-pl6-lg span { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
.fm-pl6-lg i { display: inline-block; width: 12px; height: 12px; box-sizing: border-box; border-radius: 3px; }
.pl-none { background: var(--bg-card); color: var(--ink-500); border: 1px dashed var(--ink-400); }
.fm-w6 { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; border: 1px solid transparent; border-radius: var(--radius-sm); font: inherit; font-size: var(--font-sm); cursor: pointer; }
.fm-w6.pl-none { border: 1px dashed var(--ink-400); }
.fm-w6 small { font-size: var(--font-2xs); }
@media (max-width: 480px) { .fm-krows { grid-template-columns: minmax(0, 1fr); gap: 4px; } .fm-k-l { padding-bottom: 0; } }

/* 근거 카드 — 누른 자리 아래(넘치면 위)에 뜬다 */
.fm-pop6-w[hidden] { display: none; }
.fm-pop6-bg { position: fixed; inset: 0; z-index: 59; border: 0; background: var(--fm-shade); opacity: .25; cursor: default; }
.fm-pop6 {
  position: fixed; z-index: 60; left: 50%; top: 30%; width: min(19rem, calc(100vw - 16px)); max-height: calc(100vh - 16px); overflow-y: auto; box-sizing: border-box;
  display: flex; flex-direction: column; gap: 12px; padding: 14px; background: var(--bg-card); border: 1px solid var(--ink-300); border-radius: var(--radius-lg); box-shadow: var(--shadow-xl);
}
.fm-pop6-h { display: flex; align-items: center; justify-content: space-between; font-size: var(--font-xs); }
.fm-pop6-t { font-size: var(--font-lg); font-weight: 500; }
.fm-pop6-why { font-size: var(--font-sm); line-height: 1.55; color: var(--ink-700); }
.fm-pop6-dl { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 7px 12px; margin: 0; font-size: var(--font-sm); font-variant-numeric: tabular-nums; }
.fm-pop6-dl dt { color: var(--ink-500); }
.fm-pop6-dl dd { margin: 0; text-align: right; }
.fm-pop6-bars { display: flex; flex-direction: column; gap: 7px; font-size: var(--font-xs); }
.fm-bar6r { display: grid; grid-template-columns: 4rem minmax(0, 1fr) 2.75rem; align-items: center; gap: 8px; }
.fm-bar6r i { display: block; height: 5px; border-radius: var(--radius-full); background: var(--ink-200); overflow: hidden; }
.fm-bar6r b { display: block; height: 100%; background: var(--ink-600); }
.fm-bar6r span:last-child { text-align: right; color: var(--ink-500); }
.fm-pop6-mv { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 4px; }
.fm-mv { padding: 7px 4px; border: 1px solid var(--ink-200); border-radius: var(--radius-sm); background: var(--bg-card); font: inherit; font-size: var(--font-xs); color: var(--ink-700); cursor: pointer; }
.fm-mv.is-on { border-color: var(--ink-900); background: var(--ink-900); color: var(--text-inverse); }
.fm-mv.is-pin { border-color: var(--brand-200); background: var(--brand-50); color: var(--brand-700); }
.fm-mv.is-pin.is-on { border-color: var(--brand-700); background: var(--brand-700); color: var(--text-inverse); }
.fm-mv:disabled { cursor: not-allowed; color: var(--ink-400); }
.fm-pop6-why.is-off { color: var(--fm-bad); }
/* 🔴 볼드 금지 — 냥AI 말풍선 단추·키워드 칩은 보통 굵기(공용 .fm-btn 600 을 여기서만 낮춘다) */
.fm-ai-acts .fm-btn, .fm-kc-k, .fm-tog, .fm-mini { font-weight: 400; }

/* ③ 목표 층 — 두 갈래 · 도달선 · 단계별 수 · 지키기/이번 범위/다음에(엔진 floor 그대로) */
.fm-modes { display: grid; grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr)); gap: 8px; }
.fm-mode { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; padding: 12px 14px; border: 1px solid var(--ink-200); border-radius: var(--radius-md); background: var(--bg-card); font: inherit; color: var(--ink-900); text-align: left; cursor: pointer; }
.fm-mode[aria-pressed="true"] { border: 1.5px solid var(--ink-900); }
.fm-mode:disabled { color: var(--ink-400); cursor: not-allowed; }
.fm-mode-t { display: flex; align-items: center; gap: 6px; font-size: var(--font-md); font-weight: 500; }
.fm-mode .fm-muted { font-size: var(--font-sm); }
.fm-rec { padding: 2px 8px; border-radius: var(--radius-full); background: var(--fm-good-bg); color: var(--fm-good); font-size: var(--font-xs); font-weight: 400; }
.fm-fl-meta { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: var(--font-xs); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-fc { display: inline-flex; align-items: baseline; gap: 4px; padding: 6px 12px; border-radius: var(--radius-full); background: var(--ink-100); font-size: var(--font-base); color: var(--ink-900); white-space: nowrap; }
.fm-fc small { font-size: var(--font-xs); color: var(--ink-400); font-variant-numeric: tabular-nums; }
.fm-reach { display: inline-block; width: 1px; height: 28px; margin: 0 6px; background: var(--ink-500); }

/* ⑤ 배치 확인 — 상품명 · 태그 · 속성 · 점수·목표 */
.fm-result-choice { display: flex; flex-direction: column; gap: var(--spacing-sm); margin-bottom: calc(var(--fm-result-gap) - var(--spacing-sm)); }
.fm-strat { display: flex; flex-wrap: wrap; align-items: stretch; gap: var(--spacing-sm); }
.fm-strat-o { display: inline-flex; flex-direction: column; align-items: flex-start; justify-content: center; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-lg); border: 0; border-radius: var(--radius-full); background: var(--ink-100); font: inherit; font-size: var(--font-base); font-weight: 400; color: var(--ink-700); cursor: pointer; text-align: left; }
.fm-strat-o[aria-checked="false"]:hover:not(:disabled) { background: var(--ink-200); }
.fm-strat-o[aria-checked="true"] { background: var(--ink-900); color: var(--text-inverse); }
.fm-strat-name { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-xs); font-weight: 500; }
.fm-strat-meta { font-size: var(--font-xs); color: var(--ink-600); font-variant-numeric: tabular-nums; }
.fm-strat-o[aria-checked="true"] .fm-strat-meta { color: color-mix(in srgb, var(--text-inverse) 80%, transparent); }
.fm-strat-o:disabled { background: var(--ink-50); color: var(--ink-400); cursor: not-allowed; }
.fm-strat-o:disabled .fm-strat-meta { color: var(--ink-400); }
.fm-result-groups { display: flex; flex-direction: column; gap: var(--fm-result-gap); }
.fm-result-group { display: flex; flex-direction: column; gap: var(--spacing-md); min-width: 0; }
.fm-result-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--spacing-xs) var(--spacing-sm); }
.fm-result-title { margin: 0; font-size: var(--font-md); font-weight: 500; color: var(--ink-900); }
.fm-result-meta { font-size: var(--font-sm); color: var(--ink-500); font-variant-numeric: tabular-nums; }
.fm-result-head > button { margin-left: auto; }
.fm-pg.fm-result-rows { flex: none; grid-template-columns: var(--fm-result-label-w) minmax(0, 1fr); gap: var(--spacing-sm) var(--spacing-md); }
.fm-result-rows .fm-pg-l { padding: var(--spacing-xs) 0; color: var(--ink-500); font-weight: 400; }
.fm-result-rows .fm-pg-v { min-height: 0; gap: var(--spacing-xs) var(--spacing-sm); }
.fm-new6 { text-decoration: underline; text-decoration-color: var(--fm-new-line); text-decoration-thickness: 2px; text-underline-offset: 0.25em; }
.fm-result-attr { display: inline-flex; flex-wrap: wrap; align-items: baseline; gap: var(--spacing-xs); font-size: var(--font-sm); color: var(--ink-700); }
.fm-attr-name { color: var(--ink-500); }
.fm-attr-now { color: var(--ink-500); }
.fm-result-attr.is-change .fm-attr-next, .fm-result-attr.is-new .fm-attr-next { color: var(--fm-good); }
.fm-result-terms { flex: 1 1 100%; min-width: 0; display: flex; flex-direction: column; gap: var(--spacing-sm); }
/* 🔴 .fm-pg 의 flex-basis 22rem 은 상품 카드(가로 줄)용 — 세로 칸(fm-c6-p) 안에선 높이로 먹어 줄 사이가 벌어진다 */
.fm-c6-p > .fm-pg { flex: none; }
.fm-blank { padding: 4px 11px; border: 1px dashed var(--ink-300); border-radius: var(--radius-sm); font-size: var(--font-sm); color: var(--ink-500); }
.fm-miss span:first-child { padding: 4px 10px; border: 1px dashed var(--ink-400); border-radius: var(--radius-sm); }
/* 스마트태그 — 엔진 칩 pl-g · 직접 칩 테두리 · 후보 표는 열 너비 고정(숫자 줄 맞춤) */
.fm-tg4 { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-xs); padding: var(--spacing-xs) var(--spacing-sm); border: 1px solid transparent; border-radius: var(--radius-full); font-size: var(--font-sm); font-weight: 400; line-height: var(--line-base); }
.fm-tg4 small { font-size: var(--font-xs); }
.fm-tg4.is-mine { background: var(--fm-moved-bg); border-color: var(--fm-moved-line); color: var(--fm-pl-g-fg); }
.fm-tg4.is-new { background: var(--fm-good-bg); color: var(--fm-good); }
.fm-tg4.is-same { background: var(--ink-100); color: var(--ink-700); }
.fm-tg4.is-removed { border-color: var(--ink-300); border-style: dashed; background: transparent; color: var(--ink-500); }
.fm-tag-reason { color: inherit; }
.fm-tg4x { padding: 0 0 0 2px; border: 0; background: none; font: inherit; font-size: var(--font-xs); line-height: 1; color: inherit; opacity: .6; cursor: pointer; }
.fm-tg4x:hover { opacity: 1; }
.fm-tg4-b { margin-left: auto; }
.fm-tag4p { display: flex; flex-direction: column; align-items: flex-start; gap: var(--spacing-sm); margin-top: var(--spacing-sm); padding-top: var(--spacing-sm); border-top: 1px solid var(--ink-200); }
.fm-tag4-w { width: 100%; overflow-x: auto; }
.fm-tag4t { max-width: 30rem; table-layout: fixed; }
.fm-tag4t .fm-tag4-v { width: 6rem; }
.fm-tag4t .fm-tag4-a { width: 5rem; }
.fm-tag4t td { color: var(--ink-600); }
.fm-tag4t .fm-tag4-k { overflow: hidden; text-overflow: ellipsis; color: var(--ink-900); }
.fm-tag4-s { margin-left: var(--spacing-xs); font-size: var(--font-xs); color: var(--ink-400); }
.fm-tag4t tr.is-on td { background: var(--fm-moved-bg); }
.fm-tag4t .fm-tag4-gh td { padding-top: var(--spacing-md); font-size: var(--font-xs); color: var(--ink-500); border-bottom-color: var(--ink-300); }
.fm-tag4t .fm-tag4-gh:first-child td { padding-top: var(--spacing-xs); }

/* ① 근거 원자료 — 근거 상품 표본 */
.fm-smp1 { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; font-size: var(--font-sm); }
.fm-smp1 li { display: grid; grid-template-columns: 3rem minmax(0, 1fr) auto; gap: 4px 10px; align-items: baseline; }
.fm-smp1 li > span:nth-child(2) { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.fm-smp1-r { color: var(--ink-500); font-variant-numeric: tabular-nums; }
@media (max-width: 480px) { .fm-smp1 li { grid-template-columns: 3rem minmax(0, 1fr); } .fm-smp1 li > .fm-muted { grid-column: 2; } }

/* ⑥ 적용·추적 — 적용할 내용 · 자동 순환 줄 */
.fm-loop6 { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; font-size: var(--font-sm); color: var(--ink-700); }

/* 🔴 볼드 금지 — <b> 기본 700 을 낮춘다(상품 이름·속성 이름) */
.fm-attr b, .fm-prod-n b, .fm-gname, .fm-pg .fm-ptitle { font-weight: 500; }
/* 판 6 목표 텀 자리 표 */
.fm-gt6 th { font-weight: 400; color: var(--ink-500); font-size: var(--font-xs); }
.fm-gt6 .fm-c { text-align: center; }
.fm-gt6 tr.is-miss td { color: var(--ink-500); }

.fm-card-chat, .fm-card-chat button { font-weight: 400; }
.fm-card-chat .fm-cd.is-off .fm-cd-a, .fm-card-chat .fm-cd.is-off .fm-cd-n { color: var(--ink-500); }
.fm-cd-mark { font-size: var(--font-2xs); color: var(--ink-500); }
.fm-cd-mark.is-user { color: var(--fm-good); }
.fm-cd-mark.is-ai { color: var(--fm-pl-g-fg); }
.fm-chat-compose { display: flex; flex-direction: column; gap: var(--spacing-sm); margin-top: var(--spacing-md); }
.fm-chat-head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-sm); font-size: var(--font-sm); }
.fm-chat-compose textarea { width: 100%; min-height: 64px; height: auto; resize: vertical; box-sizing: border-box; padding: var(--spacing-sm); }
.fm-chat-log { display: flex; flex-direction: column; gap: var(--spacing-xs); font-size: var(--font-sm); overflow-wrap: anywhere; }
.fm-chat-compose .fm-cardk-acts { justify-content: flex-end; }
