diff --git a/css/services.css b/css/services.css
index 5d81e8f..0c5e23e 100644
--- a/css/services.css
+++ b/css/services.css
@@ -401,6 +401,209 @@
margin: 0;
}
+/* 서비스 비교 배너 */
+.service-compare-banner {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: var(--spacing-lg);
+ margin-bottom: var(--spacing-2xl);
+ padding: var(--spacing-xl);
+ background: var(--bg-primary);
+ border-radius: var(--border-radius);
+ border: 1px solid var(--border-color);
+}
+
+.compare-item {
+ display: flex;
+ align-items: flex-start;
+ gap: var(--spacing-md);
+ padding: var(--spacing-lg);
+ border-radius: var(--border-radius-sm);
+ background: var(--bg-secondary);
+}
+
+.compare-icon {
+ flex-shrink: 0;
+ width: 44px;
+ height: 44px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 1.1rem;
+ color: #fff;
+}
+
+.compare-icon.recording {
+ background: var(--primary-color);
+}
+
+.compare-icon.live {
+ background: #6c5ce7;
+}
+
+.compare-info h4 {
+ margin: 0 0 4px;
+ font-size: var(--font-base);
+ color: var(--text-primary);
+}
+
+.compare-info .compare-price {
+ font-size: var(--font-sm);
+ font-weight: 700;
+ color: var(--primary-color);
+ margin: 0 0 4px;
+}
+
+.compare-info .compare-desc {
+ font-size: var(--font-xs);
+ color: var(--text-secondary);
+ margin: 0;
+}
+
+.service-type-notice {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ padding: 8px 16px;
+ border-radius: 20px;
+ font-size: var(--font-xs);
+ font-weight: 600;
+ margin: 0 0 var(--spacing-lg);
+}
+
+/* When notice follows package-header, tighten spacing */
+.package-header + .service-type-notice {
+ margin-top: calc(-1 * var(--spacing-md));
+}
+
+/* When notice follows service-note, add top spacing */
+.service-note + .service-type-notice {
+ margin-top: var(--spacing-lg);
+}
+
+.service-type-notice.recording-only {
+ background: rgba(255, 136, 0, 0.1);
+ color: var(--primary-color);
+ border: 1px solid rgba(255, 136, 0, 0.3);
+}
+
+.service-type-notice.live-package {
+ background: rgba(108, 92, 231, 0.1);
+ color: #6c5ce7;
+ border: 1px solid rgba(108, 92, 231, 0.3);
+}
+
+@media (max-width: 768px) {
+ .service-compare-banner {
+ grid-template-columns: 1fr;
+ }
+}
+
+/* 후작업 추가 옵션 */
+.post-processing-options {
+ margin-top: var(--spacing-2xl);
+ padding: var(--spacing-xl);
+ background: var(--bg-primary);
+ border: 1px solid var(--border-color);
+ border-radius: var(--border-radius);
+}
+
+.post-processing-options > h5 {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ font-size: var(--font-lg);
+ color: var(--text-primary);
+ margin: 0 0 var(--spacing-lg);
+}
+
+.post-options-grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: var(--spacing-lg);
+}
+
+.post-option-card {
+ padding: var(--spacing-xl);
+ background: var(--bg-secondary);
+ border: 1px solid var(--border-color);
+ border-radius: var(--border-radius-sm);
+ transition: border-color 0.2s ease;
+}
+
+.post-option-card.featured {
+ border-color: var(--primary-color);
+ background: rgba(255, 136, 0, 0.03);
+}
+
+.post-option-header {
+ display: flex;
+ align-items: center;
+ gap: var(--spacing-sm);
+ margin-bottom: var(--spacing-md);
+}
+
+.post-option-icon {
+ width: 36px;
+ height: 36px;
+ border-radius: 50%;
+ background: var(--primary-color);
+ color: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.9rem;
+ flex-shrink: 0;
+}
+
+.post-option-card.featured .post-option-icon {
+ background: var(--primary-color);
+}
+
+.post-option-header h6 {
+ margin: 0;
+ font-size: var(--font-base);
+ color: var(--text-primary);
+ font-weight: 700;
+}
+
+.post-option-price {
+ margin-bottom: var(--spacing-sm);
+}
+
+.post-option-price .price-amount {
+ font-size: var(--font-xl);
+ font-weight: 800;
+ color: var(--primary-color);
+}
+
+.post-option-price .price-unit {
+ font-size: var(--font-sm);
+ color: var(--text-secondary);
+ margin-left: 2px;
+}
+
+.post-option-desc {
+ font-size: var(--font-sm);
+ color: var(--text-secondary);
+ margin: 0;
+ line-height: 1.5;
+}
+
+.post-option-note {
+ font-size: var(--font-xs);
+ color: var(--text-secondary);
+ margin: var(--spacing-lg) 0 0;
+ font-style: italic;
+}
+
+@media (max-width: 768px) {
+ .post-options-grid {
+ grid-template-columns: 1fr;
+ }
+}
+
/* 서비스 노트 */
.service-note {
background: var(--color-info-bg);
@@ -2445,6 +2648,40 @@
}
/* 서비스 노트 */
+[data-theme="dark"] .service-compare-banner {
+ background: rgba(255, 255, 255, 0.03);
+ border-color: var(--glass-border);
+}
+
+[data-theme="dark"] .compare-item {
+ background: rgba(255, 255, 255, 0.05);
+}
+
+[data-theme="dark"] .service-type-notice.recording-only {
+ background: rgba(255, 136, 0, 0.15);
+ border-color: rgba(255, 136, 0, 0.3);
+}
+
+[data-theme="dark"] .service-type-notice.live-package {
+ background: rgba(108, 92, 231, 0.15);
+ border-color: rgba(108, 92, 231, 0.3);
+}
+
+[data-theme="dark"] .post-processing-options {
+ background: rgba(255, 255, 255, 0.03);
+ border-color: var(--glass-border);
+}
+
+[data-theme="dark"] .post-option-card {
+ background: rgba(255, 255, 255, 0.05);
+ border-color: var(--glass-border);
+}
+
+[data-theme="dark"] .post-option-card.featured {
+ border-color: rgba(255, 136, 0, 0.4);
+ background: rgba(255, 136, 0, 0.08);
+}
+
[data-theme="dark"] .service-note {
background: rgba(255, 136, 0, 0.08);
border-color: rgba(255, 136, 0, 0.2);
diff --git a/en/services.html b/en/services.html
index b52c2e0..3c820ba 100644
--- a/en/services.html
+++ b/en/services.html
@@ -170,6 +170,26 @@
diff --git a/i18n/en.json b/i18n/en.json
index bc9de66..e854a23 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -259,6 +259,14 @@
"desc": "We offer optimal motion capture recording services tailored to your needs and scale",
"vatNotice": "※ All prices are exclusive of VAT"
},
+ "compare": {
+ "recordingTitle": "Motion Capture Recording",
+ "recordingPrice": "200,000 KRW~/hr (2-person base)",
+ "recordingDesc": "Recording only · Live streaming not included",
+ "liveTitle": "Motion Capture Live Broadcast",
+ "livePrice": "1,400,000 KRW~ / 4-hour package",
+ "liveDesc": "Recording + Live broadcast + Avatar, background & prop setup included"
+ },
"service1": {
"title": "Service 1: Motion Capture Recording",
"badge": "Standard",
@@ -285,7 +293,18 @@
"tech4": "Real-time monitoring",
"tech5": "Professional operator",
"tech6": "Motion data delivery",
- "note": "Avatar retargeting is not included by default. It can be arranged through a separate consultation for follow-up work."
+ "note": "Avatar retargeting is not included by default. It can be arranged through a separate consultation for follow-up work.",
+ "postTitle": "Post-Processing Options",
+ "cleanupTitle": "Data Cleanup",
+ "cleanupPrice": "50,000 ~ 100,000 KRW",
+ "cleanupUnit": "/ per minute",
+ "cleanupDesc": "Noise removal & frame correction · Retargeting not included",
+ "retargetTitle": "Retargeting",
+ "retargetPrice": "300,000 ~ 500,000 KRW",
+ "retargetUnit": "/ per minute",
+ "retargetDesc": "Motion retargeting optimized for your avatar",
+ "postNote": "* Post-processing is arranged via separate consultation after recording",
+ "typeNotice": "Recording-only service · For live broadcast, please see the separate package below"
},
"combo": {
"title": "Combo Packages",
@@ -309,6 +328,7 @@
"service2": {
"title": "Service 2: Streamingle Service",
"badge": "Flagship",
+ "typeNotice": "Separate package from recording service · Includes avatar, background & prop setup + live broadcast",
"pkg4h": "4-Hour Package",
"pkg4hBadge": "NEW",
"pkg4hPrice": "$1,100",
diff --git a/i18n/ja.json b/i18n/ja.json
index eda449a..40e1f4c 100644
--- a/i18n/ja.json
+++ b/i18n/ja.json
@@ -259,6 +259,14 @@
"desc": "用途と規模に合った最適なモーションキャプチャー録画サービスを提供します",
"vatNotice": "※ 全ての料金は消費税別です"
},
+ "compare": {
+ "recordingTitle": "モーションキャプチャー録画",
+ "recordingPrice": "200,000ウォン~/時間(2名基準)",
+ "recordingDesc": "モーションデータ録画専用 · ライブ配信は含まれません",
+ "liveTitle": "モーションキャプチャー ライブ配信",
+ "livePrice": "1,400,000ウォン~ / 4時間パッケージ",
+ "liveDesc": "録画 + ライブ配信 + アバター・背景・プロップセッティング込みフルパッケージ"
+ },
"service1": {
"title": "サービス1:モーションキャプチャー録画サービス",
"badge": "ベーシック",
@@ -285,7 +293,18 @@
"tech4": "リアルタイムモニタリング",
"tech5": "専門オペレーター",
"tech6": "モーションデータ提供",
- "note": "アバターリターゲティングサービスは基本提供に含まれておらず、後続作業連携時に別途ご相談にて提供いたします。"
+ "note": "アバターリターゲティングサービスは基本提供に含まれておらず、後続作業連携時に別途ご相談にて提供いたします。",
+ "postTitle": "後処理オプション",
+ "cleanupTitle": "データクリーンアップ",
+ "cleanupPrice": "50,000 ~ 100,000ウォン",
+ "cleanupUnit": "/ 分あたり",
+ "cleanupDesc": "ノイズ除去・フレーム補正 · リターゲティング不含",
+ "retargetTitle": "リターゲティング",
+ "retargetPrice": "300,000 ~ 500,000ウォン",
+ "retargetUnit": "/ 分あたり",
+ "retargetDesc": "お客様のアバターに最適化されたモーションリターゲティング",
+ "postNote": "* 後処理は録画完了後、別途ご相談にて承ります",
+ "typeNotice": "録画専用サービスです · ライブ配信は下記の別途パッケージをご利用ください"
},
"combo": {
"title": "セットプラン",
@@ -309,6 +328,7 @@
"service2": {
"title": "サービス2:ストリーミングルサービス",
"badge": "代表サービス",
+ "typeNotice": "録画サービスとは別パッケージ · アバター・背景・プロップセッティング + ライブ配信込み",
"pkg4h": "4時間パッケージ",
"pkg4hBadge": "NEW",
"pkg4hPrice": "$1,100",
diff --git a/i18n/ko.json b/i18n/ko.json
index b5cd62a..08364f0 100644
--- a/i18n/ko.json
+++ b/i18n/ko.json
@@ -259,6 +259,14 @@
"desc": "용도와 규모에 맞는 최적의 모션캡처 녹화 서비스를 제공합니다",
"vatNotice": "※ 모든 가격은 부가세 별도입니다"
},
+ "compare": {
+ "recordingTitle": "모션캡처 녹화",
+ "recordingPrice": "200,000원~/시간 (2인 기준)",
+ "recordingDesc": "모션 데이터 녹화 전용 · 라이브 방송 미포함",
+ "liveTitle": "모션캡처 라이브 방송",
+ "livePrice": "1,400,000원~ / 4시간 패키지",
+ "liveDesc": "녹화 + 라이브 방송 + 아바타·배경·프랍 세팅 포함 풀패키지"
+ },
"service1": {
"title": "서비스 1: 모션캡처 녹화 서비스",
"badge": "기본형",
@@ -285,7 +293,18 @@
"tech4": "실시간 모니터링",
"tech5": "전문 오퍼레이터",
"tech6": "모션 데이터 제공",
- "note": "아바타 리타게팅 서비스는 기본 제공되지 않으며, 후속 작업 연계 시 별도 상담을 통해 제공합니다."
+ "note": "아바타 리타게팅 서비스는 기본 제공되지 않으며, 후속 작업 연계 시 별도 상담을 통해 제공합니다.",
+ "postTitle": "후작업 추가 옵션",
+ "cleanupTitle": "데이터 클린업",
+ "cleanupPrice": "50,000 ~ 100,000원",
+ "cleanupUnit": "/ 분당",
+ "cleanupDesc": "노이즈 제거 및 프레임 보정 · 리타게팅 미포함",
+ "retargetTitle": "리타게팅",
+ "retargetPrice": "300,000 ~ 500,000원",
+ "retargetUnit": "/ 분당",
+ "retargetDesc": "고객 아바타에 최적화된 모션 리타게팅 적용",
+ "postNote": "* 후작업은 녹화 완료 후 별도 상담을 통해 진행됩니다",
+ "typeNotice": "녹화 전용 서비스입니다 · 라이브 방송은 아래 별도 패키지를 이용해주세요"
},
"combo": {
"title": "결합상품",
@@ -309,6 +328,7 @@
"service2": {
"title": "서비스 2: 모션캡처 라이브 방송 서비스",
"badge": "대표상품",
+ "typeNotice": "녹화 서비스와 별도 패키지 · 아바타·배경·프랍 세팅 + 라이브 방송 포함",
"pkg4h": "4시간 패키지",
"pkg4hBadge": "NEW",
"pkg4hPrice": "1,400,000원",
diff --git a/i18n/zh.json b/i18n/zh.json
index c5f65ed..67ba0cf 100644
--- a/i18n/zh.json
+++ b/i18n/zh.json
@@ -259,6 +259,14 @@
"desc": "根据用途和规模提供最优动作捕捉录制服务",
"vatNotice": "※ 所有价格均不含增值税"
},
+ "compare": {
+ "recordingTitle": "动作捕捉录制",
+ "recordingPrice": "200,000韩元~/小时(2人基准)",
+ "recordingDesc": "仅录制动作数据 · 不包含直播",
+ "liveTitle": "动作捕捉直播",
+ "livePrice": "1,400,000韩元~ / 4小时套餐",
+ "liveDesc": "录制 + 直播 + 虚拟形象·背景·道具设置全包套餐"
+ },
"service1": {
"title": "服务1: 动作捕捉录制服务",
"badge": "基础型",
@@ -285,7 +293,18 @@
"tech4": "实时监控",
"tech5": "专业操作员",
"tech6": "提供动作数据",
- "note": "虚拟形象重定向服务不包含在基础服务中,如需后续对接可通过单独咨询提供。"
+ "note": "虚拟形象重定向服务不包含在基础服务中,如需后续对接可通过单独咨询提供。",
+ "postTitle": "后期处理选项",
+ "cleanupTitle": "数据清理",
+ "cleanupPrice": "50,000 ~ 100,000韩元",
+ "cleanupUnit": "/ 每分钟",
+ "cleanupDesc": "噪声去除与帧修正 · 不含重定向",
+ "retargetTitle": "重定向",
+ "retargetPrice": "300,000 ~ 500,000韩元",
+ "retargetUnit": "/ 每分钟",
+ "retargetDesc": "针对客户虚拟形象的动作重定向优化",
+ "postNote": "* 后期处理在录制完成后通过单独咨询进行",
+ "typeNotice": "仅限录制服务 · 直播请参阅下方独立套餐"
},
"combo": {
"title": "组合产品",
@@ -309,6 +328,7 @@
"service2": {
"title": "服务2: Streamingle 直播服务",
"badge": "代表产品",
+ "typeNotice": "与录制服务分开的套餐 · 包含虚拟形象·背景·道具设置 + 直播",
"pkg4h": "4小时套餐",
"pkg4hBadge": "NEW",
"pkg4hPrice": "$1,100",
diff --git a/ja/services.html b/ja/services.html
index 9b292d8..4d3a540 100644
--- a/ja/services.html
+++ b/ja/services.html
@@ -170,6 +170,26 @@
※ 全ての料金は消費税別です
+
+