/* ============================================================================= * B04_PreProcess_UI_Style_Map.css * 1차 워크플로우 하단 **2D 지도**와 그 도구줄·시트 툴바. * * `B04_PreProcess_UI_Style.css` 가 700줄을 넘겨 잘라낸 조각이다(2026-09-04). * 규칙·순서·값 그대로 옮겼고, 진입 TS 가 본체 다음에 불러 캐스케이드 순서도 같다. * ========================================================================== */ /* --- 하단 2D 지도 --- */ .b04-map { --b04-map-vector: var(--color-accent); display: flex; flex-direction: column; gap: var(--spacing-12); margin: var(--spacing-24); padding: var(--spacing-16); border: 1px solid var(--color-border); border-radius: var(--radius-cards); background: var(--color-surface-raised); } .b04-map__header, .b04-map__controls, .b04-map__control-group, .b04-map__layer-buttons { display: flex; align-items: center; } .b04-map__header { justify-content: space-between; gap: var(--spacing-16); } .b04-map__header h3 { font-size: var(--text-body); color: var(--color-text); } .b04-map__controls { gap: var(--spacing-12); flex-wrap: wrap; } .b04-map__control-group { gap: var(--spacing-8); color: var(--color-text-secondary); font-size: var(--text-caption); } .b04-map__layer-buttons { gap: var(--spacing-4); flex-wrap: wrap; } .b04-map__controls button { min-height: 34px; padding: 0 var(--spacing-12); border: 1px solid var(--color-border); border-radius: var(--radius-inputs); background: var(--color-canvas); color: var(--color-text-body); } .b04-map__controls button { cursor: pointer; } .b04-map__controls .b04-map__layer-button { padding: var(--spacing-8); opacity: 0.55; } .b04-map__layer-button.is-active { opacity: 1; box-shadow: inset 0 0 0 1px currentColor; } .b04-map__layer-button--gis { border-color: var(--color-border); color: var(--color-text-secondary); } .b04-map__layer-button--gis.is-active { border-color: var(--b04-layer-color); color: var(--b04-layer-color); box-shadow: inset 0 0 0 1px var(--b04-layer-color); } /* 관 매설 우클릭 메뉴 — 지도 뷰포트 기준 절대 위치. */ .b04-map__context-menu { position: absolute; z-index: 6; display: flex; flex-direction: column; min-width: 140px; 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%); } .b04-map__context-menu[hidden] { display: none; } .b04-map__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; } .b04-map__context-menu-item:hover { background: var(--color-surface-sunken); } .b04-map__viewport { position: relative; width: 100%; height: 560px; overflow: hidden; touch-action: none; /* 좌버튼은 선택 전용이라 손바닥(grab) 커서를 쓰지 않는다. 팬 중(가운데 버튼)에만 JS가 grabbing으로 바꾼다(2026-08-01 사용자 지시). */ cursor: default; user-select: none; border: 1px solid var(--color-border); border-radius: var(--radius-cards); background: var(--color-canvas); } .b04-map__image, .b04-map__canvas { position: absolute; inset: 0; width: 100%; height: 100%; } .b04-map__image { object-fit: contain; transform-origin: center; user-select: none; pointer-events: none; } .b04-map__canvas { pointer-events: none; } .b04-map__empty { position: absolute; z-index: 2; inset: 50% auto auto 50%; transform: translate(-50%, -50%); color: var(--color-text-secondary); font-size: var(--text-caption); } /* 지도 위 좌상단 문구 묶음 — 배수유역 정보 자리(2026-08-01 사용자 지시). 지도 조작을 가리지 않도록 포인터 이벤트는 통과시킨다. */ .b04-map__status-stack { position: absolute; z-index: 2; top: var(--spacing-12); left: var(--spacing-12); display: flex; max-width: min(62%, 900px); flex-direction: column; align-items: flex-start; gap: var(--spacing-4); pointer-events: none; } /* 배수유역 "분석 중…" 진행 문구 자리 — 우측 최상단(2026-08-01 사용자 지시). 결과 문구는 좌상단에 그대로 남는다. */ .b04-map__status-topright { position: absolute; z-index: 2; top: var(--spacing-12); right: var(--spacing-12); display: flex; max-width: min(40%, 360px); flex-direction: column; align-items: flex-end; gap: var(--spacing-4); pointer-events: none; } /* 객체 표시(지형지물 개수) 라벨 자리 — 우측 최하단(2026-08-01 사용자 지시). 축척은 좌하단이라 서로 겹치지 않는다. */ .b04-map__status-corner { position: absolute; z-index: 2; right: var(--spacing-12); bottom: var(--spacing-12); display: flex; max-width: min(50%, 480px); flex-direction: column; align-items: flex-end; gap: var(--spacing-4); pointer-events: none; } /* 배수유역 전용 상태 줄 — 지도 자체 상태(.b04-map__status)와 칸을 나눠 쓰면 나중에 끝난 쪽이 상대 문구를 지운다. 그래서 줄을 따로 둔다. 배경지도(위성·지적·등고선)가 복잡해 글자가 묻히므로 배경 칩을 깐다. */ .b04-map__status, .b04-map__watershed-status { display: block; padding: var(--spacing-4) var(--spacing-8); border: 1px solid var(--color-border); border-radius: var(--radius-inputs); background: color-mix(in srgb, var(--color-surface-raised) 92%, transparent); color: var(--color-text-body); font-size: var(--text-caption); line-height: 1.5; word-break: keep-all; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); } .b04-map__watershed-status[hidden] { display: none; } @media (max-width: 760px) { .b04-map__header { align-items: flex-start; flex-direction: column; } } @media (max-width: 1180px) { .b04-surface__viewers { grid-template-columns: 1fr; } } /* 도엽등고 3D 서피스 컨테이너 — 2026-08-30 */ .b04-surface__sheet-section { margin: 0 var(--spacing-24) var(--spacing-16); padding: var(--spacing-16); box-sizing: border-box; } .b04-surface__sheet-section > .terrain-model-group { margin-top: var(--spacing-12); } /* 도엽 서피스 보간 방식 전환 줄 — 2026-08-30 */ .b04-surface__sheet-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--spacing-8); margin: var(--spacing-12) 0; } .b04-surface__sheet-method { padding: 4px 10px; font-size: var(--text-caption); color: var(--color-text-body); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-cards); cursor: pointer; } .b04-surface__sheet-method:hover { border-color: var(--color-primary); } .b04-surface__sheet-method.is-active { color: var(--color-on-primary, #fff); background: var(--color-primary); border-color: var(--color-primary); } /* 아직 만들지 않은 방식 — 누르면 계산이 시작된다는 것을 눌러 보기 전에 알린다. */ .b04-surface__sheet-method.is-unbuilt:not(.is-active) { color: var(--color-text-muted, var(--color-text-body)); border-style: dashed; } .b04-surface__sheet-lidar { margin-left: auto; } /* 도엽 서피스 스무딩 드롭다운 — 방식 버튼 줄 오른쪽 끝 */ .b04-surface__sheet-smoothing { margin-left: auto; display: flex; align-items: center; gap: var(--spacing-8); font-size: var(--text-caption); } .b04-surface__sheet-smoothing .b04-surface__select { width: auto; min-width: 96px; } .b04-surface__sheet-toolbar .b04-surface__sheet-lidar { margin-left: 0; }