Update landing page and ground link features

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
CopilotandCopilot committed 2026-11-05 11:32:50 +09:00
1 parent a5cc458252
commit 7efe9097ce
28 files changed
+928 -120

No files matched your search

+1 -1
View File
@@ -50,7 +50,7 @@ export interface ColumnInput {
export function columnInputFor(model: PierModel, base: ColumnInput = COLUMN_P1): ColumnInput {
const col = model.columns[0];
const seg = model.segments.find((g) => col.s >= g.s0 - 1e-9 && col.s <= g.s1 + 1e-9) ?? model.segments[0];
const Hc = Math.round((model.levelBottom - model.footings[0].top) * 1000 * 10) / 10;
const Hc = Math.round((model.levelBottom - (model.footings[0]?.top ?? col.bottom)) * 1000 * 10) / 10;
const hcop = Math.round((seg.top - model.levelBottom) * 1000 * 10) / 10;
// C3 (상면 3단) = the lowest coping top −127 (C1 cover) −2·s_lay (상면 주철근 단 간격 input); P1 was 43.170 at 57.2.
// P1 top = C3 − 100 (계산 2026-10-23), so e_P1 = step top − (C3 − 0.1) = 485 on P1.
+7 -1
View File
@@ -557,6 +557,7 @@ function renderHeader(): void {
if (state.project.bridge) parts.push(state.project.bridge);
parts.push(`교각 ${state.piers.length}기`);
$('project-line').textContent = parts.join(' · ');
$('project-line').title = parts.join(' · ');
$('step1-status').textContent = pier?.model ? '생성됨' : '미생성';
$('step-drawing-status').textContent = pier?.model ? '가능' : '형상 필요';
renderSaveStatus();
@@ -2599,7 +2600,12 @@ function renderGroundModel(box: HTMLDivElement, pier: Pier): void {
importInput.value = '';
}
});
const importLabel = el('label', '지반 모델 파일 불러오기 (json)');
const groundLaunch = el('button', '지반 모델 파일 불러오기 · 지반 생성 프로그램');
groundLaunch.type = 'button';groundLaunch.className = 'btn';
groundLaunch.addEventListener('click', () => window.dispatchEvent(new Event('pierzainer:open-ground')));
wrap.appendChild(groundLaunch);
const linkStatus = el('p', '현재 Excel을 사용하여 종평면도에서 지반을 생성합니다.', 'muted small');linkStatus.id='ground-link-status';wrap.appendChild(linkStatus);
const importLabel = el('label', '기존 지반 JSON 직접 불러오기');
importLabel.appendChild(importInput);
wrap.appendChild(importLabel);
+15
View File
@@ -606,6 +606,21 @@ body { background: #eef1f4; font-family: 'Noto Sans KR', system-ui, sans-serif;
.top .brand strong { font-size: 18px; letter-spacing: 0.01em; }
.top .brand > span:not(.proj) { font-size: 12px; color: #b8c2ce; }
.proj { padding-left: 14px; border-left: 1px solid #33404f; color: #ffffff; font-size: 13px; font-weight: 700; }
.top { flex-wrap: nowrap; }
.top .brand { flex: 1 1 0; min-width: 0; align-items: center; }
.top .brand > strong, .top .brand > span:not(.proj) { flex-shrink: 0; white-space: nowrap; }
.top .proj { min-width: 0; overflow: hidden; overflow-wrap: anywhere; line-height: 1.5; max-height: 3em; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; }
.top .steps, .top .actions { flex: 0 0 auto; flex-wrap: nowrap; align-items: center; }
.top .steps .step, .top .actions button, .top .savest { white-space: nowrap; }
@media (max-width: 1600px) {
.top { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
.top .actions { grid-column: 1 / -1; justify-content: flex-end; }
}
@media (max-width: 900px) {
.top { grid-template-columns: minmax(0, 1fr); }
.top .steps, .top .actions { max-width: 100%; overflow-x: auto; }
.top .actions { justify-content: flex-start; }
}
.steps .step { color: #dce3ea; min-height: 44px; padding: 4px 14px; border-radius: 6px; background: transparent; border: 0; }
.steps .step.current { background: #ffffff; color: #18212b; }
.steps .step em { font-style: normal; color: #b8c2ce; font-size: 12px; }