/* 디자인 기준: awesome-design (voltagent/awesome-design-md)
   고객 앱 = Starbucks DESIGN.md — 녹색 4단계(Starbucks/Accent/House/Uplift), 따뜻한 크림 캔버스, 50px 알약 버튼, 12px 카드 + 아주 옅은 그림자, 골드는 등급 전용
   집도사 Pro = Coinbase DESIGN.md — 단일 파랑 #0052ff, 흰 캔버스 + 회색 띠, 100px 알약 버튼, 24px 카드(그림자 대신 카드-위-카드), 상승·하락 색
   업무지원 = Coinbase 구조 + Starbucks 녹색(시안의 초록 업무지원 화면)
   레이아웃: 모바일 앱 1열(최대 480px) + 하단 탭. 관리자만 데스크톱(.desk) */
:root {
  --page: #e8e9ec;
  --surface: #ffffff;
  --ink: #0a0b0d;
  --muted: #5b616e;
  --line: #dee1e6;
  --soft: #eef0f3;
  --ok: #05b169;
  --ok-soft: #e3f7ee;
  --warn: #a76f00;
  --warn-soft: #fff4d6;
  --danger: #cf202f;
  --danger-soft: #fde9eb;
  --accent: #0052ff;
  --accent-active: #003ecc;
  --accent-ink: #ffffff;
  --accent-soft: #e5edff;
  --bg: #f7f7f7;
  --gold: #f4b000;
  --r: 24px;
  --r-sm: 12px;
  --btn-r: 100px;
  --btn-h: 44px;
  --shadow-card: none;
  --tracking: 0;
  --map-land: #f2f1ec;
  --map-park: #d6ead2;
  --map-water: #cfe2f3;
  --map-road: #ffffff;
  --map-road-major: #f2cf7c;
  --f-body: 'Inter', 'Noto Sans KR', -apple-system, 'Apple SD Gothic Neo', 'Malgun Gothic', sans-serif;
  --f-script: 'Nanum Pen Script', cursive;
  --f-mono: 'IBM Plex Mono', ui-monospace, Menlo, monospace;
  color-scheme: light;
}
/* Starbucks */
.theme-customer, body[data-kind='member'] .sheet, body[data-kind='public'] .sheet {
  --sb-green: #006241; --sb-accent: #00754A; --sb-house: #1E3932; --sb-uplift: #2b5148; --sb-light: #d4e9e2;
  --gold: #cba258; --gold-light: #dfc49d; --gold-lightest: #faf6ee;
  --accent: #00754A; --accent-active: #006241; --accent-soft: #d4e9e2; --accent-ink: #fff;
  --bg: #f2f4f3; --ceramic: #edebe9; --surface: #ffffff;
  --ink: rgba(0, 0, 0, .87); --muted: rgba(0, 0, 0, .58); --line: #e3dfd6; --soft: #edebe9;
  --ok: #00754A; --ok-soft: #d4e9e2; --danger: #c82014; --danger-soft: #fbe9e7; --warn: #8a6a00; --warn-soft: #fdf3d6;
  --yellow: #cba258; --yellow-soft: #faf6ee;
  --r: 12px; --r-sm: 12px; --btn-r: 50px; --btn-h: 48px;
  --shadow-card: 0 0 .5px rgba(0, 0, 0, .14), 0 1px 1px rgba(0, 0, 0, .24);
  --tracking: -0.01em;
  --f-body: 'Nunito Sans', 'Noto Sans KR', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
/* Coinbase */
.theme-broker, body[data-kind='broker'] .sheet, .desk, body[data-kind='admin'] .sheet {
  --accent: #0052ff; --accent-active: #003ecc; --accent-soft: #e5edff; --bg: #f7f7f7; --surface: #ffffff;
  --ink: #0a0b0d; --muted: #5b616e; --line: #dee1e6; --soft: #eef0f3; --dark: #0a0b0d; --dark-2: #16181c;
}
/* 업무지원: Coinbase 구조 + Starbucks 녹색 */
.theme-work { --accent: #1E3932; --accent-active: #006241; --accent-soft: #e4ece6; --bg: #f2f0eb; --line: #e3dfd6; --soft: #edebe9; --ok: #00754A; --ok-soft: #d4e9e2; }
* { box-sizing: border-box; }
[hidden] { display: none !important; }
/* 개발용 바(?dev)가 보일 때만 그 높이만큼 상단 고정 바를 내림 */
:root { --devbar-h: 0px; }
body:has(> .topbar:not([hidden])) { --devbar-h: 44px; }
html, body { margin: 0; }
body { background: var(--page); color: var(--ink); font-family: var(--f-body); font-size: 15px; line-height: 1.55; word-break: keep-all; overflow-wrap: anywhere; }
h1, h2, h3 { margin: 0; line-height: 1.3; text-wrap: balance; }
h3 { font-size: 16px; }
h3 small, h2 small { font-weight: 500; }
p { margin: 0; }
a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; }
.ic { width: 20px; height: 20px; flex: none; vertical-align: middle; }
.mono { font-family: var(--f-mono); font-size: .9em; }
.muted { color: var(--muted); }
.small { font-size: 13px; }
.center { text-align: center; justify-items: center; }
.accent { color: var(--accent); font-weight: 600; }
.ink { color: var(--ink); }
.neg { color: var(--danger); }
.pos { color: var(--ok); }
.warn-text { color: var(--warn); }
.ok-text { color: var(--ok); font-weight: 600; }
.dev { font-size: 12px; color: var(--muted); font-family: var(--f-mono); }
.pad { padding: 12px 16px; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
code { font-family: var(--f-mono); font-size: .88em; background: var(--soft); padding: 1px 5px; border-radius: 4px; }

/* ── 개발용 상단 바 */
.topbar { position: sticky; top: 0; z-index: 20; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; padding: 8px 16px; background: #1d232c; color: #e9ecf1; font-size: 13px; }
.brand { font-weight: 700; }
.brand small { font-weight: 500; opacity: .7; margin-left: 4px; }
.who { display: flex; align-items: center; gap: 6px; min-width: 0; }
.who small { opacity: .7; }
.who select { background: #2b333f; color: #fff; border: 1px solid #3c4553; border-radius: 6px; padding: 4px 8px; max-width: 280px; }
.clock { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-left: auto; }
.clock button { background: #2b333f; border: 1px solid #3c4553; color: #fff; border-radius: 6px; padding: 3px 9px; cursor: pointer; }
.clock button:hover { background: #3a4351; }
.clock .ghost { opacity: .75; }

/* ── 앱 틀 */
#app { padding: 0; }
.app { max-width: 480px; min-height: calc(100vh - var(--devbar-h)); margin: 0 auto; background: var(--bg); display: flex; flex-direction: column; box-shadow: 0 0 0 1px rgb(0 0 0 / .04), 0 10px 40px rgb(0 0 0 / .08); }
.app-body { flex: 1; padding: 16px 16px 28px; display: grid; gap: 16px; align-content: start; }
.appbar { position: sticky; top: var(--devbar-h); z-index: 5; display: grid; grid-template-columns: 44px 1fr 44px; align-items: center; padding: 10px 8px; background: var(--bg); }
.appbar h1 { font-size: 18px; text-align: center; }
.ab-btn { position: relative; display: inline-grid; place-items: center; width: 40px; height: 40px; border: 0; background: none; cursor: pointer; border-radius: 10px; }
.ab-btn .ic { width: 24px; height: 24px; }
.ab-right { display: flex; justify-content: flex-end; }
.tb-dot { position: absolute; top: 4px; right: 4px; font-style: normal; font-size: 9px; color: var(--danger); }
.tabbar { position: sticky; bottom: 0; z-index: 5; display: flex; justify-content: space-around; background: var(--surface); border-top: 1px solid var(--line); padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px)); }
.tabbar a { position: relative; flex: 1; display: grid; justify-items: center; gap: 2px; padding: 4px 0; font-size: 11px; color: var(--muted); }
.tabbar a .ic { width: 24px; height: 24px; }
.tabbar a.on { color: var(--accent); font-weight: 700; }
.tabbar .tb-dot { top: 0; right: calc(50% - 22px); background: var(--danger); color: #fff; border-radius: 8px; padding: 0 5px; font-size: 10px; }
.brandbar { position: sticky; top: var(--devbar-h); z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 14px 16px; background: var(--bg); }
.brandbar small { display: block; color: var(--muted); font-size: 12px; }
.logo { display: inline-flex; align-items: center; gap: 6px; font-size: 22px; font-weight: 800; letter-spacing: -.03em; color: var(--accent); }
.logo b { color: var(--ink); }
.logo em, .logo.pro em { font-style: normal; color: var(--accent); }
.brandbar.pro .logo { font-size: 28px; }
.brandbar.work h1 { font-size: 24px; }
.pro-mark { text-align: right; color: var(--accent); }
.pro-mark b { font-size: 18px; }
.pro-mark small { font-size: 10px; }

/* ── 공통 부품 */
.card { display: grid; gap: 10px; background: var(--surface); border-radius: var(--r); padding: 16px; box-shadow: 0 1px 2px rgb(0 0 0 / .04); }
.stack { display: grid; gap: 10px; }
.stack-tight { display: grid; gap: 3px; min-width: 0; }
.row { display: flex; align-items: center; gap: 8px; }
.row.between { justify-content: space-between; }
.row.wrap { flex-wrap: wrap; }
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.sec-head { display: flex; align-items: center; gap: 8px; justify-content: space-between; }
.sec-head h3 { display: flex; align-items: center; gap: 6px; flex: 1; }
.more-link { display: inline-flex; align-items: center; gap: 2px; color: var(--muted); font-size: 13px; }
.more-link .ic { width: 16px; height: 16px; }
.empty { padding: 28px 16px; text-align: center; color: var(--muted); background: var(--surface); border-radius: var(--r); display: grid; justify-items: center; gap: 6px; }
.empty.small { padding: 14px; font-size: 14px; }
.notice { background: var(--warn-soft); color: var(--warn); border-radius: 12px; padding: 12px 14px; font-size: 14px; display: grid; gap: 10px; }
.info { display: flex; gap: 8px; align-items: flex-start; background: var(--soft); border-radius: 12px; padding: 12px 14px; font-size: 13px; color: var(--muted); }
.info.warn { background: var(--warn-soft); color: var(--warn); }
.locked { display: flex; gap: 8px; align-items: center; background: var(--soft); border-radius: 12px; padding: 12px 14px; font-size: 14px; color: var(--muted); }
.consent { background: var(--soft); border-radius: 12px; padding: 12px 14px; color: var(--muted); }
.lead-text { font-size: 16px; font-weight: 600; }

.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 48px; padding: 10px 16px; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); cursor: pointer; font-weight: 700; font-size: 15px; white-space: nowrap; }
.btn:hover { filter: brightness(.97); }
.btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink, #fff); }
.btn.outline { border-color: var(--accent); color: var(--accent); background: var(--surface); }
.btn.soft { background: var(--accent-soft); border-color: transparent; color: var(--accent); }
.btn.danger { background: var(--danger); border-color: var(--danger); color: #fff; }
/* 내 정보 맨 아래 작은 회색 글씨 (회원탈퇴). 눈에 덜 띄게만 하고, 찾을 수는 있게 둠 */
.quiet-end { margin: 28px 0 8px; text-align: center; }
.quiet-link { padding: 8px 12px; border: 0; background: none; font: inherit; font-size: 12.5px; color: var(--muted); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.btn.danger-ghost { color: var(--danger); background: transparent; border-color: transparent; min-height: 40px; }
.btn.danger-outline { color: var(--danger); border-color: var(--danger); background: var(--danger-soft); }
.btn.block { width: 100%; }
.btn.small-btn { min-height: 34px; padding: 4px 12px; font-size: 13px; border-radius: 10px; justify-self: start; }
.btn:disabled { opacity: .45; cursor: not-allowed; filter: none; }
.btn .ic { width: 18px; height: 18px; }
.btn-row { display: grid; grid-template-columns: 1fr 2fr; gap: 10px; }
.btn-row.even { grid-template-columns: 1fr 1fr; }
.btn-row.three { grid-template-columns: 1fr 1fr 1fr; }
.btn-row.wrap { display: flex; flex-wrap: wrap; }
.btn-row .btn { width: 100%; }
button.link { background: none; border: 0; padding: 4px; cursor: pointer; }

.badge { display: inline-flex; align-items: center; font-size: 12px; font-weight: 700; padding: 2px 9px; border-radius: 999px; background: var(--accent-soft); color: var(--accent); white-space: nowrap; }
.badge.ok { background: var(--ok-soft); color: var(--ok); }
.badge.warn { background: var(--warn-soft); color: var(--warn); }
.badge.closed { background: var(--danger-soft); color: var(--danger); }
.badge.muted { background: var(--soft); color: var(--muted); }
.badge.accent { background: var(--accent-soft); color: var(--accent); }
.badge.solid { background: var(--accent); color: #fff; }

/* 폼 */
.form { display: grid; gap: 14px; }
.form h3 { margin-top: 2px; }
.form label { display: grid; gap: 6px; font-weight: 600; font-size: 14px; }
.form small { font-weight: 400; color: var(--muted); }
input, select, textarea { font: inherit; color: inherit; width: 100%; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; min-height: 48px; }
textarea { min-height: 90px; }
input:focus, select:focus, textarea:focus { border-color: var(--accent); outline: none; box-shadow: 0 0 0 3px var(--accent-soft); }
input[type=checkbox], input[type=radio] { width: auto; min-height: 0; }
.check { display: flex !important; align-items: center; gap: 8px; font-weight: 500 !important; font-size: 14px; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chips.scroll { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; }
.chip { position: relative; display: inline-flex; align-items: center; gap: 4px; cursor: pointer; font-weight: 600; font-size: 16px; }
.chip input { position: absolute; opacity: 0; pointer-events: none; }
.chip > span, button.chip { display: inline-flex; align-items: center; padding: 12px 20px; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); }
button.chip { cursor: pointer; }
.chip input:checked + span, .chip.on > span, button.chip.on { background: var(--accent); border-color: var(--accent); color: #fff; }
.chip input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
.chip.on { gap: 0; }
.chip .x { border: 0; background: var(--accent); color: #fff; border-radius: 0 10px 10px 0; padding: 9px 10px 9px 0; margin-left: -6px; cursor: pointer; }
.chip.mini > span { padding: 4px 10px; font-size: 12px; }
.seg { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; background: var(--soft); border-radius: 12px; padding: 4px; gap: 4px; }
.seg label, .seg button { display: grid; }
.seg input { position: absolute; opacity: 0; }
.seg span, .seg button { text-align: center; padding: 8px; border-radius: 9px; font-weight: 700; font-size: 14px; color: var(--muted); border: 0; background: none; cursor: pointer; }
.seg input:checked + span, .seg button.on { background: var(--surface); color: var(--accent); box-shadow: 0 1px 3px rgb(0 0 0 / .08); }
.seg.small { grid-auto-columns: 44px; }
.seg.small button { padding: 6px; }
.range { display: grid; grid-template-columns: 1fr auto 1fr auto; gap: 6px; align-items: center; font-size: 13px; color: var(--muted); }
.input-ic { position: relative; display: flex; align-items: center; }
.input-ic input { padding-right: 48px; }
.input-ic.big > .ic { position: absolute; left: 14px; width: 22px; height: 22px; color: var(--muted); }
.input-ic.big input { padding-left: 46px; min-height: 54px; font-size: 16px; }
.input-ic.suffix b { position: absolute; right: 16px; }
.ic-btn { position: absolute; right: 4px; width: 40px; height: 40px; border: 0; background: none; color: var(--muted); cursor: pointer; display: grid; place-items: center; }
.switch, .switch-row { display: flex !important; align-items: center; justify-content: space-between; gap: 10px; }
input[role=switch] { appearance: none; width: 48px; height: 28px; min-height: 0; padding: 0; border-radius: 14px; background: #cdd2da; border: 0; position: relative; cursor: pointer; transition: background .15s; flex: none; }
input[role=switch]::after { content: ''; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgb(0 0 0 / .2); transition: transform .15s; }
input[role=switch]:checked { background: var(--accent); }
input[role=switch]:checked::after { transform: translateX(20px); }
.more-fields { background: var(--surface); border-radius: 12px; padding: 12px 14px; border: 1px dashed var(--line); }
.more-fields summary { cursor: pointer; font-weight: 600; font-size: 14px; }
.more-fields[open] summary { margin-bottom: 12px; }
.more-fields > * + * { margin-top: 12px; }
.dropzone { display: grid !important; place-items: center; padding: 22px; border: 2px dashed var(--line); border-radius: 12px; cursor: pointer; color: var(--muted); }
.dropzone input { max-width: 240px; min-height: 0; border: 0; }

/* 표 형식 정보 */
.sheet-table { display: grid; grid-template-columns: max-content minmax(0, 1fr); margin: 0; font-size: 14px; }
.sheet-table dt, .sheet-table dd { padding: 9px 0; border-bottom: 1px solid var(--line); margin: 0; }
.sheet-table dt { color: var(--muted); padding-right: 16px; }
.sheet-table dd { text-align: right; font-weight: 600; }
.sheet-table dt:last-of-type, .sheet-table dd:last-of-type { border-bottom: 0; }
.kv { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px 16px; margin: 0; font-size: 14px; }
.kv dt { color: var(--muted); }
.kv dd { margin: 0; }
.list-card { background: var(--surface); border-radius: var(--r); overflow: hidden; }
.list-card.flat { background: transparent; }
.row-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 14px 16px; border: 0; border-bottom: 1px solid var(--line); background: none; text-align: left; font-size: 15px; cursor: default; }
a.row-item, button.row-item { cursor: pointer; }
.list-card > .row-item:last-child { border-bottom: 0; }
.row-item .r-label { flex: 1; display: grid; gap: 2px; min-width: 0; }
.row-item .r-label small { color: var(--muted); font-size: 12px; font-weight: 400; }
.row-item .r-value { color: var(--ink); text-align: right; display: grid; justify-items: end; gap: 2px; }
.row-item > .ic:last-child { color: var(--muted); width: 18px; }
.row-item.person .r-label { grid-auto-flow: row; }
.row-card { display: flex; align-items: center; gap: 10px; background: var(--surface); border-radius: var(--r); padding: 16px; font-weight: 600; }
.row-card > span:first-child { flex: 1; display: flex; gap: 8px; align-items: center; }

.progress-wrap { display: flex; align-items: center; gap: 8px; }
.progress { flex: 1; height: 6px; background: var(--soft); border-radius: 3px; overflow: hidden; }
.progress i { display: block; height: 100%; background: var(--accent); border-radius: 3px; }
.step-no { font-size: 12px; color: var(--muted); font-family: var(--f-mono); }
.wiz-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; }
.wiz-head h2 { font-size: 24px; color: var(--accent); }
.wiz-head .mascot { flex: none; }
.mascot { display: inline-block; height: auto; max-width: 100%; filter: drop-shadow(0 6px 8px rgba(0, 0, 0, .14)); }

.done { display: grid; justify-items: center; gap: 12px; text-align: center; padding: 36px 8px; }
.done h2 { font-size: 22px; }
.done-btns { width: 100%; display: grid; gap: 10px; }
.done { gap: 10px; padding: 20px 8px 28px; }
.done h2 { color: #1E3932 !important; font-weight: 800 !important; letter-spacing: -.03em; margin-top: 6px; }
.done > .muted { max-width: 260px; font-size: 14px; line-height: 1.55; }
/* 캐릭터 + 접수완료 도장(두루마리 위에 비스듬히) */
.done-art { position: relative; }
.done-stamp { position: absolute; right: -58px; top: 46%; display: grid; place-items: center; width: 76px; height: 76px; border: 3.5px solid #c8261b; border-radius: 12px;
  box-shadow: inset 0 0 0 2px #fffdf6, inset 0 0 0 4px #c8261b, 0 2px 6px rgba(0, 0, 0, .12); background: rgb(255 253 246 / .92); color: #c8261b;
  font-family: 'Noto Sans KR', sans-serif; font-weight: 800; font-size: 19px; line-height: 1.1; letter-spacing: .02em;
  transform: rotate(-12deg); pointer-events: none; } /* 두루마리 글씨와 겹치지 않게 오른쪽으로, 글자는 또렷하게(번짐 효과 없음) */
@media (prefers-reduced-motion: no-preference) { .done-stamp { animation: stamp-hit-sq .42s cubic-bezier(.2, 1.4, .4, 1) .25s both; } }
.receipt-pill { margin: 4px 0 8px; padding: 7px 14px; border-radius: 99px; background: #f1e6d6; color: #5b4a36; font-size: 13px; }
.receipt-pill b { margin-left: 4px; font-weight: 600; letter-spacing: .04em; }
.done-btns .btn { min-height: 50px; border-radius: 14px; font-weight: 700; color: #1E3932; }
.theme-customer .done-btns .btn:not(.primary):not(.soft) { border-color: #d3d9d6 !important; background: #fff !important; } /* 테마 버튼 규칙(:not 7개)보다 우선 */
.done-btns .btn.soft { background: #dcebe4; border-color: #c3dbd0; color: #1E3932; }
.done-btns .btn.primary { background: #1E3932; border-color: #1E3932; color: #fff; box-shadow: 0 8px 18px rgb(30 57 50 / .25); }

/* 고객 홈 */
.hero-card { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 6px 4px; }
.hero-card h2 { font-size: 24px; letter-spacing: -.02em; }
.hero-card p { color: var(--muted); font-size: 14px; margin-top: 8px; }
.hero-card .mascot { flex: none; margin: -6px -2px -8px 0; }
.duo-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.duo { display: grid; gap: 4px; padding: 18px 16px; border-radius: var(--r); }
.duo b { font-size: 19px; }
.duo small { font-size: 12px; opacity: .85; }
.duo-ic { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; margin-bottom: 6px; }
.duo.seek { background: #e3eedf; color: #2f5639; }
.duo.seek .duo-ic { background: #3f6b4a; color: #fff; }
.duo.sell { background: var(--yellow-soft, #fdf3dc); color: #7a5410; }
.duo.sell .duo-ic { background: var(--yellow, #f4b740); color: #fff; }
.req-card { display: grid; gap: 6px; background: var(--surface); border-radius: var(--r); padding: 14px 16px; }
.req-tag { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; font-weight: 700; }
.req-tag .ic { width: 15px; height: 15px; }
.req-tag.seek { color: #3f6b4a; }
.req-tag.sell { color: #b07a12; }
.mini-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.mini-chips span { font-size: 12px; background: var(--soft); border-radius: 6px; padding: 2px 8px; }
.req-foot { display: flex; justify-content: space-between; align-items: center; font-size: 12px; }
.req-foot .accent { display: inline-flex; align-items: center; }
.req-foot .ic { width: 15px; height: 15px; }
.promo { display: flex; align-items: center; gap: 12px; padding: 16px; border-radius: var(--r); background: linear-gradient(120deg, #e9f2e1, #f8f1d9); }
.promo span:nth-child(2), .promo > span:first-child { flex: 1; display: grid; gap: 2px; }
.promo small { color: var(--muted); font-size: 12px; }
.promo-ic { width: 44px; height: 44px; border-radius: 12px; background: var(--accent); color: #fff; display: grid; place-items: center; flex: none !important; }
.promo.blue { background: linear-gradient(120deg, #e8f0fe, #f4f8ff); }
.promo.blue small:first-child { color: var(--accent); }
.views-count { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 2px 10px; background: var(--accent-soft); color: var(--accent); border-radius: var(--r); padding: 14px 16px; }
.views-count b { font-size: 22px; }
.views-count small { grid-column: 2; color: var(--muted); font-size: 12px; }
.ai-hero { display: flex; align-items: center; gap: 14px; background: var(--surface); border-radius: var(--r); padding: 14px; }
.ai-hero b { font-size: 18px; }
.ai-hero small { display: block; color: var(--muted); font-size: 13px; margin-top: 4px; }
.chat { display: grid; gap: 8px; }
.chat > * { scroll-margin-bottom: 96px; } /* 최신 대화로 이동할 때 하단 탭에 가리지 않게 */
.bubble { max-width: 85%; padding: 10px 14px; border-radius: 14px; font-size: 14px; }
.bubble.me { justify-self: end; background: var(--accent); color: #fff; border-bottom-right-radius: 4px; }
.bubble.bot { background: var(--surface); border-bottom-left-radius: 4px; }
.profile-mini { display: flex; align-items: center; gap: 12px; background: var(--surface); border-radius: var(--r); padding: 16px; }
.profile-mini > .ic { width: 44px; height: 44px; padding: 10px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); }
.profile-mini small { display: block; color: var(--muted); }
.tabs-line { display: flex; gap: 4px; border-bottom: 1px solid var(--line); }
.tabs-line.scroll { overflow-x: auto; white-space: nowrap; }
.tabs-line a, .tabs-line button { padding: 10px 12px; font-weight: 700; font-size: 14px; color: var(--muted); border: 0; background: none; border-bottom: 2px solid transparent; cursor: pointer; }
.tabs-line .on { color: var(--accent); border-bottom-color: var(--accent); }
.tabs-line.fill > * { flex: 1; text-align: center; }
.pick { display: grid; gap: 2px; width: 100%; text-align: left; padding: 12px 14px; border-radius: 12px; border: 1px solid var(--line); background: var(--surface); cursor: pointer; }
.pick.sel, .pick:hover { border-color: var(--accent); background: var(--accent-soft); }
.gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px; }
.gallery img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 10px; background: var(--soft); }
.gallery figure { margin: 0; display: grid; gap: 4px; }
.protect { user-select: none; -webkit-user-drag: none; }
.ph-item { position: relative; }
.ph-item .x { position: absolute; top: 4px; right: 4px; width: 24px; height: 24px; border-radius: 50%; border: 0; background: rgb(0 0 0 / .6); color: #fff; cursor: pointer; }
.noti { display: flex; gap: 10px; background: var(--surface); border-radius: 12px; padding: 12px 14px; }
.noti > .ic { color: var(--muted); margin-top: 2px; }
.noti.unread { box-shadow: inset 3px 0 0 var(--accent); }

/* 로그인 (고객) */
.login-screen { position: relative; overflow: hidden; background: linear-gradient(180deg, #fbf8ef 0%, #f3efe0 55%, #fbf8ef 100%); }
.login-art { position: absolute; inset: 0; pointer-events: none; }
.login-art .hill { position: absolute; border-radius: 50%; }
.login-art .h1 { width: 140%; height: 260px; left: -20%; top: 250px; background: radial-gradient(ellipse at 50% 30%, #d9e6cc, #c5d8b3 60%, transparent 70%); opacity: .8; }
.login-art .h2 { width: 120%; height: 200px; left: 10%; top: 210px; background: radial-gradient(ellipse at 50% 40%, #e3e9d8, transparent 70%); }
.login-art .leaf { position: absolute; width: 90px; height: 50px; border-radius: 0 60px; background: #a9c49a; opacity: .55; }
.login-art .l1 { top: 40px; left: -20px; transform: rotate(25deg); }
.login-art .l2 { top: 120px; right: -30px; transform: rotate(-30deg); }
.login-brand { position: relative; text-align: center; padding: 48px 16px 0; }
.logo-big { display: inline-flex; align-items: center; gap: 8px; font-size: 44px; font-weight: 900; letter-spacing: -.04em; color: #4a3424; }
.logo-big .ic { width: 44px; height: 44px; color: #b08b5a; }
.login-brand p { color: #6b6152; margin-top: 4px; }
.login-hero { position: relative; display: flex; justify-content: center; align-items: center; gap: 6px; padding: 8px 8px 0; }
.bubble-note { font-size: 12px; color: #6b5a44; transform: rotate(-8deg); line-height: 1.4; }
.bubble-note.right { transform: rotate(8deg); }
.login-sheet { position: relative; margin-top: -10px; background: rgb(255 255 255 / .92); border-radius: 28px 28px 0 0; padding: 22px 18px 28px; display: grid; gap: 10px; flex: 1; }
.login-sheet .btn { justify-content: flex-start; gap: 12px; }
.login-sheet .btn > .ic:last-child { margin-left: auto; }
.btn.kakao { background: #fee500; border-color: #fee500; color: #191600; }
.btn.naver { background: #03c75a; border-color: #03c75a; color: #fff; }
.btn.naver .ic { width: 18px; height: 18px; }
.btn.google { background: #fff; }
.talk { font-size: 10px; font-weight: 900; background: #3c1e1e; color: #fee500; border-radius: 10px; padding: 3px 6px; }
.g { width: 22px; text-align: center; font-weight: 900; background: linear-gradient(90deg, #4285f4, #ea4335, #fbbc05, #34a853); -webkit-background-clip: text; background-clip: text; color: transparent; font-size: 20px; }
.links a { color: var(--muted); }
.script { font-family: cursive; color: #6f8a5c; }
.back { color: var(--muted); }

/* 로그인 (중개사·관리자) · 첫 화면 · 가입 */
.landing, .auth, .phone { max-width: 960px; margin: 0 auto; padding: 24px 16px 64px; display: grid; gap: 20px; }
.phone { max-width: 480px; background: var(--bg, #f4f6fa); min-height: calc(100vh - var(--devbar-h)); }
.hero { display: grid; gap: 10px; padding: 24px 0 4px; }
.hero h1 { font-size: clamp(24px, 4vw, 36px); letter-spacing: -.02em; max-width: 22ch; }
.eyebrow { font-size: 12px; font-weight: 700; letter-spacing: .08em; color: #1b64f2; }
.entry { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.entry-card { display: grid; gap: 4px; padding: 20px; border-radius: var(--r); background: #fff; border: 1px solid var(--line); }
.entry-card b { font-size: 18px; }
.entry-card span { color: var(--muted); font-size: 14px; }
.entry-card:hover { border-color: #1b64f2; }
.entry-card.subtle { background: transparent; }
.demo-accounts { background: #fff; border-radius: var(--r); padding: 14px 16px; }
.demo-accounts summary { cursor: pointer; font-weight: 600; margin-bottom: 10px; }
.auth { grid-template-columns: minmax(0, 1fr) 380px; padding: 0; margin-top: 24px; border-radius: 20px; overflow: hidden; background: #fff; gap: 0; }
.auth-art { min-height: 460px; background: linear-gradient(160deg, #1b64f2, #6f9cf7 60%, #d9e6ff); display: grid; place-items: center; }
.auth-art.admin { background: linear-gradient(160deg, #1d232c, #4b5568); }
.auth-art.broker { background: linear-gradient(160deg, #1b64f2, #5b8ef6 55%, #cfe0ff); }
.pro-art { color: #fff; text-align: center; display: grid; gap: 4px; }
.pro-art b { font-size: 48px; letter-spacing: -.03em; }
.pro-art em { font-style: normal; font-size: 40px; font-weight: 800; opacity: .9; }
.auth-box { display: grid; gap: 12px; padding: 32px 28px; align-content: center; }
.auth-box .logo { font-size: 28px; }
.auth-box .btn { min-height: 44px; }
.steps { display: flex; flex-wrap: wrap; gap: 4px; list-style: none; padding: 0; margin: 0; counter-reset: s; font-size: 12px; }
.steps li { counter-increment: s; padding: 4px 10px; border-radius: 999px; background: #eef0f3; color: var(--muted); }
.steps li::before { content: counter(s) '. '; }
.steps li.on { background: #1b64f2; color: #fff; font-weight: 600; }
.steps li.done { background: #e8f0fe; color: #1b64f2; }
.card.pick { text-align: left; cursor: pointer; }
.card.pick:disabled { opacity: .55; cursor: not-allowed; }
.phone .btn.primary { background: #1b64f2; border-color: #1b64f2; color: #fff; }
.phone input:focus { border-color: #1b64f2; }
@media (max-width: 760px) { .entry { grid-template-columns: minmax(0, 1fr); } .auth { grid-template-columns: minmax(0, 1fr); } .auth-art { min-height: 140px; } }

/* 집도사 Pro 홈 */
.profile .profile-body { display: grid; grid-template-columns: 112px minmax(0, 1fr); gap: 12px; }
.office-photo { grid-row: span 2; display: grid; align-content: center; gap: 2px; padding: 10px; min-height: 120px; border-radius: 12px; color: #fff; background: linear-gradient(160deg, #2b3a52, #5b6f8f); }
.office-photo b { font-size: 18px; }
.office-photo small { font-size: 11px; opacity: .8; }
.office-photo em { font-style: normal; font-size: 10px; opacity: .8; margin-top: 8px; }
.profile-info { display: grid; gap: 3px; font-size: 14px; }
.profile-info .ic { width: 15px; height: 15px; color: var(--muted); }
.office-name { font-size: 17px; }
.profile-grade { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; padding-top: 8px; border-top: 1px dashed var(--line); }
.profile-grade b { font-size: 20px; margin-left: auto; }
.grade { display: inline-flex; align-items: center; gap: 4px; font-weight: 800; color: #c48a11; }
.grade .ic { width: 22px; height: 22px; fill: #f5c33b; stroke: #c48a11; }
.grade.premium { color: #b0640e; }
.tile-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.tile { position: relative; display: grid; gap: 4px; padding: 16px; border-radius: var(--r); min-height: 128px; }
.tile b { font-size: 18px; }
.tile small { font-size: 12px; color: var(--muted); }
.tile em { position: absolute; right: 14px; bottom: 12px; font-style: normal; font-size: 12px; font-weight: 700; }
.tile-ic { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; }
.tile-ic .ic { width: 26px; height: 26px; }
.t-blue { background: #e7efff; } .t-blue .tile-ic { background: #1b64f2; color: #fff; } .t-blue em { color: #1b64f2; }
.t-green { background: #e2f5ec; } .t-green .tile-ic { background: #23a46b; color: #fff; } .t-green em { color: #1b8a59; }
.t-purple { background: #eeeafc; } .t-purple .tile-ic { background: #7a63e0; color: #fff; } .t-purple em { color: #6a52d6; }
.t-orange { background: #fdeedd; } .t-orange .tile-ic { background: #f39a3c; color: #fff; } .t-orange em { color: #d97a17; }
.switch-row .ic { color: var(--muted); }

/* 중개사 목록 · 지도 */
.filters { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.filters input, .filters select { width: auto; flex: 1 1 140px; min-height: 42px; padding: 8px 12px; }
.lead-card { display: grid; gap: 6px; background: var(--surface); border-radius: var(--r); padding: 14px 16px; }
.lead-card.disc { box-shadow: inset 4px 0 0 var(--warn); }
.listing-row { display: grid; grid-template-columns: 104px minmax(0, 1fr) auto; gap: 12px; align-items: center; background: var(--surface); border-radius: var(--r); padding: 12px; }
.listing-row.sel { box-shadow: 0 0 0 2px var(--accent); }
.listing-row > .ic { color: var(--muted); }
.thumb { width: 104px; height: 84px; object-fit: cover; border-radius: 10px; background: var(--soft); }
.thumb.ph { display: grid; place-items: center; align-content: center; gap: 2px; color: #fff; background: linear-gradient(160deg, #6e8fb8, #a7c0dc); font-size: 11px; }
.price-line { display: flex; align-items: center; gap: 8px; }
.viewer { font-size: 13px; color: var(--accent); font-weight: 600; }
.viewer.sub { padding: 0 6px; margin-top: -4px; }
.map { position: relative; height: 340px; border-radius: var(--r); overflow: hidden; background: var(--map-land); }
.map-inner { position: absolute; inset: 0; transform: scale(var(--zoom, 1)); transform-origin: center; transition: transform .2s; }
.map-bg { position: absolute; inset: 0; width: 100%; height: 100%; }
.pin { position: absolute; transform: translate(-50%, -100%); padding: 6px 10px; border-radius: 10px; border: 0; background: var(--accent); color: #fff; font-weight: 800; font-size: 13px; white-space: nowrap; cursor: pointer; box-shadow: 0 2px 6px rgb(0 0 0 / .25); }
.pin::after { content: ''; position: absolute; left: 50%; bottom: -6px; transform: translateX(-50%); border: 6px solid transparent; border-top-color: var(--accent); border-bottom: 0; }
.pin.viewed { background: #12409e; }
.pin.on { background: #fff; color: var(--accent); outline: 3px solid var(--accent); z-index: 2; }
.pin.on::after { border-top-color: #fff; }
.map-ctrl { position: absolute; right: 10px; top: 10px; display: grid; gap: 6px; }
.map-ctrl button { display: grid; justify-items: center; gap: 1px; min-width: 52px; padding: 6px; border: 0; border-radius: 12px; background: #fff; box-shadow: 0 1px 4px rgb(0 0 0 / .15); cursor: pointer; font-size: 10px; }
.map-ctrl b { font-size: 20px; line-height: 20px; }
.map-credit { position: absolute; left: 10px; bottom: 8px; font-size: 10px; color: var(--muted); }
.sheet-list { display: grid; gap: 10px; margin-top: -24px; position: relative; background: var(--bg); border-radius: 20px 20px 0 0; padding: 10px 0 0; }
.sheet-handle { width: 40px; height: 4px; border-radius: 2px; background: #cfd5df; justify-self: center; }
.price-big { font-size: 26px; color: var(--accent); }
.gallery.wm img { filter: saturate(.9); }

/* 업무지원 */
.work-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.sq-ic, .round-ic { width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent); flex: none; }
.timeline { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.timeline li { position: relative; display: grid; grid-template-columns: 48px 1fr auto; gap: 10px; padding: 8px 0 8px; }
.timeline li::before { content: ''; position: absolute; left: 58px; top: 14px; width: 9px; height: 9px; border-radius: 50%; background: var(--accent); }
.timeline li::after { content: ''; position: absolute; left: 62px; top: 24px; bottom: -8px; width: 1px; background: var(--line); }
.timeline li:last-child::after { display: none; }
.timeline .t { font-family: var(--f-mono); font-size: 13px; color: var(--muted); }
.timeline div { padding-left: 18px; display: grid; }
.timeline small { color: var(--muted); }
.reg-box { display: grid; gap: 8px; background: var(--surface); border: 1px solid var(--line); border-radius: 12px; padding: 12px; }
.reg-box em { font-style: normal; font-size: 22px; color: var(--accent); }
.reg-item { display: flex; justify-content: space-between; gap: 8px; align-items: flex-start; padding-top: 8px; border-top: 1px solid var(--line); }
.reg-item > div { display: grid; font-size: 13px; }
.work-tile { position: relative; align-content: start; min-height: 150px; }
.work-tile > .ic { position: absolute; right: 14px; top: 18px; color: var(--muted); }
.work-tile b { font-size: 17px; margin-top: 6px; }
.work-tile small { color: var(--muted); font-size: 12px; }
.quick { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px; }
.quick a, .quick button { display: flex; align-items: center; justify-content: center; gap: 6px; padding: 10px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); font-weight: 600; font-size: 13px; cursor: pointer; }
.intro-card { display: flex; align-items: center; gap: 12px; padding: 16px; border-radius: var(--r); background: var(--accent-soft); }
.intro-card > div { flex: 1; display: grid; gap: 4px; }
.intro-card small { color: var(--muted); font-size: 13px; }
.intro-card > .ic { width: 40px; height: 40px; padding: 8px; border-radius: 50%; background: var(--accent); color: #fff; }
.intro-card > .ic:last-child { background: none; color: var(--accent); width: 56px; height: 56px; }
.intro-card.big b { font-size: 20px; color: var(--accent); }
.reg-card .reg-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; padding-top: 10px; border-top: 1px solid var(--line); }
.reg-cols > div { display: grid; font-size: 14px; }
.reg-cols > div + div { border-left: 1px solid var(--line); padding-left: 10px; }
.note-box { background: var(--soft); border-radius: var(--r); padding: 14px 16px; font-size: 13px; color: var(--muted); }
.note-box b { display: flex; gap: 6px; align-items: center; color: var(--ink); }
.note-box ul { margin: 8px 0 0; padding-left: 18px; display: grid; gap: 4px; }
.addr-card { grid-template-columns: 72px minmax(0, 1fr); align-items: center; }
.addr-card > div:nth-child(2) { display: grid; gap: 2px; }
.addr-card .btn { grid-column: 2; }
.bldg-art { grid-row: span 2; width: 72px; height: 80px; border-radius: 10px; display: grid; place-items: center; background: linear-gradient(180deg, #dfeefa, #c9dcc4); color: #6d7f6a; }
.bldg-art .ic { width: 40px; height: 40px; }
.tag { font-size: 11px; background: var(--soft); border-radius: 4px; padding: 1px 6px; color: var(--muted); }
.ok-banner { display: flex; gap: 10px; align-items: center; background: var(--accent-soft); color: var(--accent); border-radius: 12px; padding: 12px 14px; font-weight: 700; }
.ok-banner .ic { width: 26px; height: 26px; padding: 4px; border-radius: 50%; background: var(--accent); color: #fff; }
.ledger-tiles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.ledger-tiles a { display: grid; justify-items: center; gap: 6px; text-align: center; padding: 14px 6px; border-radius: 14px; background: var(--accent-soft); }
.ledger-tiles b { font-size: 14px; }
.ledger-tiles small { font-size: 11px; color: var(--muted); }
.ledger-tiles .round-ic { background: #fff; }
.ledger-table { display: grid; grid-template-columns: 34% 66%; margin: 0; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; font-size: 14px; }
.ledger-table dt, .ledger-table dd { margin: 0; padding: 9px 12px; border-bottom: 1px solid var(--line); }
.ledger-table dt { background: var(--soft); color: var(--muted); }
.ledger-table dt:last-of-type, .ledger-table dd:last-of-type { border-bottom: 0; }
.advice { display: flex; gap: 10px; align-items: center; background: var(--accent-soft); border-radius: 12px; padding: 12px; }
.advice div { display: grid; gap: 2px; }
.advice small { font-size: 13px; }
.memo-card p { white-space: pre-wrap; }

/* 설정 */
.menu-card { display: flex; align-items: center; gap: 14px; background: var(--surface); border-radius: var(--r); padding: 18px 16px; }
.menu-card > span:nth-child(2) { flex: 1; display: grid; gap: 2px; }
.menu-card b { font-size: 17px; }
.menu-card small { color: var(--muted); font-size: 13px; }
.menu-card > .ic { color: var(--muted); }
.menu-ic { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; color: #fff; flex: none; }
.menu-ic.blue { background: #1b64f2; } .menu-ic.purple { background: #8b5cf6; } .menu-ic.sky { background: #22a7f0; } .menu-ic.red { background: #ef4444; } .menu-ic.navy { background: #1e3a8a; }
.avatar { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: #dfe3ea; color: #fff; flex: none; }
.avatar .ic { width: 26px; height: 26px; }
.person-head { display: flex; align-items: center; gap: 14px; }
.person-head .avatar { width: 64px; height: 64px; }
.person-head > div:nth-child(2) { flex: 1; display: grid; gap: 4px; }
.person-head b { font-size: 20px; }
.person-head .r-value { display: grid; justify-items: end; }
.perm-chips { display: flex; flex-wrap: wrap; gap: 4px; justify-content: flex-end; }
.row-item select { width: auto; min-height: 36px; padding: 4px 10px; }
.grade-card .grade-line { display: flex; align-items: center; gap: 12px; }
.grade-card b { font-size: 24px; }
.grade-ic { width: 52px; height: 44px; border-radius: 10px; display: grid; place-items: center; background: #f6b93b; color: #fff; }
.grade-ic .ic { width: 28px; height: 28px; fill: #fff; }
.pt { font-size: 24px; color: var(--accent); font-weight: 800; }
.pt small { font-size: 14px; }
.pw-field > span:first-child { display: flex; align-items: center; gap: 6px; }
.rule-box { margin: 0; padding: 14px 14px 14px 30px; background: var(--soft); border-radius: 12px; font-size: 13px; color: var(--muted); display: grid; gap: 4px; }
.ledger-row .r-value b { font-size: 15px; }

/* 관리자 (데스크톱) */
.desk { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 24px; max-width: 1400px; margin: 0 auto; padding: 24px 16px 64px; --accent: #1b64f2; --accent-soft: #e8f0fe; }
.side { display: grid; gap: 16px; align-content: start; }
.office { display: grid; gap: 4px; background: #fff; border-radius: 12px; padding: 14px; font-size: 14px; }
.side-nav { display: grid; gap: 2px; font-size: 14px; }
.side-nav a { padding: 6px 10px; border-radius: 6px; }
.side-nav a:hover { background: #eef0f3; }
.side-nav a.on { background: var(--accent-soft); color: var(--accent); font-weight: 600; }
.desk-main { min-width: 0; display: grid; gap: 16px; align-content: start; }
.desk .card { border: 1px solid var(--line); }
.desk h1 { font-size: 22px; }
.desk .btn { min-height: 38px; }
.desk .btn.primary { background: #1b64f2; border-color: #1b64f2; color: #fff; }
.stats { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
.stat { display: grid; gap: 2px; background: #fff; border-radius: 10px; padding: 12px 14px; }
.stat b { font-size: 22px; font-variant-numeric: tabular-nums; }
.table-wrap { overflow-x: auto; background: #fff; border-radius: 12px; border: 1px solid var(--line); }
table { border-collapse: collapse; width: 100%; font-size: 14px; }
th, td { text-align: left; padding: 10px 12px; border-bottom: 1px solid var(--line); vertical-align: top; white-space: nowrap; }
td.wrap { white-space: normal; min-width: 140px; }
th { font-size: 12px; color: var(--muted); font-weight: 600; background: #f6f7f9; }
tr:last-child td { border-bottom: 0; }
.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.num-input { width: 120px; text-align: right; }
label.inline { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; }
label.inline input { width: auto; min-height: 36px; }
.stack-cell { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.dot { display: inline-flex; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--danger); color: #fff; font-size: 11px; font-weight: 700; align-items: center; justify-content: center; margin-left: 4px; }
@media (max-width: 760px) { .desk { grid-template-columns: minmax(0, 1fr); } }

/* 모달 · 토스트 */
.modal { position: fixed; inset: 0; z-index: 30; background: rgb(10 14 22 / .45); display: grid; place-items: end center; padding: 0; }
.sheet { background: #fff; border-radius: 22px 22px 0 0; padding: 22px 18px calc(22px + env(safe-area-inset-bottom, 0px)); width: min(480px, 100%); max-height: 88vh; overflow: auto; display: grid; gap: 12px; }
.sheet .btn.primary { background: var(--sheet-accent, #3f6b4a); border-color: var(--sheet-accent, #3f6b4a); color: #fff; }
body[data-kind='broker'] .sheet { --sheet-accent: #1b64f2; --accent: #1b64f2; --accent-soft: #e8f0fe; }
body[data-kind='member'] .sheet, body[data-kind='public'] .sheet { --accent: #3f6b4a; --accent-soft: #e6efe3; }
body[data-kind='admin'] .sheet { --sheet-accent: #1b64f2; }
@media (min-width: 600px) { .modal { place-items: center; padding: 16px; } .sheet { border-radius: 20px; } }
.modal.mid { place-items: center; padding: 16px; } .modal.mid .sheet { border-radius: 20px; padding-bottom: 22px; }
.toast { position: fixed; left: 50%; bottom: 90px; transform: translateX(-50%); z-index: 40; max-width: min(440px, calc(100% - 32px)); background: #1d232c; color: #fff; padding: 12px 18px; border-radius: 12px; font-size: 14px; font-weight: 500; box-shadow: 0 6px 20px rgb(0 0 0 / .2); }
.toast.err { background: var(--danger); }
@media (prefers-reduced-motion: no-preference) {
  .sheet { animation: up .18s ease-out; }
  @keyframes up { from { transform: translateY(16px); opacity: .6; } }
}
@media (max-width: 400px) { .work-grid, .tile-grid { grid-template-columns: 1fr 1fr; } .ledger-tiles { grid-template-columns: 1fr; } .btn-row.three { grid-template-columns: 1fr 1fr; } }

/* ── 화면 점검 후 보정 */
.form label { display: flex; flex-wrap: wrap; align-items: baseline; column-gap: 6px; row-gap: 6px; }
.form label > :is(input, select, textarea, .input-ic, .row, .grid2) { flex-basis: 100%; }
.form label.check { align-items: center; flex-wrap: nowrap; }
.form label.check > input { flex: none; } /* 동의 체크박스: 글자 옆에 (위 한 줄 차지 해제) */
.tile { padding-bottom: 34px; }
.tile em { top: 16px; bottom: auto; right: 14px; background: rgb(255 255 255 / .7); border-radius: 999px; padding: 2px 8px; }
.chips.scroll button.chip { padding: 0; border: 0; background: none; white-space: nowrap; }
.chips.scroll button.chip > span { white-space: nowrap; }
.chips.scroll button.chip.on > span { background: var(--accent); border-color: var(--accent); color: #fff; }
.chips.scroll button.chip.on { background: none; }
.price-line > span:last-child { font-size: 20px; font-weight: 800; color: var(--accent); }
.price-line span:not(:last-child) { font-size: 12px; font-weight: 700; color: #fff; }
@media (max-width: 520px) { .work-grid.top { grid-template-columns: minmax(0, 1fr); } }
.reg-item > div b { font-size: 14px; }
.app-body { grid-template-columns: minmax(0, 1fr); }
.app-body > *, .row > .chips.scroll { min-width: 0; }
.row.between.wrap > .chips.scroll { flex: 1 1 0; }
.r-label:has(> .ic) { display: flex; align-items: center; gap: 8px; }
.person-head .badge, .card .badge { justify-self: start; }

/* ═════════ 브랜드 컴포넌트 레이어 (awesome-design 토큰 적용) ═════════ */
.app, .sheet, .desk { font-family: var(--f-body); letter-spacing: var(--tracking); color: var(--ink); }
.app { background: var(--bg); }
.card, .req-card, .lead-card, .listing-row, .list-card, .row-card, .menu-card, .noti, .empty,
.profile-mini, .ai-hero, .views-count, .intro-card, .note-box, .tile, .promo { border-radius: var(--r); box-shadow: var(--shadow-card); }
.list-card.flat { box-shadow: none; }
.num, .pt, .price-big, .profile-grade b, .big-result b, .price-line > span:last-child, .reg-box em { font-variant-numeric: tabular-nums; }

/* 버튼: 알약형. Starbucks = 50px·48px·누르면 scale(.95) / Coinbase = 100px·44px */
.btn { border-radius: var(--btn-r); min-height: var(--btn-h); font-weight: 600; letter-spacing: var(--tracking); transition: all .2s ease; }
.btn:active:not(:disabled) { transform: scale(.965); transition-duration: .18s; transition-timing-function: ease-out; }
.btn.primary { background: var(--accent); border-color: var(--accent); color: var(--accent-ink); }
.btn.primary:hover { background: var(--accent-active); border-color: var(--accent-active); filter: none; }
.btn.outline { background: transparent; border: 1px solid var(--accent); color: var(--accent); }
.btn.soft { background: var(--accent-soft); color: var(--accent); }
.btn.small-btn { min-height: 34px; border-radius: var(--btn-r); }
.theme-broker .btn:not(.primary):not(.outline):not(.soft):not(.danger):not(.danger-outline):not(.danger-ghost),
.desk .btn:not(.primary) { background: #eef0f3; border-color: transparent; color: #0a0b0d; }
.theme-customer .btn:not(.primary):not(.outline):not(.soft):not(.danger):not(.danger-outline):not(.danger-ghost):not(.kakao):not(.google) {
  background: transparent; border: 1px solid rgba(0, 0, 0, .87); color: rgba(0, 0, 0, .87); }
.btn.danger { background: var(--danger); border-color: var(--danger); }
.btn.danger-outline { border-radius: var(--btn-r); }

/* 배지: Coinbase badge-pill (회색 알약 12px/600) · Starbucks는 녹색 틴트 */
.badge { border-radius: 100px; padding: 4px 12px; font-size: 12px; font-weight: 600; background: var(--soft); color: var(--ink); }
.badge.accent { background: var(--accent-soft); color: var(--accent); }
.badge.ok { background: var(--ok-soft); color: var(--ok); }
.badge.solid { background: var(--accent); color: #fff; }
.theme-customer .badge:not(.ok):not(.warn):not(.closed):not(.muted):not(.solid) { background: var(--sb-light); color: var(--sb-house); }

/* 입력: Coinbase text-input(12px·48px) · 포커스는 브랜드 색 */
input, select, textarea { border-radius: 12px; border-color: var(--line); }
.theme-customer input:focus, .theme-customer select:focus, .theme-customer textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(212, 233, 226, .9); }
.theme-broker .filters input, .theme-broker .filters select { border-radius: 100px; background: #eef0f3; border-color: transparent; }
.chip > span, button.chip { border-radius: var(--btn-r); }
.theme-customer .chip input:checked + span { background: var(--sb-accent); border-color: var(--sb-accent); }
.seg { border-radius: 100px; }
.seg span, .seg button { border-radius: 100px; }

/* 상단 바 · 하단 탭 */
.theme-customer .appbar, .theme-customer .brandbar { background: var(--bg); }
.theme-customer .brandbar { position: static; } /* 고객 홈 헤더는 고정하지 않고 본문과 함께 스크롤 */
.theme-broker .appbar, .theme-broker .brandbar { background: #fff; border-bottom: 1px solid #eef0f3; }
.theme-broker .app-body { background: #f7f7f7; }
.appbar h1 { font-weight: 700; }
.theme-customer .tabbar { border-top: 0; box-shadow: 0 -1px 3px rgba(0, 0, 0, .1), 0 -2px 2px rgba(0, 0, 0, .06), 0 0 2px rgba(0, 0, 0, .07); }
.theme-broker .tabbar, .theme-work .tabbar { border-top: 1px solid #dee1e6; }
.tabbar a { font-weight: 500; }

/* ── 고객 앱 (Starbucks) */
.theme-customer h2, .theme-customer .wiz-head h2, .theme-customer .hero-card h2 { color: var(--sb-green); font-weight: 700; }
.theme-customer .appbar h1, .theme-customer h3 { color: var(--ink); }
.theme-customer .logo { color: var(--sb-green); }
.theme-customer .logo b { color: var(--sb-house); }
.hero-card h2 { font-size: 26px; line-height: 1.3; }
.duo { box-shadow: var(--shadow-card); }
.duo.seek { background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); }
.duo.seek .duo-ic { background: var(--sb-accent, #00754A); }
.duo.sell { background: var(--gold-lightest, #faf6ee); color: #6b5521; }
.duo.sell .duo-ic { background: var(--gold, #cba258); }
.req-tag.seek { color: var(--sb-accent, #00754A); }
.req-tag.sell { color: #9a7a35; }
.mini-chips span { background: var(--ceramic, #edebe9); border-radius: 50px; padding: 2px 10px; }
/* Feature band: House Green 띠 + 흰 글자 + 반전 알약 */
.theme-customer .promo { background: var(--sb-house); color: #fff; }
.theme-customer .promo small { color: rgba(255, 255, 255, .7); }
.theme-customer .promo .promo-ic { background: #fff; color: var(--sb-accent); }
.theme-customer .views-count { background: var(--sb-light); color: var(--sb-house); }
.theme-customer .progress i { background: var(--sb-accent); }
.theme-customer .notice { background: var(--gold-lightest); color: #6b5521; }
.theme-customer .bubble.me { background: var(--sb-accent); }
.bubble-note, .script { font-family: var(--f-script); font-size: 20px; line-height: 1.15; color: #6b5a44; }
.script { color: var(--sb-uplift, #2b5148); font-size: 22px; }
.login-sheet .btn { border-radius: 50px; }
.login-sheet .btn.primary { background: var(--sb-accent); }
.login-sheet .btn.outline { border-color: var(--sb-accent); color: var(--sb-accent); }
.logo-big { font-family: 'Noto Sans KR', sans-serif; color: var(--sb-house); }
/* 플로팅 CTA: AI 도사 원형 버튼 + 왼쪽 말풍선 박스(예시 질문이 돌아가며 보임) */
.ai-fab { position: fixed; z-index: 6; right: max(16px, calc(50% - 240px + 16px)); bottom: 84px; display: flex; align-items: center; gap: 10px; pointer-events: none; }
.ai-fab > * { pointer-events: auto; }
.ai-fab { transition: opacity .2s, transform .2s; }
.ai-fab.away { opacity: 0; transform: translateY(12px); }
.ai-fab.away > * { pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .ai-fab { transition: none; } }
.frap-menu { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

/* ── 집도사 Pro (Coinbase) */
.theme-broker h1, .theme-broker h2 { font-weight: 600; }
.theme-broker .logo b { color: #0a0b0d; font-weight: 700; }
.theme-broker .logo em { color: #0052ff; font-weight: 700; }
.theme-broker .card, .theme-broker .list-card, .theme-broker .lead-card, .theme-broker .listing-row, .theme-broker .menu-card, .theme-broker .row-card { border: 0; }
.price-big { font-weight: 400; font-size: 32px; letter-spacing: -.4px; color: #0a0b0d; }
.office-photo { background: linear-gradient(160deg, #0a0b0d, #2a3140); border-radius: 16px; }
.grade { color: #a56f00; }
.grade .ic { fill: #f4b000; stroke: #a56f00; }
.grade-ic { background: #f4b000; border-radius: 16px; }
.theme-broker .pt { color: #0a0b0d; font-weight: 600; font-size: 28px; }
.tile { box-shadow: none; }
.t-blue { background: #e5edff; } .t-blue .tile-ic { background: #0052ff; } .t-blue em { color: #0052ff; }
.t-green { background: #e3f7ee; } .t-green .tile-ic { background: #05b169; } .t-green em { color: #05814d; }
/* cta-band-dark */
.theme-broker .promo.blue { background: #0a0b0d; color: #fff; }
.theme-broker .promo.blue small { color: #a8acb3; }
.theme-broker .promo.blue small:first-child { color: #7aa2ff; }
.theme-broker input[role=switch]:checked { background: #0052ff; }
.pin { background: #0052ff; border-radius: 100px; }
.pin::after { border-top-color: #0052ff; }
.pin.viewed { background: #003ecc; }
.lead-card.disc { box-shadow: inset 4px 0 0 #f4b000; }
.menu-ic.blue { background: #0052ff; }
.theme-broker .pos, .theme-broker .r-value b.pos { color: #05b169; }
.theme-broker .neg { color: #cf202f; }

/* ── 업무지원 (Coinbase 구조 + Starbucks 녹색) */
.theme-work .card, .theme-work .list-card { border-radius: 24px; box-shadow: none; }
.theme-work .brandbar.work h1 { color: #1E3932; font-weight: 700; }
.theme-work .pro-mark { color: #00754A; }
.theme-work .btn.primary { background: #1E3932; border-color: #1E3932; }
.theme-work .btn.soft { background: #e4ece6; color: #1E3932; }
.theme-work .sq-ic, .theme-work .round-ic { background: #e4ece6; color: #1E3932; }
.theme-work .timeline li::before { background: #00754A; }
.theme-work .ok-banner .ic, .theme-work .intro-card > .ic:first-child { background: #00754A; }
.theme-work .ledger-tiles a { background: #e4ece6; border-radius: 16px; }

/* ── 관리자 (Coinbase) */
.desk .card, .desk .stat, .desk .table-wrap, .desk .office { border-radius: 16px; border-color: #dee1e6; }
.desk .btn.primary { background: #0052ff; border-color: #0052ff; }
.side-nav a.on { background: #e5edff; color: #0052ff; }

/* 모달: 브랜드별 강조색 */
.sheet { border-radius: 24px 24px 0 0; }
body[data-kind='member'] .sheet .btn.primary, body[data-kind='public'] .sheet .btn.primary { background: #00754A; border-color: #00754A; }
body[data-kind='broker'] .sheet .btn.primary, body[data-kind='admin'] .sheet .btn.primary { background: #0052ff; border-color: #0052ff; }
.toast { border-radius: 100px; }

/* ═════════ 고객 인트로: 세로 붓글씨 '집도사' (C-10) ═════════ */
.intro { position: relative; overflow: hidden; min-height: calc(100vh - var(--devbar-h)); display: flex; flex-direction: column;
  --ink-black: #161616; --seal: #b3261e;
  background: radial-gradient(120% 70% at 50% 0%, #fbf7ec 0%, #f4eddc 55%, #efe6d1 100%); }
.hanji { position: absolute; inset: 0; pointer-events: none; opacity: .5;
  background:
    repeating-linear-gradient(83deg, rgb(120 100 60 / .035) 0 1px, transparent 1px 7px),
    repeating-linear-gradient(-71deg, rgb(120 100 60 / .03) 0 1px, transparent 1px 11px),
    radial-gradient(circle at 20% 30%, rgb(160 130 80 / .06), transparent 40%),
    radial-gradient(circle at 80% 70%, rgb(160 130 80 / .05), transparent 45%); }
.ink-mountain { position: absolute; left: 0; right: 0; top: 30%; width: 100%; height: 220px; pointer-events: none; }
.brush-wrap { position: relative; display: grid; place-items: center; padding: 20px 0 0; }
.intro-login { position: relative; margin-top: auto; display: grid; gap: 10px; padding: 24px 18px calc(24px + env(safe-area-inset-bottom, 0px));
  background: rgb(255 255 255 / .9); border-radius: 28px 28px 0 0; box-shadow: 0 -1px 3px rgba(0, 0, 0, .06); }
.login-btn { position: relative; display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 54px; border-radius: 50px;
  border: 1px solid transparent; font-size: 16px; font-weight: 700; cursor: pointer; transition: transform .2s ease, filter .2s ease; }
.login-btn .ic { position: absolute; left: 20px; width: 22px; height: 22px; }
.login-btn:hover { filter: brightness(.97); }
.login-btn:active { transform: scale(.95); }
.login-btn.kakao { background: #fee500; color: rgba(0, 0, 0, .85); }
.login-btn.naver { background: #03c75a; color: #fff; }
.login-btn.tel { background: #fff; color: rgba(0, 0, 0, .87); border-color: #d6d1c4; }
.login-btn.tel .ic { color: #00754A; }
.intro-links { text-align: center; font-size: 13px; color: rgba(0, 0, 0, .58); }
.intro-links a { color: inherit; text-decoration: underline; text-underline-offset: 3px; }

/* 애니메이션: 폰트 준비 전에는 먹·낙관·로그인 박스를 숨겨 두고(.go 전), 준비되면 순서대로 */
.intro:not(.go) .intro-login { opacity: 0; transform: translateY(24px); }
@media (prefers-reduced-motion: no-preference) {
  .intro.go .intro-login { animation: fade-up .6s ease 2.6s both; }
}
@keyframes fade-up { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }

/* ── 고객 홈 AI 채팅 박스 (Starbucks 카드 + House Green 머리) */
.ai-box { display: grid; gap: 12px; background: var(--surface); border-radius: 12px; padding: 16px; box-shadow: var(--shadow-card); }
.ai-box-head { display: flex; align-items: center; gap: 10px; }
.ai-box-head .mascot { flex: none; background: var(--sb-light, #d4e9e2); border-radius: 50%; padding: 4px; }
.ai-box-head b { display: block; font-size: 17px; color: var(--sb-green, #006241); }
.ai-box-head small { color: var(--muted); font-size: 13px; }
.chat.mini .bubble { max-width: 100%; background: var(--bg); font-size: 14px; }
.ai-box .chip > span { padding: 7px 12px; font-size: 13px; font-weight: 600; background: var(--bg); border-color: transparent; }
.ai-box .input-ic input { border-radius: 50px; background: var(--bg); border-color: transparent; }
.ic-btn.send { background: var(--accent); color: #fff; border-radius: 50%; width: 36px; height: 36px; right: 6px; }
.duo.wide { grid-template-columns: auto 1fr; grid-template-rows: auto auto; column-gap: 12px; align-items: center; }
.duo.wide .duo-ic { grid-row: span 2; margin: 0; }
.duo.wide.seek { background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); }
.duo.wide.seek .duo-ic { background: var(--sb-accent, #00754A); color: #fff; }
.duo.wide.sell { background: var(--gold-lightest, #faf6ee); color: #6b5521; }
.duo.wide.sell .duo-ic { background: var(--gold, #cba258); color: #fff; }
.app-body:has(> .ai-fab) { padding-bottom: 72px; } /* 맨 아래 내용(즐겨찾기 고객센터 등)이 고정된 AI 도사 버튼에 가리지 않게 */
.duo-cards.single { grid-template-columns: 1fr; }
.ai-label { display: flex; align-items: center; gap: 6px; color: var(--sb-green, #006241); font-size: 16px; }
.ai-label .ic { width: 20px; height: 20px; }
.ai-box .input-ic input { min-height: 52px; }



/* ── 구해 팔아: 내 의뢰서 편지지 (손글씨로 한 글자씩 써짐) */
.letters { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; padding-top: 6px; }
.letters.single { grid-template-columns: 1fr; }
.letter { position: relative; display: grid; align-content: start; min-height: 222px; padding: 18px 12px 12px 26px; color: rgba(0,0,0,.82);
  border-radius: 3px 3px 10px 10px; box-shadow: 0 1px 1px rgba(0,0,0,.18), 0 4px 10px rgba(0,0,0,.06);
  background-color: #fffdf6;
  background-image: linear-gradient(90deg, transparent 17px, rgba(200, 32, 20, .35) 17px, rgba(200, 32, 20, .35) 18px, transparent 18px),
    repeating-linear-gradient(180deg, transparent 0 29px, rgba(43, 81, 72, .17) 29px 30px);
  background-position: 0 14px; }
.letter.seek { transform: rotate(-1deg); }
.letter.sell { transform: rotate(1deg); background-color: #fffaf0; }
.letters.single .letter { transform: none; }
.tape { position: absolute; top: -9px; left: 50%; width: 64px; height: 18px; transform: translateX(-50%) rotate(-3deg); background: rgba(212, 233, 226, .9); box-shadow: 0 1px 1px rgba(0,0,0,.08); }
.letter.sell .tape { background: rgba(223, 196, 157, .85); transform: translateX(-50%) rotate(3deg); }
.letter-head { display: flex; justify-content: space-between; align-items: baseline; height: 32px; }
.letter-head b { font-family: var(--f-script); font-size: 28px; line-height: 1; color: #006241; }
.letter.sell .letter-head b { color: #8a6a24; }
.letter-page { font-size: 11px; color: var(--muted); font-variant-numeric: tabular-nums; }
.letter-body { display: grid; font-family: 'Nanum Brush Script', var(--f-script); font-size: 22px; line-height: 30px; transition: opacity .4s ease, transform .4s ease; }
.letter-body.turn { opacity: 0; transform: translateY(-8px); }
.ln { display: block; min-height: 30px; overflow-wrap: anywhere; word-break: keep-all; }
.ln.no { font-family: var(--f-mono); font-size: 12px; color: var(--muted); }
.ln.writing::after { content: ''; display: inline-block; width: 2px; height: 18px; margin-left: 2px; vertical-align: -2px; background: #1e3932; animation: pen 1s steps(1) infinite; }
.letter.sell .ln.writing::after { background: #6b5521; }
@keyframes pen { 50% { opacity: 0; } }
@media (max-width: 360px) { .letters { grid-template-columns: 1fr; } }

/* 도장 쾅 */
.letter-head b { font-family: 'Nanum Brush Script', var(--f-script); }
.stamp { position: absolute; right: 12px; bottom: 14px; width: 74px; height: 74px; border-radius: 50%; display: none; place-content: center; justify-items: center;
  border: 3px solid currentColor; box-shadow: inset 0 0 0 2px #fffdf6, inset 0 0 0 4px currentColor;
  font-family: 'Nanum Brush Script', serif; font-size: 22px; line-height: .95; transform: rotate(-14deg); opacity: .88; mix-blend-mode: multiply; pointer-events: none; }
.stamp.matched { color: #c8261b; }
.stamp.received { color: #b5652a; }
.stamp.on, .stamp.hit { display: grid; }
.stamp.hit { animation: stamp-hit .38s cubic-bezier(.2, 1.4, .4, 1) both; }
@keyframes stamp-hit { 0% { opacity: 0; transform: rotate(-30deg) scale(2.6); } 60% { opacity: .95; transform: rotate(-12deg) scale(.92); } 100% { opacity: .88; transform: rotate(-14deg) scale(1); } }
.letter.thud { animation: thud .3s ease .2s; }
.letter.seek.thud { --r: -1deg; } .letter.sell.thud { --r: 1deg; } .letters.single .letter.thud { --r: 0deg; }
@keyframes thud { 0%, 100% { transform: rotate(var(--r, 0)) translateY(0); } 40% { transform: rotate(var(--r, 0)) translateY(3px) scale(.99); } }
.letter { padding-bottom: 92px; }
.stamp { bottom: 12px; right: 14px; }
.stamp { width: 86px; height: 86px; font-size: 27px; border-width: 4px; }
.stamp b { font-weight: 400; }
/* 거래완료: 사각 인장 + 진한 주홍 */
.stamp.dealt { color: #c8261b; border-radius: 10px; width: 92px; height: 92px; font-size: 30px; transform: rotate(-10deg); }
.stamp.dealt.hit { animation-name: stamp-hit-sq; }
@keyframes stamp-hit-sq { 0% { opacity: 0; transform: rotate(-28deg) scale(2.8); } 60% { opacity: .95; transform: rotate(-8deg) scale(.9); } 100% { opacity: .9; transform: rotate(-10deg) scale(1); } }
/* 도장: 글씨 한가운데에 빨간 인주로 찍기 */
.letter { padding-bottom: 14px; }
.stamp { top: 58%; left: 50%; right: auto; bottom: auto; width: 112px; height: 112px; font-size: 36px; border-width: 5px;
  margin: -56px 0 0 -56px; color: #d0221a !important; opacity: .82; mix-blend-mode: multiply;
  filter: url(#ink-rough); text-shadow: 0 0 1px currentColor; }
.stamp.dealt { width: 118px; height: 118px; margin: -59px 0 0 -59px; font-size: 38px; }
.stamp.on, .stamp.hit { display: grid; }
@keyframes stamp-hit { 0% { opacity: 0; transform: rotate(-30deg) scale(2.6); } 55% { opacity: .9; transform: rotate(-12deg) scale(.9); } 100% { opacity: .82; transform: rotate(-14deg) scale(1); } }
@keyframes stamp-hit-sq { 0% { opacity: 0; transform: rotate(-26deg) scale(2.8); } 55% { opacity: .9; transform: rotate(-8deg) scale(.9); } 100% { opacity: .82; transform: rotate(-10deg) scale(1); } }
.stamp b { -webkit-text-stroke: .8px currentColor; }

/* ═════════ 인트로 v2: 첨부 붓글씨 로고가 획 순서대로 써짐 + 슬로건 ═════════ */
.slogan { position: relative; text-align: center; padding: 34px 20px 0; display: grid; gap: 6px; }
.slogan-main { font-family: 'Noto Sans KR', sans-serif; font-weight: 800; font-size: 21px; letter-spacing: -.03em; color: #1E3932; text-wrap: balance; }
.slogan-sub { font-size: 13px; color: rgba(0, 0, 0, .55); letter-spacing: .02em; }
.brush-wrap { padding: 4px 0 0; }
.brush-logo { position: relative; aspect-ratio: 2970 / 2100; mix-blend-mode: multiply; }
.brush-logo.lg { width: min(100%, 460px); }
.brush-logo.sm { width: 220px; margin: 0 auto; }
.ink-piece { position: absolute; background-image: url('./assets/logo-jipdosa.png'); background-repeat: no-repeat; }
.ink-piece.full { inset: 0; background-size: 100% 100%; }
/* 획: 붓 길(마스크 path)이 획 순서대로 그어짐 */
.brush-svg { position: absolute; inset: 0; width: 100%; height: 100%; display: none; }
.intro .brush-svg { display: block; }
.ink-path { fill: none; stroke: #fff; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 1 2; stroke-dashoffset: 1; opacity: 0; }
.intro:not(.go) .brush-logo .ink-piece { visibility: hidden; }
.intro .brush-logo .full { opacity: 0; }
.intro:not(.go) .slogan, .intro:not(.go) .intro-login { opacity: 0; }
@media (prefers-reduced-motion: no-preference) {
  /* 붓을 누르며 천천히 시작 → 빠르게 긋고 → 끝에서 살짝 머묾 */
  .intro.go .ink-path { animation: brush-write var(--dur) cubic-bezier(.5, 0, .25, 1) var(--at) both; }
  .intro.go .seal-piece { animation: seal-pop .42s cubic-bezier(.2, 1.6, .4, 1) var(--at) both; }
  .intro.go .brush-logo .full { animation: fade-in .4s ease calc(var(--logo-end) + .3s) both; }
  .intro.go .slogan { animation: fade-up .7s ease .1s both; }
  .intro.go .intro-login { animation: fade-up .6s ease calc(var(--logo-end) + .3s) both; }
}
@media (prefers-reduced-motion: reduce) { .intro .brush-logo .full { opacity: 1; } .intro .brush-svg { display: none; } }
@keyframes brush-write { 0% { stroke-dashoffset: 1; opacity: 0; } 1% { opacity: 1; } 100% { stroke-dashoffset: 0; opacity: 1; } }
@keyframes seal-pop { 0% { opacity: 0; transform: scale(2.2) rotate(-12deg); } 100% { opacity: 1; transform: none; } }
@keyframes fade-in { from { opacity: 0; } to { opacity: 1; } }
.login-brand .brush-logo { margin-bottom: 4px; }
.login-brand p { font-weight: 700; color: #1E3932; }
/* 로고를 산 그림 한가운데로: 슬로건과 로그인 박스 사이 남는 공간을 채우고 그 중앙에 */
.intro .brush-wrap { flex: 1; display: grid; place-items: center; padding: 0; min-height: 300px; }
.intro .ink-mountain { top: auto; bottom: 0; height: 78%; }
.intro .brush-logo { position: relative; z-index: 1; transform: translateY(6%); }
/* 인트로 배경: 단색 파스텔 베이지 (산·한지 결 제거) */
.intro { background: #f5ecdc; }
/* 홈 헤드: 집도사 붓글씨 메인 로고 */
.brand-mark { height: 52px; width: auto; mix-blend-mode: multiply; }
.brand-link { display: inline-flex; border-radius: 10px; transition: transform .2s ease; }
.brand-link:active { transform: scale(.95); }

/* 희망지역 선택 (시·도 / 시·군·구 / 읍·면·동) */
.region-pick { display: grid; gap: 10px; }
.region-pick select { min-height: 50px; padding: 10px 8px; font-size: 16px; }
.region-pick select:disabled { opacity: .5; }
.region-pick .btn { justify-self: start; }
.region-pick .grid3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.region-pick select { padding-right: 4px; text-overflow: ellipsis; }

/* 가격 슬라이더 (시안: 가격 / 매매가 전체 ✎ / 굵은 초록 막대 + 흰 원형 손잡이 / 최소 · 10억 · 20억 · 30억 · 최대) */
.price-pick { display: grid; gap: 10px; padding-top: 4px; }
.price-pick h3 { font-size: 20px; font-weight: 800; }
.pp-line { display: flex; align-items: center; gap: 6px; font-size: 16px; }
.pp-line b { font-weight: 700; color: rgba(0, 0, 0, .75); }
.pp-value { font-weight: 800; color: #00954a; font-variant-numeric: tabular-nums; }
.pp-edit { display: inline-grid; place-items: center; width: 30px; height: 30px; border: 0; background: none; color: #666; cursor: pointer; border-radius: 50%; }
.pp-edit .ic { width: 20px; height: 20px; }
.pp-edit:hover { background: rgba(0, 0, 0, .05); }
.ps-track { position: relative; height: 44px; margin: 0 18px; touch-action: none; cursor: pointer; user-select: none; }
.ps-track::before { content: ''; position: absolute; left: -18px; right: -18px; top: 50%; height: 8px; margin-top: -4px; border-radius: 4px; background: #e3e3e3; }
.ps-fill { position: absolute; top: 50%; height: 8px; margin-top: -4px; background: #00954a; }
.ps-thumb { position: absolute; top: 50%; width: 36px; height: 36px; margin: -18px 0 0 -18px; border-radius: 50%; background: #fff;
  border: 2px solid #00954a; box-shadow: 0 2px 6px rgba(0, 0, 0, .18); cursor: grab; transition: transform .1s ease; }
.ps-thumb:focus-visible { outline: none; box-shadow: 0 0 0 5px rgba(0, 149, 74, .2), 0 2px 6px rgba(0, 0, 0, .18); }
.ps-track.dragging .ps-thumb:focus { transform: scale(1.1); cursor: grabbing; }
.ps-scale { display: flex; justify-content: space-between; font-size: 16px; color: rgba(0, 0, 0, .85); }
/* 눈금 글자를 막대 위치에 맞춤: 가운데 정렬, 양 끝은 막대 끝에 붙임 */
.ps-scale { position: relative; height: 1.5em; }
.ps-scale span { position: absolute; transform: translateX(-50%); white-space: nowrap; }
.ps-scale span:first-child { transform: none; }
.ps-scale span:last-child { transform: translateX(-100%); }
.region-pick h3 small.need { color: #c82014; font-weight: 600; }
/* 추가지역 선택 결과 상자 */
.extra-box { display: grid; gap: 6px; margin-top: -4px; }
.extra-box:empty { display: none; }
.extra-list { display: grid; gap: 8px; }
.extra-item { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-radius: 12px; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); }
.extra-item .ic { width: 18px; height: 18px; }
.extra-item b { flex: 1; font-size: 15px; }
.extra-item .x { display: grid; place-items: center; width: 28px; height: 28px; border: 0; border-radius: 50%; background: rgba(255,255,255,.7); color: inherit; cursor: pointer; }
.extra-item .x .ic { width: 16px; height: 16px; }

/* 매칭률 게이지 */
@property --p { syntax: '<number>'; inherits: false; initial-value: 0; }
.match { display: flex; align-items: center; gap: 14px; padding: 12px 14px; border-radius: 12px; background: var(--surface); box-shadow: var(--shadow-card); }
.match-ring { --p: 0; flex: none; width: 64px; height: 64px; border-radius: 50%; display: flex; align-items: center; justify-content: center; gap: 1px;
  /* 무지개: 노랑(0%) → 초록 → 파랑 → 보라 → 빨강(100%). 채워진 만큼만 보이고 나머지는 회색으로 덮음 */
  background: radial-gradient(closest-side, var(--surface) 76%, transparent 78%), conic-gradient(transparent calc(var(--p) * 1%), var(--soft) 0),
    conic-gradient(#f5c400, #3cb44b 25%, #1e88e5 50%, #8e44ad 75%, #e53935);
  transition: --p .5s cubic-bezier(.3, .7, .3, 1); }
.match-ring b { font-size: 20px; font-weight: 800; color: var(--sb-green, #006241); font-variant-numeric: tabular-nums; }
.match-ring small { font-size: 12px; font-weight: 700; color: var(--sb-green, #006241); margin-top: 4px; }
/* 숫자 색도 현재 %의 무지개 색 (색상 60°=노랑 → 360°=빨강) */
.match-ring { color: hsl(calc(60 + var(--p) * 3) 80% 40%); } /* --p는 상속 안 됨 → 링에서 계산, 숫자는 상속 */
.match-ring b, .match-ring small { color: inherit; }
.match-text { display: grid; gap: 2px; min-width: 0; }
.match-label { font-size: 13px; font-weight: 700; color: var(--muted); }
.match-text p { font-size: 14px; font-weight: 600; color: var(--ink); }
@media (prefers-reduced-motion: reduce) { .match-ring { transition: none; } }
.match-ring { width: 70px; height: 70px; } .match-ring b { font-size: 18px; letter-spacing: -.04em; } .match-ring small { font-size: 11px; }
.field-hint { margin-top: -8px; font-size: 13px; color: #a76f00; font-weight: 600; }
.pp-value.empty { color: var(--muted); font-weight: 600; }

/* 선호 노선: 역 검색 · 선택 */
.station-pick { display: grid; gap: 10px; }
.station-pick .row h3 { margin: 0; }
.st-search { display: grid; gap: 6px; }
.st-search .input-ic > .ic { position: absolute; left: 14px; width: 20px; height: 20px; color: var(--muted); }
.st-search .input-ic input { padding-left: 42px; border-radius: 50px; }
.st-results { list-style: none; margin: 0; padding: 0; max-height: 240px; overflow-y: auto; background: var(--surface); border-radius: 12px; box-shadow: var(--shadow-card); }
.st-results:empty { display: none; }
.st-item { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 12px 14px; border: 0; border-bottom: 1px solid var(--line); background: none; text-align: left; cursor: pointer; font-size: 17px; }
.st-results li:last-child .st-item { border-bottom: 0; }
.st-item:hover:not(:disabled) { background: var(--sb-light, #d4e9e2); }
.st-item:disabled { opacity: .45; cursor: default; }
.st-empty { padding: 12px 14px; color: var(--muted); font-size: 14px; }
.st-lines { display: flex; flex-wrap: wrap; gap: 4px; justify-content: flex-end; }
.line-dot { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--c); color: #fff; font-size: 11px; font-weight: 800; white-space: nowrap; }
.st-chosen { display: flex; flex-wrap: wrap; gap: 8px; }
.st-chosen:empty { display: none; }
.st-chip { display: inline-flex; align-items: center; gap: 6px; padding: 6px 6px 6px 10px; border-radius: 50px; background: var(--surface); box-shadow: var(--shadow-card); }
.st-chip b { font-size: 14px; }
.st-chip .x { display: grid; place-items: center; width: 24px; height: 24px; border: 0; border-radius: 50%; background: var(--soft); cursor: pointer; }
.st-chip .x .ic { width: 14px; height: 14px; }
.tabs-line a small { font-weight: 600; opacity: .7; margin-left: 2px; }

/* ── 홈 '내 의뢰 지도' (네이버 지도 / 임시 지도) */
.my-map { display: grid; gap: 10px; }
.map-legend { display: flex; gap: 12px; font-size: 13px; color: var(--muted); }
.map-legend span { display: inline-flex; align-items: center; gap: 5px; }
.map-legend .lg { width: 12px; height: 12px; border-radius: 50%; display: inline-block; background: var(--dot); }
.map-legend .lg.seek, .map-dot.seek { --dot: #e5322d; }
.map-legend .lg.sell, .map-dot.sell { --dot: #1f6fe5; }
.kmap { position: relative; height: 260px; border-radius: 12px; overflow: hidden; background: #eef1ea; box-shadow: var(--shadow-card); }
.fake-map { position: absolute; inset: 0; width: 100%; height: 100%; }
.dot-pos { position: absolute; transform: translate(-50%, -100%); } /* 핀 끝 = 위치 */
.pin-pos { transform: translate(-50%, -100%); }
/* 물방울 핀: 안에 숫자 (+ 내 의뢰 별) */
.map-dot { position: relative; display: block; width: 34px; height: 42px; padding: 0; border: 0; background: none; color: #fff; cursor: pointer; }
.map-dot .drop { position: absolute; inset: 0; width: 100%; height: 100%; fill: var(--dot); stroke: #fff; stroke-width: 2; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, .25)); }
.map-dot .pin-n { position: absolute; left: 0; right: 0; top: 0; height: 31px; display: grid; place-items: center; color: #fff; font-size: 15px; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; } /* 핀 머리 가운데 숫자 */
.map-dot .pin-star { position: absolute; top: -7px; left: -7px; width: 18px; height: 18px; border-radius: 50%; background: #191f28; color: #f1d9a0; font-size: 10px; font-style: normal; line-height: 1; display: grid; place-items: center; } /* 내 의뢰 */
.map-dot .dot-label { position: absolute; left: 50%; bottom: calc(100% + 8px); transform: translateX(-50%); padding: 3px 8px; border-radius: 8px;
  background: #fff; color: #222; font-size: 11px; font-weight: 700; white-space: nowrap; box-shadow: 0 1px 4px rgba(0,0,0,.18); opacity: 0; transition: opacity .15s; pointer-events: none; }
.map-dot:hover .dot-label, .map-dot:focus-visible .dot-label { opacity: 1; }
.map-dot:focus-visible { outline: 2px solid #191f28; outline-offset: 2px; border-radius: 8px; }
.map-dot:active { transform: scale(.94); }
/* 처음 동그라미와 같은 파동: 핀 머리 둘레에서 원이 퍼지며 사라짐 (동작 줄이기 설정이면 없음) */
.map-dot { isolation: isolate; }
@media (prefers-reduced-motion: no-preference) {
  .map-dot::after { content: ''; position: absolute; z-index: -1; left: 2px; top: 1px; width: 30px; height: 30px; border-radius: 50%; border: 2px solid var(--dot); animation: dot-ping 2s ease-out infinite; }
}
@keyframes dot-ping { from { transform: scale(1); opacity: .7; } to { transform: scale(2.2); opacity: 0; } }
.map-note { position: absolute; left: 10px; bottom: 8px; font-size: 11px; color: #6b7a6a; background: rgb(255 255 255 / .8); padding: 2px 8px; border-radius: 8px; }
.st-search .input-ic input:disabled { background: var(--soft); }
/* 필수 항목 * */
.req { color: #d0221a; font-weight: 800; margin-right: 3px; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.req { font-size: 1.15em; line-height: 1; vertical-align: -0.05em; }
.price-pick h3 { font-size: 16px; font-weight: 700; } /* 다른 항목 제목과 같은 크기 */

/* 구해줘요 최종 확인: 편지지 (내 의뢰서 편지와 같은 줄노트 + 테이프) */
.letter.letter-sheet { min-height: 0; margin: 14px 2px 6px; padding: 20px 16px 14px 30px; transform: rotate(-.6deg); }
.letter-sheet .letter-head { height: auto; padding-bottom: 6px; }
.letter-to { font-family: var(--f-script); font-size: 18px; color: #6b5a44; }
.letter-sheet .sheet-table { font-size: 13px; }
.letter-sheet .sheet-table dt, .letter-sheet .sheet-table dd { border: 0; padding: 0; min-height: 30px; line-height: 30px; }
.letter-sheet .sheet-table dt { color: #7a6a55; }
.letter-sheet .sheet-table dd { font-family: 'Nanum Brush Script', var(--f-script); font-size: 21px; font-weight: 400; color: #1E3932; line-height: 30px; }
.letter-sheet .sheet-table dd .muted { font-family: inherit; font-size: 18px; }
.letter-from { margin: 8px 0 0; text-align: right; font-family: 'Nanum Brush Script', var(--f-script); font-size: 22px; line-height: 30px; color: #006241; }
/* 구해줘요 작성 확인: 오래된 종이 배경 + 줄 없는 최종 확인 문서 느낌 */
.letter.letter-sheet { background: linear-gradient(rgba(255, 251, 240, .55), rgba(255, 251, 240, .55)), #e9d9b8 url('./assets/paper-old.jpg') center / cover no-repeat; /* 종이 색은 옅게 깔아 글자가 잘 보이게 */ padding: 22px 20px 16px; border-radius: 4px;
  box-shadow: 0 2px 4px rgba(60, 40, 15, .22), 0 10px 22px rgba(60, 40, 15, .14); }
.letter-sheet .letter-head { border-bottom: 2px solid rgba(90, 60, 30, .35); margin-bottom: 6px; }
.letter-sheet .letter-to { font-family: inherit; font-size: 12px; font-weight: 700; letter-spacing: .08em; color: #8b2a1c;
  border: 1.5px solid currentColor; border-radius: 4px; padding: 2px 7px; transform: rotate(-4deg); }
.letter-sheet .sheet-table dt, .letter-sheet .sheet-table dd { border-bottom: 1px dashed rgba(90, 60, 30, .28); }
.letter-sheet .sheet-table dt { color: #4a3622; font-weight: 600; }
.letter-sheet .sheet-table dd { color: #1c130a; }
.letter-sheet .sheet-table dd .muted { color: #7a6650; }
.letter-sheet .letter-head b { color: #004d33; }
.letter-sheet .letter-from { font-size: 19px; color: #4a3622; }

/* 구해줘요 단계 표시 (매칭률 박스 위) */
.stepper { display: grid; gap: 8px; margin-bottom: 10px; }
.stepper-top { display: flex; justify-content: space-between; align-items: baseline; }
.stepper-top span { font-size: 14px; font-weight: 700; color: var(--sb-house, #1E3932); }
.stepper-top b { font-size: 20px; font-weight: 800; color: var(--sb-accent, #00754A); font-variant-numeric: tabular-nums; }
.stepper-top b small { font-size: 13px; color: var(--muted); font-weight: 700; margin-left: 1px; }
.stepper-bars { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
.stepper-bars li { display: grid; gap: 6px; }
.stepper-bars i { position: relative; height: 6px; border-radius: 3px; background: #e2ddd0; overflow: hidden; }
.stepper-bars i::after { content: ''; position: absolute; inset: 0; border-radius: inherit; background: var(--sb-accent, #00754A); transform: scaleX(0); transform-origin: left; }
.stepper-bars .st-done i::after { transform: none; }
.stepper-bars .st-now i::after { transform: none; animation: step-fill .6s cubic-bezier(.3, .7, .3, 1) both; }
.stepper-bars span { font-size: 12px; font-weight: 600; color: #a39d90; }
.stepper-bars .st-done span { color: var(--sb-accent, #00754A); }
.stepper-bars .st-done span::before { content: '✓ '; }
.stepper-bars .st-now span { color: var(--sb-house, #1E3932); font-weight: 800; }
@keyframes step-fill { from { transform: scaleX(0); } }
@media (prefers-reduced-motion: reduce) { .stepper-bars .st-now i::after { animation: none; } }

/* 앱 오른쪽 스크롤 표시 (브라우저 기본 스크롤바 대신, 앱 화면 오른쪽 끝에) */
/* 페이지 스크롤바: 항상 보이고 끌 수 있는 연그레이 */
html { scrollbar-width: thin; scrollbar-color: #d4d4d4 transparent; }
html::-webkit-scrollbar { width: 8px; }
html::-webkit-scrollbar-track { background: transparent; }
html::-webkit-scrollbar-thumb { background: #d4d4d4; border-radius: 4px; border: 2px solid transparent; background-clip: content-box; }
html::-webkit-scrollbar-thumb:hover { background-color: #bdbdbd; }

/* 채팅 속 첨부 의뢰서: 작은 종이 이미지처럼 */
.bubble.attach-card { margin: 0; padding: 8px; width: min(240px, 85%); display: grid; gap: 6px; }
.attach-card figcaption { display: flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 700; opacity: .9; }
.attach-card figcaption .ic { width: 14px; height: 14px; }
.attach-paper { display: grid; gap: 1px; padding: 12px 12px 10px; border-radius: 6px; color: #1c130a;
  background: linear-gradient(rgba(255, 251, 240, .55), rgba(255, 251, 240, .55)), #e9d9b8 url('./assets/paper-old.jpg') center / cover; }
.attach-paper b { font-family: 'Nanum Brush Script', var(--f-script); font-size: 22px; font-weight: 400; color: #004d33; line-height: 1.1; }
.attach-card.sell .attach-paper b { color: #6b4f1a; }
.attach-paper small { font-family: var(--f-mono); font-size: 11px; color: #6b5236; margin-bottom: 4px; }
.attach-paper span { font-family: 'Nanum Brush Script', var(--f-script); font-size: 18px; line-height: 1.25; overflow-wrap: anywhere; }

/* 입주 희망시기: 4개 선택지를 한 줄에 같은 너비로 */
.movein-pick .chips { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.movein-pick .chip > span { display: flex; justify-content: center; width: 100%; padding-left: 6px; padding-right: 6px; white-space: nowrap; }
/* 등록 완료: AI 도사 채팅하기 — 홈화면(흰 테두리)·새 의뢰서(초록 채움) 사이에서 구별되는 연초록 */
.btn.ai-btn { border: 1px solid var(--sb-accent, #00754A); } /* soft 버튼에 초록 테두리 */
/* ── 구해줘요 / 팔아줘요 탭: 내 진행 중 의뢰 현황판 */
.todo-banner { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border-radius: var(--r); background: var(--warn-soft); color: var(--warn); }
.todo-banner > .ic { flex: none; width: 22px; height: 22px; margin-top: 2px; }
.todo-banner > div { flex: 1; display: grid; gap: 8px; }
.todo-banner p { font-size: 14px; color: #5a4a2a; }
.board-card { display: grid; gap: 12px; padding: 16px; border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow-card); }
.board-main { display: grid; gap: 8px; color: inherit; text-decoration: none; }
.board-title { font-size: 17px; font-weight: 800; color: var(--sb-house, #1E3932); }
.board-views { display: flex; align-items: center; gap: 10px; font-size: 14px; color: var(--muted); }
.board-views b { color: var(--sb-accent, #00754A); font-size: 16px; }
.board-views > .ic { width: 18px; height: 18px; color: var(--sb-accent, #00754A); }
.view-slots { display: inline-flex; gap: 5px; }
.view-slots i { width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--sb-accent, #00754A); }
.view-slots i.on { background: var(--sb-accent, #00754A); }
.board-tip { display: flex; align-items: center; gap: 8px; margin: 0; padding: 10px 12px; border-radius: 12px; background: var(--sb-light, #d4e9e2);
  color: var(--sb-house, #1E3932); font-size: 13px; text-decoration: none; }
.board-tip > .ic { flex: none; width: 16px; height: 16px; color: var(--sb-accent, #00754A); }
.board-card .btn-row { grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: 1fr; } /* 버튼 수만큼 같은 너비 */
.btn-row.three .btn { padding-left: 6px; padding-right: 6px; font-size: 14px; }
.board-empty { display: grid; justify-items: center; gap: 14px; padding: 12px 0 4px; text-align: center; }
.board-empty h2 { font-size: 19px; }
.how-to { list-style: none; margin: 0; padding: 14px 16px; width: 100%; display: grid; gap: 10px; border-radius: var(--r); background: var(--surface); text-align: left; }
.how-to li { display: flex; align-items: center; gap: 10px; font-size: 14px; }
.how-to b { flex: none; width: 24px; height: 24px; border-radius: 50%; display: grid; place-items: center; background: var(--sb-light, #d4e9e2); color: var(--sb-accent, #00754A); font-size: 13px; }
.ended-list { margin-top: 6px; }
.ended-list summary { cursor: pointer; padding: 10px 2px; font-size: 14px; font-weight: 700; color: var(--muted); }
.app-body > .btn.block { margin: 4px 0; }
.row.gap6 { gap: 6px; }
/* ── 구해줘요 / 팔아줘요 탭: 의뢰 전 준비실 */
.tool-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); gap: 10px; }
.tool-tile { display: grid; justify-items: start; gap: 4px; padding: 14px; border: 0; border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow-card);
  text-align: left; font: inherit; color: var(--sb-house, #1E3932); cursor: pointer; }
.tool-tile > .ic { width: 22px; height: 22px; color: var(--sb-accent, #00754A); margin-bottom: 4px; }
.tool-tile b { font-size: 15px; }
.tool-tile small { font-size: 12px; color: var(--muted); }
.checklist { display: grid; gap: 12px; padding: 16px; border-radius: var(--r); background: var(--surface); box-shadow: var(--shadow-card); }
.checklist .check { align-items: flex-start !important; line-height: 1.45; }
.checklist .check input { flex: none; margin-top: 2px; width: 18px; height: 18px; accent-color: var(--sb-accent, #00754A); }
.checklist .check input:checked + span { color: var(--muted); text-decoration: line-through; }
.guide { display: grid; gap: 8px; }
.guide details { padding: 12px 14px; border-radius: 12px; background: var(--surface); box-shadow: var(--shadow-card); }
.guide summary { cursor: pointer; font-weight: 700; font-size: 15px; color: var(--sb-house, #1E3932); }
.guide p { margin-top: 8px; font-size: 14px; color: var(--muted); line-height: 1.5; }
/* 구해줘요·팔아줘요 탭 상단 박스: 서비스 캐릭터가 오른쪽 아래에서 살짝 걸쳐 떠 있음 (아래는 박스에 잘림) */
.duo.with-dosa { position: relative; overflow: hidden; min-height: 168px; padding-right: 130px; }
.duo.with-dosa .float-dosa { position: absolute; right: 18px; bottom: -20px; height: auto; transform: rotate(-4deg);
  filter: drop-shadow(0 10px 12px rgba(0, 60, 40, .22)); pointer-events: none; }
@media (prefers-reduced-motion: no-preference) {
  .duo.with-dosa .float-dosa { animation: dosa-float 4.5s ease-in-out infinite; }
}
@keyframes dosa-float { 0%, 100% { transform: rotate(-4deg) translateY(0); } 50% { transform: rotate(-2deg) translateY(-6px); } }
/* 버튼 하나를 가운데에 */
.btn-one { display: flex; justify-content: center; }
.btn-one .btn { min-width: 60%; }

/* ═════════ 리디자인 B (2026-10-13): 연회색 바탕 + 흰 섹션 · 큰 슬라이드 · 입체 아이콘 타일 · 도넛/숫자 타일 · AI 원 + TOP ═════════ */
.theme-customer { --line: #e3e7e5; --muted: #6f7a75; }
.home-sec { display: grid; gap: 14px; padding: 18px; border-radius: 20px; background: var(--surface); }
.home-sec .sec-head h3, .home-links .sec-head h3 { font-size: 16px; font-weight: 800; letter-spacing: -.01em; }
/* 홈 상단: 슬라이드를 흰 판에 */
/* 홈 공지 띠: 공지 3개가 3초씩 머물렀다 위로 넘어감 (CSS만, 공지 3개 기준 키프레임) */
.notice-bar { display: flex; align-items: center; gap: 10px; padding-left: 12px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line); overflow: hidden; }
.nb-tag { flex: none; padding: 4px 9px; border-radius: 8px; background: var(--sb-accent); color: #fff; font-size: 12px; font-weight: 800; letter-spacing: .02em; } /* 왼쪽 고정 '공지' 상자 (넘어가지 않음) */
.nb-view { flex: 1; min-width: 0; height: 60px; overflow: hidden; }
.nb-roll { margin: 0; padding: 0; list-style: none; }
.nb-roll li { height: 60px; display: flex; align-items: center; gap: 10px; padding: 0 10px 0 0; }
.nb-copy { flex: 1; min-width: 0; font-size: 14.5px; font-weight: 800; line-height: 1.3; letter-spacing: -.03em; color: var(--sb-house); word-break: keep-all; }
.nb-copy em { font-style: normal; color: var(--sb-accent); box-shadow: inset 0 -6px 0 rgba(203, 162, 88, .32); } /* 금색 형광펜 */
.nb-art { flex: none; width: 40px; height: 40px; }
@media (prefers-reduced-motion: no-preference) { .nb-roll { animation: nb-roll 9s infinite; } }
@keyframes nb-roll {
  0%, 30% { transform: translateY(0); }
  33.3%, 63.3% { transform: translateY(-60px); }
  66.6%, 96.6% { transform: translateY(-120px); }
  100% { transform: translateY(-180px); }
}
.home-top { display: grid; gap: 14px; padding: 14px 0 16px; border-radius: 20px; background: var(--surface); overflow: hidden; }
.hero-wrap { position: relative; overflow: hidden; touch-action: pan-y; margin: 0 16px; border-radius: 22px; } /* 한 번에 한 장만 보임 */
.hero-wrap .track { display: flex; gap: 0; padding: 0; transition: transform .6s cubic-bezier(.2, .8, .2, 1); }
.slide { user-select: none; cursor: grab; }
.slide img { -webkit-user-drag: none; pointer-events: none; }
.slide { flex: none; width: 100%; min-height: 220px; border-radius: 22px; position: relative; overflow: hidden; padding: 22px 20px; color: #fff; text-decoration: none; }
.slide h2 { font-size: 25px; font-weight: 900; line-height: 1.28; letter-spacing: -.035em; color: #fff !important; position: relative; z-index: 1; text-shadow: 0 2px 12px rgba(0, 0, 0, .28); } /* 메인 문구: 크고 굵게 + 은은한 그림자 */
.slide p { margin-top: 8px; font-size: 12.5px; opacity: .85; position: relative; z-index: 1; max-width: calc(100% - 126px); } /* 오른쪽 아래 캐릭터 자리 비움 */
.slide-art { position: absolute; right: 12px; bottom: -14px; width: 134px; z-index: 1; display: flex; justify-content: center; align-items: flex-end; } /* 세 캐릭터 같은 자리·같은 높이, 가운데 정렬 */
.slide .mascot { filter: drop-shadow(0 12px 16px rgba(0, 0, 0, .3)); }
.slide::before { content: ''; position: absolute; width: 260px; height: 260px; right: -70px; top: -70px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, rgba(255, 255, 255, .3), rgba(255, 255, 255, 0) 60%); }
.slide.s1 { background: linear-gradient(140deg, #2c2a26, #14130f 80%); } /* 대표 문구: 먹색 바탕 + 금색 제목으로 구분 */
.slide.s1 h2 { color: #e9cf95 !important; }
.slide.s2 { background: linear-gradient(150deg, #e7f3ed, var(--sb-light)); color: var(--sb-house); } /* 구해줘요·팔아줘요: 아래 두 박스와 같은 연한 색 */
.slide.s3 { background: linear-gradient(150deg, #fbf5ea, #f1e4c8); color: #6b5521; }
.slide.s2 h2, .slide.s3 h2 { color: inherit !important; text-shadow: none; }
.slide.s2 p, .slide.s3 p { opacity: .78; }
.slide.s2::before, .slide.s3::before { background: radial-gradient(circle at 35% 35%, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0) 60%); }
.slide.s2 .mascot, .slide.s3 .mascot { filter: drop-shadow(0 10px 12px rgba(60, 50, 20, .22)); }
.pager { position: absolute; left: 20px; bottom: 18px; z-index: 2; display: flex; gap: 6px; }
.pager span, .pager button { height: 24px; border-radius: 12px; background: rgba(0, 0, 0, .28); color: #fff; font-size: 11.5px; font-weight: 700; display: grid; place-items: center; border: 0; }
.pager span { padding: 0 10px; font-variant-numeric: tabular-nums; }
.pager button { width: 24px; padding: 0; cursor: pointer; }
.pager .ic { width: 12px; height: 12px; fill: currentColor; }
.tool-tile:active, .lk:active, .rc:active { transform: scale(.96); }
.orb { width: 38px; height: 38px; border-radius: 13px; display: grid; place-items: center; color: #fff;
  box-shadow: inset 0 -6px 10px rgba(0, 0, 0, .18), inset 0 6px 10px rgba(255, 255, 255, .35), 0 8px 12px -6px var(--sh, rgba(0, 0, 0, .3)); }
.orb .ic { width: 19px; height: 19px; stroke-width: 2.3; filter: drop-shadow(0 1px 1px rgba(0, 0, 0, .25)); }
.orb b { font-size: 12px; font-weight: 900; }
.o-green { background: linear-gradient(145deg, #3fb487, var(--sb-accent)); --sh: rgba(0, 117, 74, .5); }
.o-gold { background: linear-gradient(145deg, #e3c27e, #b88a45); --sh: rgba(184, 138, 69, .5); }
.o-mint { background: linear-gradient(145deg, #8fd3b8, #3d9a77); --sh: rgba(61, 154, 119, .45); }
/* 진행 중인 내 의뢰: 칩 + 옆으로 넘기는 카드 */
.chips.filter .chip { padding: 7px 14px; border-radius: 999px; border: 1px solid #d5dbd8; background: var(--surface); font-size: 13px; font-weight: 700; color: #4a5550; cursor: pointer; }
.chips.filter .chip > span { padding: 0; border: 0; background: none; }
.chips.filter .chip.on { background: var(--sb-accent); border-color: var(--sb-accent); color: #fff; }
.hs { display: flex; gap: 10px; overflow-x: auto; scrollbar-width: none; margin-inline: -18px; padding-inline: 18px; scroll-snap-type: x mandatory; }
.hs::-webkit-scrollbar { display: none; }
.rc { flex: none; width: 216px; scroll-snap-align: start; display: grid; gap: 7px; align-content: start; padding: 14px; border: 1px solid var(--line); border-radius: 18px; background: var(--surface); color: inherit; text-decoration: none; transition: transform .2s; }
.rc[hidden] { display: none; }
.rc b { font-size: 14px; line-height: 1.4; }
.rc-art { height: 92px; border-radius: 12px; position: relative; overflow: hidden; }
.rc-art.seek { background: linear-gradient(150deg, #e3f1ea, #bfdecf); }
.rc-art.sell { background: linear-gradient(150deg, #f7efdf, #e9d5ae); }
.rc-art .mascot { position: absolute; right: 10px; bottom: -22px; filter: none; }
.rc-art .lb { position: absolute; left: 10px; top: 10px; z-index: 1; font-size: 11px; font-weight: 800; padding: 3px 8px; border-radius: 6px; background: rgba(255, 255, 255, .85); color: var(--sb-house); }
.meta { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; font-size: 12px; color: var(--muted); }
.meta i { width: 1px; height: 10px; background: #cfd5d2; }
.meta .view-slots i { width: 8px; height: 8px; }
/* 나의 바로가기: 오른쪽 둥근 화살표 */
.home-links { display: grid; gap: 8px; }
.home-links .sec-head { padding: 4px 2px 2px; }
.lk, .lk-detail summary { display: flex; justify-content: space-between; align-items: center; padding: 15px 16px; border-radius: 14px; background: var(--surface); border: 1px solid var(--line); font-size: 14px; font-weight: 600; color: inherit; text-decoration: none; transition: transform .2s; }
.lk-detail summary { cursor: pointer; list-style: none; }
.lk-detail summary::-webkit-details-marker { display: none; }
.lk-detail[open] summary { border-radius: 14px 14px 0 0; border-bottom-color: transparent; }
.lk-detail p { padding: 0 16px 14px; margin-top: -2px; border: 1px solid var(--line); border-top: 0; border-radius: 0 0 14px 14px; background: var(--surface); font-size: 13.5px; color: var(--muted); }
span.go { flex: none; width: 24px; height: 24px; border-radius: 50%; background: var(--sb-house); color: #fff; display: grid; place-items: center; transition: transform .3s; }
span.go .ic { width: 13px; height: 13px; stroke-width: 2.2; }
.lk-detail[open] .go { transform: rotate(90deg); }
/* 실시간 의뢰 현황 지도 */
.home-sec .kmap { height: clamp(340px, 55vh, 480px); box-shadow: none; border: 1px solid var(--line); border-radius: 16px; }
/* 떠 있는 AI 원 + TOP (세로) */
.ai-fab { bottom: calc(78px + env(safe-area-inset-bottom, 0px)); } /* 하단 탭 바로 위 (탭에 가리지 않음, 모든 하단 탭 화면 같은 자리) */
.ai-orb { position: relative; display: flex; align-items: center; gap: 7px; height: 54px; padding: 0 22px; border-radius: 27px; border: 2px solid #e9cf95; cursor: pointer;
  color: #fff; font-size: 16px; font-weight: 900; letter-spacing: -.01em; white-space: nowrap;
  background: linear-gradient(135deg, #2f9a6f, var(--sb-accent) 45%, var(--sb-house)); box-shadow: 0 12px 22px -8px rgba(0, 80, 50, .65), inset 0 2px 4px rgba(255, 255, 255, .3); transition: transform .2s; }
.ai-orb::after { content: ''; position: absolute; inset: -6px; border-radius: inherit; border: 2px solid rgba(0, 117, 74, .45); opacity: 0; pointer-events: none; }
@media (prefers-reduced-motion: no-preference) { .ai-orb::after { animation: ai-ping 2.6s ease-out infinite; } } /* 눈에 띄게: 은은한 파동 */
@keyframes ai-ping { 0% { opacity: .9; transform: scale(.92); } 70%, 100% { opacity: 0; transform: scale(1.18); } }
.ai-orb:active { transform: scale(.95); }
/* 하단 탭: 선택한 탭 아이콘은 채움 */
.theme-customer .tabbar a.on { color: var(--sb-house); font-weight: 800; }
.theme-customer .tabbar a.on .ic { fill: currentColor; transform: translateY(-1px) scale(1.05); }
.theme-customer .tabbar a .ic { transition: transform .4s cubic-bezier(.3, 1.4, .5, 1); }
/* 구해줘요 · 팔아줘요 탭 대표 카드 */
.svc { position: relative; overflow: hidden; display: grid; gap: 4px; align-content: start; min-height: 214px; padding: 20px; border-radius: 22px; color: #fff; text-decoration: none; }
.svc.seek { background: linear-gradient(150deg, #13704b, var(--sb-house)); }
.svc.sell { background: linear-gradient(150deg, #c79b55, #8f6a31); }
.svc small { font-size: 11.5px; font-weight: 800; letter-spacing: .08em; opacity: .75; }
.svc h2 { font-size: 22px; font-weight: 900; color: #fff !important; }
.svc p { font-size: 12.5px; opacity: .85; max-width: 12em; }
.svc-cta { justify-self: start; margin-top: 14px; display: inline-flex; align-items: center; gap: 4px; padding: 13px 16px 13px 22px; border-radius: 999px; background: #fff; color: var(--sb-house); font-size: 15.5px; font-weight: 800; position: relative; z-index: 1; box-shadow: 0 8px 16px -8px rgba(0, 0, 0, .4); } /* 의뢰서 쓰기: 크게 */
.svc.sell .svc-cta { color: #7a5826; }
.svc-cta .ic { width: 18px; height: 18px; }
.svc .svc-char { position: absolute; right: 10px; bottom: -24px; filter: drop-shadow(0 12px 16px rgba(0, 0, 0, .3)); }
.svc::before { content: ''; position: absolute; width: 220px; height: 220px; right: -60px; top: -80px; border-radius: 50%; background: radial-gradient(circle at 40% 40%, rgba(255, 255, 255, .25), rgba(255, 255, 255, 0) 60%); }
@media (prefers-reduced-motion: no-preference) { .svc .svc-char { animation: svc-float 4.5s ease-in-out infinite; } }
@keyframes svc-float { 50% { transform: translateY(-6px) rotate(1.5deg); } }
.tool-grid { grid-template-columns: repeat(3, 1fr); gap: 8px; }
.tool-grid.two { grid-template-columns: 1fr 1fr; }
.tool-tile { box-shadow: none; border: 1px solid var(--line); gap: 8px; padding: 14px 12px; transition: transform .2s; }
.tool-tile b { font-size: 13.5px; }
.tool-tile small { font-size: 11px; margin-top: -6px; }
.checklist { padding: 0; box-shadow: none; background: none; gap: 0; }
.ck { position: relative; display: flex; gap: 10px; align-items: flex-start; padding: 12px 0; border-bottom: 1px solid var(--line); font-size: 13.5px; cursor: pointer; line-height: 1.45; }
.ck:last-child { border: 0; }
.ck input { position: absolute; opacity: 0; }
.ck .bx { flex: none; width: 20px; height: 20px; border-radius: 50%; border: 1.5px solid #c3ccc8; display: grid; place-items: center; transition: background .25s, border-color .25s; }
.ck .bx .ic { width: 12px; height: 12px; color: #fff; stroke-width: 3; }
.ck input:checked + .bx { background: var(--sb-accent); border-color: var(--sb-accent); }
.ck input:checked ~ span:last-child { color: var(--muted); }
.ck input:focus-visible + .bx { outline: 2px solid var(--gold); outline-offset: 2px; }
.addr-search input { border: 1.5px solid var(--sb-accent); border-radius: 14px; min-height: 50px; }
.flow-steps { list-style: none; margin: 0; padding: 0; display: grid; }
.flow-steps li { position: relative; display: grid; grid-template-columns: 30px 1fr; gap: 10px; padding-bottom: 14px; font-size: 13.5px; }
.flow-steps li:last-child { padding-bottom: 0; }
.flow-steps li:not(:last-child)::before { content: ''; position: absolute; left: 13px; top: 28px; bottom: 0; width: 2px; background: var(--line); }
.flow-steps b { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; font-size: 12.5px; background: var(--gold-lightest); color: #8a6630; }
.flow-steps div { padding-top: 3px; }
.flow-steps small { display: block; color: var(--muted); font-size: 12px; margin-top: 2px; }
/* 내 의뢰서: 구해줘요·팔아줘요 탭과 같은 흰 머리 + 전체/구해줘요/팔아줘요 박스 버튼 · 도넛 · 숫자 타일 · 알림 */
.tabs-line.mine-seg { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; border: 0; }
.mine-seg a { display: flex; justify-content: center; align-items: center; gap: 4px; padding: 12px 0; border: 1px solid var(--line); border-radius: 14px; background: var(--surface);
  color: var(--muted); font-size: 14px; font-weight: 700; text-decoration: none; transition: background .25s, color .25s, border-color .25s; }
.mine-seg a small { font-weight: 800; opacity: 1; margin: 0; color: inherit; }
.mine-seg a.on { background: var(--sb-house); border-color: var(--sb-house); color: #fff; }
.mine-seg a:active { transform: scale(.97); }
.dash { justify-items: stretch; }
.dash-kv { text-align: center; font-size: 13px; color: var(--muted); }
.dash-kv b { color: var(--ink); }
.tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; }
.tiles .tile { display: grid; gap: 4px; justify-items: center; padding: 14px 0 12px; border-radius: 14px; border: 1px solid var(--line); box-shadow: none; font-size: 12px; color: var(--muted); background: var(--surface); }
.tiles .tile b { font-size: 22px; font-weight: 800; color: var(--ink); font-variant-numeric: tabular-nums; }
.tiles .tile.on { background: var(--sb-accent); border-color: var(--sb-accent); color: rgba(255, 255, 255, .85); }
.tiles .tile.on b { color: #fff; }
.feed { display: grid; }
.fd { display: flex; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--line); color: inherit; text-decoration: none; }
.fd:last-child { border: 0; padding-bottom: 0; }
.fd .ic { flex: none; width: 36px; height: 36px; padding: 9px; border-radius: 50%; background: var(--sb-light); color: var(--sb-accent); }
.fd b { display: block; font-size: 13.5px; font-weight: 600; line-height: 1.4; }
.fd small { font-size: 11.5px; color: var(--muted); }
.board-card { box-shadow: none; border: 1px solid var(--line); border-radius: 18px; }
/* 홈: 슬라이드 아래 구해줘요 · 팔아줘요 두 칸 */
.home-duo { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 0 16px; }
.hd { display: grid; gap: 4px; justify-items: start; padding: 16px; border-radius: 18px; color: var(--sb-house); text-decoration: none; transition: transform .2s; }
.hd:active { transform: scale(.97); }
.hd.seek { background: linear-gradient(150deg, #e7f3ed, var(--sb-light)); }
.hd.sell { background: linear-gradient(150deg, #fbf5ea, #f1e4c8); color: #6b5521; }
.hd .orb { margin-bottom: 8px; }
.hd b { font-size: 17px; font-weight: 800; }
.hd small { font-size: 12px; opacity: .8; }
/* 나의 즐겨찾기: 편집 버튼 + 고르기 창 */
.fav-edit { display: inline-flex; align-items: center; gap: 4px; padding: 6px 10px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 12.5px; font-weight: 700; cursor: pointer; }
.fav-edit .ic { width: 13px; height: 13px; }
.fav-pick { display: grid; max-height: 50vh; overflow-y: auto; padding-right: 14px; scrollbar-gutter: stable; } /* 오른쪽 스크롤 막대와 번호가 겹치지 않게 */
.fav-pick .ck { align-items: center; }
.fav-pick .ck.off { opacity: .45; cursor: not-allowed; }
.fav-no { margin-left: auto; margin-right: 4px; min-width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; font-style: normal; font-size: 12px; font-weight: 800; color: #fff; background: var(--sb-accent); }
.fav-no:empty { background: none; }
/* 알림 설정 */
.noti-sw { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 4px 0; cursor: pointer; }
.noti-sw + .noti-sw { padding-top: 14px; border-top: 1px solid var(--line); }
.noti-sw > span { display: grid; gap: 2px; }
.noti-sw b { font-size: 15px; font-weight: 700; }
.noti-sw small { font-size: 12.5px; color: var(--muted); }
.noti-sw.off { opacity: .5; cursor: not-allowed; }
/* 선택 상자 목록: 상자 바로 아래 (ui.js openSelMenu) */
.sel-menu { position: absolute; z-index: 50; margin: 0; padding: 4px; list-style: none; max-width: calc(100vw - 16px); max-height: 300px; overflow-y: auto;
  background: var(--surface, #fff); border: 1px solid var(--line); border-radius: 14px; box-shadow: 0 12px 28px -10px rgba(0, 0, 0, .3); }
.sel-menu li { padding: 8px 12px; border-radius: 8px; font-size: 15px; line-height: 1.4; letter-spacing: -.01em; color: #2b2f2d; white-space: nowrap; cursor: pointer; }
.sel-menu li:hover { background: var(--sb-light, #d4e9e2); }
.sel-menu li[aria-selected=true] { font-weight: 700; color: var(--sb-house, #1E3932); background: var(--sb-light, #d4e9e2); }

/* 작성 폼 선택 상자: 한 줄에 맞게 — 옆 여백을 줄이고 줄 너비를 나눠 가짐 (넘치면 그때만 다음 줄) */
.form .chips { gap: 6px; }
.form .chips > .chip { flex: 1 1 auto; }
.form .chips > .chip > span { width: 100%; justify-content: center; padding: 12px 8px; white-space: nowrap; }
/* 구해줘요 최종 확인: '(개인정보 제3자 제공 동의)' 바로 옆 체크박스 (처음엔 비어 있음, 글자를 누르면 내용 페이지) */
.consent-inline { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; vertical-align: middle; }
.consent-link { color: inherit; text-decoration: underline; text-underline-offset: 3px; }
.consent-inline input { flex: none; width: 20px; height: 20px; min-height: 0; padding: 0; margin: 0; accent-color: var(--sb-accent, #00754A); cursor: pointer; }
/* 개인정보 제3자 제공 동의 내용 페이지 */
.terms-doc { display: grid; gap: 14px; padding: 18px; border-radius: 16px; background: var(--surface); font-size: 15px; line-height: 1.6; }
.terms-doc dl { display: grid; grid-template-columns: 96px 1fr; gap: 10px 12px; margin: 0; padding: 14px 0; border-block: 1px solid var(--line); }
.terms-doc dt { font-weight: 700; color: var(--sb-house, #1E3932); }
.terms-doc dd { margin: 0; }
/* 동의 전 완료 버튼은 흐리게 (누르면 알림창) */
.app:has(#sw-consent:not(:checked)) [data-act=sw-submit] { opacity: .45; }

/* ═════════ 모션 (2026-10-13): 먹물 번짐+눌림 · 금박 스치기 · 카드 들림 · 화면 넘김 ═════════ */
.btn { position: relative; overflow: hidden; isolation: isolate; }
/* 먹물 번짐: 누른 자리에서 원이 퍼지며 사라짐 (ui.js가 .ink 를 넣음) */
.btn .ink { position: absolute; z-index: -1; width: 12px; height: 12px; margin: -6px 0 0 -6px; border-radius: 50%; background: currentColor; opacity: .22; pointer-events: none; animation: ink-spread .65s ease-out forwards; }
@keyframes ink-spread { to { transform: scale(var(--ink-r, 30)); opacity: 0; } }
/* 금박 스치기: 주요 버튼에 화면 진입 시 한 번, 금빛이 왼쪽 → 오른쪽 */
.btn.primary.shine::after { content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(105deg, transparent 30%, rgb(255 222 140 / .55) 48%, rgb(255 244 210 / .7) 50%, transparent 68%); transform: translateX(-110%); animation: gold-sweep 1.1s ease-out .25s forwards; }
@keyframes gold-sweep { to { transform: translateX(110%); } }
/* 카드 들림: 마우스를 올리면 살짝 떠오르고, 누르면 다시 내려앉음 */
.req-card, .rc, .row-card, .board-main, .svc, .hd { transition: transform .35s cubic-bezier(.2, .8, .3, 1), box-shadow .35s ease; }
@media (hover: hover) {
  .req-card:hover, .rc:hover, .row-card:hover, .board-main:hover, .svc:hover, .hd:hover { transform: translateY(-4px); box-shadow: 0 12px 24px -12px rgb(30 57 50 / .3); }
}
.req-card:active, .rc:active, .row-card:active, .board-main:active, .svc:active, .hd:active { transform: translateY(0); box-shadow: none; transition-duration: .15s; }
/* 화면 넘김: 다음 단계는 오른쪽에서, 이전 단계는 왼쪽에서 미끄러져 들어옴 */
.app-body.slide-next { animation: slide-from-right .5s ease-out both; }
.app-body.slide-prev { animation: slide-from-left .5s ease-out both; }
@keyframes slide-from-right { from { opacity: 0; transform: translateX(36px); } to { opacity: 1; transform: none; } }
@keyframes slide-from-left { from { opacity: 0; transform: translateX(-36px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .btn .ink, .btn.primary.shine::after { display: none; }
  .app-body.slide-next, .app-body.slide-prev { animation: none; }
  .req-card:hover, .rc:hover, .row-card:hover, .board-main:hover, .svc:hover, .hd:hover { transform: none; }
}

/* 하단 탭 가운데 '내 의뢰서': 바 위로 반쯤 떠오른 동그라미 (흰 테두리로 바와 이어짐) */
.theme-customer .tabbar { align-items: flex-end; border-radius: 22px 22px 0 0; }
.tabbar a.center { padding-top: 34px; }
.tabbar .tb-orb { position: absolute; top: -26px; left: 50%; width: 58px; height: 58px; margin-left: -29px; border-radius: 50%; display: grid; place-items: center;
  background: var(--sb-house, #1E3932); color: #fff; box-shadow: 0 0 0 5px var(--surface), 0 8px 16px -6px rgb(30 57 50 / .55);
  transition: transform .3s cubic-bezier(.3, 1.4, .5, 1), background .3s; }
.tabbar .tb-orb .ic { width: 26px; height: 26px; }
.theme-customer .tabbar a.center.on .ic { fill: none; transform: none; } /* 동그라미 안 아이콘은 채우지 않음 */
.tabbar a.center.on .tb-orb { background: var(--sb-accent, #00754A); transform: translateY(-2px); }
.tabbar a.center:active .tb-orb { transform: scale(.94); }
@media (prefers-reduced-motion: reduce) { .tabbar .tb-orb { transition: none; } }

/* 고객 홈 헤더 오른쪽: 알림 · 설정(더보기 화면) */
.hd-actions { display: flex; align-items: center; gap: 2px; }
/* ═════════ AI 도사 채팅 ═════════ */
.ai-chat { gap: 10px; padding-bottom: 4px; }
.ai-row { display: flex; align-items: flex-end; gap: 8px; max-width: 88%; }
.ai-ava { flex: none; width: 50px; height: 50px; border-radius: 50%; overflow: hidden; background: var(--sb-light, #d4e9e2); display: grid; place-items: start center; }
.ai-ava .mascot { width: 60px; height: auto; margin-top: -2px; transform-origin: 50% 90%; }
.ai-chat .bubble { font-size: 14px; line-height: 1.55; padding: 10px 13px; border-radius: 18px; }
.ai-chat .bubble.bot { max-width: none; background: var(--surface); border-bottom-left-radius: 6px; box-shadow: 0 1px 2px rgba(0, 0, 0, .06); }
.ai-chat .bubble.bot b { color: var(--sb-house, #1E3932); }
.ai-chat .bubble.me { max-width: 78%; border-bottom-right-radius: 6px; }
/* 추천 질문: 작은 칩, 도사 말풍선 아래에 정렬 */
.ai-suggest { display: flex; flex-wrap: wrap; gap: 6px; padding-left: 58px; }
.ai-chip { padding: 7px 12px; border: 1px solid var(--sb-light, #d4e9e2); border-radius: 999px; background: var(--surface); color: var(--sb-house, #1E3932);
  font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: background .2s, transform .15s; }
.ai-chip:hover { background: var(--sb-light, #d4e9e2); }
.ai-chip:active { transform: scale(.96); }
/* 입력 중… */
.ai-typing { display: inline-flex; gap: 4px; padding: 4px 2px; }
.ai-typing i { width: 7px; height: 7px; border-radius: 50%; background: #9aa5a0; animation: ai-dot 1s ease-in-out infinite; }
.ai-typing i:nth-child(2) { animation-delay: .15s; } .ai-typing i:nth-child(3) { animation-delay: .3s; }
@keyframes ai-dot { 0%, 60%, 100% { opacity: .35; transform: none; } 30% { opacity: 1; transform: translateY(-3px); } }
@media (prefers-reduced-motion: reduce) { .ai-typing i { animation: none; } }
/* 입력창: 하단 탭 바로 위에 붙어 있음 */
.ai-note { font-size: 11.5px; text-align: center; margin-bottom: 64px; } /* 아래 고정 입력창에 가리지 않게 */
.ai-composer { position: fixed; left: max(16px, calc(50% - 240px + 16px)); right: max(16px, calc(50% - 240px + 16px)); bottom: calc(86px + env(safe-area-inset-bottom, 0px)); z-index: 4; display: flex; align-items: center; gap: 6px; padding: 5px 5px 5px 16px; border-radius: 999px;
  background: var(--surface); box-shadow: 0 6px 18px -8px rgba(0, 0, 0, .25), 0 0 0 1px var(--line); }
.ai-composer input { flex: 1; min-height: 40px; padding: 0; border: 0; background: none; font-size: 15px; box-shadow: none !important; }
.ai-send { flex: none; width: 40px; height: 40px; border: 0; border-radius: 50%; display: grid; place-items: center; background: var(--sb-house, #1E3932); color: #fff; cursor: pointer; }
.ai-send .ic { width: 20px; height: 20px; stroke-width: 2.4; }
.ai-send:active { transform: scale(.94); }
/* 도사 아바타 모션: 평소엔 좌우로 살랑살랑, 답을 쓰는 중엔 위아래로 통통 */
@media (prefers-reduced-motion: no-preference) {
  .ai-ava .mascot { animation: dosa-sway 3s ease-in-out infinite; }
  .ai-row:has(.ai-typing) .ai-ava .mascot { animation: dosa-hop .6s ease-in-out infinite; }
  .ai-chat > .ai-row.bot:last-child { animation: ai-pop .35s cubic-bezier(.2, 1.3, .4, 1) both; }
}
@keyframes dosa-sway { 0%, 100% { transform: translateX(-3px) rotate(-5deg); } 50% { transform: translateX(3px) rotate(5deg); } }
@keyframes dosa-hop { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
@keyframes ai-pop { from { opacity: 0; transform: translateY(8px) scale(.97); } to { opacity: 1; transform: none; } }
/* 새 답이 아래 고정 입력창(하단 탭 위 86px + 높이 50px)에 가리지 않게 그 위까지 스크롤 */
.ai-chat > * { scroll-margin-bottom: 156px; }


/* 등기알리미: 선택한 주소 */
.reg-picked { display: flex; align-items: flex-start; gap: 10px; }
.reg-picked > .ic { flex: none; width: 22px; height: 22px; margin-top: 2px; color: var(--sb-accent, #00754A); }
.reg-picked > div { display: grid; gap: 2px; min-width: 0; }
.reg-picked small { color: var(--muted); font-size: 12px; }

/* 원 단위 금액 입력: 오른쪽 끝 '원', 아래 읽기 */
.won-ic { position: relative; display: flex; align-items: center; }
.won-ic input { padding-right: 40px; text-align: right; font-variant-numeric: tabular-nums; }
.won-ic > b { position: absolute; right: 16px; font-weight: 700; color: var(--ink, #1d2422); pointer-events: none; }
.form .won-read, .won-read { display: block; min-height: 1.2em; margin-top: 4px; font-size: 12.5px; color: var(--sb-accent, #00754A); font-weight: 600; text-align: right; }

/* 기타 옵션: 엔터로 추가한 태그 */
.opt-etc { display: grid; gap: 8px; }
.opt-etc > label { font-weight: 700; }
.opt-etc input { scroll-margin-bottom: 50vh; } /* 휴대폰 키보드에 가리지 않게 */
.opt-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.opt-tags:empty { display: none; }
.opt-tag { display: inline-flex; align-items: center; gap: 4px; padding: 6px 6px 6px 12px; border-radius: 999px; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); font-size: 14px; font-weight: 600; }
.opt-tag .x { display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 50%; background: rgb(30 57 50 / .12); color: inherit; cursor: pointer; }
.opt-tag .x .ic { width: 12px; height: 12px; stroke-width: 2.4; }
.app-body.kb-space { padding-bottom: 50vh; } /* 입력 중엔 아래 여백을 휴대폰 키보드 높이만큼 둬서 입력칸이 가운데까지 올라올 수 있게 */

/* 팔아줘요 사진 첨부: 추가 칸 + 미리보기 (정사각형 칸) */
.photo-pick { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 4px; margin-inline: -2px; padding-inline: 2px; scrollbar-width: none; } /* 옆으로 밀어서 보기 */
.photo-pick::-webkit-scrollbar { display: none; }
.photo-pick > * { flex: none; width: 96px; scroll-snap-align: start; }
.ph-add { display: grid !important; place-content: center; justify-items: center; gap: 2px; aspect-ratio: 1; border: 1.5px dashed var(--sb-accent, #00754A); border-radius: 16px;
  background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); cursor: pointer; transition: transform .15s, background .2s; }
.ph-add .ic { width: 26px; height: 26px; }
.ph-add b { font-size: 13px; }
.ph-add small { font-size: 12px; color: var(--sb-accent, #00754A); font-weight: 700; font-variant-numeric: tabular-nums; }
.ph-add:active { transform: scale(.96); }
.ph-add:has(input:focus-visible) { outline: 2px solid var(--sb-accent, #00754A); outline-offset: 2px; }
.photo-pick .ph-item { aspect-ratio: 1; border-radius: 16px; overflow: hidden; background: var(--soft); }
.photo-pick .ph-item img { width: 100%; height: 100%; object-fit: cover; }
.photo-pick .ph-item .x { display: grid; place-items: center; padding: 0; }
.photo-pick .ph-item .x .ic { width: 12px; height: 12px; stroke-width: 2.6; }
.more-fields, .more-fields > * { min-width: 0; } /* 사진 줄이 넓어도 화면을 밀지 않고 그 안에서 옆으로 밀리게 */
.photo-pick { width: 100%; max-width: 100%; }
/* 화면 넘김(옆으로 미끄러짐) 중에 내용이 화면 밖으로 나가 페이지가 넓어지지 않게 — 넓어지면 휴대폰이 화면을 축소해 맨 아래 버튼까지 스크롤이 안 됨 */
.app { overflow-x: clip; }
.grid2 > label { align-content: start; } /* 두 칸 높이가 달라도(관리비 아래 읽기 줄 등) 제목·입력칸 위치를 맞춤 */

.modal { padding-bottom: var(--kb, 0px); transition: padding-bottom .2s; } /* 휴대폰 키보드 위로 창을 올림 */

/* 매물 등록자 고르기: 버튼과 구분되는 선택 카드 (네모 · 라디오 점 · 고르면 초록 테두리) */
.reg-choice { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin: 4px 0 6px; }
.reg-opt { position: relative; display: grid; justify-items: center; gap: 8px; padding: 14px 6px 12px; border: 1.5px solid var(--line); border-radius: 14px; background: var(--bg, #f6f7f5); cursor: pointer; transition: border-color .2s, background .2s; }
.reg-opt input { position: absolute; opacity: 0; pointer-events: none; }
.reg-opt i { width: 20px; height: 20px; border-radius: 50%; border: 2px solid #c3cbc7; background: #fff; transition: border .2s; }
.reg-opt b { font-size: 15px; color: #2b2f2d; }
.reg-opt:has(input:checked) { border-color: var(--sb-accent, #00754A); background: var(--sb-light, #d4e9e2); }
.reg-opt:has(input:checked) i { border: 6px solid var(--sb-accent, #00754A); }
.reg-opt:has(input:checked) b { color: var(--sb-house, #1E3932); font-weight: 800; }
.reg-opt:has(input:focus-visible) { outline: 2px solid var(--sb-accent, #00754A); outline-offset: 2px; }
.sheet-actions { margin-top: 6px; padding-top: 14px; border-top: 1px solid var(--line); } /* 선택지와 취소·다음 버튼 사이 구분선 */

/* 휴대폰 본인인증: 방법 고르기 (PASS 앱 · 문자) */
.idv-methods { display: grid; gap: 8px; }
.idv-method { display: grid; grid-template-columns: 40px 1fr 18px; grid-template-rows: auto auto; column-gap: 12px; align-items: center; padding: 14px 14px; border: 1.5px solid var(--line); border-radius: 14px;
  background: var(--surface, #fff); text-align: left; font: inherit; color: inherit; cursor: pointer; transition: border-color .2s, background .2s; }
.idv-method > .ic:first-child { grid-row: 1 / 3; width: 40px; height: 40px; padding: 9px; border-radius: 12px; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); }
.idv-method b { font-size: 15px; }
.idv-method small { grid-column: 2; color: var(--muted); font-size: 12.5px; }
.idv-method > .ic:last-child { grid-column: 3; grid-row: 1 / 3; width: 18px; height: 18px; color: var(--muted); }
.idv-method:hover { border-color: var(--sb-accent, #00754A); }
.idv-method:active { transform: scale(.98); }
/* 데모 본인확인기관 화면 */
.idv-provider { display: grid; gap: 10px; }
.idv-provider h3 { display: flex; align-items: center; gap: 8px; }
.idv-provider h3 .ic { width: 22px; height: 22px; color: var(--sb-accent, #00754A); }
.idv-badge { justify-self: start; padding: 3px 10px; border-radius: 999px; background: #fff4d6; color: #8a5a00; font-size: 11.5px; font-weight: 700; }

/* 필수 항목 안내: 완료·다음 버튼 바로 아래 빨간 글씨 */
.form-error { margin: 8px 2px 0; color: var(--danger, #d93a2b); font-size: 13.5px; font-weight: 600; line-height: 1.5; text-align: center; }


/* 내 의뢰서: 열람한 중개사 3칸 (상자) — 누르면 바로 전화 */
.match-list { display: grid; gap: 8px; }
.match-card { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 14px 12px 14px 14px; border-radius: 16px;
  background: var(--surface, #fff); border: 1.5px solid var(--sb-light, #d4e9e2); color: inherit; text-decoration: none; transition: transform .15s, border-color .2s; }
.match-card:not(.empty):active { transform: scale(.98); }
.match-card:not(.empty):hover { border-color: var(--sb-accent, #00754A); }
.match-card .m-no { display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--sb-house, #1E3932); color: #fff; font-size: 13px; font-style: normal; font-weight: 800; }
.m-body { display: grid; gap: 2px; min-width: 0; }
.m-body b { font-size: 15px; color: var(--sb-house, #1E3932); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.m-body > span { font-size: 13px; font-weight: 600; color: #2b2f2d; }
.m-body small { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.m-call { display: grid; justify-items: center; gap: 2px; padding: 8px 10px; border-radius: 12px; background: var(--sb-accent, #00754A); color: #fff; }
.m-call .ic { width: 18px; height: 18px; }
.m-call em { font-size: 11px; font-style: normal; font-weight: 700; }
.match-card.empty { border-style: dashed; border-color: var(--line); background: transparent; }
.match-card.empty .m-no { background: #c9d1cd; }
.match-card.empty .m-body b { color: var(--muted); }
.m-body .m-phone { font-size: 13.5px; font-weight: 700; color: var(--sb-accent, #00754A); white-space: nowrap; }
/* 내 의뢰서: 상태별 개수 — 탭 바로 아래 작은 한 줄 */
/* 구해줘요 카드: 진행중인 업체 확인 → 카드 아래로 3칸 상자 펼침 */
.match-btn b { margin-left: 4px; color: var(--sb-accent, #00754A); font-variant-numeric: tabular-nums; }
.match-btn.on { border-color: var(--sb-accent, #00754A) !important; background: var(--sb-light, #d4e9e2) !important; }
.card-matches { display: grid; gap: 8px; padding-top: 12px; margin-top: 2px; border-top: 1px dashed var(--line); }
.card-matches .dash-kv { margin: 0; text-align: left; font-size: 13px; }

.detail-matches { border-top: 0; padding-top: 16px; } /* 구해줘요 상세: 열람한 중개사 3칸 */
.detail-matches h3 { font-size: 16px; }

/* 부동산 계산기: 상단 계약 종류 · 물건 종류 */
.calc-seg span { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 3px; }
.calc-seg input:disabled + span { opacity: .35; cursor: not-allowed; }
.calc-help { margin: -2px 2px 0; font-size: 12.5px; color: var(--muted); line-height: 1.5; }
.calc-seg span { white-space: nowrap; font-size: 13.5px; padding: 8px 4px; } /* '오피스텔 ?' 한 줄 */
/* 계산 결과: 큰 금액을 한가운데, 부가세 포함은 아래 줄 */
.big-result { display: grid; justify-items: center; gap: 2px; padding: 6px 0 12px; margin-bottom: 10px; border-bottom: 1px solid var(--line); text-align: center; }
.big-result b { font-size: 26px; font-weight: 800; color: var(--sb-house, #1E3932); letter-spacing: -.02em; }
.result .kv dd { text-align: right; font-weight: 600; }

/* 중개보수: 요율 · 부가세율 직접 입력 토글 */
.calc-opts { display: flex; flex-wrap: wrap; gap: 6px; }
.calc-opt { position: relative; cursor: pointer; }
.calc-opt input { position: absolute; opacity: 0; pointer-events: none; }
.calc-opt span { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 999px; border: 1px solid var(--line); background: var(--surface); font-size: 13px; font-weight: 600; color: var(--muted); }
.calc-opt span::before { content: ''; width: 14px; height: 14px; border-radius: 4px; border: 1.5px solid #c3cbc7; background: #fff; }
.calc-opt input:checked + span { border-color: var(--sb-accent, #00754A); color: var(--sb-house, #1E3932); background: var(--sb-light, #d4e9e2); }
.calc-opt input:checked + span::before { background: var(--sb-accent, #00754A) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 5 5 9-10'/%3E%3C/svg%3E") center / 10px no-repeat; border-color: var(--sb-accent, #00754A); }
.calc-opt input:focus-visible + span { outline: 2px solid var(--sb-accent, #00754A); outline-offset: 2px; }
.calc-opts:not(:has(> label:not([hidden]))) { display: none; }
/* 중개보수 (부동산계산기.com 배치): 붙은 버튼 묶음 · 네모 체크 · [이름표 | 입력 | 단위] 칸 */
.fee-form { gap: 16px; }
.bgroup { display: inline-flex; justify-self: start; max-width: 100%; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--surface); box-shadow: 0 1px 3px rgb(0 0 0 / .06); }
.form .bgroup label { position: relative; display: flex; gap: 0; }
.bgroup input { position: absolute; opacity: 0; pointer-events: none; }
.bgroup span { display: inline-flex; align-items: center; gap: 3px; padding: 11px clamp(8px, 3vw, 15px); font-size: clamp(13.5px, 3.9vw, 15px); font-weight: 600; color: var(--ink); white-space: nowrap; cursor: pointer; }
.bgroup label + label span { border-left: 1px solid var(--line); }
.bgroup input:checked + span { background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); font-weight: 800; }
.bgroup input:disabled + span { opacity: .35; cursor: not-allowed; }
.bgroup input:focus-visible + span { outline: 2px solid var(--sb-accent, #00754A); outline-offset: -2px; }
.chk-row:not(:has(> label:not([hidden]))) { display: none; }
.chk-row { display: flex; flex-wrap: wrap; gap: 10px 22px; }
.form .chk { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; font-weight: 500; cursor: pointer; }
.chk input { width: 20px; height: 20px; margin: 0; accent-color: var(--sb-accent, #00754A); cursor: pointer; }
.ig-wrap { display: grid; gap: 4px; }
.ig-wrap .won-read:empty { display: none; }
.ig-wrap[data-opt]:not([hidden]) { animation: ig-in .2s ease-out; } /* 체크하면 칸이 부드럽게 나타남 */
@keyframes ig-in { from { opacity: 0; transform: translateY(-4px); } }
@media (prefers-reduced-motion: reduce) { .ig-wrap[data-opt]:not([hidden]) { animation: none; } }
.form .in-group { display: flex; gap: 0; align-items: stretch; height: 50px; border: 1px solid var(--line); border-radius: 10px; overflow: hidden; background: var(--surface); }
.form :is(.in-group, .chk) { flex-wrap: nowrap; }
.form :is(.in-group, .chk) > input { flex-basis: auto; } /* .form label > input 의 한 줄 차지 해제 */
.in-group:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.ig-pre { min-width: 6.4em; flex: none; } /* 이름표 · 단위 폭을 맞춰 입력칸을 가지런히 */
.ig-unit { min-width: 3.8em; justify-content: center; }
.ig-pre, .ig-unit { display: flex; align-items: center; padding: 0 14px; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); font-weight: 700; font-size: 15px; white-space: nowrap; }
.in-group input { flex: 1; min-width: 0; min-height: 0; height: 100%; border: 0; border-radius: 0; padding: 0 14px; font-size: 16px; font-weight: 500; }
.in-group input:focus { box-shadow: none; }
.calc-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.calc-actions .btn { width: auto; } /* .btn-row .btn 의 꽉 찬 폭 해제: 글자 폭만큼 나란히 */
.calc-reset { padding: 0 18px; border-radius: 10px; color: var(--muted); }
.calc-reset .ic { width: 17px; height: 17px; }
@media (max-width: 359px) { .calc-reset { padding: 0 14px; } .calc-reset span { display: none; } } /* 아주 좁은 폰: 그림만, 한 줄 유지 */
.calc-go { justify-self: start; padding: 0 22px; border-radius: 10px; }
.calc-go .ic { width: 18px; height: 18px; }
/* 취득세: 질문 제목 + 선택 버튼 줄 */
.calc-q { display: grid; gap: 6px; }
.calc-q > b { font-size: 13.5px; font-weight: 700; color: var(--sb-house, #1E3932); }
.calc-due { display: flex; align-items: center; gap: 8px; margin: 10px 0 4px; padding: 10px 12px; border-radius: 12px; background: var(--sb-light, #d4e9e2); font-size: 13px; color: var(--sb-house, #1E3932); }
.calc-due .ic { width: 18px; height: 18px; flex: none; }
/* 계산 과정 4단계 */
.calc-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 0; }
.calc-steps li { display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.calc-steps li:last-child { border-bottom: 0; }
.calc-steps li > i { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); font-size: 11.5px; font-style: normal; font-weight: 800; }
.calc-steps li > div { display: grid; gap: 1px; min-width: 0; }
.calc-steps b { font-size: 14px; }
.calc-steps small { font-size: 11.5px; color: var(--muted); line-height: 1.4; }
.calc-steps em { font-style: normal; font-weight: 800; font-size: 14.5px; color: var(--sb-house, #1E3932); font-variant-numeric: tabular-nums; white-space: nowrap; }
.calc-steps li:last-child em { color: var(--sb-accent, #00754A); }
/* 요율표 */
.rate-table summary { cursor: pointer; font-weight: 700; font-size: 15px; }
.rate-table h4 { margin: 14px 0 6px; font-size: 13px; color: var(--sb-house, #1E3932); }
.rate-table table { width: 100%; border-collapse: collapse; font-size: 12.5px; font-variant-numeric: tabular-nums; }
.rate-table th, .rate-table td { padding: 7px 6px; border-bottom: 1px solid var(--line); text-align: right; }
.rate-table th:first-child, .rate-table td:first-child { text-align: left; }
.rate-table th { font-weight: 600; color: var(--muted); font-size: 11.5px; }
/* 대출이자: 상환 방법 비교 (누르면 그 방법으로 다시 계산) · 연도별 상환표 */
.loan-h { margin: 16px 0 8px; font-size: 14px; color: var(--sb-house, #1E3932); }
.loan-h small { margin-left: 4px; font-weight: 500; color: var(--muted); font-size: 12px; }
.loan-cmp { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
.loan-cmp button { display: grid; gap: 4px; align-content: start; padding: 10px 8px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); text-align: left; cursor: pointer; font: inherit; color: var(--ink); }
.loan-cmp button b { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; font-size: 13px; }
.loan-cmp button b i { padding: 1px 6px; border-radius: 999px; background: var(--sb-accent, #00754A); color: #fff; font-size: 10.5px; font-style: normal; font-weight: 700; }
.loan-cmp button span { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.loan-cmp button em { display: block; font-style: normal; font-weight: 700; font-size: 12.5px; color: var(--ink); }
.loan-cmp button.on { border-color: var(--sb-accent, #00754A); background: var(--sb-light, #d4e9e2); box-shadow: inset 0 0 0 1px var(--sb-accent, #00754A); }
.loan-table { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); }
.loan-table th, .loan-table td { white-space: normal; }
#tax-table table { table-layout: fixed; }
#tax-table th:first-child { width: 40%; }
#tax-table th, #tax-table td { white-space: normal; word-break: keep-all; overflow-wrap: anywhere; vertical-align: middle; }
#tax-table th small { font-weight: 500; }
.rate-table tr.hit td { background: var(--sb-light, #d4e9e2); font-weight: 800; color: var(--sb-house, #1E3932); }
.rate-table p { margin-top: 10px; line-height: 1.6; }

/* 더보기: 이름 상자를 누르면 내 정보 */
a.profile-mini { color: inherit; text-decoration: none; transition: transform .15s; }
a.profile-mini > div { flex: 1; }
a.profile-mini > .ic:last-child { width: 20px; height: 20px; padding: 0; background: none; color: var(--muted); }
a.profile-mini:active { transform: scale(.98); }

/* 고객 등기알리미: 내 목록 (물건지 상자) */
.reg-list { display: grid; gap: 8px; }
.reg-item { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 14px; border-radius: 16px; background: var(--surface); border: 1.5px solid var(--sb-light, #d4e9e2); }
.reg-item > .ic { width: 40px; height: 40px; padding: 9px; border-radius: 12px; background: var(--sb-light, #d4e9e2); color: var(--sb-house, #1E3932); }
.reg-item > div { display: grid; gap: 2px; min-width: 0; }
.reg-item b { font-size: 15px; color: var(--sb-house, #1E3932); line-height: 1.35; word-break: keep-all; } /* 동·호까지 다 보이게 줄바꿈 */
.reg-item small { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.reg-side { display: grid; justify-items: end; gap: 6px; }
.reg-side .link { border: 0; background: none; padding: 0; font: inherit; font-size: 12px; color: var(--muted); text-decoration: underline; cursor: pointer; }

/* 시작 화면: 로고만 (로그인 버튼 없음) */
.intro.splash { justify-content: center; cursor: pointer; }
.intro.splash .brush-wrap { flex: 0 1 auto; min-height: 60vh; }
/* 로그인 화면 닫기 = 둘러보기로 */
.intro-close { position: absolute; top: calc(14px + env(safe-area-inset-top, 0px)); left: 14px; z-index: 3; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%; color: rgba(0, 0, 0, .6); }
.intro-close .ic { width: 22px; height: 22px; }
/* 홈 상단 인사: 종 옆 '조태웅님' / 둘러보기는 '로그인' */
/* 이름 ↔ 종 그림 간격 = 종 ↔ 톱니 간격 (버튼 안 여백 8px + gap 2px + 8px = 18px) */
.hd-actions .hello { margin-right: 8px; font-size: 14px; color: var(--sb-house, #1E3932); white-space: nowrap; }
.hd-actions .hello b { font-weight: 800; }
.hd-actions span.hello { font-size: 16px; } /* 로그인한 이름 (로그인 전 '로그인' 링크는 그대로) */
.hd-actions .guest-login { padding: 6px 12px; border-radius: 999px; background: var(--sb-house, #1E3932); color: #fff; font-weight: 700; font-size: 13px; text-decoration: none; }
.guest-cta { display: block; color: inherit; text-decoration: none; }



/* 약관 · 정책 본문 */
.term-doc { gap: 8px; font-size: 14px; line-height: 1.7; word-break: keep-all; }
.term-doc h2 { font-size: 18px; margin: 0; }
.term-doc h3 { font-size: 15.5px; margin: 14px 0 0; }
.term-doc h4 { font-size: 14px; margin: 6px 0 0; color: var(--muted); }
.term-doc p { margin: 0; }
.term-doc .term-item { padding-left: 1em; text-indent: -1em; }

/* 운영 통계 (관리자): 한 차트 = 한 지표 막대, 지역 표 가로 막대. 색 #0052ff · #e8a200 = 색약 검사 통과 쌍 */
.chart-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; }
.chart { margin: 0; display: grid; gap: 8px; }
.chart figcaption { font-size: 14px; }
.bars { display: flex; align-items: flex-end; gap: 2px; height: 96px; border-bottom: 1px solid var(--line); }
.bar { flex: 1; min-width: 2px; height: var(--h); min-height: 1px; background: var(--accent); border-radius: 4px 4px 0 0; }
.bar:hover { background: var(--accent-active); }
.area-table td { position: relative; }
.hbar { display: inline-block; vertical-align: middle; height: 10px; width: calc(var(--w) * 0.7); min-width: 1px; border-radius: 0 4px 4px 0; margin-right: 6px; }
.hbar.seek, .key.seek { background: #0052ff; }
.hbar.sell, .key.sell { background: #e8a200; }
.key { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 6px; vertical-align: -1px; }
