B05_Profile_UI_Style.css 1379줄 -> 592줄. 규칙을 값·순서 그대로 옮겨 두 조각으로 나눔. - B05_Profile_UI_Style_Table.css (515줄) — 도면 테이블·값 열 오버레이·우클릭 메뉴· 계획고 편집 버튼·줌 조작구 - B05_Profile_UI_Style_Drainage.css (289줄) — 배수유역도 패널 진입 TS 두 곳(B05_Profile_UI_Page.ts, A00_Common/b_structures_section.ts)에서 본체 다음에 순서대로 불러 캐스케이드 순서 유지. 검증: tsc --noEmit 통과, prettier 서식 유지, 공용 브라우저(5174)에서 계산 스타일 확인 (표 이름표 sticky 78px, 구배 블록 absolute, 편집 버튼 21x17, 줌 22x22, 배수유역 flex). 종단 패널 캡처가 분리 전과 **바이트 단위로 동일**(md5 ee6bc8b52adb). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
290 lines
8.8 KiB
CSS
290 lines
8.8 KiB
CSS
/* =============================================================================
|
|
* 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__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;
|
|
}
|
|
|
|
/* 표시 토글 버튼 — B04 지도 레이어 버튼(.b04-map__layer-button--gis)과 같은 양식을 쓴다.
|
|
크기(패딩·글자)만 이 패널 기준을 유지한다(2026-08-01 사용자 지시). */
|
|
.b05-drainage__layer-button {
|
|
/* 한 줄 유지 — 좁아져도 글자가 접히거나 쭈그러들지 않게 크기를 고정한다. */
|
|
flex: 0 0 auto;
|
|
white-space: nowrap;
|
|
padding: 2px var(--spacing-8);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-inputs);
|
|
background: var(--color-surface);
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--text-caption);
|
|
opacity: 0.55;
|
|
cursor: pointer;
|
|
}
|
|
|
|
/* 켜진 레이어는 그 레이어의 선 색을 테두리·글자·안쪽 링에 그대로 쓴다(지도와 바로 대조). */
|
|
.b05-drainage__layer-button.is-active {
|
|
border-color: var(--b05-layer-color, var(--color-border));
|
|
box-shadow: inset 0 0 0 1px var(--b05-layer-color, transparent);
|
|
color: var(--b05-layer-color, var(--color-text-body));
|
|
opacity: 1;
|
|
}
|
|
|
|
/* 배관 우클릭 메뉴 — 뷰포트 기준 절대 위치(B04 지도와 같은 조작). */
|
|
.b05-drainage__context-menu {
|
|
position: absolute;
|
|
z-index: 6;
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 130px;
|
|
padding: var(--spacing-4);
|
|
border: 1px solid var(--color-border);
|
|
border-radius: var(--radius-cards);
|
|
background: var(--color-surface-raised);
|
|
box-shadow: 0 4px 16px rgb(0 0 0 / 25%);
|
|
}
|
|
|
|
.b05-drainage__context-menu[hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.b05-drainage__context-menu-item {
|
|
padding: var(--spacing-8) var(--spacing-12);
|
|
border: 0;
|
|
border-radius: var(--radius-cards);
|
|
background: transparent;
|
|
color: var(--color-text-body);
|
|
font-size: 13px;
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.b05-drainage__context-menu-item:hover {
|
|
background: var(--color-surface-sunken);
|
|
}
|
|
|
|
.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%;
|
|
}
|
|
|
|
.b05-drainage__image {
|
|
object-fit: contain;
|
|
transform-origin: center;
|
|
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;
|
|
}
|
|
|
|
.b05-drainage__analyze {
|
|
margin-left: auto;
|
|
padding: 2px var(--spacing-8);
|
|
border: 1px solid
|
|
color-mix(in srgb, var(--color-royal-amethyst, rgb(109 40 217)) 55%, transparent);
|
|
border-radius: var(--radius-inputs);
|
|
background: var(--color-surface);
|
|
color: var(--color-text-body);
|
|
font-size: var(--text-caption);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.b05-drainage__analyze:disabled {
|
|
opacity: 0.45;
|
|
cursor: default;
|
|
}
|
|
|
|
/* 배관 편집 도구 버튼 — "유역 산정" 우측에 나란히(auto 마진 해제). */
|
|
.b05-drainage__tool {
|
|
margin-left: var(--spacing-4, 4px);
|
|
}
|
|
|
|
/* 배관 편집 토글 활성 상태. */
|
|
.b05-drainage__analyze.is-active {
|
|
background: color-mix(
|
|
in srgb,
|
|
var(--color-royal-amethyst, rgb(109 40 217)) 18%,
|
|
var(--color-surface)
|
|
);
|
|
border-color: var(--color-royal-amethyst, rgb(109 40 217));
|
|
}
|
|
|
|
/* 유역 제원 목록 — 면적·유역표고·유하거리·관경(수식 확정 전까지 "미정"). */
|
|
/* 유역 목록은 3행까지만 보이고 나머지는 스크롤한다(2026-08-01 사용자 지시).
|
|
높이를 비율로 잡으면 유역 수와 무관하게 잘려 몇 개인지 가늠이 안 된다. */
|
|
.b05-drainage__basins {
|
|
--b05-basin-row: 34px;
|
|
|
|
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;
|
|
}
|
|
|
|
.b05-drainage__basin {
|
|
display: flex;
|
|
min-height: var(--b05-basin-row);
|
|
align-items: center;
|
|
gap: var(--spacing-8);
|
|
padding: var(--spacing-4) var(--spacing-8);
|
|
border: 1px solid transparent;
|
|
border-radius: var(--radius-inputs);
|
|
background: none;
|
|
color: var(--color-text-body);
|
|
font-size: var(--text-caption);
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.b05-drainage__basin:hover,
|
|
.b05-drainage__basin.is-selected {
|
|
border-color: var(--color-border);
|
|
background: var(--color-surface);
|
|
}
|
|
|
|
/* 지도 위 서클 번호와 같은 파스텔 색을 써서 목록 항목과 유역을 눈으로 잇는다. */
|
|
.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;
|
|
}
|
|
|
|
/* 구조물(배관) 배치로 갈라진 구배 블록 — 평소엔 값 없이 윤곽만, 선택하면 강조와 함께 값 표시. */
|