feat(landing): 소개 영상 버튼과 재생 모달 추가

- 사용 가이드 옆 '▶ 소개 영상 1분' 버튼, 네이티브 dialog에서 재생
- 자체 호스팅 mp4(56초·1920×1080·H.264, 무음), 열 때만 로드(preload none), 무음 자동재생
- Esc·배경·닫기로 종료 시 일시정지·처음으로·포커스 복귀, 모션 감소 시 자동재생 안 함
- 자막 원본(.srt)은 보관만, 화면 미연결
- verify-intro-video.cjs: Chrome 17개 검사

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-09 18:01:12 +09:00
1 parent fc520ec03d
commit ef596650cc
6 files changed
+285 -1

No files matched your search

+4 -1
View File
@@ -2,6 +2,7 @@ import '../pierzainer_ground/ground-link';
import { loadSampleIntoApp } from './sample-loader';
import { createSampleExplorer, sampleExplorerMarkup, type Sample } from './sample-explorer';
import { createLandingGuide } from './landing-guide';
import { createIntroVideo, introVideoTriggerMarkup } from './landing-video';
import { createHeroMotion, heroMotionMarkup } from './landing-motion';
import { heroCapture } from './assets/okseong-hero-capture';
import './landing-white.css';
@@ -44,7 +45,7 @@ const landingPanelMarkup = `
<p class="landing-subtitle">
설계정보 입력부터 3D 모델링, 구조검토, 철근배근, 도면작성 및 수량산출까지 하나의 플랫폼에서
</p>
<button class="landing-guide-trigger" type="button" aria-haspopup="dialog"><span aria-hidden="true">?</span>사용 가이드 <span class="landing-guide-trigger-arrow" aria-hidden="true">↗</span></button>
<button class="landing-guide-trigger" type="button" aria-haspopup="dialog"><span aria-hidden="true">?</span>사용 가이드 <span class="landing-guide-trigger-arrow" aria-hidden="true">↗</span></button>${introVideoTriggerMarkup}
</div>
</div>
<div class="landing-hero-visual" aria-hidden="true">
@@ -123,6 +124,7 @@ const landingPanelMarkup = `
landingOverlay.innerHTML = landingPanelMarkup;
document.body.prepend(landingOverlay);
const landingGuide = createLandingGuide(landingOverlay);
const introVideo = createIntroVideo(landingOverlay, promoImageUrl);
createHeroMotion(landingOverlay);
const selectPanel = (panelId: string): void => {
@@ -143,6 +145,7 @@ const closePanels = (): void => {
const showApp = (): void => {
landingOverlay.querySelector<HTMLDialogElement>('.sample-library-popup')?.close();
landingGuide.close(false);
introVideo.close(false);
if (appRoot) {
appRoot.hidden = false;
appRoot.setAttribute('aria-hidden', 'false');