feat: 프로젝트 공통 지반모델·교대 지반 통합·재료표/수량 진입·옥성교 랜딩 히어로 (11-06~11-09 작업분)
공용 파일(main.ts·index.html·style.css)에서 서로 얽혀 있어 한 커밋으로 묶음. - 지반: ① 형상 프로젝트 지반모델 관리창(생성·JSON 불러오기·교각별 비교·선택 적용), 프로젝트 JSON 내장 groundModel 추출, 교대 8행 통합 적용·공통지형 중복격자 제외 - 재료표·수량: 상단 ⑤ 메뉴·배근 바로가기, 결과 교각/탭 기억, 수량 워크북·정합 보정 - 랜딩: 옥성교 6교각 히어로 이미지·투영 강조점·좌→우 광선·지형 라운드/도로 연결 - 검증 스크립트(verify-project-ground/ground-abutments/okseong-user-files/quantity-*/landing-hero 등) 정본: DOC/04_실행/실행_*_2026-11-09_v0.1.00.md Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b2bebe47eb
commit
fc520ec03d
47 files changed
+2848
-149
No files matched your search
+2
-10
@@ -308,10 +308,7 @@ html:has(.landing-overlay:not([hidden])), body:has(.landing-overlay:not([hidden]
|
||||
.landing-visual { animation: landing-premium-float 10s ease-in-out infinite; }
|
||||
.landing-artwork { position: absolute; left: 0; top: 40%; width: 100%; aspect-ratio: 2172 / 724; transform: translateY(-50%); }
|
||||
.landing-artwork .landing-promo-image { display: block; position: static; width: 100%; height: auto; transform: none; filter: brightness(1.12) contrast(1.04) saturate(1.04); }
|
||||
.landing-model-motion, .landing-scan-mask { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
|
||||
.landing-scan-mask { mask-size: 100% 100%; mask-repeat: no-repeat; -webkit-mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; overflow: hidden; }
|
||||
.landing-terrain-grid { position: absolute; inset: 0; opacity: .11; background-image: linear-gradient(#89eaff80 1px,transparent 1px),linear-gradient(90deg,#89eaff80 1px,transparent 1px); background-size: 30px 24px; transform: perspective(650px) rotateX(48deg) scale(1.6); animation: landing-grid-breathe 9.7s ease-in-out infinite; }
|
||||
.landing-scan-beam { position: absolute; top: -10%; left: -18%; width: 18%; height: 120%; background: linear-gradient(90deg,transparent,#88efff1a 35%,#c1f8ff66 49%,#78dfff17 65%,transparent); transform: translateX(0); animation: landing-scan-pass 14s ease-in-out 1.8s infinite; }
|
||||
.landing-model-motion { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
|
||||
.landing-energy-track { fill: none; stroke: #70dfff; stroke-width: 1.4; opacity: .18; }
|
||||
.landing-energy-flow, .landing-energy-haze { fill: none; stroke: url(#landing-flow-fade); stroke-width: 2.5; stroke-linecap: round; stroke-dasharray: 90 910; animation: landing-energy-run 8.3s linear 1.5s infinite; opacity: .8; }
|
||||
.landing-energy-haze { stroke-width: 8; opacity: .48; }
|
||||
@@ -319,7 +316,6 @@ html:has(.landing-overlay:not([hidden])), body:has(.landing-overlay:not([hidden]
|
||||
.landing-pier-beacon line { stroke: currentColor; stroke-width: 1; opacity: .42; stroke-dasharray: 3 4; }
|
||||
.landing-pier-point { fill: #d3fdff; filter: drop-shadow(0 0 5px #62ddff); animation: landing-beacon-point 7.9s ease-in-out var(--beacon-delay) infinite; }
|
||||
.landing-pier-pulse { fill: none; stroke: #8decff; stroke-width: 1.2; opacity: 0; transform-box: fill-box; transform-origin: center; animation: landing-beacon-pulse 7.9s ease-out var(--beacon-delay) infinite; }
|
||||
.landing-pier-spark { fill: #c1faff; opacity: 0; animation: landing-beacon-spark 7.9s ease-out var(--beacon-delay) infinite; }
|
||||
.landing-hud-bracket { fill: none; stroke: #8dcfff; stroke-width: 1; opacity: .28; }
|
||||
.landing-showcase-label { position: absolute; left: 50%; top: 56%; transform: translateX(-50%); color: #84c4dd; font-size: 9px; letter-spacing: .23em; white-space: nowrap; }
|
||||
.landing-showcase-label > span { display: block; margin-top: 8px; font-size: 8px; letter-spacing: .06em; color: #729db8; text-align: center; }
|
||||
@@ -387,19 +383,15 @@ html:has(.landing-overlay:not([hidden])), body:has(.landing-overlay:not([hidden]
|
||||
.landing-paused .landing-light-stage *, .landing-inactive .landing-light-stage *,
|
||||
.landing-paused .landing-visual, .landing-inactive .landing-visual,
|
||||
.landing-paused .landing-model-motion *, .landing-inactive .landing-model-motion *,
|
||||
.landing-paused .landing-scan-mask *, .landing-inactive .landing-scan-mask *,
|
||||
.landing-paused .landing-hero::before, .landing-inactive .landing-hero::before { animation-play-state: paused !important; }
|
||||
|
||||
@keyframes landing-atmosphere { from { transform: translate3d(-1%,-1%,0) scale(1); opacity: .6; } to { transform: translate3d(2%,1%,0) scale(1.06); opacity: 1; } }
|
||||
@keyframes landing-glow-breathe { from { opacity: .65; scale: .96; } to { opacity: 1; scale: 1.08; } }
|
||||
@keyframes landing-title-shimmer { 0%,55% { background-position: 110% 50%; } 85%,100% { background-position: -90% 50%; } }
|
||||
@keyframes landing-premium-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-5px); } }
|
||||
@keyframes landing-scan-pass { 0%,12% { transform: translateX(0); opacity: 0; } 20% { opacity: .7; } 75% { opacity: .7; } 88%,100% { transform: translateX(740%); opacity: 0; } }
|
||||
@keyframes landing-grid-breathe { 0%,100% { opacity: .06; } 45% { opacity: .17; } }
|
||||
@keyframes landing-energy-run { 0% { stroke-dashoffset: 1000; opacity: 0; } 12% { opacity: .8; } 88% { opacity: .8; } 100% { stroke-dashoffset: -1000; opacity: 0; } }
|
||||
@keyframes landing-beacon-point { 0%,55%,100% { opacity: .35; } 12%,27% { opacity: 1; } }
|
||||
@keyframes landing-beacon-pulse { 0% { opacity: 0; transform: scale(.4); } 12% { opacity: .85; } 42%,100% { opacity: 0; transform: scale(2.3); } }
|
||||
@keyframes landing-beacon-spark { 0%,8% { opacity: 0; transform: translateY(0); } 18% { opacity: .8; } 40%,100% { opacity: 0; transform: translateY(-18px); } }
|
||||
@keyframes landing-guide-enter { from { opacity: 0; translate: 0 8px; } to { opacity: 1; translate: 0 0; } }
|
||||
@keyframes landing-guide-icon-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
|
||||
@keyframes landing-guide-dot { 0%,100% { opacity: .2; } 50% { opacity: 1; } }
|
||||
@@ -441,7 +433,7 @@ html:has(.landing-overlay:not([hidden])), body:has(.landing-overlay:not([hidden]
|
||||
.landing-artwork *, .landing-guide *, .landing-guide[open] { animation: none !important; transition: none !important; }
|
||||
.landing-title { background: none; color: #f2fbff; -webkit-text-fill-color: #f2fbff; }
|
||||
.landing-title > span { -webkit-text-fill-color: #7ff1ff; }
|
||||
.landing-scan-beam, .landing-pier-pulse, .landing-pier-spark, .landing-energy-haze { opacity: 0; }
|
||||
.landing-pier-pulse, .landing-energy-haze { opacity: 0; }
|
||||
.landing-energy-flow { stroke-dasharray: none; opacity: .35; }
|
||||
.landing-light-stage { transform: none; }
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user