<!DOCTYPE html>
<html>
<head>
    
    <title>컴투스기업 : 컴투스 &gt; 서버에러</title>

    <!-- 공통 css, js -->
    <meta charset="UTF-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="_csrf" content="v8sEsSRYcpOYfsqRrFxbdDwiQkguVvk47pee4Xvf5dlsocFSjfgw0xVtRfe1S_3wzXFvRFoUbyoeMpwVjaOv2E_t3LxZxPMz" />
<meta name="_csrf_header" content="X-CSRF-TOKEN" />
<meta name="format-detection" content="telephone=no, address=no, email=no">
<meta name="description" content="">

<!-- Open Graph Meta Tags Start -->
<meta property="og:title" lang="ko" content="컴투스 | 공식 사이트">
<meta property="og:title" lang="en" content="Com2uS | Official web site">
<meta property="og:title" lang="ja" content="Com2uS | Official web site">
<meta property="og:title" lang="zh-Hans" content="Com2uS | Official web site">
<meta property="og:title" lang="zh-Hant" content="Com2uS | Official web site">
<meta property="og:type" content="website">
<meta property="og:description" lang="ko" content="게임에서 문화를, 문화에서 미래를 만들어나가는 기업, 컴투스를 소개합니다.">

<meta property="og:description" lang="en" content="Introducing Com2uS, a company that transforms games into culture and culture into the future.">
<meta property="og:description" lang="ja" content="ゲームで文化を、文化で未来を創り出す企業、Com2uSを紹介します。">
<meta property="og:description" lang="zh-Hans" content="为您介绍用游戏传播文化，用文化创造未来的企业——Com2uS。">
<meta property="og:description" lang="zh-Hant" content="於遊戲中創造文化、在文化中開創未來的Com2uS介紹。">
<!-- Open Graph Meta Tags End -->

<!-- 사이트 소유 확인 코드(네이버) -->
<meta name="naver-site-verification" content="e9a399a05536c0d0f3e90dbbda1fd42f0444f9c4" />

<!-- icon -->
<link rel="icon" type="image/png" href="https://www.com2us.com/favicon.ico" sizes="16x16">
<link rel="icon" type="image/png" href="https://www.com2us.com/favicon_256.ico" sizes="256x256">

<!-- SCRIPT Libs -->
<script src="/dist/lib/jquery-3.7.1.js"></script>
<script src="/dist/lib/swiper-bundle.min.js"></script>
<script src="/dist/lib/bootstrap-5.3.3/bootstrap.bundle.min.js"></script>
<script src="/dist/lib/lenis.min.js"></script>
<script src="/dist/lib/moment.min.js"></script>
<script src="/dist/lib/ua-parser.min.js"></script>
<script src="/dist/lib/axios.min.js"></script>

<!-- SCRIPT -->
<script src="/dist/js/ajax.js"></script>
<script src="/dist/js/common.js"></script>
<script src="/dist/js/ui-common.js"></script>

<!-- VueJs -->

    <script src="/dist/lib/vue/vue.global.prod.js"></script>


<script src="/dist/lib/vue/vue-i18n.global.js"></script>
<script src="/dist/lib/vue/vue-common.js"></script>
<script src="/dist/lib/vue/code/vue-common-rules.js"></script>


<script src="/dist/js/i18n/corporation/layout.i18n.js"></script>
<script src="/dist/lib/vue/component/pentaSelect.js"></script>

<!-- page 에서 정의하는 SCRIPT -->


<!-- page 에서 정의하는 CSS -->


<!-- Google Tag Manager -->
<script>
    fetch("https://get.geojs.io/v1/ip/country.json")
        .then(res => res.json())
        .then(data => {
            const accessCountry =  data.country.toUpperCase();
            const gdpr_agree_cookie = getCookie("gdpr_agree_cookie");
            const EU_COUNTRIES = [
                'DE','FR','IT','ES','GB','NL','PL','BE','SE','CH','AT','NO','DK',
                'FI','IE','PT','CZ','GR','HU','RO','BG','SK','RS','HR','UA','RU'
            ];

            // GA 쿠키를 허용 했거나 EU 외 국가에서 접속하였을때
            if (gdpr_agree_cookie === "yes" || !EU_COUNTRIES.includes(accessCountry)) {
                setTimeout(()=>{
                    (function (w, d, s, l, i) {
                        w[l] = w[l] || [];
                        w[l].push({"gtm.start": new Date().getTime(), event: "gtm.js"});
                        var f = d.getElementsByTagName(s)[0],
                            j = d.createElement(s),
                            dl = l != "dataLayer" ? "&l=" + l : "";
                        j.async = true;
                        j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
                        f.parentNode.insertBefore(j, f);
                    })(window, document, "script", "dataLayer", "GTM-T24H294T");
                },1000);
            }
        })
        .catch(err => console.error("국가 코드 조회 실패:", err));
</script>
<!-- End Google Tag Manager -->

<style>
    [v-cloak] {
        display: none;
    }
</style>

    <!-- corporation css, js -->
    <!-- CSS -->
<link rel="stylesheet" type="text/css" href="/dist/css/client/style.css">

<!-- Pretendard Regular preload -->
<link rel="preload" href="/fonts/pretendard/Pretendard-Regular.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/pretendard/Pretendard-Medium.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/pretendard/Pretendard-Bold.woff2" as="font" type="font/woff2" crossorigin>

<!-- SCRIPT -->
<script src="/dist/js/ui-corporation.js"></script>
<script src="/dist/lib/gsap.min.js"></script>
<script src="/dist/lib/ScrollTrigger.min.js"></script>
<script src="/dist/lib/swiper-bundle.min.js"></script>
<script src="/dist/lib/ScrollToPlugin.min.js"></script>

    <!-- Canonical URL Start -->
    
        <link rel="canonical" href="https://null/null" />
        <link rel="alternate" hreflang="ko" href="https://null/ko" />
        <link rel="alternate" hreflang="en" href="https://null/en" />
        <link rel="alternate" hreflang="ja" href="https://null/ja" />
        <link rel="alternate" hreflang="zh-Hans" href="https://null/zh-Hans" />
        <link rel="alternate" hreflang="zh-Hant" href="https://null/zh-Hant" />
        <link rel="alternate" hreflang="x-default" href="https://null/en" />
    
    <!-- Canonical URL End -->
    
    <script src="/dist/js/i18n/error/error.i18n.js"></script>
    <script>
        window.addEventListener('load', initAppVueScript);
        function initAppVueScript() {
            Vue.createApp({
                data() {
                    return {
                        language: getCookie('localeCookie'),
                    };
                }
            }).use(vueI18n).mount('#appCom2us1');
            Vue.createApp({
                data() {
                    return {
                        language: getCookie('localeCookie'),
                    };
                }
            }).use(vueI18n).mount('#appCom2us2');
        }

        window.addEventListener('DOMContentLoaded', () => {
            const leftFour = document.querySelector('.left-four');
            const centerImg = document.querySelector('.center-img');
            const rightFour = document.querySelector('.right-four');
            const eyes = document.querySelector('.eyes');

            // 순서 애니메이션
            setTimeout(() => {
                leftFour.classList.add('active');
            }, 100);

            setTimeout(() => {
                centerImg.classList.add('active');
            }, 1000);

            setTimeout(() => {
                rightFour.classList.add('active');
            }, 2000);

            // ✅ 눈 커서 따라 더 정확하게 움직임
            document.addEventListener('mousemove', (e) => {
                const faceRect = centerImg.getBoundingClientRect();

                // 얼굴 중앙 좌표
                const faceCenterX = faceRect.left + faceRect.width / 2;
                const faceCenterY = faceRect.top + faceRect.height / 2;

                // 마우스와 얼굴 중심 간 벡터
                const dx = e.clientX - faceCenterX;
                const dy = e.clientY - faceCenterY;

                // 벡터 길이
                const distance = Math.sqrt(dx * dx + dy * dy);

                // 최대 거리 제한
                const maxDistance = 10; // px, 필요시 늘려보세요

                // 실제 이동 벡터 (너무 멀면 maxDistance로 제한)
                const ratio = distance > maxDistance ? maxDistance / distance : 1;
                const offsetX = dx * ratio;
                const offsetY = dy * ratio;

                // eyes에 transform 적용
                eyes.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
            });
        });
    </script>
</head>

<body class="ko">
<div id="wrap">
    <!-- 헤더-->
    <!-- 2025.06.23. 오픈준비 -->
    
    <script>
      // Vue I18n 인스턴스를 생성
      const vueI18n = VueI18n.createI18n({
          locale: 'ko', // 기본 언어
          fallbackLocale: 'en', // 현제 언어에서 못찾을시 대체
          messages: {},
      });

      window.addEventListener('load', initHeaderScript);

      function initHeaderScript() {
          Vue.createApp({
              data() {
                  return {
                      language: null || 'ko',
                      languages: [],
                      languageMap : {
                          ko : "한국어",
                          en : "English",
                          ja : "日本語",
                          "zh-hans" : "简体中文",
                          "zh-hant" : "繁體中文"
                      },
                      recruits: [],
                      newsDisabled: {
                          en: true,
                          ja: true,
                          zhhans: true,
                          zhhant: true
                      },
                      accessCountry: 'KR',
                      esg: {url: "", name: ""},
                      ir: {url: "", name: ""}
                  };
              },
              created() {
                  // 언어팩 추가 (page 에서 작성한 언어 수만큼 select 구성)
                  const languagePack = typeof messages !== 'undefined' ? messages : { ko: {} };
                  Object.keys(languagePack).forEach(locale => {
                      const mergedMessages = {
                          ...(layoutI18n?.[locale] || {}),  // layoutI18n의 언어 메시지
                          ...(languagePack?.[locale] || {}) // languagePack의 언어 메시지
                      };
                      vueI18n.global.mergeLocaleMessage(locale, mergedMessages);
                      this.languages.push({
                          value: locale,
                          label: this.languageMap?.[locale]
                      });
                  });

              },
              mounted() {
                  const vm = this;

                  // URL 경로의 첫 번째 세그먼트를 언어 코드로 사용
                  const segments = window.location.pathname.split('/');
                  const availableLangs = vm.languages.map(item => item.value);
                  let urlLang = (segments.length > 1 && segments[1]) ? segments[1].toLowerCase() : "";
                  // availableLangs에 포함되어 있지 않거나 값이 비어있다면 기본값 'ko'로 설정
                  if (!urlLang || !availableLangs.includes(urlLang)) {
                      if(vm.language !== urlLang){
                          segments[1] = vm.language;
                          const newPath = segments.join('/');
                          window.location.href = newPath + window.location.search + window.location.hash;
                      }
                  } else {
                      vm.language = urlLang;
                  }
                  vm.$i18n.locale = vm.language;

                  document.title = vm.$t('seo.title').replace('&#124;', '|');
                  document.querySelector('meta[name="description"]').setAttribute('content', vm.$t('seo.description'));

                  // 지원하지 않는 Canonical 삭제
                  document.querySelectorAll('link[rel="alternate"]').forEach(link => {
                      const hreflang = link.getAttribute('hreflang');
                      if (hreflang !== "x-default" && !availableLangs.includes(hreflang)) {
                          link.remove();
                      }
                  });

                  fetch("https://get.geojs.io/v1/ip/country.json")
                      .then(res => res.json())
                      .then(data => {
                          vm.accessCountry =  data.country.toUpperCase();
                          /*
                          대한민국	KR
                          일본	JP
                          미국 US
                          중국 CN
                          대만 TW
                          독일 DE
                          프랑스 FR - EU
                          스페인 ES - EU
                          포르투칼 PT - EU
                          이탈리아 IT - EU
                          */
                      })
                      .catch(err => console.error("국가 코드 조회 실패:", err));

                  vm.getData();
                  vm.getNewsDisabled();
              },
              methods: {
                  selectLanguage(locale) {
                      // URL 경로의 첫 번째 세그먼트를 언어 코드로 사용
                      const segments = window.location.pathname.split('/');
                      const availableLangs = this.languages.map(item => item.value);
                      // 첫 번째 세그먼트가 존재하고 languages 목록에 포함되어 있다면 교체
                      if (segments.length > 1 && segments[1] && availableLangs.includes(segments[1].toLowerCase())) {
                          segments[1] = locale;
                      } else {
                          // 그렇지 않으면 첫 번째 세그먼트로 추가
                          segments.splice(1, 0, locale);
                      }
                      const newPath = segments.join('/');
                      window.location.href = newPath + window.location.search + window.location.hash;
                  },
                  getData() {
                      const vm = this;
                      ajax.get("/api/recruit").then((res) => {
                          if (res?.success) {
                              vm.recruits = res?.data;
                          }
                      });

                      // esg 메뉴 조회
                      ajax.get('/api/esg/menus').then((res) => {
                        if(res?.success) {
                          const result = (res?.data ?? []).filter((f) => f.enable)

                          if(result.length > 0) {
                            const urlCode = result?.[0]?.urlCode ?? ""
                            let url = urlCode ? `/${this.language}/esg/esg-contents-${urlCode}` : ""
                            if(urlCode.startsWith("https://") || urlCode.startsWith("http://")) {
                              url = urlCode
                            }

                            vm.esg = {
                              name: this.language === "ko" ? result?.[0]?.menuNames?.korean : result?.[0]?.menuNames?.english,
                              url
                            }
                          }
                        }
                      })

                      // ir 기업지배 메뉴 조회
                      ajax.get('/api/ir/corporates/menus').then((res) => {
                        if(res?.success) {
                          if((res?.data ?? []).length > 0) {
                            vm.ir = {
                              name: this.language === "ko" ? res?.data?.[0]?.menuNames?.korean : res?.data?.[0]?.menuNames?.english,
                              url: `/${this.language}/ir/corporate/corporate-${res?.data?.[0]?.urlCode}`
                            }
                          }
                        }
                      })
                  },
                  getNewsDisabled() {
                      const vm = this;
                      ajax.get('/api/contents/news_display_locale').then((res) => {
                          if (res?.success) {
                              vm.newsDisabled = res?.data?.content ?
                                  JSON.parse(res.data.content)
                              : { en: false, ja: false, zhhans: false, zhhant: false };
                              vm.$forceUpdate();
                          }
                      });
                  },
              }
          })
          .use(vueI18n)
          .mount('#header');
      }
    </script>

    <style>
      [v-cloak] {
        display: none;
      }
    </style>

    <div class="skip">
      <span class="blind">skip navigation</span>
      <ul>
        <li><a href="#pageNavi">메뉴 바로가기</a></li>
        <li><a href="#main">본문 바로가기</a></li>
        <li><a href="#footer">하단 정보(링크) 바로가기</a></li>
      </ul>
    </div>
    <!-- page-head -->
    <div class="page-head white" id="header" v-cloak>
      <div class="page-head-inner">
        <h1 class="page-subject">
          <a :href="'/' + language" class="page-name"
            >{{ $t('header.page-name') }}</a
          >
        </h1>
        <div class="page-navi" id="pageNavi">
          <ul class="gnb-list">
            <li class="gnb-item has-2depth">
              <a :href="'/' + language + '/about/overview'" class="gnb-name"
                >{{ $t('header.컴투스') }}</a
              >
              <span class="btn expand"
                ><span class="btn-text blind"
                  >{{ $t('header.컴투스') }}</span
                ></span
              >
              <div class="lnb">
                <ul class="lnb-list">
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/about/overview'"
                      class="lnb-name"
                      >{{ $t('header.소개') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/about/game-business'"
                      class="lnb-name"
                      >{{ $t('header.게임사업') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/about/publishing'"
                      class="lnb-name"
                      >{{ $t('header.퍼블리싱') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/about/history'"
                      class="lnb-name"
                      >{{ $t('header.연혁') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a :href="'/' + language + '/about/ci'" class="lnb-name"
                      >{{ $t('header.ci') }}</a
                    >
                  </li>
                  <li v-if="['ko'].includes(language)" class="lnb-item">
                    <a
                      :href="'/' + language + '/about/com2us-on'"
                      class="lnb-name"
                      >{{ $t('header.컴투스온') }}</a
                    >
                  </li>
                  <li v-if="['en'].includes(language)" class="lnb-item">
                    <a
                      :href="'/' + language + '/about/press-kit'"
                      class="lnb-name"
                      >{{ $t('header.presskit') }}</a
                    >
                  </li>
                  <!--
                                <li v-if="['ko'].includes(language)" class="lnb-item ext">
                                    <a :href="'/' + language + '/about/news-list'" class="lnb-name">{{ $t('header.news') }}</a>
                                </li>
                                -->
                  <li
                    v-if=" (language === 'en' && newsDisabled?.en) || ( language === 'ja' && newsDisabled?.ja ) || ( language === 'zh-hans' && newsDisabled?.zhhans ) || ( language === 'zh-hant' && newsDisabled?.zhhant ) "
                    class="lnb-item"
                  >
                    <a
                      :href="'/' + language + '/about/news-list'"
                      class="lnb-name"
                      >{{ $t('header.news') }}</a
                    >
                  </li>
                  <li v-if="['ko'].includes(language)" class="lnb-item">
                    <a
                      href="https://on.com2us.com/press_category/com2us"
                      class="lnb-name"
                      target="_blank"
                      >기업 소식</a
                    >
                  </li>
                </ul>
              </div>
            </li>
            <li v-if="['ko', 'en'].includes(language)" class="gnb-item ir">
              <a :href="ir.url" class="gnb-name">IR</a>
              <span class="btn expand"
                ><span class="btn-text blind"
                  >{{ $t('header.컴투스') }}</span
                ></span
              >
              <div class="lnb">
                <ul class="lnb-list">
                  <li class="lnb-item">
                    <a :href="ir.url" class="lnb-name">{{ ir.name }}</a>
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/ir/disclosure/disclosure-announcements'"
                      class="lnb-name"
                      >{{ $t('header.공시정보') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/ir/stock/market-price'"
                      class="lnb-name"
                      >{{ $t('header.주가현황') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/ir/finance/finance-info-year'"
                      class="lnb-name"
                      >{{ $t('header.재무정보') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/ir/data/data-earnings'"
                      class="lnb-name"
                      >{{ $t('header.ir활동') }}</a
                    >
                  </li>
                  <li class="lnb-item">
                    <a
                      :href="'/' + language + '/ir/disclosure/disclosure-notice-list'"
                      class="lnb-name"
                      >{{ $t('header.공고') }}</a
                    >
                  </li>
                </ul>
              </div>
            </li>
            <li v-if="['ko', 'en'].includes(language)" class="gnb-item">
              <a :href="esg.url" class="gnb-name">{{ $t('header.esg') }}</a>
            </li>
            <template v-for="item in recruits">
              <li
                v-if="item.locale === language && item.enabled && !['DE', 'FR', 'ES', 'PT', 'IT'].includes(accessCountry)"
                class="gnb-item ext"
              >
                <a :href="item.url" class="gnb-name" target="_blank"
                  >{{ $t('header.채용') }}</a
                >
              </li>
              <!--유럽(eu) 지정된 5개 국가만 언어 선택 항목에 존재하지 않으므로 별도 관리-->
              <li
                v-if="item.locale === 'eu' && item.enabled && ['DE', 'FR', 'ES', 'PT', 'IT'].includes(accessCountry)"
                class="gnb-item ext"
              >
                <a :href="item.url" class="gnb-name" target="_blank"
                  >{{ $t('header.채용') }}</a
                >
              </li>
            </template>
          </ul>
        </div>
        <div class="page-aside">
          <div class="page-util has-2depth">
            <a href="#" class="btn icon language"
              ><span class="btn-text blind"
                >{{ $t('header.언어설정') }}</span
              ></a
            >
            <div class="lnb language">
              <ul class="lnb-list">
                <li
                  v-for="item in languages"
                  class="lnb-item"
                  :class="{ active: item.value === language }"
                >
                  <a
                    href="#"
                    class="lnb-name"
                    @click="selectLanguage(item.value)"
                    >{{ item.label }}</a
                  >
                </li>
              </ul>
            </div>
          </div>
          <div class="page-control">
            <a href="#" class="btn icon goto-page-navi"
              ><span class="btn-text blind"
                >{{ $t('header.전체메뉴') }}</span
              ></a
            >
          </div>
        </div>
      </div>
    </div>
    <!-- //page-head -->
  

    <!-- 바디-->
    <div class="page-body">
        <!-- local-body -->
        
    <main id="main" class="page server-error">
        <div class="local">
            <div class="local-body">
                <section class="section">
                    <div class="cursor"></div>
                    <div class="section-head">
                        <div class="four left-four">
                            <img src="/dist/images/error/four.svg">
                        </div>
                        <div class="center-img">
                            <img class="" src="/dist/images/error/face-1.svg">
                            <img class="eyes" src="/dist/images/error/eyes.svg">
                        </div>
                        <div class="four right-four">
                            <img src="/dist/images/error/four.svg">
                        </div>
                    </div>
                    <div class="section-body" id="appCom2us1" v-cloak>
                        <p class="para">{{ $t('페이지없음') }}</p>
                        <p class="msg" v-html="$t('존재하지않음')"></p>
                    </div>
                    <div class="section-util" id="appCom2us2" v-cloak>
                        <div class="btn-display">
                            <div class="btn-area">
                                <a :href="'/'+language" class="btn ar-icon arrow-right"><span class="btn-text">{{ $t('메인으로이동') }}</span></a>
                            </div>
                        </div>
                    </div>
                </section>
            </div>
        </div>
    </main>

        <!-- //local-body -->
    </div>

    <!-- 푸터-->
    <!-- 2025.06.23. 오픈준비 -->
    

    <script>
        window.addEventListener('load', initFooterScript);
        function initFooterScript() {
            Vue.createApp({
                data() {
                    return {
                        language: null || 'ko',
                        footerInfo: {},
                        footerLinks: [],
                        accessCountry: 'KR',
                    };
                },
                methods: {
                    getSocialClass(socialType) {
                        const classMap = {
                            "YOUTUBE": "youtube",
                            "INSTAGRAM": "instagram",
                            "FACEBOOK": "facebook",
                            "TWITTER": "twitter",
                            "NAVER-CAFE": "naver-cafe",
                            "NAVER-ROUNGE": "naver-rounge",
                            "KAKAO-CHANNEL": "kakao-channel",
                            "WEIBO": "weibo",
                            "YOUKU": "youku",
                            "WECHAT": "wechat",
                            "TIKTOK": "tiktok",
                        };
                        return classMap[socialType] || "";
                    }
                },
                mounted(){
                    const vm = this;

                    // URL 경로의 첫 번째 세그먼트를 언어 코드로 사용
                    const segments = window.location.pathname.split('/');
                    const availableLangs = ["ko","en","ja","zh-hans","zh-hant"];
                    let urlLang = (segments.length > 1 && segments[1]) ? segments[1].toLowerCase() : "";

                    if (!urlLang || !availableLangs.includes(urlLang)) { const browserLang = navigator.language || navigator.userLanguage; if (browserLang.startsWith('ko')) return 'ko'; if (browserLang.startsWith('ja')) return 'ja'; if (browserLang.startsWith('zh-CN') || browserLang.startsWith('zh-Hans')) return 'zh-hans'; if (browserLang.startsWith('zh-TW') || browserLang.startsWith('zh-Hant') || browserLang.startsWith('zh-HK')) return 'zh-hant'; if (browserLang.startsWith('en')) return 'en';
                        this.language = browserLang;
                    } else {
                        this.language = urlLang;
                    }

                    Promise.all([
                        ajax.get('/api/footer/info'),
                        ajax.get('/api/footer/links')
                    ]).then(([info, links]) => {
                        if (info.success) {
                            const data = info?.data ?? {};
                            if (data.companyInfo) {
                                data.companyInfo = data.companyInfo.replace(/\n/g, '<br>');
                            }
                            if (data.companyAddress) {
                                data.companyAddress = data.companyAddress.replace(/\n/g, '<br>');
                            }
                            vm.footerInfo = data;
                        }

                        if (links.success) {
                            vm.footerLinks = links?.data ?? [];
                        }

                        vm.footerLinks.forEach(item => {
                            switch (vm.language) {
                                case 'ko':
                                    item.url = item.urlKo;
                                    break;
                                case 'en':
                                    item.url = item.urlEn;
                                    break;
                                case 'ja':
                                    item.url = item.urlJa;
                                    break;
                                case 'zh-hans':
                                    item.url = item.urlZhhans;
                                    break;
                                case 'zh-hant':
                                    item.url = item.urlZhhant;
                                    break;
                                default:
                                    break;
                            }
                        });

                        vm.$forceUpdate();
                        frontCommon.Html.reset();
                    });

                    fetch("https://get.geojs.io/v1/ip/country.json")
                        .then(res => res.json())
                        .then(data => {
                            vm.accessCountry =  data.country.toUpperCase();
                            /*
                            대한민국	KR
                            일본	JP
                            미국	US
                            중국 (간체)	CN
                            대만 (번체)	TW
                            */

                        })
                        .catch(err => console.error("국가 코드 조회 실패:", err));

                }
            }).use(vueI18n).mount('.app-footer');
        }
    </script>

    <footer id="footer" data-lenis-prevent class="app-footer" v-cloak>
        <div class="footer-inner" :class="{ja : language==='ja'}">
            <div class="footer-head">
                <div class="footer-subject"><span class="footer-name blind">Com2us</span></div>
                <div v-if="language === 'ko'" v-html="footerInfo.companyInfo" class="data-list module-b"></div>
                <div v-if="language === 'ko'" v-html="footerInfo.companyAddress" class="data-list module-b address"></div>

                <div class="sns-list">
                    <template v-for="item in footerLinks">
                        <a v-if="item.url" :href="item.url" target="_blank" class="sns-item">
                            <p v-if="item.socialType === 'SELF'">
                                <img :src="'/api/files/' + item.iconFileId + '/download'" style="width: 2rem;" alt="" />
                            </p>
                            <p v-else :class="getSocialClass(item.socialType)">
                                <span class="sns-txt blind">{{ item.socialType }}</span>
                            </p>
                        </a>
                    </template>
                </div>
            </div>
            <div class="footer-body">
                <div class="navi-list">
                    <div class="navi-item"><a :href="'/' + language + '/footer/sitemap'" class="navi-text">{{ $t('footer.사이트맵') }}</a></div>
                    <div v-if="['ko'].includes(language)" class="navi-item"><a :href="`/${language}/footer/roadmap`" class="navi-text">{{ $t('footer.찾아오시는길') }}</a></div>
                    <div v-if="['ko'].includes(language)" class="navi-item"><a :href="`/${language}/footer/ethicshotline`" class="navi-text">클린제보센터</a></div>
                    <div v-if="['ko'].includes(language)" class="navi-item"><a :href="`/${language}/footer/human-rights`" class="navi-text">인권침해 신고채널</a></div>
                    <div v-if="['ko'].includes(language)" class="navi-item"><a :href="`/${language}/footer/notice-list`" class="navi-text">{{ $t('footer.공지사항') }}</a></div>
                </div>
                <div class="navi-list">
                    <div class="navi-item white">
                        <a v-if="['ko'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M87/T50" target="_blank" class="navi-text">{{ $t('footer.개인정보처리방침') }}</a>
                        <a v-if="['en'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M121/T3" target="_blank" class="navi-text">{{ $t('footer.개인정보처리방침') }}</a>
                        <a v-if="['ja'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M10/T3" target="_blank" class="navi-text">{{ $t('footer.개인정보처리방침') }}</a>
                        <a v-if="['zh-hans'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M11/T3" target="_blank" class="navi-text">{{ $t('footer.개인정보처리방침') }}</a>
                        <a v-if="['zh-hant'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M12/T3" target="_blank" class="navi-text">{{ $t('footer.개인정보처리방침') }}</a>
                    </div>
                    <div class="navi-item">
                        <a v-if="['ko'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M87/T1" target="_blank" class="navi-text">{{ $t('footer.이용약관') }}</a>
                        <a v-if="['en'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M121/T1" target="_blank" class="navi-text">{{ $t('footer.이용약관') }}</a>
                        <a v-if="['ja'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M10/T1" target="_blank" class="navi-text">{{ $t('footer.이용약관') }}</a>
                        <a v-if="['zh-hans'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M11/T1" target="_blank" class="navi-text">{{ $t('footer.이용약관') }}</a>
                        <a v-if="['zh-hant'].includes(language)" href="https://terms.withhive.com/terms/policy/view/M12/T1" target="_blank" class="navi-text">{{ $t('footer.이용약관') }}</a>
                    </div>
                    <div v-if="['ko'].includes(language)" class="navi-item">
                        <button class="navi-text btn-modal" data-modal-id="protection">{{ $t('footer.정보보호현황') }}</button>
                    </div>
                    <div v-if="!['KR'].includes(accessCountry)" class="navi-item">
                        <a :href="'/' + language + '/footer/cookie-set'" class="navi-text">{{ $t('footer.쿠키설정') }}</a>
                    </div>
                    <div v-if="!['KR'].includes(accessCountry)" class="navi-item">
                        <a href="https://terms.withhive.com/terms/policy/view/M545/T431" target="_blank" class="navi-text">{{ $t('footer.쿠키정책') }}</a>
                    </div>
                </div>
            </div>
            <div class="footer-util">
                <div class="dropdown">
                    <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
                        <span class="btn-txt">{{ $t('footer.familysite') }}</span>
                    </button>
                    <ul class="dropdown-menu">
                        <li><a :href="'https://holdings.com2us.com/'+language" class="dropdown-item" target="_blank">{{ $t('footer.컴투스홀딩스') }}</a></li>
                        <li><a :href="'https://platform.com2us.com/'+language" class="dropdown-item" target="_blank">{{ $t('footer.컴투스플랫폼') }}</a></li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="footer-aside">
            <div class="footer-aside-inner">
                <p class="copyright">© Com2uS Corp. All Rights Reserved.</p>
                <ul v-if="['ko'].includes(language)" class="info-logo">
                    <li class="info-logo-link">
                        <button type="button" class="navi-text btn-modal" data-modal-id="protection">
                            <img src="/dist/images/logo/isms.png" alt="isms 로고">
                        </button>
                    </li>
                    <li class="info-logo-link">
                        <button type="button" class="navi-text btn-modal" data-modal-id="protection">
                            <img src="/dist/images/logo/dnv.png" alt="dnv 로고">
                        </button>
                    </li>
                </ul>
            </div>
        </div>
        <div class="floating-display btn-display">
            <div class="btn-area">
                <button type="button" id="topBtn" class="btn icon style-b color-c arrow-up">
                    <span class="btn-text blind">Top</span>
                </button>
                <!--
                <a href="/" id="homeBtn" class="btn icon style-d color-d home"
                   th:if="${currentUri != null and currentUri.contains('/main/game-detail/') }">
                    <span class="btn-text blind">Home</span>
                </a>
                -->
            </div>
        </div>
    </footer>

    <div class="popup-dimed"></div>

    <!-- 정보 보호 현황 팝업 style-a 시작 -->
    <div class="modal module-a style-a fade" id="protection" data-bs-keyboard="false" tabindex="-1" aria-labelledby="protectionModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <span class="modal-logo"><img src="/dist/images/logo/popup-logo.svg" alt="isms 로고"></span>
                    <button type="button" class="btn open mo-only"><span class="btn-text blind">팝업 펼치기</span></button>
                    <button type="button" class="btn close" data-bs-dismiss="modal" aria-label="Close"></button>
                    <em class="modal-subject">정보보호현황</em>
                </div>
                <div class="modal-body">
                    <div class="section">
                        <div class="section-wrap">
                            <div class="section-head">
                                <p class="section-summary">
                                    컴투스는 안전한 서비스 제공과 이용자의 (개인) 정보보호를 위해 아래와 같이 정보보호관리체계
                                    인증 취득 및 (개인) 정보보호 활동을 주기적으로 실천하고 있습니다.
                                </p>
                            </div>
                            <div class="section-body">
                                <div class="data-list module-i">
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-head">
                                                <div class="data-name">정보보호관리체계(ISMS)</div>
                                            </div>
                                            <div class="data-body">
                                                <div class="para">
                                                    과학기술정보통신부 및 개인정보보호위원회에서 고시하는 정보보호 관리체계 인증 취득 <br>
                                                    <strong>[인증 범위]</strong> 온라인 및 모바일 게임 서비스 (심사받지 않은 물리적 인프라 제외) <br>
                                                    <strong>[유효 기간]</strong> 2023. 12. 16. ~ 2026. 12. 15.
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-head">
                                                <div class="data-name">정보보호 경영시스템(ISO/IEC27001)</div>
                                            </div>
                                            <div class="data-body">
                                                <div class="para">
                                                    국제표준화기구(ISO) 및 국제전기기술위원회(IEC)에서 제정한 정보보호 관리체계 국제 규격 인증 취득<br>
                                                    <strong>[인증 범위]</strong> Information Security Management System related to Game Service Development and Operation. This is in accordance with the Statement of Applicability version 1.3<br>
                                                    <strong>[유효 기간]</strong> 2025. 09. 09. ~ 2028. 09. 08.
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-body">
                                                <div class="data-figure">
                                                    <img src="/dist/images/popup/certification.png" alt="인증서">
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-head">
                                                <div class="data-name">정보보호 조직 운영</div>
                                            </div>
                                            <div class="data-body">
                                                <div class="para">
                                                    <strong>CISO, CPO 임명</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">정보보호 및 개인정보보호 조직을 통솔할 정보보호최고책임자(CISO)와 개인정보보호책임자(CPO)를 정보보호 및 개인정보보호조직의 최고의사결정자로 임명하여 조직을 운영합니다.</li>
                                                        <li class="bullet-item">CISO 와 CPO 는 정보보호와 개인정보 각 영역에 대한 전반적인 지식과 통솔력을 보유한 임원급 직책자로 하며, 최고경영자의 승인을 받아 임명합니다.</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>(개인)정보보호위원회 운영</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">CISO, CPO 및 주요 임원으로 구성된 (개인)정보보호위원회를 운영하여, (개인)정보보호 관리체계 운영 및 중요이슈에 대한 의사결정을 진행합니다.</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>전담조직 운영</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">(개인)정보보호 정책 기획, 정보보호시스템 운영, 침해사고 분석 및 대응 등 전문 지식을 보유한 전담 조직을 통해 최적의 정보보호 관리체계를 수립하고 운영 합니다.</li>
                                                    </ul>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-head">
                                                <div class="data-name">정보보호 및 개인정보보호 정책</div>
                                            </div>
                                            <div class="data-body">
                                                <div class="para">
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">컴투스는 정보보호 관련 법률과 제도를 기반하여, 컴투스만의 비즈니스 환경을 고려한 정보보호 및 개인정보보호 정책을 운영합니다.</li>
                                                        <li class="bullet-item">정보보호 및 개인정보보호 정책은 정보보호관리체계 운영을 위한 전 영역을 포함하고 있습니다.</li>
                                                        <li class="bullet-item">정보보호 및 개인정보보호정책은 매년 개정되고 있습니다. 정책 운영을 위한 지침과 가이드 또한, 매년 혹은 필요 시 수시 개정 진행하여, 항시 최신화를 유지 관리합니다.</li>
                                                    </ul>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="data-item">
                                        <div class="data-wrap">
                                            <div class="data-head">
                                                <div class="data-name">(개인) 정보보호 활동</div>
                                            </div>
                                            <div class="data-body">
                                                <div class="para">
                                                    <strong>전담 조직 운영</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">(개인)정보보호 정책 기획, 정보보호시스템 운영, 침해사고 분석 및 대응 등 전문 지식을 보유한 전담 조직을 통해 최적의 정보보호 관리체계를 수립하고 운영합니다.</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>정보보호</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">정보보호 법률, 환경 및 제도를 고려하여 내부 정책, 지침 및 절차를 수립하고 운영합니다.</li>
                                                        <li class="bullet-item">매년 정보보호 관리체계(ISMS)를 점검하고 인증을 취득함으로써 정기적으로 서비스의 안전성과 신뢰성을 검증합니다.</li>
                                                        <li class="bullet-item">모든 임직원을 대상으로 (개인)정보보호 교육 , 정보보호 캠페인(사무환경점검, 보안포스터 제작 등), 스팸메일 모의훈련 등을 실시하여 보안인식 향상을 도모하고 있습니다.</li>
                                                        <li class="bullet-item">정보보호 전담 인력은 매년 전문교육 이수 및 자격증 취득과 전문 교육을 이수하고 있습니다.</li>
                                                        <li class="bullet-item">23년도에는 정보보호 및 개인정보, 사이버보안에 대한 최신 트렌드와 동향 세미나 참석과 심도있는 전문가 교육 이수, 자격증을 취득했습니다.<br>
                                                            - 정보보호 및 개인정보보호 전문 교육 및 자격증 : 개인정보 법률 이슈 세미나 및 교육 참석, ISMS/ISMS-P, CPPG 등<br>
                                                            - 침해사고, 모의해킹, 사이버보안 전문 교육 및 자격증 : 해킹방지 관련 전문 워크샵, 클라우드, 가상자산 분야 전문 세미나, 클라우드
                                                        </li>
                                                        <li class="bullet-item">그 외 정보보호 및 개인정보 관련 위험 발생 가능성이 높은 직무는 주요직무자로 지정하여 전사 임직원 교육 외 차별화된 교육을 진행하고 있습니다.<br>- 23년 5월, 업무 수행 시 적용이 필요한 정보보호 활동 사항에 대해 교육을 진행했습니다.</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>개인정보보호</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">서비스 이용자의 개인정보를 수집, 이용하고 파기하는 전 과정에서 관련 법규를 검토하여 안전성을 확보하기 위한 조치를 취하고 있습니다.</li>
                                                        <li class="bullet-item">EU GDPR, 미국 CCPA 등 해외 각국의 프라이버시 보호 법률과 규제를 검토하여 리스크를 최소화하고 있습니다.</li>
                                                        <li class="bullet-item">매년 자사로부터 개인정보를 제공받는 협력사(수탁사)의 개인정보 관리 현황과 수준을 점검하고 있습니다.</li>
                                                        <li class="bullet-item">개인정보 처리에 대한 투명성을 높이고 정보주체(서비스 이용자)가 쉽게 이해할 수 있도록 개인정보 처리방침을 마련하여 고지하고 있습니다.(라벨링 및 목차화)</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>보안시스템 운영 및 보안사고 예방</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">보안 위협을 신속하게 인지하고 대응할 수 있는 정보보호 전문 솔루션을 구축하고, 전문 보안업체와 협업하여 24시간 365일 중단 없이 모니터링을 실시하여 보안 위협에 대응하고 있습니다.</li>
                                                        <li class="bullet-item">해킹 등 보안 사고를 예방하기 위해 웹서비스, 앱 서비스 및 IT인프라 시스템의 취약점을 점검하고, 모의해킹을 수행하는 등 보안성 검토와 점검을 수행합니다.</li>
                                                    </ul>
                                                </div>
                                                <div class="para">
                                                    <strong>위험관리</strong>
                                                    <ul class="bullet-list module-b">
                                                        <li class="bullet-item">컴투스는 정보보호 위험을 최소화하고, 안전한 서비스 제공을 위해 다양한 관점과 영역을 고려한 방법론을 수립했습니다.</li>
                                                        <li class="bullet-item">취약점과 위협 그리고 위험을 분석하여 위험도출 최대화와 잔존위험 최소화를 목표로 개선관리 활동을 수행합니다.</li>
                                                    </ul>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- 정보 보호 현황 팝업 style-a 끝 -->

    <!-- Google Tag Manager (noscript) -->
    <noscript>
        <iframe id="gtm-iframe" src="https://www.googletagmanager.com/ns.html?id=GTM-T24H294T" height="0" width="0" style="display:none;visibility:hidden"></iframe>
    </noscript>
    <!-- End Google Tag Manager (noscript) -->


</div>

<!-- 공통 모달 구성 -->


    <style>
        /* #loadingBar 로딩 오버레이 스타일 */
        #loadingBar.loading-overlay {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, 0.5); /* 반투명 배경 */
            display: flex;
            justify-content: center;
            align-items: center;
            z-index: 1000;
        }
        #loadingBar.hidden {
            display: none;
        }
        #loadingBar .spinner {
            border: 12px solid #f3f3f3;
            border-top: 12px solid #3498db;
            border-radius: 50%;
            width: 60px;
            height: 60px;
            animation: loadingBarSpin 1.5s linear infinite;
        }
        @keyframes loadingBarSpin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        /* 토스트 컨테이너 스타일 */
        #toastContainer {
            position: fixed;
            bottom: 30px;
            left: 50%;
            transform: translateX(-50%);
            background-color: rgba(0, 0, 0, 0.7);
            color: #fff;
            padding: 12px 20px;
            border-radius: 20px;
            font-size: 14px;
            opacity: 0;
            transition: opacity 0.3s ease-in-out;
            pointer-events: none; /* 마우스 이벤트 방지 */
            z-index: 9999;
        }

        /* 토스트가 표시될 때 */
        #toastContainer.show {
            opacity: 1;
        }
    </style>

    <script>
        /**
         * 공통 알림창 함수 (기본 alert 기반)
         * @param {string} message - 사용자에게 보여줄 메시지
         * @param {function} [onClose] - 알림창 닫힐 때 실행할 콜백 함수 (선택 사항)
         */
        function pentaAlert(message, onClose) {
            alert(message);
            if (typeof onClose === 'function') {
                onClose();
            }
        }

        /**
         * 공통 alert 창 함수 (기본 alert 기반, 비동기 처리)
         * @param {string} message - 사용자에게 보여줄 메시지
         * @param {function} [onClose] - 에러창 닫힐 때 실행할 콜백 함수 (선택 사항)
         * @returns {Promise<void>} - alert 창 닫힘 후 resolve
         */
        function pentaAwaitAlert(message, onClose) {
            return new Promise((resolve) => {
                alert(message);
                if (typeof onClose === 'function') {
                    onClose();
                }
                resolve(true);
            });
        }

        /**
         * 공통 에러 alert 창 함수 (기본 alert 기반)
         * @param {string} message - 사용자에게 보여줄 에러 메시지
         * @param {function} [onClose] - 에러창 닫힐 때 실행할 콜백 함수 (선택 사항)
         */
        function pentaError(message, onClose) {
            alert(message);
            if (typeof onClose === 'function') {
                onClose();
            }
        }

        /**
         * 공통 confirm 창 함수 (기본 confirm 기반)
         * @param {string} message - 사용자에게 보여줄 메시지
         * @param {function} [onSuccess] (선택 사항)
         * @param {function} [onFailure] (선택 사항)
         * @returns {Promise<boolean>} - 사용자가 확인을 클릭하면 resolve(true), 취소를 클릭하면 resolve(false)
         */
        function pentaConfirm(message, onSuccess, onFailure) {
            return new Promise((resolve, reject) => {
                if (confirm(message)) {
                    resolve(true);
                    if (typeof onSuccess === 'function') {
                        onSuccess();
                    }
                } else {
                    resolve(false);
                    if (typeof onFailure === 'function') {
                        onFailure();
                    }
                }
            });
        }

        /**
         * 로딩바 표시 및 숨김 기능
         */
        const loadingBar = {
            show: function () {
                // 요청에 의해 삭제함
                // document.getElementById("loadingBar").classList.remove("hidden"); // 로딩바 표시
            },
            hide: function () {
                document.getElementById("loadingBar").classList.add("hidden"); // 로딩바 숨김
            }
        };

        /**
         * 토스트 메시지를 잠시 표시하는 함수
         * @param {string} message - 토스트에 표시할 메시지
         */
        function showToast(message) {
            const toast = document.getElementById('toastContainer');
            toast.textContent = message;
            toast.classList.add('show');

            // 2초 뒤에 토스트 숨김
            setTimeout(() => {
                toast.classList.remove('show');
            }, 2000);
        }
    </script>

    <!-- 로딩바 -->
    <div id="loadingBar" class="loading-overlay hidden">
        <div class="spinner" role="status"></div>
    </div>

    <!-- 토스트 메시지를 표시할 컨테이너 -->
    <div id="toastContainer">메시지</div>



</body>
</html>
