(function(){
'use strict';
if(!window.idcSmartlog||!window.idcSmartlog.ajax) return;
try {
var __u=new URL(window.location.href);
if(__u.searchParams.has('_idc_nc')){
__u.searchParams.delete('_idc_nc');
var __q=__u.searchParams.toString();
window.history.replaceState(null, '', __u.pathname + (__q ? '?' + __q:'') + __u.hash);
}} catch (__e){  }
function canonicalPageUrl(){
try {
var u=new URL(window.location.href);
u.searchParams.delete('_idc_nc');
return u.toString();
} catch (e){
return window.location.href;
}}
var base=window.idcSmartlog.ajax;
var nonce=window.idcSmartlog.nonce||'';
var sessionId=getSessionId();
function installFocusFix(){
if(!window.idcSmartlog||!window.idcSmartlog.focusFixEnabled) return;
var keyboardMode=false;
function setKeyboardMode(enabled){
keyboardMode = !!enabled;
if(!document.body) return;
if(keyboardMode){
document.body.classList.add('idc-smartlog-keyboard-nav');
}else{
document.body.classList.remove('idc-smartlog-keyboard-nav');
}}
document.addEventListener('keydown', function(event){
if(event.key==='Tab') setKeyboardMode(true);
}, true);
document.addEventListener('mousedown', function(){
setKeyboardMode(false);
}, true);
document.addEventListener('touchstart', function(){
setKeyboardMode(false);
}, true);
document.addEventListener('focusin', function(event){
var target=event.target;
if(keyboardMode) return;
var tag=target&&target.tagName ? target.tagName.toUpperCase():'';
var inputTags={ INPUT: 1, TEXTAREA: 1, SELECT: 1 };
if(inputTags[tag]) return;
if(target&&typeof target.blur==='function'){
window.requestAnimationFrame(function(){
if(document.activeElement===target) target.blur();
});
}}, true);
}
var MAX_DWELL=14400;
var activeDwell=0;
var segStart=Date.now();
function getDwell(){
var current=Math.floor((Date.now() - segStart) / 1000);
return Math.min(activeDwell + current, MAX_DWELL);
}
var BLOCK_KEY='idc_blocked';
var heartbeatTimer=null;
function isBlocked(){ return sessionStorage.getItem(BLOCK_KEY)==='1'; }
function markBlocked(){
sessionStorage.setItem(BLOCK_KEY, '1');
if(heartbeatTimer){ clearInterval(heartbeatTimer); heartbeatTimer=null; }}
function getSessionId(){
var k='idc_sid';
var kt='idc_sid_ts';
var mins=(window.idcSmartlog&&window.idcSmartlog.sessionExpiry)
? parseInt(window.idcSmartlog.sessionExpiry, 10):30;
var expiry=mins * 60 * 1000;
var s=sessionStorage.getItem(k);
var ts=parseInt(sessionStorage.getItem(kt)||'0', 10);
var now=Date.now();
if(!s||(ts > 0&&(now - ts) > expiry)){
s=Math.random().toString(36).slice(2) + now.toString(36);
sessionStorage.setItem(k, s);
}
sessionStorage.setItem(kt, String(now));
return s;
}
function getUtm(){
var u=new URL(canonicalPageUrl());
return {
source:       u.searchParams.get('utm_source')||'',
medium:       u.searchParams.get('utm_medium')||'',
campaign:     u.searchParams.get('utm_campaign')||'',
term:         u.searchParams.get('utm_term')||'',
content:      u.searchParams.get('utm_content')||'',
n_media:      u.searchParams.get('n_media')||'',
n_campaign:   u.searchParams.get('n_campaign')||'',
n_adgroup:    u.searchParams.get('n_adgroup')||u.searchParams.get('n_ad_group')||'',
n_creative:   u.searchParams.get('n_creative')||'',
n_keyword:    u.searchParams.get('n_keyword')||'',
n_query:      u.searchParams.get('n_query')||'',
n_adkeyword:  u.searchParams.get('n_adkeyword')||'',
n_rank:       u.searchParams.get('n_rank')||'',
napm:         u.searchParams.get('NaPm')||u.searchParams.get('napm')||u.searchParams.get('NAPM')||'',
kwd:          u.searchParams.get('kwd')||'',
gclid:        u.searchParams.get('gclid')||'',
};}
function getKeyword(utm, ref){
if(utm.term) return safeDecodeURI(utm.term);
if(utm.n_query) return safeDecodeURI(utm.n_query);
if(utm.n_adkeyword) return safeDecodeURI(utm.n_adkeyword);
if(utm.kwd) return safeDecodeURI(utm.kwd);
if(ref){
try {
var rUrl=new URL(ref);
var q=rUrl.searchParams.get('query')   ||
rUrl.searchParams.get('q')        ||
rUrl.searchParams.get('n_query')  ||
rUrl.searchParams.get('keyword')  ||
rUrl.searchParams.get('kwd')||'';
if(q) return safeDecodeURI(q);
} catch(e){}}
if(utm.n_keyword) return 'kw:' + utm.n_keyword;
return '';
}
function safeDecodeURI(s){
try { return decodeURIComponent(s); } catch(e){ return s; }}
function getAdMedium(utm, ref){
var refLow=(ref||'').toLowerCase();
if(refLow.indexOf('ac.naver.com') >=0||refLow.indexOf('alsearch.naver.com') >=0) return 'NAVER';
if(utm.medium==='cpc'||utm.medium==='ppc') return utm.source ? utm.source.toUpperCase():'NAVER';
if(utm.napm||utm.n_media||utm.n_campaign||utm.n_adgroup||utm.n_creative||utm.n_keyword||utm.n_rank) return 'NAVER';
if(utm.gclid) return 'GOOGLE';
return '';
}
function getAdType(utm, adMedium){
if(!adMedium) return '';
if(adMedium==='GOOGLE') return 'Google 검색광고';
if(adMedium==='NAVER'){
var nm=utm.n_media;
if(nm==='27758')  return '네이버 파워링크(PC)';
if(nm==='122887') return '네이버 파워링크(모바일)';
if(nm==='27758'||utm.n_query||utm.n_keyword) return '네이버 검색광고';
if(nm) return '네이버 디스플레이광고';
return '네이버 광고';
}
if(utm.medium==='cpc'||utm.medium==='ppc') return (utm.source||'naver') + ' 검색광고';
return '광고';
}
function sendHit(type, payload, keepalive){
return fetch(base + type, {
method:      'POST',
credentials: 'omit',
headers:     { 'Content-Type': 'application/json' },
body:        JSON.stringify(payload),
keepalive:   !!keepalive
}).then(function(r){
if(r.status===403){
markBlocked();
return null;
}
return r.json().then(function(j){
if(!j) return j;
if(j.stop){
if(heartbeatTimer){ clearInterval(heartbeatTimer); heartbeatTimer=null; }}
if(j.auto_blocked) markBlocked();
return j;
});
}).catch(function(){ return null; });
}
function initSession(){
try {
if(sessionStorage.getItem(BLOCK_KEY)==='1'){
sessionStorage.removeItem(BLOCK_KEY);
}} catch (e){  }
var utm=getUtm();
var ref=document.referrer||'';
var keyword=getKeyword(utm, ref);
var adMedium=getAdMedium(utm, ref);
var adType=getAdType(utm, adMedium);
var isNaverAd=adMedium==='NAVER';
sendHit('hit', {
session_id:    sessionId,
url:           canonicalPageUrl(),
title:         document.title,
referrer:      ref,
utm_source:    utm.source||(isNaverAd ? 'naver':''),
utm_medium:    utm.medium||(isNaverAd ? 'cpc':''),
utm_campaign:  utm.campaign,
utm_term:      utm.term,
utm_content:   utm.content,
keyword:       keyword,
ad_medium:     adMedium,
ad_type:       adType,
screen_width:  window.screen ? window.screen.width:0,
screen_height: window.screen ? window.screen.height:0,
user_agent:    navigator.userAgent
}).then(function(j){
if(j&&j.warn){
showAdWarnPopup(j.warn_level||1, j.warn_clicks||0, {
keyword:  j.warn_keyword||'',
ip:       j.warn_ip||'',
datetime: j.warn_datetime||''
});
}});
}
function escHtml(s){
if(s===null||s===undefined) return '';
var d=document.createElement('div');
d.textContent=String(s);
return d.innerHTML;
}
function showAdWarnPopup(level, clicks, meta){
meta=meta||{};
var lastShown=parseInt(sessionStorage.getItem('idc_ad_warn_last_clicks')||'0', 10);
if(clicks <=lastShown) return;
sessionStorage.setItem('idc_ad_warn_last_clicks', String(clicks));
var kwLabel=meta.keyword ? escHtml(meta.keyword):'<span style="color:#888;">(식별된 광고 키워드 없음)</span>';
var ipLabel=meta.ip ? escHtml(meta.ip):'—';
var dtLabel=meta.datetime ? escHtml(meta.datetime):'—';
var recordBox=''
+ '<div style="margin-bottom:16px;padding:12px 14px;background:#f0f4f8;border:1px solid #c5d1dc;border-radius:8px;text-align:left;">'
+ '  <p style="margin:0 0 8px;font-size:12px;font-weight:800;color:#1d2327;">이번 접속 기준 처리 정보</p>'
+ '  <table style="width:100%;font-size:13px;color:#333;border-collapse:collapse;">'
+ '    <tr><td style="padding:4px 8px 4px 0;color:#64748b;width:88px;vertical-align:top;">광고 키워드</td><td style="padding:4px 0;word-break:break-all;">' + kwLabel + '</td></tr>'
+ '    <tr><td style="padding:4px 8px 4px 0;color:#64748b;vertical-align:top;">IP 주소</td><td style="padding:4px 0;">' + ipLabel + '</td></tr>'
+ '    <tr><td style="padding:4px 8px 4px 0;color:#64748b;vertical-align:top;">접속 시각</td><td style="padding:4px 0;">' + dtLabel + '</td></tr>'
+ '    <tr><td style="padding:4px 8px 4px 0;color:#64748b;vertical-align:top;">24h 내 광고 유입</td><td style="padding:4px 0;"><strong>' + clicks + '</strong>회 (세션 기준)</td></tr>'
+ '  </table>'
+ '  <p style="margin:8px 0 0;font-size:11px;color:#64748b;line-height:1.5;">※ 동일 공유기·회사망 등에서는 다른 분의 접속이 합산될 수 있습니다.</p>'
+ '</div>';
var contactBox=''
+ '<div style="margin-top:14px;padding:12px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;text-align:center;">'
+ '  <p style="margin:0 0 6px;font-size:13px;color:#166534;font-weight:700;">문의</p>'
+ '  <a href="tel:03180150978" style="font-size:18px;font-weight:800;color:#047857;text-decoration:none;letter-spacing:0.02em;">031-8015-0978</a>'
+ '  <p style="margin:8px 0 0;font-size:12px;color:#15803d;line-height:1.5;">안내·문의는 위 번호로 연락 주시기 바랍니다.</p>'
+ '</div>';
var configs={
1: {
icon: '⚠️',
topColor: '#f59e0b',
btnColor: '#d97706',
title: '광고 유입 경고',
messages: [
'<strong>광고비 절약</strong>을 위해, 자주 찾으시는 경우 <strong>북마크(즐겨찾기)</strong>에 이 페이지를 추가해 주세요. 광고를 거치지 않고 방문하시면 불필요한 <strong>광고비 지출을 줄이는 데</strong> 도움이 됩니다.',
'반복적인 광고 클릭 유입은 통계상 <strong>짧은 간격의 다회 접속</strong>으로 분류될 수 있습니다.',
'최근 24시간 기준 광고 유입 <strong>' + clicks + '회</strong>가 확인되었습니다. (동일 공유기·회사망·기기에서는 합산될 수 있습니다.)'
],
showBookmark: true
},
2: {
icon: '⚠️',
topColor: '#e67e22',
btnColor: '#c06414',
title: '광고 유입 경고 (단계 강화)',
messages: [
'동일 출처의 <strong>반복 광고 유입</strong>이 계속 확인되고 있습니다. (' + clicks + '회 / 최근 24시간)',
'광고비 낭비를 줄이시려면 <strong>북마크 추가</strong> 또는 <strong>주소 직접 입력</strong>으로 방문해 주시기 바랍니다.',
'정책에 따라 <strong>접속 제한·트래픽 필터링</strong> 등 조치가 적용될 수 있습니다.'
],
showBookmark: true
},
3: {
icon: '🔒',
topColor: '#64748b',
btnColor: '#475569',
title: '광고 유입 경고 (최종 안내)',
messages: [
'광고 경로 <strong>반복 유입</strong>이 누적되어 <strong>추가 점검 대상</strong>으로 분류되었습니다. (' + clicks + '회 / 최근 24시간)',
'서비스 안정성 유지를 위해 기록이 유지되며, 반복 시 <strong>접속 제한</strong>될 수 있습니다.',
'<strong>북마크·직접 방문</strong>을 이용해 주시고, 아래 <strong>문의 전화</strong>로 연락 가능합니다.'
],
showBookmark: true
}};
var cfg=configs[level]||configs[1];
var msgHtml=cfg.messages.map(function(m){
return '<div style="display:flex;align-items:flex-start;gap:8px;margin-bottom:10px;">'
+ '<span style="color:' + cfg.topColor + ';font-size:15px;flex-shrink:0;margin-top:1px;">▶</span>'
+ '<p style="margin:0;color:#333;line-height:1.75;font-size:14px;">' + m + '</p>'
+ '</div>';
}).join('');
var bookmarkHtml='';
if(cfg.showBookmark){
bookmarkHtml='<button id="idc-ad-warn-bk" style="'
+ 'background:#2271b1;color:#fff;border:none;'
+ 'padding:9px 18px;border-radius:7px;font-size:13px;font-weight:700;'
+ 'cursor:pointer;font-family:inherit;margin-right:8px;">'
+ '🔖 북마크 추가</button>';
}
var ovr=document.createElement('div');
ovr.id='idc-ad-warn-overlay';
ovr.style.cssText='position:fixed;top:0;left:0;width:100%;height:100%;'
+ 'background:rgba(0,0,0,.78);z-index:2147483647;'
+ 'display:flex;align-items:center;justify-content:center;'
+ 'font-family:"Malgun Gothic","Apple SD Gothic Neo",sans-serif;padding:16px;box-sizing:border-box;';
ovr.innerHTML=''
+ '<div style="background:#fff;padding:36px 38px;border-radius:16px;'
+   'max-width:540px;width:100%;text-align:center;'
+   'border-top:7px solid ' + cfg.topColor + ';'
+   'box-shadow:0 12px 48px rgba(0,0,0,.36);">'
+ '  <div style="font-size:46px;margin-bottom:8px;">' + cfg.icon + '</div>'
+ '  <h2 style="margin:0 0 6px;font-size:20px;color:#1d2327;font-weight:800;">' + cfg.title + '</h2>'
+ '  <p style="margin:0 0 16px;font-size:12px;color:#bbb;">안내 단계 ' + level + ' · 최근 24시간 광고 유입 ' + clicks + '회 · 보안·통계 시스템</p>'
+ recordBox
+ '  <div style="text-align:left;background:#f9fafb;border:1px solid #e5e7eb;'
+     'border-radius:10px;padding:16px 18px;margin-bottom:20px;">'
+ msgHtml
+ '  </div>'
+ contactBox
+ '  <div style="display:flex;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:18px;">'
+ bookmarkHtml
+ '  <button id="idc-ad-warn-ok" style="background:' + cfg.btnColor + ';color:#fff;border:none;'
+     'padding:10px 32px;border-radius:7px;font-size:14px;font-weight:700;'
+     'cursor:pointer;font-family:inherit;">확인</button>'
+ '  </div>'
+ '</div>';
function insertPopup(){
document.body.appendChild(ovr);
document.getElementById('idc-ad-warn-ok').addEventListener('click', function(){
ovr.style.display='none';
});
var bkBtn=document.getElementById('idc-ad-warn-bk');
if(bkBtn){
bkBtn.addEventListener('click', function(){
try {
alert('Ctrl+D (Mac: Cmd+D) 또는 브라우저 주소창의 ★을 클릭하여 북마크에 추가하세요.\n주소: ' + canonicalPageUrl());
} catch(e){}
bkBtn.disabled=true;
bkBtn.textContent='✅ 안내 완료';
});
}}
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', insertPopup);
}else{
insertPopup();
}}
function heartbeat(){
if(isBlocked()||!heartbeatTimer) return;
sendHit('heartbeat', {
session_id: sessionId,
url:        canonicalPageUrl(),
title:      document.title,
dwell:      getDwell()
});
}
function pageView(url, title, isExit){
sendHit('pageview', {
session_id: sessionId,
url:        url,
title:      title,
is_exit:    isExit ? 1:0,
dwell:      isExit ? getDwell():0
});
}
var exitSent=false;
function sendExitPageview(){
if(isBlocked()||exitSent) return;
exitSent=true;
activeDwell=Math.min(activeDwell + Math.floor((Date.now() - segStart) / 1000), MAX_DWELL);
sendHit('pageview', {
session_id: sessionId,
url:        canonicalPageUrl(),
title:      document.title,
is_exit:    1,
dwell:      Math.min(activeDwell, MAX_DWELL)
}, true);
}
function onVisibilityChange(){
if(document.visibilityState==='hidden'){
activeDwell=Math.min(activeDwell + Math.floor((Date.now() - segStart) / 1000), MAX_DWELL);
if(!exitSent&&!isBlocked()){
sendHit('pageview', {
session_id: sessionId,
url:        canonicalPageUrl(),
title:      document.title,
is_exit:    1,
dwell:      activeDwell
}, true);
}}else if(document.visibilityState==='visible'){
segStart=Date.now();
exitSent=false;
}}
function onPageHide(){ sendExitPageview(); }
function onBeforeUnload(){ sendExitPageview(); }
document.addEventListener('visibilitychange', onVisibilityChange);
window.addEventListener('pagehide',       onPageHide);
window.addEventListener('beforeunload',   onBeforeUnload);
installFocusFix();
initSession();
heartbeatTimer=setInterval(heartbeat, 30000);
if(typeof window.idcSmartlogTrack==='function') return;
window.idcSmartlogTrack=function(){ initSession(); };})();