diff --git a/css/services.css b/css/services.css index d6d6fd8..04d5f4f 100644 --- a/css/services.css +++ b/css/services.css @@ -247,11 +247,1083 @@ color: var(--text-secondary); } +/* ======================================== + 새로운 서비스 패키지 스타일 + ======================================== */ + +/* 서비스 패키지 */ +.service-package { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-2xl); + margin-bottom: var(--spacing-2xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + transition: var(--transition); + position: relative; + overflow: hidden; +} + +.service-package.featured { + position: relative; + overflow: hidden; +} + + +/* 패키지 헤더 */ +.package-header { + display: flex; + align-items: center; + gap: var(--spacing-md); + margin-bottom: var(--spacing-xl); + flex-wrap: wrap; +} + +.package-icon { + font-size: var(--font-3xl); +} + +.package-header h3 { + font-size: var(--font-2xl); + color: var(--text-primary); + margin: 0; + flex: 1; +} + +.package-badge { + background: var(--primary-color); + color: var(--text-white); + padding: var(--spacing-xs) var(--spacing-md); + border-radius: var(--border-radius-full); + font-size: var(--font-sm); + font-weight: 600; +} + +.package-badge.featured { + background: var(--gradient-main); +} + +/* 가격 그리드 */ +.pricing-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); + gap: var(--spacing-xl); + margin-bottom: var(--spacing-xl); +} + +.pricing-card { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + transition: var(--transition); + position: relative; + overflow: hidden; +} + +.pricing-card:hover { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(255, 136, 0, 0.15); +} + +/* 가격 헤더 */ +.pricing-header { + text-align: center; + margin-bottom: var(--spacing-lg); + padding-bottom: var(--spacing-lg); + border-bottom: 1px solid #e2e8f0; +} + +.pricing-header.unified { + text-align: left; + border-bottom: none; + padding-bottom: 0; + margin-bottom: var(--spacing-md); +} + +.pricing-header h4 { + font-size: var(--font-xl); + color: var(--text-primary); + margin-bottom: var(--spacing-md); +} + +.price { + display: flex; + align-items: baseline; + justify-content: center; + gap: var(--spacing-xs); + margin-bottom: var(--spacing-sm); +} + +.price-amount { + font-size: var(--font-3xl); + font-weight: 700; + color: var(--primary-color); +} + +.price-unit { + font-size: var(--font-lg); + color: var(--text-secondary); +} + +.price-note { + font-size: var(--font-sm); + color: var(--text-secondary); + margin: 0; +} + +/* 통합 가격 구조 */ +.pricing-structure { + display: flex; + gap: var(--spacing-xl); + margin-bottom: var(--spacing-lg); + flex-wrap: wrap; +} + +.price-item { + display: flex; + align-items: center; + gap: var(--spacing-md); +} + +.price-label { + font-size: var(--font-base); + color: var(--text-secondary); + font-weight: 600; + min-width: 30px; +} + +/* 가격 특징 */ +.pricing-features h5 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-md); +} + +/* 서비스 개요 */ +.service-overview { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + margin-bottom: var(--spacing-xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); +} + +/* 통합 서비스 특징 */ +.service-features.unified { + margin-top: var(--spacing-lg); +} + +.service-features.unified h5 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-md); +} + +.pricing-features ul { + list-style: none; + padding: 0; + margin-bottom: var(--spacing-lg); +} + +.pricing-features li { + padding: var(--spacing-xs) 0; + position: relative; + padding-left: var(--spacing-lg); + color: var(--text-secondary); +} + +.pricing-features li::before { + content: '✓'; + position: absolute; + left: 0; + color: var(--primary-color); + font-weight: bold; +} + +.minimum-time { + background: #fef3cd; + color: #92400e; + padding: var(--spacing-sm) var(--spacing-md); + border-radius: var(--border-radius-sm); + font-size: var(--font-sm); + font-weight: 600; + text-align: center; + margin: 0; +} + +/* 서비스 노트 */ +.service-note { + background: #f0f9ff; + border: 1px solid #bae6fd; + border-radius: var(--border-radius-sm); + padding: var(--spacing-lg); + margin-top: var(--spacing-xl); +} + +.service-note p { + margin: 0; + color: var(--text-secondary); +} + +/* 스트리밍 패키지 */ +.streaming-package { + display: grid; + gap: var(--spacing-xl); +} + +.package-overview { + display: flex; + align-items: center; + gap: var(--spacing-2xl); + padding: var(--spacing-xl); + background: var(--gradient-main); + border-radius: var(--border-radius); + color: var(--text-white); +} + +.package-price .price-amount { + font-size: var(--font-4xl); + font-weight: 700; + color: var(--text-white); +} + +.package-price .price-unit { + font-size: var(--font-lg); + color: var(--text-white); + opacity: 1; +} + +.package-duration h4 { + font-size: var(--font-2xl); + margin-bottom: var(--spacing-sm); +} + +.package-duration p { + font-size: var(--font-lg); + opacity: 0.9; + margin: 0; +} + +/* 패키지 특징 */ +.package-features { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: var(--spacing-xl); +} + +.feature-column h5 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-md); +} + +.feature-column ul { + list-style: none; + padding: 0; +} + +.feature-column li { + padding: var(--spacing-sm) 0; + position: relative; + padding-left: var(--spacing-lg); + color: var(--text-secondary); +} + +.feature-column li::before { + content: '•'; + position: absolute; + left: 0; + color: var(--primary-color); + font-weight: bold; + font-size: var(--font-lg); +} + +.additional-pricing { + text-align: center; + padding: var(--spacing-lg); + background: #fef3cd; + border-radius: var(--border-radius-sm); +} + +.additional-pricing p { + margin: 0; + font-size: var(--font-lg); + color: var(--text-primary); +} + +/* 결합상품 */ +.combo-services { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); + gap: var(--spacing-xl); +} + +.combo-card { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + transition: var(--transition); +} + +.combo-card h4 { + font-size: var(--font-xl); + color: var(--text-primary); + margin-bottom: var(--spacing-lg); +} + +.combo-pricing { + text-align: center; + margin-bottom: var(--spacing-lg); + padding: var(--spacing-md); + background: var(--bg-white); + border-radius: var(--border-radius-sm); +} + +.combo-pricing .price { + font-size: var(--font-lg); + font-weight: 600; + color: var(--primary-color); +} + +.combo-features h5 { + font-size: var(--font-base); + color: var(--text-primary); + margin: var(--spacing-lg) 0 var(--spacing-sm) 0; +} + +.combo-features ul { + list-style: none; + padding: 0; + margin-bottom: var(--spacing-lg); +} + +.combo-features li { + padding: var(--spacing-xs) 0; + color: var(--text-secondary); + position: relative; + padding-left: var(--spacing-md); +} + +.combo-features li::before { + content: '→'; + position: absolute; + left: 0; + color: var(--primary-color); +} + +/* 추가 옵션 */ +.options-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--spacing-xl); + margin-bottom: var(--spacing-2xl); +} + +.option-card { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + transition: var(--transition); +} + +.option-card:hover { + transform: translateY(-2px); + box-shadow: 0 8px 25px rgba(255, 136, 0, 0.1); +} + +.option-header { + display: flex; + align-items: center; + gap: var(--spacing-md); + margin-bottom: var(--spacing-lg); +} + +.option-icon { + font-size: var(--font-2xl); +} + +.option-header h3 { + font-size: var(--font-xl); + color: var(--text-primary); + margin: 0; +} + +.option-item { + margin-bottom: var(--spacing-lg); + padding-bottom: var(--spacing-lg); + border-bottom: 1px solid #f1f5f9; +} + +.option-item:last-child { + border-bottom: none; + margin-bottom: 0; + padding-bottom: 0; +} + +.option-item h4 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-sm); +} + +.option-note { + font-size: var(--font-sm); + color: var(--text-secondary); + margin: var(--spacing-sm) 0 0 0; + line-height: 1.5; +} + +/* 이용 안내사항 */ +.usage-notes { + background-color: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-2xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); +} + +.usage-notes h3 { + font-size: var(--font-xl); + color: var(--text-primary); + margin-bottom: var(--spacing-lg); + text-align: center; +} + +.notes-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: var(--spacing-xl); +} + +.note-item { + text-align: center; + padding: var(--spacing-lg); + background: #f8fafc; + border-radius: var(--border-radius-sm); +} + +.note-item h4 { + font-size: var(--font-lg); + color: var(--primary-color); + margin-bottom: var(--spacing-sm); +} + +.note-item p { + font-size: var(--font-sm); + color: var(--text-secondary); + margin: 0; + line-height: 1.5; +} + +/* 통합 특징 그리드 */ +.features-grid.unified { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--spacing-lg); + margin-top: var(--spacing-md); +} + +.features-grid.unified .feature-item { + text-align: left; + padding: var(--spacing-md); + background: #f8fafc; + border-radius: var(--border-radius-sm); + border-left: 3px solid var(--primary-color); +} + +.features-grid.unified .feature-item .feature-icon { + display: inline; + margin-right: var(--spacing-xs); + font-size: var(--font-base); +} + +.features-grid.unified .feature-item p { + margin: 0; + font-size: var(--font-sm); + color: var(--text-secondary); + display: inline; +} + +/* ======================================== + 개선된 서비스 1 카드 레이아웃 + ======================================== */ + +/* 가격 카드 래퍼 */ +.pricing-cards-wrapper { + margin-bottom: var(--spacing-2xl); +} + +/* 가격 카드 그리드 */ +.pricing-cards { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: var(--spacing-xl); + margin-bottom: var(--spacing-2xl); +} + +/* 개별 가격 카드 */ +.pricing-card { + background: var(--bg-white); + border-radius: var(--border-radius); + padding: var(--spacing-xl); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + transition: var(--transition); + position: relative; + border: 2px solid transparent; +} + +.pricing-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 30px rgba(255, 136, 0, 0.15); +} + + +/* 카드 헤더 */ +.card-header { + display: flex; + align-items: center; + gap: var(--spacing-md); + margin-bottom: var(--spacing-lg); + position: relative; +} + +.person-icon { + font-size: var(--font-2xl); +} + +.card-header h4 { + font-size: var(--font-xl); + color: var(--text-primary); + margin: 0; + flex: 1; +} + +.popular-badge { + background: var(--primary-color); + color: var(--text-white); + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: var(--border-radius-full); + font-size: var(--font-xs); + font-weight: 600; + position: absolute; + top: -10px; + right: -10px; +} + +/* 가격 표시 */ +.price-display { + text-align: center; + margin-bottom: var(--spacing-lg); + padding: var(--spacing-lg); + background: linear-gradient(135deg, #fff8f0, #fef3e2); + border-radius: var(--border-radius-sm); +} + +.price-display .price-amount { + display: block; + font-size: var(--font-3xl); + font-weight: 700; + color: var(--primary-color); + margin-bottom: var(--spacing-xs); +} + +.price-display .price-unit { + font-size: var(--font-base); + color: var(--text-secondary); + font-weight: 500; +} + +/* 카드 특징 */ +.card-features ul { + list-style: none; + padding: 0; + margin: 0; +} + +.card-features li { + padding: var(--spacing-sm) 0; + position: relative; + padding-left: var(--spacing-lg); + color: var(--text-secondary); + line-height: 1.5; +} + +.card-features li::before { + content: '✨'; + position: absolute; + left: 0; + color: var(--primary-color); +} + +/* 서비스 정보 카드 */ +.service-info { + display: flex; + gap: var(--spacing-lg); + justify-content: center; + flex-wrap: wrap; +} + +.info-card { + display: flex; + align-items: center; + gap: var(--spacing-md); + background: #f0f9ff; + padding: var(--spacing-lg); + border-radius: var(--border-radius); + border: 1px solid #bae6fd; +} + +.info-icon { + font-size: var(--font-xl); +} + +.info-card p { + margin: 0; + color: var(--text-primary); + font-size: var(--font-sm); +} + +/* 컴팩트 기술 사양 */ +.tech-specs-compact { + margin-top: var(--spacing-xl); + padding: var(--spacing-lg); + background: #f8fafc; + border-radius: var(--border-radius); + border-left: 4px solid var(--primary-color); +} + +.tech-specs-compact h5 { + font-size: var(--font-lg); + color: var(--text-primary); + margin: 0 0 var(--spacing-md) 0; + text-align: center; +} + +.specs-list { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: var(--spacing-sm); + justify-items: center; +} + +.spec-tag { + display: inline-flex; + align-items: center; + gap: var(--spacing-xs); + background: var(--bg-white); + padding: var(--spacing-sm) var(--spacing-md); + border-radius: var(--border-radius-full); + font-size: var(--font-sm); + color: var(--text-secondary); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + transition: var(--transition); +} + +.spec-tag:hover { + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); +} + +.spec-tag span { + font-size: var(--font-base); +} + +/* 태블릿 반응형 */ +@media (max-width: 1024px) and (min-width: 769px) { + .options-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +/* 모바일 반응형 */ +@media (max-width: 768px) { + .pricing-grid { + grid-template-columns: 1fr; + } + + .pricing-structure { + flex-direction: column; + gap: var(--spacing-md); + } + + .features-grid.unified { + grid-template-columns: 1fr; + } + + /* 개선된 서비스 1 모바일 반응형 */ + .pricing-cards { + grid-template-columns: 1fr; + gap: var(--spacing-lg); + } + + .service-info { + flex-direction: column; + align-items: center; + } + + .info-card { + width: 100%; + max-width: 300px; + justify-content: center; + } + + /* 컴팩트 기술 사양 모바일 */ + .specs-list { + grid-template-columns: repeat(2, 1fr); + gap: var(--spacing-xs); + } + + .spec-tag { + font-size: var(--font-xs); + padding: var(--spacing-xs) var(--spacing-sm); + } + + .package-overview { + flex-direction: column; + text-align: center; + gap: var(--spacing-lg); + } + + .package-features { + grid-template-columns: 1fr; + } + + .combo-services { + grid-template-columns: 1fr; + } + + .options-grid { + grid-template-columns: 1fr; + } + + .notes-grid { + grid-template-columns: 1fr; + } + + .package-header { + flex-direction: column; + align-items: flex-start; + gap: var(--spacing-sm); + } + + .service-package { + padding: var(--spacing-lg); + } +} + .email-send { text-align: center; margin-top: var(--spacing-xl); } +/* ======================================== + 포트폴리오 팝업 스타일 + ======================================== */ + +.portfolio-preview { + text-align: center; + margin-top: var(--spacing-lg); + padding-top: var(--spacing-lg); + border-top: 1px solid #e2e8f0; +} + +.portfolio-btn { + background: var(--gradient-main); + color: var(--text-white); + border: none; + padding: var(--spacing-md) var(--spacing-xl); + border-radius: var(--border-radius); + font-size: var(--font-base); + font-weight: 600; + cursor: pointer; + transition: var(--transition); +} + +.portfolio-btn:hover { + transform: translateY(-2px); + box-shadow: 0 4px 15px rgba(255, 136, 0, 0.3); +} + +/* 팝업 오버레이 */ +.portfolio-popup { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 10000; +} + +.portfolio-popup.active { + display: flex; + align-items: center; + justify-content: center; +} + +.popup-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + backdrop-filter: blur(5px); +} + +.popup-content { + position: relative; + background: var(--bg-white); + border-radius: var(--border-radius); + max-width: 90vw; + max-height: 90vh; + width: 1000px; + overflow: hidden; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); + z-index: 1; +} + +/* 팝업 헤더 */ +.popup-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: var(--spacing-xl); + background: var(--gradient-main); + color: var(--text-white); +} + +.popup-header h3 { + margin: 0; + font-size: var(--font-xl); +} + +.popup-close { + background: none; + border: none; + color: var(--text-white); + font-size: var(--font-3xl); + cursor: pointer; + padding: 0; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + border-radius: var(--border-radius); + transition: var(--transition); +} + +.popup-close:hover { + background: rgba(255, 255, 255, 0.2); +} + +/* 팝업 바디 */ +.popup-body { + padding: var(--spacing-xl); + max-height: 60vh; + overflow-y: auto; +} + +.portfolio-section { + margin-bottom: var(--spacing-2xl); +} + +.portfolio-section:last-child { + margin-bottom: 0; +} + +.portfolio-section h4 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-lg); + text-align: center; +} + +.portfolio-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: var(--spacing-lg); +} + +.portfolio-grid.shorts-grid { + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); +} + +.portfolio-item { + text-align: center; +} + +.portfolio-item .video-wrapper { + position: relative; + width: 100%; + height: 0; + padding-bottom: 56.25%; /* 16:9 aspect ratio */ + border-radius: var(--border-radius); + overflow: hidden; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); +} + +.portfolio-item .video-wrapper.shorts-wrapper { + padding-bottom: 177.78%; /* 9:16 aspect ratio for shorts */ + max-width: 200px; + margin: 0 auto; +} + +.portfolio-item iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; +} + +.portfolio-item p { + margin-top: var(--spacing-md); + font-size: var(--font-sm); + color: var(--text-secondary); + font-weight: 500; +} + +/* 팝업 푸터 */ +.popup-footer { + text-align: center; + padding: var(--spacing-xl); + background: #f8fafc; + border-top: 1px solid #e2e8f0; +} + +/* 모바일 반응형 */ +@media (max-width: 768px) { + .popup-content { + width: 95vw; + max-height: 95vh; + } + + .popup-header { + padding: var(--spacing-lg); + } + + .popup-body { + padding: var(--spacing-lg); + max-height: 70vh; + } + + .portfolio-grid { + grid-template-columns: 1fr; + } + + .portfolio-grid.shorts-grid { + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + } + + .portfolio-item .video-wrapper.shorts-wrapper { + max-width: 150px; + } +} + +/* ======================================== + 스트리밍 포트폴리오 추가 스타일 + ======================================== */ + +.streaming-grid { + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); +} + +.streaming-info { + margin-top: var(--spacing-md); +} + +.streaming-info p { + margin: 0 0 var(--spacing-sm) 0; + font-size: var(--font-base); + color: var(--text-primary); + font-weight: 600; +} + +.stream-details { + display: flex; + gap: var(--spacing-sm); + justify-content: center; + flex-wrap: wrap; +} + +.platform, .streamer { + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: var(--border-radius-full); + font-size: var(--font-xs); + font-weight: 600; +} + +.platform { + background: #ff6b6b; + color: var(--text-white); +} + +.streamer { + background: #e2e8f0; + color: var(--text-secondary); +} + +/* 스트리밍 특징 */ +.streaming-features { + margin-top: var(--spacing-2xl); + padding-top: var(--spacing-xl); + border-top: 1px solid #e2e8f0; +} + +.streaming-features h4 { + font-size: var(--font-lg); + color: var(--text-primary); + margin-bottom: var(--spacing-lg); + text-align: center; +} + +.features-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: var(--spacing-lg); +} + +.feature-item { + text-align: center; + padding: var(--spacing-lg); + background: #f8fafc; + border-radius: var(--border-radius); + transition: var(--transition); +} + +.feature-item:hover { + transform: translateY(-2px); + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); +} + +.feature-icon { + font-size: var(--font-2xl); + display: block; + margin-bottom: var(--spacing-sm); +} + +.feature-item p { + margin: 0; + font-size: var(--font-sm); + color: var(--text-secondary); + font-weight: 500; +} + +/* 모바일 스트리밍 반응형 */ +@media (max-width: 768px) { + .streaming-grid { + grid-template-columns: 1fr; + } + + .features-grid { + grid-template-columns: repeat(2, 1fr); + } +} + /* 정보 리스트 */ .info-list { list-style: none; @@ -301,7 +1373,7 @@ /* 장비 그리드 */ .equipment-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + grid-template-columns: repeat(2, 1fr); gap: var(--spacing-xl); margin-top: var(--spacing-2xl); } diff --git a/js/services.js b/js/services.js index 8f48f0c..89758d6 100644 --- a/js/services.js +++ b/js/services.js @@ -74,4 +74,150 @@ document.querySelectorAll('.services-table tbody tr').forEach(row => { this.style.backgroundColor = ''; } }); +}); + +// ======================================== +// 포트폴리오 팝업 기능 +// ======================================== + +// 포트폴리오 팝업 열기 +function openPortfolioPopup() { + const popup = document.getElementById('portfolioPopup'); + if (popup) { + popup.classList.add('active'); + document.body.style.overflow = 'hidden'; // 배경 스크롤 방지 + + // ESC 키로 닫기 + document.addEventListener('keydown', handleEscapeKey); + + // 애니메이션 효과 + setTimeout(() => { + popup.style.opacity = '1'; + }, 10); + } +} + +// 포트폴리오 팝업 닫기 +function closePortfolioPopup() { + const popup = document.getElementById('portfolioPopup'); + if (popup) { + // 팝업 내 모든 iframe 정지 + const iframes = popup.querySelectorAll('iframe'); + iframes.forEach(iframe => { + const src = iframe.src; + iframe.src = ''; + setTimeout(() => { + iframe.src = src; + }, 100); + }); + + popup.style.opacity = '0'; + + setTimeout(() => { + popup.classList.remove('active'); + document.body.style.overflow = ''; // 스크롤 복원 + }, 300); + + // ESC 키 이벤트 제거 + document.removeEventListener('keydown', handleEscapeKey); + } +} + +// ESC 키 처리 +function handleEscapeKey(event) { + if (event.key === 'Escape') { + closePortfolioPopup(); + } +} + +// ======================================== +// 스트리밍 포트폴리오 팝업 기능 +// ======================================== + +// 스트리밍 포트폴리오 팝업 열기 +function openStreamingPortfolioPopup() { + const popup = document.getElementById('streamingPortfolioPopup'); + if (popup) { + popup.classList.add('active'); + document.body.style.overflow = 'hidden'; + + document.addEventListener('keydown', handleStreamingEscapeKey); + + setTimeout(() => { + popup.style.opacity = '1'; + }, 10); + } +} + +// 스트리밍 포트폴리오 팝업 닫기 +function closeStreamingPortfolioPopup() { + const popup = document.getElementById('streamingPortfolioPopup'); + if (popup) { + // 팝업 내 모든 iframe 정지 + const iframes = popup.querySelectorAll('iframe'); + iframes.forEach(iframe => { + const src = iframe.src; + iframe.src = ''; + setTimeout(() => { + iframe.src = src; + }, 100); + }); + + popup.style.opacity = '0'; + + setTimeout(() => { + popup.classList.remove('active'); + document.body.style.overflow = ''; + }, 300); + + document.removeEventListener('keydown', handleStreamingEscapeKey); + } +} + +// 스트리밍 팝업 ESC 키 처리 +function handleStreamingEscapeKey(event) { + if (event.key === 'Escape') { + closeStreamingPortfolioPopup(); + } +} + +// 팝업 초기화 +document.addEventListener('DOMContentLoaded', function() { + // 뮤비/숏폼 팝업 초기화 + const popup = document.getElementById('portfolioPopup'); + if (popup) { + popup.style.opacity = '0'; + popup.style.transition = 'opacity 0.3s ease'; + + const overlay = popup.querySelector('.popup-overlay'); + if (overlay) { + overlay.addEventListener('click', closePortfolioPopup); + } + + const content = popup.querySelector('.popup-content'); + if (content) { + content.addEventListener('click', function(event) { + event.stopPropagation(); + }); + } + } + + // 스트리밍 팝업 초기화 + const streamingPopup = document.getElementById('streamingPortfolioPopup'); + if (streamingPopup) { + streamingPopup.style.opacity = '0'; + streamingPopup.style.transition = 'opacity 0.3s ease'; + + const streamingOverlay = streamingPopup.querySelector('.popup-overlay'); + if (streamingOverlay) { + streamingOverlay.addEventListener('click', closeStreamingPortfolioPopup); + } + + const streamingContent = streamingPopup.querySelector('.popup-content'); + if (streamingContent) { + streamingContent.addEventListener('click', function(event) { + event.stopPropagation(); + }); + } + } }); \ No newline at end of file diff --git a/portfolio.html b/portfolio.html index b5a2b53..a7eeb7a 100644 --- a/portfolio.html +++ b/portfolio.html @@ -227,6 +227,39 @@ +
+
+ +
+
+

🍓요즘 일본에서 유행하는 챌린지 #vtuber #shorts

+
+
+ +
+
+ +
+
+

🍓trouble 챌린지 #trouble #challenge

+
+
+ +
+
+ +
+
+

🍓그르르 챌린지 grrr#shorts

+
+
+ diff --git a/services.html b/services.html index 1836d1e..48c1d6f 100644 --- a/services.html +++ b/services.html @@ -76,80 +76,307 @@
-

주요 서비스 소개

+

서비스 패키지

+

용도와 규모에 맞는 최적의 모션캡처 서비스를 제공합니다

- - -
-
-

서비스 항목 및 요금

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
서비스 항목설명요금
-
- 🎬 - 모션캡쳐 스튜디오 대관 -
-
-
    -
  • 28대의 광학식 카메라 시스템 (OptiTrack)
  • -
  • 모션캡쳐 수트 및 장갑 지원 (Rokoko Glove)
  • -
  • 스튜디오 면적: 8m(가로) x 7m(세로) x 2.6m(높이)
  • -
  • 실시간 모니터링 장비 보유
  • -
  • 전신 및 페이셜 모션캡쳐 가능
  • -
  • 동시 이용가능 인원: 최대 4인
  • -
  • 모션 녹화 파일 제공
  • -
  • 실시간 오퍼레이팅 지원
  • -
-
-
시간당 220,000원
-
(VAT 포함)
-
- 최소 이용: 2시간

- 인원 요금:
- • 기본 인원: 2인
- • 추가 인원: +110,000원/시간당 -
-
-
- 🔄 - 모션 리타겟팅 -
-
모션 데이터의 리타겟팅 지원 -
별도 문의
-
(프로젝트별 견적)
-
-
- 📺 - 실시간 스트리밍 -
-
실시간 스트리밍 서비스 -
준비중
-
+ + +
+
+ 🎯 +

서비스 1: 모션캡처 서비스

+ 기본형 +
+ + +
+
+
+
+ 👤 +

1인 이용

+
+
+ 150,000원 + /시간 +
+
+
    +
  • 개인 프로젝트 최적화
  • +
  • VTuber 방송 준비
  • +
  • 1인 콘텐츠 제작
  • +
+
+
+ +
+
+ 👥 +

2인 이용

+ 인기 +
+
+ 200,000원 + /시간 +
+
+
    +
  • 합방 콘텐츠 제작
  • +
  • 상호작용 연출
  • +
  • 팀 프로젝트
  • +
+
+
+ +
+
+ 👨‍👩‍👧‍👦 +

추가 인원

+
+
+ +100,000원 + /명/시간 +
+
+
    +
  • 최대 4인까지
  • +
  • 대규모 콘텐츠
  • +
  • 그룹 프로젝트
  • +
+
+
+
+ +
+
+ ⏱️ +

최소 이용시간: 2시간

+
+
+ 👥 +

최대 동시 이용: 4인

+
+
+
+ + +
+
제공 기술 및 서비스
+
+
📹 OptiTrack 28대 카메라
+
🤖 실시간 아바타 녹화
+
👤 전신/페이셜 캡처
+
📊 실시간 모니터링
+
👨‍💻 전문 오퍼레이터
+
💾 모션 데이터 제공
+
+
+ +
+

참고: 아바타 리타게팅 서비스는 기본 제공되지 않으며, 후속 작업 연계 시 별도 상담을 통해 제공합니다.

+
+
+ + +
+
+ 🎬 +

결합상품

+ 특화서비스 +
+ +
+
+

뮤직비디오/숏폼 영상 실시간 촬영

+
+ 모션캡처와 동일 요금 +
+
+
추가 요구사항
+
    +
  • 기획서 사전 협의 필수
  • +
  • 캐릭터/배경/프랍 사전 협의
  • +
  • 액터 섭외 필요 시: 100,000원 (1명당 시간당)
  • +
+
+ +
+
+
+ +
+

원격 촬영

+
+ 모션캡처와 동일 요금 +
+
+
서비스 내용
+
    +
  • 원격 실시간 촬영 지원
  • +
  • 온라인 디렉션 가능
  • +
  • 실시간 스트리밍 송출
  • +
+
추가 요금
+
    +
  • 액터 섭외비: 100,000원 (1명당 시간당)
  • +
+
+
+
+
+ + + + +
+
+ + +
+
+
+

추가 옵션 요금

+

모든 서비스 패키지에 공통으로 적용되는 추가 옵션입니다

+
+ +
+ +
+
+ 🎨 +

캐릭터 세팅

+
+
+
+ 50,000원~ + / 1인 1벌 +
+

신규 캐릭터 세팅 작업

+
+
+ + +
+
+ 🏞️ +

배경 세팅

+
+
+
+

기존 보유 배경 사용

+
+ 30,000원~ + / 1개 +
+

세팅비만 부과

+
+
+

신규 배경 제작

+
+ 100,000원~ + / 1개 +
+

세팅비 + 제작비/구입비 별도
+ 밍글스튜디오 또는 의뢰자 귀속 선택 가능합니다

+
+
+
+ + +
+
+ 🎪 +

프랍 세팅

+
+
+
+ 20,000원 + / 1개 +
+

프랍 세팅 작업
(스트리밍글 서비스: 신규 프랍 최대 6개, 보유 프랍 무제한 무료 제공)

+
+
+
+ + +
+

이용 안내사항

+
+
+

운영 시간

+

기본 운영 시간: 10:00 ~ 22:00
+ 야간 이용 시 요금 1.5배 적용

+
+
+

최소 이용 시간

+

모든 서비스 최소 2시간
+ (스트리밍글 서비스 제외)

+
+
+

사전 준비 사항

+

뮤직비디오/숏폼 촬영 시
+ 기획서 및 준비물 사전 협의 필수

+
+
+

후속 서비스

+

아바타 리타게팅은 후속 작업 연계 시에만
+ 제공됩니다 (별도 상담)

@@ -379,6 +606,175 @@
+ +
+ + +
+ + +
+ + +
+