diff --git a/A05_EduDetail/guide/B02/00_설명서.md b/A05_EduDetail/guide/B02/00_설명서.md
index 6b093ee97..843c36ab5 100644
--- a/A05_EduDetail/guide/B02/00_설명서.md
+++ b/A05_EduDetail/guide/B02/00_설명서.md
@@ -1,9 +1,32 @@
-# 프로젝트 등록 설명서
+# 프로젝트 등록
-## 이 화면에서 하는 일
+새 임도 설계 프로젝트의 이름 · 종류 · 노선 구간 · 도면 표제란 값을 입력해 프로젝트를 만듦.
+
+## 여는 길
+
+- 대시보드 [프로젝트] 구역의 [+] → 새 프로젝트 창에서 [임도설계].
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 사업 연도 · 사업 지역 | 프로젝트명의 바탕이 되는 연도와 지역 입력 |
+| 2 | 임도 종류 · 프로젝트명 | 임도 종류 선택 · 이름은 앞 세 값으로 자동 완성(고칠 수 있음) |
+| 3 | 노선 시작 · 종료 누가거리 | 계획노선 가운데 쓸 구간(비우면 전 구간) |
+| 4 | 시행청 · 설계일자 | 도면 표제란에 들어갈 값 |
+| 5 | 과업책임자 · 분야별책임자 | 도면 표제란 책임자 선택 |
+| 6 | 설계자 | 도면 표제란 설계자 선택 |
+| 7 | 비고 | 메모(선택) |
+| 8 | 단추 줄 | [?] 도움말 · [취소] · [프로젝트 생성] → [생성과 취소](B02/04_생성과_취소) |
## 작업 순서
-## 버튼
+1. [사업 지역] 입력 → [기본 항목 입력](B02/01_기본_항목_입력).
+2. [임도 종류] 선택 → [임도 종류와 노선 구간](B02/02_임도_종류와_노선_구간).
+3. 필요하면 노선 구간 입력 → [임도 종류와 노선 구간](B02/02_임도_종류와_노선_구간).
+4. 도면 표제란 값 입력 → [도면 표제란](B02/03_도면_표제란).
+5. [프로젝트 생성] → 파일입력 화면으로 넘어감 → [생성과 취소](B02/04_생성과_취소).
-## 주의할 점
+> 주의: 임도 종류는 이후 노선설계의 설계속도 선택지와 종단기울기 상한을 정함. 만들기 전에 확인.
diff --git a/A05_EduDetail/guide/B02/01_기본_항목_입력.md b/A05_EduDetail/guide/B02/01_기본_항목_입력.md
new file mode 100644
index 000000000..83b5f5772
--- /dev/null
+++ b/A05_EduDetail/guide/B02/01_기본_항목_입력.md
@@ -0,0 +1,26 @@
+# 기본 항목 입력
+
+사업 연도 · 사업 지역 · 프로젝트명 입력.
+
+## 여는 길
+
+- 프로젝트 등록 화면 맨 위 줄.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | (그림 ①) [사업 연도] 확인 — 올해 연도가 미리 들어 있음 (2000 ~ 올해 + 5) |
+| 2 | (그림 ②) [사업 지역] 입력 (예: 울진군 금강송면) — 필수 |
+| 3 | (그림 ③) [임도 종류] 선택 |
+| 4 | (그림 ④) [프로젝트명] 확인 — 앞 세 값으로 자동 완성 |
+| 5 | 이름 중간이나 끝에 글을 덧붙이고 싶으면 [프로젝트명] 칸을 직접 고침 |
+
+## 보이는 것
+
+- [프로젝트명] 은 「사업 연도 + 사업 지역 + 임도 종류」 순으로 채워짐 (그림 ④ · 예: 2026 울진군 금강송면 간선임도).
+- 연도 · 지역 · 종류를 다시 바꿔도 직접 덧붙인 글은 그대로 남고 해당 조각만 바뀜.
+
+> 주의: [사업 지역] 이 비어 있으면 생성 안 됨 → [생성과 취소](B02/04_생성과_취소).
diff --git a/A05_EduDetail/guide/B02/02_임도_종류와_노선_구간.md b/A05_EduDetail/guide/B02/02_임도_종류와_노선_구간.md
new file mode 100644
index 000000000..43ffe814b
--- /dev/null
+++ b/A05_EduDetail/guide/B02/02_임도_종류와_노선_구간.md
@@ -0,0 +1,42 @@
+# 임도 종류와 노선 구간
+
+임도 종류를 고르고, 계획노선 중 설계에 쓸 구간(누가거리)을 정함.
+
+## 여는 길
+
+- 프로젝트 등록 화면 가운데 줄.
+
+
+
+## 단계
+
+### 임도 종류
+
+- 그림 ① [임도 종류] · ② [프로젝트명] — 종류를 바꾸면 프로젝트명 글자도 바뀜.
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [임도 종류] 칸을 누름 |
+| 2 | 간선임도 · 산불진화임도 · 작업임도 중 선택 |
+| 3 | [프로젝트명] 의 종류 글자가 함께 바뀜 |
+
+### 노선 구간
+
+
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | (그림 ①) [노선 시작 누가거리 (m)] 에 시작 위치 입력 — 비우면 처음부터 |
+| 2 | (그림 ②) [노선 종료 누가거리 (m)] 에 끝 위치 입력 — 비우면 끝까지 |
+| 3 | (그림 ②) 종료 칸 이름에 「연장 ○○m」 가 표시되는지 확인 |
+
+## 보이는 것
+
+
+
+- 시작과 종료를 모두 넣으면 종료 칸 제목에 구간 길이가 나옴 (예: 연장 2500.0m).
+- 종료가 시작보다 작거나 같은 채 [프로젝트 생성] 을 누르면 종료 칸 아래에 「종료 누가거리는 시작보다 커야 합니다.」 표시 · 프로젝트는 만들어지지 않음.
+
+> 주의: 임도 종류는 노선설계 화면의 설계속도 선택지와 종단기울기 상한 기준이 됨.
+
+> 참고: 계획노선 자료가 공사지 전체일 때 쓸 구간만 따로 정하는 칸. 한 구간 전체를 쓰면 둘 다 비워 둠.
diff --git a/A05_EduDetail/guide/B02/03_도면_표제란.md b/A05_EduDetail/guide/B02/03_도면_표제란.md
new file mode 100644
index 000000000..e9a86f395
--- /dev/null
+++ b/A05_EduDetail/guide/B02/03_도면_표제란.md
@@ -0,0 +1,25 @@
+# 도면 표제란
+
+도면 오른쪽 아래 표제란에 들어갈 시행청 · 설계일자 · 책임자를 미리 입력. 비워 두면 도면에 빈칸으로 나감.
+
+## 여는 길
+
+- 프로젝트 등록 화면 아래쪽 줄.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | (그림 ①) [시행청 (도면 표제란)] 입력 |
+| 2 | (그림 ②) [설계일자 (도면 표제란)] 에서 날짜 선택 |
+| 3 | (그림 ③ ④ ⑤) [과업책임자 (도면 표제란)] · [분야별책임자 (도면 표제란)] · [설계자 (도면 표제란)] 를 목록에서 선택 |
+| 4 | (그림 ⑥) 필요하면 [비고] 에 메모 |
+
+## 보이는 것
+
+- 세 책임자 칸은 같은 회사 팀원 목록. 처음에는 프로젝트를 만드는 본인이 선택됨.
+- 목록에 없는 사람은 대시보드 [팀원 관리] 에서 추가한 뒤 고름 → [B01 회사와 팀원](B01/05_회사와_팀원).
+
+> 참고: 나중에 대시보드 [프로젝트] 표의 [수정] 에서 같은 값을 고칠 수 있음 → [B01 프로젝트 목록](B01/02_프로젝트_목록).
diff --git a/A05_EduDetail/guide/B02/04_생성과_취소.md b/A05_EduDetail/guide/B02/04_생성과_취소.md
new file mode 100644
index 000000000..e8dfa6dca
--- /dev/null
+++ b/A05_EduDetail/guide/B02/04_생성과_취소.md
@@ -0,0 +1,28 @@
+# 생성과 취소
+
+입력을 마치고 프로젝트를 만들거나, 만들지 않고 돌아감.
+
+## 여는 길
+
+- 프로젝트 등록 화면 오른쪽 아래 단추 줄.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 필수 칸(사업 연도 · 사업 지역 · 프로젝트명)을 채움 |
+| 2 | [프로젝트 생성] 누름 |
+| 3 | 「프로젝트가 생성되었습니다. 파일 입력 단계로 이동합니다.」 알림과 함께 파일입력 화면이 열림 → [B03](B03/00_설명서) |
+| 4 | 만들지 않으려면 [취소] — 대시보드로 돌아감 |
+
+## 보이는 것
+
+
+
+- 비워 둔 필수 칸 아래에 「필수 항목을 입력하세요.」 표시.
+- 연도가 범위를 벗어나면 「숫자 범위를 벗어났습니다.」 표시.
+- 오류가 있으면 프로젝트는 만들어지지 않음.
+
+> 참고: 그림 ① [?] 는 이 화면의 도움말을 엶 · ② [취소] · ③ [프로젝트 생성].
diff --git a/A05_EduDetail/guide/B02/B02_00_overview.webp b/A05_EduDetail/guide/B02/B02_00_overview.webp
new file mode 100644
index 000000000..c8d9d367b
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_00_overview.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_01_basic_fields.webp b/A05_EduDetail/guide/B02/B02_01_basic_fields.webp
new file mode 100644
index 000000000..d3b5e7bc6
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_01_basic_fields.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_02_road_type.webp b/A05_EduDetail/guide/B02/B02_02_road_type.webp
new file mode 100644
index 000000000..e41bcac44
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_02_road_type.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_03_route_range.webp b/A05_EduDetail/guide/B02/B02_03_route_range.webp
new file mode 100644
index 000000000..1939bd8c7
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_03_route_range.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_04_title_block.webp b/A05_EduDetail/guide/B02/B02_04_title_block.webp
new file mode 100644
index 000000000..faff224a7
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_04_title_block.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_05_required_error.webp b/A05_EduDetail/guide/B02/B02_05_required_error.webp
new file mode 100644
index 000000000..26ba59046
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_05_required_error.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_06_buttons.webp b/A05_EduDetail/guide/B02/B02_06_buttons.webp
new file mode 100644
index 000000000..cb8db49e8
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_06_buttons.webp differ
diff --git a/A05_EduDetail/guide/B02/B02_07_range_error.webp b/A05_EduDetail/guide/B02/B02_07_range_error.webp
new file mode 100644
index 000000000..5a38bdad1
Binary files /dev/null and b/A05_EduDetail/guide/B02/B02_07_range_error.webp differ
diff --git a/A05_EduDetail/guide/B02/_scenes.json b/A05_EduDetail/guide/B02/_scenes.json
new file mode 100644
index 000000000..c77e0849d
--- /dev/null
+++ b/A05_EduDetail/guide/B02/_scenes.json
@@ -0,0 +1,345 @@
+[
+ {
+ "name": "B02_00_overview",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(1)\", \".b02-proj__grid > :nth-child(2)\"];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='__u1';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(3)\", \".b02-proj__grid > :nth-child(4)\"];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='__u2';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(5)\", \".b02-proj__grid > :nth-child(6)\"];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='__u3';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(7)\", \".b02-proj__grid > :nth-child(8)\"];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='__u4';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(9)\", \".b02-proj__grid > :nth-child(10)\"];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='__u5';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(11)\"];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='__u6';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);})()"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(12)\"];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='__u7';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);})()"
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ }
+ ],
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": "#__u1"
+ },
+ {
+ "n": 2,
+ "sel": "#__u2"
+ },
+ {
+ "n": 3,
+ "sel": "#__u3"
+ },
+ {
+ "n": 4,
+ "sel": "#__u4"
+ },
+ {
+ "n": 5,
+ "sel": "#__u5"
+ },
+ {
+ "n": 6,
+ "sel": "#__u6"
+ },
+ {
+ "n": 7,
+ "sel": "#__u7"
+ },
+ {
+ "n": 8,
+ "sel": ".b02-proj__actions"
+ }
+ ]
+ },
+ {
+ "name": "B02_01_basic_fields",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(2) input",
+ "value": "울진군 금강송면"
+ },
+ {
+ "wait_ms": 300
+ },
+ {
+ "wait_ms": 800
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(1)\", \".b02-proj__grid > :nth-child(4)\"];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": ".b02-proj__grid > :nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__grid > :nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".b02-proj__grid > :nth-child(3)"
+ },
+ {
+ "n": 4,
+ "sel": ".b02-proj__grid > :nth-child(4)"
+ }
+ ]
+ },
+ {
+ "name": "B02_02_road_type",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "select": ".b02-proj__grid > :nth-child(3) select",
+ "value": "fire"
+ },
+ {
+ "wait_ms": 500
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(3)\", \".b02-proj__grid > :nth-child(4)\"];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": ".b02-proj__grid > :nth-child(3)"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__grid > :nth-child(4)"
+ }
+ ]
+ },
+ {
+ "name": "B02_03_route_range",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(5) input",
+ "value": "1000"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(6) input",
+ "value": "3500"
+ },
+ {
+ "wait_ms": 500
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(5)\", \".b02-proj__grid > :nth-child(6)\"];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": ".b02-proj__grid > :nth-child(5)"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__grid > :nth-child(6)"
+ }
+ ]
+ },
+ {
+ "name": "B02_04_title_block",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(7)\", \".b02-proj__grid > :nth-child(12)\"];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": ".b02-proj__grid > :nth-child(7)"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__grid > :nth-child(8)"
+ },
+ {
+ "n": 3,
+ "sel": ".b02-proj__grid > :nth-child(9)"
+ },
+ {
+ "n": 4,
+ "sel": ".b02-proj__grid > :nth-child(10)"
+ },
+ {
+ "n": 5,
+ "sel": ".b02-proj__grid > :nth-child(11)"
+ },
+ {
+ "n": 6,
+ "sel": ".b02-proj__grid > :nth-child(12)"
+ }
+ ]
+ },
+ {
+ "name": "B02_05_required_error",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "click": ".b02-proj__actions .ui-btn--filled"
+ },
+ {
+ "wait_ms": 600
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(1)\", \".b02-proj__grid > :nth-child(2)\"];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": ".b02-proj__grid > :nth-child(2)"
+ }
+ ]
+ },
+ {
+ "name": "B02_06_buttons",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__actions"
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ }
+ ],
+ "clip": ".b02-proj__actions",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b02-proj__actions .ui-help-btn"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__actions .ui-btn--ghost:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".b02-proj__actions .ui-btn--filled"
+ }
+ ]
+ },
+ {
+ "name": "B02_07_range_error",
+ "route": "#/b02-proj-register",
+ "project": "none",
+ "before": [
+ {
+ "wait": ".b02-proj__grid"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(2) input",
+ "value": "울진군 금강송면"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(5) input",
+ "value": "3000"
+ },
+ {
+ "fill": ".b02-proj__grid > :nth-child(6) input",
+ "value": "1000"
+ },
+ {
+ "click": ".b02-proj__actions .ui-btn--filled"
+ },
+ {
+ "wait_ms": 600
+ },
+ {
+ "eval": "document.querySelectorAll('.b02-proj__grid select option').forEach(o=>{o.textContent=o.textContent.replace('엄상돈','홍길동')})"
+ },
+ {
+ "eval": "(()=>{const q=[\".b02-proj__grid > :nth-child(5)\", \".b02-proj__grid > :nth-child(6)\"];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": ".b02-proj__grid > :nth-child(5)"
+ },
+ {
+ "n": 2,
+ "sel": ".b02-proj__grid > :nth-child(6)"
+ }
+ ]
+ }
+]
\ No newline at end of file
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
diff --git a/A05_EduDetail/guide/B04/00_설명서.md b/A05_EduDetail/guide/B04/00_설명서.md
index 399e4ea5f..2dafb8fc0 100644
--- a/A05_EduDetail/guide/B04/00_설명서.md
+++ b/A05_EduDetail/guide/B04/00_설명서.md
@@ -1,9 +1,38 @@
-# 전처리 설명서
+# 전처리
-## 이 화면에서 하는 일
+올린 라이다 점들에서 땅 모양(지표면 모델)을 만들고, 그 지형 위에서 물이 어디로 모이는지(배수유역)까지 확인한 뒤 모델을 확정.
+
+## 여는 길
+
+- 파일입력의 분석이 끝나면 자동으로 열림.
+- 이미 끝난 프로젝트는 대시보드 [프로젝트] 표의 단계 막대에서 「전처리」 누름.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 입력 포인트클라우드 | 분석할 라이다 파일 선택 · 좌표계 · 크기 · 점 개수 · 높이 범위 확인 |
+| 2 | 지표면 분석 | 지면 필터 · 서피스 · 스무딩을 골라 지표면 모델 선택 |
+| 3 | 모델 표시 옵션 | 축 · 서피스 · 등고선 켜고 끄기 · 등고선 간격 · 점 크기 · 밀도 |
+| 4 | 뷰어 시점 제어 | 사시도 · 상단 · 정면 · 측면으로 시점 바꿈 |
+| 5 | 단추 줄 | [?] 도움말 · [이 모델 확정] · [초기화] |
+| 6 | 진행 띠 | 분석 진행률과 안내 글 |
+| 7 | 입력 포인트클라우드 3D | 올린 점들을 3차원으로 봄 |
+| 8 | 지표면 모델 3D | 만들어진 땅 모양과 등고선 · 계획선 |
+| 9 | 도엽등고 3D 서피스 | 수치지형도 등고선으로 만든 지형 · 라이다 지형과 겹쳐 비교 |
+| 10 | 2D 배경 지도 및 GIS 레이어 | 지도 위에 계획선 · 등고선 · 배수유역 겹쳐 보기 |
## 작업 순서
-## 버튼
+1. 입력 파일과 점 개수 확인 → [입력 포인트클라우드](B04/01_입력_포인트클라우드).
+2. 지면 필터 · 서피스 · 스무딩을 골라 지표면 모델 선택 → [지표면 분석](B04/02_지표면_분석).
+3. 3D 화면을 돌려 보며 표시 옵션 조정 → [3D 보기](B04/03_3D_보기).
+4. 도엽등고 서피스로 라이다 모델과 비교 → [도엽등고 3D 서피스](B04/04_도엽등고_3D_서피스).
+5. 2D 지도에서 배수유역 확인 → [2D 지도와 GIS 레이어](B04/05_2D_지도와_GIS_레이어) · [배수유역](B04/06_배수유역).
+6. [이 모델 확정] → 노선 설계 화면으로 이동 → [모델 확정과 초기화](B04/07_모델_확정과_초기화).
-## 주의할 점
+> 주의: 처음 보는 조합(아직 계산하지 않은 지면 필터 · 서피스)을 고르면 계산 여부를 묻고, 계산에 수 분이 걸릴 수 있음.
+
+> 참고: 이 화면에는 [저장] 단추가 없고, [이 모델 확정] 이 저장과 다음 단계 이동을 겸함.
diff --git a/A05_EduDetail/guide/B04/01_입력_포인트클라우드.md b/A05_EduDetail/guide/B04/01_입력_포인트클라우드.md
new file mode 100644
index 000000000..0436d62bb
--- /dev/null
+++ b/A05_EduDetail/guide/B04/01_입력_포인트클라우드.md
@@ -0,0 +1,27 @@
+# 입력 포인트클라우드
+
+분석에 쓸 라이다 파일을 고르고 파일 정보를 확인.
+
+## 여는 길
+
+- 전처리 화면 왼쪽 패널 맨 위 [입력 포인트클라우드] 카드.
+
+
+
+그림 번호 — ① 입력 LAS 선택 칸 · ② 파일 정보 줄.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 선택 칸에서 분석할 입력 LAS 선택 (대개 하나) |
+| 2 | 아래 정보 줄 확인 |
+| 3 | 오른쪽 위 3D 화면에서 점이 제대로 보이는지 확인 |
+
+## 보이는 것
+
+- 정보 줄: 좌표계(EPSG 번호) · 크기(MB) · 포인트 수 · 표시 포인트 수 · 높이 범위(m).
+- 포인트 수가 크면 화면에는 50만 개 정도로 솎아 보여 줌(「500,000개 점 표시 중」).
+- 선택한 지면 필터에 따라 포인트 수가 달라짐(땅 점만 남기 때문).
+
+> 참고: 분석할 라이다 파일이 없으면 「분석 가능한 LAS/LAZ 파일이 없습니다.」 표시. [LAS 없이 설계] 로 올린 프로젝트는 도엽등고 서피스를 씀 → [B03 LAS 없이 설계](B03/05_LAS_없이_설계).
diff --git a/A05_EduDetail/guide/B04/02_지표면_분석.md b/A05_EduDetail/guide/B04/02_지표면_분석.md
new file mode 100644
index 000000000..3e57a52ca
--- /dev/null
+++ b/A05_EduDetail/guide/B04/02_지표면_분석.md
@@ -0,0 +1,43 @@
+# 지표면 분석
+
+지면 필터 · 서피스 · 스무딩 세 가지를 골라 지표면 모델을 정함.
+
+## 여는 길
+
+- 전처리 화면 왼쪽 패널 [지표면 분석] 카드.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [지면 필터] 선택 — 나무 · 건물 점을 걷어내고 땅 점만 고르는 방법 |
+| 2 | [서피스] 선택 — 땅 점들을 면으로 만드는 방법 |
+| 3 | [스무딩] 에서 적용 또는 미적용 |
+| 4 | 오른쪽 위 3D 화면의 지표면 모델이 바뀌는지 확인 |
+
+그림 번호는 아래 표의 번호와 같음.
+
+| 번호 | 칸 | 선택지 |
+| --- | --- | --- |
+| 1 | 지면 필터 | CLASSIFICATION · GRID MIN Z · CSF · PMF |
+| 2 | 서피스 | TIN · DTM · NURBS · IMPLICIT · MESHFREE |
+| 3 | 스무딩 | 적용 · 미적용 |
+
+- CLASSIFICATION: 라이다 업체가 이미 분류해 둔 지면 점을 그대로 씀.
+- GRID MIN Z: 격자마다 가장 낮은 점을 땅으로 봄.
+- CSF: 지형을 뒤집어 가상의 천을 떨어뜨려 땅 점을 고름.
+- PMF: 창 크기를 키워 가며 나무 · 구조물을 단계적으로 걷어냄.
+
+## 보이는 것
+
+
+
+- 그림 ① 은 [서피스] 칸. 아직 계산하지 않은 조합을 고르면 「이 조합(…)은 아직 만들어지지 않았습니다. 지금 계산해 영구 저장할까요? 자료량에 따라 수 분이 걸립니다.」 확인 창이 뜸.
+- [계산하기] 를 누르면 계산해 저장하고, [취소] 하면 이전 조합으로 돌아감.
+- 서피스에 따라 스무딩이 안 되는 경우 「이 지표면 표현은 스무딩을 지원하지 않습니다.」 표시.
+
+> 주의: [계산하기] 는 오래 걸리고 창을 닫으면 안 됨 — 「지표면 모델 계산 중… 창을 닫지 마세요.」 표시 동안 기다림.
+
+> 참고: 이미 계산해 둔 조합은 바로 바뀜. 어느 조합이 가장 알맞은지 판단은 설계자가 정함.
diff --git a/A05_EduDetail/guide/B04/03_3D_보기.md b/A05_EduDetail/guide/B04/03_3D_보기.md
new file mode 100644
index 000000000..17fc21ffa
--- /dev/null
+++ b/A05_EduDetail/guide/B04/03_3D_보기.md
@@ -0,0 +1,53 @@
+# 3D 보기
+
+입력 포인트클라우드와 지표면 모델을 3차원으로 돌려 보고, 표시 옵션과 시점을 바꿈.
+
+## 여는 길
+
+- 전처리 화면 위쪽 3D 화면 둘 · 왼쪽 패널의 [모델 표시 옵션] · [뷰어 시점 제어].
+
+
+
+그림 번호 — ① 입력 포인트클라우드 아래 점 개수 글 · ② 축척 막대 · ③ 방위 표시 · ④ 등고선 라벨.
+
+## 단계
+
+### 마우스로 보기
+
+| 조작 | 하는 일 |
+| --- | --- |
+| 왼쪽 단추를 누른 채 끌기 | 가리킨 점을 중심으로 돌림 |
+| 휠 | 가리킨 자리를 기준으로 가까이 · 멀리 |
+| 가운데(휠) 단추를 누른 채 끌기 | 화면을 옮김 |
+
+### 표시 옵션
+
+
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | (그림 ① — 첫 단추 [축] 과 같은 줄의 [서피스] · [등고선]) 단추로 보이는 것을 켜고 끔 |
+| 2 | (그림 ② ③) 등고선을 켠 뒤 [간격] 칸에 숫자(m)를 넣고 [적용] |
+| 3 | (그림 ④) [점 크기] 슬라이더로 점의 굵기 조정 |
+| 4 | (그림 ⑤) [밀도] 슬라이더로 보이는 점의 비율 조정 |
+
+### 시점 바꾸기
+
+
+
+그림 번호는 아래 표 순서와 같음.
+
+| 단추 | 시점 |
+| --- | --- |
+| 사시도 | 비스듬히 내려다봄 |
+| 상단 | 바로 위에서 봄 |
+| 정면 | 앞쪽에서 봄 |
+| 측면 | 옆에서 봄 |
+
+## 보이는 것
+
+- 지표면 모델 화면에는 축척 막대 · 방위 표시 · 높이 색 범례 · 등고선 라벨(예: 850m) · 계획선이 함께 보임.
+- 등고선을 처음 켜면 「등고선을 그리는 중…」 표시 후 나타남.
+- 등고선 옵션 줄 아래에 현재 조합 요약(예: CLASSIFICATION · DTM · 등고선 1m)이 보임.
+
+> 참고: 점 크기와 밀도를 줄이면 오래된 컴퓨터에서 3D 화면이 부드러워짐.
diff --git a/A05_EduDetail/guide/B04/04_도엽등고_3D_서피스.md b/A05_EduDetail/guide/B04/04_도엽등고_3D_서피스.md
new file mode 100644
index 000000000..e3ce88205
--- /dev/null
+++ b/A05_EduDetail/guide/B04/04_도엽등고_3D_서피스.md
@@ -0,0 +1,33 @@
+# 도엽등고 3D 서피스
+
+1:5,000 수치지형도(도엽)의 등고선만으로 만든 지형 모델. 라이다 모델과 비교하거나 라이다가 없을 때의 지형으로 씀.
+
+## 여는 길
+
+- 전처리 화면 가운데 [도엽등고 3D 서피스] 구역(3D 화면 둘 바로 아래).
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 위쪽 단추 줄에서 만드는 방법 선택 — TIN(도엽선) · TIN 격자 · TPS(박판) · ANUDEM형 · 다중해상도 · 라플라스 |
+| 2 | [스무딩] 에서 적용 또는 미적용 |
+| 3 | [라이다 겹쳐 보기] 에 체크하면 라이다 지표면과 겹쳐 비교 |
+| 4 | 3D 화면을 돌려 두 모델의 차이를 확인 |
+
+| 번호 | 칸 | 하는 일 |
+| --- | --- | --- |
+| 1 | 방법 단추 줄 | 도엽 등고선으로 면을 만드는 방법 선택 |
+| 2 | 스무딩 | 면을 매끈하게 다듬음 |
+| 3 | 라이다 겹쳐 보기 | 라이다 모델과 겹침 |
+
+## 보이는 것
+
+- 위 그림은 현재 [라플라스] 가 진하게 표시된 모습.
+- 흐리게 보이는 방법은 아직 만들어지지 않은 것. 누르면 계산할지 묻는 확인 창이 뜸.
+- 지금 쓰는 방법은 진한 색으로 표시됨.
+- 라이다 지표면 모델이 없으면 「겹쳐 볼 라이다 지표면 모델이 없습니다.」 표시.
+
+> 참고: 3D 보는 조작은 위의 3D 화면과 같음 → [3D 보기](B04/03_3D_보기).
diff --git a/A05_EduDetail/guide/B04/05_2D_지도와_GIS_레이어.md b/A05_EduDetail/guide/B04/05_2D_지도와_GIS_레이어.md
new file mode 100644
index 000000000..254484824
--- /dev/null
+++ b/A05_EduDetail/guide/B04/05_2D_지도와_GIS_레이어.md
@@ -0,0 +1,38 @@
+# 2D 지도와 GIS 레이어
+
+배경 지도 위에 계획선 · 지적 · 행정구역 · 등고선 같은 국가 GIS 자료를 겹쳐 봄.
+
+## 여는 길
+
+- 전처리 화면 맨 아래 [2D 배경 지도 및 GIS 레이어] 구역.
+
+
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [배경 지도] 줄에서 백지도 · 위성 · 하이브리드 가운데 선택 |
+| 2 | [국가 GIS 레이어] 줄에서 보고 싶은 층 단추를 눌러 켜고 끔 |
+| 3 | 지도 위에서 휠로 확대 · 축소, 가운데 단추를 끌어 옮김 |
+| 4 | 처음 모습으로 돌아가려면 [보기 초기화] |
+
+| 번호 | 줄 | 단추 |
+| --- | --- | --- |
+| 1 | 배경 지도 | 백지도 · 위성 · 하이브리드 |
+| 2 | 국가 GIS 레이어 | 계획선 · 연속지적도 · 시군구 · 읍면동 · 등고선 · 도엽 등고선 · 세류(전체) · 표고점 · 성절토 · 옹벽석축 · 등고 라벨 |
+| 3 | 배수유역 | 유역 분석 · 1차 유역 · 2차 유역 · 유역 방향 · 평균 흐름 · 흐름 강도 · 집중유역 · 상세유역 분석 · 세부유역 |
+| 4 | 보기 초기화 | 확대와 위치를 처음으로 |
+
+## 보이는 것
+
+
+
+- 그림 ① 지도 오른쪽 아래 「○○개 객체 표시」 · ② 왼쪽 아래 축척 막대 · ③ 오른쪽 흐름 강도 색 범례 · ④ 위쪽 분석 결과 요약 글.
+- 켠 단추는 색 테두리로 표시됨.
+- 지도 오른쪽 아래에 「○○개 객체 표시」 · 왼쪽 아래에 축척 막대.
+- 흐름 강도를 켜면 오른쪽에 색 범례 · 위쪽에 분석 결과 요약 글이 나옴.
+- 지도를 불러오는 중에는 「지도 레이어를 불러오는 중입니다.」 · 실패하면 「지도 레이어를 불러오지 못했습니다.」 표시.
+- 계획선은 파일입력에서 올린 노선. 올리지 않았으면 「B03에서 계획노선 파일을 올리면 표시됩니다.」 표시.
+
+> 참고: 마우스 왼쪽 단추는 지도 위 객체를 고르는 데만 쓰고, 지도 이동은 가운데 단추.
diff --git a/A05_EduDetail/guide/B04/06_배수유역.md b/A05_EduDetail/guide/B04/06_배수유역.md
new file mode 100644
index 000000000..60a43460c
--- /dev/null
+++ b/A05_EduDetail/guide/B04/06_배수유역.md
@@ -0,0 +1,40 @@
+# 배수유역
+
+계획선 둘레에서 물이 어디로 모여 흘러드는지 지도에서 분석해 보고, 관이 들어갈 자리를 정함.
+
+## 여는 길
+
+- 전처리 화면 맨 아래 지도 구역의 [배수유역] 줄.
+
+
+
+그림 번호 — ③ 흐름 강도 색 범례 · ④ 분석 결과 요약 글(자세한 번호는 [2D 지도와 GIS 레이어](B04/05_2D_지도와_GIS_레이어) 참고).
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [유역 분석] 을 누름 — 30초 안팎 걸림 · 결과는 저장되어 다음에 열면 바로 보임 |
+| 2 | [1차 유역] · [2차 유역] · [유역 방향] · [평균 흐름] 을 켜고 끄며 결과 확인 |
+| 3 | [흐름 강도] 로 도로 1m마다 모이는 상류 면적을 색으로 확인 |
+| 4 | [집중유역] 으로 물이 특히 많이 모이는 자리(마커) 확인 · 마커를 누르면 그 자리로 들어오는 면의 외곽선이 보임 |
+| 5 | [상세유역 분석] 을 누르면 관 매설 지점을 기준으로 [세부유역] 을 나눔 |
+
+### 관 매설 지점 고르기
+
+| 조작 | 하는 일 |
+| --- | --- |
+| 계획선 위에서 오른쪽 단추 | [관 매설 추가] |
+| 마커 위에서 오른쪽 단추 | [관 매설 삭제] |
+| 마커를 끌기 | 계획선을 따라 자리 옮김 |
+
+## 보이는 것
+
+- 분석 중에는 「배수유역을 처음부터 다시 분석하는 중입니다. 30초 안팎 걸립니다…」 표시.
+- 저장된 결과가 있으면 [저장분] 표시와 함께 면적 · 유하장 같은 요약 글.
+- 관 요약 글 예: 「관 1개(기본 1 / 자동 0 / 수동 0) · 세부유역 2개」.
+- 관끼리 너무 가까우면 「관끼리 최소 간격 ○○m 안에는 넣을 수 없습니다.」.
+
+> 주의: 관을 고친 뒤에는 [상세유역 분석] 을 다시 눌러야 세부유역이 새로 나뉨(「편집 중」 표시).
+
+> 참고: 분석 결과와 관 매설 지점은 [이 모델 확정] 때 함께 저장됨 → [모델 확정과 초기화](B04/07_모델_확정과_초기화).
diff --git a/A05_EduDetail/guide/B04/07_모델_확정과_초기화.md b/A05_EduDetail/guide/B04/07_모델_확정과_초기화.md
new file mode 100644
index 000000000..c33861710
--- /dev/null
+++ b/A05_EduDetail/guide/B04/07_모델_확정과_초기화.md
@@ -0,0 +1,31 @@
+# 모델 확정과 초기화
+
+고른 지표면 모델과 표시 설정을 확정해 노선 설계로 넘어가거나, 화면 값을 확정된 상태로 되돌림.
+
+## 여는 길
+
+- 전처리 화면 왼쪽 패널 맨 아래 단추 줄.
+
+
+
+그림 번호 — ① [?] · ② [이 모델 확정] · ③ [초기화].
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 지면 필터 · 서피스 · 스무딩과 등고선 간격을 정함 |
+| 2 | 배수유역을 분석했다면 관 매설 지점을 확인 |
+| 3 | [이 모델 확정] 누름 |
+| 4 | 「모델을 확정했습니다. 필터: …, 기법: …」 알림과 함께 노선 설계 화면(B05)으로 이동 |
+| 5 | 화면 값을 확정 상태로 되돌리려면 [초기화] |
+
+## 보이는 것
+
+- 확정하면 선택한 모델 · 스무딩 · 등고선 간격과 관 매설 지점이 함께 저장됨.
+- [초기화] 는 지면 필터 · 서피스를 기본으로 되돌리고 확정된 값을 다시 불러옴.
+- 오류 시 「모델 확정에 실패했습니다.」 알림.
+
+> 주의: 확정하면 이전 확정 값이 새 값으로 바뀜. 누르기 전에 지면 필터 · 서피스 · 스무딩 선택을 한 번 더 확인.
+
+> 참고: [?] 는 이 화면의 도움말.
diff --git a/A05_EduDetail/guide/B04/B04_00_overview.webp b/A05_EduDetail/guide/B04/B04_00_overview.webp
new file mode 100644
index 000000000..a8049d8ad
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_00_overview.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_01_input_cloud.webp b/A05_EduDetail/guide/B04/B04_01_input_cloud.webp
new file mode 100644
index 000000000..e2057a634
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_01_input_cloud.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_02_analysis_card.webp b/A05_EduDetail/guide/B04/B04_02_analysis_card.webp
new file mode 100644
index 000000000..93010404c
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_02_analysis_card.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_03_build_confirm.webp b/A05_EduDetail/guide/B04/B04_03_build_confirm.webp
new file mode 100644
index 000000000..b341e5c72
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_03_build_confirm.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_04_display_options.webp b/A05_EduDetail/guide/B04/B04_04_display_options.webp
new file mode 100644
index 000000000..53662ab14
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_04_display_options.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_05_view_controls.webp b/A05_EduDetail/guide/B04/B04_05_view_controls.webp
new file mode 100644
index 000000000..cbf0e98d4
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_05_view_controls.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_06_confirm_reset.webp b/A05_EduDetail/guide/B04/B04_06_confirm_reset.webp
new file mode 100644
index 000000000..56ac79ba5
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_06_confirm_reset.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_07_two_viewers.webp b/A05_EduDetail/guide/B04/B04_07_two_viewers.webp
new file mode 100644
index 000000000..1e14a6e7a
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_07_two_viewers.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_08_sheet_surface.webp b/A05_EduDetail/guide/B04/B04_08_sheet_surface.webp
new file mode 100644
index 000000000..72aba3361
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_08_sheet_surface.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_09_map_layers.webp b/A05_EduDetail/guide/B04/B04_09_map_layers.webp
new file mode 100644
index 000000000..f381b9881
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_09_map_layers.webp differ
diff --git a/A05_EduDetail/guide/B04/B04_10_map_view.webp b/A05_EduDetail/guide/B04/B04_10_map_view.webp
new file mode 100644
index 000000000..c8fa1aeba
Binary files /dev/null and b/A05_EduDetail/guide/B04/B04_10_map_view.webp differ
diff --git a/A05_EduDetail/guide/B04/_scenes.json b/A05_EduDetail/guide/B04/_scenes.json
new file mode 100644
index 000000000..e40cde8a8
--- /dev/null
+++ b/A05_EduDetail/guide/B04/_scenes.json
@@ -0,0 +1,404 @@
+[
+ {
+ "name": "B04_00_overview",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 2000
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__viewers"
+ },
+ {
+ "wait_ms": 2500
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(3)"
+ },
+ {
+ "n": 4,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4)"
+ },
+ {
+ "n": 5,
+ "sel": ".ui-sidebar-actions"
+ },
+ {
+ "n": 6,
+ "sel": ".b04-surface__status"
+ },
+ {
+ "n": 7,
+ "sel": ".point-viewer"
+ },
+ {
+ "n": 8,
+ "sel": ".b04-surface__viewers > .terrain-model-group"
+ },
+ {
+ "n": 9,
+ "sel": ".b04-surface__sheet-section"
+ },
+ {
+ "n": 10,
+ "sel": ".b04-map"
+ }
+ ]
+ },
+ {
+ "name": "B04_01_input_cloud",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__form"
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(1)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(1) select"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-surface__input-info"
+ }
+ ]
+ },
+ {
+ "name": "B04_02_analysis_card",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__form"
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2) .b04-surface__field:nth-of-type(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2) .b04-surface__field:nth-of-type(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2) .b04-surface__field:nth-of-type(3)"
+ }
+ ]
+ },
+ {
+ "name": "B04_03_build_confirm",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__form"
+ },
+ {
+ "select": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2) select >> nth=1",
+ "value": "NURBS"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(2) select >> nth=1"
+ }
+ ]
+ },
+ {
+ "name": "B04_04_display_options",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__form"
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(3)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".model-display-options > .toggle-button:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".contour-interval-input"
+ },
+ {
+ "n": 3,
+ "sel": ".contour-interval-submit"
+ },
+ {
+ "n": 4,
+ "sel": ".viewer-option-row:nth-of-type(1)"
+ },
+ {
+ "n": 5,
+ "sel": ".viewer-option-row:nth-of-type(2)"
+ }
+ ]
+ },
+ {
+ "name": "B04_05_view_controls",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "viewport": [
+ 1600,
+ 1100
+ ],
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__form"
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4) button >> nth=0",
+ "pos": "bl"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4) button >> nth=1",
+ "pos": "bl"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4) button >> nth=2",
+ "pos": "bl"
+ },
+ {
+ "n": 4,
+ "sel": ".b04-surface__form .ui-sidebar-scroll > section:nth-child(4) button >> nth=3",
+ "pos": "bl"
+ }
+ ]
+ },
+ {
+ "name": "B04_06_confirm_reset",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".ui-sidebar-actions"
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".ui-sidebar-actions",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-sidebar-actions .ui-help-btn"
+ },
+ {
+ "n": 2,
+ "sel": ".ui-sidebar-actions .ui-btn--filled"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-surface__reset"
+ }
+ ]
+ },
+ {
+ "name": "B04_07_two_viewers",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__viewers"
+ },
+ {
+ "wait_ms": 2500
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__viewers",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".point-viewer .b04-surface__status-info"
+ },
+ {
+ "n": 2,
+ "sel": ".point-viewer .b04-surface__scale"
+ },
+ {
+ "n": 3,
+ "sel": ".terrain-model-group .b04-surface__compass"
+ },
+ {
+ "n": 4,
+ "sel": ".terrain-model-group .contour-label"
+ }
+ ]
+ },
+ {
+ "name": "B04_08_sheet_surface",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-surface__sheet-section"
+ },
+ {
+ "scroll": ".b04-surface__sheet-section"
+ },
+ {
+ "wait_ms": 2500
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-surface__sheet-section",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-surface__sheet-toolbar"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-surface__sheet-smoothing"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-surface__sheet-lidar"
+ }
+ ]
+ },
+ {
+ "name": "B04_09_map_layers",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-map"
+ },
+ {
+ "scroll": ".b04-map"
+ },
+ {
+ "wait_ms": 2500
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-map__controls",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-map__control-group:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-map__control-group:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".b04-map__control-group:nth-child(3)"
+ },
+ {
+ "n": 4,
+ "sel": ".b04-map__controls > button"
+ }
+ ]
+ },
+ {
+ "name": "B04_10_map_view",
+ "route": "#/b04-preprocess",
+ "project": "road",
+ "before": [
+ {
+ "eval": "document.head.insertAdjacentHTML('beforeend','')"
+ },
+ {
+ "wait": ".b04-map"
+ },
+ {
+ "scroll": ".b04-map"
+ },
+ {
+ "wait_ms": 8000
+ }
+ ],
+ "settle_ms": 6000,
+ "clip": ".b04-map",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".b04-map__status-corner"
+ },
+ {
+ "n": 2,
+ "sel": ".b04-map__scale"
+ },
+ {
+ "n": 3,
+ "sel": ".ui-flow-legend"
+ },
+ {
+ "n": 4,
+ "sel": ".b04-map__watershed-status"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/A05_EduDetail/guide/B09/01_데이터_점검.md b/A05_EduDetail/guide/B09/01_데이터_점검.md
index 01797f0f9..ffadbcf30 100644
--- a/A05_EduDetail/guide/B09/01_데이터_점검.md
+++ b/A05_EduDetail/guide/B09/01_데이터_점검.md
@@ -9,6 +9,8 @@

+그림 번호 — 1 [업데이트] · 2 연결 없음 곳 수
+
## 단계
### 단가 새로 굳히기
@@ -35,6 +37,8 @@

+그림 번호 — 1 연결 없음 곳 수 · 2 연결 없는 줄(누르면 그 탭의 그 줄로 이동)
+
### 처음 상태로 되돌리기
| 단계 | 할 일 |
@@ -45,6 +49,8 @@

+그림 번호 — 1 안내 글 · 2 [취소] · [초기화]
+
### 하단 [?] [<] [>]
| 단추 | 하는 일 |
diff --git a/A05_EduDetail/guide/B09/03_박스보기와_호표보기.md b/A05_EduDetail/guide/B09/03_박스보기와_호표보기.md
index 5619ef5fc..328303eab 100644
--- a/A05_EduDetail/guide/B09/03_박스보기와_호표보기.md
+++ b/A05_EduDetail/guide/B09/03_박스보기와_호표보기.md
@@ -10,6 +10,8 @@

+그림 번호 — 1 박스보기 · 호표보기 스위치 · 2 하이퍼링크 · 팝업 스위치 · 3 [?] [<] [>] [초기화]
+
## 단계
| 단계 | 할 일 |
@@ -22,12 +24,6 @@
| 6 | 호표 하나의 모든 줄을 한 표로 보려면 좌측 하단 [호표보기] 를 누름. 같은 호표 줄 구간이 이어진 표로 나타남. |
| 7 | 박스보기로 돌아가려면 [박스보기] 를 누름. |
-
-
-
-
-
-
### 줄 누르기와 키
- 박스 안 줄 또는 박스를 누르면 그 줄을 낸 탭으로 이동하거나 팝업이 뜸([하이퍼링크\|팝업] 스위치에 따름) → [04 하이퍼링크와 팝업](04_하이퍼링크와_팝업)
diff --git a/A05_EduDetail/guide/B09/04_하이퍼링크와_팝업.md b/A05_EduDetail/guide/B09/04_하이퍼링크와_팝업.md
index 0b72d1cd2..d0b446daf 100644
--- a/A05_EduDetail/guide/B09/04_하이퍼링크와_팝업.md
+++ b/A05_EduDetail/guide/B09/04_하이퍼링크와_팝업.md
@@ -23,8 +23,6 @@
| 6 | 창 오른쪽 위 [탭 이동] 을 누르면 창이 모두 닫히고 그 탭의 해당 줄로 옮겨 감. |
| 7 | [×] 는 그 창과 그 위에 겹친 창만 닫음. 창 밖을 누르거나 Esc 를 누르면 모든 창이 닫힘. |
-
-
### 하이퍼링크로 보기
| 단계 | 할 일 |
diff --git a/A05_EduDetail/guide/B09/05_설계내역서.md b/A05_EduDetail/guide/B09/05_설계내역서.md
index c0da548dc..2b73d4540 100644
--- a/A05_EduDetail/guide/B09/05_설계내역서.md
+++ b/A05_EduDetail/guide/B09/05_설계내역서.md
@@ -9,6 +9,8 @@

+그림 번호 — 1 위쪽 도구 줄 · 2 설계내역서 표
+
## 표의 칸
| 칸 | 내용 |
@@ -66,6 +68,8 @@

+그림 번호 — 1 [들여쓰기] · 2 [내어쓰기] · 3 [위로] · 4 [아래로]
+
표 아래 안내 글: 「줄 누르고 버튼 · 방향키 ←→ 레벨 · ↑↓ 자리 · 줄 끌기 · 더블클릭 · Enter · F2 입력」
### 줄 끌어 놓기
@@ -85,6 +89,8 @@

+그림 번호 — 1 단가연결 램프(점) 열
+
## 보이는 것
- 직접 만든 줄은 자동 줄과 구분되는 줄 모양으로 표시됨.
diff --git a/A05_EduDetail/guide/B09/06_단가연결과_운반_단가.md b/A05_EduDetail/guide/B09/06_단가연결과_운반_단가.md
index 2e776b0d0..a32fc0681 100644
--- a/A05_EduDetail/guide/B09/06_단가연결과_운반_단가.md
+++ b/A05_EduDetail/guide/B09/06_단가연결과_운반_단가.md
@@ -10,6 +10,8 @@

+그림 번호 — 1 이름 · 키 찾기 칸 · 2 마스터 · 회사 · 개인 고르기 · 3 [닫기]
+
## 단가연결 창
창 제목은 「단가연결」 이고 닫기 단추가 있음.
@@ -36,8 +38,6 @@
운반공 줄(거리이정표 행 하나)의 단가를 거리와 작업 조건으로 맞추는 큰 창. 제목은 「운반 단가 — 줄 이름」.
-
-
### 창 구성
| 구역 | 하는 일 |
@@ -61,8 +61,6 @@
| 8 | 연결을 바꾸려면 [변경] → 단가연결 창에서 다른 항목을 고름. 오른쪽 계산 과정도 새 항목으로 바뀜. |
| 9 | 마치면 [적용] 을 누름. 연결이 없는 채로 [적용] 하면 「연결할 것을 먼저 고르세요」 알림이 뜸. |
-
-
### 조합을 연결한 경우
- 조합(구조물 조합 · 사전조합)은 담긴 로직 이름별로 입력 칸이 나뉘어 보임.
diff --git a/A05_EduDetail/guide/B09/07_총괄과_공사원가계산서.md b/A05_EduDetail/guide/B09/07_총괄과_공사원가계산서.md
index f15fb7e2f..be1aac5fa 100644
--- a/A05_EduDetail/guide/B09/07_총괄과_공사원가계산서.md
+++ b/A05_EduDetail/guide/B09/07_총괄과_공사원가계산서.md
@@ -47,6 +47,8 @@

+그림 번호 — 1 요율(%) 열 머리 · 2 직접 적을 수 있는 칸 · 3 요율 출처 열
+
### 보이는 것
- 요율 칸이나 요율 출처 칸에 마우스를 올리면 「자동 근거 — … · 기준 이름」 풍선이 보임.
diff --git a/A05_EduDetail/guide/B09/08_단가_근거_탭.md b/A05_EduDetail/guide/B09/08_단가_근거_탭.md
index 1d7d566d3..4d28d515f 100644
--- a/A05_EduDetail/guide/B09/08_단가_근거_탭.md
+++ b/A05_EduDetail/guide/B09/08_단가_근거_탭.md
@@ -93,8 +93,6 @@
| 4 | 목록의 파일 이름(크기 KB) 단추를 누르면 내려받음. 옆 [삭제] 로 지움. |
| 5 | [닫기] 로 창을 닫으면 표 칸의 파일 수가 반영되어 있음. |
-
-
> 참고: 견적서 파일은 올리는 즉시 저장되어 [초기화] 해도 남음.
> 참고: 자재 단가를 바꾸면 이 자재를 쓰는 일위대가 · 단가산출 · 중기사용료 · 설계내역서 자재 줄의 금액이 모두 바뀜.
diff --git a/A05_EduDetail/guide/B09/10_인쇄_미리보기.md b/A05_EduDetail/guide/B09/10_인쇄_미리보기.md
new file mode 100644
index 000000000..8325e2f65
--- /dev/null
+++ b/A05_EduDetail/guide/B09/10_인쇄_미리보기.md
@@ -0,0 +1,45 @@
+# 인쇄 미리보기
+
+도면 · 수량산출 · 원가계산을 PDF 로 미리 보고, PDF 와 엑셀로 내려받는 화면임.
+
+## 여는 길
+
+- 원가계산 화면(B09)의 왼쪽 아래 [인쇄 미리보기] 단추를 누름. 고친 값을 먼저 저장한 뒤 이 화면으로 넘어옴. 저장이 안 되면 원가계산 화면에 머묾.
+- 원가계산 화면의 [>] 단추로도 들어옴 (단계 6 완료 뒤).
+- 현재 프로젝트가 열려 있어야 함. 프로젝트가 없으면 「현재 프로젝트가 없습니다.」 알림이 뜸.
+- 되돌아갈 때 = 왼쪽 아래 [B09 복귀].
+
+
+
+그림 번호 — 1 [인쇄 미리보기]
+
+
+
+그림 번호 — 아래 구역 표와 같음
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 영역 카드 | [도면] [수량산출] [원가계산] 중 인쇄할 묶음을 고름 → [영역과 쪽 고르기](11_인쇄_영역과_쪽_고르기) |
+| 2 | 쪽 목록 카드 | 고른 영역의 쪽 목록. 체크를 빼면 그 쪽은 PDF · 엑셀에서 빠짐 → [영역과 쪽 고르기](11_인쇄_영역과_쪽_고르기) |
+| 3 | 상태 한 줄 | 만드는 중 · 쪽 수 · 오류 이유를 한 줄로 알려 줌 → [미리보기 보기](12_인쇄_미리보기_보기) |
+| 4 | 미리보기 칸 | 고른 쪽들의 PDF 가 그대로 보임. 보이는 것이 곧 받는 파일임 → [미리보기 보기](12_인쇄_미리보기_보기) |
+| 5 | 아래 단추 줄 | [PDF 다운로드](표 영역은 [엑셀 다운로드] 도), 그 아래 [?] [B09 복귀] → [내려받기](13_인쇄_내려받기) |
+
+> 참고: 전체 작업 단계는 왼쪽 위 ☰ 를 눌러 여는 진행 단계 판에서 봄. 지금은 마지막 단계(원가계산 다음)에 있음.
+
+## 작업 순서
+
+1. 원가계산 화면에서 [인쇄 미리보기] 를 눌러 들어옴.
+2. 영역 카드에서 [도면] [수량산출] [원가계산] 중 하나를 고름.
+3. 쪽 목록에서 인쇄하지 않을 쪽의 체크를 뺌.
+4. 미리보기 칸에서 PDF 를 확인함. 체크를 바꾸면 PDF 가 다시 만들어짐.
+5. [PDF 다운로드] 로 PDF 를, 표 영역이면 [엑셀 다운로드] 로 엑셀을 받음.
+6. 영역을 바꿔 가며 2~5 를 되풀이함. 끝나면 [B09 복귀].
+
+> 참고: 이 화면은 보기와 내려받기 전용임. 값을 고치거나 저장하는 곳이 아님. 숫자를 바꾸려면 수량산출(B08) 또는 원가계산(B09) 화면에서 고치고 [저장] 한 뒤 다시 들어옴.
+
+> 참고: [수량산출] [원가계산] 쪽은 해당 화면에 지금 보이는 값 그대로 찍힘. 저장 전 값이면 화면에 보이는 그 값이 나옴.
+
+> 주의: 도면 영역은 PDF 만 받음. 엑셀 단추는 [도면] 을 고르면 숨음.
diff --git a/A05_EduDetail/guide/B09/11_인쇄_영역과_쪽_고르기.md b/A05_EduDetail/guide/B09/11_인쇄_영역과_쪽_고르기.md
new file mode 100644
index 000000000..af1ec88fe
--- /dev/null
+++ b/A05_EduDetail/guide/B09/11_인쇄_영역과_쪽_고르기.md
@@ -0,0 +1,50 @@
+# 영역과 쪽 고르기
+
+인쇄할 묶음(도면 · 수량산출 · 원가계산)을 고르고, 그 안에서 뺄 쪽을 체크로 정함.
+
+## 여는 길
+
+- 인쇄 미리보기 화면의 왼쪽 패널 [영역] 카드와 [쪽 목록] 카드.
+- 처음에는 카드가 접혀 있을 수 있음. 카드 제목을 누르면 펼쳐지고, 다시 누르면 접힘.
+- 화면을 열면 [도면] 이 먼저 골라진 상태로 시작함.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 왼쪽 패널의 [영역] 제목을 눌러 펼침. 작은 단추 셋 [도면] [수량산출] [원가계산] 이 보임. |
+| 2 | 인쇄할 영역 단추를 누름. 고른 단추는 색이 채워지고 나머지는 흐림. 같은 영역을 다시 누르면 아무 일도 없음. |
+| 3 | 상태 줄에 「○○ 쪽 목록 읽는 중…」 이 뜨고, 곧 [쪽 목록] 카드에 쪽 이름이 한 줄씩 나타남. |
+| 4 | [쪽 목록] 제목을 눌러 펼침. 쪽마다 앞에 체크 칸이 있고 처음에는 모두 체크됨. |
+| 5 | 인쇄하지 않을 쪽의 체크를 뺌. 잠시(약 0.3초) 뒤 미리보기가 체크된 쪽만으로 다시 만들어짐. |
+| 6 | 빼 놓은 쪽을 다시 넣으려면 체크를 다시 켬. |
+
+
+
+그림 번호 — 1 [도면] · 2 [수량산출] · 3 [원가계산]
+
+
+
+그림 번호 — 1 고른 영역 [수량산출] · 2 상태 줄(쪽 수가 보임)
+
+
+
+그림 번호 — 1 쪽마다 앞에 있는 체크 칸
+
+
+
+그림 번호 — 1 체크를 뺀 쪽 · 2 상태 줄 — 체크된 쪽만 다시 묶임
+
+## 보이는 것
+
+- 쪽 목록의 차례는 인쇄될 쪽 차례와 같음. 순서를 바꾸는 기능은 없음.
+- 영역을 바꾸면 체크가 모두 처음(전부 체크)으로 돌아감.
+- 체크를 모두 빼면 상태 줄에 「고른 쪽이 없습니다.」 가 뜨고 미리보기는 비어 있음.
+- 쪽 목록이 아주 길면 목록 칸 안에서 스크롤됨.
+- 영역에 쪽이 없으면 「○○ — 쪽이 없습니다.」 가 뜸.
+- 영역이 아직 준비되지 않았으면 「○○ — 준비 중」 이 뜸.
+- 목록을 못 읽으면 「○○ 목록을 못 읽었습니다 — 이유」 가 빨갛게 뜸.
+
+> 참고: 각 영역에 어떤 쪽이 들어 있는지는 [](12_인쇄_미리보기_보기) 의 「영역별 쪽 구성」 에 정리함.
+
+> 주의: 영역을 바꾸면 앞 영역에서 뺐던 체크는 기억되지 않음. 영역마다 따로 정리해서 내려받아야 함.
diff --git a/A05_EduDetail/guide/B09/12_인쇄_미리보기_보기.md b/A05_EduDetail/guide/B09/12_인쇄_미리보기_보기.md
new file mode 100644
index 000000000..f73102681
--- /dev/null
+++ b/A05_EduDetail/guide/B09/12_인쇄_미리보기_보기.md
@@ -0,0 +1,48 @@
+# 미리보기 보기
+
+고른 쪽들이 PDF 로 만들어져 오른쪽 큰 칸에 그대로 보임. 보이는 것이 곧 내려받는 파일임.
+
+## 여는 길
+
+- 영역을 고르거나 쪽 체크를 바꾸면 자동으로 PDF 를 만들어 오른쪽 본문에 띄움.
+- 위쪽 한 줄은 상태 표시, 그 아래 큰 칸이 PDF 보기 칸.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 영역을 고르면 상태 줄에 「○○ PDF 만드는 중…」 이 뜸. 만드는 동안에도 다른 조작은 막히지 않음. |
+| 2 | 만들어지면 PDF 가 본문 칸에 나타나고, 상태 줄이 「○○ · N장 묶음」 으로 바뀜. |
+| 3 | PDF 보기 칸 안에서 스크롤하거나 보기 도구로 쪽을 넘기며 확인함. |
+| 4 | 고치고 싶은 쪽이 있으면 쪽 목록 체크를 바꿈. 다시 만드는 중에 또 바꿔도 가장 마지막 선택만 화면에 남음. |
+
+
+
+
+
+## 영역별 쪽 구성
+
+
+
+그림 번호 — 1 고른 영역 [원가계산]
+
+| 영역 | 들어 있는 쪽 |
+| --- | --- |
+| 도면 | 상세설계(B07)의 도면번호 차례대로 도면, 이어서 구조물 조합 도면. 도면번호마다 한 장씩 |
+| 수량산출 | 구조물 집계표 → 자재(총괄자재수량집계표 · 콘크리트소요자재집계표 · 자재수량집계표) → 토공(토공집계표 · 토적표 · 평균운반거리 · 종방향 무대운반거리) → 수리집수면적표(배수지점마다 한 장) → 거리이정표(표 + 경로 지도 그림) |
+| 원가계산 | 공사원가계산서 · 총괄설계내역서 · 설계내역서 · 일위대가목록표 · 일위대가표 · 단가산출근거목록표 · 단가산출근거 · 환율및기초자료 · 중기목록표 · 중기사용료 · 재료비목록표 · 노무비목록표 · 경비목록표 · 자재단가대비표 · 재료비수량금액집계표 · 노무비수량금액집계표 · 경비수량금액집계표 · 중기시간금액집계표 (18장) |
+
+## 보이는 것
+
+- PDF 는 A4 용지. 표 영역은 쪽마다 위에 쪽 이름, 아래에 쪽 번호가 찍힘. 넓은 표는 용지 폭에 맞춰 줄어듦.
+- 원가계산 쪽은 모두 가로 방향. 수량산출 쪽은 칸이 많은 표만 가로, 나머지는 세로.
+- 도면 영역은 도면 PDF 를 서버에서 만든 그대로 보여 줌. 넣지 못한 그림이 있으면 상태 줄 끝에 「 · 못 넣은 그림 N개」 가 붙음.
+- 수량산출 쪽 중 읽지 못한 자리는 그 자리에 「불러오지 못했습니다 — 이유」 한 장이 대신 들어가고 나머지는 그대로 만들어짐.
+- 수량산출에서 값이 아직 없는 쪽은 안내 한 줄이 들어감. 예: 「놓인 구조물 · 배관이 없습니다.」 · 「측점 단면적이 아직 없습니다 — 횡단 설계를 먼저 마치세요.」 · 「저장된 배수지점(관 지점)이 없습니다 — 배수유역 · 종단에서 관을 저장하세요.」
+- 만들기에 실패하면 상태 줄이 빨갛게 「PDF 를 못 만들었습니다 — 이유」 로 바뀜.
+
+> 참고: 원가계산의 [공기집계] [공기산출] 같은 초안 탭은 내역서 차례에 없어 이 영역에 들어가지 않음.
+
+> 참고: 표의 [단가연결] 같은 화면 조작용 칸, 강조 표시, 고칠 칸 표시는 인쇄본에 나오지 않음.
+
+> 주의: 수량산출 · 원가계산 값은 화면 값이 바탕임. 숫자가 이상하면 B08 · B09 화면에서 먼저 확인함.
diff --git a/A05_EduDetail/guide/B09/13_인쇄_내려받기.md b/A05_EduDetail/guide/B09/13_인쇄_내려받기.md
new file mode 100644
index 000000000..d2b81bd22
--- /dev/null
+++ b/A05_EduDetail/guide/B09/13_인쇄_내려받기.md
@@ -0,0 +1,43 @@
+# 내려받기와 돌아가기
+
+보고 있는 PDF 를 파일로 받거나, 표 영역을 엑셀로 받고, 원가계산 화면으로 돌아감.
+
+## 여는 길
+
+- 왼쪽 패널 맨 아래 단추 두 줄.
+ - 윗줄: [PDF 다운로드] [엑셀 다운로드]
+ - 아랫줄: [?] [B09 복귀]
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 영역과 쪽을 고르고 미리보기가 만들어진 것을 확인함. |
+| 2 | [PDF 다운로드] 를 누름. 지금 미리보기에 보이는 PDF 와 같은 파일이 받아짐. 파일 이름은 영역 이름임. 예: `수량산출.pdf` |
+| 3 | 표 영역([수량산출] [원가계산])이면 [엑셀 다운로드] 도 누를 수 있음. 상태 줄에 「○○ 엑셀 만드는 중…」 이 뜬 뒤 「○○ 엑셀을 내려받았습니다.」 로 바뀜. 파일 이름 예: `원가계산.xlsx` |
+| 4 | 다른 영역도 받으려면 영역을 바꿔 2~3 을 되풀이함. |
+| 5 | 끝나면 [B09 복귀] 를 눌러 원가계산 화면으로 돌아감. |
+
+
+
+그림 번호 — 1 [PDF 다운로드] · 2 [엑셀 다운로드] · 3 [?]
+
+
+
+그림 번호 — 1 [PDF 다운로드] — 도면 영역은 엑셀 단추가 없음
+
+## 보이는 것
+
+- 엑셀은 쪽마다 시트 하나. 쪽 이름이 시트 이름이 되며, 길이와 쓸 수 없는 글자는 엑셀 규칙에 맞게 바뀜.
+- 엑셀은 쪽 목록에서 체크된 쪽만 담김. 머리 줄 굵게 · 칸 병합 · 숫자 칸 · 열 폭이 화면 표를 따라가고, A4 로 인쇄하기 좋게 쪽 설정이 들어 있음.
+- 엑셀에는 그림(거리이정표의 경로 지도)이 들어가지 않음. 그림은 PDF 에만 있음.
+- 고른 쪽이 없으면 [엑셀 다운로드] 는 아무 일도 하지 않음.
+- 엑셀을 못 만들면 상태 줄이 빨갛게 「엑셀을 못 만들었습니다 — 이유」 로 바뀜.
+- 미리보기가 아직 만들어지는 중에 [PDF 다운로드] 를 누르면 다 만들어진 뒤에 받아짐.
+- 체크가 하나도 없거나 목록이 비어 있으면 [PDF 다운로드] 는 아무 일도 하지 않음.
+- [?] 는 설명서 창을 엶. 이 화면에서는 B09 설명서가 열림.
+- 이 화면에서는 [<] [>] 단계 이동 단추가 없음.
+
+> 주의: [PDF 다운로드] 는 보이는 PDF 를 그대로 저장하고, [엑셀 다운로드] 는 누를 때 새로 만듦. 누르기 전에 값이 바뀌었다면 B09 로 돌아가 확인함.
+
+> 참고: [B09 복귀] 는 원가계산 화면으로 돌아갈 뿐 아무것도 저장하지 않음.
diff --git a/A05_EduDetail/guide/B09/B09_00_overview.webp b/A05_EduDetail/guide/B09/B09_00_overview.webp
new file mode 100644
index 000000000..b3f73bf07
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_00_overview.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_01_check_card.webp b/A05_EduDetail/guide/B09/B09_01_check_card.webp
new file mode 100644
index 000000000..54318f3cb
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_01_check_card.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_02_refresh_button.webp b/A05_EduDetail/guide/B09/B09_02_refresh_button.webp
new file mode 100644
index 000000000..b3109847e
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_02_refresh_button.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_03_check_list.webp b/A05_EduDetail/guide/B09/B09_03_check_list.webp
new file mode 100644
index 000000000..ab77815e3
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_03_check_list.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_04_reset_confirm.webp b/A05_EduDetail/guide/B09/B09_04_reset_confirm.webp
new file mode 100644
index 000000000..6f07a4427
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_04_reset_confirm.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_05_top_tabs.webp b/A05_EduDetail/guide/B09/B09_05_top_tabs.webp
new file mode 100644
index 000000000..baae28ae5
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_05_top_tabs.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_06_sub_tabs.webp b/A05_EduDetail/guide/B09/B09_06_sub_tabs.webp
new file mode 100644
index 000000000..6233b3afe
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_06_sub_tabs.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_07_compare_table.webp b/A05_EduDetail/guide/B09/B09_07_compare_table.webp
new file mode 100644
index 000000000..2a01642a1
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_07_compare_table.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_08_dock.webp b/A05_EduDetail/guide/B09/B09_08_dock.webp
new file mode 100644
index 000000000..98d7fdcb1
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_08_dock.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_12_link_switch.webp b/A05_EduDetail/guide/B09/B09_12_link_switch.webp
new file mode 100644
index 000000000..2a541251d
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_12_link_switch.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_14_bill_table.webp b/A05_EduDetail/guide/B09/B09_14_bill_table.webp
new file mode 100644
index 000000000..f7ac16c73
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_14_bill_table.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_15_bill_level_tools.webp b/A05_EduDetail/guide/B09/B09_15_bill_level_tools.webp
new file mode 100644
index 000000000..0b4665c9d
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_15_bill_level_tools.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_16_bill_menu.webp b/A05_EduDetail/guide/B09/B09_16_bill_menu.webp
new file mode 100644
index 000000000..d72babef4
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_16_bill_menu.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_17_bill_lamp.webp b/A05_EduDetail/guide/B09/B09_17_bill_lamp.webp
new file mode 100644
index 000000000..96ef4930b
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_17_bill_lamp.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_18_price_link.webp b/A05_EduDetail/guide/B09/B09_18_price_link.webp
new file mode 100644
index 000000000..9facabdb1
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_18_price_link.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_21_total_tab.webp b/A05_EduDetail/guide/B09/B09_21_total_tab.webp
new file mode 100644
index 000000000..cd32591c0
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_21_total_tab.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_22_total_rate_cells.webp b/A05_EduDetail/guide/B09/B09_22_total_rate_cells.webp
new file mode 100644
index 000000000..14ab73e5a
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_22_total_rate_cells.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_23_cost_tab.webp b/A05_EduDetail/guide/B09/B09_23_cost_tab.webp
new file mode 100644
index 000000000..d3ee47533
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_23_cost_tab.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_24_dg_list.webp b/A05_EduDetail/guide/B09/B09_24_dg_list.webp
new file mode 100644
index 000000000..2d7a66675
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_24_dg_list.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_25_basis_tab.webp b/A05_EduDetail/guide/B09/B09_25_basis_tab.webp
new file mode 100644
index 000000000..7578c2c89
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_25_basis_tab.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_27_sum_material.webp b/A05_EduDetail/guide/B09/B09_27_sum_material.webp
new file mode 100644
index 000000000..a575b3d4a
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_27_sum_material.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_28_schedule_panel.webp b/A05_EduDetail/guide/B09/B09_28_schedule_panel.webp
new file mode 100644
index 000000000..5f7539aa5
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_28_schedule_panel.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_29_schedule_sum.webp b/A05_EduDetail/guide/B09/B09_29_schedule_sum.webp
new file mode 100644
index 000000000..df0b15352
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_29_schedule_sum.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_30_schedule_calc.webp b/A05_EduDetail/guide/B09/B09_30_schedule_calc.webp
new file mode 100644
index 000000000..619096434
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_30_schedule_calc.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_31_print_overview.webp b/A05_EduDetail/guide/B09/B09_31_print_overview.webp
new file mode 100644
index 000000000..d4cea3977
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_31_print_overview.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_32_print_area_buttons.webp b/A05_EduDetail/guide/B09/B09_32_print_area_buttons.webp
new file mode 100644
index 000000000..01ed297ca
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_32_print_area_buttons.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_33_print_area_quantity.webp b/A05_EduDetail/guide/B09/B09_33_print_area_quantity.webp
new file mode 100644
index 000000000..102eb4b60
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_33_print_area_quantity.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_34_print_sheet_list.webp b/A05_EduDetail/guide/B09/B09_34_print_sheet_list.webp
new file mode 100644
index 000000000..6b6b88144
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_34_print_sheet_list.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_35_print_sheet_uncheck.webp b/A05_EduDetail/guide/B09/B09_35_print_sheet_uncheck.webp
new file mode 100644
index 000000000..d8b39612a
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_35_print_sheet_uncheck.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_36_print_status_line.webp b/A05_EduDetail/guide/B09/B09_36_print_status_line.webp
new file mode 100644
index 000000000..944e57d6c
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_36_print_status_line.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_37_print_preview_frame.webp b/A05_EduDetail/guide/B09/B09_37_print_preview_frame.webp
new file mode 100644
index 000000000..13a13ec2b
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_37_print_preview_frame.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_38_print_area_cost.webp b/A05_EduDetail/guide/B09/B09_38_print_area_cost.webp
new file mode 100644
index 000000000..3941397b3
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_38_print_area_cost.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_39_print_buttons_row.webp b/A05_EduDetail/guide/B09/B09_39_print_buttons_row.webp
new file mode 100644
index 000000000..490725163
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_39_print_buttons_row.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_40_print_area_drawings.webp b/A05_EduDetail/guide/B09/B09_40_print_area_drawings.webp
new file mode 100644
index 000000000..e3ea64b4c
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_40_print_area_drawings.webp differ
diff --git a/A05_EduDetail/guide/B09/B09_42_print_b09_entry.webp b/A05_EduDetail/guide/B09/B09_42_print_b09_entry.webp
new file mode 100644
index 000000000..c1a50306c
Binary files /dev/null and b/A05_EduDetail/guide/B09/B09_42_print_b09_entry.webp differ
diff --git a/A05_EduDetail/guide/B09/_scenes.json b/A05_EduDetail/guide/B09/_scenes.json
index bc85241eb..cf4b38efb 100644
--- a/A05_EduDetail/guide/B09/_scenes.json
+++ b/A05_EduDetail/guide/B09/_scenes.json
@@ -1,807 +1,37 @@
[
- {
- "name": "B09_00_overview",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-estimation__panel .ui-data-table"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": null,
- "callouts": [
- {
- "n": 1,
- "sel": ".b09-options > section:first-of-type"
- },
- {
- "n": 2,
- "sel": "[data-b09-schedule-panel]"
- },
- {
- "n": 3,
- "sel": ".b09-estimation__tabs:not(.ui-subtabs)"
- },
- {
- "n": 4,
- "sel": ".b09-estimation__tabs.ui-subtabs"
- },
- {
- "n": 5,
- "sel": ".b09-estimation__panel .ui-data-table"
- },
- {
- "n": 6,
- "sel": ".b09-estimation__line-hint"
- },
- {
- "n": 7,
- "sel": "[data-b09-switch=\"view\"]"
- },
- {
- "n": 8,
- "sel": "[data-b09-switch=\"link\"]"
- },
- {
- "n": 9,
- "sel": "[data-help-row]"
- }
- ]
- },
- {
- "name": "B09_01_check_card",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-options > section:first-of-type"
- },
- {
- "click": ".b09-options > section:first-of-type .ui-collapsible__title"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-options > section:first-of-type",
- "callouts": [
- {
- "n": 1,
- "sel": ".b09-options > section:first-of-type [data-b09-refresh]"
- },
- {
- "n": 2,
- "sel": ".b09-check__head"
- }
- ]
- },
- {
- "name": "B09_02_refresh_button",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-options > section:first-of-type"
- },
- {
- "click": ".b09-options > section:first-of-type .ui-collapsible__title"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-refresh]",
- "callouts": []
- },
- {
- "name": "B09_03_check_list",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-options > section:first-of-type"
- },
- {
- "click": ".b09-options > section:first-of-type .ui-collapsible__title"
- },
- {
- "wait_ms": 800
- },
- {
- "wait": ".b09-check__head"
- }
- ],
- "clip": ".b09-check",
- "callouts": [
- {
- "n": 1,
- "sel": ".b09-check__head"
- },
- {
- "n": 2,
- "sel": ".b09-check .ui-sidebar-row"
- }
- ]
- },
- {
- "name": "B09_04_reset_confirm",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-reset]"
- },
- {
- "wait": "?"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "?",
- "callouts": [
- {
- "n": 1,
- "sel": "?"
- }
- ]
- },
- {
- "name": "B09_05_top_tabs",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-estimation__tabs"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__tabs:not(.ui-subtabs)",
- "callouts": []
- },
- {
- "name": "B09_06_sub_tabs",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "wait": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__tabs.ui-subtabs",
- "callouts": []
- },
- {
- "name": "B09_07_compare_table",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"material\"]"
- },
- {
- "click": "[data-b09-tab=\"compare\"]"
- },
- {
- "wait": "[data-b09-table=\"compare\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_08_dock",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": ".b09-dock"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-dock",
- "callouts": [
- {
- "n": 7,
- "sel": "[data-b09-switch=\"view\"]"
- },
- {
- "n": 8,
- "sel": "[data-b09-switch=\"link\"]"
- },
- {
- "n": 9,
- "sel": "[data-help-row]"
- }
- ]
- },
- {
- "name": "B09_09_box_view",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"dg_list\"]"
- },
- {
- "click": "[data-b09-tab=\"dg\"]"
- },
- {
- "wait": "[data-b09-table=\"dg\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "wait": ".ui-group-cards"
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_10_table_view",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"dg_list\"]"
- },
- {
- "click": "[data-b09-tab=\"dg\"]"
- },
- {
- "wait": "[data-b09-table=\"dg\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-switch=\"view\"] [data-value=\"table\"]"
- },
- {
- "wait": "[data-b09-table=\"dg\"] tr[data-i]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_11_box_columns",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"dg_list\"]"
- },
- {
- "click": "[data-b09-tab=\"dg\"]"
- },
- {
- "wait": "[data-b09-table=\"dg\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "wait": ".ui-group-cards"
- }
- ],
- "clip": ".b09-estimation__tools",
- "callouts": []
- },
- {
- "name": "B09_12_link_switch",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": "[data-b09-switch=\"link\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-switch=\"link\"]",
- "callouts": []
- },
- {
- "name": "B09_13_popup",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"material\"]"
- },
- {
- "click": "[data-b09-tab=\"material\"]"
- },
- {
- "wait": "[data-b09-table=\"material\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-table=\"material\"] tr[data-i=\"0\"] td:nth-child(2)"
- },
- {
- "wait": "[data-b09-popup]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-popup]",
- "callouts": []
- },
- {
- "name": "B09_14_bill_table",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": [
- {
- "n": 1,
- "sel": ".b09-estimation__tools"
- },
- {
- "n": 2,
- "sel": "[data-b09-table=\"bill\"]"
- }
- ]
- },
- {
- "name": "B09_15_bill_level_tools",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-table=\"bill\"] tr[data-i=\"1\"] td:nth-child(2)"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__tools",
- "callouts": [
- {
- "n": 1,
- "sel": "[data-b09-level=\"들여쓰기 →\"]"
- },
- {
- "n": 2,
- "sel": "[data-b09-level=\"내어쓰기 ←\"]"
- },
- {
- "n": 3,
- "sel": "[data-b09-level=\"위로 ↑\"]"
- },
- {
- "n": 4,
- "sel": "[data-b09-level=\"아래로 ↓\"]"
- }
- ]
- },
- {
- "name": "B09_16_bill_menu",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "contextmenu": "[data-b09-table=\"bill\"] tr[data-i=\"2\"]"
- },
- {
- "wait": ".ui-ctx-menu"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".ui-ctx-menu",
- "callouts": []
- },
- {
- "name": "B09_17_bill_lamp",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-table=\"bill\"]",
- "callouts": [
- {
- "n": 1,
- "sel": "td.b09-bill__lamp"
- }
- ]
- },
- {
- "name": "B09_18_price_link",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "td.b09-bill__lamp:not(.is-linked)"
- },
- {
- "wait": ".ui-modal"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".ui-modal",
- "callouts": []
- },
- {
- "name": "B09_19_haul_modal",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-table=\"bill\"] tr[data-i=\"?\"] td.b09-bill__lamp"
- },
- {
- "wait": ".b09-haul-modal"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-haul-modal",
- "callouts": [
- {
- "n": 1,
- "sel": ".b09-haul-modal .m02-inputval__row"
- },
- {
- "n": 2,
- "sel": ".b09-haulsteps"
- }
- ]
- },
- {
- "name": "B09_20_haul_cycle",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"bill\"]"
- },
- {
- "wait": "[data-b09-table=\"bill\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-table=\"bill\"] tr[data-i=\"?\"] td.b09-bill__lamp"
- },
- {
- "wait": ".b09-haulstep"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-haulsteps",
- "callouts": []
- },
- {
- "name": "B09_21_total_tab",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"total\"]"
- },
- {
- "wait": "[data-b09-table=\"total\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_22_total_rate_cells",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"total\"]"
- },
- {
- "click": "[data-b09-tab=\"total\"]"
- },
- {
- "wait": "[data-b09-table=\"total\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-table=\"total\"]",
- "callouts": [
- {
- "n": 1,
- "sel": "?"
- }
- ]
- },
- {
- "name": "B09_23_cost_tab",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"cost\"]"
- },
- {
- "click": "[data-b09-tab=\"cost\"]"
- },
- {
- "wait": "[data-b09-table=\"cost\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_24_dg_list",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"dg_list\"]"
- },
- {
- "click": "[data-b09-tab=\"dg_list\"]"
- },
- {
- "wait": "[data-b09-table=\"dg_list\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_25_basis_tab",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"basis\"]"
- },
- {
- "click": "[data-b09-tab=\"basis\"]"
- },
- {
- "wait": "[data-b09-table=\"basis\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_26_quote_modal",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"material\"]"
- },
- {
- "click": "[data-b09-tab=\"compare\"]"
- },
- {
- "wait": "[data-b09-table=\"compare\"]"
- },
- {
- "wait_ms": 800
- },
- {
- "click": "[data-b09-table=\"compare\"] tr[data-i=\"?\"] td[data-c=\"?\"]"
- },
- {
- "wait": ".ui-modal"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".ui-modal",
- "callouts": []
- },
- {
- "name": "B09_27_sum_material",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"material\"]"
- },
- {
- "click": "[data-b09-tab=\"sum_material\"]"
- },
- {
- "wait": "[data-b09-table=\"sum_material\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_28_schedule_panel",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "wait": "[data-b09-schedule-panel]"
- },
- {
- "click": "[data-b09-schedule-panel] .ui-collapsible__title"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": "[data-b09-schedule-panel]",
- "callouts": []
- },
- {
- "name": "B09_29_schedule_sum",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"schedule_sum\"]"
- },
- {
- "click": "[data-b09-tab=\"schedule_sum\"]"
- },
- {
- "wait": "[data-b09-table=\"schedule_sum\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- },
- {
- "name": "B09_30_schedule_calc",
- "route": "#/b09-estimation",
- "project": "road",
- "before": [
- {
- "click": "[data-b09-group=\"schedule_sum\"]"
- },
- {
- "click": "[data-b09-tab=\"schedule_calc\"]"
- },
- {
- "wait": "[data-b09-table=\"schedule_calc\"]"
- },
- {
- "wait_ms": 800
- }
- ],
- "clip": ".b09-estimation__panel",
- "callouts": []
- }
-]
\ No newline at end of file
+ {"name":"B09_00_overview","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-estimation__panel .ui-data-table"},{"wait_ms":800}],"clip":null,"callouts":[{"n":1,"sel":".b09-options .ui-sidebar-scroll > section:first-of-type"},{"n":2,"sel":"[data-b09-schedule-panel]"},{"n":3,"sel":".b09-estimation__tabs:not(.ui-subtabs)"},{"n":4,"sel":".b09-estimation__tabs.ui-subtabs"},{"n":5,"sel":".b09-estimation__panel .ui-data-table"},{"n":6,"sel":".b09-estimation__line-hint"},{"n":7,"sel":"[data-b09-switch=\"view\"]"},{"n":8,"sel":"[data-b09-switch=\"link\"]"},{"n":9,"sel":"[data-help-row]"}]},
+ {"name":"B09_01_check_card","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-options .ui-sidebar-scroll > section:first-of-type"},{"click":".b09-options .ui-sidebar-scroll > section:first-of-type .ui-collapsible__title"},{"wait_ms":800}],"clip":".b09-options .ui-sidebar-scroll > section:first-of-type","callouts":[{"n":1,"sel":".b09-options .ui-sidebar-scroll > section:first-of-type [data-b09-refresh]"},{"n":2,"sel":".b09-check__head"}]},
+ {"name":"B09_02_refresh_button","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-options .ui-sidebar-scroll > section:first-of-type"},{"click":".b09-options .ui-sidebar-scroll > section:first-of-type .ui-collapsible__title"},{"wait_ms":800}],"clip":"[data-b09-refresh]","callouts":[]},
+ {"name":"B09_03_check_list","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-options .ui-sidebar-scroll > section:first-of-type"},{"click":".b09-options .ui-sidebar-scroll > section:first-of-type .ui-collapsible__title"},{"wait_ms":800},{"wait":".b09-check__head"}],"clip":".b09-check","callouts":[{"n":1,"sel":".b09-check__head"},{"n":2,"sel":".b09-check .ui-sidebar-row"}]},
+ {"name":"B09_04_reset_confirm","route":"#/b09-estimation","project":"road","before":[{"wait":"[data-b09-reset]"},{"click":"[data-b09-reset]","confirm":true},{"wait":".ui-confirm__panel"},{"wait_ms":600}],"clip":".ui-confirm__panel","callouts":[{"n":1,"sel":".ui-confirm__message"},{"n":2,"sel":".ui-confirm__actions"}],"after":[{"click":"button:has-text(\"취소\")"}]},
+ {"name":"B09_05_top_tabs","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-estimation__tabs"},{"wait_ms":800}],"clip":".b09-estimation__tabs:not(.ui-subtabs)","callouts":[]},
+ {"name":"B09_06_sub_tabs","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"wait":"[data-b09-tab=\"bill\"]"},{"wait_ms":800}],"clip":".b09-estimation__tabs.ui-subtabs","callouts":[]},
+ {"name":"B09_07_compare_table","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"material\"]"},{"click":"[data-b09-tab=\"compare\"]"},{"wait":"[data-b09-table=\"compare\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_08_dock","route":"#/b09-estimation","project":"road","before":[{"wait":".b09-dock"},{"wait_ms":800}],"clip":".b09-dock","callouts":[{"n":1,"sel":"[data-b09-switch=\"view\"]"},{"n":2,"sel":"[data-b09-switch=\"link\"]"},{"n":3,"sel":"[data-help-row]"}]},
+ {"name":"B09_12_link_switch","route":"#/b09-estimation","project":"road","before":[{"wait":"[data-b09-switch=\"link\"]"},{"wait_ms":800}],"clip":"[data-b09-switch=\"link\"]","callouts":[]},
+ {"name":"B09_14_bill_table","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"bill\"]"},{"wait":"[data-b09-table=\"bill\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[{"n":1,"sel":".b09-estimation__tools"},{"n":2,"sel":"[data-b09-table=\"bill\"]"}]},
+ {"name":"B09_15_bill_level_tools","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"bill\"]"},{"wait":"[data-b09-table=\"bill\"]"},{"wait_ms":800},{"click":"[data-b09-table=\"bill\"] tr[data-i=\"1\"] td:nth-child(2)"},{"wait_ms":800}],"clip":".b09-estimation__tools","callouts":[{"n":1,"sel":"[data-b09-level=\"들여쓰기 →\"]"},{"n":2,"sel":"[data-b09-level=\"내어쓰기 ←\"]"},{"n":3,"sel":"[data-b09-level=\"위로 ↑\"]"},{"n":4,"sel":"[data-b09-level=\"아래로 ↓\"]"}]},
+ {"name":"B09_16_bill_menu","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"bill\"]"},{"wait":"[data-b09-table=\"bill\"]"},{"wait_ms":800},{"contextmenu":"[data-b09-table=\"bill\"] tr[data-i=\"2\"]"},{"wait":".ui-ctx-menu"},{"wait_ms":800}],"clip":".ui-ctx-menu","callouts":[]},
+ {"name":"B09_17_bill_lamp","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"bill\"]"},{"wait":"[data-b09-table=\"bill\"]"},{"wait_ms":800}],"clip":"[data-b09-table=\"bill\"]","callouts":[{"n":1,"sel":"td.b09-bill__lamp"}]},
+ {"name":"B09_18_price_link","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"bill\"]"},{"wait":"[data-b09-table=\"bill\"]"},{"wait_ms":800},{"click":"td.b09-bill__lamp:not(.is-linked)"},{"wait":".m01-logic__pick"},{"wait_ms":800}],"clip":".m01-logic__pick","callouts":[{"n":1,"sel":".m01-logic__pick input"},{"n":2,"sel":".m01-logic__pick button:has-text(\"마스터\")"},{"n":3,"sel":".m01-logic__pick button:has-text(\"닫기\")","pos":"tr"}],"after":[{"click":".m01-logic__pick button:has-text(\"닫기\")"}]},
+ {"name":"B09_21_total_tab","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"total\"]"},{"wait":"[data-b09-table=\"total\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_22_total_rate_cells","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"total\"]"},{"click":"[data-b09-tab=\"total\"]"},{"wait":"[data-b09-table=\"total\"]"},{"wait_ms":800}],"clip":"[data-b09-table=\"total\"]","callouts":[{"n":1,"sel":"[data-b09-table=\"total\"] th:has-text(\"요율(%)\")"},{"n":2,"sel":"[data-b09-table=\"total\"] td.is-can-edit[data-c=\"6\"]"},{"n":3,"sel":"[data-b09-table=\"total\"] th:has-text(\"요율 출처\")"}]},
+ {"name":"B09_23_cost_tab","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"cost\"]"},{"click":"[data-b09-tab=\"cost\"]"},{"wait":"[data-b09-table=\"cost\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_24_dg_list","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"dg_list\"]"},{"wait":".b09-estimation__panel"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_25_basis_tab","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"basis\"]"},{"click":"[data-b09-tab=\"basis\"]"},{"wait":"[data-b09-table=\"basis\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_27_sum_material","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"material\"]"},{"click":"[data-b09-tab=\"sum_material\"]"},{"wait":"[data-b09-table=\"sum_material\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_28_schedule_panel","route":"#/b09-estimation","project":"road","before":[{"wait":"[data-b09-schedule-panel]"},{"click":"[data-b09-schedule-panel] .ui-collapsible__title"},{"wait_ms":800}],"clip":"[data-b09-schedule-panel]","callouts":[]},
+ {"name":"B09_29_schedule_sum","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"schedule_sum\"]"},{"click":"[data-b09-tab=\"schedule_sum\"]"},{"wait":"[data-b09-table=\"schedule_sum\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_30_schedule_calc","route":"#/b09-estimation","project":"road","before":[{"click":"[data-b09-group=\"schedule_sum\"]"},{"click":"[data-b09-tab=\"schedule_calc\"]"},{"wait":"[data-b09-table=\"schedule_calc\"]"},{"wait_ms":800}],"clip":".b09-estimation__panel","callouts":[]},
+ {"name":"B09_31_print_overview","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"wait_ms":22000},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"쪽 목록\")"},{"wait_ms":800}],"clip":null,"callouts":[{"n":1,"sel":".b09-print__panel section.ui-collapsible:has([data-b09-print-area])"},{"n":2,"sel":".b09-print__panel section.ui-collapsible:has([data-b09-print-item])"},{"n":3,"sel":"[data-b09-print-status]"},{"n":4,"sel":".b09-print__frame"},{"n":5,"sel":".b09-print__actions"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_32_print_area_buttons","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"wait_ms":600}],"clip":".b09-print__panel section.ui-collapsible:has([data-b09-print-area])","callouts":[{"n":1,"sel":"[data-b09-print-area=\"drawings\"]"},{"n":2,"sel":"[data-b09-print-area=\"quantity\"]"},{"n":3,"sel":"[data-b09-print-area=\"cost\"]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_33_print_area_quantity","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":"[data-b09-print-area=\"quantity\"]"},{"wait_ms":16000},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"쪽 목록\")"},{"wait_ms":600}],"clip":null,"callouts":[{"n":1,"sel":"[data-b09-print-area=\"quantity\"]"},{"n":2,"sel":"[data-b09-print-status]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/quantity/hydro/calc"]},
+ {"name":"B09_34_print_sheet_list","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":"[data-b09-print-area=\"quantity\"]"},{"wait_ms":16000},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"쪽 목록\")"},{"wait_ms":600}],"clip":".b09-print__panel section.ui-collapsible:has([data-b09-print-item])","callouts":[{"n":1,"sel":"[data-b09-print-item]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/quantity/hydro/calc"]},
+ {"name":"B09_35_print_sheet_uncheck","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":"[data-b09-print-area=\"quantity\"]"},{"wait_ms":16000},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"쪽 목록\")"},{"click":"[data-b09-print-item]"},{"wait_ms":9000}],"clip":null,"callouts":[{"n":1,"sel":"[data-b09-print-item]"},{"n":2,"sel":"[data-b09-print-status]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/quantity/hydro/calc"]},
+ {"name":"B09_36_print_status_line","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"wait_ms":22000}],"clip":"[data-b09-print-status]","callouts":[],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_37_print_preview_frame","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"wait_ms":22000}],"clip":".b09-print__frame","callouts":[],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_38_print_area_cost","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":"[data-b09-print-area=\"cost\"]"},{"wait_ms":16000},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"쪽 목록\")"},{"wait_ms":600}],"clip":".b09-print__panel","callouts":[{"n":1,"sel":"[data-b09-print-area=\"cost\"]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_39_print_buttons_row","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"click":".b09-print__panel .ui-collapsible__title:has-text(\"영역\")"},{"click":"[data-b09-print-area=\"quantity\"]"},{"wait_ms":16000}],"clip":".b09-print__actions","callouts":[{"n":1,"sel":"[data-b09-print-pdf]"},{"n":2,"sel":"[data-b09-print-xlsx]"},{"n":3,"sel":".b09-print__actions .ui-help-btn"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/quantity/hydro/calc"]},
+ {"name":"B09_40_print_area_drawings","route":"#/b09-print","project":"road","before":[{"wait":".b09-print__panel"},{"wait_ms":1500}],"clip":".b09-print__actions","callouts":[{"n":1,"sel":"[data-b09-print-pdf]"}],"allow_post":["/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/drawings-pdf","/api/projects/c2390e1c-ee66-42ef-8cd7-253ec00bf904/print/table-pdf"]},
+ {"name":"B09_42_print_b09_entry","route":"#/b09-estimation","project":"road","before":[{"wait":"[data-b09-print]"},{"wait_ms":1200}],"clip":".b09-dock","callouts":[{"n":1,"sel":"[data-b09-print]"}]}
+]
diff --git a/A05_EduDetail/guide/D01/00_설명서.md b/A05_EduDetail/guide/D01/00_설명서.md
index 0647091dd..773eb7182 100644
--- a/A05_EduDetail/guide/D01/00_설명서.md
+++ b/A05_EduDetail/guide/D01/00_설명서.md
@@ -1,35 +1,35 @@
-# 예정노선 등록 설명서
+# 예정노선 등록
-## 이 화면에서 하는 일
-- 여러 해에 걸친 예정노선의 기본 정보(사업 연도 · 지역 · 임도 종류 · 설계속도 · 이름)를 넣고 새 예정노선 프로젝트를 만드는 첫 화면임.
-- 대시보드의 [+] 에서 「예정노선」 카드를 고르면 이 화면이 열림.
-- 도면 관련 칸은 없음. 노선의 실제 위치는 만든 뒤 다음 화면(1단계 기준 지정)에서 정함.
-- 예정노선은 **산림청만** 만들 수 있음. 산림청 = 시스템 관리자 또는 메일 주소가 `.go.kr` 로 끝나는 사용자임.
+여러 해에 걸친 예정노선의 기본 정보(사업 연도 · 지역 · 임도 종류 · 설계속도 · 이름)를 넣고 새 예정노선 프로젝트를 만드는 첫 화면.
+
+## 여는 길
+
+- 대시보드 프로젝트 줄 위의 [+]를 누르고 「새 프로젝트」 창에서 「예정노선」 카드를 고름. [새 프로젝트 여는 길](D01/01_새_프로젝트_여는_길) 참고.
+- 예정노선은 **산림청만** 만들 수 있음. 산림청 = 시스템 관리자 또는 메일 주소가 `.go.kr` 로 끝나는 사용자.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 사업 연도 시작 · 끝 | 사업 기간을 넣음. 한 해짜리면 두 칸을 같은 해로 둠 |
+| 2 | 사업 지역 | 사업이 있는 지역 이름을 적음. 꼭 넣어야 하는 칸 |
+| 3 | 임도 종류 · 설계속도 | 임도 종류를 고르면 옆 설계속도 목록이 따라 바뀜 |
+| 4 | 프로젝트명 | 위 칸을 채우면 이름이 저절로 만들어짐. 직접 고쳐도 됨 |
+| 5 | 노선 누가거리 | 노선 시작 · 종료 누가거리(m). 비워 두어도 됨 |
+| 6 | 단추 줄 | [?] 도움말 · [취소] 대시보드로 돌아감 · [등록] 프로젝트를 만듦 |
## 작업 순서
-1. 대시보드에서 [+] 를 누르고 「예정노선」 카드를 고름. 산림청이 아니면 카드가 흐리게 보이고 누르면 「예정노선은 산림청(시스템 관리자 · go.kr 메일)만 만들 수 있습니다.」 안내가 나옴.
-2. 「사업 연도 시작」 · 「사업 연도 끝」 에 사업 기간을 넣음. 한 해짜리면 두 칸을 같은 해로 둠.
-3. 「사업 지역」 을 적음. 필수 칸임.
-4. 「임도 종류」 를 고르고, 그에 맞춰 「설계속도」 를 고름.
-5. 「프로젝트명」 을 확인함. 위 칸을 채우면 자동으로 이름이 만들어지며, 직접 고쳐도 됨.
-6. 필요하면 「노선 시작 누가거리 (m)」 · 「노선 종료 누가거리 (m)」 를 넣음. 비워 두어도 됨.
-7. [등록] 을 누름. 칸에 문제가 있으면 해당 칸 아래에 빨간 안내가 나오고 등록되지 않음.
-## 단추
-| 단추 | 하는 일 |
-| --- | --- |
-| [?] | 이 도움말을 엶 |
-| [취소] | 등록하지 않고 대시보드로 돌아감 |
-| [등록] | 입력한 값으로 예정노선 프로젝트를 만들고 곧바로 D02 「기준 지정」 화면으로 감 |
+1. 대시보드 [+] → 「예정노선」 카드. [새 프로젝트 여는 길](D01/01_새_프로젝트_여는_길) 참고.
+2. 사업 연도 시작 · 끝과 사업 지역을 넣음. [사업 연도 · 지역](D01/02_사업연도_지역) 참고.
+3. 임도 종류와 설계속도를 고름. [임도 종류 · 설계속도](D01/03_임도종류_설계속도) 참고.
+4. 프로젝트명을 확인함. [프로젝트명](D01/04_프로젝트명) 참고.
+5. 필요하면 노선 시작 · 종료 누가거리를 넣음. [노선 누가거리](D01/05_누가거리) 참고.
+6. [등록]을 누름. 문제가 있는 칸은 아래에 빨간 안내가 나옴. [입력 오류와 등록](D01/06_입력오류와_등록) 참고.
+7. 등록되면 바로 다음 화면인 [기준 지정](D02/00_설명서)이 열림.
-## 결과 읽는 법
-- 등록에 성공하면 「프로젝트를 만들었습니다.」 알림이 뜨고, 만든 프로젝트가 현재 프로젝트가 되어 「기준 지정」 화면(지도 화면)이 열림.
-- 대시보드 프로젝트 표에도 종류 「예정노선」 으로 올라감. 표의 단계 막대(기준 지정 · 노선 분석 · 확정 · 내보내기)를 누르면 그 단계 화면으로 감.
-- 실패하면 서버가 알려 준 까닭이 알림으로 뜨고 이 화면에 머묾.
+> 주의: 등록 직후에는 노선 위치가 비어 있음. 지점을 정하고 저장해야 분석 단계로 갈 수 있음.
-## 알아 둘 것
-- 칸마다 뜻과 기본값은 「칸 뜻」 문서에 있음.
-- 임도 종류 · 설계속도는 임도설계(B 그룹)와 같은 기준을 씀. 등록 뒤 이 화면에서 고치는 방법은 코드에서 확인하지 못함.
-- 누가거리(노선을 따라 잰 거리) 두 칸은 저장만 되며, 다음 화면들에서 쓰이는 곳은 확인하지 못함. 「분석 뒤 실제 누가와 다르면 차이 표시」 는 준비 중으로 봄.
-- 등록 직후에는 노선 위치가 비어 있음. 지점을 정하고 저장해야 분석 단계로 갈 수 있음.
-- 지정받은 다른 회사 구성원은 예정노선을 보기만 할 수 있고 만들거나 고칠 수 없음.
+> 참고: 칸마다 뜻과 기본값은 [칸 뜻](D01/10_칸_뜻)에 있음.
diff --git a/A05_EduDetail/guide/D01/01_새_프로젝트_여는_길.md b/A05_EduDetail/guide/D01/01_새_프로젝트_여는_길.md
new file mode 100644
index 000000000..65bd86194
--- /dev/null
+++ b/A05_EduDetail/guide/D01/01_새_프로젝트_여는_길.md
@@ -0,0 +1,26 @@
+# 새 프로젝트 여는 길
+
+대시보드 [+]에서 「예정노선」 카드를 골라 등록 화면으로 들어가는 길.
+
+## 여는 길
+
+- 로그인 뒤 대시보드(프로젝트 목록 화면)에서 프로젝트 줄 위의 [+]를 누름.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [+]를 누름. 「새 프로젝트」 창이 열림. |
+| 2 | 카드 넷 가운데 「예정노선」을 누름. 창이 닫히고 예정노선 등록 화면이 열림. |
+| 3 | 취소하려면 창 오른쪽 위 [닫기]를 누름. |
+
+
+
+그림 번호 — 1 「예정노선」 카드
+
+## 보이는 것
+
+- 카드 넷 = 예정노선 · 임도설계 · 사방설계 · 안정성평가. 사방설계는 「준비 중」 표시가 붙어 눌러도 열리지 않음.
+- 산림청이 아닌 계정은 「예정노선」 카드가 흐리게 보임. 마우스를 올리면 까닭이 말풍선으로 보이고, 눌러도 「예정노선은 산림청(시스템 관리자 · go.kr 메일)만 만들 수 있습니다.」 안내만 나옴.
+
+> 참고: 이미 만든 예정노선은 대시보드 프로젝트 표에 「예정노선」 종류로 나옴. 표의 단계 막대(기준 지정 · 노선 분석 · 확정 · 내보내기)를 누르면 그 단계 화면으로 감.
diff --git a/A05_EduDetail/guide/D01/02_사업연도_지역.md b/A05_EduDetail/guide/D01/02_사업연도_지역.md
new file mode 100644
index 000000000..52c3ba8d9
--- /dev/null
+++ b/A05_EduDetail/guide/D01/02_사업연도_지역.md
@@ -0,0 +1,28 @@
+# 사업 연도 · 지역
+
+사업 기간(시작 · 끝 연도)과 사업 지역을 넣는 칸.
+
+## 여는 길
+
+- 예정노선 등록 화면 맨 위 줄 두 칸과 그 아래 「사업 지역」 칸.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 「사업 연도 시작」에 첫 해를 넣음. 처음에는 올해가 들어 있음. |
+| 2 | 「사업 연도 끝」에 마지막 해를 넣음. 한 해짜리 사업이면 시작과 같은 해. |
+| 3 | 「사업 지역」에 지역 이름을 적음(예: 울진군 금강송면). 100 글자까지. |
+| 4 | 「종류」 칸은 「노선 계획」으로 고정이라 고칠 수 없음. |
+
+
+
+그림 번호 — 1 사업 연도 시작 · 2 사업 연도 끝 · 3 사업 지역 · 4 종류(고정)
+
+## 보이는 것
+
+- 연도를 바꾸면 아래 「프로젝트명」이 바로 따라 바뀜(예: 2027~2029 울진군 금강송면 간선임도).
+- 연도는 2000 ~ 2100 안의 정수만 받음. 끝 연도가 시작 연도보다 앞이면 [등록] 때 안내가 나옴. [입력 오류와 등록](D01/06_입력오류와_등록) 참고.
+- 연도 수 + 1 개의 지점이 다음 화면에서 필요함. 2027 ~ 2029 세 해면 지점 네 개.
+
+> 주의: 사업 연도는 등록 뒤에 [기준 지정](D02/00_설명서) 화면에서 바꿀 수 없음. 등록 전에 확인.
diff --git a/A05_EduDetail/guide/D01/03_임도종류_설계속도.md b/A05_EduDetail/guide/D01/03_임도종류_설계속도.md
new file mode 100644
index 000000000..74546cc81
--- /dev/null
+++ b/A05_EduDetail/guide/D01/03_임도종류_설계속도.md
@@ -0,0 +1,32 @@
+# 임도 종류 · 설계속도
+
+노선을 설계하는 기준이 되는 임도 종류와 속도를 고르는 칸.
+
+## 여는 길
+
+- 예정노선 등록 화면 가운데 줄의 「임도 종류」 · 「설계속도」.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 「임도 종류」에서 간선임도 · 산불진화임도 · 작업임도 중 하나를 고름. |
+| 2 | 옆 「설계속도」 목록이 종류에 맞게 바뀜. 원하는 속도를 고름. |
+
+
+
+그림 번호 — 1 임도 종류 · 2 설계속도(간선임도에서 40 km/h 를 고른 모습)
+
+## 보이는 것
+
+| 임도 종류 | 고를 수 있는 설계속도 |
+| --- | --- |
+| 간선임도 | 20 · 30 · 40 km/h |
+| 산불진화임도 | 20 · 30 · 40 km/h |
+| 작업임도 | 20 km/h 만 |
+
+- 임도 종류를 바꾸면 설계속도가 가장 낮은 값(20 km/h)으로 돌아감. 종류를 먼저 정하고 속도를 고름.
+- 임도 종류는 프로젝트명에도 들어감.
+- 같은 기준을 임도설계(B 그룹)도 씀. 종류와 속도에 따라 분석 단계의 기울기 · 곡선 기준이 자동으로 정해짐.
+
+> 참고: 이 화면에서 기울기 상한 · 최소 곡선 반지름 같은 기준값을 따로 넣는 칸은 없음.
diff --git a/A05_EduDetail/guide/D01/04_프로젝트명.md b/A05_EduDetail/guide/D01/04_프로젝트명.md
new file mode 100644
index 000000000..7c0274e38
--- /dev/null
+++ b/A05_EduDetail/guide/D01/04_프로젝트명.md
@@ -0,0 +1,26 @@
+# 프로젝트명
+
+대시보드와 표에 보이는 프로젝트 이름. 칸을 채우면 저절로 만들어짐.
+
+## 여는 길
+
+- 예정노선 등록 화면 왼쪽 아래 「프로젝트명」 칸.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 사업 연도 · 사업 지역 · 임도 종류를 넣으면 이름이 저절로 채워짐. |
+| 2 | 다른 이름을 쓰고 싶으면 칸을 눌러 직접 고침. 255 글자까지, 비워 둘 수 없음. |
+
+
+
+그림 번호 — 1 프로젝트명(사업 지역을 넣자 이름에 지역이 들어간 모습)
+
+## 보이는 것
+
+- 이름 = 「사업 연도」 + 「사업 지역」 + 「임도 종류」를 띄어 이은 글. 연도가 여러 해이면 「2027~2029」 꼴, 한 해이면 해 하나만 들어감.
+- 이름을 직접 고치기 전에는 위 칸을 바꿀 때마다 통째로 다시 만들어짐.
+- 직접 고친 뒤에는 위 칸을 바꿔도 자동으로 만든 조각만 새 값으로 바뀌고, 직접 넣은 글은 그대로 남음. 직접 지운 조각은 되살아나지 않음.
+
+> 참고: 같은 이름 규칙을 임도설계 등록 화면도 씀.
diff --git a/A05_EduDetail/guide/D01/05_누가거리.md b/A05_EduDetail/guide/D01/05_누가거리.md
new file mode 100644
index 000000000..e43506999
--- /dev/null
+++ b/A05_EduDetail/guide/D01/05_누가거리.md
@@ -0,0 +1,27 @@
+# 노선 누가거리
+
+노선 시작과 끝의 측점 값(누가거리, m)을 미리 정해 두는 칸. 비워 두어도 등록됨.
+
+## 여는 길
+
+- 예정노선 등록 화면 맨 아래 「노선 시작 누가거리 (m)」 · 「노선 종료 누가거리 (m)」.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 노선 첫 지점의 측점 값을 「노선 시작 누가거리」에 넣음. 0 이상의 수. |
+| 2 | 노선 끝에서 목표로 하는 거리를 「노선 종료 누가거리」에 넣음. 시작 값보다 커야 함. |
+| 3 | 모르면 두 칸 모두 비워 둠. |
+
+
+
+그림 번호 — 1 노선 시작 누가거리 · 2 노선 종료 누가거리
+
+## 보이는 것
+
+- 시작 값은 [노선 분석](D03/00_설명서) 화면의 측점 번호가 어디서부터 세는지를 정함. 비우면 0 부터.
+- 종료 값은 분석을 마친 뒤 실제 이은 끝 누가와 비교해 「목표 · 차이」로 보임.
+- 종료 값이 시작 값 이하이면 [등록] 때 「종료 누가거리는 시작보다 커야 합니다.」 안내가 나옴.
+
+> 참고: 누가거리 = 노선을 따라 잰 거리.
diff --git a/A05_EduDetail/guide/D01/06_입력오류와_등록.md b/A05_EduDetail/guide/D01/06_입력오류와_등록.md
new file mode 100644
index 000000000..f4555b654
--- /dev/null
+++ b/A05_EduDetail/guide/D01/06_입력오류와_등록.md
@@ -0,0 +1,38 @@
+# 입력 오류와 등록
+
+[등록]을 눌렀을 때의 검사와 등록 뒤 이어지는 화면.
+
+## 여는 길
+
+- 예정노선 등록 화면 맨 아래 단추 줄([?] · [취소] · [등록]).
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 칸을 모두 채운 뒤 [등록]을 누름. |
+| 2 | 문제가 있으면 그 칸 아래에 빨간 안내가 나오고 등록되지 않음. 고친 뒤 다시 [등록]. |
+| 3 | 문제가 없으면 프로젝트가 만들어지고 「프로젝트를 만들었습니다.」 알림과 함께 [기준 지정](D02/00_설명서) 화면이 열림. |
+| 4 | 등록하지 않고 나가려면 [취소]를 누름. 대시보드로 돌아감. |
+
+
+
+그림 번호 — 1 끝 연도가 시작 연도보다 앞 · 2 사업 지역 비어 있음 · 3 종료 누가거리가 시작 이하
+
+
+
+그림 번호 — 1 [?] 도움말 · 2 [취소] · 3 [등록]
+
+## 보이는 것
+
+| 안내 | 뜻 |
+| --- | --- |
+| 숫자 범위 안내 | 시작 연도가 2000 ~ 2100 밖 |
+| 「끝 연도는 시작 연도와 같거나 뒤여야 합니다.」 | 끝 연도가 시작 연도보다 앞 |
+| 「필수 항목을 입력하세요.」 | 사업 지역 또는 프로젝트명이 빔 |
+| 「종료 누가거리는 시작보다 커야 합니다.」 | 종료 값이 시작 값 이하 |
+
+- 산림청이 아닌 계정이거나 회사에 연결되지 않은 계정이면 서버가 「예정노선은 산림청만 만들 수 있습니다.」로 막고, 이 화면에 머묾.
+- 등록에 실패하면 서버가 알려 준 까닭이 알림으로 뜸.
+
+> 주의: 등록한 프로젝트는 곧바로 현재 프로젝트가 됨. 대시보드 프로젝트 표에도 「예정노선」 종류로 올라감.
diff --git a/A05_EduDetail/guide/D01/10_칸_뜻.md b/A05_EduDetail/guide/D01/10_칸_뜻.md
index 692332260..d02b3e035 100644
--- a/A05_EduDetail/guide/D01/10_칸_뜻.md
+++ b/A05_EduDetail/guide/D01/10_칸_뜻.md
@@ -1,5 +1,9 @@
# 칸 뜻
+
+
+그림 번호는 [화면 한눈에](D01/00_설명서)의 번호 표와 같음.
+
| 칸 | 뜻 | 기본값 | 범위 · 규칙 |
| --- | --- | --- | --- |
| 사업 연도 시작 | 사업 첫 해 | 올해 | 2000 ~ 2100 의 정수 |
diff --git a/A05_EduDetail/guide/D01/D01_00_overview.webp b/A05_EduDetail/guide/D01/D01_00_overview.webp
new file mode 100644
index 000000000..615329ebf
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_00_overview.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_01_dashboard_new.webp b/A05_EduDetail/guide/D01/D01_01_dashboard_new.webp
new file mode 100644
index 000000000..d636f2aca
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_01_dashboard_new.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_02_year_region.webp b/A05_EduDetail/guide/D01/D01_02_year_region.webp
new file mode 100644
index 000000000..46953ef23
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_02_year_region.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_03_type_speed.webp b/A05_EduDetail/guide/D01/D01_03_type_speed.webp
new file mode 100644
index 000000000..3a3d33e10
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_03_type_speed.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_04_name.webp b/A05_EduDetail/guide/D01/D01_04_name.webp
new file mode 100644
index 000000000..fddea6e71
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_04_name.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_05_chainage.webp b/A05_EduDetail/guide/D01/D01_05_chainage.webp
new file mode 100644
index 000000000..86c1473c3
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_05_chainage.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_06_errors.webp b/A05_EduDetail/guide/D01/D01_06_errors.webp
new file mode 100644
index 000000000..a0e2b8659
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_06_errors.webp differ
diff --git a/A05_EduDetail/guide/D01/D01_07_buttons.webp b/A05_EduDetail/guide/D01/D01_07_buttons.webp
new file mode 100644
index 000000000..f6925946a
Binary files /dev/null and b/A05_EduDetail/guide/D01/D01_07_buttons.webp differ
diff --git a/A05_EduDetail/guide/D01/_scenes.json b/A05_EduDetail/guide/D01/_scenes.json
new file mode 100644
index 000000000..0bfd377e1
--- /dev/null
+++ b/A05_EduDetail/guide/D01/_scenes.json
@@ -0,0 +1,10 @@
+[
+ {"name":"D01_00_overview","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"wait_ms":600}],"clip":null,"callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(1)"},{"n":2,"sel":".b02-proj__grid > .ui-field:nth-child(3)"},{"n":3,"sel":".b02-proj__grid > .ui-field:nth-child(5)"},{"n":4,"sel":".b02-proj__grid > .ui-field:nth-child(7)"},{"n":5,"sel":".b02-proj__grid > .ui-field:nth-child(8)"},{"n":6,"sel":".b02-proj__actions","pos":"br"}]},
+ {"name":"D01_01_dashboard_new","route":"#/b01-account","project":"none","before":[{"wait_ms":2500},{"eval":"[...document.querySelectorAll('button')].find(x=>x.textContent.trim()==='+'&&x.offsetParent).click()"},{"wait":".b01-new-project__grid"},{"wait_ms":600}],"clip":".b01-new-project","callouts":[{"n":1,"sel":"[data-new-project=\"plan\"]"}]},
+ {"name":"D01_02_year_region","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"fill":".b02-proj__grid > .ui-field:nth-child(1) input","value":"2027"},{"fill":".b02-proj__grid > .ui-field:nth-child(2) input","value":"2029"},{"fill":".b02-proj__grid > .ui-field:nth-child(3) input","value":"울진군 금강송면"},{"wait_ms":400}],"clip":".b02-proj__grid","callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(1)"},{"n":2,"sel":".b02-proj__grid > .ui-field:nth-child(2)"},{"n":3,"sel":".b02-proj__grid > .ui-field:nth-child(3)"},{"n":4,"sel":".b02-proj__grid > .ui-field:nth-child(4)"}]},
+ {"name":"D01_03_type_speed","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"select":".b02-proj__grid > .ui-field:nth-child(6) select","value":"40"},{"wait_ms":400}],"clip":".b02-proj__grid","callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(5)"},{"n":2,"sel":".b02-proj__grid > .ui-field:nth-child(6)"}]},
+ {"name":"D01_04_name","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"fill":".b02-proj__grid > .ui-field:nth-child(3) input","value":"울진군 금강송면"},{"wait_ms":400}],"clip":".b02-proj__grid","callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(7)"}]},
+ {"name":"D01_05_chainage","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"fill":".b02-proj__grid > .ui-field:nth-child(8) input","value":"0"},{"fill":".b02-proj__grid > .ui-field:nth-child(9) input","value":"1100"},{"wait_ms":400}],"clip":".b02-proj__grid","callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(8)"},{"n":2,"sel":".b02-proj__grid > .ui-field:nth-child(9)"}]},
+ {"name":"D01_06_errors","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__grid"},{"fill":".b02-proj__grid > .ui-field:nth-child(1) input","value":"2029"},{"fill":".b02-proj__grid > .ui-field:nth-child(2) input","value":"2027"},{"fill":".b02-proj__grid > .ui-field:nth-child(8) input","value":"500"},{"fill":".b02-proj__grid > .ui-field:nth-child(9) input","value":"100"},{"click":".b02-proj__actions button:last-child"},{"wait":".ui-field__error.is-visible"},{"wait_ms":400}],"clip":".b02-proj__grid","callouts":[{"n":1,"sel":".b02-proj__grid > .ui-field:nth-child(2)"},{"n":2,"sel":".b02-proj__grid > .ui-field:nth-child(3)"},{"n":3,"sel":".b02-proj__grid > .ui-field:nth-child(9)"}]},
+ {"name":"D01_07_buttons","route":"#/d01-plan-register","project":"none","before":[{"wait":".b02-proj__actions"}],"clip":".b02-proj__actions","callouts":[{"n":1,"sel":".b02-proj__actions button:nth-child(1)"},{"n":2,"sel":".b02-proj__actions button:nth-child(2)"},{"n":3,"sel":".b02-proj__actions button:nth-child(3)"}]}
+]
diff --git a/A05_EduDetail/guide/D02/00_설명서.md b/A05_EduDetail/guide/D02/00_설명서.md
index a8eda8d5a..c10ed9fbf 100644
--- a/A05_EduDetail/guide/D02/00_설명서.md
+++ b/A05_EduDetail/guide/D02/00_설명서.md
@@ -1,59 +1,34 @@
-# 기준 지정 설명서
+# 기준 지정
-## 이 화면에서 하는 일
-- 예정노선 1단계. 사업 연도마다 노선의 **시점**과 **종점**을 지도 위에 정하는 화면임.
-- 가운데 = 카카오맵(지점과 연도별 선이 그려짐). 왼쪽 = 「연도 지점」 표(지점 이름 · 경도 · 위도 입력칸).
-- 정한 지점은 다음 단계(노선 분석)가 길을 찾는 기준이 됨.
-- 지점 저장은 산림청만 할 수 있음. 지정받은 다른 회사는 보기만 가능하며 저장하면 「예정노선 지점은 산림청만 고칠 수 있습니다.」 로 막힘.
+예정노선 1단계. 사업 연도마다 노선의 시점과 종점을 지도 위에 정하는 화면.
+
+## 여는 길
+
+- [예정노선 등록](D01/00_설명서)에서 [등록]을 누르면 바로 열림.
+- 대시보드 프로젝트 표에서 예정노선 줄의 단계 막대 「기준 지정」을 눌러도 열림.
+- 이미 만든 예정노선은 어느 단계 화면에서든 ☰ 에서 「기준 지정」을 골라 돌아옴. [단계 이동 메뉴](D02/05_단계_이동_메뉴) 참고.
+- 지점 저장은 산림청만 할 수 있음. 지정받은 다른 회사는 보기만 가능하며 저장하면 「예정노선 지점은 산림청만 고칠 수 있습니다.」 안내로 막힘.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 제목 줄 | 단계 이름(기준 지정)과 프로젝트 이름. 왼쪽 ☰ 로 진행 단계 메뉴를 엶 |
+| 2 | 「연도 지점」 표 | 지점마다 줄 하나. 📍 · 경도 · 위도 칸이 있음 |
+| 3 | 안내 글 | 지점을 놓는 법 한 줄 안내 |
+| 4 | 지도 | 지점 표지와 연도별 선이 그려짐. 지도를 눌러 지점을 놓고, 표지를 끌어 옮김 |
+| 5 | 단추 줄 | [?] 가이드 · [<] 이전 · [>] 다음 · [저장] |
## 작업 순서
-1. 화면이 열리면 사업 연도 수 + 1 개의 지점 줄이 표에 나타남. 예: 2026 ~ 2027 두 해이면 「2026 시점」 · 「2026 종점 · 2027 시점」 · 「2027 종점」 세 줄.
-2. 처음에는 비어 있는 첫 줄이 놓을 지점으로 잡혀 있음(줄이 강조되어 보임).
-3. 지도를 눌러 그 지점을 놓음. 놓으면 다음 빈 지점이 자동으로 놓을 지점이 됨.
-4. 놓은 뒤 고치려면 지도의 표지를 끌어 옮기거나, 표의 경도 · 위도 칸에 값을 직접 넣음.
-5. 모든 줄이 채워지면 연도마다 다른 색의 선이 지점 사이를 이음.
-6. [저장] 또는 [>] 를 누름.
-## 지점 정하는 방법
-| 방법 | 하는 법 | 결과 |
-| --- | --- | --- |
-| 지도 누름 | 줄 옆 📍 로 놓을 지점을 고른 뒤 지도를 누름 | 그 자리에 표지가 놓임 |
-| 표지 끌기 | 지도의 표지를 끌어 놓음 | 표의 값이 따라 바뀜 |
-| 좌표 입력 | 경도 · 위도 두 칸에 값을 넣고 칸을 벗어남 | 값이 맞으면 표지가 옮겨짐 · 틀리면 칸이 빨갛게 표시됨 |
+1. 화면이 열리면 지점 줄이 사업 연도 수 + 1 개 나타남. 예: 2027 ~ 2029 세 해이면 네 줄. [연도 지점 표](D02/01_연도_지점_표) 참고.
+2. 놓을 지점이 줄에서 강조되어 있음. 지도를 눌러 그 지점을 놓음. [지도에서 지점 놓기](D02/02_지도에서_지점_놓기) 참고.
+3. 놓은 뒤 고치려면 표지를 끌어 옮기거나 경도 · 위도 칸에 값을 직접 넣음. [좌표 직접 입력](D02/03_좌표_직접_입력) 참고.
+4. 모든 줄이 채워지면 연도마다 다른 색의 선이 지점 사이를 이음.
+5. [저장] 또는 [>]를 누름. [단추와 저장](D02/04_단추와_저장) 참고.
-- 놓을 지점을 고르지 않고 지도를 누르면 「지도에 놓을 지점 고르기」 안내가 나옴.
-- 다른 프로그램에서 구한 좌표는 경도 · 위도(WGS84, 소수 7 자리까지 반영)로 넣을 것.
-- 경도는 120 ~ 135, 위도는 30 ~ 45 범위만 받음.
+> 주의: 서버에는 [저장] 이나 [>]를 눌러야 반영됨. 자동 저장은 없음.
-## 연도 표 읽는 법
-| 줄 이름 | 뜻 |
-| --- | --- |
-| 첫 연도 시점 | 노선 전체의 출발점 |
-| 앞 연도 종점 · 다음 연도 시점 | 한 점이 두 역할. 앞 연도의 끝이자 다음 연도의 시작 |
-| 마지막 연도 종점 | 노선 전체의 도착점 |
-
-- 직전 연도 종점과 다음 연도 시점은 항상 같은 점이며, 하나만 옮기면 두 연도의 선이 함께 움직임.
-- 줄 색과 지도 선 색은 연도별로 대응함(6 색을 돌려 씀).
-
-## 단추
-| 단추 | 하는 일 |
-| --- | --- |
-| [?] | 이 도움말 |
-| [<] | 이전 단계. 이 화면이 첫 단계라 흐림 |
-| [>] | 지점 저장 뒤 다음 단계 「노선 분석」 으로 감 |
-| [저장] | 지점을 저장하고 좌표계를 정함 |
-| 📍 | 지도를 눌렀을 때 놓을 지점으로 이 줄을 고름 |
-| 위 단계 막대 | 「기준 지정」 · 「노선 분석」 · 「확정 · 내보내기」 로 바로 이동 |
-
-## 결과 읽는 법
-- 저장하면 「지점을 저장했습니다.」 알림이 뜸.
-- 표 아래 한 줄에 「저장 좌표계 EPSG:번호」 와 첫 연도 시점의 X · Y(m)가 나옴. 저장 전에는 「아직 저장 안 함」 이 나옴.
-- 저장 전 고친 값은 이 화면을 다시 열어도 같은 브라우저 안에서는 남아 있음. 서버에는 [저장] 이나 [>] 를 눌러야 반영됨(자동 저장 없음).
-
-## 알아 둘 것
-- **[>] 와 수치지형도**: [>] 는 지점을 저장한 뒤 「노선 분석」 화면을 엶. 수치지형도(도엽) · 위성 사진 · 연도별 지형면 받기는 그 화면이 열릴 때 뒤에서 시작되며, 이미 받은 범위 안이면 건너뜀. 지점을 저장하지 못하면(예: 빈 지점) 이 화면에 머묾.
-- 빈 지점이 남은 채 저장하면 「○○○○년 시점이 비었습니다.」 또는 「○○○○년 종점이 비었습니다.」 로 막힘.
-- 연도 범위(시작 · 끝)는 등록 때 정해지며 이 화면에서 바꿀 수 없음.
-- **이미 분석 · 확정한 연도의 지점을 옮기면** 그 연도의 분석 노선과 확정 상태가 비워지고 다시 분석해야 함. 1 mm 이내 변화는 같은 지점으로 보아 지우지 않음.
-- 좌표계가 바뀌는 경우(「쓰인 방법과 근거」 문서의 좌표계 절)에는 모든 연도의 분석 노선이 비워짐.
-- 지도는 카카오맵을 씀. 점이 하나도 없어도 우리나라 가운데쯤을 먼저 보여 줌.
+> 참고: 저장하지 않고 고친 값은 같은 브라우저 탭 안에서는 화면을 다시 열어도 남아 있음.
diff --git a/A05_EduDetail/guide/D02/01_연도_지점_표.md b/A05_EduDetail/guide/D02/01_연도_지점_표.md
new file mode 100644
index 000000000..d8baae2e5
--- /dev/null
+++ b/A05_EduDetail/guide/D02/01_연도_지점_표.md
@@ -0,0 +1,33 @@
+# 연도 지점 표
+
+왼쪽 패널의 「연도 지점」 카드. 지점마다 줄 하나로 이름 · 📍 · 경도 · 위도를 보여 줌.
+
+## 여는 길
+
+- 기준 지정 화면 왼쪽 패널 맨 위의 「연도 지점」 카드. 제목 오른쪽 ▼ 를 누르면 접고 펼침.
+
+
+
+그림 번호 — 1 안내 글 · 2 지점 한 줄 · 3 📍 단추 · 4 경도 칸 · 5 위도 칸 · 6 저장 좌표계 줄
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 줄 이름으로 어느 지점인지 확인. 첫 줄 = 첫 연도 시점, 마지막 줄 = 마지막 연도 종점. |
+| 2 | 줄 왼쪽 색 띠로 어느 연도 선인지 확인. 지도 선 색과 짝(6 색을 돌려 씀). |
+| 3 | 사이 줄은 「앞 연도 종점 · 다음 연도 시점」 한 점. 하나만 옮기면 두 연도의 선이 함께 움직임. |
+| 4 | 값을 고치는 방법은 [지도에서 지점 놓기](D02/02_지도에서_지점_놓기) · [좌표 직접 입력](D02/03_좌표_직접_입력) 참고. |
+
+## 보이는 것
+
+| 줄 이름 | 뜻 |
+| --- | --- |
+| 첫 연도 시점 | 노선 전체의 출발점 |
+| 앞 연도 종점 · 다음 연도 시점 | 한 점이 두 역할 |
+| 마지막 연도 종점 | 노선 전체의 도착점 |
+
+- 표 아래 한 줄 = 저장 상태. 저장 전이면 「아직 저장 안 함」, 저장했으면 「저장 좌표계 EPSG:번호」와 첫 연도 시점의 X · Y(m).
+- 산림청이 아닌 계정은 📍 단추가 안 보이고 칸이 잠겨 있음. 보기만 가능.
+
+> 참고: 칸마다 뜻과 규칙은 [칸 뜻](D02/10_칸_뜻)에 있음. 좌표계가 정해지는 방법은 [쓰인 방법과 근거](D02/20_쓰인_방법과_근거) 참고.
diff --git a/A05_EduDetail/guide/D02/02_지도에서_지점_놓기.md b/A05_EduDetail/guide/D02/02_지도에서_지점_놓기.md
new file mode 100644
index 000000000..ce7459eb2
--- /dev/null
+++ b/A05_EduDetail/guide/D02/02_지도에서_지점_놓기.md
@@ -0,0 +1,39 @@
+# 지도에서 지점 놓기
+
+지도를 눌러 지점을 놓고, 놓은 표지를 끌어 옮기는 방법.
+
+## 여는 길
+
+- 기준 지정 화면 가운데 지도와 왼쪽 「연도 지점」 표의 📍 단추.
+
+
+
+그림 번호 — 1 지도 위 안내 글
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 놓을 지점을 고름. 화면이 열리면 비어 있는 첫 줄이 자동으로 골라져 강조됨. 다른 줄에 놓으려면 그 줄의 📍 를 누름. |
+| 2 | 지도에서 놓을 자리를 누름. 그 자리에 표지가 놓이고 표의 경도 · 위도가 채워짐. |
+| 3 | 놓고 나면 다음 빈 지점이 자동으로 놓을 지점이 됨. |
+| 4 | 놓은 뒤 고치려면 표지를 마우스로 끌어 옮김. 표의 값이 따라 바뀜. |
+| 5 | 지도는 빈 곳을 끌어 옮기고 휠로 확대 · 축소함. |
+
+
+
+그림 번호 — 1 📍 단추 · 2 강조된 줄(놓을 지점)
+
+
+
+그림 번호 — 1 「지도에 놓을 지점 고르기」 안내
+
+## 보이는 것
+
+- 지점이 모두 놓이면 연도마다 다른 색의 선이 지점 사이를 이음. 표지 위에는 지점 이름이 붙음.
+- 놓을 지점을 고르지 않고 지도를 누르면 「지도에 놓을 지점 고르기」 안내가 나오고 아무것도 놓이지 않음.
+- 지점이 하나도 없으면 우리나라 가운데쯤이 먼저 보임. 처음 한 점을 놓으면 그 점에 맞춰 보이고, 그 뒤로는 사용자가 맞춘 보기(중심 · 확대)를 그대로 둠.
+- 지도는 카카오맵을 씀.
+- 산림청이 아닌 계정은 지도를 눌러도 놓이지 않고 표지도 끌 수 없음. 지도 위 안내 글이 「보기 전용 — 지점은 산림청만 고칩니다.」로 바뀜.
+
+> 주의: 놓은 지점은 [저장] 이나 [>]를 누르기 전까지 서버에 남지 않음. [단추와 저장](D02/04_단추와_저장) 참고.
diff --git a/A05_EduDetail/guide/D02/03_좌표_직접_입력.md b/A05_EduDetail/guide/D02/03_좌표_직접_입력.md
new file mode 100644
index 000000000..149b302b7
--- /dev/null
+++ b/A05_EduDetail/guide/D02/03_좌표_직접_입력.md
@@ -0,0 +1,28 @@
+# 좌표 직접 입력
+
+다른 프로그램에서 구한 좌표를 표의 경도 · 위도 칸에 직접 넣는 방법.
+
+## 여는 길
+
+- 왼쪽 「연도 지점」 표의 줄마다 있는 경도 · 위도 두 칸.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 고칠 줄의 경도 칸에 값을 넣음. |
+| 2 | 위도 칸에도 값을 넣고 칸 밖을 누르거나 Tab 키를 누름. |
+| 3 | 두 값이 범위 안이면 지점이 옮겨지고 지도 표지가 따라 움직임. |
+| 4 | 범위 밖이면 두 칸이 빨갛게 표시되고 반영되지 않음. 값을 고쳐 다시 넣음. |
+
+
+
+그림 번호 — 1 경도 칸(범위 밖 값 200을 넣은 모습) · 2 위도 칸
+
+## 보이는 것
+
+- 경도는 120 ~ 135, 위도는 30 ~ 45 범위만 받음.
+- 두 칸이 모두 범위 안일 때 반영됨. 한 칸만 넣으면 반영되지 않음.
+- 반영될 때 소수 7 자리(약 1 cm)로 반올림됨.
+
+> 주의: 좌표는 경도 · 위도(WGS84)로 넣음. 평면좌표(X · Y)를 그대로 넣으면 범위 밖으로 처리됨.
diff --git a/A05_EduDetail/guide/D02/04_단추와_저장.md b/A05_EduDetail/guide/D02/04_단추와_저장.md
new file mode 100644
index 000000000..4464b370c
--- /dev/null
+++ b/A05_EduDetail/guide/D02/04_단추와_저장.md
@@ -0,0 +1,33 @@
+# 단추와 저장
+
+왼쪽 패널 맨 아래 단추 줄 — [?] · [<] · [>] · [저장]과 저장 때 일어나는 일.
+
+## 여는 길
+
+- 기준 지정 화면 왼쪽 패널 맨 아래.
+
+
+
+그림 번호 — 1 [?] 가이드 · 2 [<] 이전 단계(첫 단계라 흐림) · 3 [>] 다음 단계 · 4 [저장]
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 모든 지점 줄을 채움. |
+| 2 | [저장]을 누름. 지점이 서버에 저장되고 「지점을 저장했습니다.」 알림이 뜸. |
+| 3 | 바로 다음 단계로 가려면 [저장] 대신 [>]를 누름. 지점을 저장한 뒤 [노선 분석](D03/00_설명서) 화면이 열림. |
+| 4 | 저장하지 못하면(예: 빈 지점) 이 화면에 머묾. |
+
+## 보이는 것
+
+- 저장하면 표 아래 한 줄이 「저장 좌표계 EPSG:번호」와 첫 연도 시점의 X · Y(m)로 바뀜.
+- 빈 지점이 남은 채 저장하면 「○○○○년 시점이 비었습니다.」 또는 「○○○○년 종점이 비었습니다.」로 막힘.
+- 산림청이 아닌 계정은 [저장]이 안 보이고, [>]는 저장 없이 그냥 다음 화면으로 감.
+- [>]는 지점 저장 뒤 [노선 분석](D03/00_설명서) 화면을 엶. 수치지형도(도엽) · 위성 사진 · 연도별 지형면 받기는 그 화면이 열릴 때 뒤에서 시작되며, 이미 받은 범위 안이면 건너뜀.
+
+> 주의: 이미 분석 · 확정한 연도의 지점을 옮기면 그 연도의 분석 노선과 확정 상태가 비워지고 다시 분석해야 함. 1 mm 이내 변화는 같은 지점으로 보아 지우지 않음.
+
+> 주의: 좌표계가 바뀌는 경우([쓰인 방법과 근거](D02/20_쓰인_방법과_근거) 참고)에는 모든 연도의 분석 노선이 비워짐.
+
+> 참고: 연도 범위(시작 · 끝)는 등록 때 정해지며 이 화면에서 바꿀 수 없음.
diff --git a/A05_EduDetail/guide/D02/05_단계_이동_메뉴.md b/A05_EduDetail/guide/D02/05_단계_이동_메뉴.md
new file mode 100644
index 000000000..5e2b919cb
--- /dev/null
+++ b/A05_EduDetail/guide/D02/05_단계_이동_메뉴.md
@@ -0,0 +1,27 @@
+# 단계 이동 메뉴
+
+☰ 로 진행 단계를 열어 대시보드나 다른 단계 화면으로 옮겨 가는 방법.
+
+## 여는 길
+
+- 화면 왼쪽 위의 ☰ 를 누름.
+
+
+
+그림 번호 — 1 진행 단계 목록(대시보드 · 기준 지정 · 노선 분석 · 확정 · 내보내기)
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | ☰ 를 누르면 왼쪽에 메뉴가 열림. |
+| 2 | 가야 할 단계를 누름. 지금 단계는 강조되어 있음. |
+| 3 | 메뉴 밖 어두운 곳을 누르면 닫힘. |
+
+## 보이는 것
+
+- 맨 위 「대시보드」 = 프로젝트 목록 화면으로 돌아감.
+- 단계는 기준 지정 → 노선 분석 → 확정 · 내보내기 순.
+- 메뉴 아래에는 홈페이지 바로가기 · 언어 · 테마 · 로그아웃이 같이 있음.
+
+> 주의: 지점을 고치고 저장하지 않은 채 다른 단계로 가면 서버에는 저장되지 않음. 먼저 [저장]을 누를 것.
diff --git a/A05_EduDetail/guide/D02/10_칸_뜻.md b/A05_EduDetail/guide/D02/10_칸_뜻.md
index 24a2720a4..2fb587514 100644
--- a/A05_EduDetail/guide/D02/10_칸_뜻.md
+++ b/A05_EduDetail/guide/D02/10_칸_뜻.md
@@ -1,5 +1,9 @@
# 칸 뜻
+
+
+그림 번호는 [연도 지점 표](D02/01_연도_지점_표)와 같음.
+
## 왼쪽 「연도 지점」 표
| 칸 | 뜻 | 규칙 |
| --- | --- | --- |
diff --git a/A05_EduDetail/guide/D02/D02_00_overview.webp b/A05_EduDetail/guide/D02/D02_00_overview.webp
new file mode 100644
index 000000000..65d8a3f54
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_00_overview.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_01_points_table.webp b/A05_EduDetail/guide/D02/D02_01_points_table.webp
new file mode 100644
index 000000000..7633737ee
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_01_points_table.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_02_year_colors.webp b/A05_EduDetail/guide/D02/D02_02_year_colors.webp
new file mode 100644
index 000000000..4860c5771
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_02_year_colors.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_03_pick_point.webp b/A05_EduDetail/guide/D02/D02_03_pick_point.webp
new file mode 100644
index 000000000..fb536cf7b
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_03_pick_point.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_04_map_toast.webp b/A05_EduDetail/guide/D02/D02_04_map_toast.webp
new file mode 100644
index 000000000..b652fb599
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_04_map_toast.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_05_coordinate_error.webp b/A05_EduDetail/guide/D02/D02_05_coordinate_error.webp
new file mode 100644
index 000000000..697fcf9de
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_05_coordinate_error.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_06_buttons.webp b/A05_EduDetail/guide/D02/D02_06_buttons.webp
new file mode 100644
index 000000000..f7cd4ddd9
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_06_buttons.webp differ
diff --git a/A05_EduDetail/guide/D02/D02_07_steps_menu.webp b/A05_EduDetail/guide/D02/D02_07_steps_menu.webp
new file mode 100644
index 000000000..dbeb348aa
Binary files /dev/null and b/A05_EduDetail/guide/D02/D02_07_steps_menu.webp differ
diff --git a/A05_EduDetail/guide/D02/_scenes.json b/A05_EduDetail/guide/D02/_scenes.json
new file mode 100644
index 000000000..def1a74f5
--- /dev/null
+++ b/A05_EduDetail/guide/D02/_scenes.json
@@ -0,0 +1,10 @@
+[
+ {"name":"D02_00_overview","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500}],"settle_ms":1500,"clip":null,"callouts":[{"n":1,"sel":".ui-workflow-overlay__header"},{"n":2,"sel":".d02-points"},{"n":3,"sel":".d02-info"},{"n":4,"sel":".d02-map","pos":"tr"},{"n":5,"sel":".ui-sidebar-actions","pos":"tr"}]},
+ {"name":"D02_01_points_table","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500}],"settle_ms":1500,"clip":".d02-panel .ui-sidebar-card","callouts":[{"n":1,"sel":".d02-panel p.d02-info:first-of-type"},{"n":2,"sel":".d02-points__row:nth-child(1)","pos":"tr"},{"n":3,"sel":".d02-points__row:nth-child(1) button","pos":"bl"},{"n":4,"sel":".d02-points__row:nth-child(1) input[data-axis=lon]","pos":"br"},{"n":5,"sel":".d02-points__row:nth-child(1) input[data-axis=lat]","pos":"br"},{"n":6,"sel":".d02-points ~ p.d02-info"}]},
+ {"name":"D02_02_year_colors","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500}],"settle_ms":1500,"clip":".d02-map","callouts":[{"n":1,"sel":".ui-kakao-map__hint"}]},
+ {"name":"D02_03_pick_point","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500},{"click":".d02-points__row:nth-child(2) button"},{"wait":".d02-points__row:nth-child(2).is-active"},{"wait_ms":300}],"settle_ms":1500,"clip":".d02-panel .ui-sidebar-card","callouts":[{"n":1,"sel":".d02-points__row:nth-child(2) button"},{"n":2,"sel":".d02-points__row:nth-child(2)"}]},
+ {"name":"D02_04_map_toast","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500},{"click":".ui-kakao-map__box"},{"wait":".ui-toast, .ui-toast-container, [class*=toast]"},{"wait_ms":400}],"settle_ms":1500,"clip":null,"callouts":[{"n":1,"sel":"[class*=toast]","pos":"tr"}]},
+ {"name":"D02_05_coordinate_error","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500},{"fill":".d02-points__row:nth-child(1) input[data-axis=lon]","value":"200"},{"press":"Tab","sel":".d02-points__row:nth-child(1) input[data-axis=lon]"},{"wait":".d02-points__row:nth-child(1) input.is-invalid"},{"wait_ms":300}],"settle_ms":1500,"clip":".d02-panel .ui-sidebar-card","callouts":[{"n":1,"sel":".d02-points__row:nth-child(1) input[data-axis=lon]"},{"n":2,"sel":".d02-points__row:nth-child(1) input[data-axis=lat]"}]},
+ {"name":"D02_06_buttons","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"wait":".ui-kakao-map__box"},{"wait_ms":3500}],"settle_ms":1500,"clip":".ui-sidebar-actions","callouts":[{"n":1,"sel":".ui-sidebar-actions > button:nth-child(1)"},{"n":2,"sel":".ui-sidebar-actions > button:nth-child(2)"},{"n":3,"sel":".ui-sidebar-actions > button:nth-child(3)"},{"n":4,"sel":".ui-sidebar-actions > button:nth-child(4)"}]},
+ {"name":"D02_07_steps_menu","route":"#/d02-plan-base","project":"plan","before":[{"wait":".d02-points__row"},{"click":".app-burger"},{"wait":".app-drawer__steps .ui-workflow-layout__step"},{"wait_ms":700}],"settle_ms":1500,"clip":null,"callouts":[{"n":1,"sel":".app-drawer__steps","pos":"tr"}]}
+]
diff --git a/A05_EduDetail/guide/D03/00_설명서.md b/A05_EduDetail/guide/D03/00_설명서.md
index f5c9fc505..0aaf90c85 100644
--- a/A05_EduDetail/guide/D03/00_설명서.md
+++ b/A05_EduDetail/guide/D03/00_설명서.md
@@ -1,80 +1,36 @@
-# 예정노선 2단계 분석 설명서
+# 노선 분석
-## 이 화면에서 하는 일
+예정노선 2단계. 1단계에서 정한 지점들을 연도 구간마다 이어 주는 노선 후보를 자동으로 찾아 연도별로 하나씩 고르는 화면.
-- 1단계(기준 지정)에서 정한 지점들을 연도 구간마다 이어 주는 노선을 자동으로 찾아 줌.
-- 연도마다 노선 후보 넷(영선 · 토공 최소 · 기울기 최소 · 비중 계산)을 만들어 보여 주고, 연도별로 하나씩 고름.
-- 고른 후보를 이어 붙여 전체 예정노선 한 줄과 측점(20 m 간격)을 평면에 표시함.
-- 측점을 누르면 그 자리 지반선 횡단을 아래에 보여 주고, [3D] 로 지형과 노선을 입체로 봄.
-- 지점이 마음에 안 들면 평면에서 직접 끌어 옮긴 뒤 다시 분석 가능.
-- 노선 후보를 찾는 엔진은 임도설계 노선 추천(B05)과 같은 엔진임. 이 화면에서는 시작점과 끝점만 정해진 두 지점 사이를 구간별로 한 번씩 찾음.
+## 여는 길
-## 화면 구성
+- [기준 지정](D02/00_설명서) 화면에서 [>]를 누르면 지점을 저장하고 이 화면이 열림.
+- 대시보드 프로젝트 표의 단계 막대 「노선 분석」을 누르거나, ☰ 에서 「노선 분석」을 골라도 열림.
+- 지점이 비어 있으면 「N년 지점이 비었습니다 — 1단계(기준 지정)에서 정하세요.」 안내만 나오고 진행이 안 됨.
-- 가운데 위 = 평면 지도. 위성 사진 위에 등고선, 지점, 노선, 측점이 겹쳐 보임.
-- 가운데 아래 = 횡단 판. 측점을 누르면 채워지며, 제목 줄(「횡단」)을 누르면 접고 펼 수 있음.
-- 왼쪽 = 「지형」 카드, 「연도별 노선」 카드, 아래쪽 단추 [분석] [저장] [3D].
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 평면 지도 | 위성 사진 위에 등고선 · 지점 · 노선 · 측점이 겹쳐 보임. 측점을 누르면 아래 횡단이 채워짐 |
+| 2 | 횡단 판 | 누른 측점의 지반선 횡단. 제목 줄(「횡단」)을 눌러 접고 펼침 |
+| 3 | 「지형」 카드 | 지형 받기 · 분석 진행 상태와 받은 지형 범위 안내 |
+| 4 | 「연도별 노선」 카드 | 연도마다 후보 넷. 하나를 눌러 고름 |
+| 5 | 단추 줄 | [?] · [<] · [>] · [분석] · [저장] · [3D] |
## 작업 순서
-1. 화면을 열면 자동으로 지형을 확인함. 지점이 이미 받은 지형 범위 안이면 그대로 두고, 아니면 뒤에서 지형을 받기 시작함(왼쪽 「지형」 카드에 진행률 표시).
-2. 지점 위치가 마음에 안 들면 평면에서 지점(원)을 끌어 옮김. 지점이 받은 지형 밖이면 [범위 밖 — 더 받기] 를 눌러 지형을 더 받음.
-3. [분석] 을 누름. 연도 구간마다 후보 넷을 찾으며, 진행률이 「지형」 카드 자리에 표시됨.
-4. 「연도별 노선」 카드에서 연도마다 후보 하나를 누름(눌린 카드가 강조됨). 평면의 노선과 누가(거리) 숫자가 곧바로 바뀜.
-5. 평면의 측점 눈금을 눌러 횡단을 확인하고, 필요하면 [3D] 로 확인함.
-6. 모든 연도에 노선이 있으면 [저장] 을 누름. 저장 중에는 화면 전체가 잠깐 잠김.
-7. 다음 단계(확정 · 업체 · 내보내기)로 넘어감.
+1. 화면을 열면 지형을 자동으로 확인함. 받은 지형 밖이면 뒤에서 지형을 받기 시작함. [지형 받기](D03/01_지형_받기) 참고.
+2. [분석]을 누름. 연도 구간마다 후보 넷을 찾음. [분석 · 저장 · 3D 단추](D03/05_분석_저장_단추) 참고.
+3. 「연도별 노선」 카드에서 연도마다 후보 하나를 고름. 평면의 노선이 바로 바뀜. [연도별 노선 고르기](D03/02_연도별_노선_고르기) 참고.
+4. 평면 지도에서 노선 · 측점을 확인하고, 지점이 마음에 안 들면 끌어 옮긴 뒤 다시 [분석]. [평면 지도 읽기](D03/03_평면_지도_읽기) 참고.
+5. 측점 눈금을 눌러 지반선 횡단을 확인함. [측점 횡단](D03/04_측점_횡단) 참고.
+6. 필요하면 [3D]로 지형과 노선을 입체로 봄. [3D 보기](D03/06_3D_보기) 참고.
+7. 모든 연도에 노선이 있으면 [저장]을 누름. 저장 중에는 화면 전체가 잠깐 잠김.
+8. 다음 단계 [확정 · 내보내기](D04/00_설명서)로 넘어감.
-## 단추
+> 주의: 노선 모양은 [분석]을 해야 생김. [분석]을 하지 않으면 [저장]이 눌리지 않음.
-| 단추 | 하는 일 |
-| --- | --- |
-| 분석 | 연도 구간마다 노선 후보 넷을 찾음. 입력(지점 · 기준 · 지형)이 이전과 같으면 저장된 결과를 그대로 불러와 바로 끝남. 받은 지형 밖에 지점이 있으면 눌 수 없음 |
-| 저장 | 연도별로 고른 후보를 정본으로 저장함. 끌어 옮긴 지점도 이때 함께 저장됨. 어느 연도든 노선이 없으면 눌 수 없음(마우스를 올리면 안내 문구 표시) |
-| 3D | 지형과 노선을 입체로 보는 창을 엶. 노선이 하나라도 있어야 눌 수 있음 |
-| 범위 밖 — 더 받기 | 지점이 받은 지형 밖일 때만 나타남. 지형(수치지형도 · 위성 · 연도별 높이 자료)을 더 받음 |
-
-- 산림청 소속이 아닌 사용자(지정받은 회사 등)에게는 [분석] [저장] [범위 밖 — 더 받기] 가 보이지 않으며 지점도 끌 수 없음. 보기만 가능.
-
-## 결과 읽는 법
-
-- **평면의 선 모양**
- - 굵은 선 = 연도별로 고른 후보를 이은 예정노선.
- - 흰 점선(옅음) = 고르지 않은 다른 후보들. 분석 전에는 지점끼리 잇는 점선만 보임.
- - 누른 측점 = 보라색 고리로 표시됨.
-- **지점(마디) 색**
- - 초록 = 첫 지점(시점), 빨강 = 마지막 지점(종점), 파랑 = 연도가 바뀌는 중간 지점.
- - 지점 둘레에 빨간 고리와 점선 고리 = 그 지점이 받은 지형 밖이라는 뜻. 「지형」 카드에 「빨간 고리 지점이 받은 지형 밖입니다 — 더 받아야 분석합니다.」 가 나옴.
-- **등고선** = 도엽(수치지형도) 등고선. 노란 점선과 노란 숫자(높이)로 보임. 지도를 확대하면 더 촘촘히 보임.
-- **연도별 노선 카드**
- - 윗줄 = 「연도 · 시작 측점 ~ 끝 측점 (연장 m)」. 분석 전에는 「분석 전 — [분석]을 누르세요」 가 보임.
- - 후보 카드 한 장마다 「연장 · 최대 기울기(%) · 위반 개수」 를 보여 줌. 위반 = 기울기 기준을 지키지 못한 곳의 수.
- - 「노선 없음」 으로 회색 처리된 카드 = 그 후보는 길을 찾지 못함. 마우스를 올리면 까닭 표시. 누를 수 없음.
- - 고르지 않고 두면 네 후보 중 차례(영선 → 토공 최소 → 기울기 최소 → 비중 계산)대로 처음 성공한 후보가 자동으로 잡힘.
-- **누가(측점 번호)** = 앞 연도 끝 = 다음 연도 시작으로 이어서 셈. 시작 값은 프로젝트 등록 때 정한 노선 시작 누가. 연도 경계는 꺾인 채 한 측점으로 표시됨.
-- **횡단 판** = 누른 측점의 지반선 단면. 제목 줄에 「연도 · 측점 이름 · 중심 지반고」 표시. 좌우 20 m 범위의 지반만 보이며 설계선은 없음.
-
-## 보이는 것과 안 보이는 것
-
-| 구분 | 내용 |
-| --- | --- |
-| 보임 | 위성 지도, 등고선, 지점, 노선 중심선, 측점 눈금과 이름, 지반선 횡단, 지형 + 중심선 3D |
-| 안 보임 | 노견, 절토 · 성토선, 종단도, 배수유역, 구조물(3D 에도 없음) |
-| 이 화면에 칸 없음 | 종단 기울기 상한 · 최소 곡선 반지름 등 기준값. 등록 때 정한 임도 종류와 설계속도로 자동 정해짐 |
-
-## 지점 끌기
-
-- 지점(원) 위에서 마우스 왼쪽 단추를 누른 채 끌면 지점이 따라 움직임. 끝점은 이웃 연도의 시작점과 한 점으로 묶여 있어 함께 움직임.
-- 지점을 옮기면 그 지점 앞 · 뒤 연도의 분석 결과가 비워지고 「지점을 옮겼습니다 — [분석] 뒤 측점을 누르세요.」 가 횡단 판에 나옴. 다시 [분석] 을 눌러야 함.
-- 옮긴 위치는 [저장] 전까지 이 브라우저 탭에만 임시로 남아 있음(새로 고침해도 유지, 탭을 닫으면 사라짐). [저장] 을 눌러야 정본이 바뀜.
-- 손이 조금 떨리는 정도(몇 픽셀)의 움직임은 끌기로 치지 않고 단순 누름으로 처리함.
-- 지도 자체는 지점이 아닌 곳을 끌어 옮기고, 휠로 확대 · 축소함.
-
-## 알아 둘 것
-
-- [저장] 은 노선 모양을 화면에서 받지 않고, 고른 후보 이름만 서버에 보냄. 서버가 저장된 분석 결과로 노선을 다시 이어 붙여 저장하므로, [분석] 을 하지 않은 상태에서는 저장할 수 없음(「분석 저장본이 없습니다 — [분석]을 먼저 하세요.」).
-- 처음 열 때 지점이 비어 있으면 「N년 지점이 비었습니다 — 1단계(기준 지정)에서 정하세요.」 라는 문구만 나오고 진행이 안 됨.
-- 지형 받기와 분석은 서버 뒤에서 도는 작업임. 화면을 닫았다 다시 열어도 도는 중이면 이어서 진행률을 보여 줌.
-- 위성 사진은 못 받아도 지형 받기가 멈추지 않음. 위성이 없으면 어두운 바탕에 지점과 노선만 보임.
-- 3D 창은 한 번에 한 연도씩 보며, 창 위쪽 선택칸으로 연도를 바꿈. 창을 닫으면 3D 화면 자원이 정리됨.
-- 법 기준의 세부 수치와 사용자 확정 전 값은 「30_사용자_확정_전_값」 문서 참고.
+> 참고: 노선 후보를 찾는 엔진은 임도설계 노선 추천(B05)과 같음. 이 화면에서는 시작점과 끝점만 정해진 두 지점 사이를 구간별로 한 번씩 찾음. 자세한 방법은 [쓰인 방법과 근거](D03/20_쓰인_방법과_근거) 참고.
diff --git a/A05_EduDetail/guide/D03/01_지형_받기.md b/A05_EduDetail/guide/D03/01_지형_받기.md
new file mode 100644
index 000000000..f04a006e6
--- /dev/null
+++ b/A05_EduDetail/guide/D03/01_지형_받기.md
@@ -0,0 +1,30 @@
+# 지형 받기
+
+노선을 찾으려면 지점 둘레의 지형 자료가 필요함. 화면이 열리면 이 자료를 자동으로 확인하고 모자라면 받음.
+
+## 여는 길
+
+- 노선 분석 화면 왼쪽 위 「지형」 카드.
+
+
+
+그림 번호 — 1 지형 상태 한 줄(「받은 지형 안 · 연도 지형면 3/3」)
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 화면을 열고 「지형」 카드의 글을 확인함. 「받은 지형 안」이면 그대로 분석할 수 있음. |
+| 2 | 지점이 받은 지형 밖이면 지형 받기가 뒤에서 시작되고 카드에 진행률(%)이 보임. 끝날 때까지 기다림. |
+| 3 | 지점을 옮겨 범위 밖이 되면 [범위 밖 — 더 받기]가 나타남. 눌러서 지형을 더 받음. |
+| 4 | 받기가 끝나면 지도 배경과 등고선이 새로 그려짐. |
+
+## 보이는 것
+
+- 「받은 지형 안 · 연도 지형면 N/M」 = M 개 연도 중 N 개 연도의 높이 자료가 준비됨.
+- 지점이 받은 지형 밖이면 지도에서 그 지점에 빨간 고리와 점선 고리가 보이고, 카드에 「빨간 고리 지점이 받은 지형 밖입니다 — 더 받아야 분석합니다.」가 나옴. 이때 [분석]은 눌리지 않음.
+- 받기에는 수치지형도(도엽) · 위성 사진 · 연도별 높이 자료가 들어 있음. 위성 사진을 못 받아도 받기가 멈추지 않음. 위성이 없으면 어두운 바탕에 지점과 노선만 보임.
+- 지형 받기와 분석은 서버 뒤에서 도는 일이라, 화면을 닫았다 다시 열어도 도는 중이면 이어서 진행률을 보여 줌.
+- 산림청이 아닌 계정에는 [범위 밖 — 더 받기]가 보이지 않음.
+
+> 참고: [기준 지정](D02/00_설명서)에서 [>]로 넘어오면 지형 받기가 이미 시작되어 있을 수 있음.
diff --git a/A05_EduDetail/guide/D03/02_연도별_노선_고르기.md b/A05_EduDetail/guide/D03/02_연도별_노선_고르기.md
new file mode 100644
index 000000000..01779f8a0
--- /dev/null
+++ b/A05_EduDetail/guide/D03/02_연도별_노선_고르기.md
@@ -0,0 +1,41 @@
+# 연도별 노선 고르기
+
+연도마다 찾은 후보 넷 가운데 하나를 골라 예정노선으로 삼는 카드.
+
+## 여는 길
+
+- 노선 분석 화면 왼쪽 「연도별 노선」 카드. [분석]을 한 뒤 후보가 채워짐.
+
+
+
+그림 번호 — 1 연도 제목 줄 · 2 고른 후보(테두리가 진함) · 3 고르지 않은 후보
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 연도 제목 줄에서 그 연도 구간의 시작 · 끝 측점과 연장을 확인함. |
+| 2 | 후보 카드 넷의 연장 · 최대 기울기 · 위반 개수를 견줌. |
+| 3 | 쓸 후보 카드를 누름. 눌린 카드가 강조되고 평면의 노선과 누가 숫자가 바로 바뀜. |
+| 4 | 연도마다 같은 방법으로 고름. |
+
+
+
+그림 번호 — 1 2028년 제목 줄(구간 길이가 바뀜) · 2 새로 고른 「기울기 최소」 · 3 바뀐 평면 노선
+
+## 보이는 것
+
+| 후보 | 고르는 기준 |
+| --- | --- |
+| 영선 | 목표 기울기로 등고선을 비스듬히 건너가는 일정한 기울기 선 |
+| 토공 최소 | 절토 + 성토 + 반입 + 사토 물량이 가장 적은 길 |
+| 기울기 최소 | 최대 종단 기울기가 가장 작은 길 |
+| 비중 계산 | 예상 · 토공 · 기울기 비용을 섞어 한 번 찾은 길 |
+
+- 카드 글 = 「연장 · 최대 기울기(%) · 위반 개수」. 위반 = 기울기 기준을 지키지 못한 곳의 수.
+- 제목 줄 = 「연도 · 시작 측점 ~ 끝 측점 (연장 m)」. 분석 전에는 「분석 전 — [분석]을 누르세요」가 보임.
+- 「노선 없음」으로 회색인 카드 = 그 후보는 길을 찾지 못함. 누를 수 없고 마우스를 올리면 까닭이 보임.
+- 고르지 않고 두면 영선 → 토공 최소 → 기울기 최소 → 비중 계산 차례로 처음 성공한 후보가 자동으로 잡힘.
+- 모든 연도에 노선이 생기면 목록 끝에 「끝 … · 목표 … · 차이 …」 줄이 붙음. 등록 때 종료 누가거리를 넣었을 때만 나옴. [노선 누가거리](D01/05_누가거리) 참고.
+
+> 주의: 고름은 [저장]을 누르기 전까지 이 브라우저 탭에만 남음. 탭을 닫으면 사라짐.
diff --git a/A05_EduDetail/guide/D03/03_평면_지도_읽기.md b/A05_EduDetail/guide/D03/03_평면_지도_읽기.md
new file mode 100644
index 000000000..cf5b29ea9
--- /dev/null
+++ b/A05_EduDetail/guide/D03/03_평면_지도_읽기.md
@@ -0,0 +1,37 @@
+# 평면 지도 읽기
+
+위성 사진 위에 지점 · 노선 · 측점을 겹쳐 보여 주는 가운데 지도. 지점을 끌어 옮길 수도 있음.
+
+## 여는 길
+
+- 노선 분석 화면의 가운데 위쪽 큰 지도.
+
+
+
+그림 번호 — 1 평면 지도(2028년 20+0 측점을 누른 모습)
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 굵은 선(주황)으로 연도별로 고른 후보를 이은 예정노선을 확인함. |
+| 2 | 선 위 눈금 글(0+0 · 5+0 · 10+0 …)로 측점(20 m 간격)을 읽음. |
+| 3 | 지점이 마음에 안 들면 지점(원)을 마우스 왼쪽 단추로 누른 채 끌어 옮김. |
+| 4 | 옮긴 뒤 [분석]을 다시 눌러 새 지점으로 노선을 찾음. |
+| 5 | 지도 바탕을 끌어 옮기고 휠로 확대 · 축소함. |
+
+## 보이는 것
+
+- **지점(원)의 색** — 초록 = 첫 지점(시점) · 빨강 = 마지막 지점(종점) · 파랑 = 연도가 바뀌는 중간 지점.
+- **선** — 굵은 선 = 고른 후보. 흰 점선(옅음) = 고르지 않은 다른 후보. 분석 전에는 지점끼리 잇는 점선만 보임.
+- **등고선** = 도엽(수치지형도) 등고선. 노란 선과 노란 숫자(높이). 확대하면 더 촘촘히 보임.
+- 누른 측점은 보라색 고리로 표시됨.
+- **누가** = 측점 번호. 앞 연도 끝 = 다음 연도 시작으로 이어서 셈. 시작 값은 등록 때 정한 노선 시작 누가거리.
+- 끌기를 마치면 그 지점 앞 · 뒤 연도의 분석 결과가 비워지고 횡단 판에 「지점을 옮겼습니다 — [분석] 뒤 측점을 누르세요.」가 나옴.
+- 끝점은 이웃 연도의 시작점과 한 점으로 묶여 있어 함께 움직임.
+- 손이 조금 떨리는 정도(몇 픽셀)의 움직임은 끌기로 치지 않고 단순 누름으로 처리함.
+- 산림청이 아닌 계정은 지점을 끌 수 없음. 보기만 가능.
+
+> 주의: 옮긴 위치는 [저장] 전까지 이 브라우저 탭에만 임시로 남음(새로 고침해도 유지, 탭을 닫으면 사라짐). [저장]을 눌러야 정본이 바뀜.
+
+> 참고: 평면에는 노견 · 절토 · 성토선 · 종단도 · 배수유역 · 구조물이 없음. 지반 · 노선 중심선 · 측점만 보임.
diff --git a/A05_EduDetail/guide/D03/04_측점_횡단.md b/A05_EduDetail/guide/D03/04_측점_횡단.md
new file mode 100644
index 000000000..d12155019
--- /dev/null
+++ b/A05_EduDetail/guide/D03/04_측점_횡단.md
@@ -0,0 +1,34 @@
+# 측점 횡단
+
+평면에서 측점을 누르면 그 자리의 지반선 횡단이 아래 판에 그려짐.
+
+## 여는 길
+
+- 노선 분석 화면 아래쪽 「횡단」 판. 평면 지도의 측점 눈금을 누르면 채워짐.
+
+
+
+그림 번호 — 1 제목 줄(연도 · 측점 이름 · 중심 지반고) · 2 지반선 그림
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 평면 지도에서 확인할 측점 눈금(예: 20+0)을 누름. |
+| 2 | 아래 판의 제목 줄에서 연도 · 측점 · 중심 지반고를 읽음. |
+| 3 | 그림에서 좌우 20 m 범위의 지반선을 확인함. |
+| 4 | 판 위쪽 「횡단」 줄을 누르면 판이 접히고, 다시 누르면 펼쳐짐. |
+
+
+
+그림 번호 — 1 「횡단」 줄(접힌 상태)
+
+## 보이는 것
+
+- 제목 줄 = 「연도 · 측점 이름 · 중심 지반고」.
+- 그림 = 노선 중심에서 좌우 20 m 안의 지반. 설계선(노면 · 절토 · 성토)은 없음.
+- 아직 측점을 누르지 않았으면 「평면에서 측점을 누르면 그 자리 지반선 횡단이 보입니다.」가 보임.
+- 노선이 없는 연도의 측점은 누를 수 없음. 지점을 옮긴 뒤에는 다시 [분석]을 해야 함.
+- 이 측점 횡단은 지형 자료의 평활본에서 읽은 값이라 실제 측량 단면과 다를 수 있음.
+
+> 참고: 횡단 판을 접으면 평면 지도가 아래까지 넓어짐.
diff --git a/A05_EduDetail/guide/D03/05_분석_저장_단추.md b/A05_EduDetail/guide/D03/05_분석_저장_단추.md
new file mode 100644
index 000000000..5f281eb19
--- /dev/null
+++ b/A05_EduDetail/guide/D03/05_분석_저장_단추.md
@@ -0,0 +1,38 @@
+# 분석 · 저장 · 3D 단추
+
+왼쪽 패널 맨 아래 단추 줄. 노선 찾기([분석]) · 확정 저장([저장]) · 입체 보기([3D])를 함.
+
+## 여는 길
+
+- 노선 분석 화면 왼쪽 패널 맨 아래.
+
+
+
+그림 번호 — 1 [?] 가이드 · 2 [<] 이전 단계 · 3 [>] 다음 단계 · 4 [분석] · 5 [저장] · 6 [3D]
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [분석]을 누름. 연도 구간마다 후보 넷을 찾으며 진행률이 「지형」 카드 자리에 보임. |
+| 2 | 입력(지점 · 기준 · 지형)이 이전과 같으면 저장된 결과를 그대로 불러와 바로 끝남. |
+| 3 | [연도별 노선 고르기](D03/02_연도별_노선_고르기)로 연도마다 후보를 고름. |
+| 4 | 모든 연도에 노선이 있으면 [저장]을 누름. |
+| 5 | [3D]로 입체로 확인함. [3D 보기](D03/06_3D_보기) 참고. |
+| 6 | 다음 단계로 가려면 [>]를 누름. |
+
+## 보이는 것
+
+| 단추 | 하는 일 |
+| --- | --- |
+| [분석] | 연도 구간마다 노선 후보 넷을 찾음. 받은 지형 밖에 지점이 있으면 눌 수 없음 |
+| [저장] | 연도별로 고른 후보를 정본으로 저장함. 끌어 옮긴 지점도 이때 함께 저장됨. 어느 연도든 노선이 없으면 눌 수 없고 마우스를 올리면 안내가 보임 |
+| [3D] | 지형과 노선을 입체로 보는 창을 엶. 노선이 하나라도 있어야 눌 수 있음 |
+
+- 저장하면 「예정노선을 저장했습니다.」 알림이 뜸.
+- [저장]은 노선 모양을 화면에서 받지 않고 고른 후보 이름만 서버에 보냄. 서버가 저장된 분석 결과로 노선을 다시 이어 붙여 저장하므로, [분석]을 하지 않으면 「분석 저장본이 없습니다 — [분석]을 먼저 하세요.」로 막힘.
+- 산림청이 아닌 계정에는 [분석] · [저장]이 보이지 않음. 보기만 가능.
+
+> 주의: 저장 중에는 화면 전체가 잠깐 잠김. 끝날 때까지 기다림.
+
+> 참고: [분석]에 쓰는 기준값(기울기 상한 · 최소 곡선 반지름 등)은 등록 때 정한 임도 종류와 설계속도로 자동 정해짐. 이 화면에 칸은 없음. [사용자 확정 전 값](D03/30_사용자_확정_전_값) 참고.
diff --git a/A05_EduDetail/guide/D03/06_3D_보기.md b/A05_EduDetail/guide/D03/06_3D_보기.md
new file mode 100644
index 000000000..2df921eb8
--- /dev/null
+++ b/A05_EduDetail/guide/D03/06_3D_보기.md
@@ -0,0 +1,29 @@
+# 3D 보기
+
+지형과 연도별 노선을 입체로 보는 창.
+
+## 여는 길
+
+- 노선 분석 화면 왼쪽 패널 맨 아래 [3D]. 노선이 하나라도 있어야 눌림.
+
+
+
+그림 번호 — 1 연도 고르는 칸 · 2 3D 화면
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | [3D]를 누름. 「3D 보기 — 지형 + 노선」 창이 열리고 지형을 불러오는 동안 진행 표시가 돎. |
+| 2 | 창 위쪽 연도 칸으로 볼 연도를 바꿈. 한 번에 한 연도씩 보임. |
+| 3 | 마우스로 돌리고 휠로 확대 · 축소해 노선 둘레를 살핌. |
+| 4 | 다 보았으면 창 오른쪽 위 [닫기]를 누름. |
+
+## 보이는 것
+
+- 그 연도의 지형(높이에 따라 색이 달라짐)과 고른 후보의 노선, 측점 막대가 보임. 지형 위의 가는 하늘색 선이 노선.
+- 노견 · 절토 · 성토면 · 구조물은 3D 에도 없음.
+- 평면에서 측점을 눌러 둔 연도가 있으면 그 연도가 먼저 열림.
+- 창을 닫으면 3D 화면에 쓰던 자원이 정리됨.
+
+> 참고: 지형이 노선보다 훨씬 넓게 받아져 있어 노선이 작게 보일 수 있음. 확대해서 볼 것.
diff --git a/A05_EduDetail/guide/D03/20_쓰인_방법과_근거.md b/A05_EduDetail/guide/D03/20_쓰인_방법과_근거.md
index 5f6a760a7..95a08e0e0 100644
--- a/A05_EduDetail/guide/D03/20_쓰인_방법과_근거.md
+++ b/A05_EduDetail/guide/D03/20_쓰인_방법과_근거.md
@@ -1,5 +1,7 @@
# 쓰인 방법과 근거
+
+
## 노선을 찾는 방법
- 연도마다 그 연도의 시점과 종점 두 점 사이를 한 번씩 찾음. 연도 사이의 경계점은 옮기지 않으므로 앞 연도 끝과 다음 연도 시작이 정확히 맞물림.
diff --git a/A05_EduDetail/guide/D03/30_사용자_확정_전_값.md b/A05_EduDetail/guide/D03/30_사용자_확정_전_값.md
index 8933630b4..2afa9b65c 100644
--- a/A05_EduDetail/guide/D03/30_사용자_확정_전_값.md
+++ b/A05_EduDetail/guide/D03/30_사용자_확정_전_값.md
@@ -1,5 +1,9 @@
# 사용자 확정 전 값
+
+
+그림 번호는 [연도별 노선 고르기](D03/02_연도별_노선_고르기)와 같음.
+
아래 값은 코드에 기본값으로 들어 있으나 사용자가 최종 확정한 값이 아님. 바꾸려면 개발 담당에게 요청.
| 값 | 지금 기본값 | 출처 | 상태 |
diff --git a/A05_EduDetail/guide/D03/D03_00_overview.webp b/A05_EduDetail/guide/D03/D03_00_overview.webp
new file mode 100644
index 000000000..bfaad2480
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_00_overview.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_01_terrain_card.webp b/A05_EduDetail/guide/D03/D03_01_terrain_card.webp
new file mode 100644
index 000000000..caacd69c6
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_01_terrain_card.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_02_year_cards.webp b/A05_EduDetail/guide/D03/D03_02_year_cards.webp
new file mode 100644
index 000000000..68b86a1f9
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_02_year_cards.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_03_pick_mode.webp b/A05_EduDetail/guide/D03/D03_03_pick_mode.webp
new file mode 100644
index 000000000..e39d4154d
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_03_pick_mode.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_04_plan_map.webp b/A05_EduDetail/guide/D03/D03_04_plan_map.webp
new file mode 100644
index 000000000..0d0b2d4ce
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_04_plan_map.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_05_station_cross.webp b/A05_EduDetail/guide/D03/D03_05_station_cross.webp
new file mode 100644
index 000000000..4b1373eb4
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_05_station_cross.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_06_cross_fold.webp b/A05_EduDetail/guide/D03/D03_06_cross_fold.webp
new file mode 100644
index 000000000..7c30de39f
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_06_cross_fold.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_07_buttons.webp b/A05_EduDetail/guide/D03/D03_07_buttons.webp
new file mode 100644
index 000000000..c94cfd0b9
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_07_buttons.webp differ
diff --git a/A05_EduDetail/guide/D03/D03_08_3d_modal.webp b/A05_EduDetail/guide/D03/D03_08_3d_modal.webp
new file mode 100644
index 000000000..e2a218683
Binary files /dev/null and b/A05_EduDetail/guide/D03/D03_08_3d_modal.webp differ
diff --git a/A05_EduDetail/guide/D03/_scenes.json b/A05_EduDetail/guide/D03/_scenes.json
new file mode 100644
index 000000000..9eccfb985
--- /dev/null
+++ b/A05_EduDetail/guide/D03/_scenes.json
@@ -0,0 +1,11 @@
+[
+ {"name":"D03_00_overview","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"eval":"window.__d03Plan.pick(400)"},{"wait":".d03-plan__cross-body svg"},{"wait_ms":600}],"settle_ms":2000,"clip":null,"callouts":[{"n":1,"sel":".d03-plan__map","pos":"tr"},{"n":2,"sel":".d03-plan__cross","pos":"tr"},{"n":3,"sel":".d03-plan__hint"},{"n":4,"sel":".d03-plan__years"},{"n":5,"sel":".ui-sidebar-actions","pos":"tr"}]},
+ {"name":"D03_01_terrain_card","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000}],"settle_ms":2000,"clip":".ui-sidebar-scroll > .ui-sidebar-card:nth-child(1)","callouts":[{"n":1,"sel":".d03-plan__hint"}]},
+ {"name":"D03_02_year_cards","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000}],"settle_ms":2000,"clip":".ui-sidebar-scroll > .ui-sidebar-card:nth-child(2)","callouts":[{"n":1,"sel":".d03-plan__year-head"},{"n":2,"sel":".d03-plan__mode.is-picked","pos":"tr"},{"n":3,"sel":".d03-plan__mode:not(.is-picked)","pos":"tr"}]},
+ {"name":"D03_03_pick_mode","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"click":".d03-plan__year[data-year=\"2028\"] .d03-plan__mode[data-mode=\"gentle\"]"},{"wait":".d03-plan__year[data-year=\"2028\"] .d03-plan__mode[data-mode=\"gentle\"].is-picked"},{"wait_ms":800}],"settle_ms":2000,"clip":null,"callouts":[{"n":1,"sel":".d03-plan__year[data-year=\"2028\"] .d03-plan__year-head"},{"n":2,"sel":".d03-plan__year[data-year=\"2028\"] .d03-plan__mode.is-picked","pos":"tr"},{"n":3,"sel":".d03-plan__map","pos":"tr"}]},
+ {"name":"D03_04_plan_map","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"eval":"window.__d03Plan.pick(400)"},{"wait":".d03-plan__cross-body svg"},{"wait_ms":600}],"settle_ms":2000,"clip":".d03-plan__map","callouts":[{"n":1,"sel":".d03-plan__map","pos":"tr"}]},
+ {"name":"D03_05_station_cross","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"eval":"window.__d03Plan.pick(400)"},{"wait":".d03-plan__cross-body svg"},{"wait_ms":600}],"settle_ms":2000,"clip":".d03-plan__cross","callouts":[{"n":1,"sel":".d03-plan__cross-head"},{"n":2,"sel":".d03-plan__cross-body"}]},
+ {"name":"D03_06_cross_fold","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,900],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"eval":"window.__d03Plan.pick(400)"},{"wait":".d03-plan__cross-body svg"},{"wait_ms":600},{"click":".d03-plan__cross .ui-workflow-overlay__handle"},{"wait_ms":800}],"settle_ms":2000,"clip":null,"callouts":[{"n":1,"sel":".d03-plan__cross .ui-workflow-overlay__handle","pos":"tr"}]},
+ {"name":"D03_07_buttons","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000}],"settle_ms":2000,"clip":".ui-sidebar-actions","callouts":[{"n":1,"sel":".ui-sidebar-actions > button:nth-child(1)"},{"n":2,"sel":".ui-sidebar-actions > button:nth-child(2)"},{"n":3,"sel":".ui-sidebar-actions > button:nth-child(3)"},{"n":4,"sel":".ui-sidebar-actions > button:nth-child(4)"},{"n":5,"sel":".ui-sidebar-actions > button:nth-child(5)"},{"n":6,"sel":".ui-sidebar-actions > button:nth-child(6)"}]},
+ {"name":"D03_08_3d_modal","route":"#/d03-plan-analysis","project":"plan","viewport":[1600,1250],"before":[{"wait":".d03-plan__map canvas"},{"wait":".d03-plan__mode"},{"wait_ms":4000},{"click":".ui-sidebar-actions > button:nth-child(6)"},{"wait":".b05-route__3d-modal"},{"wait_ms":9000}],"settle_ms":2000,"clip":null,"callouts":[{"n":1,"sel":".d03-plan__3d-year"},{"n":2,"sel":".b05-route__3d-body","pos":"tr"}]}
+]
diff --git a/A05_EduDetail/guide/D04/00_설명서.md b/A05_EduDetail/guide/D04/00_설명서.md
index 8127e7330..9b9d5fe30 100644
--- a/A05_EduDetail/guide/D04/00_설명서.md
+++ b/A05_EduDetail/guide/D04/00_설명서.md
@@ -1,81 +1,31 @@
-# 예정노선 확정 · 업체 · 내보내기 설명서
+# 확정 · 내보내기
-## 이 화면에서 하는 일
+예정노선 3단계. 분석에서 저장한 연도별 노선을 확인하고, 연도마다 일을 맡길 업체를 지정한 뒤 확정하고 내보내는 화면.
-- 2단계(분석)에서 저장한 연도별 노선을 한눈에 확인함(연장 · 시점 · 종점 · 누가 · 확정 여부).
-- 연도마다 일을 맡길 업체를 지정함. 아이슬로에 등록된 회사를 고르거나, 업체명과 메일 주소를 직접 적는 수기 지정 중 선택. 한 연도에 업체 여럿 지정 가능.
-- [확정] 으로 연도 노선을 확정하고, 지정 업체에 노선 파일이 든 압축 파일(zip)을 메일로 보냄.
-- [내보내기] 로 노선 파일 묶음을 내려받음.
-- 업체 쪽에서는 받은 예정노선을 자기 임도 프로젝트로 연결해 설계를 이어 감(아래 「받은 업체의 임도 연결」 참고).
+## 여는 길
-## 화면 구성
+- [노선 분석](D03/00_설명서) 화면에서 [저장]을 한 뒤 [>]를 누르면 열림.
+- 대시보드 프로젝트 표의 단계 막대 「확정 · 내보내기」를 누르거나, ☰ 에서 「확정 · 내보내기」를 골라도 열림.
+- 지정받은 다른 회사는 대시보드 「받은 예정노선」 구역의 [보기]로 이 화면을 보기만 가능한 상태로 엶. [받은 업체의 임도 연결](D04/06_받은_업체_연결) 참고.
-- 가운데 = 연도 표. 프로젝트 이름이 위에 크게 나오고, 표 열은 연도 · 연장(m) · 시점(위도, 경도) · 종점(위도, 경도) · 누가(m) · 확정 · 지정 업체.
-- 왼쪽 위 = 「확정할 연도」 카드. 분석 [저장] 이 된 연도마다 선택 상자가 있음. 아직 확정하지 않은 연도는 처음부터 선택되어 있음.
-- 왼쪽 아래 = 단추 [내보내기] [확정] [저장].
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 연도 표 | 연도마다 연장 · 시점 · 종점 · 누가 · 확정 시각 · 지정 업체를 한 줄로 보여 줌. 업체를 여기서 추가 · 삭제함 |
+| 2 | 「확정할 연도」 카드 | 확정할 연도를 고름. 분석 [저장]이 된 연도만 나옴 |
+| 3 | 단추 줄 | [?] · [<] · [>] · [내보내기] · [확정] · [저장] |
## 작업 순서
-1. 연도 표에서 연도마다 연장과 누가를 확인함. 분석을 저장하지 않은 연도는 누가 칸에 「노선 분석 [저장] 전」 이 나오며, 확정할 연도 목록에도 나타나지 않음.
-2. 지정 업체 칸에서 업체를 추가함.
- - 등록 회사: 「업체(등록 회사 찾기 또는 이름)」 칸에 글자를 입력하면 가입된 회사 이름이 목록으로 뜸. 목록에서 고르면 등록 회사로 지정됨. 메일 칸을 비우면 그 회사의 대표 메일이 쓰임.
- - 수기 지정: 업체명과 메일 주소(@ 포함)를 둘 다 적음. 없으면 「등록 회사가 아니면 업체명과 메일이 필요합니다.」 안내가 나오고 추가되지 않음.
- - [추가] 를 누르면 그 연도 칸에 업체 이름 + 메일이 표시됨. 같은 업체를 두 번 넣어도 한 번만 들어감.
- - 잘못 넣은 업체는 업체 옆 [×] 로 뺌.
-3. [저장] 을 누르면 지정 업체가 서버에 저장됨(「지정 업체를 저장했습니다.」). 저장 전에는 표 위에 「저장 안 된 변경이 있습니다.」 가 표시됨.
-4. 「확정할 연도」 에서 확정할 연도를 고르고 [확정] 을 누름. 확인 창(「고른 연도를 확정하고 지정 업체에 노선 묶음을 메일로 보냅니다. 진행할까요?」)에서 진행을 누르면 확정과 메일 발송이 이뤄짐. 저장하지 않은 업체 변경이 있으면 자동으로 먼저 저장됨.
-5. 필요하면 [내보내기] 로 파일을 내려받아 보관함.
+1. 연도 표에서 연도마다 연장과 누가를 확인함. [연도 표](D04/01_연도_표) 참고.
+2. 지정 업체 칸에서 업체를 추가함. 등록 회사는 이름을 찾아 고르고, 아니면 업체명과 메일을 직접 적음. [지정 업체](D04/02_지정_업체) · [업체 직접 추가](D04/03_업체_직접_추가) 참고.
+3. [저장]을 눌러 지정 업체를 서버에 저장함. [단추와 확정할 연도](D04/04_단추와_확정할_연도) 참고.
+4. 「확정할 연도」에서 확정할 연도를 고르고 [확정]을 누름. 확인 창에서 진행을 누르면 확정과 메일 발송이 이뤄짐. [확정과 메일](D04/05_확정과_메일) 참고.
+5. 필요하면 [내보내기]로 노선 파일 묶음을 내려받아 보관함. 파일 구성은 [내보내기 파일 구성](D04/10_내보내기_파일_구성) 참고.
-## 단추
+> 주의: [저장] · [확정]은 산림청 소속 사용자만 할 수 있음. 그 밖의 사용자가 누르면 「산림청만 예정노선을 확정 · 지정할 수 있습니다.」 안내가 나옴.
-| 단추 | 하는 일 |
-| --- | --- |
-| 내보내기 | 「프로젝트이름_예정노선.zip」 을 내려받음. 산림청은 모든 연도와 전체 노선을 받음. 지정받은 회사는 확정된 자기 연도만 받음 |
-| 확정 | 고른 연도를 확정 처리하고 지정 업체에 메일을 보냄. 고른 연도가 없으면 「확정할 연도를 고르세요.」 안내 |
-| 저장 | 연도별 지정 업체 목록을 서버에 저장함 |
-
-- 업체 추가와 삭제는 [저장] 을 누르기 전까지 이 브라우저 탭에만 임시로 남음. 탭을 닫으면 사라지므로 [저장] 을 누를 것.
-- [저장] [확정] 은 산림청 소속 사용자만 가능. 그 밖의 사용자가 누르면 「산림청만 예정노선을 확정 · 지정할 수 있습니다.」 안내가 나옴.
-
-## 결과 읽는 법
-
-- **확정 열** = 확정한 날짜와 시각(한국 시간). 비어 있으면 아직 확정 전.
-- **지정 업체 열의 표시**
- - 「Aislo」 = 아이슬로 등록 회사로 지정된 업체.
- - 「메일 보냄」 = 확정 때 메일이 나갔다는 표시. 같은 업체에는 다시 확정해도 중복 발송하지 않음.
- - 「연결됨」 = 그 업체가 이 연도 노선을 자기 임도 프로젝트로 가져가 연결했다는 표시.
-- **[확정] 후 안내 문구** = 「확정 — 메일 sent 2 · already_sent 1」 꼴로 업체별 처리 결과를 개수로 보여 줌.
-
-| 결과 이름 | 뜻 |
-| --- | --- |
-| sent | 메일 발송 성공 |
-| already_sent | 이미 보낸 업체여서 다시 보내지 않음 |
-| no_email | 메일 주소가 없어 보내지 못함(등록 회사의 대표 메일이 비어 있는 경우 등) |
-| failed | 메일 발송 실패 |
-
-## 보내지는 메일
-
-- 제목: 「[예정노선 확정] 프로젝트이름 N년」.
-- 본문: 프로젝트 · 사업 지역 · 연도 · 연장(km 와 m) 요약과 첨부 파일 목록, 압축을 풀면 노선 입력에 바로 올릴 수 있다는 안내 문구.
-- 첨부: 그 업체의 연도 한 해 분량 zip 1개(파일 이름 「프로젝트이름_예정노선_연도.zip」). 내용은 「10_내보내기_파일_구성」 참고.
-
-## 받은 업체의 임도 연결
-
-- 지정받은 등록 회사는 대시보드의 「받은 예정노선」 구역에서 확정된 연도를 봄. 열은 예정노선 · 연도 · 확정 · 연결 상태(연결됨 / 미연결 / 업데이트 있음) · 작업.
-- [보기] = 예정노선 화면을 보기만 가능한 상태로 엶.
-- [연결] = 모달에서 두 가지 중 선택.
- - 「새 임도 프로젝트로」: 예정노선 이름 + 연도로 임도 프로젝트를 새로 만들고 노선 입력 단계(B03)로 이동. 예정노선의 설계속도(20 · 30 · 40 km/h)가 새 프로젝트의 설계속도 기본값으로 들어감.
- - 「기존 프로젝트에 연결」: 우리 회사의 임도 프로젝트를 골라 그 프로젝트에 연결. 임도 프로젝트가 없으면 「우리 회사 임도 프로젝트가 없습니다.」 표시.
-- 연결하면 그 연도 노선(shapefile 한 벌)이 노선 입력 단계의 입력 파일로 들어감. 파일을 직접 올린 것과 같은 길이라 이후 처리도 같음. 지형 자료는 업체가 따로 올려야 함.
-- 이미 분석 결과가 있는 임도 프로젝트에 연결하면 기존 결과를 지워도 되는지 묻는 확인 창이 먼저 나옴. 취소하면 아무것도 바뀌지 않음.
-- 임도 프로젝트 노선 입력 화면의 [예정노선에서 가져오기] 단추로도 같은 일을 할 수 있음. 지정받은 연도를 고르면 노선이 입력됨.
-- 연결 시점의 노선이 복사되므로, 산림청이 뒤에 노선을 바꿔도 임도 프로젝트는 자동으로 바뀌지 않음. 대신 「업데이트 있음」 표시가 뜨며, 노선 입력 화면 위쪽 띠에서 [다시 가져오기] 로 직접 반영 여부를 결정함.
-- 한 임도 프로젝트는 한 연도에만 연결됨. 다른 연도로 다시 연결하면 앞의 연결은 풀림.
-
-## 알아 둘 것
-
-- 확정 시각은 [확정] 을 누를 때마다 새로 기록됨. 이미 메일을 보낸 업체에는 다시 보내지 않음(다시 보내는 단추는 화면에 없음).
-- 확정은 분석 [저장] 이 된 연도만 가능. 저장하지 않은 연도를 억지로 확정하려 하면 「분석 [저장]이 안 된 연도입니다」 오류가 나옴.
-- [저장] 은 표에 있는 모든 연도의 지정 업체를 화면 내용대로 맞춤. 업체를 모두 뺀 연도는 지정이 비워짐.
-- 같은 업체 판정: 등록 회사는 회사 번호, 수기 업체는 메일 주소(대소문자 구분 없음).
-- 내보내기는 서버에 저장된 노선만 사용함. 2단계에서 [저장] 하지 않은 변경은 반영되지 않음.
+> 참고: 업체 쪽에서는 받은 예정노선을 자기 임도 프로젝트로 연결해 설계를 이어 감. [받은 업체의 임도 연결](D04/06_받은_업체_연결) 참고.
diff --git a/A05_EduDetail/guide/D04/01_연도_표.md b/A05_EduDetail/guide/D04/01_연도_표.md
new file mode 100644
index 000000000..d58975f1d
--- /dev/null
+++ b/A05_EduDetail/guide/D04/01_연도_표.md
@@ -0,0 +1,29 @@
+# 연도 표
+
+분석에서 저장한 연도별 노선을 한눈에 확인하는 표.
+
+## 여는 길
+
+- 확정 · 내보내기 화면 가운데의 큰 표. 위에 프로젝트 이름이 크게 나옴.
+
+
+
+그림 번호 — 1 연장(m) · 2 시점(위도, 경도) · 3 누가(m) · 4 확정 시각 · 5 지정 업체
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 연도 열과 연장(m)으로 연도별 노선 길이를 확인함. |
+| 2 | 시점 · 종점(위도, 경도)으로 노선 양 끝 위치를 확인함. |
+| 3 | 누가(m) 열로 그 연도 노선이 전체 노선의 어디부터 어디까지인지 확인함. |
+| 4 | 확정 열이 비어 있으면 아직 확정 전. 날짜와 시각이 있으면 확정이 끝난 연도. |
+| 5 | 지정 업체 열은 [지정 업체](D04/02_지정_업체) 참고. |
+
+## 보이는 것
+
+- 분석을 저장하지 않은 연도는 누가 칸에 「노선 분석 [저장] 전」이 나옴. 「확정할 연도」 목록에도 나타나지 않음.
+- 확정 열 = 확정한 날짜와 시각(한국 시간). 비어 있으면 아직 확정 전.
+- 시점 · 종점은 위도 · 경도 순서로 소수 6 자리까지 보임.
+
+> 참고: 연장이 서로 다르게 보이면 [노선 분석](D03/00_설명서)에서 후보를 다시 고르고 [저장]한 뒤 돌아옴.
diff --git a/A05_EduDetail/guide/D04/02_지정_업체.md b/A05_EduDetail/guide/D04/02_지정_업체.md
new file mode 100644
index 000000000..1359641f0
--- /dev/null
+++ b/A05_EduDetail/guide/D04/02_지정_업체.md
@@ -0,0 +1,31 @@
+# 지정 업체
+
+연도마다 일을 맡길 업체를 지정하는 열.
+
+## 여는 길
+
+- 연도 표의 맨 오른쪽 「지정 업체」 열. 연도 한 줄마다 업체 목록과 추가 칸이 있음.
+
+
+
+그림 번호 — 1 지정된 업체 한 건 · 2 표시 딱지(Aislo) · 3 [×] 빼기 단추 · 4 업체 추가 칸
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 연도 줄의 지정 업체 목록에서 이미 지정된 업체를 확인함. 한 연도에 업체 여럿을 지정할 수 있음. |
+| 2 | 업체를 더하려면 아래 추가 칸을 씀. [업체 직접 추가](D04/03_업체_직접_추가) 참고. |
+| 3 | 잘못 넣은 업체는 업체 옆 [×]로 뺌. |
+| 4 | 다 끝나면 왼쪽 아래 [저장]을 눌러 서버에 남김. |
+
+## 보이는 것
+
+- 업체 한 건 = 「업체명 · 메일」 글 + 딱지.
+- 딱지 「Aislo」 = 아이슬로에 등록된 회사로 지정된 업체.
+- 딱지 「메일 보냄」 = 확정 때 메일이 나갔다는 표시. 같은 업체에는 다시 확정해도 중복 발송하지 않음.
+- 딱지 「연결됨」 = 그 업체가 이 연도 노선을 자기 임도 프로젝트로 가져가 연결했다는 표시.
+- 같은 업체 판정: 등록 회사는 회사 번호, 직접 적은 업체는 메일 주소(대소문자 구분 없음). 같은 업체를 두 번 넣어도 한 번만 들어감.
+- 산림청이 아닌 계정은 추가 칸과 [×]가 보이지 않음. 보기만 가능.
+
+> 참고: 이 그림의 업체명과 메일은 가이드용 견본임.
diff --git a/A05_EduDetail/guide/D04/03_업체_직접_추가.md b/A05_EduDetail/guide/D04/03_업체_직접_추가.md
new file mode 100644
index 000000000..51fd72ee7
--- /dev/null
+++ b/A05_EduDetail/guide/D04/03_업체_직접_추가.md
@@ -0,0 +1,34 @@
+# 업체 직접 추가
+
+등록 회사를 찾아 고르거나, 업체명과 메일을 직접 적어 지정 업체로 더하는 방법.
+
+## 여는 길
+
+- 연도 표 「지정 업체」 열의 추가 칸(업체 칸 · 메일 칸 · [추가]).
+
+
+
+그림 번호 — 1 업체 칸 · 2 메일 칸 · 3 [추가] 단추
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 등록 회사로 지정하려면 업체 칸에 회사 이름 글자를 넣음. 가입된 회사 이름이 목록으로 뜨면 하나를 고름. |
+| 2 | 메일 칸을 비우면 그 회사의 대표 메일이 쓰임. 다른 메일로 받으려면 메일 칸에 적음. |
+| 3 | 등록 회사가 아니면(수기 지정) 업체 칸에 업체명, 메일 칸에 메일(@ 포함)을 둘 다 적음. |
+| 4 | [추가]를 누름. 그 연도 칸에 업체 이름 + 메일이 표시됨. |
+
+
+
+그림 번호 — 1 「저장 안 된 변경이 있습니다.」 안내 · 2 추가된 업체
+
+## 보이는 것
+
+- 추가하면 표 위에 「저장 안 된 변경이 있습니다.」가 나옴. 왼쪽 아래 [저장]을 누르면 사라짐.
+- 수기 지정에서 업체명이나 메일이 비면 「등록 회사가 아니면 업체명과 메일이 필요합니다.」 안내가 나오고 추가되지 않음.
+- 업체 추가와 삭제는 [저장]을 누르기 전까지 이 브라우저 탭에만 임시로 남음. 탭을 닫으면 사라짐.
+
+> 주의: [저장]은 표에 있는 모든 연도의 지정 업체를 화면 내용대로 맞춤. 업체를 모두 뺀 연도는 지정이 비워짐.
+
+> 참고: 이 그림의 업체명과 메일은 가이드용 견본임.
diff --git a/A05_EduDetail/guide/D04/04_단추와_확정할_연도.md b/A05_EduDetail/guide/D04/04_단추와_확정할_연도.md
new file mode 100644
index 000000000..0599b74fa
--- /dev/null
+++ b/A05_EduDetail/guide/D04/04_단추와_확정할_연도.md
@@ -0,0 +1,38 @@
+# 단추와 확정할 연도
+
+왼쪽 패널의 「확정할 연도」 카드와 아래 단추 줄.
+
+## 여는 길
+
+- 확정 · 내보내기 화면 왼쪽 패널.
+
+
+
+그림 번호 — 1 확정할 연도 목록(선택 상자)
+
+
+
+그림 번호 — 1 [?] 가이드 · 2 [<] 이전 단계 · 3 [>] 다음 단계(마지막 단계라 흐림) · 4 [내보내기] · 5 [확정] · 6 [저장]
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 「확정할 연도」에서 확정할 연도의 선택 상자를 켬. 아직 확정하지 않은 연도는 처음부터 켜져 있음. |
+| 2 | 지정 업체를 바꿨으면 [저장]을 눌러 서버에 남김. 「지정 업체를 저장했습니다.」 알림이 뜸. |
+| 3 | [확정]은 [확정과 메일](D04/05_확정과_메일) 참고. |
+| 4 | 노선 파일이 필요하면 [내보내기]를 누름. |
+
+## 보이는 것
+
+| 단추 | 하는 일 |
+| --- | --- |
+| [내보내기] | 「프로젝트이름_예정노선.zip」을 내려받음. 산림청은 모든 연도와 전체 노선을 받음. 지정받은 회사는 확정된 자기 연도만 받음 |
+| [확정] | 고른 연도를 확정하고 지정 업체에 메일을 보냄. 고른 연도가 없으면 「확정할 연도를 고르세요.」 안내 |
+| [저장] | 연도별 지정 업체 목록을 서버에 저장함 |
+
+- 분석 [저장]이 된 연도만 목록에 나옴.
+- 산림청이 아닌 계정은 「확정할 연도」 카드와 [확정] · [저장]이 보이지 않고 [내보내기]만 있음.
+- 내보내기는 서버에 저장된 노선만 사용함. [노선 분석](D03/00_설명서)에서 [저장]하지 않은 변경은 반영되지 않음.
+
+> 참고: 파일 안의 구성은 [내보내기 파일 구성](D04/10_내보내기_파일_구성) 참고.
diff --git a/A05_EduDetail/guide/D04/05_확정과_메일.md b/A05_EduDetail/guide/D04/05_확정과_메일.md
new file mode 100644
index 000000000..cc9546b01
--- /dev/null
+++ b/A05_EduDetail/guide/D04/05_확정과_메일.md
@@ -0,0 +1,39 @@
+# 확정과 메일
+
+고른 연도를 확정하고 지정 업체에 노선 파일을 메일로 보내는 과정.
+
+## 여는 길
+
+- 확정 · 내보내기 화면 왼쪽 아래 [확정].
+
+
+
+그림 번호 — 1 확인 문구 · 2 [취소] · 3 [확정]
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 지정 업체를 모두 넣고 [저장]을 눌러 둠. 저장하지 않은 변경이 있으면 [확정] 때 먼저 저장됨. |
+| 2 | 「확정할 연도」에서 연도를 고름. |
+| 3 | [확정]을 누르면 확인 창이 열림. 「고른 연도를 확정하고 지정 업체에 노선 묶음을 메일로 보냅니다. 진행할까요?」 |
+| 4 | 진행하려면 창의 [확정]을 누름. 그만두려면 [취소]를 누름. |
+| 5 | 끝나면 「확정 — 메일 sent 2 · already_sent 1」 꼴로 업체별 처리 결과가 개수로 나옴. |
+
+## 보이는 것
+
+| 결과 이름 | 뜻 |
+| --- | --- |
+| sent | 메일 발송 성공 |
+| already_sent | 이미 보낸 업체여서 다시 보내지 않음 |
+| no_email | 메일 주소가 없어 보내지 못함(등록 회사의 대표 메일이 비어 있는 경우 등) |
+| failed | 메일 발송 실패 |
+
+- 확정하면 연도 표의 확정 열에 날짜와 시각이 찍히고, 지정 업체에 「메일 보냄」 딱지가 붙음.
+- 보내지는 메일의 제목은 「[예정노선 확정] 프로젝트이름 N년」.
+- 본문에는 프로젝트 · 사업 지역 · 연도 · 연장(km 와 m) 요약과 첨부 파일 목록, 압축을 풀면 노선 입력에 바로 올릴 수 있다는 안내가 있음.
+- 첨부 = 그 업체의 연도 한 해 분량 zip 1개(파일 이름 「프로젝트이름_예정노선_연도.zip」). 내용은 [내보내기 파일 구성](D04/10_내보내기_파일_구성) 참고.
+
+> 주의: 확정은 분석 [저장]이 된 연도만 가능함. 저장하지 않은 연도를 억지로 확정하려 하면 「분석 [저장]이 안 된 연도입니다」 오류가 나옴.
+
+> 주의: 확정 시각은 [확정]을 누를 때마다 새로 기록됨. 이미 메일을 보낸 업체에는 다시 보내지 않으며, 다시 보내는 단추는 화면에 없음.
diff --git a/A05_EduDetail/guide/D04/06_받은_업체_연결.md b/A05_EduDetail/guide/D04/06_받은_업체_연결.md
new file mode 100644
index 000000000..3653466e0
--- /dev/null
+++ b/A05_EduDetail/guide/D04/06_받은_업체_연결.md
@@ -0,0 +1,27 @@
+# 받은 업체의 임도 연결
+
+확정된 예정노선을 받은 업체가 자기 임도 프로젝트로 가져가 설계를 이어 가는 방법.
+
+## 여는 길
+
+- 지정받은 등록 회사는 대시보드의 「받은 예정노선」 구역에서 확정된 연도를 봄.
+- 열 = 예정노선 · 연도 · 확정 · 연결 상태(연결됨 / 미연결 / 업데이트 있음) · 작업.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 「받은 예정노선」에서 연도 줄의 [보기]를 누르면 예정노선 화면이 보기만 가능한 상태로 열림. |
+| 2 | [연결]을 누르면 모달이 열려 두 가지 중 하나를 고름. |
+| 3 | 「새 임도 프로젝트로」 = 예정노선 이름 + 연도로 임도 프로젝트를 새로 만들고 노선 입력 단계(B03)로 이동. 예정노선의 설계속도(20 · 30 · 40 km/h)가 새 프로젝트의 설계속도 기본값으로 들어감. |
+| 4 | 「기존 프로젝트에 연결」 = 우리 회사의 임도 프로젝트를 골라 그 프로젝트에 연결. 임도 프로젝트가 없으면 「우리 회사 임도 프로젝트가 없습니다.」가 보임. |
+| 5 | 임도 프로젝트 노선 입력 화면의 [예정노선에서 가져오기]로도 같은 일을 할 수 있음. 지정받은 연도를 고르면 노선이 입력됨. |
+
+## 보이는 것
+
+- 연결하면 그 연도 노선(shapefile 한 벌)이 노선 입력 단계의 입력 파일로 들어감. 파일을 직접 올린 것과 같은 길이라 이후 처리도 같음. 지형 자료는 업체가 따로 올려야 함.
+- 이미 분석 결과가 있는 임도 프로젝트에 연결하면 기존 결과를 지워도 되는지 묻는 확인 창이 먼저 나옴. 취소하면 아무것도 바뀌지 않음.
+- 연결 시점의 노선이 복사되므로, 산림청이 뒤에 노선을 바꿔도 임도 프로젝트는 자동으로 바뀌지 않음. 대신 「업데이트 있음」 표시가 뜨며, 노선 입력 화면 위쪽 띠에서 [다시 가져오기]로 직접 반영 여부를 결정함.
+- 한 임도 프로젝트는 한 연도에만 연결됨. 다른 연도로 다시 연결하면 앞의 연결은 풀림.
+
+> 참고: 임도 프로젝트 쪽 화면은 [임도설계 가이드](B03/00_설명서)를 참고. 산림청 쪽에서 연결된 연도에는 연도 표의 지정 업체에 「연결됨」 딱지가 붙음.
diff --git a/A05_EduDetail/guide/D04/10_내보내기_파일_구성.md b/A05_EduDetail/guide/D04/10_내보내기_파일_구성.md
index edfcf1655..e4f4a968d 100644
--- a/A05_EduDetail/guide/D04/10_내보내기_파일_구성.md
+++ b/A05_EduDetail/guide/D04/10_내보내기_파일_구성.md
@@ -1,5 +1,9 @@
# 내보내기 파일 구성
+
+
+[내보내기] 단추는 왼쪽 아래 단추 줄에 있음.
+
## 한눈에
- 내려받는 파일 이름 = 「프로젝트이름_예정노선.zip」. 이름에 쓸 수 없는 글자는 밑줄(_)로 바뀜.
diff --git a/A05_EduDetail/guide/D04/30_사용자_확정_전_값.md b/A05_EduDetail/guide/D04/30_사용자_확정_전_값.md
index 4e12a87dd..2b72d3ac3 100644
--- a/A05_EduDetail/guide/D04/30_사용자_확정_전_값.md
+++ b/A05_EduDetail/guide/D04/30_사용자_확정_전_값.md
@@ -1,5 +1,7 @@
# 사용자 확정 전 값
+
+
아래 항목은 코드의 현재 동작이며, 바꾸려면 개발 담당에게 요청.
| 값 | 지금 기본값 | 출처 | 상태 |
diff --git a/A05_EduDetail/guide/D04/D04_00_overview.webp b/A05_EduDetail/guide/D04/D04_00_overview.webp
new file mode 100644
index 000000000..244fdb9b7
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_00_overview.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_01_year_table.webp b/A05_EduDetail/guide/D04/D04_01_year_table.webp
new file mode 100644
index 000000000..daea15aea
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_01_year_table.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_02_assigned_firms.webp b/A05_EduDetail/guide/D04/D04_02_assigned_firms.webp
new file mode 100644
index 000000000..9290679d0
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_02_assigned_firms.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_03_add_manual.webp b/A05_EduDetail/guide/D04/D04_03_add_manual.webp
new file mode 100644
index 000000000..822449792
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_03_add_manual.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_04_unsaved_note.webp b/A05_EduDetail/guide/D04/D04_04_unsaved_note.webp
new file mode 100644
index 000000000..aef7924b8
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_04_unsaved_note.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_05_pick_years.webp b/A05_EduDetail/guide/D04/D04_05_pick_years.webp
new file mode 100644
index 000000000..05c320fe0
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_05_pick_years.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_06_buttons.webp b/A05_EduDetail/guide/D04/D04_06_buttons.webp
new file mode 100644
index 000000000..bb4aad76c
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_06_buttons.webp differ
diff --git a/A05_EduDetail/guide/D04/D04_07_finalize_ask.webp b/A05_EduDetail/guide/D04/D04_07_finalize_ask.webp
new file mode 100644
index 000000000..0591a25af
Binary files /dev/null and b/A05_EduDetail/guide/D04/D04_07_finalize_ask.webp differ
diff --git a/A05_EduDetail/guide/D04/_scenes.json b/A05_EduDetail/guide/D04/_scenes.json
new file mode 100644
index 000000000..4c6b65a86
--- /dev/null
+++ b/A05_EduDetail/guide/D04/_scenes.json
@@ -0,0 +1,10 @@
+[
+ {"name":"D04_00_overview","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300}],"settle_ms":600,"clip":null,"callouts":[{"n":1,"sel":".d04-confirm__table","pos":"tr"},{"n":2,"sel":".d04-confirm__panel .ui-collapsible"},{"n":3,"sel":".ui-sidebar-actions","pos":"tr"}]},
+ {"name":"D04_01_year_table","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300}],"settle_ms":600,"clip":".d04-confirm__table","callouts":[{"n":1,"sel":".d04-confirm__table tbody tr:nth-child(1) td:nth-child(2)"},{"n":2,"sel":".d04-confirm__table tbody tr:nth-child(1) td:nth-child(3)"},{"n":3,"sel":".d04-confirm__table tbody tr:nth-child(1) td:nth-child(5)"},{"n":4,"sel":".d04-confirm__table tbody tr:nth-child(1) td:nth-child(6)"},{"n":5,"sel":".d04-confirm__table tbody tr:nth-child(1) td:nth-child(7)","pos":"tr"}]},
+ {"name":"D04_02_assigned_firms","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300}],"settle_ms":600,"clip":".d04-confirm__table tbody tr:nth-child(1)","callouts":[{"n":1,"sel":".d04-confirm__table tbody tr:nth-child(1) .d04-confirm__firm"},{"n":2,"sel":".d04-confirm__table tbody tr:nth-child(1) .d04-confirm__firm > span:nth-child(2)","pos":"tr"},{"n":3,"sel":".d04-confirm__table tbody tr:nth-child(1) .d04-confirm__firm > button","pos":"tr"},{"n":4,"sel":".d04-confirm__table tbody tr:nth-child(1) .d04-confirm__add","pos":"br"}]},
+ {"name":"D04_03_add_manual","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"fill":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(1)","value":"예시토건"},{"fill":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(2)","value":"guide-sample@example.org"},{"wait_ms":300},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"}],"settle_ms":600,"clip":".d04-confirm__table tbody tr:nth-child(3)","callouts":[{"n":1,"sel":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(1)"},{"n":2,"sel":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(2)"},{"n":3,"sel":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add button","pos":"tr"}]},
+ {"name":"D04_04_unsaved_note","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"fill":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(1)","value":"예시토건"},{"fill":".d04-confirm__table tbody tr:nth-child(3) .d04-confirm__add input:nth-child(2)","value":"guide-sample@example.org"},{"click":"[class*=\"__table\"] tbody tr:nth-child(3) [class*=\"__add\"] button"},{"wait":".d04-confirm__dirty"},{"wait_ms":300},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"}],"settle_ms":600,"clip":".d04-confirm","callouts":[{"n":1,"sel":".d04-confirm__dirty"},{"n":2,"sel":".d04-confirm__table tbody tr:nth-child(3) td:nth-child(7)","pos":"tr"}]},
+ {"name":"D04_05_pick_years","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300}],"settle_ms":600,"clip":".d04-confirm__panel .ui-collapsible","callouts":[{"n":1,"sel":".d04-confirm__picks"}]},
+ {"name":"D04_06_buttons","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300}],"settle_ms":600,"clip":".ui-sidebar-actions","callouts":[{"n":1,"sel":".ui-sidebar-actions > button:nth-child(1)"},{"n":2,"sel":".ui-sidebar-actions > button:nth-child(2)"},{"n":3,"sel":".ui-sidebar-actions > button:nth-child(3)"},{"n":4,"sel":".ui-sidebar-actions > button:nth-child(4)"},{"n":5,"sel":".ui-sidebar-actions > button:nth-child(5)"},{"n":6,"sel":".ui-sidebar-actions > button:nth-child(6)"}]},
+ {"name":"D04_07_finalize_ask","route":"#/d04-plan-confirm","project":"plan","before":[{"wait":".d04-confirm__firm"},{"wait_ms":800},{"eval":"[...document.querySelectorAll('[class*=\"__firm\"] > span:first-child')].forEach((s,i)=>{ if(!/example\\./.test(s.textContent)) s.textContent=['예시건설','예시산업','예시토건'][i%3]+' · guide-sample'+(i||'')+'@example.com' })"},{"wait_ms":300},{"click":".ui-sidebar-actions > button:nth-child(5)","confirm":true},{"wait":".ui-confirm__panel"},{"wait_ms":400}],"settle_ms":600,"clip":null,"callouts":[{"n":1,"sel":".ui-confirm__message"},{"n":2,"sel":".ui-confirm__actions button:first-child","pos":"bl"},{"n":3,"sel":".ui-confirm__actions button:last-child","pos":"br"}],"after":[{"click":"[class*=\"ui-conf\"][class*=\"__actions\"] button:first-child"}]}
+]
diff --git a/A05_EduDetail/guide/E05/00_설명서.md b/A05_EduDetail/guide/E05/00_설명서.md
index 5342c10a1..ee929a84b 100644
--- a/A05_EduDetail/guide/E05/00_설명서.md
+++ b/A05_EduDetail/guide/E05/00_설명서.md
@@ -1,55 +1,51 @@
-# 보고서 설명서
+# 보고서
-## 이 화면에서 하는 일
+E02~E07 해석 결과를 모아 「비탈면 안정성 검토 보고서」 엑셀을 화면에서 바로 보고 고치고, 엑셀 · PDF 파일로 내려받는 화면.
-- E02~E04 · E07 · E03 보강 검토 결과를 모아 비탈면 안정성 검토 보고서를 엑셀 꼴로 만듦.
-- 가운데 = 내장 엑셀(시트 탭 · 그림 · 쪽 나눔 점선)로 보고서를 바로 보고 고침.
-- 왼쪽 = 안내 글 · 상태 줄 · 내보내기 단추 · 저장 단추.
-- 내보내기 = 엑셀(xlsx) · PDF 파일.
-- 처음 들어오면 서버가 보고서를 한 번 만듦(2D 해석 결과가 있을 때만). 그 첫 판이 [초기화] 의 되돌림 기준이 됨.
+## 여는 길
+
+- 왼쪽 위 **[☰]** 을 눌러 열리는 서랍의 「진행단계」 목록에서 **보고서** 를 누름.
+- E03 **2D 해석** 에서 [해석] 을 끝낸 프로젝트일 때만 보고서가 뜸. 아직이면 가운데에 「2D 해석 결과가 없습니다 — E03 에서 [해석] 뒤 만드세요.」 안내만 보임.
+- 처음 들어오면 서버가 보고서를 한 번 만들어 둠. 이 첫 판이 [초기화] 때 되돌아가는 기준.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | [☰] 서랍 | 안정성평가 단계(지반 조건 · 2D 해석 · 3D 해석 · 보고서 · 암반 해석 · 광역 위험) 사이를 오감 |
+| 2 | 안내 글 · 상태 줄 | 표지 · 개요는 사용자 몫이라는 안내 · 「저장 안 된 변경이 있습니다.」 · 보고서 만든 때 |
+| 3 | 위 단추 줄 | [?] 설명서 · [<] [>] 앞뒤 단계 · [엑셀] · [PDF] · [PDF 미리보기] |
+| 4 | 아래 단추 줄 | [보고서 갱신] · [초기화] · [저장] |
+| 5 | 「해석 결과가 바뀜」 띠 | 해석을 다시 했을 때만 뜸 · 띠의 [보고서 갱신] 으로 새 결과를 반영 |
+| 6 | 보고서 | 내장 엑셀 — 시트를 보고 사용자 몫 칸을 고침 |
+| 7 | 시트 탭 | 표지 · 목차 · 개요 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 암반검토 · 부록_절편 전환 |
+
+
+
+
+
+| 번호 | 단추 | 하는 일 |
+| --- | --- | --- |
+| 1 | [?] | 설명서를 엶 |
+| 2 · 3 | [<] · [>] | 앞 · 뒤 단계 화면으로 이동 |
+| 4 | [엑셀] | 엑셀 파일로 내려받음 |
+| 5 | [PDF] | PDF 파일로 내려받음 |
+| 6 | [PDF 미리보기] | 화면 안에 PDF 모양을 띄움 |
+| 7 | [보고서 갱신] | 프로그램 몫 시트를 새 해석 결과로 다시 씀 |
+| 8 | [초기화] | 처음 만든 보고서로 되돌림 |
+| 9 | [저장] | 고친 보고서를 저장함 |
## 작업 순서
-1. E03 측점 해석에서 **[해석]** 을 먼저 끝냄(없으면 가운데에 「2D 해석 결과가 없습니다 — E03 에서 [해석] 뒤 만드세요.」).
-2. 필요하면 E04 3D 해석 · E07 광역 해석 · E03 보강 검토도 끝냄(하지 않은 부분은 시트에 「… 전」 으로 남음).
-3. E05 를 열면 보고서가 뜸. 아래 시트 탭(표지 · 개요 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 보강검토)을 눌러 차례로 확인함.
-4. **표지** 의 발주처 · 작성자 칸, **개요** 의 「4. 의견」 칸에 글을 씀.
-5. 왼쪽 **[저장]** 을 누름(「저장했습니다.」).
-6. 해석을 다시 했으면 가운데 위 주의 색 띠 「해석 결과가 바뀜 —」 옆 **[보고서 갱신]** 을 누름.
-7. **[PDF 미리보기]** 로 인쇄 모양을 보고, **[엑셀]** 또는 **[PDF]** 로 내려받음.
+1. E03 **2D 해석** 에서 [해석] 을 끝냄. 필요하면 E04 3D 해석 · E06 암반 해석 · E07 광역 위험 · E03 보강 검토도 끝냄(안 한 부분은 시트에 「… 전」 으로 남음).
+2. **보고서** 를 열어 시트 탭을 차례로 눌러 확인함 → [시트 보기와 고치기](E05/01_시트_보기와_고치기).
+3. **표지** 의 발주처 · 작성자 칸과 **개요** 의 「4. 의견」 칸에 글을 씀.
+4. 왼쪽 아래 **[저장]** 을 누름.
+5. 해석을 다시 했으면 「해석 결과가 바뀜」 띠의 **[보고서 갱신]** 을 누름 → [갱신 · 저장 · 초기화](E05/02_갱신_저장_초기화).
+6. **[PDF 미리보기]** 로 인쇄 모양을 확인하고 **[엑셀]** 또는 **[PDF]** 로 내려받음 → [내보내기](E05/03_내보내기).
-## 단추
+> 주의: 보고서의 지반 물성치는 문헌 · 기준값을 쓴 추정치이며 현장 시험 값이 아님. 표지 · 입력조건 시트에 같은 글이 고정으로 들어 있음.
-| 자리 | 단추 | 하는 일 |
-| --- | --- | --- |
-| 왼쪽 위 줄 | **[엑셀]** | 지금 화면의 보고서를 `안정성평가_보고서.xlsx` 로 내려받음 · 저장은 안 함 |
-| 왼쪽 위 줄 | **[PDF]** | 지금 화면의 보고서를 `안정성평가_보고서.pdf` 로 내려받음 · 저장은 안 함 |
-| 왼쪽 위 줄 | **[PDF 미리보기]** | PDF 를 화면 안 창으로 띄움 · **[닫기]** 로 닫음 |
-| 왼쪽 아래 줄 | **[보고서 갱신]** | 프로그램 몫 시트 · 그림만 지금 해석 결과로 다시 씀 · 표지 · 개요 · 사용자가 더한 시트는 그대로 |
-| 왼쪽 아래 줄 | **[초기화]** | 처음 만든 보고서로 되돌림 · 확인 창 「처음 만든 보고서로 되돌립니다. 고친 내용 · 갱신이 모두 사라집니다.」 |
-| 왼쪽 아래 줄 | **[저장]** | 고친 보고서를 서버에 저장 · 고친 것이 있을 때만 켜짐 · 수식은 서버가 다시 풂 |
-| 가운데 위 띠 | **[보고서 갱신]** | 왼쪽 같은 이름 단추와 같음 · 해석 결과가 바뀐 때만 띠가 뜸 |
-
-- 저장 안 한 고침이 있는데 [보고서 갱신] 을 누르면 「저장 안 한 고침이 있습니다. 저장한 뒤 갱신할까요?」 → **[저장]** 을 고르면 저장 뒤 갱신함.
-- 시트 탭 줄 끝 **+** = 빈 시트 추가 · 탭 오른쪽 누름 메뉴 = 이름 바꾸기 · 복사 · 숨기기 · 삭제.
-
-## 결과 읽는 법
-
-- 상태 줄(왼쪽): 「저장 안 된 변경이 있습니다.」 · 「만드는 중…」 · 「보고서 만든 때 날짜 시각」.
-- 판정 칸 `O.K` = 초록 채움 · `N.G` = 빨강 채움.
-- 개요의 측점 수 · 최소 안전율 · 종합 판정 · 판정 글은 측점표 · 입력조건 시트를 가리키는 수식이라 갱신하면 같이 바뀜.
-- 시트마다 새 쪽에서 시작. 긴 표(측점표 등)는 자동으로 쪽이 나뉘고 머리 줄이 쪽마다 되풀이됨. 쪽 나눔은 화면에 점선으로 보임.
-- 시트별 내용은 「시트 구성」 문서 참고.
-
-## 알아 둘 것
-
-- **문헌 추정치 · 현장 시험 없음** — 표지 · 입력조건 시트에 고정 글로 들어 있음. 지반 물성치는 문헌 · 기준값을 적용한 추정치이며 현장 조사 · 시험 성과를 반영하지 않았음. 입력조건 물성 표 「출처」 열 = 기본값 그대로면 「문헌 추정치(기본값)」 · 바꿨으면 「사용자 입력」.
-- **사용자 몫** = 표지 · 개요 — 처음 만들 때만 채우고 [보고서 갱신] 때 건드리지 않음. **프로그램 몫** = 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 보강검토 — 갱신 때 통째로 다시 씀.
-- 프로그램 몫 시트를 손으로 고쳤다면 갱신 때 덮임. 이때 「고친 내용이 덮인 시트 — 옛 판은 _지난/ 에 보관: 시트 이름」 알림이 뜨고 옛 판은 서버에 보관됨. 오래 남길 글은 개요 의견 칸이나 새 시트에 쓸 것.
-- 프로그램 몫 시트를 지웠어도 갱신하면 끝에 다시 생김. 보강검토 시트는 E03 보강 검토 결과가 있을 때만 생김.
-- 고친 내용은 [저장] 전까지 이 브라우저 탭에만 남음(자동 저장 없음). 탭을 닫기 전 [저장] 할 것.
-- [엑셀] · [PDF] 는 화면에 지금 보이는 판(저장 안 한 고침 포함)으로 만듦. 보기만 허용된 프로젝트는 서버에 저장된 판으로 만듦.
-- 다른 곳에서 먼저 저장했으면 「다른 곳에서 보고서가 바뀌었습니다 — 다시 여세요.」 → 화면을 다시 열 것.
-- 보기만 허용된 프로젝트에서는 「보기만 허용된 프로젝트입니다.」 가 뜨고 [저장] · [초기화] · [보고서 갱신] 이 꺼짐(내보내기는 됨).
-- 왼쪽 안내 글은 입력조건 · 측점표 · 대표단면 · 3D요약만 적고 있으나, 광역요약 · 보강검토도 갱신 때 다시 씀.
-- **「사용자 확정 전」 표기** — E07 광역 화면에는 뿌리 점착 1 kPa · 측점 등급 문턱 5 % · 20 % 가 「사용자 확정 전」 으로 적혀 있으나, 보고서 광역요약 시트에는 그 줄이 아직 없음(준비 중). 값 자체는 광역요약 「토층 물성」 줄 · 「위험 측점」 제목에 들어감.
+> 참고: 시트별 내용은 [시트 구성](E05/10_시트_구성) 참고.
diff --git a/A05_EduDetail/guide/E05/01_시트_보기와_고치기.md b/A05_EduDetail/guide/E05/01_시트_보기와_고치기.md
new file mode 100644
index 000000000..7c356c2e5
--- /dev/null
+++ b/A05_EduDetail/guide/E05/01_시트_보기와_고치기.md
@@ -0,0 +1,39 @@
+# 시트 보기와 고치기
+
+가운데 내장 엑셀에서 시트를 넘겨 보고, 사용자 몫 칸에 글을 쓰는 방법.
+
+## 여는 길
+
+- **보고서** 화면 가운데가 곧 엑셀 화면. 아래쪽 시트 탭 줄에서 시트를 고름. 위쪽에는 엑셀 도구줄(글꼴 · 정렬 · 병합 · 테두리 등)이 있음.
+
+
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | 엑셀 도구줄 | 글꼴 · 맞춤 · 병합 · 테두리 · 단위 등 서식 |
+| 2 | 시트 칸 | 숫자 · 글이 든 엑셀 칸 |
+| 3 | 시트 탭 줄 | 시트를 바꿈 · 끝의 **+** 로 빈 시트 추가 |
+- 보기만 허용된 프로젝트는 고칠 수 없고 보기만 됨.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 가운데 엑셀 아래 시트 탭(표지 · 목차 · 개요 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 암반검토 · 부록_절편)을 눌러 시트를 바꿈.  |
+| 2 | **표지** 시트에서 발주처 · 작성자 칸을 눌러 글을 씀. 사업명 · 노선명 · 작성일은 자동으로 채워져 있음.  |
+| 3 | **개요** 시트에서 「4. 의견」 칸에 글을 씀. 측점 수 · 최소 안전율 · 종합 판정은 수식이라 직접 고치지 않음.  |
+| 4 | 나머지 시트(목차 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 암반검토 · 부록_절편)는 눈으로 확인. 판정 칸 `O.K` = 초록 · `N.G` = 빨강.  |
+| 5 | 고친 뒤 왼쪽 아래 [저장] 을 누름 → [갱신 · 저장 · 초기화](E05/02_갱신_저장_초기화). |
+
+## 보이는 것
+
+- 시트마다 새 쪽에서 시작. 긴 표는 쪽이 자동으로 나뉘고 머리 줄이 쪽마다 되풀이되며, 쪽 나눔은 점선으로 보임.
+- 대표단면 시트에는 단면 그림(지반선 · 설계면 · 암선 · 노면 · 임계 활동면)이 들어 있음. 
+- 3D요약 시트에는 평면 위험 띠 그림이 들어 있음. 
+- 탭을 오른쪽 누르면 이름 바꾸기 · 복사 · 삭제 · 숨기기 메뉴가 열림. 탭 줄 끝 **+** = 빈 시트 추가.
+
+> 주의: 표지 · 개요는 **사용자 몫** — [보고서 갱신] 때 그대로 남음. 목차 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 암반검토 · 부록_절편(있으면 보강검토 · 확률해석도)은 **프로그램 몫** — 갱신 때 통째로 다시 써서 손으로 고친 것이 덮임. 오래 남길 글은 개요 의견 칸이나 새로 더한 시트에 쓸 것.
+
+> 주의: 고친 내용은 [저장] 전까지 이 브라우저 탭에만 남음(자동 저장 없음). 탭을 닫기 전에 [저장] 할 것.
+
+> 참고: 보강검토 시트는 E03 보강 검토 결과가 있을 때만 생김. 광역요약은 E07 해석 결과가 있을 때만 채워짐. 암반검토는 E06 해석 결과를 가져옴.
diff --git a/A05_EduDetail/guide/E05/02_갱신_저장_초기화.md b/A05_EduDetail/guide/E05/02_갱신_저장_초기화.md
new file mode 100644
index 000000000..807dbec47
--- /dev/null
+++ b/A05_EduDetail/guide/E05/02_갱신_저장_초기화.md
@@ -0,0 +1,30 @@
+# 갱신 · 저장 · 초기화
+
+해석을 다시 한 뒤 보고서를 새 결과로 맞추고, 고친 것을 저장하거나 처음 판으로 되돌리는 방법.
+
+## 여는 길
+
+- 왼쪽 아래 단추 줄의 **[보고서 갱신]** · **[초기화]** · **[저장]**.
+- E02~E07 에서 해석을 다시 하면 가운데 위에 「해석 결과가 바뀜 —」 띠와 **[보고서 갱신]** 이 따라 뜸.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 가운데 위 띠 「해석 결과가 바뀜 —」 가 보이면 해석을 다시 했다는 뜻.  |
+| 2 | **[보고서 갱신]** 을 누름. 목차 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · 암반검토 · 부록_절편(있으면 보강검토 · 확률해석도)만 새 결과로 다시 쓰고 표지 · 개요 · 사용자가 더한 시트는 그대로 둠. |
+| 3 | 저장 안 한 고침이 있으면 「저장 안 한 고침이 있습니다. 저장한 뒤 갱신할까요?」 가 뜸 → **[저장]** 을 고르면 저장한 뒤 갱신함. |
+| 4 | 갱신 뒤 「보고서를 갱신했습니다.」 알림. 손으로 고친 프로그램 몫 시트가 덮였으면 「고친 내용이 덮인 시트 — 옛 판은 _지난/ 에 보관: 시트 이름」 알림이 뜸. |
+| 5 | 고친 내용을 남기려면 왼쪽 아래 **[저장]** 을 누름. 고친 것이 있을 때만 켜지고 「저장했습니다.」 알림이 뜸. |
+| 6 | 처음 만든 보고서로 돌아가려면 **[초기화]** 를 누르고 확인 창 「처음 만든 보고서로 되돌립니다. 고친 내용 · 갱신이 모두 사라집니다.」 에서 **[초기화]** 를 한 번 더 누름. 그만두려면 **[취소]**.  |
+
+## 보이는 것
+
+- 상태 줄 — 「만드는 중…」 · 「저장 안 된 변경이 있습니다.」 · 「보고서 만든 때 날짜 시각」.
+- 개요의 측점 수 · 최소 안전율 · 종합 판정 · 판정 글은 갱신하면 같이 바뀜.
+
+> 주의: [초기화] 는 되돌릴 수 없음. 고친 내용 · 갱신이 모두 사라지고 처음 만든 판이 됨.
+
+> 주의: 다른 곳에서 먼저 저장했으면 「다른 곳에서 보고서가 바뀌었습니다 — 다시 여세요.」 가 뜸. 화면을 다시 열 것.
+
+> 참고: 보기만 허용된 프로젝트에서는 [저장] · [초기화] · [보고서 갱신] 이 꺼짐(내보내기는 됨).
diff --git a/A05_EduDetail/guide/E05/03_내보내기.md b/A05_EduDetail/guide/E05/03_내보내기.md
new file mode 100644
index 000000000..be890cb91
--- /dev/null
+++ b/A05_EduDetail/guide/E05/03_내보내기.md
@@ -0,0 +1,23 @@
+# 내보내기
+
+지금 화면의 보고서를 엑셀 · PDF 파일로 받거나 PDF 모양을 먼저 미리 봄.
+
+## 여는 길
+
+- 왼쪽 아래 두 줄 가운데 위 줄의 **[엑셀]** · **[PDF]** · **[PDF 미리보기]**.
+- 보고서가 뜬 뒤에 켜짐.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **[PDF 미리보기]** 를 누름 → 화면 안에 PDF 창이 떠 인쇄 모양(쪽 나눔 · 머리 줄)을 확인함. 쪽 수가 많으면 몇 초 걸림.  |
+| 2 | 확인이 끝나면 창 위 **[닫기]** 를 누름. |
+| 3 | **[엑셀]** 을 누르면 `안정성평가_보고서.xlsx`, **[PDF]** 를 누르면 `안정성평가_보고서.pdf` 가 내려받아짐. |
+
+## 보이는 것
+
+- 내려받은 파일은 화면에 지금 보이는 판(저장 안 한 고침 포함)으로 만든 것. 수식은 서버가 다시 풀어 담음.
+- 보기만 허용된 프로젝트는 서버에 저장된 판으로 만듦.
+
+> 주의: [엑셀] · [PDF] 는 파일만 내려받고 보고서를 저장하지 않음. 저장은 [저장] 으로 따로 할 것.
diff --git a/A05_EduDetail/guide/E05/10_시트_구성.md b/A05_EduDetail/guide/E05/10_시트_구성.md
index e49665421..6f55cceac 100644
--- a/A05_EduDetail/guide/E05/10_시트_구성.md
+++ b/A05_EduDetail/guide/E05/10_시트_구성.md
@@ -3,22 +3,31 @@
| 차례 | 시트 | 몫 | 용지 | 내용 출처 |
| --- | --- | --- | --- | --- |
| 1 | 표지 | 사용자 | A4 세로 | 처음 만들 때 사업명 · 노선명 · 작성일만 채움 |
-| 2 | 개요 | 사용자 | A4 세로 | 수식이 측점표 · 입력조건을 따라감 |
-| 3 | 입력조건 | 프로그램 | A4 세로 | E02 지반 조건 · 해석 방법 |
-| 4 | 측점표 | 프로그램 | A4 가로 | E03 측점 해석 |
-| 5 | 대표단면 | 프로그램 | A4 세로 | E03 대표 단면 · 그림 |
-| 6 | 3D요약 | 프로그램 | A4 세로 | E04 3D 해석 · 평면 위험 띠 그림 |
-| 7 | 광역요약 | 프로그램 | A4 세로 | E07 광역 해석 |
-| 8 | 보강검토 | 프로그램 | A4 세로 | E03 보강 검토(있을 때만) |
+| 2 | 목차 | 프로그램 | A4 세로 | 장 · 내용 · 쪽 |
+| 3 | 개요 | 사용자 | A4 세로 | 수식이 측점표 · 입력조건을 따라감 |
+| 4 | 입력조건 | 프로그램 | A4 세로 | E02 지반 조건 · 해석 방법 |
+| 5 | 측점표 | 프로그램 | A4 가로 | E03 측점 해석 |
+| 6 | 대표단면 | 프로그램 | A4 세로 | E03 대표 단면 · 그림 |
+| 7 | 3D요약 | 프로그램 | A4 세로 | E04 3D 해석 · 평면 위험 띠 그림 |
+| 8 | 광역요약 | 프로그램 | A4 세로 | E07 광역 해석 |
+| 9 | 보강검토 | 프로그램 | A4 세로 | E03 보강 검토(있을 때만) |
+| 10 | 암반검토 | 프로그램 | A4 세로 | E06 암반 해석(평사투영 · 한계평형) |
+| 11 | 부록_절편 | 프로그램 | A4 세로 | 대표 단면 절편 계산표 |
+
+> 참고: 화면의 탭 차례는 표지 · 목차 · 개요 · 입력조건 · 측점표 · 대표단면 · 3D요약 · 광역요약 · (보강검토) · 암반검토 · 부록_절편. 확률 해석 결과가 있으면 확률해석 시트도 더해짐.
## 1. 표지
+
+
- 제목 「비탈면 안정성 검토 보고서」 · 부제 「임도 노선 비탈면 안정해석 결과」.
- 사업명 · 노선명(지역 · 임도 종류) · 작성일 = 자동 · 발주처 · 작성자 = 사용자가 씀.
- 「문헌 추정치 · 현장 시험 없음」 과 주의 글 「※ 지반 물성치는 문헌 · 기준값을 적용한 추정치이며 현장 조사 · 시험 성과를 반영하지 않았음.」 고정.
## 2. 개요
+
+
- 1. 해석 대상 — 대상 측점 수(개소) · 해석 구간 연장(m).
- 2. 조건별 최소 안전율 — 건기 · 우기 · 지진마다 최소 안전율 · 기준 안전율 · 판정 · 최소 안전율 측점. 지진을 안 쓰면 「-」.
- 3. 종합 판정 — 기준 미달(N.G) 측점 수 · 종합 판정 · 판정 글(예: 「대상 측점 57개소 중 3개소가 기준 안전율에 미달함. 미달 구간은 보강 대책 검토가 필요함.」).
@@ -26,6 +35,8 @@
## 3. 입력조건
+
+
- 1. 해석 방법 — 해석 기법(Bishop 간편법 기본 · Janbu 보정 · Fellenius 비교) · 활동면 탐색(원호 + 비원호 · 좌우 비탈 따로) · 3D 해석(Hungr 3D Bishop(+Janbu 보정) · 구 · 타원체 탐색, 3D 를 안 했으면 「3D 해석 전」) · 적용 기준(KDS 11 70 05).
- 2. 기준 안전율 — 건기 · 우기 · 지진 값 = 깎기 · 쌓기 중 엄한 쪽 · 비고에 둘 다 적음.
- 3. 지하수 규칙 — 건기 · 우기(토사 · 풍화암 / 암반) · 지진 시.
@@ -34,11 +45,15 @@
## 4. 측점표
+
+
- 측점 하나 = 한 줄 · 측점 · 누가거리 · 구분(깎기 · 쌓기 중 기준 대비 가장 낮은 쪽) · 건기 · 우기 · 지진 안전율 · 기준 안전율 · 판정.
- 판정 = 모든 조건이 기준 이상이면 O.K · 하나라도 미달이면 N.G.
## 5. 대표단면
+
+
- 단면 하나 = 한 쪽 · 제목(대표 단면 ① — 측점 · 깎기/쌓기 · 높이) · 선정 사유 · 단면 그림(지반선 · 설계면 · 암선 · 노면 · 비탈 높이 · 조건별 임계 활동면).
- 선정 사유 = 「쌓기 높이 10 m 이상」 · 「깎기 높이 15 m 이상」 · 「최소 안전율 하위 5」 · 「사용자 지정」(E03 대표 단면 켬).
- 조건별 해석 방법 · 안전율 · 기준 · 판정 · 활동면 반경 R · 중심 x · y · 비고(원호 · 비원호 · 지반 · 토층 두께).
@@ -46,6 +61,8 @@
## 6. 3D요약
+
+
- 1. 평면 위험 띠 그림 — 노선 · 측점 2D 판정 색 · 3D 구간 띠(O.K · N.G). 3D 를 안 했으면 「3D 해석 전」.
- 2. 구간별 3D 안전율 — 구간 · 시작 측점 · 끝 측점 · 3D 최소 Fs · 2D 최소 Fs · 3D/2D 비(수식) · 임계 체적(m³) · 판정.
- 2D 최소 Fs = 그 구간 측점들의 **같은 조건**(3D 를 셈한 건기 또는 우기) 최소값. 판정 · 기준은 E04 값을 그대로 씀.
@@ -53,6 +70,8 @@
## 7. 광역요약
+
+
- 1. 해석 조건 — 노선 띠(중심선 ± m · 격자) · 토층 물성(γt · γsat · c · φ · 뿌리 점착 · 토층 두께) · 시나리오(표준 SINMAP 습윤지수 또는 최악 완전 포화) · 해석 때.
- 2. 등급별 면적 — 안정 · 보통 안정 · 준안정 · 위험 하한 · 위험 상한 · 불안정의 SI 범위 · 면적(m²) · 비율(%) · 합계, 옆에 측점 등급(낮음 · 보통 · 높음)별 측점 수.
- 3. 위험 측점 — 보통 · 높음 측점만 한 줄씩 · 최소 Fs · 최소 SI · 등급(SI<1 비율) · 위험 면적 · 최대 경사. 없으면 「위험 측점 없음」.
@@ -64,3 +83,25 @@
- 1. 비탈 완화 · 소단 가정 — 측점 · 비탈 · 가정(1:n 전 → 후 · 소단 · 최소 완화) · 조건 · 전 Fs · 후 Fs · 기준 · 전 판정 · 후 판정.
- 2. 벽 외적 안정 — 측점 · 벽 · 평상시/지진 시 · 토압법 · 배면 수위 · 활동 · 전도 · 지지력 Fs와 기준(KDS 11 80 05) · 판정.
- E03 보강 검토 결과가 없으면 시트 자체가 빠짐.
+
+## 9. 목차
+
+
+
+- 장 · 내용 · 쪽 표 — 개요 · 입력조건 · 측점표 · 대표단면 · 3D · 광역 · 암반 · 부록의 시작 쪽.
+- [보고서 갱신] 때 프로그램이 다시 씀.
+
+## 10. 암반검토
+
+
+
+- 1. 해석 조건 · 판정 요약 — 투영 · 측방 한계 · 암 단위중량 · 우기 지하수 · 판정 요약.
+- 2. 절리군 — 경사방향 · 경사 · φj · cj · 지속성 · 적용 구간(E06 에서 넣은 값).
+- 3. 측점별 판정 — 측점 · 비탈 · 파괴 형태 · 조건 · Fs · 기준 · 판정 · 비고.
+- E06 에 해석 결과가 없으면 「암반 해석 전」 안내.
+
+## 11. 부록_절편
+
+
+
+- 대표 단면의 절편(조각)마다 폭 · 높이 · 무게 · 간극수압 · 점착력 · 마찰각 · 구동력 · 저항력을 나열한 계산표.
diff --git a/A05_EduDetail/guide/E05/E05_00_overview.webp b/A05_EduDetail/guide/E05/E05_00_overview.webp
new file mode 100644
index 000000000..b127ede30
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_00_overview.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_01_left_panel.webp b/A05_EduDetail/guide/E05/E05_01_left_panel.webp
new file mode 100644
index 000000000..eaf56863b
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_01_left_panel.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_02_sheet_area.webp b/A05_EduDetail/guide/E05/E05_02_sheet_area.webp
new file mode 100644
index 000000000..1cb24c9da
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_02_sheet_area.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_03_sheet_toolbar.webp b/A05_EduDetail/guide/E05/E05_03_sheet_toolbar.webp
new file mode 100644
index 000000000..ae07fbc6c
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_03_sheet_toolbar.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_04_stale_bar.webp b/A05_EduDetail/guide/E05/E05_04_stale_bar.webp
new file mode 100644
index 000000000..fcdd38abd
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_04_stale_bar.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_05_reset_confirm.webp b/A05_EduDetail/guide/E05/E05_05_reset_confirm.webp
new file mode 100644
index 000000000..a34552bce
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_05_reset_confirm.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_06_sheet_toc.webp b/A05_EduDetail/guide/E05/E05_06_sheet_toc.webp
new file mode 100644
index 000000000..d6cd7e7d5
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_06_sheet_toc.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_07_sheet_cover.webp b/A05_EduDetail/guide/E05/E05_07_sheet_cover.webp
new file mode 100644
index 000000000..de5177d7b
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_07_sheet_cover.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_08_sheet_summary.webp b/A05_EduDetail/guide/E05/E05_08_sheet_summary.webp
new file mode 100644
index 000000000..471ad730f
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_08_sheet_summary.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_09_sheet_conditions.webp b/A05_EduDetail/guide/E05/E05_09_sheet_conditions.webp
new file mode 100644
index 000000000..5e53f7ea7
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_09_sheet_conditions.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_10_sheet_stations.webp b/A05_EduDetail/guide/E05/E05_10_sheet_stations.webp
new file mode 100644
index 000000000..aeb0b1b9e
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_10_sheet_stations.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_11_sheet_section.webp b/A05_EduDetail/guide/E05/E05_11_sheet_section.webp
new file mode 100644
index 000000000..2aff4b418
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_11_sheet_section.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_12_sheet_3d.webp b/A05_EduDetail/guide/E05/E05_12_sheet_3d.webp
new file mode 100644
index 000000000..bfd05486f
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_12_sheet_3d.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_13_sheet_area_risk.webp b/A05_EduDetail/guide/E05/E05_13_sheet_area_risk.webp
new file mode 100644
index 000000000..8a18658e2
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_13_sheet_area_risk.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_14_drawer.webp b/A05_EduDetail/guide/E05/E05_14_drawer.webp
new file mode 100644
index 000000000..739257dfe
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_14_drawer.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_15_sheet_rock.webp b/A05_EduDetail/guide/E05/E05_15_sheet_rock.webp
new file mode 100644
index 000000000..5df96c1c6
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_15_sheet_rock.webp differ
diff --git a/A05_EduDetail/guide/E05/E05_16_sheet_appendix.webp b/A05_EduDetail/guide/E05/E05_16_sheet_appendix.webp
new file mode 100644
index 000000000..e5952b409
Binary files /dev/null and b/A05_EduDetail/guide/E05/E05_16_sheet_appendix.webp differ
diff --git a/A05_EduDetail/guide/E05/_scenes.json b/A05_EduDetail/guide/E05/_scenes.json
new file mode 100644
index 000000000..297707ba9
--- /dev/null
+++ b/A05_EduDetail/guide/E05/_scenes.json
@@ -0,0 +1,416 @@
+[
+ {
+ "name": "E05_00_overview",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-burger"
+ },
+ {
+ "n": 2,
+ "sel": ".e05-panel .ui-sidebar-scroll"
+ },
+ {
+ "n": 3,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2)"
+ },
+ {
+ "n": 4,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(3)"
+ },
+ {
+ "n": 5,
+ "sel": ".e05-stale",
+ "pos": "tr"
+ },
+ {
+ "n": 6,
+ "sel": ".e05-sheet .ss-grid-host"
+ },
+ {
+ "n": 7,
+ "sel": ".e05-sheet .ss-tabs"
+ }
+ ]
+ },
+ {
+ "name": "E05_01_left_panel",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".ui-workflow-overlay__panel--title",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(3)"
+ },
+ {
+ "n": 4,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(4)"
+ },
+ {
+ "n": 5,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(5)"
+ },
+ {
+ "n": 6,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(2) .ui-btn:nth-child(6)"
+ },
+ {
+ "n": 7,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(3) .ui-btn:nth-child(1)"
+ },
+ {
+ "n": 8,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(3) .ui-btn:nth-child(2)"
+ },
+ {
+ "n": 9,
+ "sel": ".e05-panel > .ui-sidebar-actions:nth-of-type(3) .ui-btn:nth-child(3)"
+ }
+ ],
+ "viewport": [
+ 1600,
+ 380
+ ]
+ },
+ {
+ "name": "E05_02_sheet_area",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e05-sheet .ss-toolbar"
+ },
+ {
+ "n": 2,
+ "sel": ".e05-sheet .ss-grid-host"
+ },
+ {
+ "n": 3,
+ "sel": ".e05-sheet .ss-tabs"
+ }
+ ]
+ },
+ {
+ "name": "E05_03_sheet_toolbar",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet .ss-toolbar",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e05-sheet .ss-toolbar"
+ }
+ ],
+ "clip_pad": 10
+ },
+ {
+ "name": "E05_04_stale_bar",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-stale",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e05-stale .ui-btn"
+ }
+ ]
+ },
+ {
+ "name": "E05_05_reset_confirm",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "wait_ms": 800
+ },
+ {
+ "click": ".e05-panel > .ui-sidebar-actions:nth-of-type(3) .ui-btn--danger-ghost",
+ "confirm": true
+ },
+ {
+ "wait": ".ui-confirm__panel"
+ }
+ ],
+ "clip": ".ui-confirm__panel",
+ "after": [
+ {
+ "click": ".ui-confirm__panel button:has-text(\"취소\")"
+ }
+ ],
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-confirm__actions .ui-btn--ghost"
+ },
+ {
+ "n": 2,
+ "sel": ".ui-confirm__actions .ui-btn--danger"
+ }
+ ]
+ },
+ {
+ "name": "E05_06_sheet_toc",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"목차\")"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_07_sheet_cover",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"표지\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_08_sheet_summary",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"개요\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_09_sheet_conditions",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"입력조건\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_10_sheet_stations",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"측점표\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_11_sheet_section",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"대표단면\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_12_sheet_3d",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"3D요약\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_13_sheet_area_risk",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"광역요약\")"
+ },
+ {
+ "wait_ms": 800
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_14_drawer",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".app-burger"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".app-drawer",
+ "clip_pad": 8,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-drawer__steps"
+ }
+ ],
+ "viewport": [
+ 1600,
+ 640
+ ]
+ },
+ {
+ "name": "E05_15_sheet_rock",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"암반검토\")"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ },
+ {
+ "name": "E05_16_sheet_appendix",
+ "route": "#/e05-stab-report",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e05-sheet .ss-tabs"
+ },
+ {
+ "click": ".e05-sheet .ss-tabs__tab:has-text(\"부록_절편\")"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".e05-sheet",
+ "callouts": []
+ }
+]
\ No newline at end of file
diff --git a/A05_EduDetail/guide/E06/00_설명서.md b/A05_EduDetail/guide/E06/00_설명서.md
index 89e38d24a..919c00c31 100644
--- a/A05_EduDetail/guide/E06/00_설명서.md
+++ b/A05_EduDetail/guide/E06/00_설명서.md
@@ -1,72 +1,37 @@
-# 암반 해석 설명서
+# 암반 해석
-## 이 화면에서 하는 일
+암 측점(리핑암 · 발파암) 깎기 비탈이 절리(암반 틈) 때문에 무너질 수 있는지, 현장에서 잰 절리 방향으로 판정하고 안전율을 셈하는 화면.
-암 측점(리핑암 · 발파암)의 깎기 비탈이 절리(암반 틈) 때문에 무너질 수 있는지 봄.
-현장에서 조사한 절리 방향을 넣으면 측점마다 두 가지를 셈.
+## 여는 길
-- **Markland 판정** — 절리 방향만 보고 평면 · 쐐기 · 전도 가운데 어떤 무너짐이 생길 수 있는지 가림.
-- **Hoek-Bray 안전율** — 평면 · 쐐기로 판정된 것만 건기 · 우기(· 지진) 안전율을 셈. 전도는 판정만 함.
+- 왼쪽 위 **[☰]** 서랍의 「진행단계」 목록에서 **암반 해석** 을 누름(E02 지반 조건과 복사본 횡단이 먼저 있어야 함).
+- 암 측점이 없는 노선이면 「암 측점 깎기 비탈이 없습니다.」 안내만 보임.
-사면 방향 · 경사 · 높이는 복사본 횡단에서, 물성 · 지진 · 기준 안전율은 지반 조건(E02)에서 가져옴.
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | [☰] 서랍 | 안정성평가 단계(지반 조건 · 2D 해석 · 3D 해석 · 보고서 · 암반 해석 · 광역 위험) 사이를 오감 |
+| 2 | 왼쪽 카드(절리군 · 해석 설정) | 현장 절리 방향을 넣고 해석 조건을 고침 |
+| 3 | 왼쪽 아래 단추 줄 | [초기화] · [저장] · [해석] |
+| 4 | 위험 띠 | 누가거리 축에 측점마다 가장 나쁜 판정 색 · 누르면 그 측점이 열림 · 위에 「다시 [해석]」 띠가 뜰 때가 있음 |
+| 5 | 스테레오넷 | 고른 측점의 사면과 절리를 그린 원형 그림 · [등각] [등면적] · [전체] [평면] [쐐기] [전도] |
+| 6 | 측점 결과(오른쪽) | 측점 표 · 고른 측점의 사면 줄 · 위험 모드 · 안전율 표 |
+
+> 참고: 해석 뒤 절리 · 지반 조건이 바뀌면 가운데 위에 「절리 · 지반 조건이 해석 뒤 바뀌었습니다 — [해석] 을 다시 누르세요.」 띠가 뜸.
+
+
## 작업 순서
-1. 좌측 **절리군** 카드에서 [+ 절리군] 을 눌러 줄을 늘림.
-2. 줄마다 이름 · 구간(시작 · 끝, m) · 경사방향 · 경사 · φj · cj · 지속성을 넣음. 칸 뜻은 `10_칸_뜻` 참고.
-3. 필요하면 **해석 설정** 카드(측방 한계 · 암 단위중량 · 우기 수위 비 · 인장균열 · 볼트)를 고침.
-4. [저장] 을 누름. 빨간 칸이 있으면 저장되지 않음.
-5. [해석] 을 누름. 저장 안 한 고침이 있으면 먼저 저장한 뒤 셈.
-6. 가운데 **위험 띠** 나 우측 **측점 결과** 표에서 측점을 눌러 스테레오넷 · 안전율 표를 봄.
+1. 왼쪽 **절리군** 카드에서 [+ 절리군] 으로 줄을 늘려 현장 절리 방향을 넣음 → [절리군 넣기](E06/01_절리군_넣기).
+2. 필요하면 **해석 설정** 카드를 고침 → [해석 설정](E06/02_해석_설정).
+3. [저장] 뒤 [해석] 을 누름. 빨간 칸이 있으면 저장되지 않음 → [저장 · 해석 · 초기화](E06/03_저장_해석_초기화).
+4. **위험 띠** 나 오른쪽 **측점 결과** 표에서 측점을 눌러 결과를 봄 → [위험 띠와 측점 결과](E06/04_위험_띠와_측점_결과).
+5. 스테레오넷으로 어떤 절리가 위험한지 확인 → [스테레오넷 보기](E06/05_스테레오넷_보기).
-## 단추
+> 주의: 절리 방향은 반드시 현장 조사값을 넣을 것. 절리가 없으면 해석할 것이 없음. 절리면 φj · cj · 암 단위중량 기본값은 문헌 추정치이며 현장 시험 값이 아님.
-| 단추 | 자리 | 하는 일 |
-| --- | --- | --- |
-| [+ 절리군] | 좌 · 절리군 카드 | 새 줄 추가(구간 = 0 m ~ 마지막 암 측점 · 경사방향 0° · 경사 45° · φj 30° · cj 0 kPa) |
-| [×] | 좌 · 절리군 줄 끝 | 그 줄 지움 |
-| [초기화] | 좌 아래 | 확인 창 뒤 절리군 · 설정을 처음 상태(절리 없음 · 기본 설정)로 되돌림 |
-| [저장] | 좌 아래 | 절리군 · 설정을 작업본에 씀 |
-| [해석] | 좌 아래 | 암 측점 × 깎기 쪽을 모두 셈 · 입력이 지난번과 같으면 지난 결과를 씀 |
-| [등각] [등면적] | 가운데 위 | 스테레오넷 투영 바꿈(보기만 · 저장 안 됨) |
-| [전체] [평면] [쐐기] [전도] | 가운데 위 | 스테레오넷에 그 모드 위험 영역만 보임 |
-
-- 칸을 고치기만 하면 이 탭 안에만 남음(자동 저장 없음). 「저장 안 된 변경이 있습니다.」가 뜨면 [저장] 할 것.
-- 보기만 허용된 프로젝트는 칸 · 단추가 잠김.
-
-## 결과 읽는 법
-
-**가운데 위 · 위험 띠** — 누가거리 축에 측점마다 가장 나쁜 판정 색. 띠 조각을 누르면 그 측점이 열림. 왼쪽에 판정별 측점 수.
-
-**가운데 · 스테레오넷** — 하반구 투영. 그림 보는 법은 `20_쓰인_방법과_근거` 의 스테레오넷 절 참고.
-
-- 굵은 선 · 네모 = 사면 대원 · 사면 극점
-- 점 + 이름 = 절리 극점(평면 · 전도 보기) · 세모 + 이름 = 두 절리 교선(쐐기 보기)
-- 테두리가 강조된 점 · 세모 = 이 측점에서 위험으로 판정된 것
-- 원 = 마찰원 φ · 색 영역 = 평면 · 쐐기 · 전도 위험 영역 · 선 = 일광 엔벨로프(평면)
-
-**우측 · 측점 결과 표** — 측점 · 쪽(좌 · 우) · 평 · 쐐 · 전(위험 모드 수) · 최소 Fs · 판정.
-
-| 판정 | 뜻 |
-| --- | --- |
-| N.G | 안전율이 기준보다 낮은 경우가 하나라도 있음 |
-| 검토 | 전도 위험이 있음, 또는 위험 판정은 났으나 블록이 안 생겨 안전율을 못 셈 |
-| O.K | 위험 모드는 있으나 모든 안전율이 기준 이상 |
-| 위험 없음 | Markland 판정에서 위험 모드 없음 |
-
-**우측 아래 · 고른 측점** — 사면 경사방향 / 경사 · 높이 · 윗면 경사 · 암 단위중량 한 줄, 모드별 위험 절리, 안전율 표(모드 · 절리 · 조건 · Fs · 기준 · 판정).
-
-- Fs 옆 「(블록 안 생김)」 = 그 조건에서 덩이가 만들어지지 않음.
-- Fs 옆 「(지속성 < 활동면)」 = 절리 길이가 활동면보다 짧음 · 실제로는 덩이가 덜 생길 수 있음.
-- 기준 = 지반 조건(E02)의 깎기 기준 안전율(기본 건기 1.5 · 우기 1.2 · 지진 1.1).
-
-## 알아 둘 것
-
-- **문헌 추정치 · 현장 시험 없음.** 절리면 φj · cj · 암 단위중량 기본값은 문헌 값임. 현장 조사 · 시험 값으로 바꿀 것.
-- 절리 방향은 반드시 현장 조사값을 넣을 것. 절리가 없으면 해석할 것이 없음.
-- 주향으로 적은 야장은 경사방향 = 주향 + 90°(오른손 법칙)로 바꿔 넣을 것. 주향 입력 칸은 없음.
-- 대상 = 암 측점의 깎기 쪽 중 높이 1 m 이상만. 토사 측점 · 쌓기 쪽은 2D 해석(E03)에서 봄.
-- 지진 조건은 지반 조건(E02)에서 지진을 켠 때만 셈.
-- 절리 · 지반 조건이 해석 뒤 바뀌면 가운데 위에 「[해석] 을 다시 누르세요」 띠가 뜸.
-- 전도는 기하 판정만 함. 블록 전도 안전율은 별도 정밀 검토 몫.
-- 보고서(E05)에 암반 결과 시트는 **준비 중**.
+> 참고: 대상은 암 측점의 깎기 쪽 중 높이 1 m 이상. 토사 측점 · 쌓기 쪽은 [2D 해석](E03/00_설명서)에서 봄. 칸 뜻은 [칸 뜻](E06/10_칸_뜻), 계산 방법은 [쓰인 방법과 근거](E06/20_쓰인_방법과_근거) 참고.
diff --git a/A05_EduDetail/guide/E06/01_절리군_넣기.md b/A05_EduDetail/guide/E06/01_절리군_넣기.md
new file mode 100644
index 000000000..7c61304db
--- /dev/null
+++ b/A05_EduDetail/guide/E06/01_절리군_넣기.md
@@ -0,0 +1,30 @@
+# 절리군 넣기
+
+현장에서 조사한 절리 방향을 줄 하나씩 넣는 방법. 한 줄 = 방향이 비슷한 절리 무리 하나.
+
+## 여는 길
+
+- 왼쪽 패널 위 **절리군** 카드(처음부터 펼쳐져 있음).
+- 카드 제목을 누르면 접고 펼 수 있음.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **[+ 절리군]** 을 누름 → 표에 새 줄이 생김(구간 = 0 m ~ 마지막 암 측점 · 경사방향 0° · 경사 45° · φj 30° · cj 0 kPa).  |
+| 2 | **이름** 칸에 절리군 이름을 씀(J1 · J2 처럼). |
+| 3 | **시작 · 끝** 칸에 이 절리군을 쓸 누가거리 구간(m)을 씀. 구간 안 측점에만 적용됨. |
+| 4 | **경사방향**(0~360°, 북 0° · 시계 방향) · **경사**(0~90°) · **φj**(절리면 마찰각) · **cj**(절리면 점착력) 를 씀. |
+| 5 | **지속성** 은 절리가 이어지는 길이(m). 모르면 비워 둠(끝없이 이어진다고 봄). |
+| 6 | 줄을 지우려면 줄 끝 **[×]** 를 누름. 표가 카드보다 넓어 옆으로 밀어서 봄. |
+| 7 | 끝나면 아래 [저장] 을 누름 → [저장 · 해석 · 초기화](E06/03_저장_해석_초기화). |
+
+## 보이는 것
+
+- 범위 밖 값 · 빈 필수 칸은 빨갛게 되고 마우스를 올리면 「범위 밖 (아래 ~ 위)」 가 보임. 상태 줄에 「틀린 칸 N」 이 뜸.
+- 한 측점에 구간이 겹치는 절리군이 여럿이면 모두 함께 봄(쐐기는 두 절리군 짝마다).
+- 줄이 하나도 없으면 「절리군이 없습니다 — [+ 절리군] 으로 넣으세요.」 가 보임.
+
+> 주의: 주향으로 적은 야장은 경사방향 = 주향 + 90°(오른손 법칙)로 바꿔서 넣을 것. 주향을 넣는 칸은 없음.
+
+> 참고: 칸을 고치기만 하면 이 브라우저 탭에만 남음(자동 저장 없음). 칸별 뜻 · 범위는 [칸 뜻](E06/10_칸_뜻) 참고.
diff --git a/A05_EduDetail/guide/E06/02_해석_설정.md b/A05_EduDetail/guide/E06/02_해석_설정.md
new file mode 100644
index 000000000..4980ef0e3
--- /dev/null
+++ b/A05_EduDetail/guide/E06/02_해석_설정.md
@@ -0,0 +1,29 @@
+# 해석 설정
+
+무너짐 후보를 가르는 각도 · 암 무게 · 물 · 균열 · 볼트 같은 해석 조건을 고치는 방법. 기본값으로도 해석은 됨.
+
+## 여는 길
+
+- 왼쪽 패널 **해석 설정** 카드. 처음에는 접혀 있어 제목을 눌러 펼침.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **해석 설정** 카드 제목을 눌러 펼침.  |
+| 2 | **평면 측방 한계 · 전도 측방 한계** — 사면과 절리 방향 차이가 이 각 안이면 무너짐 후보로 봄(기본 20°). |
+| 3 | **암 단위중량** — 비우면 지반 조건(E02)의 그 측점 암 물성을 씀. |
+| 4 | **우기 수위 비** — 0 = 마름 · 1 = 가득 참(기본 0.5). |
+| 5 | **최소 블록 크기** — 이보다 작은 블록은 판정에서 빼고 「소규모 · 낙석 관리」 로 표시함(기본 0.1 m³). 값을 바꾼 뒤 **[기본값]** 을 누르면 되돌아감. |
+| 6 | **인장균열** 을 고름 — 없음 · 임계(최소 안전율 자리) · 깊이 지정. |
+| 7 | 「깊이 지정」 을 고르면 **균열 깊이 (m)** 칸이 나타남.  |
+| 8 | **볼트 힘 · 볼트 경사** 를 넣으면 보강 효과를 반영함(0 이면 보강 없음). |
+
+## 보이는 것
+
+- 카드 아래에 측방 한계 · 우기 · 볼트에 대한 안내 글과 최소 블록 크기 안내 글이 보임.
+- 칸이 범위를 벗어나면 빨갛게 됨.
+
+> 참고: 측방 한계 기본 20° 는 상용 Dips 기본값이고 최소 블록 크기 0.1 m³ 는 사용자 확정 전 값. 둘 다 사용자가 바꿀 수 있음.
+
+> 참고: 칸별 범위 · 뜻은 [칸 뜻](E06/10_칸_뜻) 참고. 기준 안전율 · 지진은 [지반 조건](E02/00_설명서)에서 가져옴.
diff --git a/A05_EduDetail/guide/E06/03_저장_해석_초기화.md b/A05_EduDetail/guide/E06/03_저장_해석_초기화.md
new file mode 100644
index 000000000..350beb7f8
--- /dev/null
+++ b/A05_EduDetail/guide/E06/03_저장_해석_초기화.md
@@ -0,0 +1,27 @@
+# 저장 · 해석 · 초기화
+
+넣은 절리군과 설정을 저장하고, 해석을 돌리고, 필요하면 처음 상태로 되돌리는 방법.
+
+## 여는 길
+
+- 왼쪽 아래 단추 줄의 **[초기화]** · **[저장]** · **[해석]**.
+- 절리군이 하나도 없어도 단추는 켜져 있으나, 절리가 없으면 해석할 것이 없음.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 절리군 · 설정을 다 넣었으면 **[저장]** 을 누름. 빨간 칸이 하나라도 있으면 「틀린 칸 N」 이 뜨고 저장되지 않음. |
+| 2 | 저장되면 「저장했습니다.」 알림. |
+| 3 | **[해석]** 을 누름. 저장 안 한 고침이 있으면 먼저 저장한 뒤 셈함.  |
+| 4 | 해석 중에는 「해석 중…」 이 뜨고 끝나면 「암반 해석을 마쳤습니다.」 알림. 입력이 지난번과 같으면 「입력이 같아 지난 결과를 씁니다.」 가 뜸. |
+| 5 | 처음으로 돌리려면 **[초기화]** → 확인 창 「절리군 · 설정을 초기값(절리 없음)으로 되돌릴까요?」 에서 **[초기화]** 를 누름. 그만두려면 **[취소]**.  |
+
+## 보이는 것
+
+- 절리나 지반 조건이 해석 뒤에 바뀌면 가운데 위에 「절리 · 지반 조건이 해석 뒤 바뀌었습니다 — [해석] 을 다시 누르세요.」 띠가 뜸. 
+- 상태 줄 — 「저장 안 된 변경이 있습니다.」 · 「틀린 칸 N」 · 「보기만 허용된 프로젝트입니다.」.
+
+> 주의: [초기화] 는 절리군을 모두 지우고 설정을 기본값으로 되돌림. 저장한 내용도 사라짐.
+
+> 참고: 보기만 허용된 프로젝트는 칸과 단추가 잠김. 해석 결과는 [위험 띠와 측점 결과](E06/04_위험_띠와_측점_결과)에서 봄.
diff --git a/A05_EduDetail/guide/E06/04_위험_띠와_측점_결과.md b/A05_EduDetail/guide/E06/04_위험_띠와_측점_결과.md
new file mode 100644
index 000000000..96d8cd127
--- /dev/null
+++ b/A05_EduDetail/guide/E06/04_위험_띠와_측점_결과.md
@@ -0,0 +1,33 @@
+# 위험 띠와 측점 결과
+
+해석이 끝난 뒤 어느 측점이 위험한지 한눈에 보고, 한 측점의 안전율을 자세히 읽는 방법.
+
+## 여는 길
+
+- 가운데 위 **위험 띠** 와 오른쪽 **측점 결과** 패널. [해석] 이 끝나면 자동으로 채워짐.
+- 처음에는 N.G 측점(없으면 첫 측점)이 자동으로 열려 있음.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **위험 띠** 를 봄. 누가거리 축에 측점마다 가장 나쁜 판정 색이 칠해지고 왼쪽에 판정별 측점 수가 보임.  |
+| 2 | 띠 조각을 누르면 그 측점이 열림. |
+| 3 | 오른쪽 **측점 결과** 표에서도 줄을 눌러 측점을 고를 수 있음. 열은 측점 · 쪽(좌 · 우) · 평 · 쐐 · 전(위험 모드 수) · 최소 Fs · 판정.  |
+| 4 | 표 아래 **고른 측점** 에서 사면 줄 · 모드별 위험 절리 · 안전율 표(모드 · 절리 · 조건 · Fs · 기준 · 판정)를 읽음.  |
+
+## 보이는 것
+
+| 판정 | 뜻 |
+| --- | --- |
+| N.G | 안전율이 기준보다 낮은 경우가 하나라도 있음 |
+| 검토 | 전도 위험이 있음, 또는 위험 판정은 났으나 블록이 안 생겨 안전율을 못 셈 |
+| O.K | 위험 모드는 있으나 모든 안전율이 기준 이상 |
+| 위험 없음 | Markland 판정에서 위험 모드 없음 |
+
+- Fs 옆 「(블록 안 생김)」 = 그 조건에서 덩이가 만들어지지 않음. 「(지속성 < 활동면)」 = 절리 길이가 활동면보다 짧아 실제로는 덩이가 덜 생길 수 있음.
+- 기준 = 지반 조건(E02)의 깎기 기준 안전율(기본 건기 1.5 · 우기 1.2 · 지진 1.1).
+
+> 주의: 전도는 기하 판정만 함. 블록 전도 안전율은 별도 정밀 검토 몫.
+
+> 참고: 지진 조건은 지반 조건(E02)에서 지진을 켠 때만 셈. 해석 결과는 [보고서](E05/00_설명서)의 「암반검토」 시트에도 들어감.
diff --git a/A05_EduDetail/guide/E06/05_스테레오넷_보기.md b/A05_EduDetail/guide/E06/05_스테레오넷_보기.md
new file mode 100644
index 000000000..a4e4a68f4
--- /dev/null
+++ b/A05_EduDetail/guide/E06/05_스테레오넷_보기.md
@@ -0,0 +1,26 @@
+# 스테레오넷 보기
+
+고른 측점의 사면과 절리를 하반구 투영 그림 한 장으로 보고, 어떤 절리가 위험 영역에 들어 있는지 확인하는 방법.
+
+## 여는 길
+
+- 가운데 아래 **스테레오넷**. 위험 띠나 측점 표에서 측점을 고르면 그려짐(고르기 전에는 「측점을 고르세요.」).
+- 그림 위 줄에 측점 이름 · 쪽 · φ 와 [등각] [등면적] · [전체] [평면] [쐐기] [전도] 단추가 있음.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 측점을 고름. 굵은 선 · 네모 = 사면 대원 · 사면 극점, 점 + 이름 = 절리 극점, 세모 + 이름 = 두 절리 교선.  |
+| 2 | **[평면]** 을 누르면 평면 무너짐 위험 영역(색 칠한 부분)과 일광 엔벨로프(선)만 보임. 위험 영역 안 극점이 평면 후보.  |
+| 3 | **[쐐기]** 를 누르면 쐐기 위험 영역과 교선만 보임.  |
+| 4 | **[전도]** 를 누르면 전도 위험 영역만 보임. 돌아오려면 **[전체]**. |
+| 5 | **[등각]** · **[등면적]** 으로 투영 방식을 바꿈. 보기만 바뀌고 저장되지 않음.  |
+
+## 보이는 것
+
+- 테두리가 강조된 점 · 세모 = 이 측점에서 위험으로 판정된 것.
+- 원 = 마찰원 φ. 그림 아래 범례가 지금 보기에 해당하는 것만 보임.
+- 그림 읽는 법의 원리는 [쓰인 방법과 근거](E06/20_쓰인_방법과_근거)의 스테레오넷 절 참고.
+
+> 참고: 평면 · 쐐기 · 전도 보기와 등각 · 등면적은 서로 겹쳐 고를 수 있음(예: 등면적 + 쐐기).
diff --git a/A05_EduDetail/guide/E06/10_칸_뜻.md b/A05_EduDetail/guide/E06/10_칸_뜻.md
index a341c55e0..01ad9c986 100644
--- a/A05_EduDetail/guide/E06/10_칸_뜻.md
+++ b/A05_EduDetail/guide/E06/10_칸_뜻.md
@@ -4,6 +4,8 @@
## 절리군 표 (좌 · 절리군 카드)
+
+
한 줄 = 방향이 비슷한 절리 무리 하나. 현장 조사값을 넣음.
| 칸 | 뜻 | 단위 | 범위 | 새 줄 기본 |
@@ -22,6 +24,8 @@
## 해석 설정 (좌 · 해석 설정 카드)
+
+
| 칸 | 뜻 | 범위 | 기본 |
| --- | --- | --- | --- |
| 평면 측방 한계 (°) | 사면과 절리 경사방향 차이가 이 각 안이면 평면 무너짐 후보 | 5 ~ 45 | 20 |
@@ -42,6 +46,8 @@
## 결과 칸 (우측)
+
+
| 칸 | 뜻 |
| --- | --- |
| 쪽 | 노선 좌 · 우 깎기 비탈 |
diff --git a/A05_EduDetail/guide/E06/20_쓰인_방법과_근거.md b/A05_EduDetail/guide/E06/20_쓰인_방법과_근거.md
index d9763ab61..ff60bc4d5 100644
--- a/A05_EduDetail/guide/E06/20_쓰인_방법과_근거.md
+++ b/A05_EduDetail/guide/E06/20_쓰인_방법과_근거.md
@@ -52,6 +52,8 @@
## 스테레오넷 읽는 법
+
+
- 구를 아래 반쪽만 보고(하반구) 평면에 펼친 그림. 위 = 북 · 가장자리 = 수평 · 가운데 = 연직.
- 등각 = 각도 모양이 바르게 보임 · 등면적 = 넓이 비율이 바르게 보임. 판정 결과는 같음.
- **마찰원** = 마찰각 φ 원. 그림의 φ = 그 측점 절리 중 가장 작은 φj(제목 줄에 표시) · 표 판정은 절리마다 제 φj 를 씀 — φj 가 서로 다르면 그림과 표가 조금 다를 수 있음.
diff --git a/A05_EduDetail/guide/E06/E06_00_overview.webp b/A05_EduDetail/guide/E06/E06_00_overview.webp
new file mode 100644
index 000000000..7b563903e
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_00_overview.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_01_joints_card.webp b/A05_EduDetail/guide/E06/E06_01_joints_card.webp
new file mode 100644
index 000000000..9b670c671
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_01_joints_card.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_02_settings_card.webp b/A05_EduDetail/guide/E06/E06_02_settings_card.webp
new file mode 100644
index 000000000..76ddc3ed5
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_02_settings_card.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_03_crack_depth.webp b/A05_EduDetail/guide/E06/E06_03_crack_depth.webp
new file mode 100644
index 000000000..50f72429d
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_03_crack_depth.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_04_actions.webp b/A05_EduDetail/guide/E06/E06_04_actions.webp
new file mode 100644
index 000000000..9723947fd
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_04_actions.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_05_reset_confirm.webp b/A05_EduDetail/guide/E06/E06_05_reset_confirm.webp
new file mode 100644
index 000000000..b5fd3e595
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_05_reset_confirm.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_06_stale_bar.webp b/A05_EduDetail/guide/E06/E06_06_stale_bar.webp
new file mode 100644
index 000000000..8e05a69a1
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_06_stale_bar.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_07_band.webp b/A05_EduDetail/guide/E06/E06_07_band.webp
new file mode 100644
index 000000000..d84ecd3ac
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_07_band.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_08_station_list.webp b/A05_EduDetail/guide/E06/E06_08_station_list.webp
new file mode 100644
index 000000000..9277aa55b
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_08_station_list.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_09_station_detail.webp b/A05_EduDetail/guide/E06/E06_09_station_detail.webp
new file mode 100644
index 000000000..539577b6e
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_09_station_detail.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_10_net_all.webp b/A05_EduDetail/guide/E06/E06_10_net_all.webp
new file mode 100644
index 000000000..926209135
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_10_net_all.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_11_net_planar.webp b/A05_EduDetail/guide/E06/E06_11_net_planar.webp
new file mode 100644
index 000000000..61b876148
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_11_net_planar.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_12_net_wedge.webp b/A05_EduDetail/guide/E06/E06_12_net_wedge.webp
new file mode 100644
index 000000000..7a50cbfc2
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_12_net_wedge.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_13_net_equal_area.webp b/A05_EduDetail/guide/E06/E06_13_net_equal_area.webp
new file mode 100644
index 000000000..6e2d9f670
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_13_net_equal_area.webp differ
diff --git a/A05_EduDetail/guide/E06/E06_14_drawer.webp b/A05_EduDetail/guide/E06/E06_14_drawer.webp
new file mode 100644
index 000000000..2b095a1d1
Binary files /dev/null and b/A05_EduDetail/guide/E06/E06_14_drawer.webp differ
diff --git a/A05_EduDetail/guide/E06/_scenes.json b/A05_EduDetail/guide/E06/_scenes.json
new file mode 100644
index 000000000..455fce273
--- /dev/null
+++ b/A05_EduDetail/guide/E06/_scenes.json
@@ -0,0 +1,507 @@
+[
+ {
+ "name": "E06_00_overview",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-burger"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-cards"
+ },
+ {
+ "n": 3,
+ "sel": ".e06-panel > .ui-sidebar-actions"
+ },
+ {
+ "n": 4,
+ "sel": ".e06-band"
+ },
+ {
+ "n": 5,
+ "sel": ".e06-stage"
+ },
+ {
+ "n": 6,
+ "sel": ".ui-side-panels__panel[data-panel=\"result\"]"
+ }
+ ]
+ },
+ {
+ "name": "E06_01_joints_card",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".e06-cards > section:nth-child(1)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-cards > section:nth-child(1) .e06-table-wrap"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-cards > section:nth-child(1) .e06-row-actions .ui-btn"
+ }
+ ]
+ },
+ {
+ "name": "E06_02_settings_card",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "click": ".e06-cards > section:nth-child(2) .ui-collapsible__title"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e06-cards > section:nth-child(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-cards > section:nth-child(2) .ui-field:nth-of-type(1), .e06-cards > section:nth-child(2) .e06-setting:nth-of-type(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-cards > section:nth-child(2) .e06-setting__ctl"
+ }
+ ]
+ },
+ {
+ "name": "E06_03_crack_depth",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "click": ".e06-cards > section:nth-child(2) .ui-collapsible__title"
+ },
+ {
+ "select": ".e06-cards > section:nth-child(2) select[data-path=\"settings.crack.mode\"]",
+ "value": "depth"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e06-cards > section:nth-child(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-cards > section:nth-child(2) select[data-path=\"settings.crack.mode\"]"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-cards > section:nth-child(2) input[data-path=\"settings.crack.z\"]"
+ }
+ ]
+ },
+ {
+ "name": "E06_04_actions",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".e06-panel > .ui-sidebar-actions",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-panel > .ui-sidebar-actions .ui-btn:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-panel > .ui-sidebar-actions .ui-btn:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".e06-panel > .ui-sidebar-actions .ui-btn:nth-child(3)"
+ }
+ ]
+ },
+ {
+ "name": "E06_05_reset_confirm",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "click": ".e06-panel > .ui-sidebar-actions .ui-btn--danger-ghost",
+ "confirm": true
+ },
+ {
+ "wait": ".ui-confirm__panel"
+ }
+ ],
+ "clip": ".ui-confirm__panel",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".ui-confirm__actions .ui-btn--ghost"
+ },
+ {
+ "n": 2,
+ "sel": ".ui-confirm__actions .ui-btn--danger"
+ }
+ ],
+ "after": [
+ {
+ "click": ".ui-confirm__panel button:has-text(\"취소\")"
+ }
+ ]
+ },
+ {
+ "name": "E06_06_stale_bar",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".e06-stale",
+ "callouts": []
+ },
+ {
+ "name": "E06_07_band",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ }
+ ],
+ "clip": ".e06-band",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-band__legend"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-band__strip"
+ },
+ {
+ "n": 3,
+ "sel": ".e06-band__ticks"
+ }
+ ]
+ },
+ {
+ "name": "E06_08_station_list",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ }
+ ],
+ "clip": ".ui-side-panels__panel[data-panel=\"result\"] .e06-list-slot",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-list thead"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-list tbody tr.is-active"
+ }
+ ]
+ },
+ {
+ "name": "E06_09_station_detail",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ }
+ ],
+ "clip": ".e06-detail",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-detail .e06-hint"
+ },
+ {
+ "n": 2,
+ "sel": ".e06-detail .e06-kin"
+ },
+ {
+ "n": 3,
+ "sel": ".e06-detail .e06-cases"
+ }
+ ]
+ },
+ {
+ "name": "E06_10_net_all",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ }
+ ],
+ "clip": ".e06-stage",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-toolbar"
+ },
+ {
+ "n": 2,
+ "sel": "[data-role=\"stereonet\"]"
+ },
+ {
+ "n": 3,
+ "sel": ".e06-legend"
+ }
+ ]
+ },
+ {
+ "name": "E06_11_net_planar",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ },
+ {
+ "click": ".e06-toolbar .e06-toggle button[data-value=\"planar\"]"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e06-stage",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-toolbar .e06-toggle button[data-value=\"planar\"]"
+ },
+ {
+ "n": 2,
+ "sel": "[data-role=\"stereonet\"]"
+ }
+ ]
+ },
+ {
+ "name": "E06_12_net_wedge",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ },
+ {
+ "click": ".e06-toolbar .e06-toggle button[data-value=\"wedge\"]"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e06-stage",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-toolbar .e06-toggle button[data-value=\"wedge\"]"
+ },
+ {
+ "n": 2,
+ "sel": "[data-role=\"stereonet\"]"
+ }
+ ]
+ },
+ {
+ "name": "E06_13_net_equal_area",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "wait_ms": 1200
+ },
+ {
+ "wait": ".e06-list tbody tr"
+ },
+ {
+ "click": ".e06-list tbody tr:nth-child(1)"
+ },
+ {
+ "wait": "[data-role=\"stereonet\"]"
+ },
+ {
+ "wait_ms": 600
+ },
+ {
+ "click": ".e06-toolbar .e06-toggle button[data-value=\"equal_area\"]"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e06-stage",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e06-toolbar .e06-toggle button[data-value=\"equal_area\"]"
+ },
+ {
+ "n": 2,
+ "sel": "[data-role=\"stereonet\"]"
+ }
+ ]
+ },
+ {
+ "name": "E06_14_drawer",
+ "route": "#/e06-stab-rock",
+ "project": "stab",
+ "viewport": [
+ 1600,
+ 640
+ ],
+ "before": [
+ {
+ "wait": ".e06-band, .e06-empty"
+ },
+ {
+ "click": ".app-burger"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".app-drawer",
+ "clip_pad": 8,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-drawer__steps"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/A05_EduDetail/guide/E07/00_설명서.md b/A05_EduDetail/guide/E07/00_설명서.md
index ed45bdf69..254ee60d8 100644
--- a/A05_EduDetail/guide/E07/00_설명서.md
+++ b/A05_EduDetail/guide/E07/00_설명서.md
@@ -1,76 +1,39 @@
-# 광역 위험 설명서
+# 광역 위험
-## 이 화면에서 하는 일
+노선 띠(중심선 좌우 일정 폭) 안 자연 비탈의 얕은 산사태(표층 붕괴) 위험을 지도로 그리고 측점마다 위험 정도를 매기는 화면.
-노선 띠(중심선 좌우 일정 폭) 안 자연 비탈의 얕은 산사태(표층 붕괴) 위험을 지도로 그림.
-지형 격자 칸마다 **무한사면 안전율 Fs** 와 **SINMAP 안정 지수 SI** 를 셈 → SI 로 여섯 등급 색칠 → 측점마다 위험 정도(낮음 · 보통 · 높음)를 매김.
+## 여는 길
-- 지형 = 복사한 원지형(노선 공사 전 땅). 노선 위 · 아래 자연 비탈을 봄.
-- 깎기 · 쌓기 비탈 자체는 2D 해석(E03) · 암반 해석(E06) 몫.
+- 왼쪽 위 **[☰]** 서랍의 「진행단계」 목록에서 **광역 위험** 을 누름(맨 끝 단계).
+- 지형은 안정성평가 프로젝트에 복사해 둔 원지형(공사 전 땅)을 씀.
+
+
+
+## 화면 구역
+
+| 번호 | 구역 | 하는 일 |
+| --- | --- | --- |
+| 1 | [☰] 서랍 | 안정성평가 단계(지반 조건 · 2D 해석 · 3D 해석 · 보고서 · 암반 해석 · 광역 위험) 사이를 오감 |
+| 2 | 토층 물성 카드 | 흙의 무게 · 강도 · 뿌리 점착 · 두께를 정함 |
+| 3 | 시나리오 · 포화 카드 | 표준 · 최악 시나리오와 T/R 를 정함 |
+| 4 | 노선 띠 · 격자 · 측점 등급 카드 | 띠 폭 · 격자 크기 · 측점 등급 문턱을 정함 |
+| 5 | 왼쪽 아래 단추 줄 | [기본값] · [다시 해석] · [해석] |
+| 6 | 보기 바꿈 단추 | [등급 (SI)] · [안전율 Fs] — 지도 색 기준 바꿈 |
+| 7 | 지도 | 노선 띠 · 중심선 · 측점 · 칸마다 색 |
+| 8 | 범례 | 지도 색이 뜻하는 등급 · 안전율 |
+| 9 | 광역 결과(오른쪽) | 요약 · 등급별 면적 · 측점별 위험 표 |
+
+
## 작업 순서
-1. 좌측 **토층 물성** 카드에서 물성(E02 지반 조건)을 고름. 고르면 γt · γsat · c · φ 칸이 채워짐(기본 = 붕적토).
-2. 필요하면 뿌리 점착 · 토층 두께를 고침.
-3. **시나리오 · 포화** 카드에서 시나리오를 고름 — 표준(SINMAP 습윤지수) 또는 최악(완전 포화).
-4. **노선 띠 · 격자 · 측점 등급** 카드에서 띠 폭 · 격자 · 측점 문턱 둘을 확인함.
-5. [해석] 을 누름. 진행 막대가 끝나면 지도 · 결과가 나옴.
-6. 우측 **측점별 위험** 표에서 측점을 누르면 지도가 그 측점으로 옮겨 감.
+1. **토층 물성** 카드에서 E02 물성을 고르고 뿌리 점착 · 토층 두께를 확인함 → [토층 물성](E07/01_토층_물성).
+2. **시나리오 · 포화** 카드에서 표준 · 최악을 고름 → [시나리오와 포화](E07/02_시나리오와_포화).
+3. **노선 띠 · 격자 · 측점 등급** 카드에서 띠 폭 · 격자 · 문턱을 확인함 → [노선 띠 · 격자 · 측점 등급](E07/03_노선_띠_격자_등급).
+4. **[해석]** 을 누르고 진행 막대가 끝나기를 기다림 → [해석 실행](E07/04_해석_실행).
+5. 지도 색을 읽고 → [지도 읽기](E07/05_지도_읽기), 오른쪽 결과와 측점 표를 봄 → [광역 결과](E07/06_광역_결과).
+6. 보고서에 넣으려면 [보고서](E05/00_설명서)에서 [보고서 갱신] 을 누름.
-## 단추
+> 주의: 이 지도는 넓은 범위에서 「어디를 먼저 볼지」 고르는 용도. 측점 단면 안전율([2D 해석](E03/00_설명서))을 대신하지 않음.
-| 단추 | 자리 | 하는 일 |
-| --- | --- | --- |
-| [기본값] | 좌 아래 | 모든 칸을 기본값으로 되돌림(해석은 안 함) |
-| [다시 해석] | 좌 아래 | 같은 조건이라도 처음부터 다시 셈 |
-| [해석] | 좌 아래 | 조건이 지난 결과와 같으면 「같은 조건의 결과가 있습니다.」 뒤 그 결과를 보임 · 다르면 새로 셈 |
-| [등급 (SI)] [안전율 Fs] | 가운데 위 | 지도 색을 SI 등급 · 안전율로 바꿈 |
-
-- 칸 값은 이 탭 안에만 기억됨. 저장되는 것은 [해석] 한 결과(조건 포함) 하나뿐 — 새로 해석하면 지난 결과를 덮음.
-- 보기만 허용된 프로젝트는 [해석] 이 잠김.
-
-## 결과 읽는 법
-
-**가운데 · 지도** — 휠 = 확대 · 끌기 = 옮김 · 두 번 누름 = 전체 맞춤. 옅은 띠 = 노선 띠 · 굵은 선 = 중심선 · 점 = 측점 · 오른쪽 위 = 북 · 오른쪽 아래 = 축척.
-칸 위에 마우스를 올리면 등급 · SI · Fs · 경사 · 포화비 m · 가까운 측점이 보임.
-
-**범례 (등급 SI)** — 밑에 해석한 시나리오 이름이 붙음.
-
-| 색 | 등급 | SI |
-| --- | --- | --- |
-| 진초록 | 안정 | 1.5 이상 |
-| 연두 | 보통 안정 | 1.25 ~ 1.5 |
-| 연노랑 | 준안정 | 1.0 ~ 1.25 |
-| 노랑 | 위험 하한 | 0.5 ~ 1.0 |
-| 주황 | 위험 상한 | 0 초과 ~ 0.5 |
-| 빨강 | 불안정 | 0 |
-
-- 위험 = 위험 하한 · 위험 상한 · 불안정(SI < 1).
-
-**범례 (안전율 Fs)** — 빨강 1.0 미만 · 주황 1.0 ~ 1.2 · 노랑 1.2 ~ 1.5 · 연두 1.5 ~ 2.0 · 초록 2.0 이상. 가장 나쁜 쪽(c · φ 아래 · 가장 젖음) 값임.
-
-**우측 · 광역 결과**
-
-- 요약 — 시나리오 · 띠 안 최소 Fs · 위험 면적(SI < 1) · 측점 등급(낮음 · 보통 · 높음 수 / 전체 측점) · 지형 있는 띠 / 띠 면적 · 해석 걸린 시간과 때.
-- 등급별 면적 — 여섯 등급 면적(m²) · 비율(%).
-- 측점별 위험 — 측점 · 최소 Fs · SI<1 비율(%) · 측점 등급 · 위험 m². 높음 줄은 강조됨.
-
-**측점 등급** — 측점 앞뒤 ½ 간격 × 띠 폭(영향 구역) 안 칸 중 SI < 1 칸 비율.
-
-| 측점 등급 | 기본 문턱 |
-| --- | --- |
-| 낮음 | 5 % 미만 |
-| 보통 | 5 % 이상 20 % 미만 |
-| 높음 | 20 % 이상 |
-
-문턱 둘은 좌측 「측점 보통 문턱」 · 「측점 높음 문턱」 칸에서 바꿈.
-
-**보고서(E05) 광역요약 시트** — E05 [보고서 갱신] 때 이 화면 저장 결과로 채움: 해석 조건(띠 · 물성 · 시나리오 · 해석 때) · 등급별 면적 · 측점 등급 표 · 보통 · 높음 측점 줄(측점 · 누가거리 · 최소 Fs · 최소 SI · 등급과 비율 · 위험 면적 · 최대 경사). 결과가 없으면 「광역 해석 전」.
-
-## 알아 둘 것
-
-- **문헌 추정치 · 현장 시험 없음.** 물성 · T/R · 뿌리 점착 · 토층 두께 · 측점 문턱은 근거 후보 값임. 사용자 확정 전 값은 `30_사용자_확정_전_값` 참고.
-- 위험 지도는 넓은 범위에서 「어디를 먼저 볼지」 고르는 용도임. 측점 단면 안전율(E03)을 대신하지 않음.
-- 지형 격자 끝 밖 상류는 집수면적에 안 들어감 — 띠 가장자리는 실제보다 마르게(안전하게) 나올 수 있음.
-- 「엔진이 바뀌어 결과가 옛것입니다」가 뜨면 [다시 해석] 할 것.
-- 최악(완전 포화)은 모든 칸이 물에 찬 극한 강우 가정 — 대부분 측점이 높음으로 나옴. 비교용으로 쓸 것.
+> 참고: 물성 · T/R · 뿌리 점착 · 토층 두께 · 측점 문턱은 문헌 근거 후보 값이며 현장 시험 값이 아님. [사용자 확정 전 값](E07/30_사용자_확정_전_값) 참고.
diff --git a/A05_EduDetail/guide/E07/01_토층_물성.md b/A05_EduDetail/guide/E07/01_토층_물성.md
new file mode 100644
index 000000000..70d2ce083
--- /dev/null
+++ b/A05_EduDetail/guide/E07/01_토층_물성.md
@@ -0,0 +1,24 @@
+# 토층 물성
+
+기반암 위에 덮인 흙의 무게 · 강도 · 두께를 정하는 방법. 무한사면 계산이 쓰는 값.
+
+## 여는 길
+
+- 왼쪽 패널 첫 카드 **토층 물성**(처음부터 펼쳐져 있음).
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **물성(E02 지반 조건)** 에서 물성을 고름(기본 붕적토). 고르면 γt · γsat · c · φ 칸이 채워짐.  |
+| 2 | 필요하면 **γt** · **γsat**(흙 단위중량)을 직접 고침. |
+| 3 | **c 아래 · c 위** · **φ 아래 · φ 위** 는 점착력 · 내부 마찰각의 범위. 안전율은 아래 끝(보수 쪽)으로, 안정 지수 SI 는 범위로 셈. |
+| 4 | **뿌리 점착** 을 넣음(기본 1 kPa). 나지 · 절성토면은 0. |
+| 5 | **토층 두께** 를 넣음(기본 1.5 m). 지표에서 수직으로 잰 미끄러질 수 있는 흙 두께. |
+
+## 보이는 것
+
+- 칸을 바꾸면 이 탭 안에만 기억됨. 저장되는 것은 [해석] 한 결과 하나뿐.
+- 범위를 벗어난 값으로 [해석] 을 누르면 까닭이 알림으로 뜨고 해석하지 않음. 「위」 칸은 「아래」 칸보다 작으면 안 됨.
+
+> 참고: 칸별 범위는 [칸 뜻](E07/10_칸_뜻) 참고. 물성 목록은 [지반 조건](E02/00_설명서)에서 가져옴.
diff --git a/A05_EduDetail/guide/E07/02_시나리오와_포화.md b/A05_EduDetail/guide/E07/02_시나리오와_포화.md
new file mode 100644
index 000000000..f3bd1be90
--- /dev/null
+++ b/A05_EduDetail/guide/E07/02_시나리오와_포화.md
@@ -0,0 +1,23 @@
+# 시나리오와 포화
+
+비탈 흙이 얼마나 젖는다고 볼지 정하는 방법.
+
+## 여는 길
+
+- 왼쪽 패널 두 번째 카드 **시나리오 · 포화**.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **시나리오** 를 고름. 「표준 — SINMAP 습윤지수 (T/R 범위)」 는 비탈마다 물이 모이는 정도를 따짐. 「최악 — 완전 포화」 는 모든 칸이 물에 찬 극한 강우를 가정함.  |
+| 2 | 표준을 고른 때만 **T/R 아래 · T/R 위** 칸이 보임. 작을수록 물이 잘 고임(기본 2,000 ~ 3,000 m). |
+| 3 | 최악으로 바꾸면 T/R 칸이 숨음.  |
+
+## 보이는 것
+
+- 해석 결과의 범례 밑 · 요약 첫 줄에 해석한 시나리오 이름이 붙음.
+
+> 주의: 최악(완전 포화)은 대부분 측점이 「높음」 으로 나옴. 표준과 견주어 볼 때만 쓸 것.
+
+> 참고: T/R 기본값은 SINMAP 설명서 기본 보정 범위이며 사용자 확정 전 값.
diff --git a/A05_EduDetail/guide/E07/03_노선_띠_격자_등급.md b/A05_EduDetail/guide/E07/03_노선_띠_격자_등급.md
new file mode 100644
index 000000000..95a422017
--- /dev/null
+++ b/A05_EduDetail/guide/E07/03_노선_띠_격자_등급.md
@@ -0,0 +1,23 @@
+# 노선 띠 · 격자 · 측점 등급
+
+볼 범위(띠 폭)와 계산 칸 크기, 측점 위험 등급 문턱을 정하는 방법.
+
+## 여는 길
+
+- 왼쪽 패널 세 번째 카드 **노선 띠 · 격자 · 측점 등급**.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | **띠 폭 ± (m)** 을 넣음(기본 100). 중심선에서 좌우로 볼 거리이며 지도의 옅은 띠가 바로 바뀜.  |
+| 2 | **격자 (m)** 를 넣음(기본 2). 계산 칸 한 변이며 작을수록 촘촘하지만 오래 걸림. |
+| 3 | **측점 보통 문턱** 을 넣음(기본 5 %). 영향 구역 안 SI < 1 칸 비율이 이 값 이상이면 「보통」. |
+| 4 | **측점 높음 문턱** 을 넣음(기본 20 %). 이 값 이상이면 「높음」. 보통 문턱보다 작으면 안 됨. |
+
+## 보이는 것
+
+- 지도 띠가 폭에 맞게 바로 바뀜.
+- 측점 등급 = 측점 앞뒤 ½ 간격 × 띠 폭(영향 구역) 안 칸 중 SI < 1 칸 비율.
+
+> 참고: 문턱 5 % · 20 % 는 사용자 확정 전 값. [사용자 확정 전 값](E07/30_사용자_확정_전_값) 참고.
diff --git a/A05_EduDetail/guide/E07/04_해석_실행.md b/A05_EduDetail/guide/E07/04_해석_실행.md
new file mode 100644
index 000000000..bc701fc98
--- /dev/null
+++ b/A05_EduDetail/guide/E07/04_해석_실행.md
@@ -0,0 +1,24 @@
+# 해석 실행
+
+값을 정한 뒤 해석을 돌리거나 다시 돌리고, 기본값으로 되돌리는 방법.
+
+## 여는 길
+
+- 왼쪽 아래 단추 줄의 **[기본값]** · **[다시 해석]** · **[해석]**.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 세 카드 값을 확인함. 처음부터 다시 맞추려면 **[기본값]** 을 눌러 모든 칸을 기본값으로 되돌림(해석은 안 함).  |
+| 2 | **[해석]** 을 누름. 같은 조건의 결과가 이미 있으면 「같은 조건의 결과가 있습니다.」 뒤 그 결과를 보임. 다르면 새로 셈. |
+| 3 | 진행 막대와 「해석 중」 글이 뜨고, 끝나면 「광역 해석을 마쳤습니다.」 알림과 함께 지도 · 결과가 나옴.  |
+| 4 | 같은 조건이라도 처음부터 다시 셈하려면 **[다시 해석]**. |
+
+## 보이는 것
+
+- 저장되는 것은 [해석] 한 결과(조건 포함) 하나뿐. 새로 해석하면 지난 결과를 덮음.
+- 「엔진이 바뀌어 결과가 옛것입니다」 가 뜨면 [다시 해석] 을 누름.
+- 보기만 허용된 프로젝트는 [해석] · [다시 해석] 이 꺼짐.
+
+> 주의: 해석 중에 화면을 닫지 말 것. 격자를 작게 하면 오래 걸림.
diff --git a/A05_EduDetail/guide/E07/05_지도_읽기.md b/A05_EduDetail/guide/E07/05_지도_읽기.md
new file mode 100644
index 000000000..e7b9541d1
--- /dev/null
+++ b/A05_EduDetail/guide/E07/05_지도_읽기.md
@@ -0,0 +1,34 @@
+# 지도 읽기
+
+가운데 지도에서 칸마다 색으로 위험을 읽고, 색 기준을 바꾸는 방법.
+
+## 여는 길
+
+- 가운데 **지도**. [해석] 이 끝나면 색이 칠해지고, 그 전에는 「[해석] 을 누르면 위험 지도가 나옵니다.」 안내만 보임.
+- 지도 위 **[등급 (SI)]** · **[안전율 Fs]** 단추로 색 기준을 바꿈.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 지도를 봄. 옅은 띠 = 노선 띠 · 굵은 선 = 중심선 · 점 = 측점 · 오른쪽 위 = 북 · 오른쪽 아래 = 축척.  |
+| 2 | 마우스 휠로 확대 · 축소, 끌어서 옮기고, 두 번 누르면 전체 맞춤. |
+| 3 | 칸 위에 마우스를 올리면 등급 · SI · Fs · 경사 · 포화비 m · 가까운 측점이 보임.  |
+| 4 | **[안전율 Fs]** 를 누르면 같은 지도가 안전율 색으로 바뀜. **[등급 (SI)]** 로 돌아옴.  |
+| 5 | 아래 범례로 색 뜻을 확인함.  |
+
+## 보이는 것
+
+| 색 | 등급 | SI |
+| --- | --- | --- |
+| 진초록 | 안정 | 1.5 이상 |
+| 연두 | 보통 안정 | 1.25 ~ 1.5 |
+| 연노랑 | 준안정 | 1.0 ~ 1.25 |
+| 노랑 | 위험 하한 | 0.5 ~ 1.0 |
+| 주황 | 위험 상한 | 0 초과 ~ 0.5 |
+| 빨강 | 불안정 | 0 |
+
+- 위험 = 위험 하한 · 위험 상한 · 불안정(SI < 1).
+- 안전율 범례 — 빨강 1.0 미만 · 주황 1.0 ~ 1.2 · 노랑 1.2 ~ 1.5 · 연두 1.5 ~ 2.0 · 초록 2.0 이상. 가장 나쁜 쪽(c · φ 아래 · 가장 젖음) 값.
+
+> 참고: 지형 격자 끝 밖 상류는 집수면적에 안 들어가 띠 가장자리는 실제보다 마르게(안전하게) 나올 수 있음.
diff --git a/A05_EduDetail/guide/E07/06_광역_결과.md b/A05_EduDetail/guide/E07/06_광역_결과.md
new file mode 100644
index 000000000..c6850c458
--- /dev/null
+++ b/A05_EduDetail/guide/E07/06_광역_결과.md
@@ -0,0 +1,29 @@
+# 광역 결과
+
+해석 요약 · 등급별 면적 · 측점별 위험을 오른쪽 패널에서 읽는 방법.
+
+## 여는 길
+
+- 오른쪽 **광역 결과** 패널. 해석 전에는 「아직 해석 결과가 없습니다.」 가 보임.
+
+## 단계
+
+| 단계 | 할 일 |
+| --- | --- |
+| 1 | 맨 위 요약을 읽음 — 시나리오 · 띠 안 최소 Fs · 위험 면적(SI < 1) · 측점 등급 수(낮음 · 보통 · 높음 / 전체) · 지형 있는 띠 / 띠 면적 · 해석 걸린 시간과 때.  |
+| 2 | **등급별 면적** 표에서 여섯 등급의 면적(m²)과 비율(%)을 봄.  |
+| 3 | **측점별 위험** 표에서 측점 · 최소 Fs · SI < 1 비율(%) · 측점 등급 · 위험 m² 를 봄. 「높음」 줄은 강조됨.  |
+| 4 | 표에서 측점 줄을 누르면 지도가 그 측점으로 옮겨 감.  |
+
+## 보이는 것
+
+| 측점 등급 | 기본 문턱 |
+| --- | --- |
+| 낮음 | 5 % 미만 |
+| 보통 | 5 % 이상 20 % 미만 |
+| 높음 | 20 % 이상 |
+
+- 영향 구역에 지형이 없는 측점은 값이 「-」.
+- 결과 맨 아래에 계산 방법을 요약한 안내 글이 붙음. 엔진이 바뀐 뒤라면 「엔진이 바뀌어 결과가 옛것입니다 — [다시 해석].」 경고도 보임.
+
+> 참고: 보고서 광역요약 시트는 [보고서 갱신] 때 이 화면의 저장 결과로 채워짐. 결과가 없으면 「광역 해석 전」 으로 보임.
diff --git a/A05_EduDetail/guide/E07/10_칸_뜻.md b/A05_EduDetail/guide/E07/10_칸_뜻.md
index 4f1a8a36a..727b256e5 100644
--- a/A05_EduDetail/guide/E07/10_칸_뜻.md
+++ b/A05_EduDetail/guide/E07/10_칸_뜻.md
@@ -4,6 +4,8 @@
## 토층 물성 (좌 · 첫 카드)
+
+
토층 = 기반암 위에 덮인 흙. 무한사면 식이 쓰는 값.
| 칸 | 뜻 | 범위 | 기본 |
@@ -22,6 +24,8 @@
## 시나리오 · 포화 (좌 · 둘째 카드)
+
+
| 칸 | 뜻 | 범위 | 기본 |
| --- | --- | --- | --- |
| 시나리오 | 표준 — SINMAP 습윤지수 (T/R 범위) · 최악 — 완전 포화 (m = 1 · 강우 극한) | - | 표준 |
@@ -33,6 +37,8 @@
## 노선 띠 · 격자 · 측점 등급 (좌 · 셋째 카드)
+
+
| 칸 | 뜻 | 범위 | 기본 |
| --- | --- | --- | --- |
| 띠 폭 ± (m) | 중심선에서 좌우로 볼 거리 · 지도 옅은 띠가 바로 바뀜 | 10 ~ 500 | 100 |
@@ -42,6 +48,8 @@
## 결과 칸 (우측)
+
+
| 칸 | 뜻 |
| --- | --- |
| 띠 안 최소 Fs | 띠 안 모든 칸 중 가장 낮은 안전율 |
diff --git a/A05_EduDetail/guide/E07/E07_00_overview.webp b/A05_EduDetail/guide/E07/E07_00_overview.webp
new file mode 100644
index 000000000..95d41b917
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_00_overview.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_01_soil_card.webp b/A05_EduDetail/guide/E07/E07_01_soil_card.webp
new file mode 100644
index 000000000..5b97a9f24
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_01_soil_card.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_02_rain_card.webp b/A05_EduDetail/guide/E07/E07_02_rain_card.webp
new file mode 100644
index 000000000..c637a52ef
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_02_rain_card.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_03_band_card.webp b/A05_EduDetail/guide/E07/E07_03_band_card.webp
new file mode 100644
index 000000000..2b15d1528
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_03_band_card.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_04_actions.webp b/A05_EduDetail/guide/E07/E07_04_actions.webp
new file mode 100644
index 000000000..1c5618cf3
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_04_actions.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_05_progress.webp b/A05_EduDetail/guide/E07/E07_05_progress.webp
new file mode 100644
index 000000000..0867a65bc
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_05_progress.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_06_map_class.webp b/A05_EduDetail/guide/E07/E07_06_map_class.webp
new file mode 100644
index 000000000..ef58b2059
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_06_map_class.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_07_map_fs.webp b/A05_EduDetail/guide/E07/E07_07_map_fs.webp
new file mode 100644
index 000000000..07f0dcb94
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_07_map_fs.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_08_map_tip.webp b/A05_EduDetail/guide/E07/E07_08_map_tip.webp
new file mode 100644
index 000000000..4e721ac1b
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_08_map_tip.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_09_legend_class.webp b/A05_EduDetail/guide/E07/E07_09_legend_class.webp
new file mode 100644
index 000000000..9bc76b6a9
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_09_legend_class.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_10_result_summary.webp b/A05_EduDetail/guide/E07/E07_10_result_summary.webp
new file mode 100644
index 000000000..ce26c990b
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_10_result_summary.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_11_result_areas.webp b/A05_EduDetail/guide/E07/E07_11_result_areas.webp
new file mode 100644
index 000000000..a94e87b6e
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_11_result_areas.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_12_result_stations.webp b/A05_EduDetail/guide/E07/E07_12_result_stations.webp
new file mode 100644
index 000000000..4db5195a3
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_12_result_stations.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_13_station_pick.webp b/A05_EduDetail/guide/E07/E07_13_station_pick.webp
new file mode 100644
index 000000000..b110523b1
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_13_station_pick.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_14_scenario_saturated.webp b/A05_EduDetail/guide/E07/E07_14_scenario_saturated.webp
new file mode 100644
index 000000000..ebf5f95e7
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_14_scenario_saturated.webp differ
diff --git a/A05_EduDetail/guide/E07/E07_15_drawer.webp b/A05_EduDetail/guide/E07/E07_15_drawer.webp
new file mode 100644
index 000000000..39d524233
Binary files /dev/null and b/A05_EduDetail/guide/E07/E07_15_drawer.webp differ
diff --git a/A05_EduDetail/guide/E07/_scenes.json b/A05_EduDetail/guide/E07/_scenes.json
new file mode 100644
index 000000000..dbddd98fe
--- /dev/null
+++ b/A05_EduDetail/guide/E07/_scenes.json
@@ -0,0 +1,445 @@
+[
+ {
+ "name": "E07_00_overview",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": null,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-burger"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-panel > section:nth-of-type(1)",
+ "pos": "tr"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-panel > section:nth-of-type(2)"
+ },
+ {
+ "n": 4,
+ "sel": ".e07-panel > section:nth-of-type(3)"
+ },
+ {
+ "n": 5,
+ "sel": ".e07-panel > .ui-sidebar-actions"
+ },
+ {
+ "n": 6,
+ "sel": ".e07-toggle"
+ },
+ {
+ "n": 7,
+ "sel": ".e07-map",
+ "pos": "br"
+ },
+ {
+ "n": 8,
+ "sel": ".e07-legend-slot"
+ },
+ {
+ "n": 9,
+ "sel": ".ui-side-panels__panel[data-panel=\"result\"]"
+ }
+ ],
+ "viewport": [
+ 1600,
+ 1260
+ ]
+ },
+ {
+ "name": "E07_01_soil_card",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-panel > section:nth-of-type(1)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-panel > section:nth-of-type(1) select"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-panel > section:nth-of-type(1) input[data-key=\"c_root\"]"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-panel > section:nth-of-type(1) input[data-key=\"soil_depth_m\"]"
+ }
+ ]
+ },
+ {
+ "name": "E07_02_rain_card",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-panel > section:nth-of-type(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-panel > section:nth-of-type(2) select"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-panel > section:nth-of-type(2) input[data-key=\"tr_lo\"]"
+ }
+ ]
+ },
+ {
+ "name": "E07_03_band_card",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-panel > section:nth-of-type(3)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-panel > section:nth-of-type(3) input[data-key=\"band_m\"]"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-panel > section:nth-of-type(3) input[data-key=\"cell_m\"]"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-panel > section:nth-of-type(3) input[data-key=\"level_lo_pct\"]"
+ },
+ {
+ "n": 4,
+ "sel": ".e07-panel > section:nth-of-type(3) input[data-key=\"level_hi_pct\"]"
+ }
+ ]
+ },
+ {
+ "name": "E07_04_actions",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-panel > .ui-sidebar-actions",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-panel > .ui-sidebar-actions .ui-btn:nth-child(1)"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-panel > .ui-sidebar-actions .ui-btn:nth-child(2)"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-panel > .ui-sidebar-actions .ui-btn:nth-child(3)"
+ }
+ ]
+ },
+ {
+ "name": "E07_05_progress",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "eval": "(() => { const b = document.querySelector('.e07-progress-box'); b.hidden = false; b.querySelector('progress').value = 60; b.querySelector('.e07-progress__text').textContent = '해석 중 60%'; })()"
+ },
+ {
+ "wait_ms": 300
+ }
+ ],
+ "clip": ".e07-progress-box",
+ "callouts": []
+ },
+ {
+ "name": "E07_06_map_class",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-center",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-toggle .ui-btn[data-value=\"cls\"]"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-map__canvas"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-legend"
+ }
+ ]
+ },
+ {
+ "name": "E07_07_map_fs",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "click": ".e07-toggle .ui-btn[data-value=\"fs\"]"
+ },
+ {
+ "wait_ms": 600
+ }
+ ],
+ "clip": ".e07-center",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-toggle .ui-btn[data-value=\"fs\"]"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-legend"
+ }
+ ]
+ },
+ {
+ "name": "E07_08_map_tip",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "hover": ".e07-map__canvas"
+ },
+ {
+ "wait": ".e07-map__tip:not([hidden])"
+ }
+ ],
+ "clip": ".e07-map",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-map__tip"
+ }
+ ]
+ },
+ {
+ "name": "E07_09_legend_class",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-legend-slot",
+ "callouts": []
+ },
+ {
+ "name": "E07_10_result_summary",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-result .e07-summary",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-summary dd[data-field=\"E07_Sum_FsMin\"]"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-summary dd[data-field=\"E07_Sum_Risk\"]"
+ },
+ {
+ "n": 3,
+ "sel": ".e07-summary dd[data-field=\"E07_Sum_Levels\"]"
+ }
+ ]
+ },
+ {
+ "name": "E07_11_result_areas",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-areas",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-areas tr:nth-child(2)"
+ }
+ ]
+ },
+ {
+ "name": "E07_12_result_stations",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ }
+ ],
+ "clip": ".e07-stations",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-stations tr:nth-child(1)"
+ }
+ ]
+ },
+ {
+ "name": "E07_13_station_pick",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "click": ".e07-stations tr:nth-child(3)"
+ },
+ {
+ "wait_ms": 700
+ }
+ ],
+ "clip": ".e07-row",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-stations tr.is-on"
+ },
+ {
+ "n": 2,
+ "sel": ".e07-map__canvas"
+ }
+ ]
+ },
+ {
+ "name": "E07_14_scenario_saturated",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "wait_ms": 1500
+ },
+ {
+ "select": ".e07-panel > section:nth-of-type(2) select",
+ "value": "saturated"
+ },
+ {
+ "wait_ms": 400
+ }
+ ],
+ "clip": ".e07-panel > section:nth-of-type(2)",
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".e07-panel > section:nth-of-type(2) select"
+ }
+ ]
+ },
+ {
+ "name": "E07_15_drawer",
+ "route": "#/e07-stab-area",
+ "project": "stab",
+ "viewport": [
+ 1600,
+ 640
+ ],
+ "before": [
+ {
+ "wait": ".e07-map__canvas"
+ },
+ {
+ "click": ".app-burger"
+ },
+ {
+ "wait_ms": 900
+ }
+ ],
+ "clip": ".app-drawer",
+ "clip_pad": 8,
+ "callouts": [
+ {
+ "n": 1,
+ "sel": ".app-drawer__steps"
+ }
+ ]
+ }
+]
\ No newline at end of file