diff --git a/A05_EduDetail/guide/B03/00_설명서.md b/A05_EduDetail/guide/B03/00_설명서.md
index 2d7ae7e01..364d845b7 100644
--- a/A05_EduDetail/guide/B03/00_설명서.md
+++ b/A05_EduDetail/guide/B03/00_설명서.md
@@ -1,9 +1,39 @@
-# 파일입력 설명서
+# 파일입력
-## 이 화면에서 하는 일
+계획노선 파일과 지형(라이다) 파일을 올려, 이후 설계의 바탕 자료를 만듦.
+
+## 여는 길
+
+- 프로젝트를 만들면 자동으로 열림.
+- 이미 만든 프로젝트는 대시보드 [프로젝트] 표의 단계 막대에서 「파일입력」 누름.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 왼쪽 패널 | 지금 단계(파일입력)와 프로젝트 이름 · 진행 안내 글 · 접기 손잡이 · [?] 도움말 |
+| 2 | [입력 파일 선택] 칸 | 파일을 끌어다 놓거나 눌러서 한꺼번에 고름 |
+| 3 | [임시 보관함] | 대시보드에 미리 올려 둔 자료를 가져옴 |
+| 4 | [파일 업로드] | 고른 파일을 서버로 올림 |
+| 5 | [LAS 없이 설계 (도엽등고선 기반)] | 라이다 없이 도엽 등고선으로 지형을 만드는 선택 |
+| 6 | [계획노선 자료] | 노선 도형 · 색인 · 속성 · 인코딩 · 좌표계 카드 다섯 |
+| 7 | [지형 자료 (LAS)] | 포인트클라우드 · 지형 좌표계 · 래스터 좌표 · 지형 래스터 카드 넷 |
+
+
+
+왼쪽 패널 그림 번호 — ① 단계 이름 · ② 패널 접기 손잡이 · ③ [?] 도움말. 이미 끝난 프로젝트는 「필수 파일 업로드와 지표면 분석이 모두 완료된 프로젝트입니다. 파일을 다시 올리면 기존 결과가 교체됩니다.」 안내가 패널에 보임.
## 작업 순서
-## 버튼
+1. 파일을 끌어다 놓거나 [입력 파일 선택] 으로 고름 → [파일 올리기](B03/01_파일_올리기).
+2. 카드마다 파일이 맞게 들어갔는지 확인 → [카드 읽는 법](B03/02_카드_읽는_법).
+3. 대시보드에 올려 둔 자료가 있으면 [임시 보관함] 으로 → [임시 보관함에서 가져오기](B03/03_임시_보관함에서_가져오기).
+4. 산림청 예정노선을 쓰면 [예정노선에서 가져오기] → [예정노선 가져오기](B03/04_예정노선_가져오기).
+5. 라이다가 없으면 [LAS 없이 설계] → [LAS 없이 설계](B03/05_LAS_없이_설계).
+6. [파일 업로드] → 분석이 끝나면 전처리 화면으로 자동 이동 → [B04](B04/00_설명서).
-## 주의할 점
+> 주의: 이미 끝난 프로젝트에 파일을 다시 올리면 기존 분석 결과가 새 파일로 교체됨.
+
+> 참고: 어떤 파일이 필요한지는 [필요한 파일](B03/10_필요한_파일) 참고.
diff --git a/A05_EduDetail/guide/B03/01_파일_올리기.md b/A05_EduDetail/guide/B03/01_파일_올리기.md
new file mode 100644
index 000000000..39729c93a
--- /dev/null
+++ b/A05_EduDetail/guide/B03/01_파일_올리기.md
@@ -0,0 +1,34 @@
+# 파일 올리기
+
+계획노선 · 지형 파일을 고르고 서버로 올림.
+
+## 여는 길
+
+- 파일입력 화면 위쪽 [입력 파일 선택] 칸과 [파일 업로드] 단추.
+
+
+
+그림 번호 — ① [입력 파일 선택] 칸 · ② [임시 보관함] · ③ [파일 업로드] · ④ [LAS 없이 설계 (도엽등고선 기반)].
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 컴퓨터의 파일들을 [입력 파일 선택] 칸 위로 끌어다 놓음 (칸을 눌러 고를 수도 있음) |
+| 2 | 확장자를 보고 파일이 알맞은 카드에 자동으로 들어감 — 카드 상태가 「완료」 나 선택 표시로 바뀜 |
+| 3 | 빠진 카드는 카드의 [파일 선택] 으로 한 칸씩 채움 |
+| 4 | 잘못 넣은 파일은 카드의 ✕ [파일 제거] 로 되돌림 |
+| 5 | 필수 카드가 모두 차면 [파일 업로드] 가 켜짐 · 누름 |
+| 6 | 카드마다 진행률 · 속도 · 예상 완료 시간이 표시됨 |
+| 7 | 올리기가 끝나면 분석이 백그라운드로 돌고, 끝나면 전처리 화면으로 자동 이동 |
+
+## 보이는 것
+
+- 올리는 동안 [파일 업로드] 단추는 「업로드 중…」 으로 바뀜.
+- 같은 칸에 이미 올라간 파일이 있으면 「기존 파일 교체 확인」 창이 뜸 — [교체] 를 누르면 기존 파일과 분석 결과(지표면 모델 등)가 바뀜, [취소] 하면 그대로.
+- 오류 글 예: 「같은 유형의 파일이 이미 선택되어 있습니다.」 · 「선택한 파일 유형이 이 카드와 맞지 않습니다.」 · 「필수 카드를 모두 채우세요 …」.
+- 올리다 중단되면 「중단된 업로드 감지」 띠가 뜸 — 같은 파일을 다시 고르고 [업로드 재개].
+
+> 주의: 계획노선 PRJ 와 지형 PRJ 는 서로 다른 칸. 라이다 PRJ 가 작업 좌표계 기준이며 노선 좌표계와 다르면 올리기가 막힘.
+
+> 참고: 큰 파일은 올리는 데 시간이 걸림. 올리는 동안 창을 닫지 않기.
diff --git a/A05_EduDetail/guide/B03/02_카드_읽는_법.md b/A05_EduDetail/guide/B03/02_카드_읽는_법.md
new file mode 100644
index 000000000..d15e309a6
--- /dev/null
+++ b/A05_EduDetail/guide/B03/02_카드_읽는_법.md
@@ -0,0 +1,52 @@
+# 카드 읽는 법
+
+계획노선과 지형 자료의 카드 아홉 장이 각각 무엇을 뜻하는지, 어떤 정보를 미리 보여 주는지.
+
+## 여는 길
+
+- 파일입력 화면의 [계획노선 자료] · [지형 자료 (LAS)] 구역.
+
+
+
+## 단계
+
+| 번호 | 부분 | 뜻 |
+| --- | --- | --- |
+| 1 | 카드 이름과 확장자 | 이 카드가 받을 파일의 종류 (예: 계획노선 도형 .shp) |
+| 2 | 상태 | 완료 · 업로드 중 · 대기 · 실패 · 선택 |
+| 3 | [파일 선택] | 이 카드에 파일을 직접 고름 |
+| 4 | 파일명과 크기 | 지금 올라가 있는 파일 |
+| 5 | 미리보기 | 파일을 읽어서 보여 주는 요약 |
+
+### 계획노선 자료
+
+그림 번호는 아래 표의 번호와 같음 — 맨 아래 [예정노선에서 가져오기] 는 [예정노선 가져오기](B03/04_예정노선_가져오기).
+
+
+
+| 번호 | 카드 | 파일 | 미리보기 |
+| --- | --- | --- | --- |
+| 1 | 계획노선 도형 | .shp | 노선 모양 |
+| 2 | 노선 도형 색인 | .shx | 도형 개수 · 범위 |
+| 3 | 노선 속성 | .dbf | 레코드 · 속성 개수 |
+| 4 | 노선 속성 인코딩 | .cpg (선택) | 인코딩 번호 |
+| 5 | 노선 좌표계 | .prj | 좌표계 이름과 번호 |
+
+### 지형 자료
+
+그림 번호는 아래 표의 번호와 같음.
+
+
+
+| 번호 | 카드 | 파일 | 미리보기 |
+| --- | --- | --- | --- |
+| 1 | 포인트클라우드 | .las · .laz | 점 5,000개를 솎아 위에서 본 모양 |
+| 2 | 지형 좌표계 | .prj | 좌표계 이름과 번호 |
+| 3 | 래스터 좌표 | .tfw | 픽셀 크기 |
+| 4 | 지형 래스터 | .tif (선택) | 지형 래스터 그림 |
+
+## 보이는 것
+
+- 계획노선이 지형 자료 범위를 벗어나면 「계획노선이 지형 자료 범위를 벗어납니다.」 · 안에 있으면 「계획노선이 지형 자료 범위 안에 있습니다.」 표시.
+
+> 참고: 지형 쪽 PRJ · TFW 는 지형 자료의 좌표계. 노선 PRJ 와 별개.
diff --git a/A05_EduDetail/guide/B03/03_임시_보관함에서_가져오기.md b/A05_EduDetail/guide/B03/03_임시_보관함에서_가져오기.md
new file mode 100644
index 000000000..af1c8170a
--- /dev/null
+++ b/A05_EduDetail/guide/B03/03_임시_보관함에서_가져오기.md
@@ -0,0 +1,28 @@
+# 임시 보관함에서 가져오기
+
+대시보드 임시 보관함에 먼저 올려 둔 자료를 이 프로젝트로 옮김. 큰 파일을 미리 올려 둘 때 편함.
+
+## 여는 길
+
+- 파일입력 화면 위쪽 [임시 보관함] 단추.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [임시 보관함] 누름 |
+| 2 | 목록에서 가져올 묶음을 고름 (이름 · 파일 개수 · 크기가 보임) |
+| 3 | [확인] |
+| 4 | 자료가 프로젝트로 옮겨지고 분석이 시작됨 |
+
+## 보이는 것
+
+그림 ① 은 창 아래 [취소] · [확인] 단추 줄. 그림은 보관 자료가 없을 때의 모습.
+
+- 옮기기가 끝나면 「보관 자료를 프로젝트로 옮겼습니다. 분석을 시작합니다.」 알림.
+- 라이다 파일이 묶음에 없으면 「파일은 옮겼지만 라이다 파일이 없어 분석을 시작하지 못했습니다.」 알림.
+- 쓸 수 있는 묶음이 없으면 「사용할 수 있는 보관 자료가 없습니다. 대시보드 임시 보관함에서 필수 파일을 모두 올려 주세요.」 안내.
+
+> 참고: 보관함에 올리는 방법은 [B01 임시 보관함](B01/04_임시_보관함).
diff --git a/A05_EduDetail/guide/B03/04_예정노선_가져오기.md b/A05_EduDetail/guide/B03/04_예정노선_가져오기.md
new file mode 100644
index 000000000..80a65ca4c
--- /dev/null
+++ b/A05_EduDetail/guide/B03/04_예정노선_가져오기.md
@@ -0,0 +1,30 @@
+# 예정노선 가져오기
+
+산림청이 우리 회사에 지정해 준 예정노선을 계획노선 칸에 바로 넣음.
+
+## 여는 길
+
+- 파일입력 화면 [계획노선 자료] 카드 맨 아래 [예정노선에서 가져오기] 단추.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [예정노선에서 가져오기] 누름 |
+| 2 | 「지정받은 예정노선 연도 고르기」 창에서 연도를 선택 |
+| 3 | 안내에 따라 [예정노선에서 가져오기] 로 확정 |
+| 4 | 「예정노선을 노선 칸에 넣었습니다.」 알림 후 노선 카드들이 채워짐 |
+
+## 보이는 것
+
+그림은 지정받은 예정노선이 없을 때의 모습 — 있으면 연도 목록이 나타남.
+
+- 지정받은 예정노선이 없으면 「우리 회사에 지정된 예정노선이 없습니다.」 안내.
+- 이미 연결된 노선은 「연결됨: 프로젝트 이름」 표시.
+- 연결한 예정노선이 나중에 바뀌면 화면 위에 「예정노선이 바뀜 …」 띠와 [다시 가져오기] 가 나타남.
+
+> 주의: 이미 분석이 끝난 프로젝트에 가져오면 기존 결과가 지워짐 — 확인 창이 한 번 더 뜸.
+
+> 참고: 받은 예정노선 목록은 [B01 받은 예정노선](B01/03_받은_예정노선).
diff --git a/A05_EduDetail/guide/B03/05_LAS_없이_설계.md b/A05_EduDetail/guide/B03/05_LAS_없이_설계.md
new file mode 100644
index 000000000..160898d3f
--- /dev/null
+++ b/A05_EduDetail/guide/B03/05_LAS_없이_설계.md
@@ -0,0 +1,25 @@
+# LAS 없이 설계
+
+라이다(LAS) 파일이 없을 때 1:5,000 수치지형도의 도엽 등고선으로 지형을 만드는 선택.
+
+## 여는 길
+
+- 파일입력 화면 위쪽 [LAS 없이 설계 (도엽등고선 기반)] 체크 칸.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | (그림 ①) [LAS 없이 설계 (도엽등고선 기반)] 에 체크 |
+| 2 | (그림 ②) 포인트클라우드 카드가 흐려지며 필수에서 빠짐 |
+| 3 | 계획노선 파일과 지형 좌표계(PRJ)만 채움 |
+| 4 | [파일 업로드] |
+
+## 보이는 것
+
+- 체크 칸 위에 마우스를 올리면 「포인트클라우드 없이 1:5,000 수치지형도 등고선으로 지형을 만듭니다.」 안내.
+- 체크한 상태에서 LAS · LAZ 파일을 넣으면 「LAS 없이 설계를 켠 상태에서는 LAS/LAZ 파일을 넣을 수 없습니다.」 표시.
+
+> 참고: 전처리 화면에서는 [도엽등고 3D 서피스] 가 지형의 바탕이 됨 → [B04 도엽등고 3D 서피스](B04/04_도엽등고_3D_서피스).
diff --git a/A05_EduDetail/guide/B03/10_필요한_파일.md b/A05_EduDetail/guide/B03/10_필요한_파일.md
index 4fe4b1b22..40e5d5747 100644
--- a/A05_EduDetail/guide/B03/10_필요한_파일.md
+++ b/A05_EduDetail/guide/B03/10_필요한_파일.md
@@ -1,5 +1,11 @@
# 필요한 파일
- 계획노선 — shapefile 한 벌(.shp·.shx·.dbf·.cpg·.prj) 5개.
+
+
+
- 지형 — 포인트클라우드 LAS/LAZ 1개와 좌표계 PRJ, 래스터 기준 TFW.
-- 지형 TIF(DEM)는 선택 사항 — 없어도 지표면 분석이 진행됩니다.
+
+
+
+- 지형 TIF(DEM)는 선택 사항 — 없어도 지표면 분석이 진행됨.
diff --git a/A05_EduDetail/guide/B03/20_고르는_방법.md b/A05_EduDetail/guide/B03/20_고르는_방법.md
index 02333ba83..0075cf534 100644
--- a/A05_EduDetail/guide/B03/20_고르는_방법.md
+++ b/A05_EduDetail/guide/B03/20_고르는_방법.md
@@ -1,5 +1,10 @@
# 고르는 방법
-- 여러 개를 한 번에 끌어 놓으면 확장자로 카드에 자동 배정됩니다.
-- 카드의 [선택]으로 한 칸씩 지정하거나 ✕로 되돌릴 수 있습니다.
-- [임시 보관함]은 대시보드에 미리 올려 둔 자료를 가져옵니다.
+- 여러 개를 한 번에 끌어 놓으면 확장자로 카드에 자동 배정됨.
+
+
+
+- 카드의 [파일 선택]으로 한 칸씩 지정하거나 ✕로 되돌릴 수 있음.
+- [임시 보관함]은 대시보드에 미리 올려 둔 자료를 가져옴.
+
+
diff --git a/A05_EduDetail/guide/B03/30_알아_둘_것.md b/A05_EduDetail/guide/B03/30_알아_둘_것.md
index e80291a60..d21d94a15 100644
--- a/A05_EduDetail/guide/B03/30_알아_둘_것.md
+++ b/A05_EduDetail/guide/B03/30_알아_둘_것.md
@@ -1,5 +1,7 @@
# 알아 둘 것
-- 이미 완료된 프로젝트에 다시 올리면 기존 분석 결과가 교체됩니다.
-- 작업 좌표계는 라이다 PRJ가 기준 — 노선 좌표계와 다르면 업로드가 막힙니다.
-- 라이다가 없으면 [LAS 없는 설계]를 켜고 도엽 등고선으로 진행합니다.
+- 이미 완료된 프로젝트에 다시 올리면 기존 분석 결과가 교체됨.
+- 작업 좌표계는 라이다 PRJ가 기준 — 노선 좌표계와 다르면 업로드가 막힘.
+- 라이다가 없으면 [LAS 없이 설계 (도엽등고선 기반)]를 켜고 도엽 등고선으로 진행함.
+
+
diff --git a/A05_EduDetail/guide/B03/B03_00_overview.webp b/A05_EduDetail/guide/B03/B03_00_overview.webp
new file mode 100644
index 000000000..3e65734e5
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_00_overview.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_01_pick_row.webp b/A05_EduDetail/guide/B03/B03_01_pick_row.webp
new file mode 100644
index 000000000..aa354ae12
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_01_pick_row.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_02_route_cards.webp b/A05_EduDetail/guide/B03/B03_02_route_cards.webp
new file mode 100644
index 000000000..4e274e342
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_02_route_cards.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_03_terrain_cards.webp b/A05_EduDetail/guide/B03/B03_03_terrain_cards.webp
new file mode 100644
index 000000000..7209a81c0
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_03_terrain_cards.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_04_card_parts.webp b/A05_EduDetail/guide/B03/B03_04_card_parts.webp
new file mode 100644
index 000000000..bb9de7589
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_04_card_parts.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_05_lasfree_on.webp b/A05_EduDetail/guide/B03/B03_05_lasfree_on.webp
new file mode 100644
index 000000000..74050dbdc
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_05_lasfree_on.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_06_temp_modal.webp b/A05_EduDetail/guide/B03/B03_06_temp_modal.webp
new file mode 100644
index 000000000..53626031d
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_06_temp_modal.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_07_plan_import_modal.webp b/A05_EduDetail/guide/B03/B03_07_plan_import_modal.webp
new file mode 100644
index 000000000..9db4c94e6
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_07_plan_import_modal.webp differ
diff --git a/A05_EduDetail/guide/B03/B03_08_left_panel.webp b/A05_EduDetail/guide/B03/B03_08_left_panel.webp
new file mode 100644
index 000000000..bdbf12fa6
Binary files /dev/null and b/A05_EduDetail/guide/B03/B03_08_left_panel.webp differ
diff --git a/A05_EduDetail/guide/B03/_scenes.json b/A05_EduDetail/guide/B03/_scenes.json
new file mode 100644
index 000000000..a3d912b18
--- /dev/null
+++ b/A05_EduDetail/guide/B03/_scenes.json
@@ -0,0 +1,330 @@
+[
+ {
+ "name": "B03_00_overview",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__pick-row"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-workflow-overlay__panel"
+ },
+ {
+ "n": 2,
+ "sel": ".b03-file__dropzone"
+ },
+ {
+ "n": 3,
+ "sel": ".b03-file__temp-picker .ui-btn"
+ },
+ {
+ "n": 4,
+ "sel": ".b03-file__pick-row > .ui-btn--filled"
+ },
+ {
+ "n": 5,
+ "sel": ".b03-file__lasfree"
+ },
+ {
+ "n": 6,
+ "sel": ".b03-file__columns > :nth-child(1) .b03-file__group-title"
+ },
+ {
+ "n": 7,
+ "sel": ".b03-file__columns > :nth-child(2) .b03-file__group-title"
+ }
+ ]
+ },
+ {
+ "name": "B03_01_pick_row",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__pick-row"
+ }
+ ],
+ "clip": ".b03-file__control-panel",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b03-file__dropzone"
+ },
+ {
+ "n": 2,
+ "sel": ".b03-file__temp-picker .ui-btn"
+ },
+ {
+ "n": 3,
+ "sel": ".b03-file__pick-row > .ui-btn--filled"
+ },
+ {
+ "n": 4,
+ "sel": ".b03-file__lasfree"
+ }
+ ]
+ },
+ {
+ "name": "B03_02_route_cards",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 2000
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__columns"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".b03-file__columns > :nth-child(1)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b03-file__columns > :nth-child(1) [data-slot-id=csv]"
+ },
+ {
+ "n": 2,
+ "sel": ".b03-file__columns > :nth-child(1) [data-slot-id=shx]"
+ },
+ {
+ "n": 3,
+ "sel": ".b03-file__columns > :nth-child(1) [data-slot-id=dbf]"
+ },
+ {
+ "n": 4,
+ "sel": ".b03-file__columns > :nth-child(1) [data-slot-id=cpg]"
+ },
+ {
+ "n": 5,
+ "sel": ".b03-file__columns > :nth-child(1) [data-slot-id=route_prj]"
+ }
+ ]
+ },
+ {
+ "name": "B03_03_terrain_cards",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 2000
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__columns"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".b03-file__columns > :nth-child(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": "[data-slot-id=las_laz]"
+ },
+ {
+ "n": 2,
+ "sel": "[data-slot-id=prj]"
+ },
+ {
+ "n": 3,
+ "sel": "[data-slot-id=tfw]"
+ },
+ {
+ "n": 4,
+ "sel": "[data-slot-id=tif]"
+ }
+ ]
+ },
+ {
+ "name": "B03_04_card_parts",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": "[data-slot-id=csv]"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": "[data-slot-id=csv]",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": "[data-slot-id=csv] .b03-file__card-label"
+ },
+ {
+ "n": 2,
+ "sel": "[data-slot-id=csv] .ui-tag"
+ },
+ {
+ "n": 3,
+ "sel": "[data-slot-id=csv] .b03-file__card-select"
+ },
+ {
+ "n": 4,
+ "sel": "[data-slot-id=csv] .b03-file__file-info"
+ },
+ {
+ "n": 5,
+ "sel": "[data-slot-id=csv] .b03-file__preview"
+ }
+ ]
+ },
+ {
+ "name": "B03_05_lasfree_on",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 1500
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__lasfree"
+ },
+ {
+ "click": ".b03-file__lasfree input"
+ },
+ {
+ "wait_ms": 800
+ },
+ {
+ "eval": "(()=>{const q=[\".b03-file__control-panel\", \"[data-slot-id=las_laz]\"];const els=q.map(s=>[...document.querySelectorAll(s)].find(e=>e.getBoundingClientRect().width>0));const rs=els.map(e=>e.getBoundingClientRect());const L=Math.min(...rs.map(r=>r.left)),T=Math.min(...rs.map(r=>r.top)),R=Math.max(...rs.map(r=>r.right)),B=Math.max(...rs.map(r=>r.bottom));const d=document.createElement('div');d.id='__clip';d.style.cssText='position:absolute;pointer-events:none;left:'+(L+scrollX)+'px;top:'+(T+scrollY)+'px;width:'+(R-L)+'px;height:'+(B-T)+'px';document.body.appendChild(d);})()"
+ }
+ ],
+ "clip": "#__clip",
+ "clip_pad": 4,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b03-file__lasfree"
+ },
+ {
+ "n": 2,
+ "sel": "[data-slot-id=las_laz]"
+ }
+ ]
+ },
+ {
+ "name": "B03_06_temp_modal",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__temp-picker .ui-btn"
+ },
+ {
+ "click": ".b03-file__temp-picker .ui-btn"
+ },
+ {
+ "wait": ".b03-file__temp-modal"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".b03-file__temp-modal",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b03-file__temp-modal-actions"
+ }
+ ]
+ },
+ {
+ "name": "B03_07_plan_import_modal",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b03-file__columns"
+ },
+ {
+ "click": "button:has-text('예정노선에서 가져오기')"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".ui-modal",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-modal__body"
+ }
+ ]
+ },
+ {
+ "name": "B03_08_left_panel",
+ "route": "#/b03-file-input",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 560
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".ui-workflow-overlay__panel"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".ui-workflow-overlay__panel",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-workflow-overlay__title"
+ },
+ {
+ "n": 2,
+ "sel": ".ui-workflow-overlay__handle--side"
+ },
+ {
+ "n": 3,
+ "sel": ".ui-workflow-overlay__panel .ui-help-btn"
+ }
+ ]
+ }
+]
\ No newline at end of file