/* ============================================================================= * B05_Profile_UI_Style_Drainage.css * 하단 종단 패널 안쪽 **우측 배수유역도** 2단 사이드 패널. * * `B05_Profile_UI_Style.css` 가 700줄을 넘겨 잘라낸 조각이다(2026-09-04). * 규칙·순서·값 그대로 옮겼다. * ========================================================================== */ /* ─── 배수유역도 패널 (하단 종단 패널 안쪽 우측 2단 사이드 패널) ──────────── */ .b05-drainage { position: relative; display: flex; /* 기본은 하단 패널의 38%. 왼쪽 경계를 끌면 --b05-drainage-width(px)가 대신 들어온다. 상한 70%는 종단면도가 최소 30%는 남게 하는 안전판(JS 쪽 클램프와 같은 값). */ width: var(--b05-drainage-width, 38%); min-width: 320px; max-width: 70%; flex: 0 0 auto; flex-direction: column; min-height: 0; border-left: 1px solid var(--color-border); background: var(--color-surface-raised); transition: width var(--transition-fast); } /* 접으면 폭만 0으로 줄고, 좌측 가장자리 핸들은 남아 다시 펼 수 있다. */ .b05-drainage.is-collapsed { width: 0; min-width: 0; } .b05-drainage.is-collapsed .b05-drainage__header, .b05-drainage.is-collapsed .b05-drainage__summary, .b05-drainage.is-collapsed .b05-drainage__viewport { display: none; } /* 좌측 가장자리 세로 중앙 핸들 — 공용 side 핸들을 패널 왼쪽 밖으로 내보낸다. 유토곡선 오버레이(z-index 5)가 그 위를 덮으면 안 보인다(2026-08-04 사용자 보고) — 위로. */ .b05-drainage .ui-workflow-overlay__handle--side { z-index: 6; right: auto; left: calc(-1 * var(--spacing-24)); border-right: 0; border-radius: var(--radius-buttons) 0 0 var(--radius-buttons); } .b05-drainage__header { display: flex; flex: 0 0 auto; flex-wrap: wrap; align-items: center; gap: var(--spacing-8); padding: var(--spacing-8) calc(var(--spacing-8) + var(--spacing-4)); border-bottom: 1px solid var(--color-border); } .b05-drainage__header h3 { margin: 0; color: var(--color-text); font-size: var(--text-body-sm); } /* 지도 좌상단 오버레이 — 표시 필터 버튼 줄 + 상태 문구(2026-08-17 사용자 지시로 헤더에서 옮겼다). 버튼 자체 여백과 별개로 지도 모서리에서 조금 띄운다. 우측 폭을 묶는 이유: 화면 오른쪽 진행단계 오버레이(z-index 200)가 지도 위를 덮어, 여기까지 늘어난 버튼은 눌리지 않는다. 그 폭(패널 절반 + 우측 여백)을 뺀다. */ .b05-drainage__map-overlay { position: absolute; z-index: 2; top: var(--spacing-8); left: var(--spacing-8); display: flex; flex-direction: column; gap: var(--spacing-4); /* 오버레이 빈 자리로는 지도 조작(팬·유역 고르기)이 그대로 통해야 한다. */ pointer-events: none; } /* 필터 버튼은 한 줄로 둔다 — 오른쪽 진행단계 오버레이에 끝이 가려도 창을 넓히거나 그 오버레이를 접으면 드러난다(2026-08-17 사용자 확정). 두 줄로 접는 쪽이 지도를 더 많이 가린다. */ .b05-drainage__layers { display: flex; flex-wrap: nowrap; gap: var(--spacing-4); pointer-events: auto; } /* 표시 토글 = 부품 「켜기」 칩 단 20(553-2 · 색 점 = 층 선 색) — 한 줄 유지 · 좁아져도 안 쭈그러듦. */ .b05-drainage__layer-button { flex: 0 0 auto; } /* 배관 우클릭 메뉴 — 뷰포트 기준 절대 위치(B04 지도와 같은 조작) · 모양은 공용 `.ui-ctx-menu`. */ .b05-drainage__context-menu { position: absolute; z-index: 6; } .b05-drainage__viewport { position: relative; flex: 1 1 auto; min-height: 0; overflow: hidden; background: var(--color-surface); /* 좌버튼은 유역선·배관 마커를 고르는 데만 쓴다. 팬 중(가운데 버튼)에만 JS가 grabbing으로 바꾼다(2026-08-01 사용자 지시). */ cursor: default; user-select: none; touch-action: none; } .b05-drainage__image, .b05-drainage__canvas { position: absolute; inset: 0; width: 100%; height: 100%; } /* 그림은 제 크기 · 원점 왼위 — 자리는 TM 겹에 맞춘 행렬(`placeMapImage` · 589-1). */ .b05-drainage__image { inset: 0 auto auto 0; width: auto; height: auto; max-width: none; max-height: none; transform-origin: 0 0; user-select: none; pointer-events: none; } .b05-drainage__canvas { pointer-events: none; } /* 상태 문구는 좌상단 오버레이가 세로로 쌓아 준다 — 필터 버튼 줄 바로 아래. */ .b05-drainage__status { color: var(--color-text-secondary); font-size: var(--text-caption); pointer-events: none; } /* 머리 줄 단추 = 부품 「단추」 단 22(553-2) — 자리만 */ .b05-drainage__analyze { margin-left: auto; } /* 머리 줄 둘째 단추([자동 제안]) — [업데이트] 우측에 나란히(auto 마진 해제). */ .b05-drainage__tool { margin-left: var(--spacing-4, 4px); } /* 유역 제원 목록 — 면적·유역표고·유하거리·관경(수식 확정 전까지 "미정"). */ /* 유역 목록은 3행까지만 보이고 나머지는 스크롤한다(2026-08-01 사용자 지시). 높이를 비율로 잡으면 유역 수와 무관하게 잘려 몇 개인지 가늠이 안 된다. */ .b05-drainage__basins { --b05-basin-row: 32px; display: flex; max-height: calc(3 * var(--b05-basin-row) + 2 * 2px + 2 * var(--spacing-8)); flex: 0 0 auto; flex-direction: column; gap: 2px; overflow-y: auto; padding: var(--spacing-8); border-top: 1px solid var(--color-border); } /* 관 개수·세부유역 수·종단 Z 출처 한 줄. */ .b05-drainage__summary { flex: 0 0 auto; padding: var(--spacing-4) var(--spacing-8); border-top: 1px solid var(--color-border); color: var(--color-text-muted, var(--color-text-body)); font-size: 12px; } .b05-drainage__summary[hidden] { display: none; } /* 유역 줄 = 부품 「목록 줄」 단 32(553-2) — 번호 원 · 제원 왼쪽 붙임 · 글 12(제원 한 줄) */ .b05-drainage__basin.ui-list-row { flex: none; justify-content: flex-start; font-size: var(--text-caption); } /* 지도 위 서클 번호와 같은 파스텔 색을 써서 목록 항목과 유역을 눈으로 잇는다. */ .b05-drainage__basin-index { display: inline-flex; width: 20px; height: 20px; flex: 0 0 auto; align-items: center; justify-content: center; border: 1px solid var(--color-border); border-radius: 50%; color: #1f2937; font-size: 11px; font-weight: 600; } .b05-drainage__basin-metrics { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* 구조물(배관) 배치로 갈라진 구배 블록 — 평소엔 값 없이 윤곽만, 선택하면 강조와 함께 값 표시. */ /* 종단도 판 자리에서 끈 배수유역도(`_Drainage_Side` · 계획서 24-2e) — 자리를 비운다. */ .b05-drainage[hidden] { display: none; } /* 배수유역 낡음(326-6) — 옛 그림 그대로 · [업데이트] 단추에 점([3D 업데이트] 꼴) · 구석 「계산 중」. */ .b05-drainage__update.is-pending { position: relative; border-color: var(--color-warning); } .b05-drainage__update.is-pending::after { content: ""; position: absolute; top: 3px; right: 3px; width: 6px; height: 6px; border-radius: 50%; background: var(--color-warning); } .b05-drainage__busy { position: absolute; right: var(--spacing-8); bottom: var(--spacing-8); } .b05-drainage__busy[hidden] { display: none; } /* 제안 목록(347-3) — 유역 목록 위 · [적용] 한 번. */ .b05-drainage__suggest { flex: 0 0 auto; border-top: 1px solid var(--color-border); padding: var(--spacing-8); font-size: var(--text-caption); color: var(--color-text-body); } .b05-drainage__suggest-head { display: flex; align-items: center; justify-content: space-between; } /* 제목이 길어도 단추가 눌려 두 줄(34)이 되지 않게 — 단 22 그대로 */ .b05-drainage__suggest-head > .ui-btn { flex: none; white-space: nowrap; } .b05-drainage__suggest-list { max-height: 6em; margin: var(--spacing-8) 0 0; padding-left: 1.2em; overflow-y: auto; } /* [자동 제안] 후보 목록(510) — 고름 칸 · 목록 위 [넣기] · [닫기]. */ .b05-drainage__proposals-list { max-height: 9em; padding-left: 0; list-style: none; } .b05-drainage__proposals .b05-drainage__suggest-head { gap: var(--spacing-8); } .b05-drainage__proposals .b05-drainage__suggest-head > span { flex: 1 1 auto; }