PageSourceSearch

https://wssakorea.or.kr/

html wssakorea.or.kr collected 2026-10-06 13:42:31 UTC 205,680 bytes, 2,722 lines download raw bytes

1<!doctype html>
2<html lang="ko">
3<head>
4    <title>대한스포츠스태킹협회 | 스포츠스태킹 대회·기록·교육 공식 홈페이지</title>
5    <meta name="description" content="대한스포츠스태킹협회(WSSA Korea) 공식 홈페이지 — 스포츠스태킹 대회 일정·결과·시즌 랭킹·공인 기록, 국가대표, 교육·자격증, 학교스포츠클럽 안내" />
6    <meta name="keywords" content="스포츠스태킹, 스피드스택스, 컵쌓기, 대한스포츠스태킹협회, WSSA Korea, 스포츠스태킹 대회, 스포츠스태킹 기록, 학교스포츠클럽, 스포츠스태킹 자격증" />
7    <meta property="og:type" content="website">
8    <meta property="og:title" content="대한스포츠스태킹협회">
9    <meta property="og:image" content="https://wssakorea.or.kr/data/common/snsRepresentImage.png?v=1790581307">
10    <meta property="og:url" content="https://wssakorea.or.kr/">
11    <meta property="og:description" content="대한스포츠스태킹협회(WSSA Korea) 공식 홈페이지 — 스포츠스태킹 대회 일정·결과·시즌 랭킹·공인 기록, 국가대표, 교육·자격증, 학교스포츠클럽 안내">
12    <meta property="og:locale" content="ko_KR">
13    <meta property="og:image:width" content="1200">
14    <meta property="og:image:height" content="630">
15    <meta name="twitter:card" content="summary">
16    <meta name="twitter:title" content="대한스포츠스태킹협회">
17    <meta name="twitter:image" content="https://wssakorea.or.kr/data/common/snsRepresentImage.png?v=1790581307">
18    <meta name="twitter:description" content="대한스포츠스태킹협회(WSSA Korea) 공식 홈페이지 — 스포츠스태킹 대회 일정·결과·시즌 랭킹·공인 기록, 국가대표, 교육·자격증, 학교스포츠클럽 안내">
19	<meta name="naver-site-verification" content="e9e77c4c7d4c2eff81e730aa8d231093864ccfb7"/>
20	<meta name="google-site-verification" content="8svuk34--pEIEG8AGqyBz2dYQlkF9_dsVfGDH9fEsNw" />
21    <meta http-equiv="X-UA-Compatible" content="IE=edge">
22    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
23    <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
24    <meta name="author" content="대한스포츠스태킹협회" />
25    <meta name="csrf-token" content="MTc5MTI5NDE0OTE4MTMwNTQ0NDY1Njk4OTkzNzc0MTUzODU1MDUzNzAw" />
26
27
28    
28<script type="application/ld+json">{"@context":"https://schema.org","@type":"SportsOrganization","name":"대한스포츠스태킹협회","alternateName":["WSSA Korea","World Sport Stacking Association Korea"],"url":"https://www.wssakorea.or.kr/","logo":"https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/favicon-512.png?v=20260928","sport":"Sport Stacking","parentOrganization":{"@type":"SportsOrganization","name":"World Sport Stacking Association","url":"https://www.thewssa.com/"},"telephone":"+82-70-5121-8840","faxNumber":"+82-70-5121-8849","email":"[email protected]","address":{"@type":"PostalAddress","streetAddress":"미사강변한강로 155 SKV1 Center 사무 A동 532호","addressLocality":"하남시","addressRegion":"경기도","addressCountry":"KR"},"contactPoint":[{"@type":"ContactPoint","telephone":"+82-70-5121-8840","email":"[email protected]","contactType":"customer service","areaServed":"KR","availableLanguage":["Korean"]}]}</script>
28
29
30    <link rel="icon" type="image/png" sizes="192x192" href="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/favicon-192.png?v=20260928" />
31    <link rel="icon" type="image/png" sizes="512x512" href="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/favicon-512.png?v=20260928" />
32    <link rel="icon" type="image/x-icon" sizes="16x16 32x32 48x48" href="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/favicon.ico?v=20260928" />
33    <link rel="shortcut icon" href="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/favicon.ico?v=20260928" />
34    <link rel="apple-touch-icon" sizes="180x180" href="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/favicon/apple-touch-icon.png?v=20260928" />
35    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/reset.css?ts=1782267610">
36    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/common/common.css?ts=1782267610">
37    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/common/layer/layer.css?ts=1782267610">
38    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/layout/layout.css?ts=1782267610">
39    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/goods/list.css?ts=1782267610">
40	<link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/button.css?ts=1782267610">
41    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/main/main.css?ts=1783326340" />
42    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/js/jquery/chosen/chosen.css?ts=1782267610" />
43    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/custom.css?ts=1784782524" />
44    <link type="text/css" rel="stylesheet" href="/data/skin/front/test_wssc_C_C/css/bxsk.css?ts=1789522571" />
45	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
46
47    
47<script type="text/javascript">
48        var json_locale_data = {"domain":"messages","locale_data":{"messages":{"":{"lang":"ATF","plural-forms":"nplurals=1; plural=0"}}}}
49    </script>
49
50    
50<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/gd_gettext.js?ts=1782267610"></script>
50
51    
51<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/jquery.min.js?ts=1782267610"></script>
51
52    
52<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/underscore/underscore-min.js?ts=1782267610"></script>
52
53    
53<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/validation/jquery.validate.min.js?ts=1782267610"></script>
53
54    
54<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/validation/additional-methods.min.js?ts=1782267610"></script>
54
55    
55<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/numeral/numeral.min.js?ts=1782267610"></script>
55
56    
56<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/global/accounting.min.js?ts=1782267610"></script>
56
57    
57<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/global/money.min.js?ts=1782267610"></script>
57
58    
58<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/chosen/chosen.jquery.min.js?ts=1782267610"></script>
58
59    
59<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/placeholder/placeholders.jquery.min.js?ts=1782267610"></script>
59
60    <![if gt IE 8]>
61    
61<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/copyclipboard/clipboard.min.js?ts=1782267610"></script>
61
62    <![endif]>
63    
63<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/vticker/jquery.vticker.js?ts=1782267610"></script>
63
64    
64<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/gd_ui.js?ts=1782267610"></script>
64
65
66    
66<script type="text/javascript">
67        // 고도몰5 통화정책
68        var gdCurrencyDecimal = 0;
69        var gdCurrencyDecimalFormat = '0';
70        var gdCurrencyCode = 'KRW';
71        var gdCurrencyAddDecimal = 0;
72        var gdCurrencyAddDecimalFormat = '';
73        var gdCurrencyAddCode = '';
74        var gdLocale = 'ko';
75        var gdCurrencySymbol = '';
76        var gdCurrencyString = '원';
77
78        // 환율변환 정책
79        fx.base = "KRW";
80        fx.settings = {
81            from : "KRW",
82            to : gdCurrencyCode
83        };
84        fx.rates = {
85            "KRW" : 1,
86            "USD" : 0.001,
87            "CNY" : 0.010,
88            "JPY" : 0.100,
89            "EUR" : 0.001,
90        }
91    </script>
91
92
93    
93<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/gd_common.js?ts=1782267610"></script>
93
94
95    <!-- Add script : start -->
96    
96<script type="text/javascript" src="/admin/gd_share/script/visit/gd_visit.js?requestUrl=https%3A%2F%2Fcollector-statistics.nhn-commerce.com%2Fhttp.msg&requestData=%7B%22base_time%22%3A%222026-10-06T22%3A42%3A29%2B09%3A00%22%2C%22mall_id%22%3A%22590254%22%2C%22user_id%22%3Anull%2C%22refer%22%3A%22%22%2C%22uri%22%3A%22https%3A%5C%2F%5C%2Fwssakorea.or.kr%3A443%5C%2F%22%2C%22domain%22%3A%22wssakorea.or.kr%22%2C%22country%22%3A%22kr%22%2C%22solution%22%3A%22G5%22%2C%22analytics_client_id%22%3A%2201a11173-94ed-7ef1-bbf9-b26322432406%22%2C%22analytics_session_id%22%3A%2201a11173-94ee-741f-b588-2aeff190b194%22%7D&dummyData="></script>
96
97    
97<script type="text/javascript" src="/data/skin/front/test_wssc_C_C/js/jquery/jquery-cookie/jquery.cookie.js"></script>
97
98    <!-- Add script : end -->
99
100    
101
102    <style type="text/css">
103        body {
104        }
105
106        /* body > #wrap > #header_warp : 상단 영역 */
107        #header_warp {
108        }
109
110        /* body > #wrap > #container : 메인 영역 */
111        #container {
112        }
113
114        /* body > #wrap > #footer_wrap : 하단 영역 */
115        #footer_wrap {
116        }
117    </style>
118
119    
119<script src="//godomall-storage.cdn-nhncommerce.com/godomall-sdk/0.3.2/godomall-sdk.js" onload="GodomallSDK.setup('M5g0fuJNvGXPq3bH5Ore3w==', 'mgPJH63cgbuqPmxl+7n5e6NJUdD9xiUZl4KDIEHknuUMLKa/ABV0NwbWAp/SSsd8BU/HOYlHfwCqZPvHjfhAFuC/SzQPcNVJ7X2DBmtXM6qyhpFS4MQtuHhNe+WQD46z2lcVJVsA1PvAEiRBF2jANA==')"></script>
119<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 72 bytes, lines 119-120
119
120        <script async src="https://www.googletagmanager.com/gtag/js?id=
120G-BG3135C3T0
vendor: 20 bytes, lines 120-121
120"></script>
121        
121<script>
122        
vendor: 152 bytes, lines 122-126
122window.dataLayer = window.dataLayer || [];
123        function gtag(){dataLayer.push(arguments);}
124        gtag('js', new Date());
125
126        gtag('config', '
126G-BG3135C3T0
vendor: 12 bytes, lines 126-127
126');
127        
127</script>
127
128
129</head>
130
131<body class="body-main body-index pc"  >
132<div class="top_area"></div>
133
134<div id="wrap">
135	
136	
136<script type="text/javascript">
137	   $(document).ready(function(){
138       $("evenbnr_open  > a").click(function(){
139           $("#bnr_pop").slideDown(500);
140       });
141       $(".evenbnr_close  > a").click(function(){
142           $("#bnr_pop").slideUp(500);
143       });
144   });
145	</script>
145
146	<!-- 최상단배너 -->
147	<div id="bnr_pop">
148    </div>
149	<!-- 최상단배너 -->	
150	
151	
152	
153    <div id="header_warp">
154<div id="header" class="bxsk-scope bxsk-header">
155
156    <div class="bxsk-notice-ticker">
157        <div class="bxsk-ticker-inner" id="bxskTickerInner">
158            <ul id="bxskTickerList">
159                <li><a href="../board/view.php?bdId=newnotice&sno=2014">[공지]&nbsp;2026-27WSSA 월드 챔피언십 챌린지 스...</a></li>
160                <li><a href="../board/view.php?bdId=newnotice&sno=2013">[공지]&nbsp;제19회 전국학교스포츠클럽축전 스포츠스태킹 지...</a></li>
161                <li><a href="../board/view.php?bdId=newnotice&sno=2012">[공지]&nbsp;제1회 서해구스포츠스태킹협회장배 26/27WS...</a></li>
162                <li><a href="../board/view.php?bdId=newnotice&sno=2011">[공지]&nbsp;본사 25기 주니어 코치(SSJ) 교육 안내</a></li>
163                <li><a href="../board/view.php?bdId=newnotice&sno=2010">[공지]&nbsp;2026-27시즌 아시안 챔피언십 IN 태국 ...</a></li>
164            </ul>
165            <div class="bxsk-ticker-nav">
166                <button type="button" class="bxsk-ticker-prev" aria-label="이전">&lsaquo;</button>
167                <button type="button" class="bxsk-ticker-next" aria-label="다음">&rsaquo;</button>
168            </div>
169        </div>
170    </div>
171    
171<script>
172    (function () {
173        var list = document.getElementById('bxskTickerList');
174        if (!list) return;
175        var items = Array.prototype.slice.call(list.querySelectorAll('li'));
176        if (!items.length) return;
177
178        var idx = 0, timer = null;
179        function show(i) {
180            idx = (i + items.length) % items.length;
181            items.forEach(function (li, n) { li.style.display = (n === idx) ? 'block' : 'none'; });
182        }
183        function start() { stop(); if (items.length > 1) { timer = setInterval(function () { show(idx + 1); }, 4000); } }
184        function stop() { clearInterval(timer); timer = null; }
185        show(0);
186        start();
187
188        var inner = document.getElementById('bxskTickerInner');
189        var prevBtn = inner.querySelector('.bxsk-ticker-prev');
190        var nextBtn = inner.querySelector('.bxsk-ticker-next');
191        if (prevBtn) prevBtn.addEventListener('click', function () { show(idx - 1); start(); });
192        if (nextBtn) nextBtn.addEventListener('click', function () { show(idx + 1); start(); });
193        inner.addEventListener('mouseenter', stop);
194        inner.addEventListener('mouseleave', start);
195    })();
196    </script>
196
197    <style>
198        .bxsk-ticker-inner { display: flex; align-items: center; justify-content: center; gap: 10px; height: 32px; overflow: hidden; }
199        #bxskTickerList { position: relative; flex: 1; min-width: 0; margin: 0; padding: 0; list-style: none; text-align: center; }
200        #bxskTickerList li { margin: 0; padding: 0; display: none; }
201        #bxskTickerList li a { display: block; color: inherit; font-size: 12.5px; line-height: 1.4; }
202        .bxsk-ticker-nav { display: flex; gap: 4px; flex-shrink: 0; }
203        .bxsk-ticker-nav button { width: 20px; height: 20px; border-radius: 50%; background: rgba(255,255,255,.12); color: inherit; font-size: 14px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; }
204        .bxsk-ticker-nav button:hover { background: rgba(255,255,255,.24); }
205        /* 모바일(좁은 화면)에서만 줄임표 처리 — PC는 글자 제한 없이 그대로 표시 */
206        @media (max-width: 640px) {
207            #bxskTickerList li a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
208        }
209
210        /* 헤더 로고 — headbar 높이에 꽉 차게(비율 유지, 과도하게 커지지 않도록 상한선만 둠) */
211        .bxsk-logo { display: flex; align-items: center; height: 100%; }
212        .bxsk-logo a, .bxsk-logo img { display: block; height: 100%; max-height: 56px; width: auto; }
213
214        /* GNB 하위메뉴(row2) — PC에서 가로 나열 대신 세로 목록으로 변경.
215           [2026-07-24 수정] display:flex !important를 넣었더니 원래 있던 "호버한 것 하나만 보이고
216           나머지는 숨김" 메커니즘까지 덮어써서 6개 하위메뉴가 전부 동시에 펼쳐지는 버그 발생 —
217           display는 절대 안 건드리고 flex-direction만 지정(보여지는 상태일 때만 의미 있고,
218           숨김 상태일 땐 그냥 무시되므로 기존 show/hide 로직과 충돌 없음).
219           [2026-07-24 재수정] 세로로 바뀌었지만 예전 가로형 메가메뉴용 큰 박스(넓은 width/height)가
220           그대로 남아있어 내용물(짧은 텍스트 4~7개)에 비해 흰 배경이 과도하게 크게 남는 문제 확인
221           (사용자 스크린샷) — 폭을 내용에 맞게 좁히고, 그림자·둥근모서리·호버하이라이트로
222           현행 드롭다운 메뉴 스타일 적용 */
223        @media (min-width: 1024px) {
224            .bxsk-tabbar-row2 { position: relative; }
225            .bxsk-tabbar-row2 .bxsk-submenu-row {
226                position: absolute !important; /* 콘솔 진단으로 static이 원인 확정 — left가 static에선 무시됨 */
227                top: 0; /* JS(mouseenter)가 row1 하단 실측값으로 덮어씀 — !important 쓰면 안 됨(인라인 style보다 우선해버려 JS가 못 이김) */
228                left: 0; /* JS(mouseenter)가 호버한 항목 위치로 즉시 덮어씀 */
229                flex-direction: column;
230                align-items: stretch;
231                width: 180px !important;
232                min-width: 0 !important;
233                max-width: 180px !important;
234                height: auto !important;
235                padding: 8px !important;
236                background: rgba(255, 255, 255, 0.88);
237                backdrop-filter: blur(14px);
238                -webkit-backdrop-filter: blur(14px);
239                border-radius: 12px;
240                box-shadow: 0 12px 32px rgba(15,23,42,.14), 0 2px 8px rgba(15,23,42,.06);
241                border: 1px solid var(--border, #edf0f5);
242            }
243            .bxsk-tabbar-row2 .bxsk-submenu-row li {
244                width: 100%;
245            }
246            .bxsk-tabbar-row2 .bxsk-submenu-row li a {
247                display: block;
248                width: 100%;
249                box-sizing: border-box;
250                padding: 6px 14px;
251                border-radius: 8px;
252                font-size: 13.5px;
253                font-weight: 600;
254                color: var(--text, #1f2937);
255                transition: background .12s ease, color .12s ease, padding-left .12s ease;
256            }
257            .bxsk-tabbar-row2 .bxsk-submenu-row li a:hover {
258                background: var(--bg-soft, #f4f6fa);
259                color: var(--wssa-navy, #0a2e6e);
260                padding-left: 18px;
261            }
262            .bxsk-tabbar-row2 .bxsk-submenu-row li.all a {
263                color: var(--text-soft, #6b7a91);
264                font-size: 11.5px;
265                font-weight: 800;
266                letter-spacing: .04em;
267                padding-top: 6px;
268                padding-bottom: 6px;
269            }
270        }
271        /* [2026-09-15] 모바일(<1024px) 헤더(로고행+탭바) 상단 고정 — 사용자 요청("네이버처럼 스크롤 시 메뉴 고정",
272           이후 "로고도 고정"). #header_warp의 CSS sticky는 #wrap{overflow-x:hidden}(E-030 안전망)이 스크롤 컨테이너를
273           가로채 어떤 뷰포트에서도 고정되지 않았음(2026-09-15 콘솔 실측: 스크롤 후 top:-800). JS로 .bxsk-headbar를
274           position:fixed 토글 + 같은 높이 placeholder로 레이아웃 점프 방지. */
275        /* [2026-09-15 확장] PC도 동일 고정(사용자 요청) — 미디어쿼리 제거, 전 뷰포트 공통. PC는 유틸리티바만 흘러가고
276           로고+메뉴 행(84px)이 고정됨. row2 드롭다운은 .bxsk-tabbar 기준 absolute라 고정 헤더 안에서 그대로 동작. */
277        .bxsk-headbar.bxsk-head-fixed {
278            position: fixed; top: 0; left: 0; right: 0; z-index: 60;
279            box-shadow: 0 2px 8px rgba(0, 0, 0, .08);
280        }
281        .bxsk-headbar-ph { display: none; }
282        .bxsk-headbar-ph.on { display: block; }
283        /* [2026-09-15] 모바일 헤더 2행 고정 레이아웃(사용자 요청) — 1행: 로고 정중앙(검색 아이콘은 우측),
284           2행: GNB 탭바 전체폭. 로고를 정확히 가운데 두기 위해 검색 아이콘과 같은 폭(36px)의 빈 flex 아이템을
285           ::before로 왼쪽에 두어 좌우 균형을 맞춤(flex 컨테이너의 ::before는 flex 아이템으로 동작). */
286        @media (max-width: 1023px) {
287            .bxsk-headbar-inner { justify-content: space-between; }
288            .bxsk-headbar-inner::before { content: ''; flex: 0 0 36px; order: 0; }
289            .bxsk-logo { order: 1; flex: 1 1 0; min-width: 0; display: flex; justify-content: center; align-items: center; }
290            .bxsk-logo a, .bxsk-logo img { margin: 0 auto; }
291            /* 로고 1.5배(사용자 요청): bxsk.css 모바일 기본 28px → 42px, 폭 상한도 비례 확대
292               [2026-09-17] 다시 25% 확대(사용자 요청): 42px → 52px, 240px → 300px (headbar 58px 안에 수직중앙) */
293            .bxsk-logo img { max-height: 52px; max-width: 300px; }
294            /* [2026-09-17] 모바일에도 유틸리티바(로그인/회원가입/로그아웃/마이페이지/고객센터) 노출 — 사용자 요청
295               "모바일에서 로그인해야 함". bxsk.css의 PC 전용 display:none을 덮어씀. 헤더 고정 JS는 headbar 원위치
296               기준이라 위에 한 줄이 더 있어도 그대로 동작(유틸리티바는 PC와 같이 스크롤 시 흘러감). */
297            .bxsk-utility { display: block; }
298            .bxsk-utility-inner { justify-content: center; }
299            .bxsk-util-links { height: 30px; gap: 14px; }
300            .bxsk-util-links a { font-size: 11.5px; }
301            .bxsk-head-actions { order: 2; flex: 0 0 36px; justify-content: flex-end; }
302            .bxsk-gnb { order: 3; }
303        }
304    </style>
305
306    <div class="bxsk-utility">
307        <div class="bxsk-container bxsk-utility-inner">
308            <ul class="bxsk-util-links">
309                <li><a href="../member/login.php">로그인</a></li>
310                <li><a href="../member/join_method.php">회원가입</a></li>
311                <li><a href="../mypage/index.php">마이페이지</a></li>
312                <li><a href="../service/index.php">고객센터</a></li>
313<li class="bxsk-admin-link" style="display:none"><a href="https://gdadmin.wssakorea.or.kr/wssa/index.php" target="_blank" rel="noopener" style="color:#ffc72c;font-weight:700">관리자</a></li>
314<li class="bxsk-lang" style="display:none"><span class="active">KO</span><span>EN</span></li>
315            </ul>
316        </div>
317    </div>
318    <!-- //bxsk-utility -->
319
320    <div class="bxsk-headbar">
321        <div class="bxsk-container bxsk-headbar-inner">
322
323            <button type="button" class="bxsk-navtoggle" aria-label="전체 메뉴" aria-expanded="false">
324                <span></span><span></span><span></span>
325            </button>
326
327            <div class="bxsk-logo">
328<a href="../main/index.php" ><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/abb3160f997c0cc36e6737c8aaf417b2_23177.png"  alt="대한스포츠스태킹협회" title="대한스포츠스태킹협회"   /></a>            </div>
329
330            <nav class="bxsk-gnb" aria-label="주 메뉴">
331                <div class="bxsk-gnb-inner">
332                    <div class="bxsk-allcate">
333                        <div class="gnb_all">
334    <strong>ALL CATEGORY</strong>
335    <a href="#;" class="btn_all_menu_open"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/common/btn/btn_allmenu_open.png" alt="전체메뉴보기"></a>
336</div>
337<div class="gnb_allmenu_wrap">
338
339</div>
340                    </div>
341
342                    <div class="bxsk-tabbar">
343                        <div class="bxsk-tabbar-row1">
344                            <ul class="bxsk-menu">
345                                <li><a href="../main/html.php?htmid=wssa/info/intro.html" data-tab="about" data-sec="about">협회소개</a></li>
346                                <li><a href="../wssa/tournament_schedule.php" data-tab="competitions" data-sec="competitions">대회</a></li>
347                                <li><a href="../wssa/rankings.php" data-tab="records" data-sec="records">랭킹</a></li>                                <li><a href="../wssa/player_records.php" data-tab="players" data-sec="players">기록·선수</a></li>
348                                <li><a href="../wssa/schoolclub_result.php" data-tab="education" data-sec="education">교육</a></li>
349                                <li><a href="../main/html.php?htmid=wssa/notices.html" data-tab="news" data-sec="news">소식</a></li>
350                            </ul>
351                        </div>
352                        <div class="bxsk-tabbar-row2">
353                            <ul class="bxsk-submenu-row" data-for="about">
354                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-about">스포츠스태킹 소개</a></li>
355                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-greeting">인사말</a></li>
356                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-org">조직/이사회</a></li>
357                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-history">연혁</a></li>
358                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-articles">정관</a></li>
359                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-branch">지역지부 및 운영위원</a></li>
360                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-donation">지정기부금</a></li>
361                                <li><a href="../main/html.php?htmid=wssa/info/intro.html#sec-map">오시는 길</a></li>
362                            </ul>
363                            <ul class="bxsk-submenu-row" data-for="competitions">
364                                <li><a href="../wssa/tournament_schedule.php">대회일정</a></li>
365                                <li><a href="../wssa/tournament_results.php">대회결과</a></li>
366                                <li style="display:none"><a href="../wssa/promotion_tournament.php">승급대회</a></li>
367                            </ul>
368                            <ul class="bxsk-submenu-row" data-for="records">
369                                <li><a href="../wssa/rankings.php">시즌랭킹</a></li>
370                                <li><a href="../wssa/record_archive.php">한국공식기록</a></li>
371                                <li><a href="../wssa/world_ranking.php">세계공식기록</a></li>
372                                <li style="display:none"><a href="../board/list.php?bdId=onlinecompetition">온라인기록</a></li>
373                            </ul>
374                            <ul class="bxsk-submenu-row" data-for="players">
375                                <li><a href="../wssa/player_records.php">기록 조회</a></li>
376                                <li><a href="../wssa/national_team.php">국가대표</a></li>
377                                <li style="display:none"><a href="../wssa/record_archive.php#hof">명예의전당</a></li>
378                            </ul>
379                            <ul class="bxsk-submenu-row" data-for="education">
380                                <li><a href="../wssa/schoolclub_result.php">학교스포츠클럽</a></li>
381                                <li><a href="../wssa/academy_status.php">아카데미</a></li>
382                                <li><a href="../wssa/education_info.php">지도자/심판교육 신청</a></li>
383                                <li><a href="../board/list.php?bdId=eduPass">합격자 발표</a></li>
384                                <li><a href="../wssa/certificate_info.php">자격증 신청(신규/갱신)</a></li>
385                                <li><a href="../wssa/instructor_matching.php">지도자 매칭</a></li>
386                            </ul>
387                            <ul class="bxsk-submenu-row" data-for="news">
388                                <li><a href="../main/html.php?htmid=wssa/notices.html">공지</a></li>
389                                <li><a href="../main/html.php?htmid=wssa/news.html">뉴스</a></li>
390                                <li><a href="../main/html.php?htmid=wssa/news.html#video">미디어</a></li>
391                                <li><a href="../main/html.php?htmid=wssa/gallery.html">갤러리</a></li>
392                            </ul>
393                        </div>
394                    </div>
395                </div>
396            </nav>
397
398            <div class="bxsk-head-actions">
399                <div class="bxsk-search">
400                    <div class="bxsk-global-sel">
401                        
402                    </div>
403                    <div class="bxsk-searchform">
404                        <div class="top_search">
405                            <form action="../wssa/site_search.php" method="get" role="search" id="frmSiteSearch">
406                                <fieldset>
407                                    <legend>검색폼</legend>
408                                    <div class="top_search_cont">
409                                        <div class="top_text_cont">
410                                            <input type="text" name="q" class="top_srarch_text" placeholder="공지·대회·선수 검색" autocomplete="off" maxlength="60" title="통합검색">
411                                            <button type="submit" class="btn_top_srarch" title="검색" aria-label="검색" style="background:none; color:var(--wssa-navy,#0A2E6E); font-size:16px; display:grid; place-content:center;"><i class="fa fa-search" aria-hidden="true"></i></button>
412                                        </div>
413                                    </div>
414                                </fieldset>
415                            </form>
416                        </div>
417                    </div>
418                </div>
419                <button type="button" class="bxsk-searchtoggle" aria-label="검색">
420                    <i class="fa fa-search" aria-hidden="true"></i>
421                </button>
422                <a class="bxsk-cart" href="../order/cart.php" aria-label="장바구니" style="display:none">
423                    <i class="fa fa-shopping-cart" aria-hidden="true"></i>
424                    <strong class="bxsk-cart-cnt">0</strong>
425                </a>
426            </div>
427
428        </div>
429    </div>
430    <!-- //bxsk-headbar -->
431
432    <div class="bxsk-nav-backdrop" aria-hidden="true"></div>
433
434    
434<script type="text/javascript">
435    (function () {
436        var h = document.getElementById('header');
437        if (!h) return;
438        var navT = h.querySelector('.bxsk-navtoggle');
439        var srchT = h.querySelector('.bxsk-searchtoggle');
440        var backdrop = h.querySelector('.bxsk-nav-backdrop');
441
442        function closeNav() { h.classList.remove('bxsk-nav-open'); if (navT) navT.setAttribute('aria-expanded', 'false'); }
443
444        if (navT) navT.addEventListener('click', function () {
445            var open = h.classList.toggle('bxsk-nav-open');
446            navT.setAttribute('aria-expanded', open ? 'true' : 'false');
447        });
448        if (srchT) srchT.addEventListener('click', function () { h.classList.toggle('bxsk-search-open'); });
449        if (backdrop) backdrop.addEventListener('click', closeNav);
450
451        // [2026-07-09] 메뉴 개편(6개 대분류 + 2단 탭바) — 모바일에서 1행 탭 클릭 시
452        // 2행에 해당 서브메뉴만 펼침(다시 누르면 접힘). 데스크톱은 CSS :has() hover로만 처리, JS 불필요.
453        var tabbar = h.querySelector('.bxsk-tabbar');
454        if (tabbar) {
455            var row1Items = tabbar.querySelectorAll('.bxsk-tabbar-row1 .bxsk-menu > li');
456            var row2Groups = tabbar.querySelectorAll('.bxsk-tabbar-row2 .bxsk-submenu-row');
457            var showTab = function (key) {
458                row2Groups.forEach(function (g) { g.hidden = (g.getAttribute('data-for') !== key); });
459                row1Items.forEach(function (li) {
460                    var a = li.querySelector('a');
461                    li.classList.toggle('active', !!(a && key && a.getAttribute('data-tab') === key));
462                });
463            };
464            row1Items.forEach(function (li) {
465                var a = li.querySelector('a');
466                if (!a) return;
467                // [2026-09-17] 모바일 탭 클릭 = 하위 첫 메뉴로 즉시 이동(사용자 지시) — 이전의 "펼침/접힘 토글 + preventDefault"는
468                // 폐기. 대신 아래 autoExpand()가 현재 페이지가 속한 대분류의 서브메뉴를 자동으로 펼쳐 형제 메뉴 이동을 보장.
469                a.addEventListener('click', function () { /* 기본 이동 */ });
470            });
471            showTab(null); // 기본: 아무 서브메뉴도 펼치지 않음
472            // [2026-09-17] 현재 URL이 속한 대분류 자동 펼침(모바일 전용). 서브메뉴 링크의 pathname + htmid/bdId 파라미터로 판정,
473            // 서브메뉴에 없으면 row1 링크로 2차 판정. PC는 hover 방식 그대로(펼침 상태를 남기지 않음).
474            var pageKey = function (href) {
475                try {
476                    var u = new URL(href, location.href);
477                    var q = u.searchParams.get('htmid') || u.searchParams.get('bdId') || '';
478                    return u.pathname.replace(/\/index\.php$/, '/') + (q ? '?' + q : '');
479                } catch (err) { return ''; }
480            };
481            var autoExpand = function () {
482                if (!window.matchMedia('(max-width: 1023px)').matches) { showTab(null); return; }
483                var cur = pageKey(location.href), found = null;
484                row2Groups.forEach(function (g) {
485                    if (found) return;
486                    g.querySelectorAll('a').forEach(function (x) { if (!found && pageKey(x.href) === cur) found = g.getAttribute('data-for'); });
487                });
488                if (!found) row1Items.forEach(function (li) { var x = li.querySelector('a'); if (!found && x && pageKey(x.href) === cur) found = x.getAttribute('data-tab'); });
489                showTab(found);
490            };
491            autoExpand();
492            window.addEventListener('resize', autoExpand);
493
494            // [2026-07-24 신설] 데스크톱 — 서브메뉴가 항상 같은 고정 좌표에서 열려 어떤 대분류를
495            // 호버해도 위치가 안 바뀌던 문제 확인(사용자 스크린샷) — 호버한 row1 항목의 실제
496            // 좌표를 계산해 해당 서브메뉴의 left를 그때그때 맞춰줌(:has() 자체는 표시/숨김만 담당,
497            // 위치 계산은 CSS만으로 불가해 JS 보강).
498            // [2026-07-24 추가] left는 고쳤지만 top이 고정값(0)이라 주메뉴 줄과 하위메뉴 사이에
499            // 큰 공백이 생기던 문제 확인(사용자 스크린샷) — row1(주메뉴 줄) 바로 아래에 붙도록
500            // top도 동일하게 실측 계산.
501            var row2Container = tabbar.querySelector('.bxsk-tabbar-row2');
502            var row1Bar = tabbar.querySelector('.bxsk-tabbar-row1');
503            if (row2Container) {
504                row1Items.forEach(function (li) {
505                    var a = li.querySelector('a');
506                    if (!a) return;
507                    var key = a.getAttribute('data-tab');
508                    li.addEventListener('mouseenter', function () {
509                        if (!window.matchMedia('(min-width: 1024px)').matches) return;
510                        var submenu = tabbar.querySelector('.bxsk-tabbar-row2 .bxsk-submenu-row[data-for="' + key + '"]');
511                        if (!submenu) return;
512                        var liRect = li.getBoundingClientRect();
513                        var containerRect = row2Container.getBoundingClientRect();
514                        submenu.style.left = Math.round(liRect.left - containerRect.left) + 'px';
515                        if (row1Bar) {
516                            var row1Rect = row1Bar.getBoundingClientRect();
517                            submenu.style.top = Math.round(row1Rect.bottom - containerRect.top) + 'px';
518                        }
519                    });
520                });
521            }
522        }
523
524        // 데스크톱 진입 시 모바일 패널 상태 초기화
525        window.addEventListener('resize', function () {
526            if (window.matchMedia('(min-width: 1024px)').matches) { closeNav(); h.classList.remove('bxsk-search-open'); }
527        });
528    })();
529
530    // [2026-09-15] 모바일 헤더(로고행+탭바) 상단 고정(위 CSS 참조) — 원래 위치를 placeholder로 기억하고,
531    // 스크롤이 그 위치를 지나면 fixed, 되돌아오면 해제. [2026-09-15 확장] PC 포함 전 뷰포트 공통.
532    (function () {
533        var bar = document.querySelector('#header .bxsk-headbar');
534        if (!bar || !bar.parentNode) return;
535        var ph = document.createElement('div');
536        ph.className = 'bxsk-headbar-ph';
537        bar.parentNode.insertBefore(ph, bar);
538        var fixed = false, ticking = false;
539        function apply() {
540            ticking = false;
541            var anchor = fixed ? ph : bar;
542            var top = anchor.getBoundingClientRect().top + window.pageYOffset;
543            if (!fixed && window.pageYOffset > top) {
544                ph.style.height = bar.offsetHeight + 'px'; ph.classList.add('on');
545                bar.classList.add('bxsk-head-fixed'); fixed = true;
546            } else if (fixed && window.pageYOffset <= top) { unfix(); }
547            else if (fixed) { ph.style.height = bar.offsetHeight + 'px'; }
548        }
549        function unfix() { bar.classList.remove('bxsk-head-fixed'); ph.classList.remove('on'); ph.style.height = ''; fixed = false; }
550        function onScroll() { if (!ticking) { ticking = true; window.requestAnimationFrame(apply); } }
551        window.addEventListener('scroll', onScroll, { passive: true });
552        window.addEventListener('resize', onScroll);
553        window.addEventListener('load', apply);
554        apply();
555    })();
556
557    // [2026-07-09] 앵커(#search 등) 최초진입 시 브라우저 네이티브 해시점프가 #wrap의
558    // overflow-x:hidden(E-030)과 충돌해 헤더/푸터가 가로로 밀려보이는 버그 확인
559    // (V2, 콘솔 실측 — #search 없이는 left:0, #search 있으면 헤더/푸터 전부 동일하게 음수).
560    // 네이티브 점프를 취소하고, 로드 완료 후 JS로 부드럽게 스크롤하는 방식으로 대체.
561    (function () {
562        if (!window.location.hash) return;
563        var targetId = window.location.hash.slice(1);
564        window.scrollTo(0, 0); // 네이티브 해시점프 취소
565        window.addEventListener('load', function () {
566            setTimeout(function () {
567                var target = document.getElementById(targetId);
568                if (!target) return;
569                window.scrollTo(0, 0); // 그 사이 한 번 더 걸렸을 수 있는 네이티브 점프 재취소
570                target.scrollIntoView({ behavior: 'smooth', block: 'start' });
571            }, 50);
572        });
573    })();
574    // [2026-09-29 E-774] 운영자 로그인 시 유틸리티바 '관리자' 링크 노출(판정은 서버 세션, 응답은 true/false만)
575    (function () {
576        var li = document.querySelector('.bxsk-admin-link');
577        if (!li || !window.fetch) return;
578        function viaAdmin() { // [E-1000b] 두 도메인 세션이 공유되지 않을 때 — 관리자 도메인에 직접 확인(같은 사이트라 관리자 쿠키가 감)
579            return fetch('https://gdadmin.wssakorea.or.kr/wssa/admin_ping.php', { credentials: 'include', cache: 'no-store' })
580                .then(function (r) { return r.ok ? r.json() : null; })
581                .then(function (d) { if (d && d.admin === true) li.style.display = ""; })
582                .catch(function () { /* 로그인 안 함 · 차단 — 숨김 유지 */ });
583        }
584        fetch('/wssa/admin_link_api.php', { credentials: 'same-origin', cache: 'no-store' })
585            .then(function (r) { return r.ok ? r.json() : null; })
586            .then(function (d) { if (d && d.admin === true) { li.style.display = ""; } else { return viaAdmin(); } })
587            .catch(function () { /* 조용히 숨김 유지 */ });
588    })();
589    </script>
589
590
591    <style>
592    /* [E-1000] 공통 하위메뉴 탭(.bxsn) — 협회소개(intro.html .bxab-tabs)와 같은 모양 · 동작 */
593    .bxsn{position:relative;z-index:40;background:var(--surface,#fff);border-bottom:1px solid var(--border,#dce3ec);box-shadow:0 2px 10px rgba(10,46,110,.06)}
594    .bxsn.fix{position:fixed;left:0;right:0}
595    .bxsn-in{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;padding-top:0!important;padding-bottom:0!important}
596    .bxsn-in::-webkit-scrollbar{display:none}
597    .bxsn a{flex:none;display:inline-flex;align-items:center;height:56px;padding:0 16px;font-size:15px;font-weight:600;color:var(--text-muted,#4a5872);text-decoration:none;border-bottom:3px solid transparent;white-space:nowrap}
598    .bxsn a:hover,.bxsn a.on{color:var(--wssa-navy,#0a2e6e);border-bottom-color:var(--wssa-navy,#0a2e6e);font-weight:800}
599    .bxsn a:first-child{margin-left:-16px}
600    body.bxsn-on .wssa-sc-jump,body.bxsn-on .cx-tabs{display:none!important} /* [E-1000e] 페이지 안 바로가기 줄(학교스포츠클럽·자격증 안내) — 공통 탭과 2단이 되므로 숨김, 내용은 한 페이지로 이어짐 */
601    @media (max-width:1023px){
602      body.bxsn-on #header .bxsk-tabbar-row2{display:none!important}
603      .bxsn a{height:48px;padding:0 12px;font-size:14px}
604      .bxsn a:first-child{margin-left:-12px}
605    }
606    </style>
607    
607<script>
608    // [E-1000] 현재 페이지가 속한 대분류의 하위 메뉴(GNB 2행과 같은 목록)로 고정 탭을 만들고, 모바일에서는 좌우로 밀면 이전 · 다음 하위 메뉴로 이동.
609    // 협회소개 통합 페이지(.bxab-tabs)는 자체 탭 · 밀기가 있어 제외. 소식(공지 · 뉴스 · 갤러리)은 자체 분류 탭(.wssa-anchor-tabs, 인터뷰 포함 5개)을 이 탭으로 바꿔 씀(E-1000c).
610    (function () {
611        function boot() {
612            var tabbar = document.querySelector('#header .bxsk-tabbar');
613            if (!tabbar || document.querySelector('.bxab-tabs')) return;
614            function key(href) {
615                try { var u = new URL(href, location.href); var q = u.searchParams.get('htmid') || u.searchParams.get('bdId') || ''; return u.pathname.replace(/\/index\.php$/, '/') + (q ? '?' + q : ''); } catch (e) { return ''; }
616            }
617            var cur = key(location.href), group = null, links = [], idx = -1;
618            tabbar.querySelectorAll('.bxsk-tabbar-row2 .bxsk-submenu-row').forEach(function (g) {
619                if (group) return;
620                var ls = Array.prototype.filter.call(g.querySelectorAll('li'), function (li) { return !li.classList.contains('all') && li.style.display !== 'none'; })
621                    .map(function (li) { return li.querySelector('a'); }).filter(Boolean);
622                var hit = -1;
623                ls.forEach(function (a, i) {
624                    if (key(a.href) !== cur) return;
625                    var h = (new URL(a.href, location.href)).hash;
626                    if (hit < 0 || (h && h === location.hash) || (!h && !location.hash && ls[hit] && (new URL(ls[hit].href, location.href)).hash)) hit = i;
627                });
628                if (hit > -1) { group = g; links = ls; idx = hit; }
629            });
630            var anc = document.querySelector('.wssa-anchor-tabs');
631            if (anc) {
632                var al = Array.prototype.slice.call(anc.querySelectorAll('a')), ah = -1;
633                al.forEach(function (a, i) {
634                    if (key(a.href) !== cur) return;
635                    var h = (new URL(a.href, location.href)).hash;
636                    if (ah < 0 || (h && h === location.hash)) ah = i;
637                });
638                if (ah < 0) al.forEach(function (a, i) { if (a.classList.contains('active')) ah = i; });
639                if (al.length > 1 && ah > -1) { links = al; idx = ah; group = group || anc; }
640            }
641            if (!group || links.length < 2) return;
642            var label = '';
643            var top1 = tabbar.querySelector('.bxsk-tabbar-row1 a[data-tab="' + group.getAttribute('data-for') + '"]');
644            if (top1) label = top1.textContent.trim();
645            var bar = null;
646            {
647                bar = document.createElement('nav');
648                bar.className = 'bxsn';
649                bar.setAttribute('aria-label', (label || '하위') + ' 메뉴');
650                var html = '<div class="bxsn-in bxsk-container">';
651                links.forEach(function (a, i) { html += '<a href="' + a.getAttribute('href') + '"' + (i === idx ? ' class="on" aria-current="page"' : '') + '>' + a.textContent.trim() + '</a>'; });
652                bar.innerHTML = html + '</div>';
653                var hero = document.querySelector('#bxsk-subpage .bxsk-page-hero'), sub = document.getElementById('bxsk-subpage');
654                if (anc && anc.parentNode) { anc.parentNode.insertBefore(bar, anc); anc.style.display = 'none'; }
655                else if (hero && hero.parentNode) hero.parentNode.insertBefore(bar, hero.nextSibling);
656                else if (sub) sub.insertBefore(bar, sub.firstChild);
657                else { var hw = document.getElementById('header_warp') || document.getElementById('header'); if (hw && hw.parentNode) hw.parentNode.insertBefore(bar, hw.nextSibling); else return; }
658                document.querySelectorAll('.sch-tabs').forEach(function (t) { t.style.display = 'none'; }); // 대회일정 · 대회결과의 같은 탭(중복)
659                var nx0 = bar.nextElementSibling; if (nx0 && parseFloat(getComputedStyle(nx0).marginTop) < 0) nx0.style.marginTop = '16px'; // 히어로에 겹치게 둔 음수 여백(예: 랭킹 -32px)이 탭을 덮지 않게
660                var on = bar.querySelector('a.on'), w = bar.firstChild; if (on && w) w.scrollLeft = on.offsetLeft - 16;
661                // 고정: 공통 틀 overflow-x:hidden 때문에 sticky 불가 → 사이트 상단바(.bxsk-headbar 고정 시) 바로 아래에 fixed
662                var ph = document.createElement('div'); bar.parentNode.insertBefore(ph, bar);
663                var hb = document.querySelector('#header .bxsk-headbar');
664                var headH = function () { if (!hb || getComputedStyle(hb).position !== 'fixed') return 0; var b = hb.getBoundingClientRect().bottom; return b > 0 ? b : 0; };
665                var fix = function () {
666                    var off = headH();
667                    if (ph.getBoundingClientRect().top < off) {
668                        if (!bar.classList.contains('fix')) { ph.style.height = bar.offsetHeight + 'px'; bar.classList.add('fix'); }
669                        bar.style.top = off + 'px';
670                    } else if (bar.classList.contains('fix')) { bar.classList.remove('fix'); bar.style.top = ''; ph.style.height = '0'; }
671                };
672                window.addEventListener('scroll', fix, { passive: true });
673                window.addEventListener('resize', fix);
674                if (hb && window.MutationObserver) new MutationObserver(fix).observe(hb, { attributes: true, attributeFilter: ['class', 'style'] });
675                fix();
676                document.body.classList.add('bxsn-on');
677                // [E-1006] 페이지 안 바로가기(#id)는 고정 상단바 + 하위 메뉴 탭 높이만큼 덜 내려가게 — 그냥 두면 제목이 메뉴 밑에 가려짐
678                var jumpTo = function (id, smooth) {
679                    var el = id && document.getElementById(id);
680                    if (!el) return false;
681                    var off = (hb ? hb.offsetHeight : 0) + bar.offsetHeight + 16;
682                    window.scrollTo({ top: Math.max(0, el.getBoundingClientRect().top + window.pageYOffset - off), behavior: smooth ? 'smooth' : 'auto' });
683                    return true;
684                };
685                document.addEventListener('click', function (e) {
686                    var a = e.target.closest ? e.target.closest('a[href^="#"]') : null;
687                    if (!a || a.closest('.bxsn') || a.closest('#header')) return;
688                    var id = decodeURIComponent(a.getAttribute('href').slice(1));
689                    if (!id || !document.getElementById(id)) return;
690                    e.preventDefault();
691                    if (jumpTo(id, true) && history.replaceState) history.replaceState(null, '', '#' + id);
692                });
693                if (location.hash.length > 1) { var h0 = decodeURIComponent(location.hash.slice(1)); window.addEventListener('load', function () { setTimeout(function () { jumpTo(h0, false); }, 60); }); }
694                window.addEventListener('hashchange', function () { // 뉴스 · 인터뷰 · 영상처럼 같은 페이지 안 이동
695                    var n = -1;
696                    links.forEach(function (a, i) { if (key(a.href) !== cur) return; var h = (new URL(a.href, location.href)).hash; if (n < 0 || (h && h === location.hash)) n = i; });
697                    if (n < 0) return; idx = n;
698                    Array.prototype.forEach.call(bar.querySelectorAll('a'), function (a, i) { a.classList.toggle('on', i === n); if (i === n) a.setAttribute('aria-current', 'page'); else a.removeAttribute('aria-current'); });
699                });
700            }
701            // 모바일 좌우 밀기 → 이전 · 다음 하위 메뉴
702            var sx = 0, sy = 0, st = 0, ok = false;
703            function hscroll(el) {
704                for (; el && el !== document.body; el = el.parentElement) {
705                    if (el.id === 'header' || el.id === 'header_warp' || el.classList.contains('bxsn') || el.classList.contains('leaflet-container')) return true;
706                    if (/^(INPUT|TEXTAREA|SELECT|BUTTON|CANVAS|VIDEO|IFRAME)$/.test(el.tagName)) return true;
707                    var cs = getComputedStyle(el);
708                    if ((cs.overflowX === 'auto' || cs.overflowX === 'scroll') && el.scrollWidth > el.clientWidth + 4) return true;
709                }
710                return false;
711            }
712            document.addEventListener('touchstart', function (e) {
713                ok = window.innerWidth <= 1023 && e.touches.length === 1 && !hscroll(e.target);
714                if (ok) { sx = e.touches[0].clientX; sy = e.touches[0].clientY; st = Date.now(); }
715            }, { passive: true });
716            document.addEventListener('touchend', function (e) {
717                if (!ok) return; ok = false;
718                var t = e.changedTouches[0], dx = t.clientX - sx, dy = t.clientY - sy;
719                if (Math.abs(dx) < 80 || Math.abs(dx) < Math.abs(dy) * 2 || Date.now() - st > 700) return;
720                var nx = dx < 0 ? idx + 1 : idx - 1;
721                if (nx < 0 || nx >= links.length) return;
722                location.href = links[nx].href;
723            }, { passive: true });
724        }
725        if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot); else boot();
726    })();
727    </script>
727
728</div>
729<!-- //header -->
730    </div>
731    <!-- //header_warp -->
732
733    <div id="container">
734        <div id="contents">
735        <!-- 본문 시작 -->
736
737            <!-- //location_wrap -->
738
739            <div class="sub_content">
740
741                <!-- //side_cont -->
742
743<style>
744  /* ===== v2 공통 ===== */
745  #contents:has(#bxsk-main.bxsk-v2) { padding-top: 0 !important; padding-bottom: 0 !important; }
746  #bxsk-main.bxsk-v2 { background: var(--bg); }
747  #bxsk-main.bxsk-v2 .v2-h2 { font-size: 24px; font-weight: 900; letter-spacing: -0.025em; color: var(--text); margin: 0; line-height: 1.25; }
748  #bxsk-main.bxsk-v2 .v2-sub { font-size: 13px; color: var(--text-soft); }
749  #bxsk-main.bxsk-v2 .v2-more { font-size: 13px; font-weight: 800; color: var(--wssa-red); }
750  #bxsk-main.bxsk-v2 .v2-more:hover { color: var(--wssa-red-dark); }
751  #bxsk-main.bxsk-v2 .v2-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 12px; margin-bottom: 18px; flex-wrap: wrap; }
752  #bxsk-main.bxsk-v2 .v2-head .l { display: flex; flex-direction: column; gap: 6px; }
753  #bxsk-main.bxsk-v2 .v2-card { background: var(--surface); border: 1px solid var(--border); border-radius: 16px; }
754  #bxsk-main.bxsk-v2 .v2-num { font-weight: 900; letter-spacing: -0.02em; font-variant-numeric: tabular-nums; }
755  #bxsk-main.bxsk-v2 .bxsk-sample { opacity: .55; filter: grayscale(.3); }
756  #bxsk-main.bxsk-v2 .bxsk-sample .cat, #bxsk-main.bxsk-v2 .bxsk-sample .date, #bxsk-main.bxsk-v2 .bxsk-sample .tag-mini { color: var(--text-soft) !important; background: var(--bg-soft) !important; }
757
758  /* ===== 1. 히어로(재설계) — 헤더 바로 아래 네이비 밴드, 좌 카피 / 우 비주얼, 하단 슬라이드 탭 ===== */
759  #bxsk-main.bxsk-v2 .v2-hero { background: linear-gradient(135deg, var(--wssa-navy-deep) 0%, var(--wssa-navy) 62%, var(--wssa-blue) 130%); color: #fff; position: relative; overflow: hidden; }
760  #bxsk-main.bxsk-v2 .v2-hero::before { content: ''; position: absolute; right: -120px; top: -160px; width: 620px; height: 620px; border-radius: 50%; background: radial-gradient(circle, rgba(255,199,44,0.22) 0%, rgba(255,199,44,0) 70%); pointer-events: none; }
761  #bxsk-main.bxsk-v2 .v2-hero-in { position: relative; padding-top: 36px; }
762  #bxsk-main.bxsk-v2 .v2-hero-stage { position: relative; min-height: 400px; }
763  #bxsk-main.bxsk-v2 .v2-slide { display: none; grid-template-columns: minmax(0, 6fr) minmax(0, 6fr); gap: 32px; align-items: center; min-height: 400px; }
764  #bxsk-main.bxsk-v2 .v2-slide.is-active { display: grid; animation: v2fade .45s ease; }
765  @keyframes v2fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
766  #bxsk-main.bxsk-v2 .v2-slide-copy { display: flex; flex-direction: column; gap: 18px; padding-bottom: 8px; min-width: 0; }
767  #bxsk-main.bxsk-v2 .v2-eyebrow { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
768  #bxsk-main.bxsk-v2 .v2-chip { display: inline-flex; align-items: center; padding: 5px 10px; border-radius: 6px; background: var(--wssa-yellow); color: var(--wssa-navy-deep); font-size: 12px; font-weight: 800; letter-spacing: .04em; }
769  #bxsk-main.bxsk-v2 .v2-date { font-size: 13px; color: var(--gray-300); font-family: var(--font-mono); }
770  #bxsk-main.bxsk-v2 .v2-slide h2 { margin: 0; font-size: 42px; font-weight: 900; line-height: 1.2; letter-spacing: -0.025em; color: #fff; word-break: keep-all; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
771  #bxsk-main.bxsk-v2 .v2-cta-row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
772  #bxsk-main.bxsk-v2 .v2-btn { height: 48px; padding-left: 22px; padding-right: 22px; border-radius: 12px; display: inline-flex; align-items: center; font-size: 15px; font-weight: 800; transition: transform .12s, opacity .12s; }
773  #bxsk-main.bxsk-v2 .v2-btn:hover { transform: translateY(-1px); }
774  #bxsk-main.bxsk-v2 .v2-btn-yellow { background: var(--wssa-yellow); color: var(--wssa-navy-deep); }
775  #bxsk-main.bxsk-v2 .v2-btn-yellow:hover { background: var(--wssa-yellow-deep); }
776  #bxsk-main.bxsk-v2 .v2-btn-ghost { border: 1px solid rgba(255,255,255,0.38); color: #fff; }
777  #bxsk-main.bxsk-v2 .v2-btn-ghost:hover { background: rgba(255,255,255,0.08); }
778  #bxsk-main.bxsk-v2 .v2-slide-visual { min-width: 0; display: flex; justify-content: flex-end; }
779  #bxsk-main.bxsk-v2 .v2-visual-frame { width: 100%; max-width: 640px; aspect-ratio: 16 / 9; border-radius: 20px; overflow: hidden; background: linear-gradient(160deg, var(--wssa-blue) 0%, var(--wssa-navy) 70%); border: 1px solid rgba(255,255,255,0.16); box-shadow: 0 30px 60px rgba(4,21,58,0.45); display: flex; align-items: center; justify-content: center; position: relative; }
780  #bxsk-main.bxsk-v2 .v2-visual-frame img { width: 100%; height: 100%; object-fit: cover; display: block; }
781  #bxsk-main.bxsk-v2 .v2-visual-frame .bxsk-hero-noimg { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 13px; color: rgba(255,255,255,0.6); background-size: cover; background-position: center; }
782  #bxsk-main.bxsk-v2 .v2-hero-nav { position: absolute; right: 20px; top: 14px; display: flex; align-items: center; gap: 6px; background: rgba(4,21,58,0.55); border: 1px solid rgba(255,255,255,0.14); border-radius: 999px; padding-top: 4px; padding-bottom: 4px; padding-left: 8px; padding-right: 8px; font-size: 12px; z-index: 2; }
783  #bxsk-main.bxsk-v2 .v2-hero-nav button { width: 28px; height: 28px; border-radius: 50%; display: grid; place-items: center; color: #fff; }
784  #bxsk-main.bxsk-v2 .v2-hero-nav button:hover { background: rgba(255,255,255,0.14); }
785  #bxsk-main.bxsk-v2 .v2-hero-nav .counter { font-family: var(--font-mono); color: var(--gray-300); padding-left: 4px; padding-right: 4px; }
786  #bxsk-main.bxsk-v2 .v2-hero-nav .counter b { color: #fff; }
787  #bxsk-main.bxsk-v2 .v2-hero-tabs { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); border-top: 1px solid rgba(255,255,255,0.14); margin-top: 28px; }
788  #bxsk-main.bxsk-v2 .v2-hero-tab { display: flex; flex-direction: column; gap: 4px; padding-top: 14px; padding-bottom: 20px; padding-right: 18px; border-top: 3px solid transparent; margin-top: -1px; color: var(--gray-300); text-align: left; min-width: 0; cursor: pointer; }
789  #bxsk-main.bxsk-v2 .v2-hero-tab + .v2-hero-tab { padding-left: 18px; }
790  #bxsk-main.bxsk-v2 .v2-hero-tab:hover { color: #fff; }
791  #bxsk-main.bxsk-v2 .v2-hero-tab.is-active { border-top-color: var(--wssa-yellow); color: #fff; }
792  #bxsk-main.bxsk-v2 .v2-hero-tab .k { font-size: 11px; font-weight: 800; letter-spacing: .06em; }
793  #bxsk-main.bxsk-v2 .v2-hero-tab.is-active .k { color: var(--wssa-yellow); }
794  #bxsk-main.bxsk-v2 .v2-hero-tab .t { font-size: 13.5px; font-weight: 700; line-height: 1.4; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
795  /* 퀵스탯(기존 .quick-stats 재사용) — 히어로 밴드와 한 덩어리로 */
796  #bxsk-main.bxsk-v2 .quick-stats { border-top: 1px solid rgba(255,255,255,0.08); }
797
798  /* ===== 2. 지금 협회에서 — 4타일 ===== */
799  #bxsk-main.bxsk-v2 .v2-now { padding-top: 40px; }
800  #bxsk-main.bxsk-v2 .v2-now-head { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
801  #bxsk-main.bxsk-v2 .v2-now-head .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--wssa-red); box-shadow: 0 0 0 4px rgba(215,38,61,0.15); }
802  #bxsk-main.bxsk-v2 .v2-now-head .t { font-size: 15px; font-weight: 900; letter-spacing: .02em; }
803  #bxsk-main.bxsk-v2 .v2-now-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; }
804  #bxsk-main.bxsk-v2 .v2-tile { border-radius: 16px; background: var(--bg-soft); padding: 22px 24px; display: flex; flex-direction: column; gap: 12px; min-height: 168px; min-width: 0; transition: transform .13s, box-shadow .13s; }
805  #bxsk-main.bxsk-v2 .v2-tile:hover { transform: translateY(-3px); box-shadow: 0 12px 26px rgba(10,46,110,.10); }
806  #bxsk-main.bxsk-v2 .v2-tile .k { font-size: 12px; font-weight: 800; color: var(--text-soft); letter-spacing: .06em; }
807  #bxsk-main.bxsk-v2 .v2-tile .t { font-size: 19px; font-weight: 900; line-height: 1.35; letter-spacing: -0.015em; color: var(--text); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
808  #bxsk-main.bxsk-v2 .v2-tile .t small { font-size: 13px; font-weight: 800; }
809  #bxsk-main.bxsk-v2 .v2-tile .m { margin-top: auto; font-size: 13px; color: var(--text-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
810  #bxsk-main.bxsk-v2 .v2-tile.navy { background: var(--wssa-navy); color: #fff; }
811  #bxsk-main.bxsk-v2 .v2-tile.navy .k { color: var(--wssa-yellow); }
812  #bxsk-main.bxsk-v2 .v2-tile.navy .t { color: #fff; }
813  #bxsk-main.bxsk-v2 .v2-tile.navy .m { color: var(--gray-300); }
814
815  /* ===== 3. 이번 시즌 대회 + 참여 + 내 페이지 ===== */
816  #bxsk-main.bxsk-v2 .v2-season { padding-top: 56px; }
817  #bxsk-main.bxsk-v2 .v2-season-grid { display: grid; grid-template-columns: minmax(0, 8fr) minmax(0, 4fr); gap: 24px; align-items: start; }
818  #bxsk-main.bxsk-v2 .v2-chips { display: flex; gap: 6px; flex-wrap: wrap; }
819  #bxsk-main.bxsk-v2 .v2-chips button { padding-top: 6px; padding-bottom: 6px; padding-left: 12px; padding-right: 12px; border-radius: 14px; background: var(--bg-soft); font-size: 12px; font-weight: 800; color: var(--text-muted); border: 1px solid transparent; }
820  #bxsk-main.bxsk-v2 .v2-chips button:hover { border-color: var(--border-strong); }
821  #bxsk-main.bxsk-v2 .v2-chips button.active { background: var(--wssa-navy); color: #fff; }
822  #bxsk-main.bxsk-v2 .v2-months { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); min-height: 180px; }
823  #bxsk-main.bxsk-v2 .v2-month { padding-top: 18px; padding-bottom: 18px; padding-right: 20px; display: flex; flex-direction: column; gap: 12px; min-width: 0; }
824  #bxsk-main.bxsk-v2 .v2-month + .v2-month { padding-left: 20px; border-left: 1px solid var(--border); }
825  #bxsk-main.bxsk-v2 .v2-month .mh { font-size: 12px; font-weight: 800; color: var(--text-soft); }
826  #bxsk-main.bxsk-v2 .v2-ev { display: flex; gap: 12px; min-width: 0; }
827  #bxsk-main.bxsk-v2 .v2-ev .d { width: 34px; flex-shrink: 0; font-size: 22px; font-weight: 900; letter-spacing: -0.02em; line-height: 1.1; color: var(--text); font-variant-numeric: tabular-nums; }
828  #bxsk-main.bxsk-v2 .v2-ev:first-of-type .d.hot { color: var(--wssa-red); }
829  #bxsk-main.bxsk-v2 .v2-ev .b { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
830  #bxsk-main.bxsk-v2 .v2-ev .n { font-size: 14px; font-weight: 700; line-height: 1.4; color: var(--text); }
831  #bxsk-main.bxsk-v2 .v2-ev:hover .n { color: var(--wssa-blue); }
832  #bxsk-main.bxsk-v2 .v2-ev .v { font-size: 12px; color: var(--text-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
833  #bxsk-main.bxsk-v2 .v2-months .empty { grid-column: 1 / -1; padding-top: 28px; padding-bottom: 28px; text-align: center; color: var(--text-soft); font-size: 13px; }
834  #bxsk-main.bxsk-v2 .v2-season-links { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 12px; }
835  #bxsk-main.bxsk-v2 .v2-join { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-top: 18px; }
836  #bxsk-main.bxsk-v2 .v2-join a { border-radius: 14px; border: 1px solid var(--border); padding: 18px 20px; display: flex; justify-content: space-between; align-items: center; gap: 10px; min-width: 0; transition: border-color .13s, transform .13s; }
837  #bxsk-main.bxsk-v2 .v2-join a:hover { border-color: var(--wssa-navy); transform: translateY(-2px); }
838  #bxsk-main.bxsk-v2 .v2-join .b { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
839  #bxsk-main.bxsk-v2 .v2-join .n { font-size: 15px; font-weight: 800; color: var(--text); }
840  #bxsk-main.bxsk-v2 .v2-join .s { font-size: 12px; color: var(--text-soft); }
841  #bxsk-main.bxsk-v2 .v2-join .ar { font-size: 18px; color: var(--wssa-red); flex-shrink: 0; }
842  #bxsk-main.bxsk-v2 .v2-me { border-radius: 18px; background: var(--bg-soft); padding: 24px; display: flex; flex-direction: column; gap: 16px; }
843  #bxsk-main.bxsk-v2 .v2-me .h { display: flex; justify-content: space-between; align-items: center; }
844  #bxsk-main.bxsk-v2 .v2-me .h b { font-size: 16px; font-weight: 900; }
845  #bxsk-main.bxsk-v2 .v2-me .h span { font-size: 12px; color: var(--text-soft); }
846  #bxsk-main.bxsk-v2 .v2-me p { margin: 0; font-size: 14px; line-height: 1.65; color: var(--text-muted); }
847  #bxsk-main.bxsk-v2 .v2-me p b { color: var(--wssa-navy); }
848  #bxsk-main.bxsk-v2 .v2-me-rows { display: flex; flex-direction: column; gap: 8px; }
849  #bxsk-main.bxsk-v2 .v2-me-rows a { border-radius: 10px; background: var(--surface); padding: 12px 14px; display: flex; justify-content: space-between; align-items: center; font-size: 13px; color: var(--text-muted); border: 1px solid transparent; }
850  #bxsk-main.bxsk-v2 .v2-me-rows a:hover { border-color: var(--border-strong); color: var(--text); }
851  #bxsk-main.bxsk-v2 .v2-me-rows a b { color: var(--text); font-weight: 800; }
852  #bxsk-main.bxsk-v2 .v2-me-btn { height: 46px; border-radius: 12px; background: var(--wssa-navy); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 800; }
853  #bxsk-main.bxsk-v2 .v2-me-btn:hover { background: var(--wssa-navy-dark); }
854
855  /* ===== 4. 한국기록 — 시즌 경신 목록 + 카드 3 + 내 기록 찾기 + 전체 표(기존) ===== */
856  #bxsk-main.bxsk-v2 .v2-records { padding-top: 64px; }
857  #bxsk-main.bxsk-v2 .v2-rec-grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 24px; align-items: start; }
858  #bxsk-main.bxsk-v2 .v2-rec-new { display: flex; flex-direction: column; border-top: 1px solid var(--border); }
859  #bxsk-main.bxsk-v2 .v2-rec-new a, #bxsk-main.bxsk-v2 .v2-rec-new .empty { padding-top: 12px; padding-bottom: 12px; border-bottom: 1px solid var(--border); display: grid; grid-template-columns: minmax(0, 150px) 70px minmax(0, 1fr) 44px; align-items: center; gap: 8px; font-size: 14px; min-width: 0; }
860  #bxsk-main.bxsk-v2 .v2-rec-new .empty { display: block; color: var(--text-soft); font-size: 13px; }
861  #bxsk-main.bxsk-v2 .v2-rec-new .lb { color: var(--text-soft); font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
862  #bxsk-main.bxsk-v2 .v2-rec-new .tm { font-weight: 900; font-family: var(--font-mono); color: var(--wssa-navy); }
863  #bxsk-main.bxsk-v2 .v2-rec-new .nm { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
864  #bxsk-main.bxsk-v2 .v2-rec-new .nw { font-size: 11px; font-weight: 900; color: var(--wssa-red); text-align: right; }
865  #bxsk-main.bxsk-v2 .v2-rec-links { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 14px; }
866  #bxsk-main.bxsk-v2 .v2-rec-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
867  #bxsk-main.bxsk-v2 .v2-rec-card { border-radius: 16px; background: var(--wssa-navy); color: #fff; padding: 22px; display: flex; flex-direction: column; gap: 6px; min-width: 0; }
868  #bxsk-main.bxsk-v2 .v2-rec-card .k { font-size: 12px; color: var(--gray-300); }
869  #bxsk-main.bxsk-v2 .v2-rec-card .v { font-size: 38px; font-weight: 900; line-height: 1; letter-spacing: -0.02em; font-family: var(--font-mono); }
870  #bxsk-main.bxsk-v2 .v2-rec-card .n { font-size: 13px; color: #fff; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
871  #bxsk-main.bxsk-v2 .v2-find { border-radius: 16px; border: 1px solid var(--border); padding: 22px 24px; display: flex; flex-direction: column; gap: 14px; margin-top: 14px; }
872  #bxsk-main.bxsk-v2 .v2-find .h { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
873  #bxsk-main.bxsk-v2 .v2-find .h b { font-size: 16px; font-weight: 900; }
874  #bxsk-main.bxsk-v2 .v2-find .h span { font-size: 12px; color: var(--text-soft); }
875  #bxsk-main.bxsk-v2 .v2-find form { display: flex; gap: 8px; }
876  #bxsk-main.bxsk-v2 .v2-find input { flex: 1; min-width: 0; height: 50px; border-radius: 12px; border: 1px solid var(--border); background: var(--bg-soft); padding-left: 16px; padding-right: 16px; font-size: 15px; font-family: inherit; color: var(--text); }
877  #bxsk-main.bxsk-v2 .v2-find input:focus { outline: 2px solid var(--wssa-blue); outline-offset: -1px; background: #fff; }
878  #bxsk-main.bxsk-v2 .v2-find button { height: 50px; padding-left: 20px; padding-right: 20px; border-radius: 12px; background: var(--wssa-navy); color: #fff; font-size: 14px; font-weight: 800; flex-shrink: 0; }
879  #bxsk-main.bxsk-v2 .v2-find .tags { display: flex; gap: 8px; flex-wrap: wrap; }
880  #bxsk-main.bxsk-v2 .v2-find .tags a { padding-top: 6px; padding-bottom: 6px; padding-left: 10px; padding-right: 10px; border-radius: 6px; background: var(--bg-soft); font-size: 12px; font-weight: 800; color: var(--text-muted); }
881  #bxsk-main.bxsk-v2 .v2-find .tags a:hover { color: var(--wssa-navy); }
882  #bxsk-main.bxsk-v2 .v2-rec-two { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 14px; }
883  #bxsk-main.bxsk-v2 .v2-rec-two a { border-radius: 16px; border: 1px solid var(--border); padding: 20px 22px; display: flex; flex-direction: column; gap: 6px; min-width: 0; transition: border-color .13s; }
884  #bxsk-main.bxsk-v2 .v2-rec-two a:hover { border-color: var(--wssa-navy); }
885  #bxsk-main.bxsk-v2 .v2-rec-two .k { font-size: 12px; font-weight: 800; color: var(--text-soft); }
886  #bxsk-main.bxsk-v2 .v2-rec-two .t { font-size: 15px; font-weight: 800; line-height: 1.45; color: var(--text); }
887  #bxsk-main.bxsk-v2 .v2-rec-table { margin-top: 36px; }
888  #bxsk-main.bxsk-v2 .v2-rec-table .sec-head { margin-bottom: 14px; }
889  /* 연령별 표(기존 index.html 규칙 승계) */
890  #bxsk-main.bxsk-v2 .bxsk-records-tabs { display: flex; gap: 6px; margin-bottom: 16px; flex-wrap: wrap; }
891  #bxsk-main.bxsk-v2 .bxsk-records-tabs button { padding-top: 9px; padding-bottom: 9px; padding-left: 18px; padding-right: 18px; background: var(--bg-soft); border: 1px solid var(--border); border-radius: 6px; font-size: 13px; font-weight: 800; color: var(--text-muted); cursor: pointer; transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.15s, color 0.15s, border-color 0.15s; }
892  #bxsk-main.bxsk-v2 .bxsk-records-tabs button:hover { transform: translateY(-2px); box-shadow: 0 3px 8px rgba(10,46,110,0.18); border-color: var(--wssa-navy); }
893  #bxsk-main.bxsk-v2 .bxsk-records-tabs button.active, #bxsk-main.bxsk-v2 .bxsk-records-tabs button.active:hover { background: var(--wssa-navy); color: #fff; border-color: var(--wssa-navy); box-shadow: 0 3px 8px rgba(10,46,110,0.35); }
894  #bxsk-main.bxsk-v2 .bxsk-records-table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: 8px; }
895  #bxsk-main.bxsk-v2 .bxsk-records-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 480px; }
896  #bxsk-main.bxsk-v2 .bxsk-records-table thead th { background: var(--wssa-navy); color: #fff; padding: 10px 12px; font-size: 11.5px; font-weight: 800; letter-spacing: 0.03em; text-align: center; border: 1px solid rgba(255,255,255,0.1); }
897  #bxsk-main.bxsk-v2 .bxsk-records-table tbody td { padding: 9px 12px; text-align: center; border-bottom: 1px solid var(--border); }
898  #bxsk-main.bxsk-v2 .bxsk-records-table tbody tr:nth-child(even) { background: var(--bg-soft); }
899  #bxsk-main.bxsk-v2 .bxsk-records-table .age-cell { font-weight: 800; text-align: left; color: var(--text); }
900  #bxsk-main.bxsk-v2 .bxsk-records-table .time-cell { font-family: var(--font-mono); font-weight: 800; color: var(--wssa-navy); }
901  #bxsk-main.bxsk-v2 .bxsk-records-table .name-cell { color: var(--text-muted); }
902  #bxsk-main.bxsk-v2 .bxsk-records-table .year-cell { color: var(--text-soft); font-size: 11px; }
903  #bxsk-main.bxsk-v2 .bxsk-records-table .empty-cell { color: var(--text-soft); font-weight: 400; }
904
905  /* ===== 5. 소식(기존 main-grid 재사용) / 영상 ===== */
906  #bxsk-main.bxsk-v2 .v2-news { padding-top: 56px; }
907  #bxsk-main.bxsk-v2 .v2-news .main-grid { padding-top: 0; padding-bottom: 0; }
908  #bxsk-main.bxsk-v2 .v2-video { padding-top: 40px; }
909  #bxsk-main.bxsk-v2 .bxsk-sec-video .video-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; }
910  /* [E-915] 영상 칸 광고(eduPass) — 태블릿·모바일 전용 */
911  #bxsk-main.bxsk-v2 .bxsk-vd-ad { display: none; text-decoration: none; }
912  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-thumb { display: flex; flex-direction: column; justify-content: center; gap: 3px; padding-top: 10px; padding-bottom: 10px; padding-left: 14px; padding-right: 14px; background: linear-gradient(135deg, #FFD95A 0%, var(--wssa-yellow) 60%, #F2A900 100%); color: var(--wssa-navy); transition: transform .15s; }
913  #bxsk-main.bxsk-v2 .bxsk-vd-ad:hover .ad-thumb, #bxsk-main.bxsk-v2 .bxsk-vd-ad:focus-visible .ad-thumb { transform: translateY(-2px); }
914  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-tag { position: absolute; top: 7px; right: 7px; font-size: 9px; font-weight: 800; letter-spacing: .08em; color: rgba(10, 46, 110, .65); border: 1px solid rgba(10, 46, 110, .3); border-radius: 4px; padding-top: 1px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; }
915  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-medal { position: absolute; right: 8px; bottom: 6px; width: 40px; height: 47px; }
916  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-medal .rb { fill: var(--wssa-red); }
917  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-medal .md { fill: var(--wssa-navy); }
918  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-medal .in { fill: none; stroke: var(--wssa-yellow); stroke-width: 1.6; }
919  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-medal .ck { fill: none; stroke: #fff; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
920  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-eyebrow { font-size: 9.5px; font-weight: 900; letter-spacing: .12em; color: rgba(10, 46, 110, .7); }
921  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-title { font-size: 15px; font-weight: 900; line-height: 1.25; letter-spacing: -0.02em; }
922  #bxsk-main.bxsk-v2 .bxsk-vd-ad .ad-cta { margin-top: 4px; align-self: flex-start; font-size: 11px; font-weight: 800; color: #fff; background: var(--wssa-navy); border-radius: 999px; padding-top: 3px; padding-bottom: 3px; padding-left: 9px; padding-right: 9px; }
923
924  /* ===== 6. 협회 현황 한눈에(기존 pubcards → 지표 타일) ===== */
925  #bxsk-main.bxsk-v2 .v2-pub { padding-top: 56px; }
926  #bxsk-main.bxsk-v2 .v2-pub-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
927  #bxsk-main.bxsk-v2 .v2-pub-grid a { padding-top: 20px; padding-bottom: 20px; padding-right: 14px; display: flex; flex-direction: column; gap: 4px; min-width: 0; }
928  #bxsk-main.bxsk-v2 .v2-pub-grid a + a { padding-left: 14px; border-left: 1px solid var(--border); }
929  #bxsk-main.bxsk-v2 .v2-pub-grid .bxsk-pc-num { font-size: 24px; font-weight: 900; letter-spacing: -0.02em; color: var(--wssa-navy); line-height: 1; font-variant-numeric: tabular-nums; }
930  #bxsk-main.bxsk-v2 .v2-pub-grid .bxsk-pc-num span { font-size: 13px; font-weight: 800; color: var(--text-muted); margin-left: 2px; }
931  #bxsk-main.bxsk-v2 .v2-pub-grid .l { font-size: 12px; color: var(--text-soft); font-weight: 700; }
932  #bxsk-main.bxsk-v2 .v2-pub-grid .d { font-size: 11.5px; color: var(--text-soft); line-height: 1.5; display: none; }
933  #bxsk-main.bxsk-v2 .v2-pub-grid a:hover .bxsk-pc-num { color: var(--wssa-blue); }
934  #bxsk-main.bxsk-v2 .bxsk-pc-mini { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
935  #bxsk-main.bxsk-v2 .bxsk-pc-mini b { font-size: 10.5px; font-weight: 800; color: var(--wssa-navy); background: var(--bg-soft); border: 1px solid var(--border); border-radius: 6px; padding-top: 3px; padding-bottom: 3px; padding-left: 6px; padding-right: 6px; }
936  #bxsk-main.bxsk-v2 .bxsk-pc-mini b em { font-style: normal; color: var(--wssa-blue); font-family: var(--font-mono); }
937
938  /* ===== 7. 처음이신가요 — 소개 카피 + CTA 3 + 공인 종목 5 + FAQ ===== */
939  #bxsk-main.bxsk-v2 .v2-intro { padding-top: 56px; }
940  #bxsk-main.bxsk-v2 .v2-intro-grid { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 24px; align-items: center; }
941  #bxsk-main.bxsk-v2 .v2-intro-copy { display: flex; flex-direction: column; gap: 14px; }
942  #bxsk-main.bxsk-v2 .v2-intro-copy p { margin: 0; font-size: 15px; line-height: 1.7; color: var(--text-muted); }
943  #bxsk-main.bxsk-v2 .v2-intro-btns { display: flex; gap: 10px; flex-wrap: wrap; }
944  #bxsk-main.bxsk-v2 .v2-intro-btns a { height: 46px; padding-left: 18px; padding-right: 18px; border-radius: 12px; border: 1px solid var(--border); display: inline-flex; align-items: center; font-size: 14px; font-weight: 800; color: var(--text); }
945  #bxsk-main.bxsk-v2 .v2-intro-btns a.pri { background: var(--wssa-navy); color: #fff; border-color: var(--wssa-navy); }
946  #bxsk-main.bxsk-v2 .v2-intro-btns a:hover { border-color: var(--wssa-navy); }
947  #bxsk-main.bxsk-v2 .events-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); }
948  /* [E-914] 지도자 매칭 광고 칸 — 모바일 전용 */
949  #bxsk-main.bxsk-v2 .bxsk-ev-ad { display: none; position: relative; overflow: hidden; flex-direction: column; justify-content: center; gap: 4px; min-height: 100%; padding-top: 16px; padding-bottom: 14px; padding-left: 16px; padding-right: 16px; border-radius: var(--r-md); background: linear-gradient(145deg, var(--wssa-navy) 0%, #143f8f 100%); color: #fff; text-decoration: none; box-shadow: 0 6px 18px rgba(10, 46, 110, 0.22); transition: transform .15s; }
950  #bxsk-main.bxsk-v2 .bxsk-ev-ad:hover, #bxsk-main.bxsk-v2 .bxsk-ev-ad:focus-visible { transform: translateY(-2px); }
951  #bxsk-main.bxsk-v2 .bxsk-ev-ad .ad-tag { position: absolute; top: 8px; right: 8px; font-size: 9px; font-weight: 800; letter-spacing: .08em; color: rgba(255, 255, 255, .7); border: 1px solid rgba(255, 255, 255, .35); border-radius: 4px; padding-top: 1px; padding-bottom: 1px; padding-left: 4px; padding-right: 4px; }
952  #bxsk-main.bxsk-v2 .bxsk-ev-ad .ad-cups { position: absolute; right: -6px; bottom: -4px; width: 64px; height: 47px; fill: var(--wssa-yellow); opacity: .9; }
953  #bxsk-main.bxsk-v2 .bxsk-ev-ad .ad-eyebrow { font-size: 10.5px; font-weight: 800; letter-spacing: .04em; color: var(--wssa-yellow); }
954  #bxsk-main.bxsk-v2 .bxsk-ev-ad .ad-title { font-size: 15px; font-weight: 900; line-height: 1.3; letter-spacing: -0.02em; position: relative; }
955  #bxsk-main.bxsk-v2 .bxsk-ev-ad .ad-cta { margin-top: 6px; align-self: flex-start; font-size: 11.5px; font-weight: 800; color: var(--wssa-navy); background: var(--wssa-yellow); border-radius: 999px; padding-top: 4px; padding-bottom: 4px; padding-left: 10px; padding-right: 10px; position: relative; }
956  #bxsk-main.bxsk-v2 .v2-faq { margin-top: 28px; display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; }
957  #bxsk-main.bxsk-v2 .v2-faq h3 { margin: 0; font-size: 14px; font-weight: 900; }
958  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 14px 20px; }
959  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 28px; }
960  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist li { display: flex; align-items: center; gap: 10px; padding-top: 9px; padding-bottom: 9px; border-bottom: 1px dashed var(--border); font-size: 13px; min-width: 0; }
961  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist .d { color: var(--text-soft); font-family: var(--font-mono); font-size: 11px; flex-shrink: 0; }
962  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist a { color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; flex: 1; }
963  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist a:hover { color: var(--wssa-navy); }
964  #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-loading { text-align: center; color: var(--text-soft); font-size: 12px; padding-top: 10px; padding-bottom: 10px; margin: 0; }
965  #bxsk-main.bxsk-v2 .v2-faq .more { text-align: right; font-size: 12px; font-weight: 800; color: var(--wssa-blue); }
966
967  /* ===== 8~13. 퀵메뉴·배너·3열·갤러리·스폰서(기존 규칙 재사용, 간격만) ===== */
968  #bxsk-main.bxsk-v2 .quick-menu { margin-top: 40px; }
969  #bxsk-main.bxsk-v2 .v2-gap { padding-top: 24px; }
970  #bxsk-main.bxsk-v2 .two-col-block .info-col { display: flex; flex-direction: column; }
971  #bxsk-main.bxsk-v2 .two-col-block .info-col .list { flex: 1; display: flex; flex-direction: column; justify-content: space-between; }
972  #bxsk-main.bxsk-v2 .bxsk-gallery-cards { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 16px; }
973  #bxsk-main.bxsk-v2 .bxsk-gallery-card { display: block; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); overflow: hidden; transition: all 0.15s; }
974  #bxsk-main.bxsk-v2 .bxsk-gallery-card:hover { border-color: var(--wssa-navy); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
975  #bxsk-main.bxsk-v2 .bxsk-gallery-card .thumb { aspect-ratio: 4/3; background-size: cover; background-position: center; background-color: var(--bg-soft); }
976  #bxsk-main.bxsk-v2 .bxsk-gallery-card .cap { padding: 10px 12px; font-size: 12px; font-weight: 700; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
977  #bxsk-main.bxsk-v2 section.sponsors { padding-top: 28px !important; padding-bottom: 28px !important; margin-top: 40px; border-top: 1px solid var(--border); }
978  #bxsk-main.bxsk-v2 .bxsk-sponsor-cards { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 16px; list-style: none; padding: 0; margin: 0; }
979  #bxsk-main.bxsk-v2 .bxsk-sponsor-cards li { min-width: 0; }
980  #bxsk-main.bxsk-v2 .bxsk-sponsor-cards a { display: block; aspect-ratio: 3 / 1; height: auto; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r-md); padding: 0; overflow: hidden; transition: all 0.15s; }
981  #bxsk-main.bxsk-v2 .bxsk-sponsor-cards a:hover { border-color: var(--wssa-navy); transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0,0,0,0.08); }
982  #bxsk-main.bxsk-v2 .bxsk-sponsor-cards img { display: block; width: 100%; height: 100%; object-fit: cover; }
983
984  /* ===== 반응형 ===== */
985  @media (max-width: 1024px) {
986    #bxsk-main.bxsk-v2 .v2-slide h2 { font-size: 34px; }
987    #bxsk-main.bxsk-v2 .v2-now-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
988    #bxsk-main.bxsk-v2 .v2-season-grid, #bxsk-main.bxsk-v2 .v2-rec-grid, #bxsk-main.bxsk-v2 .v2-intro-grid { grid-template-columns: minmax(0, 1fr); }
989    #bxsk-main.bxsk-v2 .v2-pub-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
990    #bxsk-main.bxsk-v2 .v2-pub-grid a:nth-child(4) { padding-left: 0; border-left: none; }
991    #bxsk-main.bxsk-v2 .v2-pub-grid a:nth-child(-n+3) { border-bottom: 1px solid var(--border); }
992    #bxsk-main.bxsk-v2 .bxsk-sec-video .video-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
993    #bxsk-main.bxsk-v2 .bxsk-vd-ad { display: block; } /* [E-915] 3열·2열에서 5개 뒤 빈 칸 */
994    #bxsk-main.bxsk-v2 .bxsk-gallery-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
995  }
996  @media (max-width: 640px) {
997    #bxsk-main.bxsk-v2 .bxsk-records-table { font-size: 11.5px; }
998    #bxsk-main.bxsk-v2 .bxsk-records-table thead th, #bxsk-main.bxsk-v2 .bxsk-records-table tbody td { padding: 7px 6px; }
999  }
1000  @media (max-width: 760px) {
1001    #bxsk-main.bxsk-v2 .v2-hero-in { padding-top: 20px; }
1002    #bxsk-main.bxsk-v2 .v2-hero-stage, #bxsk-main.bxsk-v2 .v2-slide { min-height: 0; }
1003    #bxsk-main.bxsk-v2 .v2-slide { grid-template-columns: minmax(0, 1fr); gap: 16px; }
1004    #bxsk-main.bxsk-v2 .v2-slide-visual { order: -1; }
1005    #bxsk-main.bxsk-v2 .v2-visual-frame { max-width: none; border-radius: 14px; }
1006    #bxsk-main.bxsk-v2 .v2-slide h2 { font-size: 26px; -webkit-line-clamp: 3; }
1007    #bxsk-main.bxsk-v2 .v2-cta-row .v2-btn { height: 44px; font-size: 14px; }
1008    #bxsk-main.bxsk-v2 .v2-cta-row .v2-btn-yellow { flex: 1; justify-content: center; }
1009    #bxsk-main.bxsk-v2 .v2-hero-nav { position: static; align-self: flex-end; margin-top: 12px; width: max-content; margin-left: auto; }
1010    #bxsk-main.bxsk-v2 .v2-hero-tabs { margin-top: 12px; gap: 6px; border-top: none; padding-bottom: 16px; }
1011    #bxsk-main.bxsk-v2 .v2-hero-tab { padding: 0 !important; border-top: none; margin-top: 0; height: 4px; border-radius: 2px; background: rgba(255,255,255,0.25); }
1012    #bxsk-main.bxsk-v2 .v2-hero-tab.is-active { background: var(--wssa-yellow); }
1013    #bxsk-main.bxsk-v2 .v2-hero-tab .k, #bxsk-main.bxsk-v2 .v2-hero-tab .t { display: none; }
1014    #bxsk-main.bxsk-v2 .v2-now { padding-top: 24px; }
1015    #bxsk-main.bxsk-v2 .v2-now-grid { grid-template-columns: minmax(0, 1fr); gap: 10px; }
1016    #bxsk-main.bxsk-v2 .v2-tile { min-height: 0; padding: 16px 18px; }
1017    #bxsk-main.bxsk-v2 .v2-tile .t { font-size: 16px; }
1018    #bxsk-main.bxsk-v2 .v2-season, #bxsk-main.bxsk-v2 .v2-records, #bxsk-main.bxsk-v2 .v2-news, #bxsk-main.bxsk-v2 .v2-pub, #bxsk-main.bxsk-v2 .v2-intro { padding-top: 36px; }
1019    #bxsk-main.bxsk-v2 .v2-h2 { font-size: 20px; }
1020    #bxsk-main.bxsk-v2 .v2-months { grid-template-columns: minmax(0, 1fr); }
1021    #bxsk-main.bxsk-v2 .v2-month { padding-right: 0; }
1022    #bxsk-main.bxsk-v2 .v2-month + .v2-month { padding-left: 0; border-left: none; border-top: 1px solid var(--border); }
1023    #bxsk-main.bxsk-v2 .v2-join { grid-template-columns: minmax(0, 1fr); }
1024    #bxsk-main.bxsk-v2 .v2-rec-cards { grid-template-columns: minmax(0, 1fr); }
1025    #bxsk-main.bxsk-v2 .v2-rec-card { flex-direction: row; align-items: center; justify-content: space-between; flex-wrap: wrap; }
1026    #bxsk-main.bxsk-v2 .v2-rec-card .v { font-size: 28px; }
1027    #bxsk-main.bxsk-v2 .v2-rec-new a { grid-template-columns: minmax(0, 1fr) 64px 40px; }
1028    #bxsk-main.bxsk-v2 .v2-rec-new .nm { display: none; }
1029    #bxsk-main.bxsk-v2 .v2-rec-two { grid-template-columns: minmax(0, 1fr); }
1030    #bxsk-main.bxsk-v2 .v2-find form { flex-direction: column; }
1031    #bxsk-main.bxsk-v2 .v2-find input { flex: none; width: 100%; }
1032    #bxsk-main.bxsk-v2 .sec-head { flex-wrap: wrap; row-gap: 4px; }
1033    #bxsk-main.bxsk-v2 .sec-head .left { flex-wrap: wrap; row-gap: 2px; }
1034    #bxsk-main.bxsk-v2 .sec-head h2 { white-space: nowrap; }
1035    #bxsk-main.bxsk-v2 .v2-pub-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1036    #bxsk-main.bxsk-v2 .v2-pub-grid a { border-left: none !important; padding-left: 0 !important; border-bottom: 1px solid var(--border); }
1037    #bxsk-main.bxsk-v2 .v2-pub-grid a:nth-last-child(-n+2) { border-bottom: none; }
1038    #bxsk-main.bxsk-v2 .v2-pub-grid a:nth-child(2n) { padding-left: 14px !important; border-left: 1px solid var(--border) !important; }
1039    #bxsk-main.bxsk-v2 .events-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1040    #bxsk-main.bxsk-v2 .bxsk-ev-ad { display: flex; } /* [E-914] */
1041    #bxsk-main.bxsk-v2 .bxsk-intro-faqwrap .wssa-cs-minilist { grid-template-columns: minmax(0, 1fr); }
1042    #bxsk-main.bxsk-v2 .bxsk-sec-video .video-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1043    #bxsk-main.bxsk-v2 .bxsk-gallery-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1044    #bxsk-main.bxsk-v2 .bxsk-sponsor-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
1045  }
1046</style>
1047
1048<div id="bxsk-main" class="bxsk-scope bxsk-v2">
1049<h1 style="position:absolute;width:1px;height:1px;margin:-1px;padding-top:0;padding-bottom:0;padding-left:0;padding-right:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;">대한스포츠스태킹협회 — 스포츠스태킹 대회 일정·결과·랭킹·기록·교육 공식 홈페이지</h1>
1050
1051<!-- ============ 1. HERO (재설계) — 헤더 바로 아래 네이비 밴드. 슬라이드 소스는 index.html과 동일:
1052     관리자 선택(home_hero_api) 우선, 없으면 자동 4장(heroSlide 최신 1 + 공지/뉴스/영상 각 최신 1 — index.html의 '최신 2건'을
1053     4탭 구조에 맞춰 풀별 1건으로 조정). 하단 탭 = 슬라이드 인덱스(분류 + 제목). ============ -->
1054<section class="v2-hero" data-screen-label="home/hero">
1055  <div class="container v2-hero-in">
1056    <div class="v2-hero-nav">
1057      <button type="button" class="v2-hero-prev" aria-label="이전"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="15 18 9 12 15 6"/></svg></button>
1058      <span class="counter"><b id="bxskHeroCur">01</b> / <span id="bxskHeroTotal">04</span></span>
1059      <button type="button" class="v2-hero-play" aria-label="재생/정지"><svg width="9" height="9" viewBox="0 0 24 24" fill="currentColor"><rect x="6" y="5" width="4" height="14"/><rect x="14" y="5" width="4" height="14"/></svg></button>
1060      <button type="button" class="v2-hero-next" aria-label="다음"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="9 18 15 12 9 6"/></svg></button>
1061    </div>
1062
1063    <div class="v2-hero-stage" id="bxskHeroStage">
1064      <!-- 1번: heroSlide 최신 1건 고정 -->
1065
1066      <!-- 2~4번 후보 풀: 공지(newnotice) / 뉴스(newsPress) / 영상(videoHighlight) — 각 3건씩 가져와 JS가 풀별 최신 1건만 남김 -->
1067      <div class="v2-slide v2-slide-candidate" data-date="2026-09-29 17:12:47" data-board="공지">
1068        <div class="v2-slide-copy">
1069          <div class="v2-eyebrow"><span class="v2-chip">대회안내</span><span class="v2-date">2026.09.29</span></div>
1070          <h2>2026-27WSSA 월드 챔피언십 챌린지 스포츠스태킹 국가대표 1차 선발전</h2>
1071          <div class="v2-cta-row">
1072            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newnotice&sno=2014">자세히 보기 →</a>
1073            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/notices.html">공지 전체</a>
1074          </div>
1075        </div>
1076        <div class="v2-slide-visual"><div class="v2-visual-frame">
1077<div class="bxsk-hero-noimg bxsk-news-img-thumb" data-fetch-href="../board/view.php?bdId=newnotice&sno=2014">이미지 준비중</div>        </div></div>
1078      </div>
1079      <div class="v2-slide v2-slide-candidate" data-date="2026-09-23 14:52:46" data-board="공지">
1080        <div class="v2-slide-copy">
1081          <div class="v2-eyebrow"><span class="v2-chip">대회</span><span class="v2-date">2026.09.23</span></div>
1082          <h2>제19회 전국학교스포츠클럽축전 스포츠스태킹 지역별 대표 학교 안내</h2>
1083          <div class="v2-cta-row">
1084            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newnotice&sno=2013">자세히 보기 →</a>
1085            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/notices.html">공지 전체</a>
1086          </div>
1087        </div>
1088        <div class="v2-slide-visual"><div class="v2-visual-frame">
1089<div class="bxsk-hero-noimg bxsk-news-img-thumb" data-fetch-href="../board/view.php?bdId=newnotice&sno=2013">이미지 준비중</div>        </div></div>
1090      </div>
1091      <div class="v2-slide v2-slide-candidate" data-date="2026-09-21 10:32:51" data-board="공지">
1092        <div class="v2-slide-copy">
1093          <div class="v2-eyebrow"><span class="v2-chip">대회</span><span class="v2-date">2026.09.21</span></div>
1094          <h2>제1회 서해구스포츠스태킹협회장배 26/27WSSA 월드 챔피언십 챌린지 1차 대회 - 심판모집</h2>
1095          <div class="v2-cta-row">
1096            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newnotice&sno=2012">자세히 보기 →</a>
1097            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/notices.html">공지 전체</a>
1098          </div>
1099        </div>
1100        <div class="v2-slide-visual"><div class="v2-visual-frame">
1101<div class="bxsk-hero-noimg bxsk-news-img-thumb" data-fetch-href="../board/view.php?bdId=newnotice&sno=2012">이미지 준비중</div>        </div></div>
1102      </div>
1103
1104      <div class="v2-slide v2-slide-candidate" data-date="2026-10-06 16:39:53" data-board="뉴스">
1105        <div class="v2-slide-copy">
1106          <div class="v2-eyebrow"><span class="v2-chip">보도자료</span>
1106<span class="v2-date">2026.10.06</span></div>
1107          <h2>[울산신문] 청량초, 울산교육감배 스포츠스태킹 2연패</h2>
1108          <div class="v2-cta-row">
1109            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newsPress&sno=2030">자세히 보기 →</a>
1110            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/news.html">뉴스 전체</a>
1111          </div>
1112        </div>
1113        <div class="v2-slide-visual"><div class="v2-visual-frame">
1114<div class="bxsk-hero-noimg bxsk-news-img-thumb" data-fetch-href="../board/view.php?bdId=newsPress&sno=2030">이미지 준비중</div>        </div></div>
1115      </div>
1116      <div class="v2-slide v2-slide-candidate" data-date="2026-10-06 16:35:34" data-board="뉴스">
1117        <div class="v2-slide-copy">
1118          <div class="v2-eyebrow"><span class="v2-chip">보도자료</span><span class="v2-date">2026.10.06</span></div>
1119          <h2>[창원특례신문] 창원 출신 조은진, 스포츠스태킹 태극마크…11월 태국 아시아 선수권 출격</h2>
1120          <div class="v2-cta-row">
1121            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newsPress&sno=2029">자세히 보기 →</a>
1122            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/news.html">뉴스 전체</a>
1123          </div>
1124        </div>
1125        <div class="v2-slide-visual"><div class="v2-visual-frame">
1126<div class="bxsk-hero-noimg bxsk-news-img-thumb" data-fetch-href="../board/view.php?bdId=newsPress&sno=2029">이미지 준비중</div>        </div></div>
1127      </div>
1128      <div class="v2-slide v2-slide-candidate" data-date="2026-10-01 09:35:30" data-board="뉴스">
1129        <div class="v2-slide-copy">
1130          <div class="v2-eyebrow"><span class="v2-chip">보도자료</span><span class="v2-date">2026.10.01</span></div>
1131          <h2>[서울구민신문] 서울 중대초 권다인, 스포츠스태킹 12U 여자부 1위로 태극마크… 2년 연속 아시아 무대</h2>
1132          <div class="v2-cta-row">
1133            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=newsPress&sno=2028">자세히 보기 →</a>
1134            <a class="v2-btn v2-btn-ghost" href="../main/html.php?htmid=wssa/news.html">뉴스 전체</a>
1135          </div>
1136        </div>
1137        <div class="v2-slide-visual"><div class="v2-visual-frame">
1138<img src="https://godomall.speedycdn.net/e4864fb9dfa72752aec120414619a373/board/newsPress/2028/thumb/d0b1af66bf134cb2812.jpg" alt="[서울구민신문] 서울 중대초 권다인, 스포츠스태킹 12U 여자부 1위로 태극마크… 2년 연속 아시아 무대">        </div></div>
1139      </div>
1140
1141      <div class="v2-slide v2-slide-candidate" data-date="2026-10-04 11:32:19" data-board="영상">
1142        <div class="v2-slide-copy">
1143          <div class="v2-eyebrow"><span class="v2-chip">하이라이트 영상</span><span class="v2-date">2026.10.04</span></div>
1144          <h2>대한민국 스포츠스태킹 국가대표 소집훈련 2일차🔥🔥🔥 #스포츠스태킹 #대한스포츠스태킹협회 #sportstack...</h2>
1145          <div class="v2-cta-row">
1146            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=videoHighlight&sno=96">영상 보기 →</a>
1147            <a class="v2-btn v2-btn-ghost" href="../board/list.php?bdId=videoHighlight">영상 전체</a>
1148          </div>
1149        </div>
1150        <div class="v2-slide-visual"><div class="v2-visual-frame">
1151<div class="bxsk-hero-noimg bxsk-video-yt-thumb" data-fetch-href="../board/view.php?bdId=videoHighlight&sno=96">이미지 준비중</div>        </div></div>
1152      </div>
1153      <div class="v2-slide v2-slide-candidate" data-date="2026-10-03 19:09:53" data-board="영상">
1154        <div class="v2-slide-copy">
1155          <div class="v2-eyebrow"><span class="v2-chip">하이라이트 영상</span><span class="v2-date">2026.10.03</span></div>
1156          <h2>대한민국 스포츠스태킹협회 국가대표 훈련중!!!🔥 #스포츠스태킹 #대한스포츠스태킹협회 #sportstackin...</h2>
1157          <div class="v2-cta-row">
1158            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=videoHighlight&sno=95">영상 보기 →</a>
1159            <a class="v2-btn v2-btn-ghost" href="../board/list.php?bdId=videoHighlight">영상 전체</a>
1160          </div>
1161        </div>
1162        <div class="v2-slide-visual"><div class="v2-visual-frame">
1163<div class="bxsk-hero-noimg bxsk-video-yt-thumb" data-fetch-href="../board/view.php?bdId=videoHighlight&sno=95">이미지 준비중</div>        </div></div>
1164      </div>
1165      <div class="v2-slide v2-slide-candidate" data-date="2026-09-05 13:41:25" data-board="영상">
1166        <div class="v2-slide-copy">
1167          <div class="v2-eyebrow"><span class="v2-chip">대회 뉴스</span><span class="v2-date">2026.09.05</span></div>
1168          <h2>2026 경기학교스포츠클럽축제 스포츠스태킹 (생중계)</h2>
1169          <div class="v2-cta-row">
1170            <a class="v2-btn v2-btn-yellow" href="../board/view.php?bdId=videoHighlight&sno=82">영상 보기 →</a>
1171            <a class="v2-btn v2-btn-ghost" href="../board/list.php?bdId=videoHighlight">영상 전체</a>
1172          </div>
1173        </div>
1174        <div class="v2-slide-visual"><div class="v2-visual-frame">
1175<div class="bxsk-hero-noimg bxsk-video-yt-thumb" data-fetch-href="../board/view.php?bdId=videoHighlight&sno=82">이미지 준비중</div>        </div></div>
1176      </div>
1177    </div>
1178
1179    <div class="v2-hero-tabs" id="bxskHeroTabs" role="tablist"></div>
1180  </div>
1181
1182  <!-- 퀵스탯 4종(index.html 그대로: 등록 선수 / 시즌 공인대회 / 한국 최고 기록 롤링 / 공인 코치·심판) — 히어로 밴드 하단에 결합 -->
1183  <div class="quick-stats">
1184    <div class="container">
1185      <div class="quick-stat"><div class="text"><div class="l">등록 선수</div><div class="v" id="bxskStatAthletes">-<span>명</span></div></div></div>
1186      <div class="quick-stat"><div class="text"><div class="l">2026-2027 공인 대회</div><div class="v" id="bxskStatSanctioned">-<span>회</span></div></div></div>
1187      <div class="quick-stat"><div class="text"><div class="l" id="bxskStatRecordLabel">한국 최고 기록</div><div class="v" id="bxskStatCycle" style="font-size:14px;color:rgba(255,255,255,0.55);">-</div></div></div>
1188      <div class="quick-stat"><div class="text"><div class="l">공인 코치·심판</div><div class="v" id="bxskStatCertified" style="font-size:14px;color:rgba(255,255,255,0.55);">-</div></div></div>
1189    </div>
1190  </div>
1191</section>
1192
1193<!-- ============ 2. 지금 협회에서 — 4타일(다가오는 공인대회 / 다음 교육 / 최근 경신 한국기록 / 최근 공지).
1194     새 데이터 소스 없음: 대회=tournament_schedule_api(Sanctioned 첫 행, D-day는 JS 계산), 교육=home_education_api 첫 항목,
1195     기록=home_records_api 셀의 date 최신값, 공지=getArticles('newnotice',1) 서버 렌더. 값이 없으면 안내 문구+목록 링크(A7). ============ -->
1196<section class="v2-now" data-screen-label="home/now">
1197  <div class="container">
1198    <div class="v2-now-head"><span class="dot"></span><span class="t">지금 협회에서</span><span class="v2-sub" id="bxskNowDate">오늘 기준 · 자동 갱신</span></div>
1199    <div class="v2-now-grid">
1200      <a class="v2-tile navy" id="bxskNowTour" href="../wssa/tournament_schedule.php">
1201        <span class="k">다가오는 공인대회</span>
1202        <span class="t">대회 일정을 불러오는 중…</span>
1203        <span class="m">전체 대회 일정 →</span>
1204      </a>
1205      <a class="v2-tile" id="bxskNowEdu" href="../wssa/education_info.php">
1206        <span class="k">다음 교육</span>
1207        <span class="t">교육 일정을 불러오는 중…</span>
1208        <span class="m">코치·심판·주니어코치 과정 →</span>
1209      </a>
1210      <a class="v2-tile" id="bxskNowRec" href="../wssa/record_archive.php">
1211        <span class="k">최근 경신 한국기록</span>
1212        <span class="t">기록을 불러오는 중…</span>
1213        <span class="m">연령별 한국기록 전체 →</span>
1214      </a>
1215      <a class="v2-tile" href="../board/view.php?bdId=newnotice&sno=2014">
1216        <span class="k">최근 공지 · 9.29</span>
1217        <span class="t">2026-27WSSA 월드 챔피언십 챌린지 스포츠스태킹 국가대표 1차 선발전</span>
1218        <span class="m">대회안내 · 공지 전체 →</span>
1219      </a>
1220    </div>
1221  </div>
1222</section>
1223
1224<!-- ============ 3. 이번 시즌 대회(월별) + 참여 CTA 3(index.html의 CTA 스트립 승계) + 내 페이지 카드.
1225     대회 목록은 index.html '대회 안내'와 동일 API(tournament_schedule_api, type=Sanctioned/Promotion/StackingLeague, 다가오는 5건)를
1226     월 단위로 묶어 표시. 상세 링크는 API link 필드(공인=tournament_detail / 승급=promotion_tournament / 학교=schoolclub_tournament_result). ============ -->
1227<section class="v2-season" data-screen-label="home/schedule">
1228  <div class="container v2-season-grid">
1229    <div>
1230      <div class="v2-head">
1231        <div class="l"><h2 class="v2-h2">이번 시즌 대회</h2><span class="v2-sub">2026-27 시즌 · 다가오는 대회 순</span></div>
1232        <div class="v2-chips" id="bxskScheduleTabs">
1233          <button class="active" data-type="Sanctioned">공인대회</button>
1234          <button data-type="Promotion">승급대회</button>
1235          <button data-type="StackingLeague">학교스포츠클럽</button>
1236        </div>
1237      </div>
1238      <div class="v2-months" id="bxskScheduleCards"><div class="empty">대회 일정을 불러오는 중...</div></div>
1239      <div class="v2-season-links"><a class="v2-more" href="../wssa/tournament_schedule.php">전체 일정·달력 →</a><a class="v2-more" href="../wssa/tournament_results.php">지난 대회 결과 →</a></div>
1240      <div class="v2-join" data-screen-label="home/cta">
1241        <a href="../wssa/tournament_schedule.php"><span class="b"><span class="n">대회 참가 신청</span><span class="s">진행 중인 대회를 확인하고 종목을 선택해 신청</span></span><span class="ar">→</span></a>
1242        <a href="../wssa/schoolclub_result.php"><span class="b"><span class="n">학교스포츠클럽 참가</span><span class="s">우리 학교 팀 등록·리그 참가 안내</span></span><span class="ar">→</span></a>
1243        <a href="../wssa/education_info.php"><span class="b"><span class="n">코치·심판 교육 신청</span><span class="s">코치·심판·주니어코치 과정과 자격</span></span><span class="ar">→</span></a>
1244      </div>
1245    </div>
1246    <div class="v2-me">
1247      <div class="h"><b>내 페이지</b><span>선수 · 학부모 · 지도자</span></div>
1248      <p>로그인하면 마이페이지에서 <b>내 참가 신청 상태, 최근 기록과 PR, 자격증 유효기간, 교육 신청 현황</b>을 한 곳에서 확인할 수 있습니다.</p>
1249      <div class="v2-me-rows">
1250        <a href="../mypage/entry_apply_status.php"><span>대회 참가 신청 내역</span><b>→</b></a>
1251        <a href="../mypage/my_records.php"><span>선수 프로필 · 내 기록</span><b>→</b></a>
1252        <a href="../mypage/certificate_print.php"><span>교육 · 자격증</span><b>→</b></a>
1253        <a href="../wssa/athlete_link_request.php"><span>선수 연결 신청</span><b>→</b></a>
1254      </div>
1255      <a class="v2-me-btn" href="../mypage/index.php">마이페이지 홈</a>
1256    </div>
1257  </div>
1258</section>
1259
1260<!-- ============ 4. 한국기록 — 좌: 이번 시즌 경신(records API 셀의 date ≥ 시즌 시작일) / 우: 종목별 한국기록 카드 3 + 내 기록 찾기 + 바로가기 2.
1261     아래: 연령별 한국기록 표(index.html 그대로 — 탭 5 + 개인/팀 표). 소스 전부 home_records_api.php(E-737/739로 본사 84칸 정합). ============ -->
1262<section class="v2-records" data-screen-label="home/records">
1263  <div class="container">
1264    <div class="v2-rec-grid">
1265      <div>
1266        <div class="v2-head"><div class="l"><h2 class="v2-h2">이번 시즌 경신된 한국기록</h2><span class="v2-sub" id="bxskRecNewSub">2026-27 시즌(5월~)에 새로 세워진 연령별 한국기록 · 세계협회 Korea Records와 같은 기준</span></div></div>
1267        <div class="v2-rec-new" id="bxskRecNew"><div class="empty">불러오는 중...</div></div>
1268        <div class="v2-rec-links"><a class="v2-more" href="../wssa/record_archive.php">연령별 한국기록 전체 →</a><a class="v2-more" href="../wssa/rankings.php">시즌 랭킹 →</a><a class="v2-more" href="../wssa/world_ranking.php">세계기록 →</a></div>
1269      </div>
1270      <div>
1271        <div class="v2-rec-cards" id="bxskRecCards">
1272          <div class="v2-rec-card"><span class="k">3-3-3 · 한국기록</span><span class="v">-</span><span class="n">불러오는 중</span></div>
1273          <div class="v2-rec-card"><span class="k">3-6-3 · 한국기록</span><span class="v">-</span><span class="n">불러오는 중</span></div>
1274          <div class="v2-rec-card"><span class="k">Cycle · 한국기록</span><span class="v">-</span><span class="n">불러오는 중</span></div>
1275        </div>
1276        <div class="v2-find">
1277          <div class="h"><b>내 기록 찾기</b><span id="bxskFindSub">공인대회 참가자 기록 조회</span></div>
1278          <form action="../wssa/player_records.php" method="get">
1279            <input type="text" name="q" placeholder="선수 이름 — 예: 김시은 또는 시은 김" aria-label="선수 이름">
1280            <button type="submit">찾기</button>
1281          </form>
1282          <div class="tags"><a href="../wssa/player_records.php">공인대회 기록 조회</a><a href="../wssa/national_team.php">국가대표 명단</a><a href="../wssa/rankings.php">시즌 랭킹</a><a href="../mypage/my_records.php">내 선수 프로필</a></div>
1283        </div>
1284        <div class="v2-rec-two">
1285          <a href="../wssa/tournament_results.php"><span class="k">대회 결과</span><span class="t">최근 종료 대회의 결과 · 순위 · 종합순위</span><span class="v2-more">결과 보기 →</span></a>
1286          <a href="../wssa/national_team.php"><span class="k">국가대표</span><span class="t">시즌별 국가대표 명단과 선발 기준</span><span class="v2-more">명단 보기 →</span></a>
1287        </div>
1288      </div>
1289    </div>
1290
1291    <div class="v2-rec-table">
1292      <div class="sec-head">
1293        <div class="left"><h2>연령별 한국기록</h2><span class="sub">기록단위: 초 · 검증된 기록 기준</span></div>
1294        <a href="../wssa/record_archive.php" class="more">기록 아카이브 →</a>
1295      </div>
1296      <div class="bxsk-records-tabs" id="bxskRecordsTabs"></div>
1297      <div class="bxsk-records-table-wrap">
1298        <table class="bxsk-records-table" id="bxskRecordsTable">
1299          <thead id="bxskRecordsHead"></thead>
1300          <tbody id="bxskRecordsBody"><tr><td colspan="7" style="text-align:center;padding:24px;color:var(--text-soft);">불러오는 중...</td></tr></tbody>
1301        </table>
1302      </div>
1303    </div>
1304  </div>
1305</section>
1306
1307<!-- ============ 5. 소식 — WSSA 뉴스(newsPress) + 대회 소식(newnotice 대회·대회안내·대회결과 말머리). index.html MAIN GRID 마크업·JS 그대로 승계. ============ -->
1308<section class="v2-news" data-screen-label="home/news">
1309  <div class="container">
1310    <div class="v2-head"><div class="l"><h2 class="v2-h2">소식</h2><span class="v2-sub">보도자료 · 공지 · 대회 소식 · 영상</span></div><a class="v2-more" href="../main/html.php?htmid=wssa/notices.html">뉴스룸 전체 →</a></div>
1311    <div class="main-grid">
1312      <div class="news-block">
1313        <div class="sec-head">
1314          <div class="left"><h2>WSSA 뉴스</h2><span class="sub">대한스포츠스태킹협회 보도·소식</span></div>
1315          <a href="../main/html.php?htmid=wssa/news.html" class="more">전체 보기 →</a>
1316        </div>
1317        <div class="top-news">
1318          <a href="../board/view.php?bdId=newsPress&sno=2030" class="news-feature">
1319            <div class="thumb placeholder-img bxsk-news-img-thumb" style="border-radius:0;"></div>
1320            <div class="body">
1321<div class="cat">보도자료</div>              <div class="title">[울산신문] 청량초, 울산교육감배 스포츠스태킹 2연패</div>
1322              <div class="date">2026-10-06 16:39:53</div>
1323            </div>
1324          </a>
1325          <a href="../board/view.php?bdId=newsPress&sno=2029" class="news-feature">
1326            <div class="thumb placeholder-img bxsk-news-img-thumb" style="border-radius:0;"></div>
1327            <div class="body">
1328<div class="cat">보도자료</div>              <div class="title">[창원특례신문] 창원 출신 조은진, 스포츠스태킹 태극마크…11월 태국 아시아 선수권 ì¶
1328œê²©</div>
1329              <div class="date">2026-10-06 16:35:34</div>
1330            </div>
1331          </a>
1332        </div>
1333        <div class="news-list">
1334          <a href="../board/view.php?bdId=newsPress&sno=2030" class="row">
1335<span class="tag-mini">보도자료</span>            <span class="title">[울산신문] 청량초, 울산교육감배 스포츠스태킹 2연패</span>
1336            <span class="date">2026-10-06 16:39:53</span>
1337          </a>
1338          <a href="../board/view.php?bdId=newsPress&sno=2029" class="row">
1339<span class="tag-mini">보도자료</span>            <span class="title">[창원특례신문] 창원 출신 조은진, 스포츠스태킹 태극마크…11월 태국 아시아 선수권 출격</span>
1340            <span class="date">2026-10-06 16:35:34</span>
1341          </a>
1342          <a href="../board/view.php?bdId=newsPress&sno=2028" class="row">
1343<span class="tag-mini">보도자료</span>            <span class="title">[서울구민신문] 서울 중대초 권다인, 스포츠스태킹 12U 여자부 1위로 태극마크… 2년 연속 아시아...</span>
1344            <span class="date">2026-10-01 09:35:30</span>
1345          </a>
1346          <a href="../board/view.php?bdId=newsPress&sno=2027" class="row">
1347<span class="tag-mini">보도자료</span>            <span class="title">[프레시안] 강릉 율곡초 스포츠스태킹 남녀팀, 강원 정상 석권</span>
1348            <span class="date">2026-09-30 17:16:06</span>
1349          </a>
1350          <a href="../board/view.php?bdId=newsPress&sno=2026" class="row">
1351<span class="tag-mini">보도자료</span>            <span class="title">[울산제일일보] 울산 강동중 최민서, 스포츠스태킹 태극마크… 아시안 챔피언십 출전</span>
1352            <span class="date">2026-09-30 09:42:58</span>
1353          </a>
1354          <a href="../board/view.php?bdId=newsPress&sno=2025" class="row">
1355<span class="tag-mini">보도자료</span>            <span class="title">[강원지방신문] 강원 율곡초, 스포츠스태킹 남녀 초등부 2년 연속 강원 대표</span>
1356            <span class="date">2026-09-30 09:40:01</span>
1357          </a>
1358          <a href="../board/view.php?bdId=newsPress&sno=2024" class="row">
1359<span class="tag-mini">보도자료</span>            <span class="title">[경남일보] 김해 우암초, 스포츠스태킹 초등부 동반 남녀 우승</span>
1360            <span class="date">2026-09-30 09:35:12</span>
1361          </a>
1362          <a href="../board/view.php?bdId=newsPress&sno=2023" class="row">
1363<span class="tag-mini">보도자료</span>            <span class="title">[호남교육신문] 순천북초, 교육감배 스포츠스태킹 ‘3전 전승’ 여초부 정상</span>
1364            <span class="date">2026-09-30 09:27:04</span>
1365          </a>
1366        </div>
1367      </div>
1368
1369      <aside class="side-block-col">
1370        <div class="side-card side-block">
1371          <div class="head"><h3>대회 소식</h3><a href="../board/list.php?bdId=newnotice&category=대회" class="plus">+</a></div>
1372          <div class="notice-list">
1373            <a href="../board/view.php?bdId=newnotice&sno=2014" class="row"><span class="tag-mini">안내</span><span class="title">2026-27WSSA 월드 챔피언십 챌린지 스포츠스태킹 국...</span><span class="date">2026-09-29 17:12:47</span></a>
1374            <a href="../board/view.php?bdId=newnotice&sno=2013" class="row"><span class="tag-mini">대회</span><span class="title">제19회 전국학교스포츠클럽축전 스포츠스태킹 지역별 대표 학...</span><span class="date">2026-09-23 14:52:46</span></a>
1375            <a href="../board/view.php?bdId=newnotice&sno=2012" class="row"><span class="tag-mini">대회</span><span class="title">제1회 서해구스포츠스태킹협회장배 26/27WSSA 월드 챔...</span><span class="date">2026-09-21 10:32:51</span></a>
1376            <a href="../board/view.php?bdId=newnotice&sno=2009" class="row"><span class="tag-mini">안내</span><span class="title">2026 학교스포츠클럽대회 스포츠스태킹 일정 안내</span><span class="date">2026-09-15 13:56:04</span></a>
1377            <a href="../board/view.php?bdId=newnotice&sno=1975" class="row"><span class="tag-mini">대회</span><span class="title">2026-27WSSA 아시안 챔피언십 챌린지 등록 안내</span><span class="date">2026-03-30 13:57:02</span></a>
1378            <a href="../board/view.php?bdId=newnotice&sno=1974" class="row"><span class="tag-mini">대회</span><span class="title">2026-27시즌 대한스포츠스태킹협회 운영규정 안내</span><span class="date">2026-03-25 14:57:58</span></a>
1379            <a href="../board/view.php?bdId=newnotice&sno=1969" class="row"><span class="tag-mini">안내</span><span class="title">대한스포츠스태킹협회 26/27시즌 공인심판 조 편성 모집 ...</span><span class="date">2026-02-12 10:28:22</span></a>
1380            <a href="../board/view.php?bdId=newnotice&sno=1964" class="row"><span class="tag-mini">대회</span><span class="title">유사단체로 인한 학교·학부모 혼란 방지를 위한 안내</span><span class="date">2025-12-12 15:04:30</span></a>
1381            <a href="../board/view.php?bdId=newnotice&sno=1937" class="row"><span class="tag-mini">대회</span><span class="title">대한스포츠스태킹협회 2025-26시즌 운영규정 발표</span><span class="date">2025-04-10 14:32:05</span></a>
1382            <a href="../board/view.php?bdId=newnotice&sno=1935" class="row"><span class="tag-mini">결과</span><span class="title">25-26시즌 공인심판조 편성 결과</span><span class="date">2025-03-31 13:51:23</span></a>
1383            <a href="../board/view.php?bdId=newnotice&sno=1923" class="row"><span class="tag-mini">대회</span><span class="title">대한 스포츠스태킹 협회 2024-25시즌 운영규정 발표</span><span class="date">2024-04-17 09:15:17</span></a>
1384            <a href="../board/view.php?bdId=newnotice&sno=1917" class="row"><span class="tag-mini">안내</span><span class="title">2024-25시즌 공인심판 조 모집 안내</span><span class="date">2024-03-13 14:36:01</span></a>
1385            <a href="../board/view.php?bdId=newnotice&sno=1914" class="row"><span class="tag-mini">안내</span><span class="title">2024WSSA 미국 월드 스포츠스태킹 챔피언십 초청선발 ...</sp
1385an><span class="date">2024-02-08 14:03:35</span></a>
1386            <a href="../board/view.php?bdId=newnotice&sno=1912" class="row"><span class="tag-mini">안내</span><span class="title">2024WSSA 미국 월드 스포츠스태킹 챔피언십 초청선발 ...</span><span class="date">2024-02-02 09:15:36</span></a>
1387            <a href="../board/view.php?bdId=newnotice&sno=1909" class="row"><span class="tag-mini">안내</span><span class="title">2024WSSA 월드챔피언십 In 올랜도(플로리다) 챌린지...</span><span class="date">2023-12-11 11:43:39</span></a>
1388            <a href="../board/view.php?bdId=newnotice&sno=1907" class="row"><span class="tag-mini">결과</span><span class="title">2023 제16회 전국학교스포츠클럽축전 스포츠스태킹 대회 ...</span><span class="date">2023-10-25 11:08:40</span></a>
1389            <a href="../board/view.php?bdId=newnotice&sno=1906" class="row"><span class="tag-mini">안내</span><span class="title">2023 제16회 전국학교스포츠클럽축전 스포츠스태킹 대회 ...</span><span class="date">2023-10-20 16:02:50</span></a>
1390            <a href="../board/view.php?bdId=newnotice&sno=1905" class="row"><span class="tag-mini">결과</span><span class="title">광주광역시 2023WSSA 아시안 오픈 챔피언십 대회 공인...</span><span class="date">2023-10-18 17:09:04</span></a>
1391            <a href="../board/view.php?bdId=newnotice&sno=1904" class="row"><span class="tag-mini">안내</span><span class="title">광주광역시 2023WSSA 아시안 오픈 챔피언십 대회 공인...</span><span class="date">2023-09-18 11:10:54</span></a>
1392            <a href="../board/view.php?bdId=newnotice&sno=1903" class="row"><span class="tag-mini">안내</span><span class="title">광주광역시 2023WSSA 아시안 오픈 챔피언십 초청선발 ...</span><span class="date">2023-09-13 14:30:14</span></a>
1393            <a href="../board/view.php?bdId=newnotice&sno=1901" class="row"><span class="tag-mini">대회</span><span class="title">광주광역시 2023WSSA 아시안 오픈 챔피언십 조직위원회...</span><span class="date">2023-08-29 17:39:48</span></a>
1394            <a href="../board/view.php?bdId=newnotice&sno=1877" class="row"><span class="tag-mini">대회</span><span class="title">대한 스포츠스태킹 협회 2023-24 시즌 운영규정 발표</span><span class="date">2023-04-17 09:35:37</span></a>
1395            <a href="../board/view.php?bdId=newnotice&sno=1874" class="row"><span class="tag-mini">안내</span><span class="title">23-24시즌 공인심판 조 모집 안내</span><span class="date">2023-03-17 15:28:15</span></a>
1396            <a href="../board/view.php?bdId=newnotice&sno=1854" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 월드 챔피언십 챌린지 싱가포...</span><span class="date">2022-12-07 15:29:32</span></a>
1397            <a href="../board/view.php?bdId=newnotice&sno=1850" class="row"><span class="tag-mini">결과</span><span class="title">22-23WSSA 스피드스택스 월드 챔피언십 챌린지 싱가포...</span><span class="date">2022-11-17 11:28:52</span></a>
1398            <a href="../board/view.php?bdId=newnotice&sno=1849" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 월드 챔피언십 챌린지 싱가포...</span><span class="date">2022-11-08 13:28:05</span></a>
1399            <a href="../board/view.php?bdId=newnotice&sno=1847" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 월드 챔피언십 챌린지 싱가포...</span><span class="date">2022-11-02 13:14:41</span></a>
1400            <a href="../board/view.php?bdId=newnotice&sno=1846" class="row"><span class="tag-mini">안내</span><span class="title">제 10회 한국스포츠대전 2022 대한 스포츠스태킹 협회장...</span><span class="date">2022-10-26 11:56:49</span></a>
1401            <a href="../board/view.php?bdId=newnotice&sno=1845" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 월드 챔피언십 챌린지 싱가포...</span><span class="date">2022-10-24 14:12:16</span></a>
1402            <a href="../board/view.php?bdId=newnotice&sno=1839" class="row"><span class="tag-mini">안내</span><span class="title">제 10회 한국스포츠대전 2022 대한 스포츠스태킹 협회장...</sp
1402an><span class="date">2022-09-30 13:22:08</span></a>
1403            <a href="../board/view.php?bdId=newnotice&sno=1837" class="row"><span class="tag-mini">대회</span><span class="title">2022WSSA 아시안 오픈 챔피언십 대만 스피드스택스 국...</span><span class="date">2022-09-27 16:19:12</span></a>
1404            <a href="../board/view.php?bdId=newnotice&sno=1834" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시안 오픈(대만) 챔피언십...</span><span class="date">2022-09-13 13:18:40</span></a>
1405            <a href="../board/view.php?bdId=newnotice&sno=1833" class="row"><span class="tag-mini">대회</span><span class="title">제 1회 어르신 스포츠스태킹 경연대회 - 스포츠스태킹 지도...</span><span class="date">2022-09-07 09:08:59</span></a>
1406            <a href="../board/view.php?bdId=newnotice&sno=1831" class="row"><span class="tag-mini">안내</span><span class="title">2022-23WSSA 스피드스택스 아시안 오픈(대만) 챔피...</span><span class="date">2022-08-26 13:55:44</span></a>
1407            <a href="../board/view.php?bdId=newnotice&sno=1830" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-08-18 09:36:56</span></a>
1408            <a href="../board/view.php?bdId=newnotice&sno=1829" class="row"><span class="tag-mini">안내</span><span class="title">2022 대만 아시안 챔피언십 국가대표 1~3차 선발전 중...</span><span class="date">2022-07-26 15:21:50</span></a>
1409            <a href="../board/view.php?bdId=newnotice&sno=1828" class="row"><span class="tag-mini">안내</span><span class="title">2022 대한 스포츠스태킹 협회장배 코리아 오픈 연기</span><span class="date">2022-07-26 13:47:53</span></a>
1410            <a href="../board/view.php?bdId=newnotice&sno=1826" class="row"><span class="tag-mini">결과</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-07-20 14:05:43</span></a>
1411            <a href="../board/view.php?bdId=newnotice&sno=1825" class="row"><span class="tag-mini">대회</span><span class="title">2022-23WSSA 스피드스택스 아시안 챔피언십 챌린지 ...</span><span class="date">2022-07-18 15:43:48</span></a>
1412            <a href="../board/view.php?bdId=newnotice&sno=1823" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-07-12 09:44:40</span></a>
1413            <a href="../board/view.php?bdId=newnotice&sno=1820" class="row"><span class="tag-mini">결과</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만)챔피언십 ...</span><span class="date">2022-06-29 15:49:55</span></a>
1414            <a href="../board/view.php?bdId=newnotice&sno=1818" class="row"><span class="tag-mini">대회</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-06-21 16:12:57</span></a>
1415            <a href="../board/view.php?bdId=newnotice&sno=1816" class="row"><span class="tag-mini">대회</span><span class="title">2022WSSA 대만 아시안 챔피언십 일정 안내</span><span class="date">2022-06-16 14:09:12</span></a>
1416            <a href="../board/view.php?bdId=newnotice&sno=1814" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-06-10 10:37:50</span></a>
1417            <a href="../board/view.php?bdId=newnotice&sno=1813" class="row"><span class="tag-mini">결과</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-06-02 15:58:32</span></a>
1418            <a href="../board/view.php?bdId=newnotice&sno=1812" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</sp
1418an><span class="date">2022-05-27 09:52:37</span></a>
1419            <a href="../board/view.php?bdId=newnotice&sno=1811" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-05-23 13:16:22</span></a>
1420            <a href="../board/view.php?bdId=newnotice&sno=1810" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-05-23 11:25:05</span></a>
1421            <a href="../board/view.php?bdId=newnotice&sno=1807" class="row"><span class="tag-mini">대회</span><span class="title">대한 스포츠스태킹 협회 2022-23 시즌 운영규정 발표</span><span class="date">2022-05-03 13:53:22</span></a>
1422            <a href="../board/view.php?bdId=newnotice&sno=1806" class="row"><span class="tag-mini">안내</span><span class="title">22-23WSSA 스피드스택스 아시아 오픈(대만) 챔피언십...</span><span class="date">2022-04-28 15:41:20</span></a>
1423            <a href="../board/view.php?bdId=newnotice&sno=1804" class="row"><span class="tag-mini">결과</span><span class="title">2022WSSA 월드챔피언십 In Korea 대회결과</span><span class="date">2022-04-13 15:57:38</span></a>
1424            <a href="../board/view.php?bdId=newnotice&sno=1803" class="row"><span class="tag-mini">안내</span><span class="title">2022WSSA 월드챔피언십 In Korea 대회 디비전 ...</span><span class="date">2022-04-05 17:18:40</span></a>
1425            <a href="../board/view.php?bdId=newnotice&sno=1801" class="row"><span class="tag-mini">안내</span><span class="title">2022WSSA 월드챔피언십 In Korea  공인심판/실...</span><span class="date">2022-03-24 10:31:28</span></a>
1426            <a href="../board/view.php?bdId=newnotice&sno=1800" class="row"><span class="tag-mini">안내</span><span class="title">2022WSSA 월드챔피언십 In Korea 대회 공지</span><span class="date">2022-03-11 17:30:34</span></a>
1427            <a href="../board/view.php?bdId=newnotice&sno=1794" class="row"><span class="tag-mini">안내</span><span class="title">2021-22WSSA 스피드스택스 Online Home S...</span><span class="date">2022-01-13 13:09:27</span></a>
1428            <a href="../board/view.php?bdId=newnotice&sno=1791" class="row"><span class="tag-mini">대회</span><span class="title">2021 서울학생 On-line 스포츠한마당 본선대회 안내</span><span class="date">2021-09-06 11:01:04</span></a>
1429            <a href="../board/view.php?bdId=newnotice&sno=1787" class="row"><span class="tag-mini">안내</span><span class="title">대한스포츠스태킹협회 대회 스택트랙 신청방법 (매뉴얼)</span><span class="date">2021-06-22 14:05:48</span></a>
1430            <a href="../board/view.php?bdId=newnotice&sno=1779" class="row"><span class="tag-mini">안내</span><span class="title">[대회코드발표] 2021-22WSSA 스피드스택스 Onli...</span><span class="date">2021-05-04 13:37:54</span></a>
1431            <a href="../board/view.php?bdId=newnotice&sno=1777" class="row"><span class="tag-mini">대회</span><span class="title">대한스포츠스태킹협회 2021-22 시즌 운영규정 발표</span><span class="date">2021-04-21 11:45:59</span></a>
1432            <a href="../board/view.php?bdId=newnotice&sno=1775" class="row"><span class="tag-mini">결과</span><span class="title">2021WSSA 월드챔피언십 최종 결과 발표</span><span class="date">2021-04-12 11:21:47</span></a>
1433            <a href="../board/view.php?bdId=newnotice&sno=1774" class="row"><span class="tag-mini">대회</span><span class="title">[국가대표선발명단] 2021WSSA 월드 챔피언십 챌린지_...</span><span class="date">2021-03-29 15:59:11</span></a>
1434            <a href="../board/view.php?bdId=newnotice&sno=1773" class="row"><span class="tag-mini">안내</span><span class="title">2021WSSA 월드챔피언십 온라인 대회 안내 (2021W...</span><span class="date">2021-03-26 16:07:22</span></a>
1435            <a href="../board/view.php?bdId=newnotice&sno=1772" 
1435class="row"><span class="tag-mini">결과</span><span class="title">2021WSSA 월드 챔피언십 챌린지_Online &amp; 20...</span><span class="date">2021-03-25 14:22:44</span></a>
1436            <a href="../board/view.php?bdId=newnotice&sno=1769" class="row"><span class="tag-mini">안내</span><span class="title">[대회코드발표](개인리그) 2021WSSA 월드 챔피언십 ...</span><span class="date">2021-03-16 15:56:52</span></a>
1437            <a href="../board/view.php?bdId=newnotice&sno=1768" class="row"><span class="tag-mini">안내</span><span class="title">[대회코드발표](팀리그) 2021WSSA 월드 챔피언십 챌...</span><span class="date">2021-03-16 15:56:51</span></a>
1438            <a href="../board/view.php?bdId=newnotice&sno=1765" class="row"><span class="tag-mini">결과</span><span class="title">2020-21 WSSA 스피드스택스 코리아 오픈 Onlin...</span><span class="date">2021-03-09 14:13:23</span></a>
1439            <a href="../board/view.php?bdId=newnotice&sno=1763" class="row"><span class="tag-mini">대회</span><span class="title">세계스포츠스태킹협회 &#039;코로나19 이후 첫 오프라인 대회 개...</span><span class="date">2021-03-05 14:32:23</span></a>
1440            <a href="../board/view.php?bdId=newnotice&sno=1762" class="row"><span class="tag-mini">결과</span><span class="title">2020-21 WSSA 스피드스택스 코리아 오픈 Onlin...</span><span class="date">2021-03-04 13:51:58</span></a>
1441            <a href="../board/view.php?bdId=newnotice&sno=1759" class="row"><span class="tag-mini">안내</span><span class="title">[대회코드발표][2020-21WSSA 스피드스택스 코리아오...</span><span class="date">2021-02-19 16:47:17</span></a>
1442          </div>
1443        </div>
1444        <style>
1445          @media (min-width: 961px) {
1446            #bxsk-main.bxsk-v2 .main-grid .news-block { align-self: start; }
1447            #bxsk-main.bxsk-v2 .side-block-col { display: flex; flex-direction: column; }
1448            #bxsk-main.bxsk-v2 .side-block-col .side-block { flex: 1 1 auto; margin-bottom: 0; display: flex; flex-direction: column; min-height: 0; }
1449            #bxsk-main.bxsk-v2 .side-block-col .side-block .notice-list { flex: 1 1 auto; }
1450          }
1451        </style>
1452      </aside>
1453    </div>
1454  </div>
1455</section>
1456
1457<!-- ============ 6. 영상 하이라이트(videoHighlight 5) — index.html 승계 ============ -->
1458<section class="container bxsk-sec bxsk-sec-video v2-video" data-screen-label="home/video">
1459  <div class="sec-head">
1460    <div class="left"><h2>영상 하이라이트</h2><span class="sub">WSSA Korea 공식 채널</span></div>
1461    <a href="https://www.youtube.com/c/WSSAKOREA" target="_blank" rel="noopener" class="more">채널 전체보기 →</a>
1462  </div>
1463  <div class="video-grid">
1464    <a href="../board/view.php?bdId=videoHighlight&sno=96" class="video-card">
1465      <div class="thumb placeholder-img bxsk-video-yt-thumb"><div class="play"><svg width="40" height="40" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg></div></div>
1466      <div class="label">대한민국 스포츠스태킹 국가대표 소집훈련 2일차🔥🔥🔥 #스포츠스태킹 #대한...</div>
1467    </a>
1468    <a href="../board/view.php?bdId=videoHighlight&sno=95" class="video-card">
1469      <div class="thumb placeholder-img bxsk-video-yt-thumb"><div class="play"><svg width="40" height="40" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg></div></div>
1470      <div class="label">대한민국 스포츠스태킹협회 국가대표 훈련중!!!🔥 #스포츠스태킹 #대한스포...</div>
1471    </a>
1472    <a href="../board/view.php?bdId=videoHighlight&sno=82" class="video-card">
1473      <div class="thumb placeholder-img bxsk-video-yt-thumb"><div class="play"><svg width="40" height="40" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg></div></div>
1474      <div class="label">2026 경기학교스포츠클럽축제 스포츠스태킹 (생중계)</div>
1475    </a>
1476    <a href="../board/view.php?bdId=videoHighlight&sno=81" class="video-card">
1477      <div class="thumb placeholder-img bxsk-video-yt-thumb"><div class="play"><svg width="40" height="40" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg></div></div>
1478      <div class="label">2026 STACK UP! 스택업 사전이벤트|30·30·30 함께 도전!...</div>
1479    </a>
1480    <a href="../board/view.php?bdId=videoHighlight&sno=80" class="video-card">
1481      <div class="thumb placeholder-img bxsk-video-yt-thumb"><div class="play"><svg width="40" height="40" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg></div></div>
1482      <div class="label">[📸스스로그] 스태커 밀착 취재! : 2025 WSSA 월드챔피언십 최종...</div>
1483    </a>
1484    <!-- [E-915] 3열·2열에서 6번째 빈 칸 — 교육과정 합격자 발표 광고(PC 5열에선 숨김) -->
1485    <a href="../board/list.php?bdId=eduPass" class="video-card bxsk-vd-ad" aria-label="교육과정 합격자 발표 확인하기">
1486      <div class="thumb ad-thumb">
1487        <span class="ad-tag">AD</span>
1488        <svg class="ad-medal" viewBox="0 0 48 56" aria-hidden="true"><path class="rb" d="M14 2h8l6 16-7 3zM34 2h-8l-6 16 7 3z"/><circle class="md" cx="24" cy="34" r="17"/><circle class="in" cx="24" cy="34" r="12"/><path class="ck" d="M18 34l4.5 4.5L31 30"/></svg>
1489        <span class="ad-eyebrow">EDU PASS</span>
1490        <span class="ad-title">교육과정<br>합격자 발표</span>
1491        <span class="ad-cta">확인하기 →</span>
1492      </div>
1493      <div class="label">코치·심판 교육 합격자 명단을 확인하세요</div>
1494    </a>
1495  </div>
1496</section>
1497
1498<!-- ============ 7. 협회 현황 한눈에 — index.html 공공정보 6카드(F-254)를 지표 타일 한 줄로. id·JS 동일(tournament_schedule_api stats + home_records_api). ============ -->
1499<section class="v2-pub bxsk-pubcards" data-screen-label="home/pubcards">
1500  <div class="container">
1501    <div class="v2-head"><div class="l"><h2 class="v2-h2">협회 현황 한눈에</h2><span class="v2-sub">대한스포츠스태킹협회가 운영하는 공공 데이터</span></div></div>
1502    <div class="v2-pub-grid">
1503      <a href="../wssa/player_records.php"><span class="bxsk-pc-num" id="bxskPcAthletes">-<span>명</span></span><span class="l">등록 선수</span></a>
1504      <a href="../wssa/education_info.php"><span class="bxsk-pc-num" id="bxskPcCertified">-<span>명</span></span><span class="l">공인 코치·심판</span></a>
1505      <a href="../wssa/tournament_schedule.php"><span class="bxsk-pc-num" id="bxskPcSanctioned">-<span>회</span></span><span class="l">2026-27 시즌 공인대회</span></a>
1506      <a href="../wssa/academy_status.php"><span class="bxsk-pc-num" id="bxskPcAcademy">-<span>개소</span></span><span class="l">전국 아카데미</span></a>
1507      <a href="../wssa/schoolclub_result.php"><span class="bxsk-pc-num" id="bxskPcSchoolclub">전국<span></span></span><span class="l">학교스포츠클럽 리그</span></a>
1508      <a href="../wssa/record_archive.php"><span class="bxsk-pc-num">5<span>종목</span></span><span class="l">종목별 한국기록</span><span class="bxsk-pc-mini" id="bxskPcRecMini"></span></a>
1509    </div>
1510  </div>
1511</section>
1512
1513<!-- ============ 8. 스포츠스태킹이 처음이신가요? — 소개 카피 + CTA 3 + 공인 종목 5(event-badge) + FAQ 베스트(B28 파싱, index.html 승계) ============ -->
1514<section class="v2-intro" data-screen-label="home/intro">
1515  <div class="container">
1516    <div class="v2-intro-grid">
1517      <div class="v2-intro-copy">
1518        <h2 class="v2-h2">스포츠스태킹이 처음이신가요?</h2>
1519        <p>컵을 정해진 순서대로 쌓고 무너뜨리는 스피드 스포츠. 공인 종목 5개를 살펴보고, 가까운 아카데미와 자주 묻는 질문을 확인해 보세요.</p>
1520        <div class="v2-intro-btns">
1521          <a class="pri" href="../main/html.php?htmid=wssa/info/sport_stacking.html">스포츠스태킹 소개</a>
1522          <a href="../wssa/academy_status.php">아카데미 찾기</a>
1523          <a href="../service/faq.php">자주 묻는 질문</a>
1524        </div>
1525      </div>
1526      <div class="bxsk-intro-events">
1527        <div class="events-grid">
1528          <div class="event-badge"><div class="code">3-3-3</div><div class="name">3컵 × 3스택</div><div class="desc">기본 종목 / 양손 동시 스태킹</div></div>
1529          <div class="event-badge"><div class="code">3-6-3</div><div class="name">중앙 6컵 피라미드</div><div class="desc">국제 종목 / 가장 인기 있는 단일 이벤트</div></div>
1530          <div class="event-badge"><div class="code">CYCLE</div><div class="name">3-6-3 + 6-6 + 1-10-1</div><div class="desc">종합 종목 / 시즌 최고 난이도</div></div>
1531          <div class="event-badge"><div class="code">DOUBLES</div><div class="name">2인 협동전</div><div class="desc">한 손씩 협업 / Cycle 변형</div></div>
1532          <div class="event-badge"><div class="code">RELAY</div><div class="name">4인 계주</div><div class="desc">단체전 / 3-6-3 이어달리기</div></div>
1533          <!-- [E-914] 모바일 2열에서 6번째 빈 칸 — 지도자 매칭 광고(PC 5열에선 숨김) -->
1534          <a class="bxsk-ev-ad" href="../wssa/instructor_matching.php" aria-label="지도자 매칭 신청하기">
1535            <span class="ad-tag">AD</span>
1536            <svg class="ad-cups" viewBox="0 0 60 44" aria-hidden="true"><path d="M23 2h14l3 13H20z"/><path d="M8 17h14l3 13H5z"/><path d="M38 17h14l3 13H35z"/><path d="M23 31h14l3 12H20z" opacity=".55"/></svg>
1537            <span class="ad-eyebrow">지도자 매칭</span>
1538            <span class="ad-title">우리 학교에<br>스태킹 강사를</span>
1539            <span class="ad-cta">신청하기 →</span>
1540          </a>
1541        </div>
1542      </div>
1543    </div>
1544    <div class="v2-faq bxsk-intro-faq">
1545      <h3>자주 묻는 질문</h3>
1546      <div class="bxsk-intro-faqwrap" id="bxskFaqPreview"><p class="wssa-cs-loading">불러오는 중...</p></div>
1547      <a class="more" href="../service/faq.php">FAQ 전체보기 →</a>
1548    </div>
1549  </div>
1550</section>
1551
1552<!-- ============ 9. QUICK MENU(7) — index.html 승계 ============ -->
1553<section class="quick-menu" data-screen-label="home/quickmenu">
1554  <div class="container">
1555    <div class="quick-menu-grid">
1556      <a class="quick-menu-item" href="../wssa/tournament_schedule.php"><div class="ico">▶</div><div class="l">실시간 기록</div></a>
1557      <a class="quick-menu-item" href="../wssa/player_records.php"><div class="ico">⏱</div><div class="l">선수별 기록</div></a>
1558      <a class="quick-menu-item" href="../wssa/world_ranking.php"><div class="ico">◯</div><div class="l">세계 랭킹</div></a>
1559      <a class="quick-menu-item" href="../main/html.php?htmid=wssa/gallery.html"><div class="ico">▤</div><div class="l">포토 갤러리</div></a>
1560      <a class="quick-menu-item" href="../wssa/education_info.php#coach"><div class="ico">▲</div><div class="l">코치 연수</div></a>
1561      <a class="quick-menu-item" href="../wssa/tournament_schedule.php?type=Promotion"><div class="ico">✓</div><div class="l">스태킹 승급</div></a>
1562      <a class="quick-menu-item" href="https://speedstacks.co.kr" target="_blank" rel="noopener"><div class="ico">▣</div><div class="l">공식 스토어</div></a>
1563    </div>
1564  </div>
1565</section>
1566
1567<!-- ============ 10. PROMO BANNER(dataBanner 378864211, V2) — index.html 승계 ============ -->
1568<section class="container v2-gap" data-screen-label="home/banner">
1569  <div class="promo bxsk-promo-real"><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/04bf0f91182dcd5d48be4282f93edb37_60361.jpg"  alt="메인 중간 배너1" title="메인 중간 배너1"   /></div>
1570</section>
1571
1572<!-- ============ 11. 3열 블록(공지사항 / 영상 하이라이트 목록 / 교육신청 API) — index.html 승계 ============ -->
1573<section class="container bxsk-sec v2-gap" data-screen-label="home/threecol">
1574  <div class="two-col-block">
1575    <div class="info-col">
1576      <div class="head"><h3>공지사항</h3><a href="../main/html.php?htmid=wssa/notices.html" class="plus">+</a></div>
1577      <div class="list">
1578        <a href="../board/view.php?bdId=newnotice&sno=2014" class="row notice"><span class="tag-mini">대회안내</span><span class="title">2026-27WSSA 월드 챔피언십 챌린지 스포츠스태킹 국...</span><span class="date">2026-09-29 17:12:47</span></a>
1579        <a href="../board/view.php?bdId=newnotice&sno=2013" class="row notice"><span class="tag-mini">대회</span><span class="title">제19회 전국학교스포츠클럽축전 스포츠스태킹 지역별 대표 학...</span><span class="date">2026-09-23 14:52:46</span></a>
1580        <a href="../board/view.php?bdId=newnotice&sno=2012" class="row notice"><span class="tag-mini">대회</span><span class="title">제1회 서해구스포츠스태킹협회장배 26/27WSSA 월드 챔...</span><span class="date">2026-09-21 10:32:51</span></a>
1581        <a href="../board/view.php?bdId=newnotice&sno=2011" class="row notice"><span class="tag-mini">교육</span><span class="title">본사 25기 주니어 코치(SSJ) 교육 안내</span><span class="date">2026-09-15 14:13:52</span></a>
1582        <a href="../board/view.php?bdId=newnotice&sno=2010" class="row notice"><span class="tag-mini">공지</span><span class="title">2026-27시즌 아시안 챔피언십 IN 태국 | 대한민국 ...</span><span class="date">2026-09-15 14:05:58</span></a>
1583      </div>
1584    </div>
1585    <div class="info-col">
1586      <div class="head"><h3>영상 하이라이트</h3><a href="../board/list.php?bdId=videoHighlight" class="plus">+</a></div>
1587      <div class="list">
1588        <a href="../board/view.php?bdId=videoHighlight&sno=96" class="row press"><span class="tag-mini">▶ 영상</span><span class="title">대한민국 스포츠스태킹 국가대표 소집훈련 2일차🔥🔥🔥 #스포...</span><span class="date">2026-10-04 11:32:19</span></a>
1589        <a href="../board/view.php?bdId=videoHighlight&sno=95" class="row press"><span class="tag-mini">▶ 영상</span><span class="title">대한민국 스포츠스태킹협회 국가대표 훈련중!!!🔥 #스포츠스...</span><span class="date">2026-10-03 19:09:53</span></a>
1590        <a href="../board/view.php?bdId=videoHighlight&sno=82" class="row press"><span class="tag-mini">▶ 영상</span><span class="title">2026 경기학교스포츠클럽축제 스포츠스태킹 (생중계)</span><span class="date">2026-09-05 13:41:25</span></a>
1591        <a href="../board/view.php?bdId=videoHighlight&sno=81" class="row press"><span class="tag-mini">▶ 영상</span><span class="title">2026 STACK UP! 스택업 사전이벤트|30·30·3...</span><span class="date">2026-09-15 17:15:25</span></a>
1592        <a href="../board/view.php?bdId=videoHighlight&sno=80" class="row press"><span class="tag-mini">▶ 영상</span><span class="title">[📸스스로그] 스태커 밀착 취재! : 2025 WSSA 월...</span><span class="date">2025-02-06 16:09:22</span></a>
1593      </div>
1594    </div>
1595    <div class="info-col">
1596      <div class="head"><h3>교육신청</h3><a href="../wssa/education_info.php" class="plus">+</a></div>
1597      <div class="list" id="bxskEduList"><div class="row" style="pointer-events:none;color:var(--text-soft);"><span class="title">불러오는 중...</span></div></div>
1598    </div>
1599  </div>
1600</section>
1601
1602<!-- ============ 12. 포토 갤러리(gallery 5) — index.html 승계 ============ -->
1603<section class="container bxsk-sec v2-gap" data-screen-label="home/gallery">
1604  <div class="sec-head">
1605    <div class="left"><h2>포토 갤러리</h2><span class="sub">대회·행사 현장</span></div>
1606    <a href="../main/html.php?htmid=wssa/gallery.html" class="more">전체 보기 →</a>
1607  </div>
1608  <div class="bxsk-gallery-cards">
1609<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1610    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=11" data-dt="2026-08-02 12:00:00">
1611<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">8.2. 부산 코치교육</div>
1612    </a>
1613<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1614    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=10" data-dt="2026-08-01 12:00:00">
1615<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">8.1. 아챔 챌린지 4차(대전)</div>
1616    </a>
1617<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1618    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=9" data-dt="2026-07-25 12:00:00">
1619<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">7.25 본사 28차 심판교육</div>
1620    </a>
1621<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1622    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=26" data-dt="2026-07-11 12:00:00">
1623<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">7.11 아챔 챌린지 3차(울산)</div>
1624    </a>
1625<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1626    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=7" data-dt="2026-06-27 12:00:00">
1627<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">
16276.27 서산협회장배 공인대회</div>
1628    </a>
1629<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1630    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=21" data-dt="2026-05-30 12:00:00">
1631<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.30 천안교육지원청장배</div>
1632    </a>
1633<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1634    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=20" data-dt="2026-05-30 12:00:00">
1635<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.30 익산교육지원청장배</div>
1636    </a>
1637<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1638    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=19" data-dt="2026-05-30 12:00:00">
1639<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.30 김해교육지원청장배</div>
1640    </a>
1641<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1642    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=18" data-dt="2026-05-27 12:00:00">
1643<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.27 양산교육지원청장배</div>
1644    </a>
1645<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1646    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=6" data-dt="2026-05-25 12:00:00">
1647<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.25 서울특별시 전국대회</div>
1648    </a>
1649<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1650    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=17" data-dt="2026-05-23 12:00:00">
1651<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.23 안양과천교육지원청장배</div>
1652    </a>
1653<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1654    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=22" data-dt="2026-05-16 12:00:00">
1655<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.16 아챔 챌린지 1차(김해)</div>
1656    </a>
1657<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1658    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=27" data-dt="2025-07-19 12:00:00">
1659<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">7.19. 아챔 챌린지 4차(김해)</div>
1660    </a>
1661<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1662    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=8" data-dt="2025-06-28 12:00:00">
1663<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">6.28. 본사 55기 코치교육</div>
1664    </a>
1665<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1666    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=25" data-dt="2025-06-21 12:00:00">
1667<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">6.21. 아챔 챌린지 3차(울산)</div>
1668    </a>
1669<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1670    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=16" data-dt="2025-06-14 12:00:00">
1671<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">6.14. 울산교육감배</div>
1672    </a>
1673<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1674    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=24" data-dt="2025-05-31 12:00:00">
1675<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.31. 아챔 챌린지 2차(광주)</div>
1676    </a>
1677<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1678    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=15" data-dt="2025-05-24 12:00:00">
1679<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.24. 안양과천교육지원청장배</div>
1680    </a>
1681<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1682    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=14" data-dt="2025-05-24 12:00:00">
1683<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.24. 김해교육지원청장배</div>
1684    </a>
1685<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1686    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=23" data-dt="2025-05-17 12:00:00">
1687<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.17. 아챔 챌린지 1차(경기)</div>
1688    </a>
1689<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1690    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=13" data-dt="2025-05-10 12:00:00">
1691<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">5.10. 청주교육지원청장배</div>
1692    </a>
1693<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1694    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=12" data-dt="2025-04-26 12:00:00">
1695<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">2025년 월드챔피언십</div>
1696    </a>
1697<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1698    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=5" data-dt="2025-02-22 12:00:00">
1699<div class="thumb placeholder-img bxsk-gallery-img-thumb"></div>      <div class="cap">2.22. 국가대표 워크샵</div>
1700    </a>
1701<!-- [E-840b] 전부 받아 아래 스크립트가 날짜순 5개만 남김 -->
1702    <a class="bxsk-gallery-card" href="../board/view.php?bdId=gallery&sno=1" data-dt="2019-11-05 23:21:34">
1703<div class="thumb" style="background-image:url('https://godomall.speedycdn.net/e4864fb9dfa72752aec120414619a373/board/gallery/1/thumb/a70ee45b2d53a219');"></div>      <div class="cap">2011년도 스피드스택스 스택미트 대전 예선전</div>
1704    </a>
1705  </div>
1706</section>
1707<script>
1708  // [E-840b, 2026-09-30] 포토 갤러리 날짜 최신순 — getArticles()는 글 번호 순이라 작성일(대회일)을 늦게 올린 앨범이 섞임.
1709  // 작성일 내림차순(같으면 글 번호 큰 순) 5개만 남기고, 퀵메뉴 '포토 갤러리' 사진 칸도 가장 최근 앨범으로. 썸네일 스크립트보다 먼저 실행.
1710  (function () {
1711    var box = document.querySelector('#bxsk-main .bxsk-gallery-cards') || document.querySelector('.bxsk-gallery-cards');
1712    if (!box) return;
1713    var cards = Array.prototype.slice.call(box.querySelectorAll('.bxsk-gallery-card'));
1714    if (!cards.length) return;
1715    function no(c) { var m = (c.getAttribute('href') || '').match(/sno=(\d+)/); return m ? +m[1] : 0; }
1716    cards.sort(function (a, b) { var x = a.getAttribute('data-dt') || '', y = b.getAttribute('data-dt') || ''; if (x !== y) return x < y ? 1 : -1; return no(b) - no(a); });
1717    cards.forEach(function (c, i) { if (i < 5) box.appendChild(c); else c.parentNode.removeChild(c); });
1718    var tile = document.querySelector('.quick-menu-item-photo');
1719    var withImg = null;
1720    for (var i = 0; i < cards.length && i < 5; i++) { var t = cards[i].querySelector('.thumb'); if (t && /url\(/.test(t.getAttribute('style') || '')) { withImg = cards[i]; break; } }
1721    if (tile && withImg) {
1722      tile.setAttribute('href', withImg.getAttribute('href'));
1723      tile.style.backgroundImage = withImg.querySelector('.thumb').style.backgroundImage;
1724    }
1725  })();
1726</script>
1726
1727
1728<!-- ============ 13. SPONSORS — index.html 승계(실재 로고 자산 V2) ============ -->
1729<section class="sponsors" data-screen-label="home/sponsors">
1730  <div class="container">
1731    <div class="bxsk-sponsors-title">OFFICIAL PARTNERS · 공식 파트너</div>
1732    <ul class="bxsk-sponsor-cards">
1733      <li><a href="http://thewssa.com/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/main/2015-T2-date-ban.jpg" alt="WSSA"></a></li>
1734      <li><a href="http://speedstacks.com/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/main/2015-U2-date-ban.jpg" alt="Speed Stacks"></a></li>
1735      <li><a href="http://www.teachforkorea.go.kr/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/main/2017-X-date-ban.jpg" alt="교육기부"></a></li>
1736      <li><a href="https://www.acrc.go.kr/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/korearight.png" alt="국민권익위원회"></a></li>
1737      <li><a href="http://csv.culture.go.kr/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/main/2015-X2-date-ban.jpg" alt="문화품앗e"></a></li>
1738      <li><a href="http://dovol.youth.go.kr/" target="_blank" rel="noopener"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/img_wssa/main/201706-X2-date-ban.jpg" alt="두볼 청소년자원봉사"></a></li>
1739    </ul>
1740  </div>
1741</section>
1742
1743</div>
1744<!-- //bxsk-main (v2) -->
1745
1746<!-- ============ JS ①: 썸네일 자동 폴백(index.html 승계, E-129/B28-9 패턴) — 첨부이미지 없을 때 본문 첫 이미지 또는 유튜브 썸네일 ============ -->
1747<script>
1748(function () {
1749  function fetchAndApply(thumb, extractor) {
1750    var href = thumb.getAttribute('data-fetch-href');
1751    if (!href) { var link = thumb.closest('a[href]'); href = link ? link.href : null; }
1752    if (!href) return;
1753    fetch(href + (href.indexOf('?') > -1 ? '&' : '?') + 'noheader=1', { credentials: 'same-origin' })
1754      .then(function (res) { return res.text(); })
1755      .then(function (html) {
1756        var doc = new DOMParser().parseFromString(html, 'text/html');
1757        var url = extractor(doc);
1758        if (!url) return;
1759        thumb.style.backgroundImage = "url('" + url + "')";
1760        thumb.style.backgroundSize = 'cover';
1761        thumb.style.backgroundPosition = 'center';
1762        thumb.classList.remove('placeholder-img');
1763        Array.prototype.slice.call(thumb.childNodes).forEach(function (node) { if (node.nodeType === 3) { thumb.removeChild(node); } });
1764      })
1765      .catch(function () { /* 실패 시 플레이스홀더 유지 */ });
1766  }
1767  function applyAll(scope) {
1768    scope = scope || document;
1769    scope.querySelectorAll('.bxsk-news-img-thumb, .bxsk-gallery-img-thumb').forEach(function (thumb) {
1770      fetchAndApply(thumb, function (doc) { var img = doc.querySelector('#bxskArticleBody img'); return (img && img.src) ? img.src : null; });
1771    });
1772    scope.querySelectorAll('.bxsk-video-yt-thumb').forEach(function (thumb) {
1773      fetchAndApply(thumb, function (doc) {
1774        var embedEl = doc.querySelector('.video-embed[data-yt-src]');
1775        var raw = embedEl ? (embedEl.getAttribute('data-yt-src') || '') : '';
1776        var m = raw.match(/(?:youtu\.be\/|[?&]v=|\/embed\/)([A-Za-z0-9_-]{6,20})/);
1777        if (!m && /^[A-Za-z0-9_-]{6,20}$/.test(raw.trim())) { m = [null, raw.trim()]; }
1778        if (m) return 'https://img.youtube.com/vi/' + m[1] + '/hqdefault.jpg';
1779        var img = doc.querySelector('#bxskArticleBody img');
1780        return (img && img.src) ? img.src : null;
1781      });
1782    });
1783  }
1784  window.bxskApplyThumbs = applyAll;
1785  applyAll(document);
1786})();
1787</script>
1787
1788
1789<!-- ============ JS ②: 히어로 — 관리자 선택(home_hero_api) 우선, 없으면 자동(heroSlide 1 + 공지/뉴스/영상 풀별 최신 1 = 4장). 하단 탭 = 슬라이드 인덱스 ============ -->
1790<script>
1791(function () {
1792  var stage = document.getElementById('bxskHeroStage');
1793  var tabsEl = document.getElementById('bxskHeroTabs');
1794  if (!stage) return;
1795  function esc(v) {
1796    return String(v == null ? '' : v).replace(/[&<>"']/g, function (c) {
1797      if (c === '&') return '&amp;'; if (c === '<') return '&lt;'; if (c === '>') return '&gt;'; if (c === '"') return '&quot;'; return '&#39;';
1798    });
1799  }
1800  var boardLabel = {};
1801  boardLabel.newnotice = '공지'; boardLabel.newsPress = '뉴스'; boardLabel.videoHighlight = '영상'; boardLabel.heroSlide = '헤드라인'; boardLabel.gallery = '갤러리'; boardLabel.event2020 = '이벤트';
1802  function buildSlide(it) {
1803    var thumbCls = it.bdId === 'videoHighlight' ? 'bxsk-video-yt-thumb' : 'bxsk-news-img-thumb';
1804    var visual = it.imageUrl
1805      ? '<img src="' + esc(it.imageUrl) + '" alt="' + esc(it.subject) + '">'
1806      : '<div class="bxsk-hero-noimg ' + thumbCls + '" data-fetch-href="' + esc(it.viewUrl) + '">이미지 준비중</div>';
1807    var chip = it.category ? it.category : (boardLabel[it.bdId] || '소식');
1808    return '<div class="v2-slide v2-slide-picked" data-date="' + esc(it.regDt) + '" data-board="' + esc(boardLabel[it.bdId] || chip) + '">'
1809      + '<div class="v2-slide-copy">'
1810      + '<div class="v2-eyebrow"><span class="v2-chip">' + esc(chip) + '</span><span class="v2-date">' + esc(it.date) + '</span></div>'
1811      + '<h2>' + esc(it.subject) + '</h2>'
1812      + '<div class="v2-cta-row"><a class="v2-btn v2-btn-yellow" href="' + esc(it.viewUrl) + '">자세히 보기 →</a>'
1813      + '<a class="v2-btn v2-btn-ghost" href="' + esc(it.listUrl) + '">전체 보기</a></div>'
1814      + '</div>'
1815      + '<div class="v2-slide-visual"><div class="v2-visual-frame">' + visual + '</div></div>'
1816      + '</div>';
1817  }
1818  var started = false;
1819  function startAuto() { if (started) return; started = true; initHero(false); }
1820  var t = setTimeout(startAuto, 2000);
1821  fetch('../wssa/home_hero_api.php', { credentials: 'same-origin' })
1822    .then(function (r) { return r.json(); })
1823    .then(function (d) {
1824      if (started) return;
1825      clearTimeout(t);
1826      var items = (d && d.items) || [];
1827      if (items.length) {
1828        stage.innerHTML = items.map(buildSlide).join('');
1829        if (window.bxskApplyThumbs) window.bxskApplyThumbs(stage);
1830        started = true; initHero(true);
1831      } else { startAuto(); }
1832    })
1833    .catch(function () { clearTimeout(t); startAuto(); });
1834
1835  function initHero(picked) {
1836    if (!picked) {
1837      // 자동 선정: 후보 풀(공지/뉴스/영상)마다 data-date 최신 1건만 남김 → heroSlide 1 + 3 = 최대 4장
1838      var seen = {};
1839      var cands = Array.prototype.slice.call(stage.querySelectorAll('.v2-slide-candidate'));
1840      cands.sort(function (a, b) { return (b.getAttribute('data-date') || '').localeCompare(a.getAttribute('data-date') || ''); });
1841      cands.forEach(function (el) {
1842        var k = el.getAttribute('data-board') || '';
1843        if (seen[k]) { el.parentNode.removeChild(el); } else { seen[k] = true; }
1844      });
1845    }
1846    var slides = Array.prototype.slice.call(stage.querySelectorAll('.v2-slide'));
1847    if (!slides.length) { stage.innerHTML = '<div class="v2-slide is-active"><div class="v2-slide-copy"><h2>대한스포츠스태킹협회</h2><div class="v2-cta-row"><a class="v2-btn v2-btn-yellow" href="../main/html.php?htmid=wssa/notices.html">공지 보기 →</a></div></div></div>'; return; }
1848
1849    var curEl = document.getElementById('bxskHeroCur');
1850    var totalEl = document.getElementById('bxskHeroTotal');
1851    if (totalEl) totalEl.textContent = (slides.length < 10 ? '0' : '') + slides.length;
1852
1853    var tabs = [];
1854    if (tabsEl) {
1855      tabsEl.innerHTML = '';
1856      slides.forEach(function (s, i) {
1857        var b = document.createElement('button');
1858        b.type = 'button'; b.className = 'v2-hero-tab'; b.setAttribute('role', 'tab');
1859        var chipEl = s.querySelector('.v2-chip');
1860        var h = s.querySelector('h1');
1861        var k = document.createElement('span'); k.className = 'k';
1862        k.textContent = (i < 9 ? '0' : '') + (i + 1) + ' ' + (chipEl ? chipEl.textContent.trim() : (s.getAttribute('data-board') || ''));
1863        var tt = document.createElement('span'); tt.className = 't'; tt.textContent = h ? h.textContent.trim() : '';
1864        b.appendChild(k); b.appendChild(tt);
1865        b.setAttribute('aria-label', (i + 1) + '번 슬라이드: ' + tt.textContent);
1866        b.addEventListener('click', function () { show(i); stop(); start(); });
1867        tabsEl.appendChild(b); tabs.push(b);
1868      });
1869    }
1870
1871    var idx = 0, playing = true, timer = null;
1872    function show(n) {
1873      idx = (n + slides.length) % slides.length;
1874      slides.forEach(function (s, i) { s.classList.toggle('is-active', i === idx); });
1875      tabs.forEach(function (b, i) { b.classList.toggle('is-active', i === idx); b.setAttribute('aria-selected', i === idx ? 'true' : 'false'); });
1876      if (curEl) curEl.textContent = (idx < 9 ? '0' : '') + (idx + 1);
1877    }
1878    function next() { show(idx + 1); }
1879    function prev() { show(idx - 1); }
1880    function start() { stop(); if (slides.length > 1) timer = setInterval(next, 6000); playing = true; }
1881    function stop() { clearInterval(timer); timer = null; playing = false; }
1882    show(0); start();
1883
1884    var root = stage.parentNode;
1885    var nextBtn = root.querySelector('.v2-hero-next'), prevBtn = root.querySelector('.v2-hero-prev'), playBtn = root.querySelector('.v2-hero-play');
1886    if (nextBtn) nextBtn.addEventListener('click', function () { next(); stop(); start(); });
1887    if (prevBtn) prevBtn.addEventListener('click', function () { prev(); stop(); start(); });
1888    if (playBtn) playBtn.addEventListener('click', function () {
1889      if (playing) { stop(); playBtn.innerHTML = '<svg width="9" height="9" viewBox="0 0 24 24" fill="currentColor"><polygon points="5 3 19 12 5 21 5 3"/></svg>'; }
1890      else { start(); playBtn.innerHTML = '<svg width="9" height="9" viewBox="0 0 24 24" fill="currentColor"><rect x="6" y="5" width="4" height="14"/><rect x="14" y="5" width="4" height="14"/></svg>'; }
1891    });
1892    stage.addEventListener('mouseenter', function () { if (playing) { clearInterval(timer); timer = null; } });
1893    stage.addEventListener('mouseleave', function () { if (playing && !timer && slides.length > 1) { timer = setInterval(next, 6000); } });
1894  }
1895})();
1896</script>
1896
1897
1898<!-- ============ JS ③: 오늘 날짜 라벨 + 대회 일정(월별) + 퀵스탯/공공정보 stats + '지금' 대회 타일 — tournament_schedule_api ============ -->
1899<script>
1900(function () {
1901  function esc(v) {
1902    return String(v == null ? '' : v).replace(/[&<>"']/g, function (c) {
1903      if (c === '&') return '&amp;'; if (c === '<') return '&lt;'; if (c === '>') return '&gt;'; if (c === '"') return '&quot;'; return '&#39;';
1904    });
1905  }
1906  function fmt(n) { try { return Number(n).toLocaleString('ko-KR'); } catch (e) { return String(n); } }
1907  function setNum(id, val, unit) { var el = document.getElementById(id); if (!el || val == null) return; el.innerHTML = fmt(val) + (unit ? '<span>' + unit + '</span>' : ''); }
1908  function parseDate(s) { if (!s) return null; var m = String(s).match(/^(\d{4})-(\d{2})-(\d{2})/); return m ? new Date(+m[1], +m[2] - 1, +m[3]) : null; }
1909  var today = new Date(); today.setHours(0, 0, 0, 0);
1910  var DAYS = ['일', '월', '화', '수', '목', '금', '토'];
1911
1912  var dateEl = document.getElementById('bxskNowDate');
1913  if (dateEl) dateEl.textContent = today.getFullYear() + '년 ' + (today.getMonth() + 1) + '월 ' + today.getDate() + '일 ' + DAYS[today.getDay()] + '요일 기준 · 자동 갱신';
1914
1915  var container = document.getElementById('bxskScheduleCards');
1916  var tabsWrap = document.getElementById('bxskScheduleTabs');
1917  var tileDone = false;
1918
1919  function applyStats(s) {
1920    if (!s) return;
1921    var a = document.getElementById('bxskStatAthletes'); if (a) a.innerHTML = fmt(s.athleteCount || 0) + '<span>명</span>';
1922    var b = document.getElementById('bxskStatSanctioned'); if (b) b.innerHTML = fmt(s.sanctionedCount || 0) + '<span>회</span>';
1923    var c = document.getElementById('bxskStatCertified');
1924    if (c) { if (s.certifiedCount) { c.style.fontSize = ''; c.style.color = ''; c.innerHTML = fmt(s.certifiedCount) + '<span>명</span>'; } else { c.textContent = '준비중'; } }
1925    setNum('bxskPcAcademy', s.academyCount, '개소');
1926    setNum('bxskPcAthletes', s.athleteCount, '명');
1927    setNum('bxskPcCertified', s.certifiedCount, '명');
1928    setNum('bxskPcSanctioned', s.sanctionedCount, '회');
1929    var scEl = document.getElementById('bxskPcSchoolclub');
1930    if (scEl && s.schoolclubCount != null && s.schoolclubCount > 0) scEl.innerHTML = fmt(s.schoolclubCount) + '<span>개교</span>';
1931  }
1932
1933  function fillTourTile(rows) {
1934    var tile = document.getElementById('bxskNowTour');
1935    if (!tile || tileDone) return;
1936    tileDone = true;
1937    var k = tile.querySelector('.k'), t = tile.querySelector('.t'), m = tile.querySelector('.m');
1938    if (!rows || !rows.length) { if (t) t.textContent = '예정된 공인대회가 없습니다'; if (m) m.textContent = '전체 대회 일정 →'; return; }
1939    var r = rows[0];
1940    var d = parseDate(r.date_start);
1941    var dday = d ? Math.round((d - today) / 86400000) : null;
1942    var ddayTxt = dday == null ? '' : (dday === 0 ? 'D-DAY' : (dday > 0 ? 'D-' + dday : '진행 중'));
1943    if (k) k.textContent = '다가오는 공인대회' + (ddayTxt ? ' · ' + ddayTxt : '');
1944    if (t) t.textContent = r.name_ko || r.name_en || '';
1945    if (m) m.textContent = (d ? (d.getMonth() + 1) + '.' + d.getDate() + ' ' + DAYS[d.getDay()] : '') + (r.venue_name ? ' · ' + r.venue_name : '') + ' → 대회 상세';
1946    tile.href = r.link ? ('../wssa/' + r.link) : ('../wssa/tournament_detail.php?tid=' + r.tournament_id);
1947  }
1948
1949  function renderMonths(rows) {
1950    var groups = [], map = {};
1951    rows.slice().sort(function (a, b) { return String(a.date_start || '').localeCompare(String(b.date_start || '')); }).forEach(function (r) {
1952      var d = parseDate(r.date_start);
1953      var key = d ? (d.getFullYear() + '-' + (d.getMonth() + 1)) : '미정';
1954      if (!map[key]) { var g0 = {}; g0.key = key; g0.d = d; g0.rows = []; map[key] = g0; groups.push(g0); }
1955      map[key].rows.push(r);
1956    });
1957    var first = true;
1958    return groups.map(function (g) {
1959      var label = g.d ? ((g.d.getFullYear() !== today.getFullYear() ? g.d.getFullYear() + '년 ' : '') + (g.d.getMonth() + 1) + '월') : '일정 미정';
1960      var html = '<div class="v2-month"><div class="mh">' + esc(label) + '</div>';
1961      g.rows.forEach(function (r) {
1962        var d = parseDate(r.date_start);
1963        var href = r.link ? ('../wssa/' + r.link) : ((r.type === 'Promotion') ? '../wssa/promotion_tournament.php?ptid=' + r.tournament_id : '../wssa/tournament_detail.php?tid=' + r.tournament_id);
1964        html += '<a class="v2-ev" href="' + esc(href) + '"><span class="d' + (first ? ' hot' : '') + '">' + (d ? d.getDate() : '-') + '</span>'
1965          + '<span class="b"><span class="n">' + esc(r.name_ko || r.name_en || '') + '</span><span class="v">' + esc(r.venue_name || '장소 미정') + (d ? ' · ' + DAYS[d.getDay()] + '요일' : '') + '</span></span></a>';
1966        first = false;
1967      });
1968      return html + '</div>';
1969    }).join('');
1970  }
1971
1972  function load(type) {
1973    if (!container) return;
1974    container.innerHTML = '<div class="empty">대회 일정을 불러오는 중...</div>';
1975    var url = '/wssa/tournament_schedule_api.php' + (type ? ('?type=' + encodeURIComponent(type)) : '');
1976    fetch(url, { credentials: 'same-origin' })
1977      .then(function (res) { return res.json(); })
1978      .then(function (json) {
1979        if (!json || json.status !== 'ok') { container.innerHTML = '<div class="empty">대회 일정을 불러오지 못했습니다.</div>'; return; }
1980        var rows = json.data || [];
1981        container.innerHTML = rows.length ? renderMonths(rows) : '<div class="empty">예정된 대회가 없습니다. <a class="v2-more" href="../wssa/tournament_results.php">지난 대회 결과 →</a></div>';
1982        if (json.stats) applyStats(json.stats);
1983        if (type === 'Sanctioned') fillTourTile(rows);
1984      })
1985      .catch(function () { container.innerHTML = '<div class="empty">대회 일정을 불러오지 못했습니다.</div>'; });
1986  }
1987  if (tabsWrap) {
1988    tabsWrap.querySelectorAll('button').forEach(function (btn) {
1989      btn.addEventListener('click', function () {
1990        tabsWrap.querySelectorAll('button').forEach(function (b) { b.classList.remove('active'); });
1991        btn.classList.add('active'); load(btn.getAttribute('data-type'));
1992      });
1993    });
1994  }
1995  load('Sanctioned');
1996  // stats는 type 없는 호출에서만 전부 채워짐(academyCount 등) — 1회 별도 호출
1997  fetch('/wssa/tournament_schedule_api.php', { credentials: 'same-origin' })
1998    .then(function (r) { return r.json(); }).then(function (json) { if (json && json.stats) applyStats(json.stats); }).catch(function () {});
1999})();
2000</script>
2000
2001
2002<!-- ============ JS ④: 한국기록 — home_records_api 1회 호출로 ①퀵스탯 롤링(E-604 규칙: 개인전 남/여 분리, 팀종목 SS·C/P 제외)
2003     ②공공정보 종목별 미니 배지 ③종목 카드 3 ④이번 시즌 경신 목록(셀 date ≥ 시즌 시작일 5/1) ⑤'지금' 최근 경신 타일 ⑥연령별 표(index.html 승계) ============ -->
2004<script>
2005(function () {
2006  function esc(v) {
2007    return String(v == null ? '' : v).replace(/[&<>"']/g, function (c) {
2008      if (c === '&') return '&amp;'; if (c === '<') return '&lt;'; if (c === '>') return '&gt;'; if (c === '"') return '&quot;'; return '&#39;';
2009    });
2010  }
2011  var GENDER = {}; GENDER.M = '남자'; GENDER.F = '여자';
2012  var recData = null, currentTabCode = null;
2013  var tabsEl = document.getElementById('bxskRecordsTabs'), headEl = document.getElementById('bxskRecordsHead'), bodyEl = document.getElementById('bxskRecordsBody');
2014
2015  function seasonStart(json) {
2016    var y = null;
2017    if (json && json.season) { var m = String(json.season).match(/^(\d{4})/); if (m) y = +m[1]; }
2018    if (y == null) { var now = new Date(); y = now.getMonth() + 1 >= 5 ? now.getFullYear() : now.getFullYear() - 1; }
2019    return y + '-05-01';
2020  }
2021  // 모든 셀을 평면 목록으로 — 개인전: 종목×나이대×성별, 팀: 종목×라벨
2022  function flatten(json) {
2023    var out = [];
2024    (json.tabs || []).forEach(function (t) {
2025      var rec = json.records && json.records[t.code];
2026      if (!rec) return;
2027      if (t.type === 'individual') {
2028        Object.keys(rec).forEach(function (band) {
2029          ['M', 'F'].forEach(function (g) {
2030            var c = rec[band] && rec[band][g];
2031            if (!c || c.time == null) return;
2032            var it = {}; it.tab = t; it.label = band + ' ' + GENDER[g] + ' ' + t.label; it.time = +c.time; it.name = (c.names && c.names.length) ? c.names.join(', ') : c.name; it.year = c.year; it.date = c.date || ''; it.gender = g; it.team = false;
2033            out.push(it);
2034          });
2035        });
2036      } else {
2037        (rec || []).forEach(function (row) {
2038          if (row.time == null) return;
2039          var lb = String(row.label || '');
2040          var it = {}; it.tab = t; it.label = lb + ' ' + t.label; it.time = +row.time; it.name = row.names; it.year = row.year; it.date = row.date || ''; it.team = true; it.special = /^(SS|C\/P)\s/i.test(lb);
2041          out.push(it);
2042        });
2043      }
2044    });
2045    return out;
2046  }
2047  function fmtDate(s) { var m = String(s || '').match(/^(\d{4})-(\d{2})-(\d{2})/); return m ? (m[1] + '.' + m[2] + '.' + m[3]) : ''; }
2048
2049  // ① 퀵스탯 롤링(E-604)
2050  function rolling(json) {
2051    var labelEl = document.getElementById('bxskStatRecordLabel'), valEl = document.getElementById('bxskStatCycle');
2052    if (!labelEl || !valEl) return;
2053    labelEl.style.transition = 'opacity .25s'; valEl.style.transition = 'opacity .25s';
2054    var items = [];
2055    (json.tabs || []).forEach(function (t) {
2056      var rec = json.records && json.records[t.code];
2057      if (!rec) return;
2058      if (t.type === 'individual') {
2059        ['M', 'F'].forEach(function (g) {
2060          var minG = null;
2061          Object.keys(rec).forEach(function (b) { var c = rec[b] && rec[b][g]; if (c && c.time != null) { var v = +c.time; if (minG === null || v < minG) minG = v; } });
2062          if (minG !== null) { var it = {}; it.label = t.label + ' ' + GENDER[g]; it.time = minG; items.push(it); }
2063        });
2064      } else {
2065        var min = null;
2066        (rec || []).forEach(function (row) { if (/^(SS|C\/P)\s/i.test(String(row.label || ''))) return; if (row.time != null) { var v2 = +row.time; if (min === null || v2 < min) min = v2; } });
2067        if (min !== null) { var it2 = {}; it2.label = t.label; it2.time = min; items.push(it2); }
2068      }
2069    });
2070    if (!items.length) { valEl.textContent = '준비중'; return; }
2071    var i = 0;
2072    function show() { var it = items[i % items.length]; labelEl.textContent = '한국 최고 기록 (' + it.label + ')'; valEl.style.fontSize = ''; valEl.style.color = ''; valEl.innerHTML = it.time.toFixed(3) + '<span>초</span>'; }
2073    show();
2074    if (items.length > 1) setInterval(function () { i++; labelEl.style.opacity = '0'; valEl.style.opacity = '0'; setTimeout(function () { show(); labelEl.style.opacity = '1'; valEl.style.opacity = '1'; }, 250); }, 3200);
2075  }
2076
2077  // ② 공공정보 미니 배지 + ③ 종목 카드 3
2078  function bestIndividual(json, code) {
2079    var rec = json.records && json.records[code]; if (!rec) return null;
2080    var best = null;
2081    Object.keys(rec).forEach(function (b) { ['M', 'F'].forEach(function (g) { var c = rec[b] && rec[b][g]; if (c && c.time != null && (best === null || +c.time < best.time)) { best = {}; best.time = +c.time; best.name = (c.names && c.names.length) ? c.names.join(', ') : c.name; best.gender = g; best.year = c.year; best.band = b; } }); });
2082    return best;
2083  }
2084  function cardsAndMini(json) {
2085    var want = ['3-3-3', '3-6-3', 'Cycle'];
2086    var miniEl = document.getElementById('bxskPcRecMini'), cardsEl = document.getElementById('bxskRecCards');
2087    var mini = '', cards = '';
2088    want.forEach(function (code) {
2089      var b = bestIndividual(json, code);
2090      if (b) mini += '<b>' + esc(code) + ' <em>' + b.time.toFixed(3) + '</em></b>';
2091      cards += '<div class="v2-rec-card"><span class="k">' + esc(code) + ' · 한국기록</span><span class="v">' + (b ? b.time.toFixed(3) : '-') + '</span><span class="n">' + (b ? esc(b.name) + ' · ' + esc(GENDER[b.gender] || '') + (b.year ? ' · ' + b.year : '') : '기록 준비중') + '</span></div>';
2092    });
2093    if (miniEl) miniEl.innerHTML = mini;
2094    if (cardsEl) cardsEl.innerHTML = cards;
2095  }
2096
2097  // ④ 이번 시즌 경신 목록 + ⑤ '지금' 최근 경신 타일
2098  function seasonNew(json) {
2099    var listEl = document.getElementById('bxskRecNew'), subEl = document.getElementById('bxskRecNewSub');
2100    var start = seasonStart(json);
2101    var all = flatten(json);
2102    var fresh = all.filter(function (it) { return it.date && it.date.slice(0, 10) >= start; });
2103    fresh.sort(function (a, b) { return a.date < b.date ? 1 : (a.date > b.date ? -1 : (a.time - b.time)); });
2104    if (subEl) subEl.textContent = start.slice(0, 4) + '-' + String(+start.slice(0, 4) + 1).slice(2) + ' 시즌(' + (+start.slice(5, 7)) + '월~)에 새로 세워진 연령별 한국기록 · 세계협회 Korea Records와 같은 기준';
2105    if (listEl) {
2106      if (!fresh.length) { listEl.innerHTML = '<div class="empty">이번 시즌 경신된 연령별 한국기록이 아직 없습니다. 전체 기록은 아래 표에서 확인하세요.</div>'; }
2107      else {
2108        listEl.innerHTML = fresh.slice(0, 8).map(function (it) {
2109          return '<a href="../wssa/record_archive.php" title="' + esc(fmtDate(it.date)) + '"><span class="lb">' + esc(it.label) + '</span><span class="tm">' + it.time.toFixed(3) + '</span><span class="nm">' + esc(it.name) + '</span><span class="nw">NEW</span></a>';
2110        }).join('');
2111      }
2112    }
2113    var tile = document.getElementById('bxskNowRec');
2114    if (tile) {
2115      var pool = all.filter(function (it) { return it.date && !it.special; });
2116      pool.sort(function (a, b) { return a.date < b.date ? 1 : (a.date > b.date ? -1 : (a.team === b.team ? 0 : (a.team ? 1 : -1))); });
2117      var k = tile.querySelector('.k'), t = tile.querySelector('.t'), m = tile.querySelector('.m');
2118      if (!pool.length) { if (t) t.textContent = '기록 데이터 준비중'; return; }
2119      var it = pool[0];
2120      if (k) k.textContent = '최근 경신 한국기록 · ' + fmtDate(it.date);
2121      if (t) t.innerHTML = it.time.toFixed(3) + ' <small>' + esc(it.label) + '</small><br>' + esc(it.name);
2122      if (m) m.textContent = (fresh.length ? '이번 시즌 경신 ' + fresh.length + '건' : '연령별 한국기록') + ' → 전체 보기';
2123    }
2124  }
2125
2126  // ⑥ 연령별 표(index.html 승계)
2127  function findTab(code) { var list = recData.tabs || []; for (var i = 0; i < list.length; i++) { if (list[i].code === code) return list[i]; } return null; }
2128  function renderCell(cell) {
2129    if (!cell) return '<td class="time-cell empty-cell">-</td><td class="name-cell empty-cell">-</td><td class="year-cell empty-cell">-</td>';
2130    return '<td class="time-cell">' + Number(cell.time).toFixed(3) + '</td><td class="name-cell">' + esc(cell.name) + '</td><td class="year-cell">' + (cell.year != null ? cell.year : '-') + '</td>';
2131  }
2132  function renderIndividual(code) {
2133    headEl.innerHTML = '<tr><th rowspan="2">나이 구분</th><th colspan="3">남자 MALE</th><th colspan="3">여자 FEMALE</th></tr><tr><th>기록</th><th>이름</th><th>년도</th><th>기록</th><th>이름</th><th>년도</th></tr>';
2134    var evRecords = (recData.records && recData.records[code]) || {};
2135    bodyEl.innerHTML = (recData.ageBands || []).map(function (band) { var bd = evRecords[band] || {}; return '<tr><td class="age-cell">' + esc(band) + '</td>' + renderCell(bd.M) + renderCell(bd.F) + '</tr>'; }).join('');
2136  }
2137  function renderTeam(code) {
2138    headEl.innerHTML = '<tr><th>나이 구분</th><th>기록</th><th>이름</th><th>년도</th></tr>';
2139    var list = (recData.records && recData.records[code]) || [];
2140    if (!list.length) { bodyEl.innerHTML = '<tr><td colspan="4" style="text-align:center;padding:24px;color:var(--text-soft);">기록이 없습니다.</td></tr>'; return; }
2141    bodyEl.innerHTML = list.map(function (row) { return '<tr><td class="age-cell">' + esc(row.label) + '</td><td class="time-cell">' + Number(row.time).toFixed(3) + '</td><td class="name-cell">' + esc(row.names) + '</td><td>' + (row.year != null ? row.year : '-') + '</td></tr>'; }).join('');
2142  }
2143  function renderTable() {
2144    if (!recData || !currentTabCode || !headEl || !bodyEl) return;
2145    var tab = findTab(currentTabCode); if (!tab) return;
2146    if (tab.type === 'individual') renderIndividual(tab.code); else renderTeam(tab.code);
2147  }
2148  if (tabsEl) tabsEl.addEventListener('click', function (e) {
2149    var btn = e.target.closest('button[data-tab]'); if (!btn) return;
2150    currentTabCode = btn.getAttribute('data-tab');
2151    Array.prototype.forEach.call(tabsEl.querySelectorAll('button'), function (b) { b.classList.remove('active'); });
2152    btn.classList.add('active'); renderTable();
2153  });
2154
2155  fetch('../wssa/home_records_api.php', { credentials: 'same-origin' })
2156    .then(function (r) { return r.json(); })
2157    .then(function (json) {
2158      if (!json || json.status !== 'ok' || !json.tabs) { throw new Error('bad'); }
2159      recData = json;
2160      try { rolling(json); } catch (e1) {}
2161      try { cardsAndMini(json); } catch (e2) {}
2162      try { seasonNew(json); } catch (e3) {}
2163      currentTabCode = json.tabs[0] ? json.tabs[0].code : null;
2164      if (tabsEl) tabsEl.innerHTML = json.tabs.map(function (t, i) { return '<button class="' + (i === 0 ? 'active' : '') + '" data-tab="' + esc(t.code) + '">' + esc(t.label) + '</button>'; }).join('');
2165      renderTable();
2166    })
2167    .catch(function () {
2168      if (bodyEl) bodyEl.innerHTML = '<tr><td colspan="7" style="text-align:center;padding:24px;color:var(--text-soft);">기록을 불러오지 못했습니다.</td></tr>';
2169      var l = document.getElementById('bxskRecNew'); if (l) l.innerHTML = '<div class="empty">기록을 불러오지 못했습니다.</div>';
2170      var c = document.getElementById('bxskRecCards'); if (c) c.innerHTML = '';
2171      var t = document.getElementById('bxskNowRec'); if (t) { var tt = t.querySelector('.t'); if (tt) tt.textContent = '연령별 한국기록 보기'; }
2172    });
2173})();
2174</script>
2174
2175
2176<!-- ============ JS ⑤: 교육신청 목록(3열 블록) + '지금' 다음 교육 타일 — home_education_api ============ -->
2177<script>
2178(function () {
2179  function esc(v) {
2180    return String(v == null ? '' : v).replace(/[&<>"']/g, function (c) {
2181      if (c === '&') return '&amp;'; if (c === '<') return '&lt;'; if (c === '>') return '&gt;'; if (c === '"') return '&quot;'; return '&#39;';
2182    });
2183  }
2184  var listEl = document.getElementById('bxskEduList'), tile = document.getElementById('bxskNowEdu');
2185  function tileEmpty(msg) { if (!tile) return; var t = tile.querySelector('.t'); if (t) t.textContent = msg; }
2186  fetch('../wssa/home_education_api.php', { credentials: 'same-origin' })
2187    .then(function (res) { return res.json(); })
2188    .then(function (json) {
2189      var items = (json && json.status === 'ok' && json.items) ? json.items : [];
2190      if (listEl) {
2191        listEl.innerHTML = items.length
2192          ? items.map(function (it) { return '<a href="' + esc(it.link || '../wssa/education_info.php') + '" class="row notice"><span class="tag-mini">교육</span><span class="title">' + esc(it.title) + '</span><span class="date">' + esc(it.date) + '</span></a>'; }).join('')
2193          : '<div class="row" style="pointer-events:none;color:var(--text-soft);"><span class="title">예정된 교육 일정이 없습니다.</span></div>';
2194      }
2195      if (tile) {
2196        if (!items.length) { tileEmpty('예정된 교육 일정이 없습니다'); return; }
2197        var it = items[0];
2198        var k = tile.querySelector('.k'), t = tile.querySelector('.t'), m = tile.querySelector('.m');
2199        var dm = String(it.date || '').match(/^(\d{4})-(\d{2})-(\d{2})/);
2200        if (k) k.textContent = '다음 교육' + (dm ? ' · ' + (+dm[2]) + '.' + (+dm[3]) : '');
2201        if (t) t.textContent = it.title || '';
2202        if (m) m.textContent = (it.venue ? it.venue + ' · ' : '') + '신청하기 →';
2203        if (it.link) tile.href = it.link;
2204      }
2205    })
2206    .catch(function () {
2207      if (listEl) listEl.innerHTML = '<div class="row" style="pointer-events:none;color:var(--text-soft);"><span class="title">불러오지 못했습니다.</span></div>';
2208      tileEmpty('교육 일정 보기');
2209    });
2210})();
2211</script>
2211
2212
2213<!-- ============ JS ⑥: FAQ 베스트 미리보기 — B28(fetch+DOM파싱), service/faq.php?noheader=1&isBest=y (index.html 승계) ============ -->
2214<script>
2215(function () {
2216  var container = document.getElementById('bxskFaqPreview');
2217  if (!container) return;
2218  fetch('../service/faq.php?noheader=1&isBest=y', { credentials: 'same-origin' })
2219    .then(function (res) { if (!res.ok) throw new Error('http ' + res.status); return res.text().then(function (html) { var o = {}; o.html = html; o.url = res.url; return o; }); })
2220    .then(function (data) {
2221      var doc = new DOMParser().parseFromString(data.html, 'text/html');
2222      var items = doc.querySelectorAll('.wssa-faq-compact-list li');
2223      container.innerHTML = '';
2224      if (!items.length) { var pEmpty = document.createElement('p'); pEmpty.className = 'wssa-cs-loading'; pEmpty.textContent = '등록된 FAQ가 없습니다.'; container.appendChild(pEmpty); return; }
2225      var ul = document.createElement('ul'); ul.className = 'wssa-cs-minilist';
2226      items.forEach(function (li) {
2227        var a = li.querySelector('a'); if (!a) return;
2228        var catEl = li.querySelector('.cat');
2229        var liEl = document.createElement('li');
2230        var dSpan = document.createElement('span'); dSpan.className = 'd'; dSpan.textContent = catEl ? catEl.textContent.replace(/[\[\]]/g, '') : '';
2231        var aEl = document.createElement('a'); aEl.href = new URL(a.getAttribute('href'), data.url).href; aEl.textContent = a.textContent;
2232        liEl.appendChild(dSpan); liEl.appendChild(aEl); ul.appendChild(liEl);
2233      });
2234      container.appendChild(ul);
2235    })
2236    .catch(function () {
2237      container.innerHTML = '';
2238      var pFail = document.createElement('p'); pFail.className = 'wssa-cs-loading';
2239      var aFail = document.createElement('a'); aFail.href = '../service/faq.php'; aFail.textContent = 'FAQ 바로가기 →';
2240      pFail.appendChild(aFail); container.appendChild(pFail);
2241    });
2242})();
2243</script>
2243
2244
2245<!-- ============ JS ⑦: 대회 소식 카드 높이 = 뉴스 카드 높이(PC) / 모바일 5건 (index.html 승계) ============ -->
2246<script>
2247(function () {
2248  var rows = document.querySelectorAll('.side-block .notice-list a.row');
2249  var card = document.querySelector('.side-block-col .side-block');
2250  var news = document.querySelector('.main-grid .news-block');
2251  function fit() {
2252    var pc = window.matchMedia('(min-width: 961px)').matches;
2253    var max = pc ? rows.length : 5;
2254    for (var i = 0; i < rows.length; i++) { rows[i].style.display = i < max ? '' : 'none'; }
2255    if (!pc || !card || !news) return;
2256    var target = news.offsetHeight;
2257    for (var j = rows.length - 1; j >= 5 && card.scrollHeight > target; j--) { rows[j].style.display = 'none'; }
2258  }
2259  fit();
2260  window.addEventListener('resize', fit);
2261  window.addEventListener('load', function () { fit(); setTimeout(fit, 1500); });
2262})();
2263</script>
2263
2264
2265<!-- [E-918] 게시판 자동 썸네일(/thumb/, 178x227)을 크게 늘려 써서 흐렸음 — 화면 근처에 들어오면 같은 경로의 원본으로 교체(받기 전엔 기존 유지) -->
2266<script>
2267(function () {
2268  var RE = /(\/board\/[^\/'")]+\/\d+)\/thumb\//;
2269  function urlOf(el) { return el.tagName === 'IMG' ? (el.getAttribute('src') || '') : (el.style.backgroundImage || '').replace(/^url\(["']?/, '').replace(/["']?\)$/, ''); }
2270  function upgrade(el) {
2271    var cur = urlOf(el), full = cur.replace(RE, '$1/');
2272    if (!full || full === cur) { return; }
2273    var img = new Image();
2274    img.onload = function () { if (el.tagName === 'IMG') { el.setAttribute('src', full); } else { el.style.backgroundImage = "url('" + full.replace(/'/g, '%27') + "')"; } };
2275    img.src = full;
2276  }
2277  function scan() {
2278    var els = Array.prototype.filter.call(document.querySelectorAll('[style*="/thumb/"], img[src*="/thumb/"]'), function (el) { return !el.getAttribute('data-e918') && RE.test(urlOf(el)); });
2279    els.forEach(function (el) { el.setAttribute('data-e918', '1'); });
2280    if (!('IntersectionObserver' in window)) { els.forEach(upgrade); return; }
2281    els.forEach(function (el) { io.observe(el); });
2282  }
2283  var io = ('IntersectionObserver' in window) ? new IntersectionObserver(function (entries) {
2284    entries.forEach(function (en) { if (en.isIntersecting) { io.unobserve(en.target); upgrade(en.target); } });
2285  }, { rootMargin: '200px 0px' }) : null;
2286  scan();
2287  // 나중에 그려지는 카드(fetch로 채우는 목록·슬라이드)도 잡도록 몇 번 더 훑는다
2288  [800, 2500, 6000].forEach(function (t) { setTimeout(scan, t); });
2289})();
2290</script>
2290
2291<!-- [E-920] 유튜브 자동 동기화 방아쇠 — 응답은 쓰지 않음. 간격이 안 지났으면 서버는 캐시만 돌려준다(HomeVideoApiController, E-751) -->
2292<script>
2293(function () {
2294  function ping() { try { fetch('../wssa/home_video_api.php?limit=1', { credentials: 'same-origin', cache: 'no-store' }).catch(function () {}); } catch (e) {} }
2295  if ('requestIdleCallback' in window) { window.addEventListener('load', function () { requestIdleCallback(ping, { timeout: 8000 }); }); }
2296  else { window.addEventListener('load', function () { setTimeout(ping, 3000); }); }
2297})();
2298</script>
2298
2299            </div>
2300            <!-- //sub_content -->
2301        </div>
2302        <!-- //본문 끝 contents -->
2303    </div>
2304    <!-- //container -->
2305
2306    <div id="footer_wrap">
2307<div id="footer" class="bxsk-scope bxsk-footer">
2308    <div class="bxsk-container">
2309
2310        <div class="bxsk-foot-top">
2311            <div class="bxsk-foot-brand">
2312                <div class="bxsk-foot-logo">
2313<img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/19ba9ee4caf1db27febc0f852e29aa3a_15712.png"  alt="하단로고" title="하단로고"   />                </div>
2314                <p class="bxsk-foot-desc">
2315                    대한스포츠스태킹협회는 WSSA(World Sport Stacking Association)의 한국 공식 지부로서
2316                    국내 스포츠스태킹 보급과 선수 육성, 국제 교류를 담당합니다.
2317                </p>
2318                <ul class="bxsk-foot-sns">
2319                    <li><a href="https://www.youtube.com/user/SpeedstacksKOREA/videos" target="_blank" rel="noopener" aria-label="YouTube"><i class="fa fa-youtube-play" aria-hidden="true"></i></a></li>
2320                    <li><a href="https://cafe.naver.com/wssakoreaa" target="_blank" rel="noopener" aria-label="Naver Cafe"><i class="fa fa-users" aria-hidden="true"></i></a></li>
2321                    <li><a href="https://www.facebook.com/wssa.sportstacking" target="_blank" rel="noopener" aria-label="Facebook"><i class="fa fa-facebook-square" aria-hidden="true"></i></a></li>
2322                    <li><a href="https://blog.naver.com/wssakorea" target="_blank" rel="noopener" aria-label="Naver Blog"><i class="fa fa-rss" aria-hidden="true"></i></a></li>
2323                </ul>
2324            </div>
2325
2326            <nav class="bxsk-foot-links" aria-label="하단 메뉴">
2327                <div class="bxsk-foot-col">
2328                    <h4>협회</h4>
2329                    <a href="../main/html.php?htmid=wssa/info/insa.html">인사말</a>
2330                    <a href="../main/html.php?htmid=wssa/info/organization.html">조직도</a>
2331                    <a href="../main/html.php?htmid=wssa/info/wssahistory.html">연혁</a>
2332                    <a href="../main/html.php?htmid=wssa/info/map_01.html">오시는 길</a>
2333                </div>
2334                <div class="bxsk-foot-col">
2335                    <h4>참여</h4>
2336                    <a href="../wssa/tournament_schedule.php">대회 일정</a>
2337                    <a href="../main/html.php?htmid=wssa/notices.html#apply">참가 신청</a>
2338                    <a href="#">교육·인증</a>
2339                    <a href="../service/guide.php">이용안내</a>
2340                </div>
2341                <div class="bxsk-foot-col">
2342                    <h4>고객지원</h4>
2343                    <a href="../service/index.php">고객센터</a>
2344                    <a href="../service/cooperation.php">광고/제휴 문의</a>
2345                    <a href="../service/private.php"><strong>개인정보처리방침</strong></a>
2346                    <a href="../service/agreement.php">이용약관</a>
2347                </div>
2348            </nav>
2349        </div>
2350
2351        <div class="bxsk-foot-info">
2352            <address class="bxsk-foot-addr">
2353                <strong>대한스포츠스태킹협회</strong>
2354                <span class="bxsk-foot-addr-line"><em>등기주소</em> 서울특별시 송파구 법원로 127 (문정대명벨리온) 302호</span>
2355                <!-- [2026-08-04 신규] 사무국/운영사무실 — gMall 필드에 없어 정적 텍스트로 추가.
2356                     관리자 화면에서 편집 가능한 필드로 만들고 싶으면 별도 요청 필요(현재는 코드 수정 필요). -->
2357                <span class="bxsk-foot-addr-line"><em>사무국/운영사무실</em> 경기도 하남시 미사강변한강로 155 SKV1 Center 사무 A동 532호</span>
2358            </address>
2359            <dl class="bxsk-foot-biz">
2360                <div><dt>대표</dt><dd>이문용</dd></div>
2361                <div><dt>사업자등록번호</dt><dd>114-82-10496 <a href="https://www.ftc.go.kr/bizCommPop.do?wrkr_no=114-82-10496" target="_blank" rel="noopener" class="bxsk-foot-bizcheck">사업자번호조회 &gt;</a></dd></div>
2362                <div><dt>통신판매업신고번호</dt><dd></dd></div>
2363                <div><dt>개인정보관리자</dt><dd>이문용</dd></div>
2364                <div><dt>대표번호</dt><dd><strong>070-5121-8840</strong></dd></div>
2365                <div><dt>팩스번호</dt><dd>070-5121-8849</dd></div>
2366                <div><dt>메일</dt><dd><a href="mailto:[email protected]">[email protected]</a></dd></div>
2367                <div><dt></dt><dd>호스팅제공 : 엔에이치엔고도(주)</dd></div>
2368            </dl>
2369        </div>
2370
2371        <div class="bxsk-foot-certify">
2372            <span></span>
2373            <span></span>
2374        </div>
2375
2376        <p class="bxsk-copyright">
2377            COPYRIGHT (c) <strong>thinksmart1.godomall.com</strong> ALL RIGHTS RESERVED.
2378        </p>
2379
2380
2381    </div>
2382</div>
2383<!-- //footer -->
2384
2385<style>
2386/* [2026-08-04 신규] 등기주소/사무국주소 2줄 구조 + 사업자번호조회 링크 스타일 */
2387.bxsk-foot-addr-line { display: block; margin-top: 3px; }
2388.bxsk-foot-addr-line em { font-style: normal; font-weight: 700; opacity: .75; margin-right: 4px; }
2389.bxsk-foot-bizcheck { text-decoration: underline; margin-left: 6px; opacity: .85; }
2390.bxsk-foot-bizcheck:hover { opacity: 1; }
2391</style>
2392    </div>
2393    <!-- //footer_wrap -->
2394
2395
2396    <div class="scroll_wrap">
2397
2398        <!-- 좌측 스크롤 배너 -->
2399        <div id="scroll_left">
2400
2401        </div>
2402        <!-- //scroll_left -->
2403        <!-- //좌측 스크롤 배너 -->
2404
2405
2406        <!-- 우측 스크롤 배너 -->
2407        <div id="scroll_right">
2408<div class="right_banner">
2409<a href="http://wssakorea.or.kr/board/list.php?bdId=externalpersonnel" ><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/db6c93355eb939a1c85b8c935142e969_39552.jpg"  alt="지도자 모집(기관/지도자)" title="지도자 모집(기관/지도자)"   /></a></div>
2410<script type="text/javascript">
2411    // DOM 로드
2412    $(function () {
2413        $('.scroll_right_cont').todayGoods();
2414    });
2415
2416    // 최근본상품 리스트 페이징 처리 플러그인
2417    $.fn.todayGoods = function () {
2418        // 기본값 세팅
2419        var self = $(this);
2420        var setting = {
2421            page: 1,
2422            total: 0,
2423            rowno: 5
2424        };
2425        var element = {
2426            goodsList: self.find('ul > li'),
2427            closeButton: self.find('ul > li > button'),
2428            prev: self.find('.scr_paging > .bnt_scroll_prev'),
2429            next: self.find('.scr_paging > .bnt_scroll_next'),
2430            paging: self.find('.scr_paging')
2431        };
2432
2433        // 페이지 갯수 설정
2434        setting.total = Math.ceil(element.goodsList.length / setting.rowno);
2435
2436        // 화면 초기화 및 갱신 (페이지 및 갯수 표기)
2437        var init = function () {
2438            if (setting.total == 0) {
2439                setting.page = 0;
2440                element.paging.hide();
2441            }
2442            self.find('ul').hide().eq(setting.page - 1).show();
2443            self.find('.scr_paging .js_current').text(setting.page);
2444            self.find('.scr_paging .js_total').text(setting.total);
2445        }
2446
2447        // 삭제버튼 클릭
2448        element.closeButton.click(function(e){
2449            $.post('../goods/goods_ps.php', {
2450                'mode': 'delete_today_goods',
2451                'goodsNo': $(this).data('goods-no')
2452            }, function (data, status) {
2453                // 값이 없는 경우 성공
2454                if (status == 'success' && data == '') {
2455                    location.reload(true);
2456                }
2457                else {
2458                    console.log('request fail. ajax status (' + status + ')');
2459                }
2460            });
2461        });
2462
2463        // 이전버튼 클릭
2464        element.prev.click(function (e) {
2465            setting.page = 1 == setting.page ? setting.total : setting.page - 1;
2466            init();
2467        });
2468
2469        // 다음버튼 클릭
2470        element.next.click(function (e) {
2471            setting.page = setting.total == setting.page ? 1 : setting.page + 1;
2472            init();
2473        });
2474
2475        // 화면 초기화
2476        init();
2477    };
2478</script>
2478
2479<div class="right_banner">
2480<a href="/main/html.php?htmid=wssa/mainjoin.html" ><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/b9f2d52731fd3ae90b7f06354c591491_67598.jpg"  alt="자격증 갱신 신청" title="자격증 갱신 신청"   /></a></div>
2481<script type="text/javascript">
2482    // DOM 로드
2483    $(function () {
2484        $('.scroll_right_cont').todayGoods();
2485    });
2486
2487    // 최근본상품 리스트 페이징 처리 플러그인
2488    $.fn.todayGoods = function () {
2489        // 기본값 세팅
2490        var self = $(this);
2491        var setting = {
2492            page: 1,
2493            total: 0,
2494            rowno: 5
2495        };
2496        var element = {
2497            goodsList: self.find('ul > li'),
2498            closeButton: self.find('ul > li > button'),
2499            prev: self.find('.scr_paging > .bnt_scroll_prev'),
2500            next: self.find('.scr_paging > .bnt_scroll_next'),
2501            paging: self.find('.scr_paging')
2502        };
2503
2504        // 페이지 갯수 설정
2505        setting.total = Math.ceil(element.goodsList.length / setting.rowno);
2506
2507        // 화면 초기화 및 갱신 (페이지 및 갯수 표기)
2508        var init = function () {
2509            if (setting.total == 0) {
2510                setting.page = 0;
2511                element.paging.hide();
2512            }
2513            self.find('ul').hide().eq(setting.page - 1).show();
2514            self.find('.scr_paging .js_current').text(setting.page);
2515            self.find('.scr_paging .js_total').text(setting.total);
2516        }
2517
2518        // 삭제버튼 클릭
2519        element.closeButton.click(function(e){
2520            $.post('../goods/goods_ps.php', {
2521                'mode': 'delete_today_goods',
2522                'goodsNo': $(this).data('goods-no')
2523            }, function (data, status) {
2524                // 값이 없는 경우 성공
2525                if (status == 'success' && data == '') {
2526                    location.reload(true);
2527                }
2528                else {
2529                    console.log('request fail. ajax status (' + status + ')');
2530                }
2531            });
2532        });
2533
2534        // 이전버튼 클릭
2535        element.prev.click(function (e) {
2536            setting.page = 1 == setting.page ? setting.total : setting.page - 1;
2537            init();
2538        });
2539
2540        // 다음버튼 클릭
2541        element.next.click(function (e) {
2542            setting.page = setting.total == setting.page ? 1 : setting.page + 1;
2543            init();
2544        });
2545
2546        // 화면 초기화
2547        init();
2548    };
2549</script>
2549
2550<div class="right_banner">
2551<a href="/board/list.php?bdId=FAQ" ><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/af13d8266d411e4cdbba70c36ad4b33f_78273.jpg"  alt="문의사항" title="문의사항"   /></a>
2551<script type="text/javascript">
2552    // DOM 로드
2553    $(function () {
2554        $('.scroll_right_cont').todayGoods();
2555    });
2556
2557    // 최근본상품 리스트 페이징 처리 플러그인
2558    $.fn.todayGoods = function () {
2559        // 기본값 세팅
2560        var self = $(this);
2561        var setting = {
2562            page: 1,
2563            total: 0,
2564            rowno: 5
2565        };
2566        var element = {
2567            goodsList: self.find('ul > li'),
2568            closeButton: self.find('ul > li > button'),
2569            prev: self.find('.scr_paging > .bnt_scroll_prev'),
2570            next: self.find('.scr_paging > .bnt_scroll_next'),
2571            paging: self.find('.scr_paging')
2572        };
2573
2574        // 페이지 갯수 설정
2575        setting.total = Math.ceil(element.goodsList.length / setting.rowno);
2576
2577        // 화면 초기화 및 갱신 (페이지 및 갯수 표기)
2578        var init = function () {
2579            if (setting.total == 0) {
2580                setting.page = 0;
2581                element.paging.hide();
2582            }
2583            self.find('ul').hide().eq(setting.page - 1).show();
2584            self.find('.scr_paging .js_current').text(setting.page);
2585            self.find('.scr_paging .js_total').text(setting.total);
2586        }
2587
2588        // 삭제버튼 클릭
2589        element.closeButton.click(function(e){
2590            $.post('../goods/goods_ps.php', {
2591                'mode': 'delete_today_goods',
2592                'goodsNo': $(this).data('goods-no')
2593            }, function (data, status) {
2594                // 값이 없는 경우 성공
2595                if (status == 'success' && data == '') {
2596                    location.reload(true);
2597                }
2598                else {
2599                    console.log('request fail. ajax status (' + status + ')');
2600                }
2601            });
2602        });
2603
2604        // 이전버튼 클릭
2605        element.prev.click(function (e) {
2606            setting.page = 1 == setting.page ? setting.total : setting.page - 1;
2607            init();
2608        });
2609
2610        // 다음버튼 클릭
2611        element.next.click(function (e) {
2612            setting.page = setting.total == setting.page ? 1 : setting.page + 1;
2613            init();
2614        });
2615
2616        // 화면 초기화
2617        init();
2618    };
2619</script>
2619
2620
2621<div class="right_banner">
2622<a href="/main/html.php?htmid=wssa/coach/coach03.html" ><img  src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/banner/6518f6f088f080cd1c34770e063564aa_45072.jpg"  alt="주니어코치안내" title="주니어코치안내"   /></a>	</div>
2623		<span class="btn_scroll_top"><a href="#TOP"><img src="https://cdn-pro-web-221-144.cdn-nhncommerce.com/thinksmart1_godomall_com/data/skin/front/test_wssc_C_C/img/common/btn/btn_scroll_top.png" alt="상단으로 이동"/></a></span>
2624
2625<script type="text/javascript">
2626    // DOM 로드
2627    $(function () {
2628        $('.scroll_right_cont').todayGoods();
2629    });
2630
2631    // 최근본상품 리스트 페이징 처리 플러그인
2632    $.fn.todayGoods = function () {
2633        // 기본값 세팅
2634        var self = $(this);
2635        var setting = {
2636            page: 1,
2637            total: 0,
2638            rowno: 5
2639        };
2640        var element = {
2641            goodsList: self.find('ul > li'),
2642            closeButton: self.find('ul > li > button'),
2643            prev: self.find('.scr_paging > .bnt_scroll_prev'),
2644            next: self.find('.scr_paging > .bnt_scroll_next'),
2645            paging: self.find('.scr_paging')
2646        };
2647
2648        // 페이지 갯수 설정
2649        setting.total = Math.ceil(element.goodsList.length / setting.rowno);
2650
2651        // 화면 초기화 및 갱신 (페이지 및 갯수 표기)
2652        var init = function () {
2653            if (setting.total == 0) {
2654                setting.page = 0;
2655                element.paging.hide();
2656            }
2657            self.find('ul').hide().eq(setting.page - 1).show();
2658            self.find('.scr_paging .js_current').text(setting.page);
2659            self.find('.scr_paging .js_total').text(setting.total);
2660        }
2661
2662        // 삭제버튼 클릭
2663        element.closeButton.click(function(e){
2664            $.post('../goods/goods_ps.php', {
2665                'mode': 'delete_today_goods',
2666                'goodsNo': $(this).data('goods-no')
2667            }, function (data, status) {
2668                // 값이 없는 경우 성공
2669                if (status == 'success' && data == '') {
2670                    location.reload(true);
2671                }
2672                else {
2673                    console.log('request fail. ajax status (' + status + ')');
2674                }
2675            });
2676        });
2677
2678        // 이전버튼 클릭
2679        element.prev.click(function (e) {
2680            setting.page = 1 == setting.page ? setting.total : setting.page - 1;
2681            init();
2682        });
2683
2684        // 다음버튼 클릭
2685        element.next.click(function (e) {
2686            setting.page = setting.total == setting.page ? 1 : setting.page + 1;
2687            init();
2688        });
2689
2690        // 화면 초기화
2691        init();
2692    };
2693</script>
2693
2694        </div>
2695        <!-- //scroll_right -->
2696        <!-- //우측 스크롤 배너 -->
2697
2698
2699    </div>
2700    <!-- //scroll_wrap -->
2701
2702
2703    <!-- 퀵 검색 폼 -->
2704    <!-- 퀵 검색 폼 -->
2705
2706</div>
2707<!-- //wrap -->
2708
2709<!-- 쇼핑 카트 탭 -->
2710
2711<!-- //쇼핑 카트 탭 -->
2712
2713<!-- 절대! 지우지마세요 : Start -->
2714<div id="layerDim" class="dn">&nbsp;</div>
2715<iframe name="ifrmProcess" src='/blank.php' style="display:none" width="100%" height="0" bgcolor="#000"></iframe>
2716<!-- 절대! 지우지마세요 : End -->
2717
2718<!-- 외부 스크립트 -->
2719<script>window.GodomallSDKConfig = {"mallInfo":{"mallDomain":"thinksmart1.godomall.com","mallNm":"\ub300\ud55c\uc2a4\ud3ec\uce20\uc2a4\ud0dc\ud0b9\ud611\ud68c","mallNmEng":"WSSAKOREA","mallUsageStatus":{"kr":"y","us":"n","cn":"n","jp":"n"},"mallSno":1},"location":{"path":"\/index.php","pathSegments":["index"]},"extraParams":null,"isLoggedIn":false,"memberOnlyEndpoints":["^\/member\/","^\/orders\/"]};</script>
2719
2720
2721</body>
2722</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.