<!DOCTYPE html>
<html lang="ko">

<head>
	


	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
	<meta name="msapplication-TileColor" content="#ffffff" />

    <meta name="robots" content="index,follow">
    <meta name="robots" content="ALL">

    <meta http-equiv="imagetoolbar" content="no">
    <meta http-equiv="Cache-Control" content="No-Cache">
    <meta http-equiv="Pragma" content="No-Cache">
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

    <meta name="content-language" content="kr">
    <meta http-equiv="content-type" content="text/html; charset=utf-8">

    <meta name="description" content="GPTalk" />
	<meta name="keywords" content="GPTalk, 인공지능">
    <meta name="author" content="GPTalk" />
	

    <meta property="og:type" content="website" />
    <meta property="og:site_name" content="GPTalk" />
    <meta property="og:title" content="GPTalk" />
    <meta property="og:description" content="GPTalk" />
    <meta property="og:image" content="/images/logo.jpg" />
    <meta property="og:url" content="https://GPTalk.kr" />

    <meta property="twitter:card" content="summary" />
    <meta property="twitter:site" content="GPTalk" />
    <meta property="twitter:title" content="GPTalk" />
    <meta property="twitter:description" content="GPTalk" />
    <meta property="twitter:image" content="/images/logo.jpg" />
    <meta property="twitter:url" content="https://GPTalk.kr" />

	<title>GPTalk</title>

	<!-- ================== 기본 시작 ================== -->
	<script src="/js/dscd_cm.js"></script>
	<script src="/js/dscd_auth.js"></script>
	<script src="/js/dscd_itm.js"></script>
	<script src="/js/dscd_cmnt.js"></script>
	<script src="/js/dscd_stor.js"></script>
	<script src="/js/dscd_util.js"></script>
	<script src="/common/js/auth.js"></script>



	<script src="https://connect.facebook.net/en_US/sdk.js"></script>
	<script src="https://developers.kakao.com/sdk/js/kakao.min.js"></script>




	<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
	<script src="/common/knockout/knockout-3.4.2.js"></script>
	<!-- ================== 기본 끝 ================== -->
	




	<!-- ------------------ BEGIN axios -------------------------------------------------------------------------------------------------------------------------------------------------- -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.8/axios.min.js" integrity="sha512-PJa3oQSLWRB7wHZ7GQ/g+qyv6r4mbuhmiDb8BjSFZ8NZ2a42oTtAq5n0ucWAwcQDlikAtkub+tPVCw4np27WCg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
	<!-- ------------------ BEGIN Daum Postcode -------------------------------------------------------------------------------------------------------------------------------------------------- -->
	<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>

	<!-- ------------------ BEGIN axios -------------------------------------------------------------------------------------------------------------------------------------------------- -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.8/axios.min.js" integrity="sha512-PJa3oQSLWRB7wHZ7GQ/g+qyv6r4mbuhmiDb8BjSFZ8NZ2a42oTtAq5n0ucWAwcQDlikAtkub+tPVCw4np27WCg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>	


	<!-- ------------------ BEGIN axios -------------------------------------------------------------------------------------------------------------------------------------------------- -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.6.8/axios.min.js" integrity="sha512-PJa3oQSLWRB7wHZ7GQ/g+qyv6r4mbuhmiDb8BjSFZ8NZ2a42oTtAq5n0ucWAwcQDlikAtkub+tPVCw4np27WCg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
	<!-- ------------------ BEGIN Daum Postcode -------------------------------------------------------------------------------------------------------------------------------------------------- -->
	<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
	<!-- ------------------ BEGIN letcode (로컬 서빙 - letcode.kr CDN 의존성 제거) --------------------------------- -->
	<script type="text/javascript" src="/js/letcode_v2/util.js"></script>
	<script type="text/javascript" src="/js/letcode_v2/svc.js"></script>
	<script type="text/javascript" src="/js/letcode_v2/cookie.js"></script>
	<script type="text/javascript" src="/js/letcode_v2/lc_comp.js"></script>
    <link type="text/css" href="/css/letcode_v2/comp-orange.css" rel="stylesheet" />
	<!-- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->



	<script type="text/javascript"> 
	
		// - 파라메터 히스토리 지우기
		//history.replaceState({}, null, location.pathname);

		const _ctx_rest = "http:\/\/stdo:8019\/stdo\/dscd\/202500000016\/web";
		const _ctx_web = "https:\/\/gptalk.co.kr";
		const _ctx_api = "http:\/\/stdo:8019\/web";

		const formToJSON = (elements) => []
			.reduce
			.call(elements, (data, element) => {
			data[element.name] = element.value;
			return data;
			}, {});

	</script>


	<style>
		.d-none {
			display: none!important
		}

        .hidden {
            display: none!important
        }
	</style>

	<!-- Phase 20.0: Google Analytics 4 -->
	
		
			<script src="https://www.googletagmanager.com/gtag/js?id=G-ELFZ1E64HM" async="async"></script>
			<script>
				window.dataLayer = window.dataLayer || [];
				function gtag(){dataLayer.push(arguments);}
				gtag('js', new Date());
				gtag('config', "G-ELFZ1E64HM");
			</script>
		
	

	<!-- ================== BEGIN content-css ================== -->
	

	<link rel="stylesheet" href="/css/pages/home.css" />


	<!-- ================== END content-css ================== -->
	<script>

	</script>



	


    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">


        <link rel="stylesheet" href="/css/common/reset.css" />
        <link rel="stylesheet" href="/css/common/variables.css" />
        <link rel="stylesheet" href="/css/common/base.css" />
        <link rel="stylesheet" href="/css/common/layout.css" />

		<!-- Scripts -->
		<script src="/js/lib/jquery-3.7.1.min.js"></script>
		<script src="/js/common.js"></script>
		<script src="/js/common/header.js"></script>
		<script src="/js/pages/home.js"></script>

    </head>



</head>

<body>

		<!DOCTYPE html>
<html lang="ko">


	<!-- DSCD 사용자로그인 -->
	<form class="d-none" method="POST" action="/member/login">
		<input id="ref_signin_id" type="hidden" name="login_id">
		<input id="ref_signin_pw"  type="password" name="login_pwd">
						
		<input id="ref_signin_login_nm"  type="hidden" name="login_nm">
		<input id="ref_signin_usr_email"  type="hidden" name="usr_email">
		<input id="ref_signin_usr_thumbnail"  type="hidden" name="usr_thumbnail">
		<input id="ref_signin_login_type_cd"  type="hidden" name="login_type_cd">
		<input id="ref_signin_social_provider"  type="hidden" name="social_provider">
		<input id="ref_signin_social_token"  type="hidden" name="social_token">

		<button id="btnSignIn" type="submit">로그인</button>
	</form>

	<form class="d-none" id="frm" method="POST" action="/member/join" onsubmit="return auth_handler.fnVerify_frm();">

		<li>
			<div class="input_cnt"><input id="ref_signup_id" type="text" name="login_id" value="" class="input_b" /></div>
			<div class="input_cnt"><input id="ref_signup_pw" type="text" name="login_pwd" value="" class="input_b" /></div>

			<div class="input_cnt"><input id="ref_signup_login_nm" type="text" name="login_nm" value="" class="input_b" /></div>

			<div class="input_cnt"><input id="ref_signup_usr_email" type="text" name="usr_email" value="" class="input_b" /></div>
			<div class="input_cnt"><input id="ref_signup_usr_thumbnail" type="text" name="usr_thumbnail" class="input_b" /></div>
			<div class="input_cnt"><input id="ref_signup_login_type_cd" type="text" name="login_type_cd" value="EMAIL" class="input_b" /></div>

			<div class="input_cnt"><input type="text" name="step" value="0" class="input_b" /></div>
		</li>

		<div class="board_btns">
			<button id="btnSignUp" type="submit" class="btn type1">회원가입</button>
		</div>

	</form>



</html>


		<!-- BEGIN #app -->
		<!DOCTYPE html>
<html lang="ko">


	<header class="header js-header">
		<div class="header-inner">
			<div class="header-logo">
				<a href="/">
					<img class="logo-desktop" src="/images/common/logo.svg" alt="AiCADEMY GPTalk" />
					<img class="logo-mobile" src="/images/common/logo.svg" alt="AiCADEMY GPTalk" />
				</a>
			</div>

			<nav class="header-nav js-header-nav">
				<ul>
					
						<li>
							<a href="/202500000001">
								<span>서비스소개</span>
							</a>
						</li>
					
						<li>
							<a href="/202500000002">
								<span>학습기록</span>
							</a>
						</li>
					
						<li>
							<a href="/202500000003">
								<span>요금제</span>
							</a>
						</li>
					
					
				</ul>
			</nav>

			<div class="header-account">
				<div class="header-cta header-cta-admin is-hidden">
					<a href="/admin" class="btn">관리자 페이지</a>
				</div>

				
					<div class="header-cta">
						<a href="/member/auth" class="btn">
							<span>로그인</span>
							<img src="/images/icons/up-arrow.png" alt="login icon" />
						</a>
					</div>
				

				
			</div>

			<button class="header-mobile-toggle js-mobile-toggle" aria-label="메뉴">
				<span></span>
			</button>
		</div>
	</header>


</html>

		<!DOCTYPE html>
<html lang="ko">



	<!-- Mobile Modal Menu -->
	<div class="mobile-menu-modal js-mobile-menu">
		<div class="header-height"></div>
		<!-- Modal Content -->
		<div class="mobile-menu-content">
			<!-- Modal Navigation -->
			<nav class="mobile-menu-nav">
				
					<div class="mobile-menu-section" >
						<a href="/202500000001">서비스소개</a>
					</div>
				
					<div class="mobile-menu-section" >
						<a href="/202500000002">학습기록</a>
					</div>
				
					<div class="mobile-menu-section" >
						<a href="/202500000003">요금제</a>
					</div>
				
				
			</nav>

			<!-- Modal CTA Button (비로그인 시) -->
			<div class="mobile-menu-cta">
				<a class="mobile-menu-btn">
					로그인/가입하기
					<img src="/images/icons/up-arrow.png" alt="login icon" />
				</a>
			</div>

			<!-- Modal Avatar (로그인 후) -  제거 -->
			<div class="mobile-menu-avatar is-hidden">
				<a 
					<img src="/images/icons/basic-img.png" alt="avatar" />
				</a>
			</div>
		</div>
	</div>

	<!-- Overlay -->
	<div class="overlay js-overlay"></div>



</html>


		<!-- BEGIN #content -->
		<!-- <th:block th:repl="fragments/content"></th:block> -->

		


	<!-- Main Content -->
	<main class="home">
		<section class="hero">
			<div class="letter-container">
				<p class="main-letter">
					<span class="highlight">효율</span>과
					<span class="highlight-blue">재미</span>를 동시에!
				</p>
				<p class="sub-letter">공부가 즐거워지는 당신만의 강의</p>
			</div>

			<div class="input-container">
				<div class="input-wrapper">
					<!-- 모바일용 input -->
					<input type="text" class="input-box" placeholder="강의 URL을 입력해주세요." />

					<!-- 태블릿/웹용 input -->
					<input id="prdt_url" type="text" class="input-field" placeholder="GPTalk과 함께 공부를 시작할 URL강의를 입력해주세요." />

					<a  href="#" onclick="return handler.prdt_set(event);" class="submit-btn">공부시작</a>
				</div>
			</div>
		</section>

		<!-- Preview Section / Chat -->
		<section class="preview">
			<!-- 모바일 (800px 미만) -->
			<div class="preview-mobile">
				<img src="/images/home/preview/iPhone.png" alt="iPhone" class="iphone-mockup" />
				<img src="/images/home/preview/gpt.png" alt="지피톡봇" class="chat-gpt" />
				<img src="/images/home/preview/friendbot.png" alt="친구봇" class="chat-friendbot" />
				<img src="/images/home/preview/question.png" alt="질문" class="chat-question" />
			</div>

			<!-- 태블릿 (800px ~ 1279px) -->
			<div class="preview-tablet">
				<img src="/images/home/preview/iPad.png" alt="iPhone" class="iphone-mockup" />
				<img src="/images/home/preview/question-tablet.png" alt="질문" class="chat-question" />
				<img src="/images/home/preview/gpt-tablet.png" alt="지피톡봇" class="chat-gpt" />
				<img src="/images/home/preview/friendbot-tablet.png" alt="친구봇" class="chat-friendbot" />
			</div>

			<!-- 데스크탑 (1280px 이상) -->
			<div class="preview-desktop">
				<img src="/images/home/preview/iPad-desktop.png" alt="iPhone" class="iphone-mockup" />
				<img src="/images/home/preview/question-desktop.png" alt="질문" class="chat-question" />
				<img src="/images/home/preview/friendbot-desktop.png" alt="친구봇" class="chat-friendbot" />
				<img src="/images/home/preview/gpt-desktop.png" alt="지피톡봇" class="chat-gpt" />
			</div>
		</section>

		<!-- Desktop에만 있는 구분선 -->
		<section class="desktop-line">
			<img src="/images/home/line.png" alt="line" />
		</section>

		<!-- Features Section -->
		<section class="features js-scroll-animate">
			<p class="features-title">
				소통없는 <span class="black">일방적인 강의</span> 지치셨나요?
			</p>
			<div class="feature-cards">
				<div class="feature-card">
					<div class="feature-img-card">
						<img class="feature-img" src="/images/home/features/m-zz.jpg" alt="낮아지는 집중력" />
					</div>
					<p class="feature-desc">낮아지는 <span class="red">집중력</span></p>
				</div>

				<div class="feature-card">
					<div class="feature-img-card">
						<img class="feature-img" src="/images/home/features/m-question.png" alt="어려운 강의" />
					</div>
					<p class="feature-desc">
						질문을 할 수 없는 <span class="red">답답함</span>
					</p>
				</div>
			</div>
		</section>

		<!-- Benefits Section -->
		<section class="benefits js-scroll-animate">
			<h2>검증된 학습효과로<br />새로운 학습경험을 드립니다</h2>
			<div class="benefit-cards">
				<div class="benefit-card">
					<h3>실시간 답변</h3>
					<p>
						학습 중 궁금한 내용을 실시간으로 물어 실시간으로 답변을 받아보세요
					</p>
					<img src="/images/home/benefits/answer.svg" alt="실시간 답변" />
				</div>
				<div class="benefit-card">
					<h3 class="benefit-card-title">메타인지 향상</h3>
					<p>
						학습 중 궁금한 내용을 실시간으로 물어 실시간으로 답변을 받아보세요
					</p>
					<img src="/images/home/benefits/meta.svg" alt="메타인지 향상" />
				</div>
				<div class="benefit-card">
					<h3>순공량 증가</h3>
					<p>
						학습 중 궁금한 내용을 실시간으로 물어 실시간으로 답변을 받아보세요
					</p>
					<img src="/images/home/benefits/studytime.svg" alt="순공부 증가" />
				</div>
			</div>
		</section>

		<!-- Footer CTA -->
		<section class="footer-cta js-scroll-animate">
			<h2>AICADEMY가<br />당신의 열정을 응원합니다</h2>
			<a class="footer-cta-btn">GPTalk과 공부시작
				<img src="/images/icons/up-arrow.png" alt="login icon" />
			</a>

			<!-- 모바일 -->
			<img class="footer-blue-icon" src="/images/home/footer/blue.png" alt="blue" />
			<img class="footer-yellow-icon" src="/images/home/footer/yellow.png" alt="yellow" />

			<!-- 태블릿 -->
			<img class="footer-blue-icon-t" src="/images/home/footer/t-blue.png" alt="blue" />
			<img class="footer-yellow-icon-t" src="/images/home/footer/t-yellow.png" alt="yellow" />
			<img class="footer-b-t" src="/images/home/footer/footer-b-t.png" alt="big-tablet" />
			<!-- 데스크탑 -->
			<img class="footer-blue-icon-d" src="/images/home/footer/d-blue.png" alt="blue" />
			<img class="footer-yellow-icon-d" src="/images/home/footer/d-yellow.png" alt="yellow" />
			<img class="footer-b-d" src="/images/home/footer/footer-b-d.png" alt="big-desktop" />
			<img class="footer-s" src="/images/home/footer/footer-s.png" alt="small" />
		</section>
	</main>

	<div id="url-check-overlay" class="url-check-overlay hidden" aria-live="polite" aria-busy="true">
		<div class="url-check-overlay-inner">
			<div class="url-check-spinner"></div>
			<p class="url-check-text">영상 정보를 확인하는 중입니다...</p>
		</div>
	</div>


		<!-- END #content -->
		﻿<!DOCTYPE html>
<html lang="ko">


  <footer class="footer">
    <div class="footer-inner">
      <div class="footer-top">
        <p class="footer-company">에이아이카데미(주)</p>

        <div class="footer-info">
          <p>주식회사 에이아이카데미 | 대표자: 정인택 | 사업자등록번호: 698-88-03137</p>
          <p>주소: 광주광역시 북구 첨단과기로 123, 창업진흥센터 A동 207호</p>
          <p>연락처: 010-0000-0000</p>
          <p>문의 이메일: itjung@aicademy.co.kr</p>
          <p>팩스: 0504-182-2809</p>
          <p>통신판매업 신고번호: 신청 완료, 발급 후 즉시 업데이트 예정</p>
          <p>개인정보보호책임자: 정인택</p>
          <p class="en">Copyright AICADEMY Inc. All rights reserved.</p>
        </div>

        <div class="footer-notice">
          주식회사 에이아이카데미는 통신판매중개자로서 에이아이카데미의 거래당사자가 아니며 상품정보, 거래조건 및 거래에 관한 의무와 책임은 판매자에게 있습니다.
        </div>

        <div class="footer-links">
          <a href="#" class="footer-policy-link" data-modal-target="privacy-policy-modal">개인정보 처리 방침</a>
          <a href="#" class="footer-policy-link" data-modal-target="terms-of-service-modal">이용약관</a>
        </div>
      </div>

      <div class="footer-bottom">
        <div class="footer-copyright">
          <p class="copyright-desktop">ⓒ 에이아이카데미(주)</p>
          <p class="copyright-mobile">ⓒ Area.</p>
          <p>2026</p>
        </div>

        <div class="footer-bottom-right">
          <div class="footer-copyright footer-mobile-none">
            <p>All Rights Reserved</p>
          </div>
          <div class="footer-logo">
            <img src="/images/common/logo-black.svg" alt="AiCADEMY GPTalk" />
          </div>
        </div>
      </div>
    </div>
  </footer>

  <div id="privacy-policy-modal" class="policy-modal" aria-hidden="true" role="dialog" aria-modal="true"
    aria-labelledby="privacy-policy-title">
    <div class="policy-modal__backdrop" data-modal-close></div>
    <div class="policy-modal__dialog" role="document">
      <button type="button" class="policy-modal__close" data-modal-close aria-label="닫기">×</button>
      <h2 id="privacy-policy-title" class="policy-modal__title">개인정보 처리 방침</h2>
      <div class="policy-modal__body">
        <p><strong>주식회사 에이아이카데미</strong>(이하 "회사")는 「개인정보 보호법」 및 관련 법령을 준수하며, 회사가 제공하는
          <strong>GPTalk(지피톡)</strong> 및 관련 서비스(웹/모바일 포함, 이하 "서비스") 이용과 관련하여 이용자의 개인정보를 안전하게
          처리하기 위해 다음과 같이 개인정보처리방침을 수립·공개합니다.
        </p>

        <h3>제1조 (개인정보 처리의 목적)</h3>
        <p>회사는 다음의 목적을 위해 개인정보를 처리하며, 명시된 목적 이외의 용도로는 사용하지 않습니다.</p>
        <ol>
          <li>
            <strong>회원 가입 및 관리</strong>
            <ul>
              <li>서비스 회원 가입 의사 확인, 본인확인, 연령 확인, 중복 가입 여부 확인</li>
              <li>회원 식별 및 계정 관리, 서비스 이용자 유형(학생, 교사, 일반 학습자 등) 구분</li>
              <li>회원 문의 응대, 공지사항 전달, 민원 처리</li>
            </ul>
          </li>
          <li>
            <strong>서비스 제공 및 운영</strong>
            <ul>
              <li>GPTalk 서비스 제공 및 AI 기반 학습 지원 기능 운영</li>
              <li>강의 시청 이력, 질문·답변, 대화 로그 등 학습 관련 데이터 분석 및 시각화</li>
              <li>맞춤형 학습 피드백, 추천 질문, 학습 리포트 제공</li>
            </ul>
          </li>
          <li>
            <strong>서비스 개선 및 연구·통계 활용</strong>
            <ul>
              <li>서비스 품질 개선, 신규 기능 개발</li>
              <li>비식별·통계 처리된 데이터 분석 및 서비스 고도화 연구</li>
              <li>이용 행태 분석을 통한 UI/UX 개선</li>
            </ul>
          </li>
          <li>
            <strong>계약 이행 및 요금 정산(유료 서비스 도입 시)</strong>
            <ul>
              <li>유료 서비스 결제, 환불, 과금 내역 관리</li>
              <li>전자결제, 세금계산서 및 영수증 발행 등</li>
            </ul>
          </li>
          <li>
            <strong>보안 및 부정 이용 방지</strong>
            <ul>
              <li>비인가 사용 탐지, 계정 도용 및 부정 이용 방지</li>
              <li>서비스 안정적 운영을 위한 접속 이력 관리, 로그 분석</li>
            </ul>
          </li>
          <li>
            <strong>법령 준수</strong>
            <ul>
              <li>전자상거래, 소비자 보호, 세무 신고 등 관련 법령상 의무 이행</li>
            </ul>
          </li>
        </ol>

        <h3>제2조 (처리하는 개인정보 항목 및 수집 방법)</h3>
        <ol>
          <li>
            <strong>회원 가입 시 수집 항목</strong>
            <ul>
              <li>필수: 이메일 주소(ID), 비밀번호, 이름 또는 닉네임, 서비스 이용 기록 식별값</li>
              <li>선택: 학교/소속, 학년/직업, 관심 과목, 프로필 이미지</li>
              <li>만 14세 미만 아동의 경우(해당 시): 법정대리인 성명, 관계, 연락처, 동의 확인 정보</li>
            </ul>
          </li>
          <li>
            <strong>서비스 이용 과정에서 수집되는 정보</strong>
            <ul>
              <li>서비스 이용 기록: 로그인/로그아웃 시각, IP 주소, 쿠키, 접속 기기 정보(OS, 브라우저 등)</li>
              <li>학습 활동 정보: 강의 수강 내역, 시청 구간, 일시정지/되감기 등의 시청 패턴</li>
              <li>상호작용 정보:
                <ul>
                  <li>AI 선생님·AI 동료와 주고받은 질문 및 답변 내용</li>
                  <li>채팅·코멘트·노트 등 학습 중 생성된 텍스트</li>
                  <li>시험/퀴즈 응시 결과, 자기평가(Confidence 등)</li>
                </ul>
              </li>
            </ul>
          </li>
          <li>
            <strong>유료 서비스 이용 시 추가 수집 항목 (도입 시)</strong>
            <ul>
              <li>결제 처리에 필요한 정보(카드사명, 카드번호 일부, 결제 승인번호 등)</li>
              <li>청구·정산 관련 정보(거래 기록, 결제 이력 등)</li>
            </ul>
          </li>
          <li>
            <strong>수집 방법</strong>
            <ul>
              <li>회원 가입 및 서비스 이용 과정에서 이용자가 직접 입력</li>
              <li>서비스 이용 시 자동 생성·수집(접속 로그, 쿠키 등)</li>
              <li>고객 문의, 이메일, 설문조사 등</li>
            </ul>
          </li>
        </ol>

        <h3>제3조 (만 14세 미만 아동의 개인정보 처리)</h3>
        <ol>
          <li>회사는 원칙적으로 만 14세 이상 이용자를 대상으로 서비스를 제공합니다. 다만, 만 14세 미만 아동의 개인정보를 수집·이용하는 경우에는 「개인정보 보호법」 등 관련 법령에 따라 법정대리인의 동의를 받습니다.</li>
          <li>회사는 법정대리인 동의 여부를 확인하기 위하여 필요한 최소한의 정보(법정대리인의 성명, 관계, 연락처, 동의 확인 정보 등)를 수집할 수 있습니다.</li>
          <li>법정대리인은 만 14세 미만 아동의 개인정보에 대하여 언제든지 열람, 정정·삭제, 처리정지 등을 요청할 수 있으며, 회사는 관련 법령에 따라 지체 없이 필요한 조치를 취합니다.</li>
          <li>법정대리인의 동의가 확인되지 않는 경우, 해당 아동의 회원가입 또는 서비스 이용이 제한될 수 있습니다.</li>
        </ol>

        <h3>제4조 (개인정보의 처리 및 보유 기간)</h3>
        <p>회사는 법령이 정한 기간 또는 정보주체의 동의 범위 내에서 개인정보를 보유·이용하며, 보유 기간이 경과하거나 처리 목적이 달성된 경우 지체 없이 파기합니다.</p>
        <ol>
          <li><strong>회원 정보</strong>
            <ul>
              <li>보유 기간: 회원 탈퇴 시까지</li>
              <li>예외: 관계 법령에 따라 일정 기간 보존이 필요한 경우 해당 법령에서 정한 기간 동안 보존</li>
            </ul>
          </li>
          <li><strong>전자상거래 관련 기록 (유료 서비스 사용 시)</strong> - 「전자상거래 등에서의 소비자보호에 관한 법률」
            <ul>
              <li>계약 또는 청약철회 등에 관한 기록: 5년</li>
              <li>대금 결제 및 재화 등의 공급에 관한 기록: 5년</li>
              <li>소비자 불만 또는 분쟁 처리에 관한 기록: 3년</li>
              <li>표시·광고에 관한 기록: 6개월</li>
            </ul>
          </li>
          <li><strong>로그 기록, 접속 IP 정보</strong>
            <ul>
              <li>통신비밀보호법 등 관련 법령에 따라 3개월 이상 보관 가능</li>
            </ul>
          </li>
          <li><strong>비식별·통계 데이터</strong>
            <ul>
              <li>특정 개인을 식별할 수 없도록 가공·익명화된 데이터는 별도 보유 기간 없이 통계·연구 목적으로 활용할 수 있습니다.</li>
            </ul>
          </li>
        </ol>

        <h3>제5조 (개인정보의 제3자 제공)</h3>
        <p>회사는 원칙적으로 이용자의 개인정보를 제3자에게 제공하지 않습니다. 다만, 다음의 경우에는 예외로 합니다.</p>
        <ol>
          <li>이용자가 사전에 제3자 제공에 명시적으로 동의한 경우</li>
          <li>법령에 특별한 규정이 있거나, 수사기관·감독기관 등이 법령에 따른 절차에 따라 요청한 경우</li>
          <li>통계 작성, 학술 연구 등의 목적을 위하여 필요한 경우로서 특정 개인을 식별할 수 없는 형태로 제공하는 경우</li>
        </ol>

        <h3>제6조 (개인정보 처리의 위탁)</h3>
        <p>회사는 서비스 제공을 위해 일부 업무를 외부 업체에 위탁할 수 있으며, 위탁 시 관련 법령에 따라 개인정보 보호조치를 준수하도록 관리·감독합니다.</p>

        <h3>제7조 (이용자의 권리·의무 및 행사 방법)</h3>
        <ol>
          <li>이용자는 회사에 대해 언제든지 개인정보 열람·정정·삭제·처리 정지 등을 요청할 수 있습니다.</li>
          <li>권리 행사는 서면, 이메일, 고객센터 문의 등을 통해 요청할 수 있으며, 회사는 지체 없이 조치합니다.</li>
          <li>이용자가 개인정보의 정정·삭제를 요청한 경우, 회사는 정정·삭제가 완료될 때까지 해당 개인정보를 이용하거나 제공하지 않습니다.</li>
          <li>법령에서 별도로 정한 경우를 제외하고, 이용자의 요청에 따라 필요한 범위 내에서 개인정보를 삭제하거나 처리 정지합니다.</li>
          <li>이용자는 자신의 개인정보를 최신의 상태로 유지할 책임이 있으며, 부정확한 정보 제공으로 인해 발생하는 문제에 대한 책임은 이용자에게 있을 수 있습니다.</li>
        </ol>

        <h3>제8조 (개인정보의 파기 절차 및 방법)</h3>
        <ol>
          <li><strong>파기 절차</strong>
            <ul>
              <li>보유 기간이 경과하거나 처리 목적이 달성된 개인정보는 별도 DB로 분리하거나, 즉시 파기합니다.</li>
              <li>분리 보관된 개인정보는 법령상 보존 목적 외 다른 용도로 이용하지 않습니다.</li>
            </ul>
          </li>
          <li><strong>파기 방법</strong>
            <ul>
              <li>전자적 파일 형태: 복구·재생이 불가능한 방법으로 영구 삭제</li>
              <li>종이 문서: 분쇄 또는 소각 등 파기</li>
            </ul>
          </li>
        </ol>

        <h3>제9조 (쿠키 등 자동 수집 장치의 설치·운영 및 거부)</h3>
        <ol>
          <li>회사는 개인 맞춤형 서비스를 제공하기 위해 쿠키(cookie)를 사용할 수 있습니다.</li>
          <li>이용자는 웹 브라우저에서 쿠키 허용 여부를 설정하거나, 저장된 쿠키를 삭제할 수 있습니다.</li>
          <li>쿠키 설정을 거부할 경우, 로그인 유지, 학습 진도 저장 등 일부 서비스 이용에 제한이 있을 수 있습니다.</li>
        </ol>

        <h3>제10조 (개인정보의 안전성 확보 조치)</h3>
        <p>회사는 개인정보의 안전한 처리를 위하여 다음과 같은 조치를 취합니다.</p>
        <ul>
          <li>관리적 조치: 내부관리계획 수립·시행, 개인정보 접근자 최소화, 정기 교육</li>
          <li>기술적 조치: 비밀번호 및 중요 정보 암호화, 접근 통제 시스템 운영, 보안 프로그램 설치·갱신, 로그 모니터링</li>
          <li>물리적 조치: 서버실 및 문서 보관 장소 접근 통제</li>
        </ul>

        <h3>제11조 (개인정보 보호책임자 및 연락처)</h3>
        <ol>
          <li>회사는 개인정보 처리에 관한 업무를 총괄·책임지는 개인정보 보호책임자를 두고 있습니다.
            <ul>
              <li>개인정보 보호책임자: 정인택</li>
              <li>직위: Founder</li>
              <li>연락처: itjung@aicademy.co.kr</li>
            </ul>
          </li>
          <li>이용자는 서비스 이용 중 발생한 개인정보 보호 관련 문의, 불만 처리, 피해 구제 등을 위 연락처로 문의할 수 있습니다.</li>
        </ol>

        <h3>제12조 (개인정보처리방침의 변경)</h3>
        <ol>
          <li>이 개인정보처리방침은 시행일로부터 적용되며, 법령 변경 또는 서비스 내용 변경에 따라 개정될 수 있습니다.</li>
          <li>회사는 방침이 변경되는 경우, 변경 사항을 시행 7일 전부터 서비스 내 공지사항을 통해 고지합니다.</li>
          <li>중요한 내용 변경(수집 항목 확대, 제3자 제공 등)의 경우에는 최소 30일 전에 고지합니다.</li>
        </ol>

        <p><strong>시행일:</strong> 2026년 02월 26일</p>
      </div>
    </div>
  </div>

  <div id="terms-of-service-modal" class="policy-modal" aria-hidden="true" role="dialog" aria-modal="true"
    aria-labelledby="terms-of-service-title">
    <div class="policy-modal__backdrop" data-modal-close></div>
    <div class="policy-modal__dialog" role="document">
      <button type="button" class="policy-modal__close" data-modal-close aria-label="닫기">×</button>
      <h2 id="terms-of-service-title" class="policy-modal__title">이용약관</h2>
      <div class="policy-modal__body">
        <p><strong>주식회사 에이아이카데미</strong>(이하 "회사")가 제공하는 <strong>GPTalk(지피톡)</strong> 및 관련 서비스 이용과 관련하여,
          회사와 회원 간의 권리·의무 및 책임 사항, 서비스 이용 조건을 규정합니다.</p>

        <h3>제1장 총칙</h3>
        <h3>제1조 (목적)</h3>
        <p>이 약관은 회사가 온라인으로 제공하는 GPTalk 서비스 및 이에 부수하는 제반 서비스(이하 "서비스")의 이용과 관련하여 회사와 회원 간의 권리·의무 및 책임 사항, 기타 필요한 사항을 규정함을 목적으로 합니다.</p>

        <h3>제2조 (용어의 정의)</h3>
        <p>이 약관에서 사용하는 용어의 정의는 다음과 같습니다.</p>
        <ol>
          <li>"서비스"란 회사가 제공하는 GPTalk 웹/모바일 서비스 및 이에 부수하는 모든 온라인 학습 지원 기능을 말합니다.</li>
          <li>"회원"이란 이 약관에 동의하고 회사와 이용계약을 체결하여 서비스에 로그인할 수 있는 자를 말합니다.</li>
          <li>"아이디(ID)"란 회원의 식별과 서비스 이용을 위하여 회원이 정하고 회사가 승인한 이메일 주소 또는 문자·숫자의 조합을 말합니다.</li>
          <li>"비밀번호"란 회원의 신원 확인 및 비밀 보호를 위하여 회원이 설정한 문자·숫자·특수문자의 조합을 말합니다.</li>
          <li>"콘텐츠"란 서비스 내에서 제공되거나 회원이 작성하는 텍스트, 이미지, 동영상, 질문·답변, 대화 로그 등 일체의 자료를 말합니다.</li>
          <li>"유료 서비스"란 서비스 중 회사가 유료로 제공하는 온라인 콘텐츠, 구독, 부가 기능 등을 말합니다.</li>
        </ol>

        <h3>제3조 (약관의 효력 및 변경)</h3>
        <ol>
          <li>이 약관은 서비스를 이용하고자 하는 자가 약관에 동의하고 회원으로 가입함으로써 효력이 발생합니다.</li>
          <li>회사는 관련 법령을 위배하지 않는 범위에서 이 약관을 개정할 수 있습니다.</li>
          <li>회사가 약관을 개정하는 경우, 적용일자 및 개정 사유를 명시하여 현행 약관과 함께 서비스 내 공지사항에 최소 7일 전(회원에게 불리한 변경의 경우 30일 전)부터 적용일자 전일까지 공지합니다.</li>
          <li>회원이 변경 약관의 효력 발생일까지 명시적으로 거부 의사를 표시하지 않고 서비스를 계속 이용하는 경우, 변경된 약관에 동의한 것으로 봅니다.</li>
          <li>회원이 변경된 약관에 동의하지 않는 경우, 회원 탈퇴를 통해 이용계약을 해지할 수 있습니다.</li>
        </ol>

        <h3>제4조 (약관 외 준칙)</h3>
        <ol>
          <li>이 약관에서 정하지 않은 사항은 「전자상거래 등에서의 소비자보호에 관한 법률」, 「정보통신망 이용촉진 및 정보보호 등에 관한 법률」, 「개인정보 보호법」 등 관련 법령과 개별 서비스 안내, 운영정책을 따릅니다.</li>
          <li>약관과 개별 서비스 안내 또는 운영정책이 상충하는 경우, 개별 서비스 안내 및 운영정책이 우선 적용됩니다.</li>
        </ol>

        <h3>제2장 회원가입 및 계정 관리</h3>
        <h3>제5조 (이용계약의 성립)</h3>
        <ol>
          <li>이용계약은 서비스 회원가입 화면에서 약관 및 개인정보처리방침에 동의하고, 회사가 정한 가입 양식에 따라 정보를 기입한 뒤, 회사가 이를 승낙함으로써 성립합니다.</li>
          <li>회사는 다음 각 호에 해당하는 경우 회원 가입 신청을 승낙하지 않거나 사후에 이용계약을 해지할 수 있습니다.
            <ol>
              <li>타인의 명의 또는 이메일 주소를 도용한 경우</li>
              <li>허위 정보를 기재하거나, 필수 기재 사항을 누락·오기한 경우</li>
              <li>관계 법령을 위반하여 서비스 이용 자격이 제한된 적이 있는 경우</li>
              <li>기타 회사가 서비스 운영상 상당한 이유로 필요하다고 판단한 경우</li>
            </ol>
          </li>
        </ol>

        <h3>제6조 (회원 정보의 변경)</h3>
        <ol>
          <li>회원은 가입 시 기재한 정보가 변경된 경우, 서비스 내 설정 화면 등을 통해 지체 없이 이를 수정해야 합니다.</li>
          <li>회원이 정보를 수정하지 않아 발생하는 불이익에 대하여 회사는 책임을 지지 않습니다.</li>
        </ol>

        <h3>제7조 (계정 관리 및 보안)</h3>
        <ol>
          <li>아이디와 비밀번호에 대한 관리 책임은 회원 본인에게 있습니다.</li>
          <li>회원은 자신의 아이디와 비밀번호를 제3자에게 양도, 대여하거나 공유할 수 없습니다.</li>
          <li>회원은 아이디 및 비밀번호가 도용되거나 제3자가 사용하고 있음을 인지한 경우, 즉시 회사에 통지하고 안내에 따라야 합니다.</li>
        </ol>

        <h3>제8조 (미성년자의 서비스 이용)</h3>
        <ol>
          <li>회사는 원칙적으로 만 14세 이상을 대상으로 서비스를 제공하며, 만 14세 미만인 경우 법정대리인의 동의가 없는 회원가입을 제한할 수 있습니다.</li>
          <li>학교·교육기관 등과의 별도 계약에 의해 미성년자의 이용이 허용되는 경우, 해당 계약 및 관련 법령을 우선 적용합니다.</li>
        </ol>

        <h3>제3장 서비스 이용</h3>
        <h3>제9조 (서비스의 내용)</h3>
        <ol>
          <li>회사가 제공하는 서비스의 주요 내용은 다음과 같습니다.
            <ol>
              <li>AI 선생님·AI 동료와의 대화형 질의응답 및 토론 기능</li>
              <li>온라인 강의 시청 중간의 후속 질문 제안, 개념 설명, 예제 풀이</li>
              <li>학습 로그·질문·답변을 기반으로 한 학습 리포트 및 메타인지 지원 기능</li>
              <li>기타 회사가 정하는 에듀테크 관련 부가 서비스</li>
            </ol>
          </li>
          <li>회사는 서비스의 구체적인 내용, 이용 방법, 필요 시스템 환경 등을 서비스 화면에 별도로 안내할 수 있습니다.</li>
        </ol>

        <h3>제10조 (서비스의 제공, 변경 및 중단)</h3>
        <ol>
          <li>회사는 연중무휴, 1일 24시간 서비스를 제공하는 것을 원칙으로 합니다. 다만, 정기 점검, 설비 보수, 천재지변, 긴급한 보안 이슈 등 불가피한 사유가 있는 경우 서비스의 전부 또는 일부를 일시 중단할 수 있습니다.</li>
          <li>회사는 서비스의 개선, 기술적 사양 변경, 운영 정책 변경 등의 필요에 따라 서비스의 내용을 변경하거나 중단할 수 있습니다.</li>
          <li>회사가 서비스의 중단 또는 중요한 변경을 하는 경우, 사전에 서비스 내 공지사항 등을 통해 합리적인 기간 전에 공지합니다. 다만, 사전에 통지할 수 없는 부득이한 사유가 있는 경우 사후에 통지할 수 있습니다.</li>
        </ol>

        <h3>제11조 (정보 제공 및 광고)</h3>
        <ol>
          <li>회사는 서비스 운영과 관련하여 공지사항, 서비스 안내, 고객 응대 등을 위해 이메일, 알림, 메시지 등으로 회원에게 정보를 제공할 수 있습니다.</li>
          <li>회사는 서비스 화면, 이메일, 알림 등을 통하여 광고를 게재할 수 있으며, 회원은 수신 거부 설정을 통해 광고성 정보 수신을 거부할 수 있습니다(법령상 의무 안내는 예외).</li>
        </ol>

        <h3>제4장 당사자의 의무</h3>
        <h3>제12조 (회사의 의무)</h3>
        <ol>
          <li>회사는 관련 법령과 이 약관에서 정한 의무를 준수하며, 안정적이고 지속적인 서비스 제공을 위하여 최선을 다합니다.</li>
          <li>회사는 이용자의 개인정보를 개인정보처리방침에서 정한 바에 따라 안전하게 보호합니다.</li>
          <li>회사는 서비스 제공과 관련하여 알게 된 회원의 정보를 회원의 동의 없이 제3자에게 제공하거나 업무 목적 외로 사용하지 않습니다(관련 법령에 따른 예외 제외).</li>
        </ol>

        <h3>제13조 (회원의 의무)</h3>
        <p>회원은 다음 각 호의 행위를 하여서는 안 됩니다.</p>
        <ol>
          <li>회원가입 또는 정보 변경 시 허위 내용 기재</li>
          <li>타인의 계정 정보 도용, 부정 사용</li>
          <li>서비스 내에서 타인을 비방하거나 명예를 훼손하는 행위</li>
          <li>저작권, 상표권 등 제3자의 지식재산권을 침해하는 행위</li>
          <li>불법 정보, 음란물, 폭력적·혐오 표현, 차별 조장 콘텐츠 등을 게시하거나 전송하는 행위</li>
          <li>서비스의 정상적인 운영을 방해하거나, 과도한 트래픽 유발 등 기술적 장애를 초래하는 행위</li>
          <li>서비스로 제공되는 AI 답변을 악용하여 불법 행위를 기획·실행하는 행위</li>
          <li>기타 관련 법령 및 선량한 풍속, 사회질서에 반하는 행위</li>
        </ol>

        <h3>제5장 콘텐츠 및 지식재산권</h3>
        <h3>제14조 (서비스에 대한 권리)</h3>
        <ol>
          <li>서비스 및 서비스 내 제공되는 소프트웨어, 디자인, 로고, 상표, UI, 알고리즘 등 일체의 권리는 회사에 귀속됩니다.</li>
          <li>회원은 회사의 사전 서면 동의 없이 서비스의 일부분 또는 전부를 복제, 수정, 배포, 판매, 대여, 역설계, 파생물 제작 등에 사용할 수 없습니다.</li>
        </ol>

        <h3>제15조 (회원이 작성한 콘텐츠의 이용)</h3>
        <ol>
          <li>회원이 서비스 내에서 작성하거나 업로드한 질문, 답변, 코멘트, 노트, 첨부 파일 등(이하 "이용자 콘텐츠")에 대한 저작권은 원칙적으로 해당 회원에게 귀속됩니다.</li>
          <li>회원은 회사가 다음의 목적으로 이용자 콘텐츠를 무상·비독점적으로 이용하는 데 동의합니다.
            <ol>
              <li>서비스 제공 및 품질 개선, 기능 고도화</li>
              <li>AI 모델 학습 및 성능 향상을 위한 비식별·통계 처리</li>
              <li>서비스 홍보 및 리포트 작성(개인을 식별할 수 없는 형태에 한함)</li>
            </ol>
          </li>
          <li>회사는 이용자 콘텐츠를 이용함에 있어, 「개인정보 보호법」 등 관련 법령을 준수하며, 필요한 경우 별도의 동의를 추가로 받을 수 있습니다.</li>
        </ol>

        <h3>제6장 유료 서비스 및 결제</h3>
        <h3>제16조 (유료 서비스 이용 및 결제)</h3>
        <ol>
          <li>회원은 회사가 정한 절차에 따라 유료 서비스를 신청하고, 해당 서비스의 이용 요금을 결제함으로써 유료 서비스를 이용할 수 있습니다.</li>
          <li>회사는 유료 서비스별 요금, 결제 방법, 이용 기간 등을 서비스 화면에 고지합니다.</li>
          <li>회원은 신용카드, 계좌이체, 간편결제 등 회사가 제공하는 방법으로 요금을 결제할 수 있습니다.</li>
        </ol>

        <h3>제17조 (청약철회 및 환불)</h3>
        <div class="policy-article-indent">
          <div class="policy-article-indent__section">
            <p class="policy-article-indent__title"><strong>환불 신청</strong></p>
            <div class="policy-article-indent__content">
              <p>회원은 유료서비스에 대해 회사가 정한 방법에 따라 환불을 신청할 수 있습니다. 단, AI 답변 생성, 학습분석, 후속질문 제공 등 유료 기능이 이미 사용된 경우에는 환불 금액이 조정되거나 환불이 제한될 수 있습니다.</p>
            </div>
          </div>

          <div class="policy-article-indent__section">
            <p class="policy-article-indent__title"><strong>환불 기준</strong></p>
            <div class="policy-article-indent__content">
              <p>결제 후 7일 이내이며 서비스 이용 내역이 없는 경우에는 결제금액 전액을 환불합니다.</p>
              <p>결제 후 7일 이내이나 서비스 이용 내역이 있는 경우에는 이용일수에 해당하는 금액을 공제한 후 환불합니다.</p>
              <p>결제 후 7일이 경과한 정기결제 서비스는 해지일까지의 이용금액과 잔여기간 이용요금의 20%를 공제한 후 환불합니다.</p>
              <p>정기결제 서비스는 해지 신청 시 다음 결제일부터 자동결제가 중단되며, 이미 결제된 기간에 대해서는 회사 정책에 따라 환불 여부가 결정됩니다.</p>
            </div>
          </div>

          <div class="policy-article-indent__section">
            <p class="policy-article-indent__title"><strong>환불 처리</strong></p>
            <div class="policy-article-indent__content">
              <p>환불은 신청일로부터 3영업일 이내 처리하는 것을 원칙으로 하며, 실제 환불 완료 시점은 카드사·결제대행사 등 결제수단의 처리 일정에 따라 달라질 수 있습니다.</p>
            </div>
          </div>
        </div>

        <h3>제7장 계약 해지 및 이용 제한</h3>
        <h3>제18조 (회원 탈퇴)</h3>
        <ol>
          <li>회원은 언제든지 서비스 내 설정 메뉴 또는 회사가 정한 방법을 통해 회원 탈퇴를 신청할 수 있습니다.</li>
          <li>회원 탈퇴 시, 관계 법령 및 개인정보처리방침에 따라 일정 기간 보존이 필요한 정보를 제외한 나머지 개인정보 및 서비스 내 이용 기록은 삭제 또는 비식별 처리됩니다.</li>
        </ol>

        <h3>제19조 (이용 제한)</h3>
        <ol>
          <li>회사는 회원이 이 약관을 위반하거나 다음 각 호에 해당하는 경우, 사전 통지 없이 서비스 이용을 제한하거나 이용계약을 해지할 수 있습니다.
            <ol>
              <li>제13조에서 정한 금지 행위를 한 경우</li>
              <li>서비스 운영을 고의로 방해한 경우</li>
              <li>타인의 권리를 침해하거나 불법 행위를 한 경우</li>
              <li>기타 회사가 회원으로서 부적절하다고 판단하는 중대한 사유가 있는 경우</li>
            </ol>
          </li>
          <li>회원은 이용 제한에 대해 이의가 있는 경우, 회사에 이의 신청을 할 수 있으며, 회사는 합리적인 범위에서 검토 후 결과를 통지합니다.</li>
        </ol>

        <h3>제8장 손해배상 및 면책</h3>
        <h3>제20조 (손해배상)</h3>
        <ol>
          <li>회사 또는 회원은 상대방의 귀책 사유로 이 약관을 위반하여 손해가 발생한 경우, 관련 법령에 따라 그 손해를 배상할 책임이 있습니다.</li>
          <li>다만, 회사는 무료로 제공되는 서비스와 관련하여 회원에게 발생한 손해에 대해서는 고의 또는 중대한 과실이 없는 한 책임을 지지 않습니다.</li>
        </ol>

        <h3>제21조 (분쟁 해결 및 관할법원)</h3>
        <ol>
          <li>회사와 회원은 서비스 이용과 관련하여 분쟁이 발생한 경우, 원만한 해결을 위하여 성실히 협의합니다.</li>
          <li>협의로 해결되지 않는 분쟁에 대해서는 민사소송법상 관할을 따르되, 회사 본점 소재지를 관할하는 법원을 전속 관할 법원으로 합니다.</li>
        </ol>

        <p><strong>약관 시행일:</strong> 2026년 02월 26일</p>
      </div>
    </div>
  </div>

  <div id="policy-print-root" class="policy-print-root" aria-hidden="true"></div>

  <script>
    (function () {
      const openButtons = document.querySelectorAll(".footer-policy-link[data-modal-target]");
      const modals = document.querySelectorAll(".policy-modal");
      const printRoot = document.getElementById("policy-print-root");

      function closeModal(modal) {
        if (!modal) return;
        modal.classList.remove("is-active");
        modal.setAttribute("aria-hidden", "true");
        document.body.classList.remove("policy-modal-open");
      }

      function openModal(modal) {
        if (!modal) return;
        modals.forEach((m) => closeModal(m));
        modal.classList.add("is-active");
        modal.setAttribute("aria-hidden", "false");
        document.body.classList.add("policy-modal-open");
      }

      openButtons.forEach((btn) => {
        btn.addEventListener("click", function (e) {
          e.preventDefault();
          const targetId = btn.getAttribute("data-modal-target");
          openModal(document.getElementById(targetId));
        });
      });

      document.querySelectorAll(".policy-modal [data-modal-close]").forEach((btn) => {
        btn.addEventListener("click", function () {
          closeModal(btn.closest(".policy-modal"));
        });
      });

      document.addEventListener("keydown", function (e) {
        if (e.key !== "Escape") return;
        const activeModal = document.querySelector(".policy-modal.is-active");
        if (activeModal) closeModal(activeModal);
      });

      function buildPrintContentFromModal(modal) {
        if (!modal || !printRoot) return false;
        const title = modal.querySelector(".policy-modal__title");
        const body = modal.querySelector(".policy-modal__body");
        if (!title || !body) return false;

        printRoot.innerHTML = "";

        const article = document.createElement("article");
        article.className = "policy-print-root__document";

        const heading = document.createElement("h1");
        heading.className = "policy-print-root__title";
        heading.textContent = title.textContent || "";

        const bodyClone = body.cloneNode(true);
        bodyClone.classList.add("policy-print-root__body");

        article.appendChild(heading);
        article.appendChild(bodyClone);
        printRoot.appendChild(article);
        return true;
      }

      function preparePolicyPrint() {
        const activeModal = document.querySelector(".policy-modal.is-active");
        if (!activeModal || !buildPrintContentFromModal(activeModal)) {
          return;
        }
        document.body.classList.add("policy-printing");
      }

      function cleanupPolicyPrint() {
        document.body.classList.remove("policy-printing");
        if (printRoot) {
          printRoot.innerHTML = "";
        }
      }

      window.addEventListener("beforeprint", preparePolicyPrint);
      window.addEventListener("afterprint", cleanupPolicyPrint);
    })();
  </script>


</html>



	<!-- END #app -->

	<!-- ================== BEGIN core-js ================== -->
	<!-- ================== END core-js ================== -->

	<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
	<!-- ================== BEGIN content-js ================== -->
	

		<script type="text/javascript">

		const AI_API_BASE = "https:\/\/gptalk.co.kr\/svc";
		const BLOCK_MESSAGE = "\uD55C\uAD6D\uC0AC \uAD50\uC721 \uC601\uC0C1\uC744 \uB123\uC5B4\uC8FC\uC138\uC694.";
		const EMPTY_URL_MESSAGE = "\uACF5\uBD80\uD560 URL \uAC15\uC758\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694.";
		const _SESSION_USR_ID = "anonymous";
		const INVALID_URL_MESSAGE = "\uC720\uD6A8\uD55C YouTube URL\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.";

		var handler =
		{
			itm_id: '',
			prdt: null,
			getUrlInputEl: function() {
				const desktopInput = document.getElementById("prdt_url");
				const mobileInput = document.querySelector(".input-box");
				if (desktopInput && desktopInput.offsetParent !== null) {
					return desktopInput;
				}
				return mobileInput || desktopInput;
			},
			getInputValue: function() {
				const desktopInput = document.getElementById("prdt_url");
				const mobileInput = document.querySelector(".input-box");
				const desktopVal = desktopInput ? String(desktopInput.value || "").trim() : "";
				const mobileVal = mobileInput ? String(mobileInput.value || "").trim() : "";
				return desktopVal || mobileVal;
			},
			setInputValue: function(value) {
				const v = String(value || "");
				const desktopInput = document.getElementById("prdt_url");
				const mobileInput = document.querySelector(".input-box");
				if (desktopInput) desktopInput.value = v;
				if (mobileInput) mobileInput.value = v;
			},
			showUrlCheckLoading: function() {
				$("#url-check-overlay").removeClass("hidden");
			},
			hideUrlCheckLoading: function() {
				$("#url-check-overlay").addClass("hidden");
			},
			extractVideoId: function(url) {
				if (!url) return null;
				try {
					const parsed = new URL(url);
					const host = parsed.hostname.toLowerCase().replace(/^www\./, "");
					if (host === "youtube.com" || host === "m.youtube.com" || host === "music.youtube.com") {
						if (parsed.pathname === "/watch") {
							const v = parsed.searchParams.get("v");
							return v ? v.trim() : null;
						}
						if (parsed.pathname.startsWith("/shorts/") || parsed.pathname.startsWith("/embed/")) {
							const parts = parsed.pathname.split("/").filter(Boolean);
							return parts.length >= 2 ? parts[1] : null;
						}
					}
					if (host === "youtu.be") {
						const shortId = parsed.pathname.replace("/", "").trim();
						return shortId || null;
					}
				} catch (e) {
					console.error("video_id 추출 실패:", e);
				}
				return null;
			},
			normalizeYoutubeUrl: function(rawUrl) {
				let val = String(rawUrl || "").trim();
				if (!val) return null;
				if (!/^https?:\/\//i.test(val)) {
					val = "https://" + val;
				}
				try {
					const parsed = new URL(val);
					const host = parsed.hostname.toLowerCase().replace(/^www\./, "");
					if (host === "youtube.com" || host === "m.youtube.com" || host === "music.youtube.com") {
						if (parsed.pathname === "/watch") {
							const v = parsed.searchParams.get("v");
							if (!v) return null;
							return parsed.toString();
						}
						if (parsed.pathname.startsWith("/shorts/") || parsed.pathname.startsWith("/embed/")) {
							const parts = parsed.pathname.split("/").filter(Boolean);
							if (parts.length < 2 || !parts[1]) return null;
							return parsed.toString();
						}
						return null;
					}
					if (host === "youtu.be") {
						const shortId = parsed.pathname.replace("/", "").trim();
						if (!shortId) return null;
						return parsed.toString();
					}
				} catch (e) {
					console.error("URL 형식 검증 실패:", e);
					return null;
				}
				return null;
			},
			getSearchableLectureText: function(meta) {
				const parts = [];
				if (!meta || typeof meta !== "object") return "";
				parts.push(meta.prdt_tit || "");
				parts.push(meta.prdt_desc || "");
				parts.push(meta.prdt_href_url || "");

				// [P24-G-B] channel_name/channel_id 직접 필드 단독 사용 (EAV fallback 제거)
				parts.push(meta.channel_name || "");
				parts.push(meta.channel_id || "");

				if (meta.playlist_info && typeof meta.playlist_info === "object") {
					parts.push(meta.playlist_info.playlist_title || "");
					parts.push(meta.playlist_info.playlist_description || "");
				}

				if (Array.isArray(meta.playlist_videos) && meta.playlist_videos.length > 0) {
					const mainVideo = meta.playlist_videos.find(function(v) { return !!v && v.is_main; }) || meta.playlist_videos[0];
					if (mainVideo) {
						parts.push(mainVideo.title || "");
						parts.push(mainVideo.description || "");
						parts.push(mainVideo.channel_name || "");
						parts.push(mainVideo.channel_title || "");
					}
				}

				return parts
					.map(function(v) { return String(v || "").toLowerCase(); })
					.join(" ");
			},
			isKoreanHistoryText: function(text) {
				const normalized = String(text || "").toLowerCase();
				if (!normalized) return false;
				const keywords = [
					"\uD55C\uAD6D\uC0AC", "\uD55C\uB2A5\uAC80", "\uD55C\uAD6D \uC5ED\uC0AC", "\uC6B0\uB9AC \uC5ED\uC0AC", "\uAD6D\uC0AC",
					"\uACE0\uB824", "\uC870\uC120", "\uC0BC\uAD6D", "\uC2E0\uB77C", "\uBC31\uC81C", "\uACE0\uAD6C\uB824", "\uADFC\uD604\uB300\uC0AC",
					"\uC120\uC0AC\uC2DC\uB300", "\uAC1C\uD56D", "\uC77C\uC81C\uAC15\uC810", "\uB3C5\uB9BD\uC6B4\uB3D9", "\uB300\uD55C\uBBFC\uAD6D \uC815\uCE58\uC0AC",
					"ebsi", "ebs \uD55C\uAD6D\uC0AC", "korean history", "history of korea"
				];
				return keywords.some(function(keyword) {
					return normalized.includes(String(keyword).toLowerCase());
				});
			},
			isKoreanHistoryLecture: function(meta) {
				return handler.isKoreanHistoryText(handler.getSearchableLectureText(meta));
			},
			fetchYoutubeOembedMeta: async function(youtubeUrl) {
				try {
					const endpoint = `https://www.youtube.com/oembed?url=${encodeURIComponent(youtubeUrl)}&format=json`;
					const response = await fetch(endpoint, { method: "GET" });
					if (!response.ok) return null;
					const data = await response.json();
					return {
						title: String(data.title || ""),
						author_name: String(data.author_name || "")
					};
				} catch (e) {
					console.warn("oEmbed 조회 실패:", e);
					return null;
				}
			},
				validateLectureBySvc: async function(youtubeUrl) {
					try {
						const response = await fetch(`${AI_API_BASE}/req/youtube`, {
							method: "POST",
							headers: { "Content-Type": "application/json" },
							body: JSON.stringify({
								url: youtubeUrl,
								itm_id: "20250002",
								ctgr_id: "20250009",
								usr_id: (_SESSION_USR_ID && _SESSION_USR_ID !== 'null' && _SESSION_USR_ID !== 'anonymous') ? _SESSION_USR_ID : null
							})
						});
						let data = {};
						try {
							data = await response.json();
						} catch (_) {
							data = {};
						}
						// Flask 200 OK = 교육 필터 통과 → 바로 허용
						if (response.ok && data.status !== "error") {
							return { ok: true, message: "" };
						}
						// Flask 거부 (4xx/5xx) → 차단
						return { ok: false, message: data.message || BLOCK_MESSAGE };
					} catch (e) {
						// Phase 6.2: 네트워크 오류 → fail-closed (차단)
						console.error("Flask 서버 접근 실패:", e);
						return { ok: false, message: "서버 연결에 실패했습니다. 잠시 후 다시 시도해주세요." };
					}
				},
			_inFlight: false,
			prdt_set: async function(event) {
				if (event && typeof event.preventDefault === "function") {
					event.preventDefault();
				}

				// Phase 6.2: 중복 클릭 방지
				if (handler._inFlight) return false;

				const inputEl = handler.getUrlInputEl();
				const rawUrl = handler.getInputValue();

				if (!rawUrl) {
					alert(EMPTY_URL_MESSAGE);
					if (inputEl) inputEl.focus();
					return false;
				}

				const validatedUrl = handler.normalizeYoutubeUrl(rawUrl);
				if (!validatedUrl) {
					alert(INVALID_URL_MESSAGE);
					if (inputEl) inputEl.focus();
					return false;
				}

				handler.itm_id = "20250002";
				handler._inFlight = true;

				try {
					handler.showUrlCheckLoading();
					const validateResult = await handler.validateLectureBySvc(validatedUrl);
					handler.hideUrlCheckLoading();

					if (!validateResult.ok) {
						alert(validateResult.message || BLOCK_MESSAGE);
						location.href = `${_ctx_web}/`;
						return false;
					}

					location.href = `${_ctx_web}/202500000005?itm_id=${handler.itm_id}&url=${encodeURIComponent(validatedUrl)}`;
				} finally {
					handler._inFlight = false;
				}
				return false;
			},
			savedPrdt: function(data) {
				handler.prdt = data;
				location.href = `${_ctx_web}/202500000005?itm_id=${handler.itm_id}&prdt_id=${handler.prdt.prdt_id}`;
			},
			savedOrdr : function() {
				location.href = `${_ctx_web}/202500000005?itm_id=${handler.itm_id}&prdt_id=${handler.prdt.prdt_id}`;
			}
		}

		$(document).ready(function() {
			const onEnterStart = function(e) {
				if (e.key === "Enter") {
					e.preventDefault();
					handler.prdt_set(e);
				}
			};
			$("#prdt_url").on("keydown", onEnterStart);
			$(".input-box").on("keydown", onEnterStart);
		});

	</script>


	<!-- ================== END content-js ================== -->

</body>

</html>