/* =========================================================
   KOSPOLE 통합 웹사이트 디자인 시스템
   - 기관(INST): 네이비 / 골드 포인트 - 신뢰감
   - 사업(BIZ) : 레드-오렌지 그라디언트 - 역동성
   ========================================================= */
:root{
  --font: 'Pretendard Variable','Malgun Gothic','Apple SD Gothic Neo','Noto Sans KR',sans-serif;

  --navy-900:#0B1E42;
  --navy-800:#122A56;
  --navy-700:#1B3A73;
  --navy-600:#274B8E;
  --gold:#C9A227;
  --gold-light:#E9CE6F;
  --lnb-orange:#F6921E; /* 로컬내비게이션(LNB) 탭 hover/active 전용 - KOREATECH 벤치마킹, 2026-08-02 */
  /* 2026-09-02 웹접근성 점검(KWCAG 2.2 검사항목 8, 명도대비 4.5:1) 반영 - --lnb-orange는 흰색과
     짝지으면(텍스트 색으로 쓰거나, 흰 텍스트를 얹는 배경으로 쓰거나) 2.32:1로 크게 미달한다.
     GNB 대메뉴 active/hover, 메가메뉴 hover, LNB 탭 active처럼 흰색과 조합되는 곳에는 대신
     이 값(흰색과 4.91:1)을 쓴다. --lnb-orange 자체는 비텍스트 용도(밑줄 배경 등)에 계속 사용. */
  --lnb-orange-a11y:#C24A08;

  --red-600:#E63946;
  --red-700:#C81E2C;
  /* 2026-09-02 웹접근성 점검(KWCAG 2.2 검사항목 8, 명도대비 4.5:1) 반영 - --red-600(#E63946)은
     흰 배경 대비 4.17:1로 기준 미달이라, 본문 텍스트 색상으로 쓰던 곳만 이 변수(값은 --red-700과
     동일, 5.71:1)로 바꿔 넣는다. 배경/테두리/그라디언트 등 비텍스트 용도는 대비 기준 적용 대상이
     아니므로 --red-600을 그대로 유지한다(styles.css 전수 조사로 텍스트 color: 선언만 선별 치환). */
  --red-600-text:#C81E2C;
  --orange-500:#FF7A45;
  --orange-400:#FF9662;
  --orange-600:#E8590C; /* 2026-08-02 - 사업(BIZ) 사이트의 빨간 계열 브랜드 컬러를 주황으로 전환하며 추가 */
  /* 2026-09-02 웹접근성 점검(검사항목 8) - --orange-600은 흰 배경 대비 3.58:1로 미달이라,
     본문 텍스트 색상으로 쓰던 곳만 이 값(--orange-700과 동일, 4.91:1)으로 바꿔 넣는다. */
  --orange-600-text:#C24A08;
  --orange-700:#C24A08; /* 위와 짝을 이루는 더 진한 주황(호버/그라데이션 어두운 쪽 끝) */

  --ink-900:#14171F;
  --ink-700:#3A3F4B;
  --ink-500:#6B7280;
  --line:#E6E8ED;
  --bg-soft:#F5F7FB;
  --white:#FFFFFF;

  --radius-lg:20px;
  --radius-md:14px;
  --radius-sm:8px;
  --shadow-sm:0 2px 10px rgba(15,23,42,.06);
  --shadow-md:0 12px 32px rgba(15,23,42,.12);
  --shadow-lg:0 24px 60px rgba(15,23,42,.18);
  /* 2026-08-10 확대(1200px→1400px) - 사용자가 국립환경과학원(nier.go.kr) 초기화면 스크린샷을
     제시하며 "화면 폭 대비 콘텐츠가 차지하는 비율이 우리보다 넓어 더 개방감 있고 글자도 크게
     쓸 수 있어 보인다"고 비교 요청, 실측(화면폭 대비 콘텐츠폭 비율) 결과 국립환경과학원이 약
     70~72%인 반면 우리는 약 63~65%였음을 확인하고 그 비율에 가깝게 맞춤. 이 변수 하나가
     .wrap(거의 모든 섹션의 공용 컨테이너)에 그대로 쓰이므로 헤더/본문/푸터 등 사이트 전체
     레이아웃이 이 값 하나로 일괄 조정된다(메가메뉴 폭은 이 값에 맞춰 아래 .mega에서 별도로
     같이 넓혔고, GNB가 모바일 메뉴로 전환되는 1200px 기준점은 콘텐츠 폭과 무관한 별개 기준이라
     그대로 유지함 - 아래 @media(max-width:1200px) 옆 설명 참고). */
  --container:1400px;
}

*{box-sizing:border-box;}
/* scrollbar-gutter:stable - 세로 스크롤바가 필요할 때만 나타나는 기본 동작 대신, 필요 여부와
   무관하게 그 폭만큼 공간을 항상 미리 확보해둔다(2026-07-31 추가). 메가메뉴 펼침, 아코디언/탭
   전환처럼 화면 높이가 순간적으로 바뀌는 상호작용이 있을 때 스크롤바가 나타났다 사라지며
   본문 폭이 함께 줄었다 늘었다 해 화면이 좌우로 흔들리는 문제를 사이트 전체에서 예방한다.
   지원하지 않는 구형 브라우저에서는 이 선언만 무시되고 이전과 동일하게 동작한다(안전한 점진적 개선). */
html{scroll-behavior:smooth;scrollbar-gutter:stable;}
body{
  margin:0;
  font-family:var(--font);
  color:var(--ink-900);
  background:var(--white);
  -webkit-font-smoothing:antialiased;
  line-height:1.55;
  /* 2026-08-10 추가 - 갤럭시 폴드6를 접었을 때(~344px)처럼 아주 좁은 화면에서 "공공기관"류 단어가
     "공공" / "기관"으로 단어 중간에 끊겨 줄바꿈되는 문제(사용자 스크린샷 확인) 신고. 개별 제목
     클래스마다 word-break:keep-all을 따로 붙이는 대신(이미 .mega-left-title 등 일부에만 있었음)
     body 전체 기본값으로 올려 사이트 전체 한글 텍스트가 항상 단어 단위로만 줄바꿈되도록 통일했다
     (한글 웹 타이포그래피의 표준 권장 설정 - 영문/숫자 줄바꿈 동작에는 영향 없음). */
  word-break:keep-all;
}
a{color:inherit;text-decoration:none;}
ul{list-style:none;margin:0;padding:0;}
img{max-width:100%;display:block;}
button{font-family:inherit;cursor:pointer;}

.wrap{max-width:var(--container);margin:0 auto;padding:0 24px;}
.section{padding:72px 0;}
.section-tight{padding:48px 0;}
.eyebrow{
  display:inline-flex;align-items:center;gap:8px;
  font-size:15px;font-weight:700;letter-spacing:.06em;
  padding:6px 14px;border-radius:999px;margin-bottom:14px;
}
/* 2026-09-02 웹접근성 점검(검사항목 8) - var(--gold)(#C9A227)를 이 배지의 옅은 배경과 같이 쓰면
   2.2:1로 미달이라, 여기서만 더 어두운 톤(5.32:1)을 직접 지정한다(--gold 자체 값은 유지). */
.eyebrow.inst{background:rgba(201,162,39,.12);color:#7A6218;}
/* 2026-08-19 - BIZ 홈페이지 개편(KISTA 벤치마킹)으로 본문(SCHEDULE/NEWS/SNS) 색상 톤을
   기존 주황 계열에서 기관(INST) 사이트와 같은 남색/블루 계열로 전환. 히어로/GNB/풋터는
   사용자 요청대로 손대지 않았으므로 로고·히어로·크로스바 등의 --orange-* 값은 그대로 둔다. */
.eyebrow.biz{background:rgba(27,58,115,.1);color:var(--navy-700);}

.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:32px;flex-wrap:wrap;}
.section-head h2{font-size:34px;margin:0 0 6px;}
.section-head p{margin:0;color:var(--ink-500);font-size:17px;}
.more-link{font-size:14px;font-weight:700;white-space:nowrap;padding-bottom:4px;border-bottom:2px solid currentColor;}

/* ---------- Skip / Utility ---------- */
.skip-link{position:absolute;left:-9999px;top:0;background:#000;color:#fff;padding:10px 16px;z-index:999;}
.skip-link:focus{left:12px;top:12px;}

/* ---------- Top Utility Bar ---------- */
.util-bar{background:var(--navy-900);color:#C9D3E8;font-size:13.5px;}
.util-bar.biz-theme{background:#1B1420;}
.util-bar .wrap{display:flex;justify-content:flex-end;gap:18px;height:38px;align-items:center;}
.util-bar a{opacity:.85;}
.util-bar a:hover{opacity:1;text-decoration:underline;}
.util-bar .divider{width:1px;height:12px;background:rgba(255,255,255,.25);}
/* 2026-08-10 - 갤럭시 폴드6를 접었을 때(~344px)처럼 아주 좁은 화면에서 "KOSPOLE 통합 포털/
   스포츠토토 사업 홈페이지/다국어지원/로그인" 4개 항목이 줄바꿈 없이 우겨넣어져 글자가 한 글자씩
   세로로 쪼개지던 문제(사용자 스크린샷 확인). 사용자 확인에 따라 모바일에서는 사이트 전환용
   텍스트 링크 2개(맨 앞 2개 항목 + 그 사이 구분선, 항상 이 순서로 고정된 공용 마크업이라
   순서 기반 선택자로 안전하게 지정 가능)는 숨기고, 다국어지원·로그인처럼 실제 조작이 필요한
   항목만 한 줄에 깔끔하게 남긴다(사이트 전환은 어차피 메인 화면에 카드 버튼이 따로 있어 유틸리티
   바에서 굳이 안 보여도 됨). */
@media (max-width:480px){
  .util-bar .wrap > :nth-child(-n+4){display:none;}
}

/* ---------- Header / GNB ---------- */
header.site-header{position:relative;z-index:40;background:var(--white);border-bottom:1px solid var(--line);}

/* 메가메뉴가 열려 있을 때 하단 페이지 내용을 어둡게 덮어, 메뉴박스 뒤로 페이지 콘텐츠가
   그대로 비쳐 보여 화면이 산만해지는 것을 막는다(한국마사회 메뉴박스처럼 또렷하게 보이도록).
   header보다 낮은 z-index라 헤더/메가메뉴 자체는 항상 그 위에 선명하게 보인다. */
.gnb-backdrop{
  position:fixed;left:0;right:0;top:122px;bottom:0;
  background:rgba(10,20,40,.45);opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .15s ease;z-index:35;
}
.gnb-backdrop.show{opacity:1;visibility:visible;}
.header-row{display:flex;align-items:center;justify-content:space-between;height:84px;gap:18px;position:relative;}
.logo{display:flex;align-items:center;gap:9px;font-weight:800;font-size:17px;letter-spacing:-.02em;flex-shrink:0;white-space:nowrap;}
.logo .mark{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px;font-weight:900;}
.logo.inst .mark{background:linear-gradient(135deg,var(--navy-700),var(--navy-900));}
.logo.biz .mark{background:linear-gradient(135deg,var(--orange-600),var(--orange-500));}
.logo small{display:block;font-size:11px;font-weight:600;color:var(--ink-500);letter-spacing:0;}
/* 기관 홈페이지 헤더 로고(2026-07-30, 실제 로고 파일로 교체) - 기존 "KO" 마크+텍스트 대신
   이미지 하나로 브랜드명(KSPO&KSL/한국스포츠레저(주))이 모두 표시되므로 높이만 header-row(84px)에
   맞춰 지정하고 나머지는 원본 비율(1890x567) 그대로 둔다. */
.logo-img{height:48px;width:auto;display:block;}
/* 사업(BIZ) 홈페이지 헤더 로고(2026-08-02, 첨부 이미지로 교체) - toto_logo.png는 원본이
   170x30(가로로 매우 넓은 순수 텍스트 워드마크)이라, 기관 로고와 같은 48px 높이를 그대로 쓰면
   가로 폭이 270px 이상으로 과도하게 넓어져 다른 헤더 요소를 밀어낸다. 워드마크 성격에 맞춰
   높이를 40px로 낮춰 가로 폭(약 227px)을 기관 로고와 비슷한 수준으로 맞춘다. */
.logo-img-biz{height:26px;}

/* 2026-08-02 확대 - 한국기술교육대학교 벤치마킹: 대메뉴 글자를 크게 키우고 nav 전체 폭을
   꽉 채우도록 justify-content:space-between으로 항목을 양쪽 끝까지 고르게 분산시켰다
   (이전에는 justify-content:center로 가운데 뭉쳐 있어 좌우 여백이 넓게 남아있었음). */
nav.gnb{flex:1;display:flex;justify-content:center;min-width:0;}
nav.gnb > ul{display:flex;gap:0;flex-wrap:nowrap;width:100%;justify-content:space-between;}
nav.gnb > ul > li{position:static;}
nav.gnb > ul > li > a{
  display:flex;align-items:center;height:84px;padding:0 12px;
  font-weight:800;font-size:20px;color:var(--ink-900);border-bottom:3px solid transparent;
  white-space:nowrap;
}
/* "베트맨" 대메뉴(BIZ, 2026-08-15 신설) - 데스크톱 GNB는 글자 대신 로고를 글자 크기(20px)에
   맞춰 표시, 모바일 전체메뉴(≤1200px)는 로고 대신 글자로 표시(요청사항) - 둘 다 마크업에
   넣어두고 화면폭에 따라 CSS로 하나만 보이게 전환한다. */
.gnb-betman-logo{height:22px;width:auto;}
.gnb-betman-text{display:none;}
/* 대메뉴 마우스오버/활성 - 2026-08-02 요청: 텍스트+글자 바로 아래 바(border-bottom)를 모두
   주황(--lnb-orange)으로. 기존에는 hover 색이 기본 색(--ink-900)과 거의 구분이 안 되는 짙은
   남색(--navy-800)이라 "색이 안 바뀐다"는 문제가 있었음 - 기관/사업 사이트 공통으로 통일. */
nav.gnb > ul > li:hover > a,
nav.gnb > ul > li.active > a{border-bottom-color:var(--lnb-orange);color:var(--lnb-orange-a11y);}

/* "온에어"(구 "뉴스룸") GNB 강조 배지(2026-08-03) - 국민체육진흥공단 참고, 다른 대메뉴와
   구분되도록 알약형 배경+아이콘으로 꾸민다. 클래스 선택자를 추가해 위 기본 규칙보다
   specificity가 높아지므로 !important 없이도 항상 이 스타일이 우선 적용된다. */
nav.gnb > ul > li > a.onair-badge{
  height:auto;gap:6px;background:var(--navy-800);color:#fff;padding:9px 18px;
  border-radius:999px;font-weight:800;font-size:15px;border-bottom:none;
}
nav.gnb > ul > li:hover > a.onair-badge,
nav.gnb > ul > li > a.onair-badge:hover{background:var(--navy-700);color:#fff;border-bottom:none;}
.onair-badge-icon{width:15px;height:15px;flex-shrink:0;}

.header-actions{display:flex;align-items:center;gap:10px;flex-shrink:0;}
.icon-btn{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;color:var(--ink-700);}
.icon-btn:hover{background:var(--bg-soft);}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:12px 22px;border-radius:999px;font-weight:700;font-size:14.5px;border:none;
  transition:transform .15s ease, box-shadow .15s ease;
}
.btn:hover{transform:translateY(-1px);}
.btn-inst{background:var(--navy-800);color:#fff;box-shadow:var(--shadow-sm);}
.btn-inst:hover{box-shadow:var(--shadow-md);}
.btn-biz{background:linear-gradient(135deg,var(--orange-600),var(--orange-500));color:#fff;box-shadow:0 10px 24px rgba(232,89,12,.28);}
.btn-biz:hover{box-shadow:0 14px 30px rgba(232,89,12,.36);}
.btn-outline{background:transparent;border:1.5px solid currentColor;}
.btn-ghost{background:var(--bg-soft);color:var(--ink-900);}

/* ---------- Mega Menu ----------
   가로 크기는 항목(대메뉴)에 관계없이 항상 동일하게 고정하고, 위치도 항상 화면(페이지 본문)
   좌측 여백과 동일한 지점(로고 "KO" 시작 위치)에 맞춰 고정한다. 메뉴 항목이 많아지는 경우에는
   flex-wrap으로 줄바꿈되어 세로로만 커지도록 한다.
   (li나 nav.gnb가 아닌 .header-row를 기준(position:relative)으로 절대배치하고, header-row 자체의
   좌측 padding(24px)만큼 들여서 로고/페이지 본문과 좌측 정렬이 맞도록 한다 — 이전에는 nav.gnb
   기준으로 가운데 정렬되어 있어 로고 옆 애매한 위치에서 시작했었음)
   좌측에는 현재 선택된 대메뉴 이름(mega-left), 우측에는 하위메뉴 컬럼(mega-cols)을 두어
   어떤 대메뉴를 선택해도 항상 같은 2단 레이아웃으로 보이도록 한다(한국마사회 메뉴박스 참고). */
/* 2026-08-13 - 열림/닫힘을 display:none↔flex(즉시 전환, 애니메이션 불가)에서 CSS
   grid-template-rows(0fr↔1fr) 트릭으로 교체(사용자가 KEPCO 사이트를 참고 제시 - 대메뉴 클릭 시
   하위 메뉴가 슬라이드처럼 부드럽게 열리는 효과가 마음에 든다며 KOSPOLE 전체 메뉴에도 적용 요청).
   display는 height를 애니메이션할 수 없고, height:auto도 transition 대상이 될 수 없어(브라우저가
   시작/끝 실제 px 값을 모르면 보간 불가) 기존엔 두 방법 다 못 썼는데, 1개짜리 grid row를
   0fr(=0)에서 1fr(=콘텐츠가 필요로 하는 만큼)로 바꾸는 트릭은 JS로 높이를 미리 측정하지 않고도
   내용 길이가 제각각인 모든 대메뉴에 동일하게 안전히 적용된다. `visibility`는 트랜지션 지연(delay)을
   열림/닫힘에서 다르게 줘서(닫힐 때만 delay) 접히는 애니메이션 동안은 계속 보이다가 완전히
   접힌 뒤에야 화면에서 사라지고 클릭도 막히게(pointer-events도 함께) 한다. */
.mega{
  position:absolute;top:100%;left:24px;
  /* 2026-08-10 - 본문 컨테이너 확대(1200px→1400px, 위 --container 주석 참고)에 맞춰 메가메뉴
     폭도 같은 비율로 함께 넓힘(1120px→1320px, 컨테이너 폭 대비 약 80px 인셋을 유지). */
  width:min(1320px, calc(94vw - 24px));background:#fff;border:1px solid var(--line);border-top:3px solid var(--navy-700);
  border-radius:0 0 var(--radius-md) var(--radius-md);box-shadow:var(--shadow-lg);
  display:grid;grid-template-rows:0fr;overflow:hidden;
  visibility:hidden;pointer-events:none;
  transition:grid-template-rows .28s ease, visibility 0s linear .28s;
}
/* mega-inner: grid의 유일한 자식(행) - min-height:0이 없으면 flex/grid 자식의 기본값(min-height:auto,
   콘텐츠 크기만큼)에 막혀 0fr일 때도 완전히 접히지 않는다(흔한 함정). 실제 좌/우 2단 레이아웃은
   여기서 그대로 유지(mega-left+mega-cols를 가로로 배치). */
.mega-inner{display:flex;min-height:0;overflow:hidden;}
.biz-nav .mega{border-top-color:var(--orange-600);}
nav.gnb > ul > li:hover .mega,
nav.gnb > ul > li:focus-within .mega,
.mega.is-open{
  grid-template-rows:1fr;
  visibility:visible;pointer-events:auto;
  transition:grid-template-rows .28s ease, visibility 0s linear 0s;
}
.mega-left{
  position:relative;overflow:hidden;
  width:200px;flex:0 0 200px;background:linear-gradient(160deg, var(--bg-soft) 0%, #e9edf4 100%);
  padding:32px 26px;display:flex;flex-direction:column;justify-content:center;
}
/* 대메뉴별로 부합하는 아이콘을 우하단에 크게 깔아주는 워터마크(요청: "밋밋해서 특색이 없어보임" 개선).
   실사 이미지 생성/다운로드가 불가한 환경이라 옅은 라인아이콘 워터마크로 대체 구현함. */
.mega-left-icon{
  position:absolute;right:-24px;bottom:-24px;width:150px;height:150px;
  color:var(--navy-700);opacity:.12;z-index:0;pointer-events:none;
}
.mega-left-title{position:relative;z-index:1;font-size:23px;font-weight:800;color:var(--navy-800);line-height:1.35;word-break:keep-all;}
.biz-nav .mega-left{background:linear-gradient(160deg, rgba(230,57,70,.06) 0%, rgba(230,57,70,.14) 100%);}
.biz-nav .mega-left-icon{color:var(--navy-700);opacity:.14;}
.biz-nav .mega-left-title{color:var(--navy-800);}
.mega-cols{
  flex:1;min-width:0;display:flex;flex-wrap:wrap;align-content:flex-start;
  gap:18px 36px; /* 세로 간격 28px→18px로 축소(2026-07-31, 하위메뉴가 많은 대메뉴가 화면 안에
                    더 잘 들어가도록) */
  padding:22px 30px; /* 상하 패딩도 28px→22px로 축소 */
  /* 대메뉴 시작 지점(top:100%, 뷰포트 기준 122px=util-bar 38px+header-row 84px) 아래로 뷰포트를
     벗어날 만큼 하위메뉴가 많으면(예: KOSPOLE 기관소개) 문서 전체 높이가 그만큼 늘어나 세로
     스크롤바가 나타났다 사라지며 화면이 좌우로 흔들리는 문제가 있었다(2026-07-31 버그수정).
     드롭다운 자체 높이를 뷰포트에 맞춰 제한하고 넘치는 내용은 이 안에서만 스크롤되게 해 문서
     높이 자체가 변하지 않도록 근본적으로 막는다 - 하위메뉴가 적은 대메뉴는 원래 높이가 이
     한도보다 작아 지금처럼 스크롤 없이 그대로 보인다. */
  max-height:calc(100vh - 150px);
  overflow-y:auto;
}
.mega-col{width:170px;flex:0 0 auto;}
.mega-col > .mid{display:block;font-weight:800;font-size:16px;color:var(--navy-800);margin-bottom:9px;padding-bottom:6px;border-bottom:2px solid var(--bg-soft);transition:color .18s ease, border-color .18s ease;}
/* 2026-08-02 수정 - 중메뉴 기본(비호버) 색상을 기관과 동일한 남색으로 통일(브랜드색인 빨강 제거).
   호버 시에만 공용 규칙(.mega-col > .mid:hover)에 의해 주황으로 바뀜(기관/사업 공통). */
.biz-nav .mega-col > .mid{color:var(--navy-800);}
/* 중메뉴(.mid) 마우스오버 - 2026-08-02 요청: 글자+바로 아래 바(border-bottom) 모두 주황으로.
   기존에는 hover 규칙 자체가 없어 색이 전혀 바뀌지 않았음(진짜 버그). 비호버 시 색상(남색/BIZ는
   레드)은 그대로 유지. 2026-08-13 - 항상 떠 있던 회색 밑줄(border-bottom)이 색만 바뀌는 방식이라
   그대로 유지하되(이미 항상 보이는 구분선이라 "슬라이드로 나타나는" 처리 대상이 아님), 순간적으로
   뚝 바뀌던 색 전환에 transition을 추가해 KEPCO처럼 부드럽게 바뀌도록만 다듬었다. */
.mega-col > .mid:hover{color:var(--lnb-orange-a11y);border-bottom-color:var(--lnb-orange);}
.mega-col ul li{margin-bottom:5px;}
/* 소메뉴 밑줄 - 2026-08-13, KEPCO 벤치마킹(사용자 제공 캡처: 마우스오버 시 글자 아래 밑줄이
   왼쪽에서부터 슬라이드로 자라나며 나타남). 기존엔 여기에 밑줄 자체가 아예 없다가 호버 시
   브라우저 기본 text-decoration이 즉시(애니메이션 없이) 전체 폭으로 나타났는데, text-decoration은
   폭을 0→100%로 트랜지션할 수 없어(브라우저가 지원하지 않음) 대신 ::after 가상요소를
   transform:scaleX()로 애니메이션하는 표준 기법으로 교체했다 - transform-origin:left로 항상
   왼쪽부터 자라나게 고정. */
.mega-col ul li > a{position:relative;display:inline-block;font-size:15px;color:var(--ink-700);padding-bottom:2px;}
.mega-col ul li > a::after{
  content:'';position:absolute;left:0;right:0;bottom:0;height:1.5px;
  background:var(--lnb-orange);transform:scaleX(0);transform-origin:left;
  transition:transform .22s ease;
}
.mega-col ul li > a:hover{color:var(--lnb-orange);}
.mega-col ul li > a:hover::after{transform:scaleX(1);}
.mega-col .sub2{padding-left:12px;margin-top:3px;}
.mega-col .sub2 li{margin-bottom:3px;}
.mega-col .sub2 li > a{font-size:12px;color:var(--ink-500);}
.mega-col .sub2 li > a::before{content:'– ';}

.mobile-toggle{display:none;width:44px;height:44px;border-radius:10px;border:1px solid var(--line);background:#fff;flex-direction:column;justify-content:center;align-items:center;gap:4px;}
.mobile-toggle span{width:20px;height:2px;background:var(--ink-900);}

/* ---------- Secondary GNB bar (opposite site quick link) ---------- */
.cross-bar{background:var(--bg-soft);border-top:1px solid var(--line);}
.cross-bar .wrap{display:flex;align-items:center;gap:18px;height:50px;overflow-x:auto;}
.cross-bar .cross-label{flex-shrink:0;display:flex;align-items:center;gap:8px;font-weight:800;font-size:13.5px;padding:6px 12px;border-radius:999px;color:#fff;white-space:nowrap;}
.cross-bar.to-biz .cross-label{background:linear-gradient(135deg,var(--orange-600),var(--orange-500));}
.cross-bar.to-inst .cross-label{background:linear-gradient(135deg,var(--navy-700),var(--navy-900));}
.cross-bar .cross-links{display:flex;gap:6px;flex-wrap:nowrap;}
.cross-bar .cross-links a{font-size:13px;font-weight:600;color:var(--ink-700);padding:6px 12px;border-radius:8px;white-space:nowrap;}
.cross-bar .cross-links a:hover{background:#fff;box-shadow:var(--shadow-sm);}
.cross-bar .cross-links a.emph{color:var(--orange-600-text);font-weight:800;}
.cross-bar.to-inst .cross-links a.emph{color:var(--navy-700);}

/* ---------- Hero ---------- */
.hero{position:relative;overflow:hidden;color:#fff;isolation:isolate;}
.hero .blob{position:absolute;border-radius:50%;filter:blur(60px);opacity:.55;z-index:-1;}
.hero-inst{background:linear-gradient(120deg,var(--navy-900) 0%,var(--navy-700) 55%,#0B3B6B 100%);}
.hero-inst .blob1{width:520px;height:520px;background:var(--gold);top:-160px;right:-120px;opacity:.25;}
.hero-inst .blob2{width:420px;height:420px;background:#3E6FD9;bottom:-180px;left:-100px;opacity:.35;}
.hero-biz{background:linear-gradient(120deg,#3B1B08 0%,var(--orange-700) 45%,var(--orange-500) 100%);}
.hero-biz .blob1{width:560px;height:560px;background:#FFD166;top:-180px;right:-140px;opacity:.35;}
.hero-biz .blob2{width:440px;height:440px;background:#7A1120;bottom:-200px;left:-120px;opacity:.5;}

.hero .speed-lines{position:absolute;inset:0;z-index:-1;opacity:.18;
  background:repeating-linear-gradient(100deg, rgba(255,255,255,.6) 0 2px, transparent 2px 90px);}

.hero-inner{padding:96px 0 84px;position:relative;}
.hero-tag{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);padding:7px 16px;border-radius:999px;font-size:13px;font-weight:700;margin-bottom:22px;backdrop-filter:blur(4px);}
.hero h1{font-size:46px;line-height:1.28;margin:0 0 20px;font-weight:800;letter-spacing:-.02em;max-width:680px;text-shadow:0 2px 14px rgba(0,0,0,.35);}
.hero h1 em{font-style:normal;color:var(--gold-light);}
.hero-biz h1 em{color:#FFE08A;}
.hero p.lead{font-size:17px;color:rgba(255,255,255,.86);max-width:560px;margin:0 0 34px;text-shadow:0 1px 10px rgba(0,0,0,.3);}
.hero .cta-row{display:flex;gap:12px;flex-wrap:wrap;}

.hero-stats{display:flex;gap:44px;margin-top:56px;flex-wrap:wrap;}
.hero-stats .stat b{display:block;font-size:30px;font-weight:800;}
.hero-stats .stat span{font-size:12.5px;color:rgba(255,255,255,.7);}

/* decorative dynamic figure block (스포츠 이미지 대체 그래픽) */
.action-graphic{position:absolute;right:6%;top:50%;transform:translateY(-50%);width:360px;height:360px;z-index:-1;opacity:.9;}
@media (max-width:1100px){.action-graphic{display:none;}}

/* ---------- Portal Landing ---------- */
.portal-hero{min-height:100vh;display:flex;flex-direction:column;background:var(--navy-900);color:#fff;position:relative;overflow:hidden;}
.portal-hero::before{content:'';position:absolute;inset:0;
  background:
    radial-gradient(700px 500px at 12% 15%, rgba(201,162,39,.30), transparent 60%),
    radial-gradient(800px 600px at 88% 85%, rgba(230,57,70,.35), transparent 60%),
    linear-gradient(160deg,#0B1E42 0%,#101A33 55%,#170E16 100%);
  z-index:0;}
.portal-hero::after{content:'';position:absolute;inset:0;z-index:0;opacity:.15;
  background:repeating-linear-gradient(115deg, rgba(255,255,255,.5) 0 1.5px, transparent 1.5px 70px);}
/* 2026-08-06 - z-index를 .portal-main(아래 히어로 본문, 역시 z-index:2)보다 명확히 높여야 함.
   기존엔 둘 다 2로 같아서 DOM 순서상 나중에 오는 .portal-main이 쌓임 우선순위를 이겼는데,
   그러면 .lang-switch-menu(다국어지원 드롭다운)의 z-index:120은 .portal-top 안에서만 유효해
   형제 스태킹 컨텍스트인 .portal-main을 못 넘어서고, 결과적으로 드롭다운은 화면엔 보이지만
   (.portal-main이 그 자리엔 투명 배경이라 밑에 있는 드롭다운이 비쳐 보임) 실제 클릭은
   .portal-main이 가로채 언어를 선택해도 반응이 없던 문제가 있었다(KOSPOLE 포털 첫 화면
   index.html에서만 재현 - 다른 페이지는 이런 풀스크린 히어로 구조가 아니라 문제 없었음). */
.portal-top{position:relative;z-index:10;}
.portal-top .wrap{display:flex;align-items:center;justify-content:space-between;min-height:88px;gap:12px;flex-wrap:wrap;padding:10px 0;}
.portal-logo{font-weight:800;font-size:19px;display:flex;align-items:center;gap:10px;white-space:nowrap;}
/* 2026-08-07 수정: 자리표시자였던 오렌지 "K" 박스를 실제 기관 로고(logo-kospole.png)로 교체.
   로고 자체가 남색 글자라 어두운 포털 히어로 배경(--navy-900) 위에서는 거의 안 보이므로,
   흰색 알약(pill) 배지로 감싸 대비를 확보한다(사이트 헤더는 흰 배경이라 이 처리가 필요 없지만,
   포털 상단바는 어두운 배경이라 다름). */
.portal-logo-badge{background:#fff;border-radius:9px;padding:5px 9px;display:flex;align-items:center;line-height:0;}
.portal-logo-img{height:22px;width:auto;display:block;}
.portal-top-links{display:flex;gap:22px;font-size:13px;color:rgba(255,255,255,.75);flex-wrap:wrap;}
/* 2026-08-10 - 위 .util-bar와 동일한 이유(좁은 화면 세로 붕괴)로, 모바일에서는 내비게이션 성격의
   "사이트맵"은 숨기고 다국어지원·고객센터(실제 연락 가능한 정보)만 남긴다. */
@media (max-width:480px){
  .portal-top-links > a:first-child{display:none;}
  .portal-logo{font-size:16px;}
}

.portal-main{position:relative;z-index:2;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 24px 20px;}
.portal-main .kicker{font-size:13px;letter-spacing:.18em;color:var(--gold-light);font-weight:700;margin-bottom:18px;text-transform:uppercase;}
.portal-main h1{font-size:44px;font-weight:800;line-height:1.35;margin:0 0 14px;max-width:760px;}
.portal-main p{color:rgba(255,255,255,.72);max-width:560px;margin:0 auto 46px;font-size:15.5px;}

.portal-cards{display:grid;grid-template-columns:1fr 1fr;gap:22px;max-width:980px;width:100%;margin:0 auto;}
.portal-card{
  position:relative;overflow:hidden;border-radius:24px;padding:40px 32px;min-height:300px;
  display:flex;flex-direction:column;justify-content:flex-end;text-align:left;
  border:1px solid rgba(255,255,255,.14);transition:transform .25s ease, box-shadow .25s ease;
}
.portal-card:hover{transform:translateY(-6px);}
.portal-card.card-inst{background:linear-gradient(160deg, rgba(27,58,115,.9), rgba(11,30,66,.96));box-shadow:0 20px 50px rgba(11,30,66,.5);}
.portal-card.card-biz{background:linear-gradient(160deg, rgba(255,122,69,.92), rgba(184,74,10,.96));box-shadow:0 20px 50px rgba(184,74,10,.5);}
.portal-card .card-glow{position:absolute;width:260px;height:260px;border-radius:50%;filter:blur(50px);opacity:.55;}
.portal-card.card-inst .card-glow{background:var(--gold);top:-80px;right:-60px;}
.portal-card.card-biz .card-glow{background:#FFB347;top:-80px;right:-60px;}
.portal-card .card-tag{display:inline-block;font-size:12px;font-weight:800;letter-spacing:.05em;padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.16);margin-bottom:16px;width:fit-content;}
.portal-card h2{font-size:26px;font-weight:800;margin:0 0 10px;}
.portal-card p{font-size:14px;color:rgba(255,255,255,.78);margin:0 0 22px;max-width:340px;}
.portal-card .card-enter{display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:14.5px;}
.portal-card .card-enter .arrow{transition:transform .2s ease;}
.portal-card:hover .card-enter .arrow{transform:translateX(6px);}
.portal-card .chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px;position:relative;z-index:1;}
/* 2026-08-10 - 칩이 실제 <a> 링크가 되면서(이전엔 아무 동작 없는 <span>) 클릭 가능함을 알 수 있도록
   호버 시 배경을 밝게. position:relative + z-index:1은 카드 전체 클릭 영역(bindPortalCardLinks())
   보다 칩이 항상 위에 있어야 칩을 눌렀을 때 카드 전체 이동이 아니라 칩 자신의 링크로 정확히
   이동하기 때문(둘 다 같은 문서 흐름상 자연스럽게 칩이 위지만 명시적으로 고정). */
.portal-card .chips a{font-size:11.5px;background:rgba(255,255,255,.12);padding:4px 10px;border-radius:999px;color:rgba(255,255,255,.85);transition:background .15s ease;}
.portal-card .chips a:hover{background:rgba(255,255,255,.26);}

.portal-foot{position:relative;z-index:2;padding:26px 0 34px;}
.portal-foot .wrap{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:14px;border-top:1px solid rgba(255,255,255,.14);padding-top:22px;}
.portal-ticker{display:flex;gap:22px;font-size:13px;color:rgba(255,255,255,.75);flex-wrap:wrap;}
.portal-ticker b{color:var(--gold-light);font-weight:700;margin-right:6px;}
.portal-copy{font-size:12px;color:rgba(255,255,255,.45);}

/* ---------- Cards / Grid ---------- */
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;}
.bento{display:grid;grid-template-columns:1.3fr 1fr 1fr;grid-template-rows:auto auto;gap:18px;}
.bento .b-large{grid-row:span 2;}

.card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);padding:26px;transition:box-shadow .2s ease, transform .2s ease;}
.card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);}
.card .card-icon{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;margin-bottom:16px;color:#fff;}
.card h3{font-size:20px;margin:0 0 8px;}
.card p{font-size:15.5px;color:var(--ink-500);margin:0 0 16px;}
.card .tag-links{display:flex;gap:14px;flex-wrap:wrap;}
.card .tag-links a{font-size:14px;font-weight:700;color:var(--navy-700);border-bottom:1px solid currentColor;}
.biz-page .card .tag-links a{color:var(--orange-600-text);}

/* 기관(INST) 메인의 3장짜리 grid-3 카드 섹션(institution-main.html #business "주요 사업",
   #kospole-intro "한국스포츠레저(주)를 소개합니다")과 목록형 섹션(#recruit "진행중인 채용공고",
   .post-list) - 가장 좁은 모바일(≤480px, 프로젝트 공통 브레이크포인트, .news-swipe-arrow 등과
   동일 기준)에서 항목이 2열로 줄지어 두 줄로 보이거나 세로로 계속 나열되던 것을, 1장씩 화면
   폭 꽉 차게 보여주고 좌우 스와이프 + 상단 우측 화살표 버튼으로 넘기도록 개편(2026-08-29,
   여러 섹션에 동일 요청이 있어 공용 클래스로 일반화). `.card-swipe-grid` 바로 아래 자식이면
   `.grid-3`의 `.card`든 `.post-list`의 `<li>`든 종류에 상관없이 전부 1장씩 넘어가도록
   `> *`로 범용 선택자를 썼다 - 앞으로 같은 종류의 3열 카드/목록에 이 스와이프가 또 필요해지면
   마크업에 이 클래스 3종만 추가하면 된다. main.js의 bindCardSwipeCarousel() 참고. */
.card-swipe-wrap{position:relative;}
.card-swipe-nav{display:none;}
@media(max-width:480px){
  /* ⚠️ 2026-08-29(후속) - 처음엔 그냥 `.card-swipe-grid{display:flex;...}`로 썼는데, "공식 채널"
     섹션(#sns)에서 실제로는 계속 세로로 쭉 나열되는(스와이프 안 됨) 회귀가 있었다. 원인은
     specificity가 같은 두 규칙(`.card-swipe-grid{display:flex}` vs 기존
     `.onair-feature-grid{display:grid}`)이 부딪혔을 때, `.onair-feature-grid`가 미디어쿼리
     없이 파일 뒤쪽(709번째 줄 부근)에 있어 캐스케이드상 이 규칙보다 나중에 적용되어 이겨버린
     것 - 미디어쿼리 안에 있다고 항상 우선하는 게 아니라, specificity가 같으면 그냥 "파일에서
     더 늦게 나오는 규칙"이 이긴다는 점을 여기서 놓쳤었다. 앞으로 어떤 페이지의 어떤 그리드
     클래스와 조합해도(파일에서의 선언 순서와 무관하게) 항상 이기도록, 처음부터 `.card-swipe-wrap`
     조상까지 selector에 포함해 specificity를 한 단계 더 올려둔다. */
  .card-swipe-wrap .card-swipe-grid{
    display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;
    -webkit-overflow-scrolling:touch;gap:16px;scrollbar-width:none;-ms-overflow-style:none;
  }
  .card-swipe-wrap .card-swipe-grid::-webkit-scrollbar{display:none;}
  .card-swipe-wrap .card-swipe-grid > *{flex:0 0 100%;width:100%;scroll-snap-align:start;}
  /* .post-list(목록형)는 원래 카드 테두리가 없는 li라, 1장씩 슬라이드로 보일 때는 카드처럼
     테두리를 둘러 다른 두 카드 그리드 섹션과 시각적으로 어색하지 않게 맞춘다.
     ⚠️ 선택자에 .card-swipe-wrap까지 포함해 specificity를 일부러 올림 - 그냥
     `.card-swipe-grid.post-list > li`만 쓰면 `.post-list li:last-child{border-bottom:none}`
     (styles.css 다른 곳의 기존 규칙)과 specificity가 같아져서 파일상 더 뒤에 있는 그 규칙이
     이겨버려, 항목이 1개뿐이거나 마지막 항목일 때 아래쪽 테두리만 사라져 카드가 3면만 있는
     것처럼 깨져 보인다.
     2026-08-29(후속) - 처음엔 원래 .post-list li의 가로 1행 배치(배지-제목-날짜가 한 줄에
     나란히, `.post-list li{display:flex;align-items:center}`)를 그대로 뒀는데, 실제 화면에서
     확인해보니 카드 폭 안에 세 가지가 다 들어가지 못해 제목이 "2026년 한..."처럼 심하게
     잘리고 날짜는 카드 상단 우측의 스와이프 화살표 버튼과 겹쳐 보이는 문제가 있었다(사용자
     스크린샷으로 확인). `flex-direction:column`으로 세로 배치로 바꿔 배지→제목→날짜 순서로
     쌓이게 하면(DOM 순서 그대로라 마크업 변경 불필요) 자연스럽게 "날짜가 카드 하단에 오게"
     되고, 화살표와 겹칠 요소도 사라진다. 박스 자체도 패딩을 늘려 더 커 보이게 했다. */
  .card-swipe-wrap .card-swipe-grid.post-list > li{
    display:flex;flex-direction:column;align-items:flex-start;gap:8px;
    border:1px solid var(--line);border-radius:var(--radius-md);padding:22px 20px 20px;
  }
  /* 제목이 잘리지 않고 다 보이도록(요청사항 "내용이 많이 보이게") - 기존 .post-list a는
     한 줄 말줄임(nowrap+ellipsis)이 기본인데, 여기서는 그걸 걷어내고 폭 전체로 줄바꿈되게
     한다. specificity는 `.card-swipe-wrap .card-swipe-grid.post-list > li a`(클래스 3+타입 2)로
     기존 `.post-list a`(클래스 1+타입 1)보다 훨씬 높아 항상 이긴다. */
  .card-swipe-wrap .card-swipe-grid.post-list > li a{
    white-space:normal;overflow:visible;text-overflow:clip;align-self:stretch;
  }
  /* 2026-08-29(후속2, 후속3) - "NOTICE" 섹션(.notice-list)의 첫 번째 글에는 원래 강조용 스타일
     (연한 배경색 + 굵은 남색 왼쪽 테두리 + 가로 배치 + 19px 굵은 제목, `.post-list.notice-list
     li:first-child`/`...li:first-child a`)이 따로 있었는데, 스와이프 모드에서는 모든 글이
     동등하게 한 장씩 넘어가는 카드라 첫 글만 다른 모양이면 오히려 어색하다.
     ⚠️ 처음엔 background/margin-bottom만 재정의했는데, 실제 화면에서 확인해보니(사용자
     스크린샷) 배지·화살표가 나란히 있고 글자가 가운데 정렬되는 등 정작 레이아웃은 옛 스타일이
     그대로 남아있었다 - 원인은 `.post-list.notice-list li:first-child`(클래스 2+가상클래스 1)와
     위쪽 공용 규칙 `.card-swipe-wrap .card-swipe-grid.post-list > li`(클래스 3+타입 1)의
     specificity가 **똑같이 (0,3,1)이라 여기서는 안 이겼던 것**(recruit-list 쪽 경쟁 상대였던
     `.post-list li:last-child`는 클래스 1개뿐이라 안전했지만, notice 쪽은 첫 글 전용 규칙이
     클래스가 하나 더 많아 우연히 동점이 됐다) - `a` 태그 쪽(`...li:first-child a`, 19px 굵게)도
     마찬가지로 동점이었다. 그래서 이번엔 아예 필요한 값을 전부 이 안에 다시 명시해 어떤
     상황에서도(파일 순서와 무관하게, specificity로 확실히) 다른 카드들과 완전히 같은 모양이
     되도록 했다. */
  .card-swipe-wrap .card-swipe-grid.notice-list > li:first-child{
    display:flex;flex-direction:column;align-items:flex-start;gap:8px;
    background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);
    padding:22px 20px 20px;margin-bottom:0;
  }
  .card-swipe-wrap .card-swipe-grid.notice-list > li:first-child a{
    font-size:16.5px;font-weight:400;white-space:normal;
  }
  .card-swipe-nav{
    display:flex;gap:6px;position:absolute;top:14px;right:14px;z-index:2;
  }
  .card-swipe-arrow{
    display:flex;align-items:center;justify-content:center;width:32px;height:32px;
    border:none;padding:0;border-radius:50%;background:rgba(255,255,255,.94);
    box-shadow:var(--shadow-sm);color:var(--navy-700);font-size:18px;font-weight:800;
    line-height:1;cursor:pointer;transition:opacity .2s ease,filter .15s ease;
  }
  .card-swipe-arrow:hover{filter:brightness(0.96);}
  .card-swipe-wrap.at-start .card-swipe-prev{opacity:.35;pointer-events:none;}
  .card-swipe-wrap.at-end .card-swipe-next{opacity:.35;pointer-events:none;}
}

.icon-blue{background:linear-gradient(135deg,var(--navy-700),var(--navy-900));}
.icon-gold{background:linear-gradient(135deg,var(--gold),#A9821D);}
.icon-red{background:linear-gradient(135deg,var(--red-600),var(--red-700));}
.icon-orange{background:linear-gradient(135deg,var(--orange-500),var(--red-600));}
/* 2026-08-02 - icon-red/icon-orange는 기관/사업 공용 클래스라(예: 기관의 "신고센터" 카드는
   경고 의미로 빨강을 그대로 써야 함) 기본 규칙은 손대지 않고, 사업(BIZ) 페이지에서만 두 아이콘
   모두 주황 계열로 보이도록 .biz-page 스코프 오버라이드를 추가한다(서로 다른 진하기로 구분). */
.biz-page .icon-red{background:linear-gradient(135deg,var(--orange-500),var(--orange-600));}
.biz-page .icon-orange{background:linear-gradient(135deg,var(--orange-400),var(--orange-500));}

/* ---------- Notice board tabs ---------- */
.board-panel{background:var(--bg-soft);border-radius:var(--radius-lg);padding:32px;}
.tabs{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap;}
.tabs button{padding:9px 18px;border-radius:999px;border:1px solid var(--line);background:#fff;font-weight:700;font-size:13.5px;color:var(--ink-500);}
/* 2026-08-19 - BIZ 홈페이지 개편으로 공지사항 탭/배지가 더 이상 사이드바형이 아니라 NEWS
   카드 그리드 섹션(business-main.html)에서 처음으로 이 일반(가로형) .tabs를 실제로 사용하게
   됐다. 기존에 있던 .biz-page 전용 주황색 오버라이드는 그 사이드바형 디자인 전용이었고 이제
   쓰는 곳이 없어져 삭제 - 기본값(남색)을 그대로 쓴다. */
.tabs button.active{background:var(--navy-800);color:#fff;border-color:var(--navy-800);}
.post-list li{display:flex;align-items:center;gap:14px;padding:13px 0;border-bottom:1px dashed var(--line);}
.post-list li:last-child{border-bottom:none;}
.post-list .badge{flex-shrink:0;font-size:12.5px;font-weight:800;padding:3px 9px;border-radius:6px;background:var(--navy-800);color:#fff;}
.post-list .badge.notice{background:var(--gold);color:#3b2c00;}
/* 2026-08-10 버그수정 - min-width:0 누락으로 좁은 화면(갤럭시 폴드6를 접었을 때 등)에서 이 글자가
   말줄임(ellipsis) 처리되지 않고 원래 길이 그대로 카드/부모 요소를 화면 밖으로 밀어내던 문제(사용자
   신고 - "진행중인 채용공고" 박스가 화면 우측 밖으로 사라져 보임). flex 자식은 기본값 min-width:auto
   때문에 overflow:hidden이 있어도 콘텐츠의 최소 폭(말줄임 전 원래 텍스트 폭) 밑으로는 스스로
   줄어들지 않는 게 원인 - min-width:0으로 그 기본값을 꺼줘야 실제로 줄어들면서 말줄임이 동작한다. */
.post-list a{flex:1;min-width:0;font-size:16.5px;color:var(--ink-900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.post-list .date{flex-shrink:0;font-size:14px;color:var(--ink-500);}
.tab-panel{display:none;}
.tab-panel.active{display:block;}

/* ---------- Notice panel (Phase 5, 2026-08-02 - KOREATECH NOTICE 참고 재설계) ----------
   좌측 사이드바(타이틀+설명+세로 탭) + 우측 콘텐츠(목록). 세로 탭은 기존 .tabs/.tab-panel과
   동일한 마크업 계약을 쓰므로 main.js의 bindTabs()/board-api.js는 변경 없이 재사용된다. */
/* 테두리 - 2026-08-13, 한국기술교육대학교(koreatech.ac.kr) NOTICE 위젯 벤치마킹(사용자 제시 참고 이미지)
   참고해 기존의 얇은 직선 테두리 대신 카드처럼 떠 보이는 둥근 테두리+옅은 그림자로 교체(사이트에서
   이미 같은 용도로 쓰는 --radius-lg/--shadow-sm 토큰 재사용 - .sns-col 등과 동일한 "카드" 느낌).
   overflow:hidden이 이미 있어 안쪽 남색 사이드바(직사각형 그라디언트)도 둥근 모서리에 맞춰 자동으로 잘린다. */
/* 2026-08-19 - 이 사이드바형 NOTICE 위젯은 이제 institution-main.html(기관 홈페이지)만 쓴다.
   business-main.html(BIZ 홈페이지)은 KISTA 벤치마킹 개편으로 아래 "NEWS 카드 그리드" 섹션으로
   교체되어 더 이상 이 마크업을 쓰지 않으므로, 여기 있던 .biz-page 전용 주황색 오버라이드들은
   전부 삭제(institution-main.html이 쓰는 기본값 규칙 자체는 그대로 유지). */
.notice-panel{display:flex;gap:0;padding:0;overflow:hidden;background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);}
.notice-sidebar{flex:0 0 340px;background:linear-gradient(160deg,var(--navy-800),var(--navy-900));color:#fff;padding:40px 34px;display:flex;flex-direction:column;}
.notice-sidebar-brand{font-size:15px;font-weight:800;letter-spacing:.08em;color:var(--gold-light);}
.notice-sidebar-title{font-size:34px;font-weight:800;margin:8px 0 16px;letter-spacing:.02em;}
.notice-sidebar-desc{font-size:16px;line-height:1.6;color:rgba(255,255,255,.72);margin:0 0 24px;}
.notice-sidebar .tabs.tabs-vertical{display:flex;flex-direction:column;gap:2px;margin:0;flex-wrap:nowrap;margin-top:auto;}
.tabs.tabs-vertical button{text-align:left;padding:13px 16px;border-radius:8px;background:transparent;border:none;font-size:16.5px;font-weight:700;color:rgba(255,255,255,.62);border-left:3px solid transparent;}
.tabs.tabs-vertical button:hover{color:#fff;}
.tabs.tabs-vertical button.active{background:rgba(255,255,255,.1);color:#fff;border-left-color:var(--gold);}
.notice-content{flex:1;padding:40px 44px;position:relative;min-width:0;}
.post-list.notice-list{margin-bottom:8px;}
.post-list.notice-list li:first-child{display:flex;align-items:center;gap:16px;padding:20px 22px;margin-bottom:6px;border-bottom:none;background:var(--bg-soft);border-radius:var(--radius-md);border-left:4px solid var(--navy-800);}
.post-list.notice-list li:first-child a{font-size:19px;font-weight:700;white-space:normal;}
.notice-more-btn{position:absolute;right:34px;bottom:28px;width:44px;height:44px;border-radius:50%;background:var(--navy-800);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;line-height:1;font-weight:400;}
.notice-more-btn:hover{background:var(--navy-900);}

/* 2026-08-19 - BIZ 홈페이지 NEWS(공지사항·이벤트) 카드 그리드(KISTA "전략원 새소식" 벤치마킹).
   board-api.js가 `.post-list[data-panel="..."]` 셀렉터로 실 데이터를 그대로
   <li><span class="badge">..</span><a>..</a><span class="date">..</span></li> 형태로 주입하므로
   그 계약은 절대 바꾸지 않고, news-card-grid 클래스를 추가로 얹어 그리드/카드 모양만 새로
   정의한다(notice-list 클래스는 일부러 붙이지 않아 위 사이드바형 li:first-child 강조 규칙과
   충돌하지 않는다). */
.news-board-panel{background:#fff;}
.news-board-panel .tabs{margin-bottom:22px;}
.news-card-grid.tab-panel.active{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px;}
.news-card-grid li{display:flex;flex-direction:column;align-items:flex-start;gap:10px;min-width:0;padding:20px;background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);transition:box-shadow .18s ease, transform .18s ease;}
.news-card-grid li:hover{box-shadow:var(--shadow-md);transform:translateY(-2px);}
.news-card-grid a{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:16px;line-height:1.4;color:var(--ink-900);}
.news-card-grid .date{margin-top:auto;padding-top:2px;}
.news-card-grid .post-empty{grid-column:1/-1;padding:24px;text-align:center;background:none;border:none;}
/* 2026-08-19(후속) - 캠페인(CAMPAIGN_TOTO)/이벤트(EVENT_BIZ) 카드용 썸네일. board-api.js가
   badge.thumb인 보드에서만 이 <span>을 만들어 넣으므로 공지사항/언론보도/당첨자 결과발표
   카드에는 애초에 마크업 자체가 없다(레이아웃은 li의 flex-column 순서를 그대로 따름). */
.news-card-grid .news-card-thumb{display:block;width:100%;aspect-ratio:16/10;border-radius:10px;overflow:hidden;background:var(--bg-soft);}
.news-card-grid .news-card-thumb img{display:block;width:100%;height:100%;object-fit:cover;}
.news-card-grid .news-card-thumb-empty{display:flex;align-items:center;justify-content:center;color:var(--ink-500);font-size:12.5px;}
@media(max-width:520px){.news-card-grid.tab-panel.active{grid-template-columns:1fr 1fr;}}

/* 2026-08-19(후속5) - 폴드6 "펼친" 화면(~673px, 접은 화면과는 별개의 화면 상태)처럼 데스크톱
   보다는 좁지만 아래 480px 스와이프 카드뷰를 적용하기엔 넓은 구간에서, 항목별(공지사항/
   언론보도/캠페인/이벤트/당첨자 결과발표 각 탭)에 최대 10개까지 나오던 게시글을 4개로 줄여
   화면이 지저분해 보이지 않게 함(사용자 확인: 기준 폭 760px 이하, 이 사이트에 이미 있는
   브레이크포인트 재사용). 481px 이상으로 하한을 둬서 아래 480px 구간(카드 2개씩 좌우
   스와이프)과 겹치지 않게 분리 - "접은 화면"은 기존 스와이프 방식을 그대로 유지하고, 이
   "펼친 화면" 구간만 별도로 "그냥 4개까지만 보이는 정적 목록"으로 처리한다. board-api.js가
   최대 10개(all2는 6개)까지 실제로 <li>를 그려 넣은 뒤, 여기서 5번째부터는 CSS로 숨기는
   방식이라 API 호출/렌더링 로직은 전혀 건드리지 않았다(화면 폭이 바뀌면 자동으로 다시
   보이거나 숨겨짐 - JS 재실행 불필요). */
@media(min-width:481px) and (max-width:760px){
  .news-card-grid li:nth-child(n+5){display:none;}
}

/* 2026-08-19(후속3) - 폴드6 접은 화면(약 344px) 같은 좁은 모바일에서 ①탭 6개가 2줄로
   밀리는 문제, ②카드가 한 화면에 다 몰려 지저분해 보이는 문제 개선(사용자 요청).
   ≤480px에서만 적용 - 그보다 넓은 화면은 위 520px 규칙(2열 그리드, 페이지 전체 스크롤)을
   그대로 유지한다. */
@media(max-width:480px){
  /* 탭 버튼 - 줄바꿈 대신 한 줄 + 손가락 스와이프(가로 스크롤). mask-image로 오른쪽 끝을
     페이드시켜(2026-08-20 추가) 스와이프해보지 않아도 더 있다는 걸 알 수 있게 함 - 아래
     .kospole-scroll-fade-x 공통 규칙 참고. */
  .news-board-panel .tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px;margin-bottom:16px;
    mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);}
  .news-board-panel .tabs::-webkit-scrollbar{display:none;}
  .news-board-panel .tabs button{flex:0 0 auto;}

  /* 2026-08-21 - FAQ 페이지(faq-list.html) 대분류 탭(경기/게임·결제구매·적중/환급·기타)이
     좁은 모바일에서 4개가 3+1로 줄바뀜되는 문제 - 위 news-board-panel .tabs와 동일한 패턴
     (한 줄 + 가로 스크롤 + 오른쪽 페이드 힌트)으로 통일. */
  .faq-board .tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px;
    mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);}
  .faq-board .tabs::-webkit-scrollbar{display:none;}
  .faq-board .tabs button{flex:0 0 auto;}

  /* 카드 영역 - grid(전체 노출) 대신 가로 스크롤 스냅으로 전환해 한 화면에 카드 2장만 보이게
     하고, 좌우 화살표(.news-swipe-arrow, main.js의 bindNewsCardSwipe())로 2장씩 넘어가게 함.
     board-api.js가 채우는 <li> 구조/클래스는 그대로 - display만 grid→flex로 바뀐다. */
  .news-panels-wrap{position:relative;}
  .news-card-grid.tab-panel.active{
    display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;
    -webkit-overflow-scrolling:touch;scrollbar-width:none;gap:12px;
  }
  .news-card-grid.tab-panel.active::-webkit-scrollbar{display:none;}
  .news-card-grid.tab-panel.active li{flex:0 0 calc(50% - 6px);min-width:0;scroll-snap-align:start;}
  .news-card-grid .post-empty{flex:0 0 100%;}

  .news-swipe-arrow{display:flex;align-items:center;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);width:30px;height:30px;border:none;padding:0;border-radius:50%;background:rgba(255,255,255,.94);box-shadow:var(--shadow-sm);color:var(--navy-700);font-size:16px;font-weight:800;line-height:1;cursor:pointer;transition:opacity .2s ease,filter .15s ease;z-index:2;}
  .news-swipe-arrow:hover{filter:brightness(0.96);}
  .news-swipe-arrow-left{left:-6px;}
  .news-swipe-arrow-right{right:-6px;}
  .news-panels-wrap.at-start .news-swipe-arrow-left{opacity:0;pointer-events:none;}
  .news-panels-wrap.at-end .news-swipe-arrow-right{opacity:0;pointer-events:none;}
}
@media(min-width:481px){.news-swipe-arrow{display:none;}}
.biz-page .notice-more-btn:hover{background:var(--orange-700);}

/* ---------- SNS section (Phase 5, 2026-08-02 신설 / 2026-08-02·2026-08-02 2차 실 링크·카드
   레이아웃 재설계) ----------
   플랫폼(블로그/유튜브/인스타그램/페이스북) 4개가 위→아래로 전체폭 카드로 쌓이고, 각 카드 안은
   한국기술교육대학교 "YOUTUBE" 카드 참고 - 대형 카드 1개(.sns-feature) + 그 아래 3개짜리 카드
   그리드(.sns-card-grid) + "더보기" 버튼을 눌러야 나오는 5번째 카드(.sns-more-extra)로 구성된다.
   네이버 블로그·인스타그램은 플랫폼 정책상(비공개 API·차단 도메인) 이 서버가 최신 글을 직접
   가져올 수 없어, 관리자가 등록한 실제 게시물 URL을 그대로 노출한다(sns-api.js가
   /api/public/sns-links를 불러와 아래 정적 폴백을 덮어씀 - board-api.js와 동일한 패턴). 유튜브는
   공개 oEmbed API로 확보한 실제 제목·썸네일이 표시된다. */
.sns-panel{position:relative;padding:0 58px;}
.sns-carousel-track{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;scrollbar-width:none;-ms-overflow-style:none;}
.sns-carousel-track::-webkit-scrollbar{display:none;}
.sns-carousel-arrow{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;flex-shrink:0;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink-900);font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:2;box-shadow:0 2px 10px rgba(0,0,0,.08);}
.sns-carousel-arrow.prev{left:0;}
.sns-carousel-arrow.next{right:0;}
.sns-carousel-arrow:hover{background:var(--bg-soft);}
.sns-col{flex:0 0 340px;scroll-snap-align:start;background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);padding:24px 22px;}
.sns-col-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px;}
.sns-col-head b{font-size:20px;font-weight:800;letter-spacing:.02em;color:var(--ink-900);}
.sns-icon-btn{flex-shrink:0;width:46px;height:46px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;}
.sns-icon-btn svg{width:22px;height:22px;}
.sns-icon-btn.sns-icon-blog{background:#1EC800;}
.sns-icon-btn.sns-icon-youtube{background:#E63946;}
.sns-icon-btn.sns-icon-instagram{background:linear-gradient(135deg,#F58529,#DD2A7B,#8134AF);}
.sns-icon-btn.sns-icon-facebook{background:#1877F2;}
.sns-icon-btn:hover{filter:brightness(1.08);}

.sns-feature{display:block;margin-bottom:20px;}
.sns-feature-thumb{display:block;aspect-ratio:16/9;border-radius:var(--radius-md);overflow:hidden;background-size:cover;background-position:center;background-color:var(--bg-soft);}
.sns-feature-thumb-empty{display:flex;align-items:center;justify-content:center;color:var(--ink-500);font-size:13px;}
/* kospoleSnsThumbHtml()이 관리자 등록 썸네일을 <img referrerpolicy="no-referrer">로 채워 넣을 때(2026-08-13,
   네이버 블로그 등 핫링크 방지 CDN 대응) 컨테이너를 꽉 채우도록 - 정적 폴백(background-image 방식)은 그대로 유지되므로
   위 background-size/position 규칙과 공존한다. */
.sns-feature-thumb img,.sns-card-thumb img{display:block;width:100%;height:100%;object-fit:cover;}
.sns-feature-title{display:block;margin-top:12px;font-size:17px;font-weight:800;color:var(--ink-900);line-height:1.45;}
.sns-feature:hover .sns-feature-title{color:var(--navy-800);}

.sns-card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
.sns-card{display:block;}
.sns-card-thumb{display:block;aspect-ratio:1/1;border-radius:var(--radius-md);overflow:hidden;background-size:cover;background-position:center;background-color:var(--bg-soft);}
.sns-card-thumb-empty{display:flex;align-items:center;justify-content:center;color:var(--ink-500);font-size:12px;}
.sns-card-title{display:block;margin-top:8px;font-size:13.5px;color:var(--ink-700);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.sns-card:hover .sns-card-title{color:var(--navy-800);}

.sns-more-btn{display:block;margin:18px auto 0;padding:9px 24px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:13px;font-weight:700;color:var(--ink-700);cursor:pointer;}
.sns-more-btn:hover{background:var(--bg-soft);}
.sns-more-extra{margin-top:20px;}
.sns-more-extra[hidden]{display:none;}
.sns-more-extra .sns-card-thumb{aspect-ratio:16/9;}

.sns-empty{padding:36px 0;text-align:center;font-size:13.5px;color:var(--ink-500);}
.sns-empty a{font-weight:700;color:var(--navy-700);}
.sns-disclaimer{margin:18px 0 0;font-size:12px;color:var(--ink-500);}

/* ---------- 온에어(onair.html, 2026-08-10 신설) - KEPCO 홍보센터 뉴스룸 벤치마킹 ----------
   공지사항(카드형)/보도자료(좌1+우4)/소셜미디어·홍보자료(사진+제목 카드, .sns-feature 재사용)
   4개 섹션 공용 스타일. */
.onair-section{margin-bottom:56px;}
.onair-section:last-child{margin-bottom:0;}
.onair-section-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:22px;padding-bottom:14px;border-bottom:2px solid var(--ink-900);}
/* 2026-08-13 - 메인화면 섹션 제목(.section-head h2)과 "동일한 크기로" 통일(사용자 명시적 요청) */
.onair-section-head h2{margin:0;font-size:34px;font-weight:800;color:var(--ink-900);}
.onair-more{display:inline-flex;align-items:center;gap:4px;font-size:15px;font-weight:700;color:var(--ink-700);flex-shrink:0;}
.onair-more svg{width:15px;height:15px;}
.onair-more:hover{color:var(--navy-800);}
.biz-page .onair-more:hover{color:var(--orange-600-text);}
.onair-empty{grid-column:1/-1;padding:44px 0;text-align:center;font-size:15px;color:var(--ink-500);background:var(--bg-soft);border-radius:var(--radius-md);}

/* 1) 공지사항 - 3열 카드. 2026-08-13 개편(사용자 제시 참고 이미지 - KEPCO 뉴스룸 벤치마킹):
   기존엔 카드(#fff)와 바로 뒤 페이지 배경(역시 흰색)이 같은 색이라 테두리(--line, 아주 옅은 회색)만으로
   카드 형태를 구분해야 했는데 그 테두리마저 옅어 카드가 도드라져 보이지 않는다는 지적 - 그리드 컨테이너
   자체에 옅은 회색 캔버스(--bg-soft)를 깔아 흰 카드와의 명암 대비를 확보하고, 카드 테두리도 더 진한
   회색(#D3D8E0, 기존 --line:#E6E8ED보다 뚜렷함)+1.5px로 강화했다. 세로폭도 패딩을 늘려 참고 이미지처럼
   여유 있게 키웠다. */
.onair-notice-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;background:var(--bg-soft);padding:28px;border-radius:var(--radius-lg);}
.onair-notice-card{display:block;padding:32px 28px;border:1.5px solid #D3D8E0;border-radius:var(--radius-lg);background:#fff;transition:box-shadow .15s ease,transform .15s ease;}
.onair-notice-card:hover{box-shadow:var(--shadow-md);transform:translateY(-3px);}
.onair-notice-tag{display:inline-block;font-size:12.5px;font-weight:800;padding:3px 10px;border-radius:6px;background:var(--gold-light);color:#5a4400;margin-bottom:14px;}
.onair-notice-title{font-size:17px;font-weight:700;color:var(--ink-900);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.9em;}
.onair-notice-card:hover .onair-notice-title{color:var(--navy-800);}
.biz-page .onair-notice-card:hover .onair-notice-title{color:var(--orange-600-text);}
.onair-notice-date{margin-top:20px;font-size:14px;color:var(--ink-500);}

/* 2) 보도자료 - 좌측 큰 카드 1개 + 우측 작은 목록 4개 */
.onair-press-layout{display:flex;gap:36px;align-items:flex-start;}
.onair-press-main{display:block;flex:1 1 0;min-width:0;}
.onair-press-main-thumb{aspect-ratio:16/10;border-radius:var(--radius-lg);overflow:hidden;background:var(--bg-soft);}
.onair-press-main-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .25s ease;}
.onair-press-main:hover .onair-press-main-thumb img{transform:scale(1.04);}
.onair-press-main-title{margin-top:16px;font-size:20px;font-weight:800;color:var(--ink-900);line-height:1.5;}
.onair-press-main:hover .onair-press-main-title{color:var(--navy-800);}
.biz-page .onair-press-main:hover .onair-press-main-title{color:var(--orange-600-text);}
.onair-press-main-date{margin-top:10px;font-size:14.5px;color:var(--ink-500);}

.onair-press-list{flex:1 1 0;min-width:0;display:flex;flex-direction:column;}
.onair-press-list-item{display:flex;align-items:center;gap:18px;padding:20px 0;border-bottom:1px solid var(--line);}
.onair-press-list-item:first-child{padding-top:0;}
.onair-press-list-item:last-child{border-bottom:none;padding-bottom:0;}
/* 2026-08-13 - 우측 목록 썸네일이 너무 작아 시원스럽지 않다는 지적에 따라 기존(84px)의 정확히 2배(168px)로 확대 */
.onair-press-list-thumb{flex:0 0 168px;width:168px;aspect-ratio:4/3;border-radius:var(--radius-sm);overflow:hidden;background:var(--bg-soft);}
.onair-press-list-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.onair-press-list-body{flex:1;min-width:0;}
.onair-press-list-title{font-size:16.5px;font-weight:700;color:var(--ink-900);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.onair-press-list-item:hover .onair-press-list-title{color:var(--navy-800);}
.biz-page .onair-press-list-item:hover .onair-press-list-title{color:var(--orange-600-text);}
.onair-press-list-date{margin-top:8px;font-size:14px;color:var(--ink-500);}
.onair-thumb-empty{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--ink-500);font-size:13.5px;background:var(--bg-soft);}

/* 3)/4) 소셜미디어·홍보자료 - .sns-feature(사진+제목)를 3열 그리드로 재사용 */
.onair-feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;}
.onair-feature-grid .sns-feature{margin-bottom:0;}
/* institution-main.html "공식 채널" 섹션(2026-08-13, 온에어와 레이아웃 맞바꾸기 이후) 전용 modifier -
   .onair-feature-grid에 이 클래스를 함께 붙이면 4개 플랫폼(유튜브/블로그/인스타그램/페이스북) 카드를
   전부 4열로 보여준다. onair.html의 홍보자료(3열, PROMO_VIDEO 최대 3건)는 이 클래스가 없어 그대로
   3열 유지 - 반응형 축소값도 아래 900px/640px 블록에 각각 명시(우연한 캐스케이드 순서에 기대지 않음).
   2026-08-29 - 이 modifier에 `.card-swipe-grid`도 함께 붙여, ≤480px(422번째 줄 근처 공용
   `.card-swipe-*` 규칙 참고)에서는 아래 640px 규칙의 세로 1열 나열 대신 1장씩 스와이프+상단
   우측 화살표로 넘기도록 개편(institution-main.html #sns 참고).
   ⚠️ 첫 시도에서 실제로 계속 세로로 나열되는 회귀가 있었다 - `.card-swipe-grid{display:flex}`와
   바로 위 `.onair-feature-grid{display:grid}`의 specificity가 우연히 같았는데, 후자가 미디어쿼리
   없이 이 파일에서 더 뒤에 있어(캐스케이드는 "미디어쿼리 안이라고 우선"이 아니라 "파일에서
   더 늦게 나온 규칙이 승리") grid가 그대로 이겨버렸던 것 - `.card-swipe-*` 쪽 selector에
   `.card-swipe-wrap` 조상을 포함시켜 specificity를 한 단계 더 올려 파일 순서와 무관하게 항상
   이기도록 고쳤다. */
.sns-feature-grid-4{grid-template-columns:repeat(4,1fr);}
.onair-feature-badge{display:inline-flex;align-items:center;gap:4px;margin-top:12px;font-size:13px;font-weight:800;color:var(--ink-500);letter-spacing:.02em;}
.onair-feature-badge-icon{color:#E63946;font-size:9px;}

@media (max-width:900px){
  .onair-notice-grid{grid-template-columns:1fr 1fr;}
  .onair-press-layout{flex-direction:column;}
  .onair-feature-grid{grid-template-columns:1fr 1fr;}
  .sns-feature-grid-4{grid-template-columns:1fr 1fr;}
}
@media (max-width:640px){
  .onair-section-head h2{font-size:19px;}
  .onair-notice-grid{grid-template-columns:1fr;}
  .sns-feature-grid-4{grid-template-columns:1fr;}
  .onair-feature-grid{grid-template-columns:1fr;}
  .onair-press-list-thumb{flex-basis:128px;width:128px;}
}

/* ---------- press-list.html(썸네일+제목 목록, 2026-08-24 신설) ----------
   온에어 페이지 "보도자료" 섹션(.onair-press-list-item)과 같은 룩(썸네일 168px 좌측 + 제목/날짜
   우측, 하단 구분선)을 표준 게시판 목록(검색+페이지네이션 포함) 크기로 그대로 옮겼다. 사용자
   요청("온에어 페이지 보도자료 섹션과 같이") - 클래스는 재사용하지 않고 새로 뒀다(.onair-press-list-*는
   온에어 위젯 전용 flex 레이아웃 컨텍스트에 맞춰져 있어 독립된 목록 페이지에 그대로 쓰기엔
   폭 계산이 다름). */
.press-list-body{display:flex;flex-direction:column;}
.press-list-row{display:flex;align-items:center;gap:20px;padding:22px 4px;border-bottom:1px solid var(--line);color:inherit;}
.press-list-row:first-child{padding-top:0;}
.press-list-thumb{flex:0 0 168px;width:168px;aspect-ratio:4/3;border-radius:var(--radius-sm);overflow:hidden;background:var(--bg-soft);}
/* 2026-08-25 수정 - object-fit:cover였을 때 세로로 긴 포스터/캡처 이미지의 위아래(또는 글자)가
   잘려 확대되어 보이던 문제(사용자 신고, 스포츠토토 25주년 목록). contain으로 바꿔 이미지
   전체가 박스 안에 항상 다 보이도록 함(비율이 안 맞으면 위아래/좌우 여백은 생길 수 있음). */
.press-list-thumb img{width:100%;height:100%;object-fit:contain;display:block;}
.press-thumb-empty{display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:var(--ink-500);font-size:13.5px;background:var(--bg-soft);}
.press-list-row-body{flex:1;min-width:0;}
.press-list-row-title{font-size:17px;font-weight:700;color:var(--ink-900);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.press-list-row:hover .press-list-row-title{color:var(--navy-800);}
.biz-page .press-list-row:hover .press-list-row-title{color:var(--orange-600-text);}
.press-list-row-date{margin-top:8px;font-size:14px;color:var(--ink-500);}

@media (max-width:640px){
  .press-list-row{gap:14px;padding:16px 0;}
  .press-list-thumb{flex-basis:104px;width:104px;}
  .press-list-row-title{font-size:15px;-webkit-line-clamp:3;}
}

/* press-chapter-tabs(2026-08-25 신설, 2026-08-26 육각형 허니콤 디자인으로 재구성 - 사용자가
   제공한 디자인 캔버스 history.dc.html 반영) - press-list.html의 CHAPTER_DEFS가 있는 게시판
   (스포츠토토 25주년 등)에서 연도대별 "장(챕터)" 목차를 지그재그로 겹치는 육각형 탭으로 보여줌.
   원본 캔버스는 960×420 고정 캔버스에 5개 육각형을 절대좌표로 배치한 정적 다이어그램이었으나,
   실제로는 클릭해서 목록을 필터링하는 탭(data-chapter, applyChapter())이라 절대좌표 대신
   flex + 음수 margin(겹침)・margin-top(지그재그)으로 반응형에 가깝게 재현했다. 겹침/지그재그
   비율은 원본 좌표(육각형 220×190, 좌표 간격 155px→겹침 65px, 위/아래 줄 간격 135px)에서
   그대로 계산해 옮김(65/220≈29.5%, 135/190≈71%). 문서 순서대로 뒤 요소가 앞 요소 위에 자연스럽게
   그려지는 것도 원본의 레이어 순서(3이 2 위, 4가 3 위, 5가 4 위)와 동일하다. */
.press-chapter-tabs{display:flex;align-items:flex-start;flex-wrap:nowrap;margin:4px 0 40px;padding:6px 0 90px;}
.press-chapter-tab{
  position:relative;flex:0 0 208px;width:208px;height:180px;margin-left:-61px;
  clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0% 50%);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;
  border:none;cursor:pointer;color:#fff;text-align:center;
  box-shadow:0 12px 22px rgba(0,0,0,.32);
  transition:transform .18s ease,filter .18s ease,box-shadow .18s ease;
}
.press-chapter-tab:first-child{margin-left:0;}
.press-chapter-tab:nth-child(even){margin-top:128px;}
.press-chapter-tab-1{background:linear-gradient(135deg,#7a4fc0 0%,#7a4fc0 32%,#5a3aa0 32%,#5a3aa0 100%);}
.press-chapter-tab-2{background:linear-gradient(135deg,#4c5cc8 0%,#4c5cc8 32%,#3945a8 32%,#3945a8 100%);}
.press-chapter-tab-3{background:linear-gradient(135deg,#3f74cf 0%,#3f74cf 32%,#2f5cb8 32%,#2f5cb8 100%);}
.press-chapter-tab-4{background:linear-gradient(135deg,#3390c9 0%,#3390c9 32%,#2678b0 32%,#2678b0 100%);}
.press-chapter-tab-5{background:linear-gradient(135deg,#2fa8ad 0%,#2fa8ad 32%,#218e93 32%,#218e93 100%);}
.press-chapter-tab:hover{transform:translateY(-5px);filter:brightness(1.08);}
.press-chapter-tab.active{transform:translateY(-9px) scale(1.035);filter:brightness(1.16);box-shadow:0 18px 32px rgba(0,0,0,.42);z-index:2;}
.press-chapter-icon{width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.press-chapter-icon svg{width:21px;height:21px;}
.press-chapter-no{font-size:12.5px;opacity:.9;}
.press-chapter-title{font-size:20px;font-weight:800;line-height:1.25;padding:0 10px;}
.press-chapter-years{font-size:11.5px;opacity:.85;}
@media (max-width:820px){
  /* 좁은 화면에서는 육각형/지그재그 비율은 그대로 유지한 채 크기만 줄이고, 이 세션에서 이미
     확립한 관례(FAQ 대분류 탭·게시판 페이지네이션 등)와 동일하게 한 줄 가로 스와이프 +
     양쪽 페이드 힌트로 전환한다. */
  .press-chapter-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
    padding:6px 18px 64px;margin:4px -18px 32px;
    mask-image:linear-gradient(to right,transparent 0,#000 18px,#000 calc(100% - 18px),transparent 100%);
    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 18px,#000 calc(100% - 18px),transparent 100%);}
  .press-chapter-tabs::-webkit-scrollbar{display:none;}
  .press-chapter-tab{flex:0 0 152px;width:152px;height:131px;margin-left:-45px;}
  .press-chapter-tab:first-child{margin-left:0;}
  .press-chapter-tab:nth-child(even){margin-top:93px;}
  .press-chapter-icon{width:34px;height:34px;}
  .press-chapter-icon svg{width:16px;height:16px;}
  .press-chapter-no{font-size:11px;}
  .press-chapter-title{font-size:15px;padding:0 6px;}
  .press-chapter-years{font-size:10.5px;}
}

/* ---------- KOSPOLE 기관소개 이미지 카드 (Phase 5, 2026-08-02) ---------- */
.card.card-photo{padding:0;overflow:hidden;display:block;}
.card-photo-thumb{aspect-ratio:16/10;background-size:cover;background-position:center;background-color:var(--bg-soft);}
.card-photo-thumb-empty{display:flex;align-items:center;justify-content:center;color:var(--ink-500);font-size:13px;}
.card-photo-body{padding:22px 24px;}

/* ---------- 인재채용 하이라이트 섹션 (2026-08-02, 2026-08-29 "채용절차 안내"/"채용자료실"
   카드 삭제 요청으로 .recruit-links(2열)가 없어져 .recruit-list-wrap 하나만 남음 - 그에 맞춰
   .recruit-panel도 2열 그리드에서 단일 열로 정리, 이제 쓰는 곳이 없어진 .recruit-links/
   .recruit-link-card와 그 반응형 규칙은 함께 삭제) ---------- */
.recruit-panel{display:grid;grid-template-columns:1fr;gap:28px;align-items:stretch;}
/* 2026-08-10 - grid 자식도 flex 자식과 마찬가지로 기본값이 min-width:auto라, 자식(.post-list a
   등)에 min-width:0을 줘도 이 그리드 칸(.recruit-list-wrap) 자체가 내용의 최소 폭 밑으로 줄어들지
   못해 좁은 화면에서 박스 전체가 화면 밖으로 밀려나던 문제(사용자 신고 - "진행중인 채용공고"
   박스가 잘려 보임)의 진짜 원인이었다. 그리드 칸에도 min-width:0을 줘야 안쪽 말줄임 처리가
   실제로 폭을 줄이는 효과까지 이어진다. */
.recruit-panel > *{min-width:0;}
.recruit-list-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);padding:24px 26px;box-shadow:var(--shadow-sm);}
.recruit-list-wrap h3{margin:0 0 10px;font-size:18px;}

/* ---------- Quick menu bar (BIZ) ---------- */
/* 2026-08-06 - 어두운 통짜 바 디자인이 마음에 안 든다는 요청으로 흰 배경 카드형으로 전면 교체:
   카드마다 개별 윤곽선(테두리)을 두르고, 진한 남색 글자로 흰 배경과 뚜렷하게 대비시키며,
   호버 시 카드가 살짝 떠오르는(translateY + 그림자) 인터랙션을 추가.
   2026-08-06(후속) - "적중확인" 카드만 주황으로 강조하던 것을 다른 항목과 동일하게 되돌리고
   (emphasis 규칙 삭제), 카드가 전반적으로 크다는 피드백에 따라 패딩/아이콘/글자 크기를 축소. */
/* 2026-08-19 - BIZ 홈페이지 개편: 사각 박스형(테두리) 퀵메뉴를 히어로 바로 아래로 옮기면서
   사용자가 제공한 아이콘 이미지 7개로 교체. 박스 테두리는 없애고 이미지+라벨 텍스트만 남기는
   방식으로 확정(사용자 확인) - 아이콘 SVG(.qicon)는 더 이상 쓰지 않아 관련 규칙 삭제. */
/* 2026-08-19(후속2) - 실제 sportstoto.co.kr 캡처(사용자 첨부)처럼 아이콘은 약간 더 작게,
   대신 justify-content:center 대신 space-between으로 바꿔 7개가 컨테이너 폭 전체에
   가장자리까지 고르게 펼쳐지도록 함(gap은 좁아지지 않도록 최소값으로만 유지 - 화면이
   넓을수록 space-between이 알아서 더 벌려준다). 아이콘 자체는 여전히 clamp()로 화면폭에
   비례해 스케일(1차 확대분(56px→104px)이 너무 커 보인다는 피드백에 따라 최대값을 82px로
   축소). 640px 이하 모바일은 한 줄에 다 안 들어가 줄바꿈되므로 space-between을 쓰면 마지막
   줄이 양쪽 끝으로 벌어져 어색해져 center로 되돌린다. */
.quick-bar{background:#fff;padding:34px 0 16px;}
.quick-bar .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:18px 20px;}
.quick-bar a{
  display:flex;flex-direction:column;align-items:center;gap:11px;
  color:var(--navy-800);font-size:15px;font-weight:700;white-space:nowrap;
  transition:transform .18s ease, opacity .18s ease;
}
.quick-bar a:hover{transform:translateY(-3px);opacity:.82;}
.quick-bar a .qimg{width:clamp(52px, 5.5vw, 82px);height:clamp(52px, 5.5vw, 82px);object-fit:contain;}
@media(max-width:640px){
  .quick-bar{padding:24px 0 10px;}
  .quick-bar .wrap{justify-content:center;gap:16px 22px;}
  .quick-bar a{font-size:13px;}
  .quick-bar a .qimg{width:clamp(46px, 13vw, 64px);height:clamp(46px, 13vw, 64px);}
}

/* ---------- Promo strip ---------- */
.promo-strip{border-radius:var(--radius-lg);padding:40px;display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;color:#fff;}
.promo-strip.inst{background:linear-gradient(120deg,var(--navy-800),var(--navy-600));}
.promo-strip.biz{background:linear-gradient(120deg,#4A2A0A,var(--orange-600));}
.promo-strip h3{font-size:25px;margin:0 0 6px;}
.promo-strip p{margin:0;color:rgba(255,255,255,.78);font-size:15.5px;}

/* ---------- Widget (game schedule) ---------- */
.widget{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm);}
/* 제목 영역과 하단 목록이 둘 다 흰 배경이라 구분이 잘 안 된다는 지적(2026-08-14) - 주황 계열은
   제외해달라는 요청이라(본문 배당률 "+"버튼 등에 이미 주황을 쓰고 있어 헤더까지 주황이면
   단조로움) 사이트가 이미 쓰는 남색 계열(--navy-700~900) 그라데이션으로 대비를 줬다. 배경이
   짙어진 만큼 제목 글자도 흰색으로 바꿔 가독성을 맞췄다. */
.widget-head{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;background:linear-gradient(135deg,var(--navy-700),var(--navy-900));}
.widget-head h3{margin:0;font-size:16px;color:#fff;}
.match-row{display:flex;align-items:center;justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--line);font-size:13.5px;}
.match-row:last-child{border-bottom:none;}
.match-row .teams{font-weight:700;}
.match-row .odd{display:flex;gap:8px;}
.match-row .odd span{background:var(--bg-soft);padding:4px 10px;border-radius:6px;font-weight:700;font-size:12.5px;}

/* ---------- BIZ 메인 "이번주 게임일정·배당률" 위젯 - 좌(배당률)/우(게임일정) 2박스(2026-08-13) ----------
   /api/public/betman/widget에서 받아온 데이터를 main.js가 이 박스들에 채워 넣는다. 베트맨 원본
   화면으로 이동하는 "+" 버튼(.widget-plus)은 좌측은 항상 최신 회차(gmTs)로 갱신되는 동적 링크,
   우측은 게임일정 목록 페이지로 가는 고정 링크다. */
.betman-widgets{display:grid;grid-template-columns:1fr 1fr;gap:24px;}
.betman-box .widget-head h3{font-size:16px;}
/* 좌측 박스 제목 밑 "YYYY년 프로토 승부식 NN회차"(2026-08-14 추가, 실제 최신 회차) */
.betman-round-label{display:block;margin-top:4px;font-size:12.5px;font-weight:700;color:var(--orange-600-text);}
/* 2026-08-19 - BIZ 홈페이지에서만 쓰이는 버튼이라(institution-main.html은 이 위젯 자체를 안 씀)
   기존 주황 그라데이션을 KISTA 벤치마킹에 맞춰 남색 단색(그라데이션 없음)으로 전환. */
.widget-plus{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;flex:0 0 28px;border-radius:50%;background:var(--navy-800);color:#fff;font-size:16px;font-weight:800;line-height:1;text-decoration:none;transition:filter .15s ease,transform .15s ease;}
.widget-plus:hover{filter:brightness(1.06);transform:translateY(-1px);}
.betman-list{min-height:120px;}
.betman-empty{padding:36px 24px;text-align:center;color:var(--ink-500);font-size:13.5px;}
.betman-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 24px;border-bottom:1px solid var(--line);font-size:13px;}
.betman-row:last-child{border-bottom:none;}
.betman-row .league{display:inline-block;font-size:11px;font-weight:700;color:var(--orange-600-text);background:rgba(232,89,12,.08);padding:2px 8px;border-radius:999px;white-space:nowrap;}
.betman-row .sched-date{color:var(--ink-500);font-size:12.5px;white-space:nowrap;flex-shrink:0;}

/* 우측 게임일정 행 - 회차 배지 + 상품명을 한 덩어리로(데스크톱은 한 줄, 2026-08-14) */
.sched-main{display:inline-flex;align-items:center;gap:8px;min-width:0;}
.sched-name{font-weight:700;}
/* 회차 배지(.league) 폭이 회차 숫자 자릿수에 따라 달라("109회차"가 "56회차"보다 넓음) 상품명
   시작 위치가 행마다 어긋나는 문제(2026-08-14 사용자 지적, 스크린샷 확인) - 배지 폭을
   고정해(가장 긴 "YYYY년 NNN회차" 기준 여유있게) 상품명이 항상 같은 위치에서 시작하게 한다. */
.sched-main .league{width:100px;text-align:center;flex-shrink:0;}

/* 좌측 배당률 행 - 팀명 줄 위에 메타 정보를 좌(리그명·경기번호)/우(마감일시·경기일시) 두
   그룹으로. ⚠️ 폭이 좁아 한 줄에 다 안 들어갈 때 overflow-x:auto(숨겨진 가로 스크롤)로
   처리했었는데, 스크롤바가 안 보여서 "경기일시 ... 18:"처럼 글자가 중간에 잘려 보이는
   것처럼 오해를 샀다(2026-08-14 재지적) - 대신 flex-wrap:wrap으로 바꿔, 안 들어가면
   meta-right(마감일시·경기일시) 그룹이 통째로 다음 줄로 내려가게 한다(개별 날짜 텍스트는
   여전히 .meta-text의 white-space:nowrap 덕에 중간에서 끊기지 않음 - 완전한 정보 단위로만
   줄바꿈). margin-left:auto로 meta-right를 항상 그 줄의 오른쪽 끝에 붙여 한 줄이든 줄바꿈
   되어 혼자 있는 줄이든 "우측 정렬" 요청이 그대로 유지되게 했다. */
.betman-odds-main{display:flex;flex-direction:column;gap:4px;min-width:0;}
.betman-odds-meta{display:flex;flex-wrap:wrap;align-items:center;row-gap:2px;column-gap:6px;font-size:11.5px;color:var(--ink-500);}
.meta-left{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;}
.meta-right{display:inline-flex;align-items:center;gap:6px;flex-shrink:0;margin-left:auto;}
/* 리그 배지(.league) 폭이 리그명 길이에 따라 달라("코파리베"가 "MLB"보다 넓음) 경기번호
   시작 위치가 행마다 어긋나는 문제(2026-08-14 사용자 지적) - 우측 게임일정 배지(.sched-main
   .league)와 같은 원리로 폭을 고정해 경기번호가 항상 같은 위치에서 시작하게 한다. */
.betman-odds-meta .league{width:50px;text-align:center;flex-shrink:0;position:relative;}
.betman-odds-meta .match-no{font-weight:700;color:var(--navy-800);white-space:nowrap;}
.betman-odds-meta .dot{color:var(--line);flex-shrink:0;}
/* 말줄임(…) 처리는 안쪽 .league-text에서만 건다 - 원래는 .league(바깥 배지) 자체에
   overflow:hidden을 걸었었는데, 아래 풍선 툴팁(::after)이 .league의 자식이라 .league에
   overflow:hidden이 있으면 툴팁이 배지 위쪽(배지 바깥)으로 나가자마자 그대로 잘려 전혀 안
   보이는 버그가 있었다(2026-08-26, 실제 화면에서 "hover하면 음영만 잠깐 보이고 툴팁 텍스트가
   안 뜬다"는 사용자 신고로 발견). .league는 위치 기준점(position:relative)과 폭 고정 역할만
   하고, 잘라내기는 이 안쪽 span으로 옮겨 툴팁이 .league 바깥으로 자유롭게 삐져나오게 한다. */
.betman-odds-meta .league .league-text{display:block;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* 리그 배지 전체 리그명 풍선 툴팁 - 배지 폭이 50px 고정이라 긴 리그명은 위에서처럼 말줄임(…)
   으로 잘리는데, 마우스오버/터치 시(betman-widget.js의 kospoleBindBetmanLeagueTip()) 이
   .league-tip-show 클래스가 약 2초간 붙었다 자동으로 빠지면서 배지 위에 전체 리그명을 띄운다
   (요청사항, 2026-08-26). 배지 자체 폭·정렬(경기번호 시작 위치 고정)에는 영향을 주지 않도록
   레이아웃에서 빠진 절대배치 풍선으로 구현. */
.betman-odds-meta .league::after{
  content:attr(data-full);
  position:absolute;
  left:50%;
  bottom:calc(100% + 6px);
  transform:translateX(-50%);
  background:var(--navy-800);
  color:#fff;
  font-weight:700;
  white-space:nowrap;
  padding:5px 10px;
  border-radius:6px;
  font-size:11.5px;
  box-shadow:0 4px 12px rgba(0,0,0,.2);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  z-index:30;
  transition:opacity .15s ease;
}
.betman-odds-meta .league.league-tip-show::after{opacity:1;visibility:visible;}
.teams{font-weight:700;min-width:0;text-align:left;}
.teams-line{display:inline-flex;align-items:center;gap:8px;}
.teams-mobile{display:none;}
/* 승/무/패(또는 언더/오버, 홀/짝) 고정 3칸 그리드 - 가운데 항목이 없어도 좌우 위치가 흔들리지
   않는다(요청사항 예시: "승 1.35        패 2.65"처럼 가운데만 빈 칸으로 남음).
   ⚠️ width를 명시적 고정값으로 둔다 - 예전엔 flex:0 0 auto(내용 크기에 맞춰 자동 축소)라 각
   행의 .odd-grid가 서로 독립된 그리드라서 숫자 자릿수 등 내용에 따라 행마다 총 폭이 미세하게
   달라져 배당률 칸 위치가 행마다 살짝씩 어긋나는 문제가 있었다(2026-08-14 사용자 지적, 실측
   확인) - 폭을 고정해 모든 행이 동일한 3칸 폭을 갖도록 해 위치가 항상 일치하게 했다. */
.odd-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;flex:0 0 auto;width:186px;}
.odd-grid .odd-slot{background:var(--bg-soft);padding:4px 9px;border-radius:6px;font-weight:700;font-size:12px;white-space:nowrap;text-align:center;}
.odd-grid .odd-slot-empty{background:transparent;}
.odd-grid.odd-pending{display:block;}
.odd-pending-text{color:var(--ink-500);font-size:12px;white-space:nowrap;}

/* 좌우 2박스 - 860px 이하는 세로 스택 대신 박스 1개씩 화면 폭으로 좌우 스와이프(2026-08-14,
   모바일에서 아래로 계속 스크롤해야 하는 불편 해소 요청). 스크롤바는 시각적으로 숨기되
   스크롤 동작 자체는 그대로 유지(터치 스와이프로 자연스럽게 전환). */
.betman-swipe-wrap{position:relative;}
@media (max-width:860px){
  .betman-widgets{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;gap:16px;padding-bottom:4px;scrollbar-width:none;overscroll-behavior-x:contain;}
  .betman-widgets::-webkit-scrollbar{display:none;}
  .betman-box{flex:0 0 100%;scroll-snap-align:start;}

  /* 좌우 스와이프가 가능하다는 걸 화면만 봐서는 알 수 없다는 지적(2026-08-14) - 화면
     좌/우 가장자리에 화살표 힌트를 띄운다. pointer-events:none이라 터치/스와이프 자체를
     가로채지 않는 순수 시각적 표시이고, betman-widget.js가 스크롤 위치를 감시해 시작
     지점에서는 좌측 화살표를, 끝 지점에서는 우측 화살표를 숨긴다(.at-start/.at-end). */
  /* 처음엔 순수 시각적 힌트(pointer-events:none)였는데, 터치/클릭해도 반응이 없다는 지적
     (2026-08-14)으로 실제 <button>으로 바꿔 클릭 가능하게 함 - border/padding 등 브라우저
     기본 버튼 스타일을 초기화하고, 시작/끝 지점에서 숨겨질 때만 pointer-events:none을 줘서
     보이지 않는 버튼이 눌리는 걸 막는다(betman-widget.js의 kospoleBindBetmanSwipeHint 참고). */
  .betman-swipe-arrow{display:flex;align-items:center;justify-content:center;position:absolute;top:50%;transform:translateY(-50%);width:32px;height:32px;border:none;padding:0;border-radius:50%;background:rgba(255,255,255,.92);box-shadow:var(--shadow-sm);color:var(--navy-700);font-size:18px;font-weight:800;line-height:1;cursor:pointer;transition:opacity .2s ease,filter .15s ease;z-index:2;}
  .betman-swipe-arrow:hover{filter:brightness(0.96);}
  .betman-swipe-arrow-left{left:2px;}
  .betman-swipe-arrow-right{right:2px;}
  .betman-swipe-wrap.at-start .betman-swipe-arrow-left{opacity:0;pointer-events:none;}
  .betman-swipe-wrap.at-end .betman-swipe-arrow-right{opacity:0;pointer-events:none;}
}
@media (min-width:861px){.betman-swipe-arrow{display:none;}}

/* 작은 모바일(≤480px, 프로젝트 공통 브레이크포인트) */
@media (max-width:480px){
  .betman-row{padding:14px 16px;}

  /* 배당률 행 - 메타 줄(리그·경기번호·마감·경기일시)을 행 전체 폭으로 펼쳐 한 줄로 유지하고,
     그 아래에 팀명(두 줄) + 배당률을 나란히 배치하는 2행 그리드로 재구성(요청사항 예시 그대로 -
     "리그명·경기번호·마감·경기" 한 줄 / "홈팀명 ... 배당률" 한 줄). 메타 줄 폰트를 더 줄이고
     "마감 8.14(금) 18:00" 같은 텍스트를 nowrap으로 고정해(.meta-text) 중간에 줄바꿈되어 2줄로
     깨지던 문제도 함께 해결(2026-08-14 사용자 지적). */
  /* ⚠️ 2번째 열을 auto가 아니라 고정 px로 - auto 트랙은 그 행 자신의 콘텐츠(배당률 숫자
     자릿수 등)에 맞춰 트랙 폭을 계산하기 때문에, 행마다 배당률 텍스트 폭이 미세하게 다르면
     (예: "1.53"과 "10.50") 트랙 자체의 폭이 행마다 달라져 자식(.odd-grid)에 준 width:132px가
     무시된 것처럼 보였다(2026-08-14 사용자 지적 - "2089 경기는 맞는데 2081/2085는 오른쪽으로
     치우침"의 진짜 원인). 트랙을 고정 px로 못박아 모든 행이 항상 동일한 폭/위치를 갖게 했다. */
  .betman-odds-row{display:grid;grid-template-columns:1fr 140px;column-gap:10px;row-gap:6px;align-items:center;}
  .betman-odds-main{display:contents;}
  .betman-odds-meta{grid-column:1/-1;font-size:10px;gap:4px;}
  .betman-odds-meta .meta-text{white-space:nowrap;flex-shrink:0;}
  .teams-desktop{display:none;}
  /* align-items:flex-start 필수 - .teams-line(공용 클래스)의 align-items:center가 상속되면
     flex-direction:column 상태에서는 교차축(가로)이 되어 팀명이 가운데 정렬돼버린다(2026-08-14
     사용자 지적 - 팀명이 리그 배지 시작 위치보다 더 안쪽에서 시작하던 원인). */
  .teams-mobile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;grid-column:1;min-width:0;}
  .teams-mobile .team-row{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;}
  .betman-odds-row .odd-grid{grid-column:2;width:100%;}
  .odd-grid{grid-template-columns:repeat(3,1fr);gap:4px;}
  .odd-grid .odd-slot{padding:3px 6px;font-size:11px;}

  /* 게임일정 행 - "회차배지 + 마감일시"를 1행, 상품명을 2행 전체 폭으로 고정하는 통일된
     2줄 규격(요청사항 예시 그대로 - 상품명 길이와 무관하게 항상 정확히 2줄). */
  .betman-sched-row{display:grid;grid-template-columns:1fr auto;column-gap:8px;row-gap:4px;align-items:center;}
  .sched-main{display:contents;}
  .betman-sched-row .league{grid-column:1;grid-row:1;}
  .betman-sched-row .sched-date{grid-column:2;grid-row:1;}
  .betman-sched-row .sched-name{grid-column:1/-1;grid-row:2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
}

/* 하단 주의사항 문구(2026-08-14 추가) */
.betman-disclaimer{margin:16px 2px 0;font-size:12.5px;color:var(--ink-500);line-height:1.6;}
.betman-disclaimer a{color:var(--orange-600-text);font-weight:700;text-decoration:underline;}
/* 베트맨 로고(2026-08-14 추가) - 텍스트 옆에 작게, 링크와 함께 클릭 가능 */
/* ⚠️ display:inline-block 명시 필수 - body 상단 전역 리셋(line ~71)이 모든 img를
   display:block으로 바꿔놔서, 이걸 override하지 않으면 부모의 white-space:nowrap과
   무관하게(block 요소는 항상 자기 앞뒤로 줄바꿈을 만듦) 로고가 "베트맨" 글자와 다른 줄로
   떨어져 나갔다(2026-08-14 - 이전 nowrap 시도가 실패한 진짜 원인, 재확인 후 수정). */
.betman-logo-icon{display:inline-block;height:14px;width:auto;margin-left:5px;vertical-align:middle;}
/* "베트맨[로고]에서"를 하나의 줄바꿈 불가 단위로 묶어, 로고 이미지 바로 뒤에서 줄이 꺾이던
   문제를 막는다(2026-08-14 사용자 지적 - 이미지 같은 인라인 요소 바로 뒤는 한글 텍스트에서도
   줄바꿈 지점으로 간주될 수 있어 word-break:keep-all만으로는 막히지 않았음). 이 묶음 자체가
   너무 길면 통째로 다음 줄로 넘어갈 뿐, "로고 다음"이라는 어색한 지점에서는 더 이상 끊기지 않는다. */
.betman-logo-cluster{white-space:nowrap;}

/* ---------- 풋터 상단 바로가기 배너 캐러셀(BIZ 전용, 2026-08-02) ----------
   10개 배너가 우->좌로 끊김 없이 계속 흐르는 마퀴(marquee) 형태. 목록을 통째로 한 번 더
   복제해 트랙 뒤에 이어붙인 뒤(main.js의 bindBannerStrip), 정확히 원본 목록 폭(절반 지점)
   까지 이동하면 0으로 되감아 이어붙인 두 번째 사본이 그 자리를 자연스럽게 대신하게 하는
   방식(끊기는 느낌 없이 무한 반복). 화살표 클릭 시 배너 1개 폭만큼 즉시 이동, 마우스를
   올리면 자동 흐름을 멈추고 벗어나면 재개(히어로 롤링 배너와 동일한 상호작용 원칙). */
.banner-strip{background:#fff;padding:26px 0;border-top:1px solid var(--line);}
.banner-strip-wrap{display:flex;align-items:center;gap:12px;}
.banner-strip-viewport{flex:1;min-width:0;overflow:hidden;}
.banner-strip-track{display:flex;gap:14px;width:max-content;}
.banner-strip-item{flex:0 0 auto;display:block;width:220px;aspect-ratio:560/200;border-radius:10px;overflow:hidden;background:var(--bg-soft);box-shadow:var(--shadow-sm);}
.banner-strip-item img{width:100%;height:100%;object-fit:cover;display:block;}
.banner-strip-arrow{flex-shrink:0;width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:#fff;
  display:flex;align-items:center;justify-content:center;font-size:20px;line-height:1;color:var(--ink-700);cursor:pointer;}
.banner-strip-arrow:hover{background:var(--bg-soft);}
@media (max-width:760px){
  .banner-strip-item{width:170px;}
  .banner-strip-arrow{width:34px;height:34px;font-size:17px;}
}

/* 유관기관 롤링배너(KOSPOLE 기관 홈페이지 전용, 2026-08-05 신설) - BIZ의 기존 banner-strip
   메커니즘(main.js bindBannerStrip)을 그대로 재사용하되, 왼쪽에 제목("유관기관") + 이전/일시정지/
   다음 컨트롤을 한데 묶어 붙이고, 사진 배너(.banner-strip-item) 대신 작은 로고를 여백 있게
   보여주는 .logo-item 변형을 추가한다. */
.banner-strip-title{flex-shrink:0;font-size:15px;font-weight:800;color:var(--ink-900);white-space:nowrap;padding-right:4px;}
.banner-strip-item.logo-item{
  width:150px;height:64px;aspect-ratio:auto;border-radius:8px;background:#fff;
  box-shadow:none;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;padding:10px 16px;
}
.banner-strip-item.logo-item img{width:auto;height:auto;max-width:100%;max-height:100%;object-fit:contain;}
@media (max-width:760px){
  .banner-strip-title{font-size:13.5px;}
  .banner-strip-item.logo-item{width:120px;height:52px;padding:8px 12px;}
  /* 2026-08-25 - 제목("유관기관") + 이전/일시정지/다음 버튼 3개가 뷰포트(로고가 흐르는 영역)와
     한 줄을 나눠 쓰다 보니, 좁은 화면에서는 이 다섯 요소가 대부분의 폭을 차지해 정작 로고가
     1개도 온전히 안 보일 만큼 뷰포트가 비좁아지는 문제(사용자 스크린샷 확인) - 제목+버튼을
     첫 줄로, 로고 뷰포트를 폭 100%인 둘째 줄로 분리해 로고가 훨씬 넓은 공간에서 흐르도록 한다. */
  .related-org-strip .banner-strip-wrap{flex-wrap:wrap;row-gap:12px;justify-content:space-between;}
  .related-org-strip .banner-strip-viewport{flex-basis:100%;}
}

/* ---------- Footer ---------- */
footer.site-footer{background:#0E1424;color:#9AA5BC;padding:0 0 30px;}
.biz-page footer.site-footer{background:#160C10;}
.foot-top{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap;padding-bottom:32px;border-bottom:1px solid rgba(255,255,255,.08);margin-bottom:24px;}
.foot-brand{display:flex;align-items:center;gap:10px;font-weight:800;color:#fff;font-size:19px;margin-bottom:12px;}
/* 풋터 회사로고(2026-08-02 요청, 회사명 좌측) - logo-kospole.png는 진한 남색 로고라 풋터의
   어두운 배경(#0E1424/BIZ #160C10) 위에서는 대비가 낮아 잘 안 보인다. filter로 원본 색과
   무관하게 흰색 실루엣으로 바꿔(투명 배경은 그대로 유지) 어두운 배경에서도 또렷하게 보이도록 함. */
.foot-brand-logo{height:26px;width:auto;display:block;flex-shrink:0;filter:brightness(0) invert(1);}
/* 회사명 텍스트(2026-08-31 추가) - 원래 .foot-brand의 맨텍스트 노드였는데, 가장 좁은 모바일
   화면(약 360~390px)에서 로고+"스포츠토토 · 한국스포츠레저(주)" 전체 폭이 컨테이너보다 넓어
   중간에 줄바꿈되어 두 줄로 보이는 문제가 있었다(사용자 스크린샷 리포트). white-space:nowrap
   만으로는 폭이 부족한 화면에서 오히려 옆으로 넘쳐버리므로, <span>으로 감싸 아래 모바일
   미디어쿼리에서 로고/글자 크기를 함께 줄여 한 줄에 들어가도록 했다. */
.foot-brand-name{white-space:nowrap;}
@media (max-width:480px){
  .foot-brand{gap:7px;font-size:14.5px;}
  .foot-brand-logo{height:19px;}
}
.foot-links{display:flex;gap:18px;flex-wrap:wrap;font-size:14px;}
.foot-links a:hover{color:#fff;}
.foot-right{display:flex;flex-direction:column;align-items:flex-end;gap:16px;}
.foot-family{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end;}
.foot-family a{font-size:13.5px;border:1px solid rgba(255,255,255,.14);padding:7px 14px;border-radius:999px;}
.foot-family a:hover{background:rgba(255,255,255,.08);color:#fff;}
.foot-bottom{display:flex;justify-content:space-between;gap:14px;flex-wrap:wrap;font-size:13.5px;}

/* 유관기관 사이트 / 관련 사이트 드롭다운 + GO 버튼(KOSPOLE 기관 홈페이지 풋터 전용, 2026-08-05
   신설, 2026-08-05 재배치 - 풋터 아코디언 3번째 칸("유관기관 바로가기", 기존 "바로가기 사이트"와
   중복돼 삭제 요청받은 자리)으로 이동). 좁은 아코디언 칼럼 폭에 맞춰 두 그룹을 세로로 쌓고,
   select는 남은 폭을 꽉 채운다(flex:1). 어두운 풋터 배경 위에서도 잘 보이도록 .foot-family
   pill 버튼과 동일한 톤(옅은 흰색 테두리)으로 맞춘다. */
.foot-related-sites{display:flex;flex-direction:column;gap:10px;}
.foot-related-sites-group{display:flex;gap:0;}
.foot-related-sites select{
  flex:1;min-width:0;
  appearance:none;-webkit-appearance:none;
  background:rgba(255,255,255,.06);color:#fff;
  border:1px solid rgba(255,255,255,.18);border-right:none;
  border-radius:6px 0 0 6px;padding:9px 30px 9px 12px;font-size:13px;
  cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239AA5BC' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center;background-size:14px;
}
.foot-related-sites select option{color:#14171F;}
.foot-related-sites select:focus{outline:2px solid #fff;outline-offset:-2px;}
.foot-related-go-btn{
  flex-shrink:0;border:1px solid rgba(255,255,255,.18);border-radius:0 6px 6px 0;
  background:rgba(255,255,255,.12);color:#fff;font-size:13px;font-weight:800;
  padding:9px 16px;cursor:pointer;white-space:nowrap;
}
.foot-related-go-btn:hover{background:rgba(255,255,255,.2);}

/* 인증마크(Phase 3, 2026-08-02 확장) - 예전에는 테두리만 있는 순수 텍스트였는데, 아이콘을
   붙인 배지 형태로 바꿔 실제 "마크"처럼 보이게 했다. (2026-08-02 재수정 - 글자/아이콘 크기 확대) */
.foot-marks{display:flex;gap:12px;flex-wrap:wrap;}
.foot-marks .mark{display:inline-flex;align-items:center;gap:7px;border:1px solid rgba(255,255,255,.16);
  border-radius:7px;padding:7px 13px 7px 10px;font-size:13px;background:rgba(255,255,255,.03);}
.foot-marks .mark-icon{width:16px;height:16px;flex-shrink:0;color:var(--gold-light);}
.biz-page .foot-marks .mark-icon{color:#FFB37A;}

/* SNS 아이콘(Phase 3 신규, 2026-08-02 재수정 - 버튼/아이콘 크기 확대) - 기존 mega-left-icon과
   동일한 line-icon SVG 스타일의 원형 버튼. */
.foot-sns{display:flex;gap:10px;}
.foot-sns a{display:flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;
  border:1px solid rgba(255,255,255,.16);color:#C7CEDD;transition:background .15s,color .15s,border-color .15s;}
.foot-sns a:hover{background:var(--gold);border-color:var(--gold);color:#1A1400;}
.biz-page .foot-sns a:hover{background:var(--orange-600);border-color:var(--orange-600);color:#fff;}
.foot-sns svg{width:20px;height:20px;}

/* 퀵링크 아코디언(Phase 3 신규) - 데스크톱에서는 3개 그룹이 항상 나란히 펼쳐진 3단 컬럼으로,
   모바일(760px 이하)에서는 제목을 눌러야 펼쳐지는 아코디언으로 동작한다(.info-accordion과
   동일한 max-height 트랜지션 방식을 재사용). */
footer.site-footer .wrap{padding-top:8px;}
.foot-accordion{display:flex;gap:0;border-bottom:1px solid rgba(255,255,255,.08);margin-top:32px;}
.foot-top{margin-top:32px;}
.foot-accordion-item{flex:1;border-top:none;}
.foot-accordion-item + .foot-accordion-item{border-left:1px solid rgba(255,255,255,.08);}
.foot-accordion-header{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;
  padding:22px 20px;background:none;border:none;color:#fff;font:inherit;font-size:16px;font-weight:700;
  cursor:default;text-align:left;}
.foot-accordion-header .chevron{width:16px;height:16px;color:#7C87A0;flex-shrink:0;display:none;transition:transform .2s ease;}
.foot-accordion-header .chevron svg{width:100%;height:100%;}
.foot-accordion-body{max-height:none;overflow:visible;}
.foot-accordion-body-inner{display:flex;flex-direction:column;gap:12px;padding:0 20px 22px;font-size:16px;}
.foot-accordion-body-inner a{color:#9AA5BC;}
.foot-accordion-body-inner a:hover{color:#fff;}

@media (max-width:760px){
  .foot-accordion{flex-direction:column;}
  .foot-accordion-item + .foot-accordion-item{border-left:none;border-top:1px solid rgba(255,255,255,.08);}
  .foot-accordion-header{cursor:pointer;padding:18px 4px;}
  .foot-accordion-header .chevron{display:block;}
  .foot-accordion-item.is-open .foot-accordion-header .chevron{transform:rotate(180deg);color:#fff;}
  .foot-accordion-body{max-height:0;overflow:hidden;transition:max-height .25s ease;}
  .foot-accordion-item.is-open .foot-accordion-body{max-height:260px;}
  .foot-accordion-body-inner{padding:0 4px 18px;}
  .foot-right{align-items:flex-start;}
  .foot-family{justify-content:flex-start;}
}

/* ---------- Responsive ---------- */
/* 2026-08-02: 대메뉴 글자를 18px/굵게로 키우면서(한국기술교육대학교 벤치마킹) 좁은 데스크톱
   폭(약 980~1150px)에서는 늘어난 GNB 글자가 로고/우측 아이콘과 겹치거나 넘칠 수 있어, 데스크톱
   메뉴가 나타나는 기준을 1200px로 올렸다(당시엔 본문 컨테이너 폭 --container도 마침 1200px라
   같은 값이었음). 1200px 이상에서는 항상 로고/버튼을 뺀 안전 여유폭(약 780px 이상)이 확보되어
   넘치지 않는다. (main.js의 window.innerWidth 기준값도 동일하게 1200으로 맞춰뒀다.)
   [2026-08-10 참고] 이후 --container를 1400px로 넓혔지만, 이 1200px 기준은 "GNB 글자가 로고/
   아이콘과 안 겹치는 최소 화면 폭"이라는 별개의 기준이라 컨테이너 폭과 무관하게 그대로 유지함
   (컨테이너가 넓어져도 화면이 1200px보다 좁으면 .wrap이 자동으로 줄어들 뿐이라 이 기준을 함께
   올릴 필요가 없다). */
@media (max-width:1200px){
  /* 모바일 GNB 전체화면 오버레이가 화면 밖으로 넘치는 경우에 대비한 안전장치(2026-07-31 추가).
     2026-07-31에 이 규칙을 html/body에 전역으로(이 미디어쿼리 바깥에) 추가했었는데, `overflow-x`만
     명시하고 `overflow-y`는 지정하지 않으면 브라우저가 overflow-y를 자동으로 `auto`로 계산해버리는
     CSS 스펙 규칙 때문에 데스크톱에서도 세로 스크롤바가 콘텐츠 높이에 따라 나타났다 사라지며 화면이
     좌우로 흔들리는 문제와, 메가메뉴 드롭다운(절대배치)이 정상보다 낮게 clip되는 문제가 함께
     발생했다(문서에 두 개의 중첩된 스크롤 컨테이너가 생기는 전형적인 anti-pattern). 모바일 메뉴가
     실제로 열려 있을 때만 필요한 안전장치이므로 이 미디어쿼리 안으로 옮겨 데스크톱에는 전혀 영향이
     없도록 했다. */
  html,body{overflow-x:hidden;}

  /* "베트맨" 대메뉴 - 모바일 전체메뉴에서는 로고 대신 글자로(요청사항). */
  .gnb-betman-logo{display:none;}
  .gnb-betman-text{display:inline;}

  .grid-3{grid-template-columns:1fr 1fr;}
  .bento{grid-template-columns:1fr 1fr;}
  .bento .b-large{grid-row:auto;}
  .portal-cards{grid-template-columns:1fr;}
  .hero h1{font-size:34px;}
  nav.gnb{display:none;}
  .mobile-toggle{display:flex;}
  .header-actions .btn span.label{display:none;}

  /* 모바일 GNB 전체화면 오버레이(2026-07-31 - 2차 개편, 국민체육진흥공단 모바일 메뉴 참고)
     1차 수정(드롭다운 - display/overflow만 손봄)에서는 대메뉴를 열면 그 안의 중·소메뉴가 들여쓰기
     없이 한 번에 전부 펼쳐져, 화면이 메뉴로 가득 차는데도 닫을 방법(X 버튼)이 없고 대/중/소 구분도
     안 되는 문제가 있었다. 이번에는 공단 사이트처럼: (1)헤더 아래 영역 전체를 덮는 전체화면
     오버레이로 바꾸고(뒤 페이지는 완전히 가려지는 것이 의도된 동작 - 배경이 비치게 하지 않음),
     (2)햄버거 아이콘이 열려있는 동안 X 아이콘으로 바뀌어 그 자리에서 바로 닫을 수 있게 하고,
     (3)대메뉴>중메뉴>소메뉴 각 단계를 아코디언으로 만들어 한 번에 하나씩만 펼쳐지고 들여쓰기로
     단계가 뚜렷이 구분되도록 했다(대메뉴 클릭→그 중메뉴 목록만 표시, 중메뉴 클릭→그 소메뉴만
     회색 박스로 표시, 소메뉴 클릭→바로 이동). JS는 main.js의 bindMobileToggle()/bindMegaMenu() 참고. */
  nav.gnb.mobile-open{
    position:fixed;top:122px;left:0;right:0;bottom:0; /* 122px = util-bar(38px)+header-row(84px), gnb-backdrop과 동일 기준 */
    background:#fff;
    overflow-y:auto;-webkit-overflow-scrolling:touch;
    /* ⚠️ 스크롤 체이닝(scroll chaining) 차단 필수 - body를 position:fixed로 고정해도, 이
       메뉴 목록 자체가 자기 스크롤 끝(맨 아래/맨 위)에 닿은 뒤에도 계속 같은 방향으로
       스와이프하면 브라우저가 남은 스크롤량을 부모(바깥 페이지)로 "넘겨줘" 배경이 메뉴 틈
       사이로 딸려 올라오는 게 보였다(2026-08-15 사용자가 정확한 재현 순서로 재확인 - "메뉴를
       끝까지 스크롤한 뒤 한 번 더 스와이프하면 뒤 배경이 보임").
       ⚠️ contain → none으로 재조정(2026-08-15, 같은 날 재지적) - contain은 체이닝(부모로
       스크롤이 넘어가는 것)만 막을 뿐, 이 요소 "자기 자신"의 네이티브 고무줄 바운스 효과는
       그대로 남겨둔다. 그 결과 스와이프하는 동안(손가락이 움직이는 순간) 메뉴 목록 자체가
       경계를 살짝 넘어 탄성적으로 늘어나며 뒤 배경이 잠깐 비쳐 보이다가, 손을 떼고 바운스가
       제자리로 돌아오는 순간(=화면이 멈추는 순간) 다시 메뉴에 가려 사라지는 것이었다 - 사용자가
       원하는 "스크롤해도 메뉴만 보여야 한다"는 동작에는 이 바운스 효과 자체도 없어야 해서,
       체이닝뿐 아니라 이 요소 자신의 오버스크롤 효과까지 완전히 끄는 none으로 교체. */
    overscroll-behavior-y:none;
    z-index:60;
  }
  /* 메뉴가 열려 있는 동안 배경 페이지 스크롤 잠금 - overflow:hidden 하나만으로는 iOS 등 모바일
     브라우저의 터치 스크롤(고무줄 바운스 포함)을 못 막아, 메뉴 뒤 페이지가 함께 움직이는
     문제가 있었다(2026-08-15 사용자 지적). body를 현재 스크롤 위치에 position:fixed로 고정해
     스크롤할 대상 자체가 없게 만드는 방식으로 교체 - top 값은 main.js가 열 때마다 인라인으로
     현재 위치를 넣어준다. overscroll-behavior도 이중 안전장치로 함께 건다. */
  /* ⚠️ html도 함께 잠가야 한다 - 표준모드의 실제 스크롤 루트(document.scrollingElement)는
     보통 <body>가 아니라 <html>이라, body만 잠그면 html이 여전히 스크롤돼(사용자가 "두 번째
     스와이프에서 화면 오른쪽에 스크롤바만 보인다"고 정확히 짚어준 현상 - html이 스크롤되고
     있었다는 증거) 배경이 계속 비쳐 보였다. height:100%도 필수 - 지정하지 않으면
     position:fixed라도 박스 자체가 콘텐츠 높이만큼 커져 있어 overflow:hidden이 자기 자신에게는
     효과가 없었다(벤치마킹 대상 국민체육진흥공단 kspo.or.kr의 실제 스크롤잠금 클래스 .scrlOff -
     position:fixed;height:100%;width:100%;overflow:hidden!important -를 직접 확인해 반영). */
  html.mobile-menu-open,
  body.mobile-menu-open{overflow:hidden;position:fixed;width:100%;height:100%;overscroll-behavior:none;}
  /* ⚠️ util-bar/header는 원래 position:relative(정적 배치)라, body를 이 스크롤 위치에서
     -top으로 밀어 올리면(바로 위 규칙) 문서 맨 위에 있는 이 둘도 body와 함께 화면 밖(위쪽)으로
     같이 밀려나 버린다 - 그 결과 메뉴 오버레이 상단 122px 여백(nav.gnb.mobile-open의
     top:122px)에 원래 있어야 할 헤더 대신, 스크롤해서 내려와 있던 다른 부분(예: 히어로
     배너)이 그 틈으로 올라와 보였다(2026-08-15 사용자 스크린샷 확인 - "위로 스와이프하면
     히어로 배너가 메뉴 위에 보임", INST/BIZ 공통). 메뉴가 열려 있는 동안만 이 둘을 뷰포트
     상단에 별도로 고정시켜(body의 이동과 무관하게) 항상 실제 헤더(닫기 버튼 포함)가 보이도록
     한다 - z-index는 메뉴 오버레이(60)보다 높게. */
  /* ⚠️ 2026-08-20 추가(사용자 정밀 재현 - "다국어지원을 탭하면 글자 배경이 음영으로 눌렸다가
     떼면 원상복귀되지만 화면은 전혀 안 바뀐다", 햄버거를 안 연 상태에서는 정상 동작) - JS
     이벤트/CSS z-index/DOM 히트테스트(elementFromPoint)는 전부 정상으로 확인됐는데도(이
     세션 조사 기록 참고) 실기기에서만 재현되는 것으로 보아, 실제 터치 히트테스트를 담당하는
     컴포지터 스레드가 static→fixed로 막 전환된 요소의 새 레이어를 즉시 인식하지 못하는
     안드로이드 브라우저(삼성 인터넷 등, 폴드 계열 기본 브라우저)의 알려진 부류의 버그로
     추정된다. transform 힌트를 줘서 position:fixed 전환 시점에 강제로 별도 컴포지팅
     레이어를 만들게 하면(GPU 레이어 승격) 컴포지터가 새 레이어를 곧바로 인식해 이런 종류의
     "보이는 위치와 실제 터치 히트테스트 위치가 어긋나는" 문제가 해소되는 경우가 많다 -
     레이아웃에는 영향이 없는 순수 렌더링 힌트라 부작용 없이 방어적으로 적용.
     ⚠️ header.site-header에는 절대 걸지 말 것 - nav.gnb(다음 규칙, position:fixed)가 DOM상
     header.site-header의 자식이라, header에 transform을 걸면 CSS 스펙상 header가 nav.gnb의
     새 containing block이 되어버려 nav.gnb의 top:122px 기준이 뷰포트가 아니라 header 자신의
     박스로 바뀌는 바람에 전체화면 메뉴 오버레이 자체가 찌그러지는(height:0) 회귀가 실제로
     발생함을 이 세션에서 직접 확인(적용 직후 재현·발견 후 즉시 되돌림) - .util-bar에는 그런
     fixed 자손이 없어 안전하지만 header.site-header는 위험하므로 .util-bar에만 적용한다. */
  body.mobile-menu-open .util-bar{position:fixed;top:0;left:0;right:0;z-index:70;transform:translateZ(0);}
  body.mobile-menu-open header.site-header{position:fixed;top:38px;left:0;right:0;z-index:70;}
  /* 2026-08-25 - 모바일 전체메뉴가 열려 있을 때 .util-bar가 z-index:70으로 위 고정되는데,
     "다국어지원"(.lang-switch)을 누르면 그 드롭다운(.lang-switch-menu)이 전체메뉴 오버레이보다
     아래 쌓임순서라 눌러도 아무것도 안 보이고 터치 음영만 생기는 문제(사용자 신고) - 드롭다운
     쌓임순서를 고치는 대신, 요청대로 전체메뉴가 열려 있는 동안은 "다국어지원" 항목 자체를
     숨긴다. 양옆 구분선(.divider)이 겹쳐 남지 않도록 뒤쪽 구분선도 함께 숨긴다. */
  body.mobile-menu-open .util-bar .lang-switch,
  body.mobile-menu-open .util-bar .lang-switch + .divider{display:none;}

  /* 햄버거 ⇄ X 아이콘 전환 - main.js가 열림/닫힘에 따라 .mobile-toggle에 .is-open을 토글한다 */
  .mobile-toggle span{transition:transform .18s ease, opacity .18s ease;}
  .mobile-toggle.is-open span:nth-child(1){transform:translateY(6px) rotate(45deg);}
  .mobile-toggle.is-open span:nth-child(2){opacity:0;}
  .mobile-toggle.is-open span:nth-child(3){transform:translateY(-6px) rotate(-45deg);}

  nav.gnb.mobile-open > ul{flex-direction:column;flex-wrap:nowrap;width:100%;}
  nav.gnb.mobile-open > ul > li{width:100%;}
  nav.gnb.mobile-open > ul > li > a{
    height:auto;width:100%;padding:16px 24px;
    border-bottom:1px solid var(--line);
    justify-content:space-between;white-space:normal;
    font-size:16px;font-weight:800;
  }
  nav.gnb.mobile-open > ul > li:last-child > a{border-bottom:none;}

  /* 대메뉴 하위(중/소메뉴) 아코디언 - 기본 접힘, 대메뉴를 탭하면(JS) 그 대메뉴의 .mega만 펼쳐진다 */
  nav.gnb.mobile-open .mega{
    position:static;width:100%;border:none;border-radius:0;box-shadow:none;
    background:var(--bg-soft);
  }
  nav.gnb.mobile-open .mega-left{display:none;}
  nav.gnb.mobile-open .mega-cols{flex-direction:column;flex-wrap:nowrap;padding:8px 24px 16px;gap:2px;}
  nav.gnb.mobile-open .mega-col{width:100%;}

  /* 중메뉴("- 라벨") - 탭하면 그 아래 소메뉴 박스만 펼쳐지고(JS), 같은 화면 안의 다른 중메뉴는 접힌다 */
  nav.gnb.mobile-open .mega-col > .mid{
    display:block;padding:12px 4px;font-size:14.5px;font-weight:700;
    color:var(--ink-800);border-bottom:1px solid var(--line);margin-bottom:0;
  }
  nav.gnb.mobile-open .mega-col > .mid::before{content:'– ';color:var(--ink-400);font-weight:400;}
  nav.gnb.mobile-open .mega-col:last-child > .mid{border-bottom:none;}

  /* 소메뉴 목록 - 기본 접힘(JS로 display 토글), 펼쳐지면 회색 박스 안에 들여쓴 목록으로 표시 */
  nav.gnb.mobile-open .mega-col > ul{
    display:none;background:#fff;border-radius:10px;
    margin:8px 0 14px;padding:4px 8px;
  }
  nav.gnb.mobile-open .mega-col > ul li > a{
    display:block;padding:11px 14px;font-size:13.5px;color:var(--ink-700);
  }
  nav.gnb.mobile-open .mega-col > ul li:not(:last-child) > a{border-bottom:1px dashed var(--line);}

  /* 히어로 영역 가운데 정렬(신규, 2026-07-31 - 반응형 버그 수정)
     모바일에서는 옆에 붙던 장식 그래픽(.action-graphic)이 이미 1100px 이하에서 숨겨지므로,
     남은 텍스트도 좌측 정렬보다 가운데 정렬이 더 안정적으로 보인다. */
  .hero-inner{text-align:center;}
  .hero-tag{margin-left:auto;margin-right:auto;}
  .hero h1,.hero p.lead{margin-left:auto;margin-right:auto;}
  .hero .cta-row,.hero-stats{justify-content:center;}
}
@media (max-width:640px){
  .grid-3,.grid-4{grid-template-columns:1fr 1fr;}
  .hero-inner{padding:64px 0 56px;}
  .portal-main h1{font-size:30px;}
  .section{padding:52px 0;}
}

/* ---------- Notice panel / SNS section 반응형 (Phase 5, 2026-08-02) ---------- */
/* 데스크톱(폭 900px 초과)에서는 사이드바 세로 탭 그대로라 화살표가 필요 없으므로 기본은 숨김 -
   ≤900px 미디어쿼리 안에서만 실제로 보이게 override한다(.card-swipe-nav와 동일한 관례). */
.notice-tabs-arrow{display:none;}
@media (max-width:900px){
  .notice-panel{flex-direction:column;}
  .notice-sidebar{flex:none;padding:26px;}
  /* 2026-08-29 - 탭 5개(전체공지/일반공지/입찰공고/유관기관 공고/채용정보)가 flex-wrap:wrap
     때문에 좁은 화면에서 두 줄로 꺾여 보이던 것(사용자 스크린샷으로 확인)을, 한 줄 가로 스크롤
     + 좌우 화살표(main.js bindNoticeTabsSwipe 참고) + 손가락 스와이프(overflow-x:auto라 네이티브로
     이미 됨)로 개편. 참고 이미지(국민체육진흥공단 kspo.or.kr "새소식" 탭)처럼 탭 사이를 "|"로
     구분하는 텍스트형 디자인으로 바꿔, 배경/테두리가 있던 기존 버튼형보다 더 많은 탭이 좁은
     폭에도 여유 있게 들어가게 함. */
  .notice-tabs-swipe-wrap{position:relative;margin-top:16px;padding:0 28px;}
  .notice-sidebar .tabs.tabs-vertical{
    flex-direction:row;flex-wrap:nowrap;margin-top:0;
    overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none;
  }
  .notice-sidebar .tabs.tabs-vertical::-webkit-scrollbar{display:none;}
  .tabs.tabs-vertical button{border-left:none;border-bottom:3px solid transparent;padding:8px 10px;font-size:14px;white-space:nowrap;flex:0 0 auto;}
  .tabs.tabs-vertical button.active{border-left-color:transparent;border-bottom-color:var(--gold);}
  .biz-page .tabs.tabs-vertical button.active{border-bottom-color:#FFB37A;}
  .tabs.tabs-vertical button + button::before{content:'|';margin-right:8px;color:rgba(255,255,255,.28);font-weight:400;}
  .biz-page .tabs.tabs-vertical button + button::before{color:rgba(255,255,255,.35);}
  .notice-tabs-arrow{
    display:flex;align-items:center;justify-content:center;position:absolute;top:50%;
    transform:translateY(-50%);width:26px;height:26px;border:none;padding:0;border-radius:50%;
    background:rgba(255,255,255,.14);color:#fff;font-size:14px;font-weight:800;line-height:1;
    cursor:pointer;z-index:2;transition:opacity .2s ease;
  }
  .notice-tabs-arrow-left{left:0;}
  .notice-tabs-arrow-right{right:0;}
  .notice-tabs-swipe-wrap.at-start .notice-tabs-arrow-left{opacity:0;pointer-events:none;}
  .notice-tabs-swipe-wrap.at-end .notice-tabs-arrow-right{opacity:0;pointer-events:none;}
  .notice-content{padding:24px;}
  .notice-more-btn{position:static;margin-top:14px;}
  /* 2026-08-13 폰트 확대(데스크톱 34px/19px) 이후 - 사이드바가 세로로 쌓이는 좁은 화면에서는
     "NOTICE"/추천 게시글 제목이 그대로 커지면 배지 옆에서 여러 줄로 빽빽하게 꺾여 보기 불편해져
     한 단계 낮춰 조정(다른 요소는 데스크톱 값 그대로 - 이미 세로 스택 구조라 폭 문제 없음). */
  .notice-sidebar-brand{font-size:13px;}
  .notice-sidebar-title{font-size:27px;}
  .notice-sidebar-desc{font-size:13px;}
  .post-list.notice-list li:first-child a{font-size:16px;}
  .sns-panel{padding:0 46px;}
  .sns-col{flex-basis:300px;padding:22px 20px;}
  .sns-carousel-arrow{width:38px;height:38px;font-size:19px;}
}
@media (max-width:560px){
  .grid-3.reveal .card-photo-thumb{aspect-ratio:16/9;}
  .sns-panel{padding:0 38px;}
  .sns-col{flex-basis:250px;}
  .sns-carousel-arrow{width:32px;height:32px;font-size:16px;}
  .sns-card-grid{gap:8px;}
  .sns-card-title{font-size:11px;}
}

/* ---------- Reveal on scroll ---------- */
.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease, transform .6s ease;}
.reveal.in-view{opacity:1;transform:translateY(0);}

/* ---------- Hero slides (표준 롤링 배너 템플릿, 2026-08-02) ----------
   .hero-slides 하나로 여러 슬라이드를 자동/수동 전환하는 범용 엔진(main.js의 bindHeroSlides()).
   기본형은 콘텐츠 슬라이드(display:none/block 전환), .hero-slides.photo를 추가하면
   실사진 풀블리드 배경 + 어두운 그라디언트 오버레이가 있는 크로스페이드 슬라이드로 바뀐다.
   메인 비주얼(히어로)뿐 아니라 향후 팝업존 등 다른 롤링 배너에도 이 구조를 그대로 재사용할 수 있다. */
.hero-slides{position:relative;}
.hero-slides .slide{display:none;}
.hero-slides .slide.show{display:block;}
.hero-dots{display:flex;gap:8px;margin-top:38px;}
.hero-dots button{width:9px;height:9px;border-radius:50%;border:none;background:rgba(255,255,255,.35);padding:0;cursor:pointer;}

.hero-slides.photo{position:absolute;inset:0;overflow:hidden;z-index:-1;}
.hero-slides.photo .slide{display:block;position:absolute;inset:0;opacity:0;transition:opacity 1.1s ease;background-size:cover;background-position:center;}
.hero-slides.photo .slide.show{opacity:1;}
.hero-slides.photo::after{content:'';position:absolute;inset:0;
  /* 2026-08-02 수정: 사진이 너무 어둡게 나온다는 피드백으로 오버레이를 크게 밝혔다(55~82%→18~42%).
     대신 글자 가독성은 위 .hero h1/.hero p.lead의 text-shadow로 보완한다. */
  background:linear-gradient(180deg,rgba(8,16,34,.18) 0%,rgba(8,16,34,.22) 45%,rgba(8,16,34,.42) 100%);}

.hero-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:3;width:44px;height:44px;border-radius:50%;
  border:1px solid rgba(255,255,255,.5);background:rgba(10,20,40,.35);color:#fff;font-size:20px;line-height:1;
  display:flex;align-items:center;justify-content:center;cursor:pointer;backdrop-filter:blur(2px);transition:background .2s;}
.hero-arrow:hover{background:rgba(10,20,40,.62);}
.hero-arrow.prev{left:20px;}
.hero-arrow.next{right:20px;}
@media (max-width:760px){.hero-arrow{display:none;}}

/* ---------- 팝업존(Phase 4, 2026-08-02 신설 / 2026-08-10 전면 개편) ----------
   [2026-08-10 개편] 사용자가 연구개발특구진흥재단(이노폴리스) 홈페이지 스크린샷을 제시하며 요청 -
   가운데 640px 카드 1개를 화살표로 넘겨보던 캐러셀 방식에서, 등록된 팝업 전부(또는 화면에 들어가는
   만큼)를 화면 위에 동시에 나란히 띄우는 방식으로 전면 교체. 배경(.popup-zone-backdrop)은 페이지를
   덮는 반투명 막일 뿐 스크롤을 가로채지 않는다(overflow:hidden도, wheel을 막는 JS도 없음) - 그래서
   팝업이 열려 있는 동안에도 마우스 휠로 뒤쪽 페이지가 그대로 스크롤된다(요청하신 이노폴리스와
   동일한 동작). 카드가 화면 폭을 넘칠 만큼 많으면 가로 스크롤 트랙(.popup-zone-track)이 되고
   좌우 화살표(.popup-zone-nav)로 넘겨볼 수 있다. 이 레이어는 Phase 0의 .hero-slides 캐러셀
   엔진과 더 이상 관련이 없다(카드를 전부 동시에 보여주는 구조라 "현재 슬라이드 1장만 표시"하는
   그 엔진과 맞지 않아 별도 코드(main.js의 renderPopupCards()/bindPopupTrackNav())로 분리했다). */
.popup-zone{position:fixed;inset:0;z-index:200;display:none;flex-direction:column;align-items:center;
  justify-content:center;gap:20px;padding:32px 20px;}
.popup-zone.show{display:flex;}
.popup-zone-backdrop{position:absolute;inset:0;background:rgba(6,12,28,.72);}

.popup-zone-stage{position:relative;z-index:1;width:100%;max-width:1180px;display:flex;align-items:center;gap:10px;}
/* 2026-08-10 버그수정 - 모바일에서 팝업 3장 중 왼쪽(1번째)으로 스크롤하면 카드가 1/3만 보이고
   더 못 가던 문제(사용자 신고). 원인은 justify-content:center를 넘치는(overflow) 가로 스크롤
   컨테이너에 쓰면 생기는 잘 알려진 브라우저 동작 - 가운데 정렬을 위해 필요한 "왼쪽 가상 여백"만큼
   콘텐츠를 밀어두는데, scrollLeft는 음수로 갈 수 없어 그 여백만큼 첫 카드의 시작 지점에 도달하지
   못하고 스크롤이 막혀버린다(실측: scrollLeft=0인데도 첫 카드가 트랙 보이는 영역보다 왼쪽 바깥에
   있었음). 반대편(오른쪽 넘침)은 정상적인 양수 스크롤 범위라 문제없이 끝까지 갔던 것도 이 때문.
   표준 해결책인 `justify-content:safe center`는 이 시점(2026-08) 모바일 브라우저에서도 지원이
   고르지 않아(실제로 이 프로젝트가 검증에 쓰는 브라우저에서도 안 먹힘을 확인) 신뢰할 수 없다고
   판단, 기본값은 항상 안전한 flex-start로 두고 main.js의 bindPopupTrackNav()가 "카드가 화면에
   다 들어가 스크롤이 필요 없을 때만" JS로 center를 켜주는 방식으로 모든 브라우저에서 동일하게
   동작하도록 만들었다(아래 .popup-zone-track은 fallback 겸 기본값, 실제 값은 JS가 매번 계산). */
.popup-zone-track{flex:1;min-width:0;display:flex;justify-content:flex-start;
  gap:22px;overflow-x:auto;scroll-snap-type:x proximity;padding:4px 2px 16px;scrollbar-width:none;}
.popup-zone-track::-webkit-scrollbar{display:none;}

.popup-zone-card{position:relative;flex:0 0 auto;width:min(360px, 82vw);scroll-snap-align:center;
  background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 18px 46px rgba(0,0,0,.35);}
.popup-zone-card-media{display:block;width:100%;max-height:74vh;object-fit:contain;background:var(--bg-soft);}
.popup-zone-card-media-link{display:block;}
.popup-zone-card-x{position:absolute;top:10px;right:10px;z-index:2;width:30px;height:30px;border-radius:50%;
  background:rgba(0,0,0,.45);color:#fff;border:none;font-size:19px;line-height:1;display:flex;
  align-items:center;justify-content:center;cursor:pointer;transition:background .15s;}
.popup-zone-card-x:hover{background:rgba(0,0,0,.68);}

.popup-zone-nav{flex:0 0 auto;width:44px;height:44px;border-radius:50%;border:1px solid rgba(255,255,255,.5);
  background:rgba(10,20,40,.55);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;
  justify-content:center;cursor:pointer;backdrop-filter:blur(2px);transition:background .2s;}
.popup-zone-nav:hover{background:rgba(10,20,40,.82);}
.popup-zone-nav[disabled]{opacity:.3;cursor:default;pointer-events:none;}

/* 하단 고정 컨트롤 바 - "팝업건수: 총 N건 / 닫기 / 오늘 하루 열지 않기" 3개를 알약형 바 안에 배치
   (이노폴리스 스크린샷의 하단 바 구조 그대로). 체크박스가 아니라 버튼 - 클릭하면 즉시 닫히고,
   "오늘 하루 열지 않기"는 추가로 자정까지 다시 뜨지 않는 쿠키까지 설정한다. */
.popup-zone-bar{position:relative;z-index:1;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  justify-content:center;background:rgba(10,20,40,.72);backdrop-filter:blur(3px);border-radius:999px;
  padding:9px 10px 9px 20px;box-shadow:0 6px 20px rgba(0,0,0,.32);}
.popup-zone-count{color:#fff;font-size:13.5px;font-weight:600;white-space:nowrap;}
.popup-zone-btn{display:flex;align-items:center;gap:6px;font-size:13.5px;font-weight:700;color:var(--navy-800);
  background:#fff;border:none;border-radius:999px;padding:8px 16px;cursor:pointer;white-space:nowrap;
  transition:background .15s;}
.popup-zone-btn svg{width:12px;height:12px;}
.popup-zone-btn:hover{background:#E7ECF6;}
.biz-page .popup-zone-btn{color:var(--orange-700);}
.biz-page .popup-zone-btn:hover{background:#FBE3D3;}

@media (max-width:760px){
  .popup-zone{gap:16px;padding:22px 14px;}
  .popup-zone-card{width:min(300px, 80vw);}
  .popup-zone-card-media{max-height:60vh;}
  .popup-zone-nav{width:36px;height:36px;font-size:18px;}
}
@media (max-width:480px){
  .popup-zone-card{width:82vw;}
  .popup-zone-bar{padding:8px 8px 8px 16px;}
  .popup-zone-count{width:100%;text-align:center;}
}

/* ---------- 로컬내비게이션(LNB) 표준 템플릿, 2026-08-02 신설 / 같은 날 위치·크기·색상 수정 ----------
   서브페이지 상단의 <div id="subHero"></div> 하나에 menu-api.js의 kospoleRenderSubHero()가
   ①대메뉴 대표 사진("서브 메인 비주얼") + 큰 제목, ②사진과 본문 "경계선"에 걸쳐지는 흰 박스형
   중메뉴 탭(1단계 로컬내비, 형제 중메뉴가 2개 이상일 때만), ③그 아래 얇은 회색 바의 소메뉴 탭
   (2단계 로컬내비, 형제 소메뉴가 2개 이상일 때만)을 자동으로 채워 넣는다. 메뉴 API 로드 전/실패
   시에는 style="display:none"으로 시작해 아무것도 보이지 않고, 기존 .subpage-head(브레드크럼+
   h1) 바가 그대로 폴백으로 남는다.
   [2026-08-02 수정] 처음엔 중메뉴 탭을 사진 안(.sub-hero-inner)에 넣고 overflow:hidden으로
   잘라 화면 중간에 떠 보이는 문제가 있었음(KOREATECH는 탭이 사진과 본문 "경계선"에 위치).
   사진(.sub-hero-photo)에 고정 높이를 주고, 탭 바(.lnb-tabs-mid-wrap)는 사진의 형제 요소로
   정상 흐름에 배치한 뒤 음수 margin-top으로 사진 하단 경계에 겹치도록 바꿔 해결. 탭 세로 폭과
   폰트 크기도 키우고, hover/active 색을 KOREATECH와 동일한 계열의 주황(--lnb-orange)으로 변경. */
.sub-hero{position:relative;}
.sub-hero-photo{position:relative;height:300px;overflow:hidden;background-size:cover;background-position:center;}
.sub-hero-photo::after{content:'';position:absolute;inset:0;
  /* 2026-08-02 수정: 사진이 너무 어둡게 나온다는 피드백으로 오버레이를 크게 밝혔다(38~68%→15~40%). */
  background:linear-gradient(180deg,rgba(8,16,34,.15) 0%,rgba(8,16,34,.4) 100%);}
.biz-page .sub-hero-photo::after{background:linear-gradient(180deg,rgba(50,8,14,.15) 0%,rgba(50,8,14,.4) 100%);}
/* 2026-08-24 - 대메뉴명 글자(.sub-hero-title, 정보공개/사업안내 등 전 페이지 공통)가 흰색
   (color:#fff)인데도 화면상 회색으로 보인다는 사용자 신고(스크린샷) - 원인은 색상값이 아니라
   쌓임 순서(stacking order)였다: .sub-hero-inner와 위 ::after 오버레이가 둘 다 position만
   지정되고 z-index는 없어(z-index:auto) 같은 스태킹 레벨에서 DOM 순서로 그려지는데, ::after가
   문서상 .sub-hero-inner "뒤"에 생성되는 가상 요소라 실제로는 반투명 남색 그라데이션이 흰 글자
   "위"에 덧칠되고 있었다(글자를 어둡게 하려던 게 아니라 사진을 어둡게 하려던 오버레이인데
   방향이 뒤바뀐 상태) - 그 결과 흰색 글자가 이 레이어를 통과하며 탁한 회색으로 보인 것.
   .sub-hero-inner에 z-index:1을 줘 오버레이보다 위로 올려 해결(사진 어둡게 하는 효과 자체는
   그대로 유지 - 글자만 그 위로 올라옴). #subHero를 쓰는 34개 이상의 모든 페이지(INST+BIZ
   공통)에 한 번에 적용된다. */
.sub-hero-inner{position:relative;z-index:1;height:100%;display:flex;align-items:center;color:#fff;}
.sub-hero-title{font-size:36px;font-weight:800;margin:0;letter-spacing:-.01em;text-shadow:0 2px 12px rgba(0,0,0,.4);}

.lnb-tabs{display:flex;list-style:none;margin:0;padding:0;}
.lnb-tabs-mid-wrap{position:relative;z-index:2;margin-top:-32px;}
.lnb-tabs-mid{background:#fff;border-radius:14px 14px 0 0;box-shadow:0 -8px 26px rgba(0,0,0,.1);overflow:hidden;}
.lnb-tabs-mid a{flex:1 1 0;text-align:center;padding:23px 16px;font-size:19px;font-weight:700;
  color:var(--ink-700);text-decoration:none;white-space:nowrap;transition:background .15s,color .15s;
  position:relative;}
.lnb-tabs-mid a:hover,.lnb-tabs-mid a.active{background:var(--lnb-orange-a11y);color:#fff;}
/* 항목 구분선(2026-08-02 요청) - 탭이 여러 개일 때 항목 사이에 흐린 세로선을 넣어 경계를
   구분한다. 마지막 항목 뒤에는 넣지 않는다. hover/active로 배경이 채워진 탭 바로 앞의
   구분선은 시각적으로 자연스럽게 배경색에 묻히도록 남겨둔다(별도 처리 없이도 무난함). */
.lnb-tabs-mid a:not(:last-child)::after{content:'';position:absolute;top:50%;right:0;
  transform:translateY(-50%);width:1px;height:22px;background:rgba(20,23,31,.12);}

.lnb-tabs-leaf-wrap{background:var(--bg-soft);border-bottom:1px solid var(--line);}
.lnb-tabs-leaf{gap:24px;flex-wrap:wrap;padding:17px 0;}
.lnb-tabs-leaf a{font-size:18px;font-weight:500;color:var(--ink-500);text-decoration:none;padding-bottom:5px;border-bottom:2px solid transparent;
  position:relative;}
.lnb-tabs-leaf a:not(:last-child)::after{content:'';position:absolute;top:50%;right:-13px;
  transform:translateY(-50%);width:1px;height:14px;background:var(--line);}
.lnb-tabs-leaf a:hover{color:var(--ink-700);}
.lnb-tabs-leaf a.active{color:var(--navy-800);font-weight:800;border-bottom-color:var(--lnb-orange);}
/* 2026-08-02: 사업(BIZ) 로컬내비게이션도 기관과 동일하게 주황 활성색으로 통일해달라는 요청에
   따라, 레드 계열로 덮어쓰던 기존 .biz-page 오버라이드를 제거함(의도적 삭제, 색상 누락 아님). */

/* 2026-08-10 전면 개편 - 좁은 화면(갤럭시 폴드6를 접었을 때 등)에서 중메뉴(.lnb-tabs-mid, 형제가
   많으면 3열로 줄바꿈)와 소메뉴(.lnb-tabs-leaf) 탭이 화면 대부분을 차지해 본문을 보려면 한참
   스크롤해야 하던 문제(사용자 스크린샷 확인) - 한국기술교육대학교 모바일 화면을 참고 사례로 제시,
   모바일에서는 이 두 탭 바를 아예 숨기고 사진 배너(.sub-hero-photo, 대메뉴명)만 남긴다. 같은
   대메뉴 안 다른 소메뉴로 이동은 상단 햄버거 전체메뉴로만 가능해지는 트레이드오프가 있음을
   사용자에게 확인받고 진행(코리아텍도 동일한 방식). 소메뉴 단위의 상세 위치는 바로 아래
   .subpage-head가 "제목+작은 브레드크럼"으로 대신 보여준다(다음 규칙 참고). */
@media (max-width:760px){
  .sub-hero-photo{height:200px;}
  .sub-hero-title{font-size:24px;}
  .lnb-tabs-mid-wrap,.lnb-tabs-leaf-wrap{display:none;}
}

/* ---------- 서브페이지 공통 (게시판 목록/상세, 신청서/신고 폼) ---------- */
/* 2026-08-25 전면개편(사용자 요청, KOREATECH 벤치마킹) - 예전엔 "브레드크럼(작은 텍스트, 1줄) →
   제목(큰 글씨, 1줄)"이 세로로 쌓이고 배경이 회색(--bg-soft)이었다. 이제 배경을 흰색으로 없애고,
   제목(좌측)과 "홈아이콘 › 대메뉴 › 중메뉴 › 소메뉴(클릭 가능) + 글자크기/공유/인쇄 아이콘"
   (우측)을 한 줄에 배치한다. 실제 DOM 재구성(.subpage-head-row/.subpage-head-nav 클래스 부착,
   #crumb를 툴바와 함께 감싸기)은 menu-api.js의 kospoleEnsureSubpageHeadNav()가 페이지 로드 시
   런타임에 수행한다(페이지마다 다른 마크업 변형 - 순수 .wrap 직계 자식인 페이지도 있고
   board-list.html/org-directory.html처럼 .board-head-row 안에 한 번 더 감싼 페이지도 있어, 34개
   페이지 HTML을 일일이 고치는 대신 이 방식을 택함 - menu-api.js 주석 참고). */
.subpage-head{padding:32px 0;border-bottom:1px solid var(--line);background:#fff;}
.subpage-head h1{font-size:26px;margin:0;}
.subpage-head-row{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:18px;
  flex:1;min-width:0;} /* flex:1 - .board-head-row(외부 flex) 안에서도 폭을 꽉 채워야 좌/우 배치가 의미가 있다 */
.subpage-body{padding:40px 0 80px;}

.subpage-head-nav{display:flex;align-items:center;gap:18px;flex-wrap:wrap;}
.subpage-head .crumb{display:flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-500);}
.crumb-sep{color:var(--ink-400,#9AA3B5);font-size:11px;}
.crumb-link{display:inline-flex;align-items:center;color:inherit;}
.crumb-link:hover{color:var(--navy-800);text-decoration:underline;}
.biz-page .crumb-link:hover{color:var(--red-600-text);}
.crumb-link.is-current{color:var(--ink-900);font-weight:700;}
.crumb-link.crumb-home svg{width:14px;height:14px;display:block;}

.subpage-head-tools{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.sht-btn{display:flex;align-items:center;justify-content:center;width:30px;height:30px;flex-shrink:0;
  border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink-700);cursor:pointer;transition:background .15s ease;}
.sht-btn:hover{background:var(--bg-soft);}
.sht-btn svg{width:14px;height:14px;}
.sht-share-wrap{position:relative;}
.sht-share-popup{position:absolute;top:calc(100% + 10px);right:0;z-index:60;min-width:168px;
  background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-md);
  padding:8px;display:flex;flex-direction:column;gap:1px;}
/* 2026-08-25(버그 수정) - 위 .sht-share-popup{display:flex}가 HTML의 hidden 속성(기본값 display:none)과
   클래스 선택자 vs 속성 선택자로 동일한 우선순위라, 이 규칙이 나중에 로드되며 항상 이겨버려서
   버튼을 누르지 않아도 공유 풍선메뉴가 계속 펼쳐진 채로 보이던 문제(사용자 스크린샷 확인) -
   [hidden]을 명시적으로 덮어써 실제로 숨겨지도록 한다. */
.sht-share-popup[hidden]{display:none;}
.sht-share-popup button{display:flex;align-items:center;gap:10px;padding:9px 10px;border:none;background:none;
  border-radius:var(--radius-sm);color:var(--ink-900);font-size:13.5px;cursor:pointer;text-align:left;width:100%;}
.sht-share-popup button:hover{background:var(--bg-soft);}
.sht-share-popup svg{width:16px;height:16px;flex-shrink:0;color:var(--ink-700);}

/* 공유 > URL 복사 완료 토스트(document.body에 1개만 생성, kospoleShowToast 참고) */
.kospole-toast{position:fixed;left:50%;bottom:40px;transform:translate(-50%,12px);z-index:200;
  background:var(--ink-900);color:#fff;font-size:13.5px;font-weight:700;padding:12px 22px;border-radius:999px;
  box-shadow:var(--shadow-md);opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;}
.kospole-toast.is-visible{opacity:1;transform:translate(-50%,0);}

/* 공유 > QR코드 모달(document.body에 1개만 생성, kospoleShowQrModal 참고) */
.kospole-qr-modal{position:fixed;inset:0;z-index:210;display:flex;align-items:center;justify-content:center;
  background:rgba(15,23,42,.5);opacity:0;pointer-events:none;transition:opacity .15s ease;}
.kospole-qr-modal.is-open{opacity:1;pointer-events:auto;}
.kospole-qr-box{position:relative;background:#fff;border-radius:var(--radius-lg);padding:32px 36px;text-align:center;box-shadow:var(--shadow-lg);}
.kospole-qr-box img{width:200px;height:200px;display:block;margin:0 auto 14px;border:1px solid var(--line);border-radius:var(--radius-sm);}
.kospole-qr-box p{margin:0;font-size:13px;color:var(--ink-500);max-width:220px;}
.kospole-qr-close{position:absolute;top:10px;right:10px;width:28px;height:28px;border-radius:50%;border:none;
  background:var(--bg-soft);color:var(--ink-700);display:flex;align-items:center;justify-content:center;cursor:pointer;}
.kospole-qr-close svg{width:14px;height:14px;}

@media (max-width:760px){
  .subpage-head{padding:24px 0 20px;}
  .subpage-head h1{font-size:22px;}
  .subpage-head-row{flex-direction:column;align-items:flex-start;gap:12px;}
  .subpage-head-nav{width:100%;justify-content:space-between;flex-wrap:nowrap;gap:10px;}
  /* 브레드크럼이 길어지면(대메뉴>중메뉴>소메뉴 전부 표시) 좁은 화면에서 아이콘 툴바를 밀어내지
     않도록, 브레드크럼만 자체 가로 스크롤(페이드 힌트 포함 - 이 사이트가 이미 여러 곳에서 쓰는
     패턴)로 전환하고 툴바는 항상 오른쪽에 고정 노출한다. */
  .subpage-head .crumb{flex:1;min-width:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
    white-space:nowrap;
    mask-image:linear-gradient(to right,#000 calc(100% - 18px),transparent 100%);
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 18px),transparent 100%);}
  .subpage-head .crumb::-webkit-scrollbar{display:none;}
  .subpage-head-tools{flex-shrink:0;}
  .sht-share-popup{right:auto;left:50%;transform:translateX(-50%);}
}

/* 2026-08-25 신설 - 초협소 화면(갤럭시 폴드 접은 화면 등, 이 프로젝트가 이미 여러 곳에서 480px을
   초협소 기준으로 써옴)에서는 브레드크럼과 아이콘 툴바가 한 줄에 억지로 들어가며 서로 붙어
   답답해 보인다는 사용자 신고 - 브레드크럼을 자체 폭(100%)의 한 줄로, 툴바를 그 아래 두 번째
   줄로 분리한다(flex-wrap으로 자동 개행 - 마크업 변경 없이 CSS만으로 처리). */
@media (max-width:480px){
  .subpage-head-nav{flex-wrap:wrap;}
  .subpage-head .crumb{flex-basis:100%;}
  .subpage-head-tools{margin-left:auto;}
}

/* 게시판 목록(board-list.html) 상단 헤드 - 페이지 제목 + 외부 사이트 바로가기 버튼(선택) */
.board-head-row{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:14px;}

/* 게시판 목록 상단 - 총 게시물 건수 + 검색바(제목검색) */
.board-list-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;margin-bottom:14px;}
.board-total{font-size:16px;color:var(--ink-500);font-weight:700;}
.board-search{display:flex;gap:6px;}
.board-search select{padding:8px 10px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:14px;background:#fff;color:var(--ink-700);}
.board-search input[type=text]{padding:8px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:14px;min-width:220px;}
/* 2026-08-10 - 검색어 입력창의 고정 min-width:220px 때문에 갤럭시 폴드6를 접었을 때(~344px) 등
   좁은 화면에서 "검색" 버튼이 화면 밖으로 밀려 잘려 보이던 문제(사용자 스크린샷 확인). 좁은
   화면에서는 입력창이 자유롭게 줄어들 수 있게 하고, 그래도 모자라면 검색줄 전체가 다음 줄로
   넘어가도록 wrap을 허용한다. */
@media (max-width:480px){
  .board-search{flex-wrap:wrap;}
  .board-search input[type=text]{min-width:0;flex:1;}
}
.board-search button{padding:8px 20px;border-radius:var(--radius-sm);border:none;background:var(--ink-900);color:#fff;font-weight:700;font-size:13px;cursor:pointer;}
.board-search button:hover{opacity:.9;}

/* 판매점 찾기(store-finder.html, 2026-08-25 신설) - 지역검색(시도/시군구)/상호&도로검색
   두 박스 + 지도 영역(카카오 API 미연동 시 placeholder) + 결과 표. */
.store-search-panel{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px;}
.store-search-box{flex:1 1 320px;background:var(--bg-soft);border-radius:var(--radius-lg);padding:20px 22px;}
.store-search-label{font-size:15px;font-weight:800;color:var(--ink-900);margin-bottom:12px;}
.store-search-row{display:flex;flex-wrap:wrap;gap:8px;}
.store-search-row select,.store-search-row input[type=text]{padding:9px 12px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:14px;background:#fff;color:var(--ink-700);flex:1 1 130px;min-width:0;}
.store-search-row button{flex:0 0 auto;padding:9px 22px;border-radius:var(--radius-sm);border:none;font-weight:700;font-size:14px;cursor:pointer;}
.store-search-row button:hover{opacity:.9;}
@media (max-width:640px){
  .store-search-panel{flex-direction:column;}
  /* column 방향에서는 flex-basis가 폭이 아니라 "높이"로 적용되어, 데스크톱용 320px 값이
     그대로 각 박스의 최소 높이가 되어버려 조회 버튼 아래에 큰 공백이 생겼다(2026-08-25 확인).
     세로 배치에서는 내용물 높이만큼만 차지하도록 flex-basis를 auto로 재정의. */
  .store-search-box{flex:1 1 auto;}
  .store-search-row{flex-wrap:wrap;}
  .store-search-row select,.store-search-row input[type=text]{flex-basis:100%;}
  .store-search-row button{flex-basis:100%;}
}

/* 지도 영역 - 카카오 API 키가 없을 때는 placeholder만 보이고(높이는 실제 지도가 들어갈 때와
   동일하게 고정해둬, 나중에 지도가 붙어도 레이아웃이 흔들리지 않는다), 키가 설정되면
   store-finder.html의 initKakaoMapIfConfigured()가 #kakaoMap을 보이도록 전환한다. */
.store-map-area{position:relative;width:100%;height:360px;border-radius:var(--radius-lg);overflow:hidden;margin-bottom:24px;background:var(--bg-soft);}
.store-map-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--ink-500);text-align:center;padding:20px;border:1px dashed var(--line);border-radius:var(--radius-lg);box-sizing:border-box;}
.store-map-placeholder-icon{font-size:32px;}
.store-map-placeholder-text{font-size:14px;line-height:1.6;}
#kakaoMap{width:100%;height:100%;}
@media (max-width:640px){
  .store-map-area{height:260px;}
}

.store-result-table-wrap{overflow-x:auto;}
.store-result-table{width:100%;border-collapse:collapse;min-width:640px;}
.store-result-table th,.store-result-table td{padding:13px 10px;border-bottom:1px solid var(--line);font-size:14.5px;text-align:center;}
.store-result-table th{color:var(--ink-500);font-weight:700;border-bottom:2px solid var(--ink-900);}
.store-result-table td:nth-child(3){text-align:left;}
.store-result-table td a{font-size:17px;text-decoration:none;}

/* 찾아오시는길(location.html, 2026-08-25 신설) - 본사/IT본부 2개 사업장 지도+주소+교통안내를
   좌우 2열로 배치. store-search-panel이 flex-basis를 잘못 쓴 채로(§49) 컬럼 방향 대응이
   미비했던 전례가 있어, 처음부터 grid로 만들어 모바일에서 flex-direction 전환 없이도
   자연스럽게 1열로 쌓이도록 함. */
.location-cols{display:grid;grid-template-columns:1fr 1fr;gap:36px;margin-bottom:20px;}
@media (max-width:900px){
  .location-cols{grid-template-columns:1fr;gap:28px;}
}
.location-col-title{font-size:20px;font-weight:800;color:var(--ink-900);margin:0 0 14px;padding-bottom:10px;border-bottom:2px solid var(--navy-800);}
.location-map-area{position:relative;width:100%;height:320px;border-radius:var(--radius-lg);overflow:hidden;margin-bottom:16px;background:var(--bg-soft);}
.location-map-placeholder{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--ink-500);text-align:center;padding:20px;border:1px dashed var(--line);border-radius:var(--radius-lg);box-sizing:border-box;}
.location-map-placeholder-icon{font-size:32px;}
.location-map-placeholder-text{font-size:14px;line-height:1.6;}
.location-map-area>div[id^="kakaoMap"]{width:100%;height:100%;}
@media (max-width:900px){
  .location-map-area{height:260px;}
}
.location-info-box{background:var(--bg-soft);border-radius:var(--radius-lg);padding:24px 26px;}
.location-address{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid var(--line);}
.location-address-label{flex:0 0 auto;font-size:13px;font-weight:800;color:#fff;background:var(--navy-800);border-radius:999px;padding:4px 14px;}
.location-address-text{font-size:15.5px;font-weight:700;color:var(--ink-900);}
.location-directions h3{margin:0 0 14px;font-size:16px;font-weight:800;color:var(--ink-900);}
.location-direction-group{display:flex;gap:16px;margin-bottom:14px;}
.location-direction-group:last-child{margin-bottom:0;}
.location-direction-label{flex:0 0 60px;font-size:14px;font-weight:700;color:var(--navy-700);padding-top:2px;}
.location-direction-group ul{list-style:none;margin:0;padding:0;flex:1 1 auto;display:flex;flex-direction:column;gap:6px;}
.location-direction-group li{font-size:16px;color:var(--ink-700);line-height:1.5;}
.bus-tag{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:5px;font-size:11.5px;font-weight:800;color:#fff;margin-right:8px;vertical-align:middle;}
.bus-tag-trunk{background:#2E5FAD;}   /* 간선버스 - 서울시 버스 색상 관례(파랑) */
.bus-tag-branch{background:#3DA34D;}  /* 지선버스 - 서울시 버스 색상 관례(초록) */
.bus-tag-general{background:#6B7280;} /* 일반(직행)버스 - 광역/일반 계열 회색 처리 */
@media (max-width:480px){
  .location-direction-group{flex-direction:column;gap:6px;}
  .location-direction-label{flex:0 0 auto;}
}

.board-table{width:100%;border-collapse:collapse;}
/* 2026-08-10 - 표제목(th)과 "설문대상" 같은 별도 정렬 지정이 없던 일반 데이터 칸(td)이 기본값
   text-align:left라 짧은 값이 넓은 칸 왼쪽에 붙어 삐뚤어 보이는 문제 신고(사용자 스크린샷) -
   civil-board-table/cheer-board-table이 이미 쓰던 방식(기본 가운데 정렬 + 제목 칸만 왼쪽)과
   동일하게 통일했다. th는 항상 가운데(아래 .board-table th에서 지정), td도 기본은 가운데이며
   "제목"(.col-title)만 게시글 제목처럼 긴 글이 자연스럽게 읽히도록 예외적으로 왼쪽 유지. */
.board-table th,.board-table td{padding:14px 10px;border-bottom:1px solid var(--line);font-size:15px;text-align:center;}
.board-table th{color:var(--ink-500);font-weight:700;font-size:15px;border-bottom:2px solid var(--ink-900);}
.board-table td.col-title{text-align:left;}
.board-table td.col-no,.board-table th.col-no{width:60px;color:var(--ink-500);text-align:center;}
.board-table td.col-date,.board-table th.col-date{width:110px;color:var(--ink-500);text-align:center;}
.board-table td.col-view,.board-table th.col-view{width:64px;color:var(--ink-500);text-align:center;}
/* 2026-08-10 - "첨부파일"(4글자) 헤더가 70px 폭에서 두 줄로 꺾이던 문제 수정(사용자 스크린샷
   확인). 이 클래스는 board-list.html뿐 아니라 disclosure-detail.html, info-page.html에 내장된
   게시판형 표(공지사항과 동일한 형태)까지 전부 "첨부파일"이라는 같은 4글자 라벨을 쓰므로, 폭을
   넉넉히 80px로 늘려 어디서든 한 줄로 보이게 했다. `.board-table{width:100%}`+table-layout이
   auto라 이 컬럼이 넓어진 만큼 폭 지정이 없는 "제목" 컬럼이 자동으로 그만큼 줄어든다(별도로
   제목 컬럼 폭을 줄이는 규칙을 추가할 필요가 없음). */
.board-table td.col-attach,.board-table th.col-attach{width:80px;text-align:center;}
/* 2026-08-10 - 설문조사 목록(survey-list.html) 전용 "참여인원"(4글자) 컬럼. 같은 .board-table을
   쓰지만 위 .col-view("조회"/"조회수", 2~3글자)와는 글자 수가 달라 같은 클래스를 공유하면 다른
   페이지의 조회 컬럼까지 불필요하게 넓어지므로, 이 컬럼만 별도 클래스로 분리해 폭을 준다. */
.board-table td.col-participant,.board-table th.col-participant{width:80px;color:var(--ink-500);text-align:center;}
.board-table td.col-attach .file-icon{color:var(--ink-500);}
.board-table td.col-attach a{display:inline-flex;}
.board-table td.col-title a{color:var(--ink-900);}
.board-table td.col-title a:hover{text-decoration:underline;}
/* 2026-08-10 - 좁은 화면(태블릿/폰)에서 번호·제목·담당부서·등록일·조회·첨부파일 6개 컬럼을
   표 형태 그대로 욱여넣으면 셀마다 글자가 여러 줄로 쪼개져 알아보기 어려웠던 문제(사용자
   스크린샷 확인) - 국립환경과학원(nier.go.kr) 사례를 참고해 "제목"과 "담당부서"(또는 그에
   해당하는, 클래스가 없는 일반 칸)만 남기고 번호/등록일/조회/첨부파일은 숨긴다(상세 페이지에서는
   그대로 확인 가능). board-list.html이 쓰는 모든 LIST형 게시판(공지사항/입찰공고/유관기관공고/
   채용정보 등)과 survey-list.html(설문조사)·disclosure-detail.html에 공통 적용된다. */
@media (max-width:640px){
  .board-table th.col-no,.board-table td.col-no,
  .board-table th.col-date,.board-table td.col-date,
  .board-table th.col-view,.board-table td.col-view,
  .board-table th.col-attach,.board-table td.col-attach,
  .board-table th.col-participant,.board-table td.col-participant{display:none;}
  /* 2026-08-24 - 사전정보공표(disclosure-list.html) 전용 컬럼(분야/공표주기/공표시기/공표매체)은
     위 공용 클래스(col-date 등)에 해당하지 않아 그대로 남아 있었던 문제(사용자 신고) - 같은
     "제목/담당부서만 남기고 숨김" 패턴을 이 페이지 전용 클래스로 확장 적용한다(다른 페이지는
     이 클래스를 쓰지 않으므로 영향 없음). */
  .board-table th.col-field,.board-table td.col-field,
  .board-table th.col-cycle,.board-table td.col-cycle,
  .board-table th.col-timing,.board-table td.col-timing,
  .board-table th.col-medium,.board-table td.col-medium{display:none;}
  /* 사전정보공표 검색폼의 "공표주기" select - 공표목록명/검색어/검색버튼 3개만 남기고 숨긴다
     (사용자 요청, 2026-08-24). id 선택자라 이 페이지에만 적용됨. */
  #cycleSelect{display:none;}
}

.pagination{display:flex;justify-content:center;gap:8px;margin-top:28px;}
.pagination button{width:36px;height:36px;border-radius:8px;border:1px solid var(--line);background:#fff;font-weight:700;color:var(--ink-700);cursor:pointer;}
.pagination button.active{background:var(--navy-800);color:#fff;border-color:var(--navy-800);}
.pagination button:disabled{opacity:.4;cursor:default;}

/* 2026-08-19 신설 - FAQ 게시판(faq-list.html) 전용. 대분류 탭(.tabs, 기존 컴포넌트 재사용) +
   소분류 드롭다운 + 아코디언(Q 클릭 시 A가 펼쳐짐) 목록. */
.faq-board .tabs{margin-bottom:14px;}
.faq-category-select{display:block;margin-bottom:20px;padding:10px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:14.5px;font-weight:700;color:var(--ink-700);background:#fff;min-width:220px;}
.faq-list{display:flex;flex-direction:column;gap:10px;}
.faq-empty{padding:60px 0;text-align:center;color:var(--ink-500);font-size:15px;}
.faq-item{border:1px solid var(--line);border-radius:var(--radius-md);background:#fff;overflow:hidden;}
.faq-q{width:100%;display:flex;align-items:center;gap:14px;padding:18px 20px;background:none;border:none;text-align:left;cursor:pointer;font-size:16px;font-weight:700;color:var(--ink-900);}
.faq-q-mark{flex:0 0 30px;height:30px;border-radius:50%;background:var(--navy-800);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;}
.faq-q-text{flex:1;min-width:0;}
.faq-caret{flex:0 0 auto;color:var(--ink-500);transition:transform .2s ease;}
.faq-item.is-open .faq-caret{transform:rotate(180deg);}
.faq-item.is-open .faq-q{border-bottom:1px solid var(--line);}
.faq-a{display:flex;gap:14px;padding:18px 20px;background:var(--bg-soft);}
.faq-a[hidden]{display:none;} /* .faq-a{display:flex}가 명시적 클래스 규칙이라 [hidden]의 UA display:none을 덮어쓰는 문제 방지 */
.faq-a-mark{flex:0 0 30px;height:30px;border-radius:50%;border:1.5px solid var(--navy-800);color:var(--navy-800);display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;}
.faq-a-text{flex:1;min-width:0;font-size:17px;line-height:1.7;color:var(--ink-700);white-space:pre-line;}
@media(max-width:520px){
  .faq-q{padding:15px 16px;font-size:15px;gap:11px;}
  .faq-a{padding:15px 16px;gap:11px;}
  .faq-q-mark,.faq-a-mark{flex-basis:26px;height:26px;font-size:13px;}
}

/* press-view.html 전용(2026-08-24 신설) - post.thumbnailUrl이 있을 때 본문 위에 큰 사진 배너를
   보여준다(온에어 페이지 "보도자료" 항목처럼 사진이 주역인 콘텐츠, 사용자 요청 - 목록과 상세를
   "동일한 형태"로). 없는 글은 이 블록 자체가 생성되지 않아 board-view.html과 완전히 동일하게 보인다. */
.press-view-banner{border-radius:var(--radius-lg);overflow:hidden;margin-bottom:28px;background:var(--bg-soft);}
.press-view-banner img{width:100%;max-height:460px;object-fit:cover;display:block;}

.view-head{border-bottom:2px solid var(--ink-900);padding-bottom:18px;margin-bottom:24px;}
.view-head h1{font-size:24px;margin:0 0 12px;}
.view-meta{display:flex;gap:16px;flex-wrap:wrap;font-size:12.5px;color:var(--ink-500);}
.view-content{min-height:200px;padding:28px 4px;font-size:17px;line-height:1.8;color:var(--ink-900);white-space:pre-line;}
/* 본문 HTML 업로드(2026-08-07 신규, Post.htmlYn='Y') 전용 - 일반 텍스트용 white-space:pre-line은
   HTML 자체의 줄바꿈/공백 처리와 충돌하므로 여기서 normal로 되돌리고, 크롤링 HTML에 흔한 고정폭
   이미지/표가 화면을 벗어나지 않도록 반응형 처리만 추가한다(그 외 레이아웃은 원본 HTML/인라인
   style을 그대로 신뢰 - PostHtmlSanitizer가 저장 시점에 위험 요소만 제거했을 뿐 서식은 보존함). */
.view-content-html{white-space:normal;overflow-x:auto;}
.view-content-html img{max-width:100%;height:auto;}
.view-content-html table{max-width:100%;}
/* 본문 사진 삽입(신규, 2026-07-31) - 관리자 화면에서 [[이미지:URL]] 마커로 삽입한 사진이
   본문 중간에 자연스럽게 나오도록 블록 요소로 표시한다. */
.view-content-img{display:block;max-width:100%;height:auto;margin:16px auto;border-radius:8px;}
.view-actions{display:flex;justify-content:center;margin-top:28px;}

/* 기사 링크 미리보기 카드([[기사:URL]] 마커, 2026-08-07 신규) - 카카오톡/네이버블로그 링크 카드와
   같은 개념. 기사 전문이 아니라 언론사가 공개한 Open Graph 메타데이터(제목/요약/썸네일)만
   보여주고, 클릭하면 원문을 새 탭에서 연다(저작권 보호 - PostService/LinkPreviewService 참고). */
.link-preview-card{display:flex;gap:0;margin:16px 0;border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;text-decoration:none;color:inherit;transition:border-color .15s ease,box-shadow .15s ease;}
.link-preview-card:hover{border-color:var(--navy-700);box-shadow:0 2px 10px rgba(0,0,0,.08);}
.biz-page .link-preview-card:hover{border-color:var(--orange-600);}
.link-preview-thumb{flex:0 0 140px;height:105px;background:var(--bg-soft);}
.link-preview-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.link-preview-thumb-empty{display:flex;align-items:center;justify-content:center;font-size:28px;color:var(--ink-500);}
.link-preview-body{flex:1;min-width:0;padding:12px 16px;display:flex;flex-direction:column;justify-content:center;gap:4px;}
.link-preview-site{font-size:11.5px;color:var(--ink-500);font-weight:700;}
.link-preview-title{font-size:14.5px;font-weight:700;color:var(--ink-900);overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.link-preview-desc{font-size:12.5px;color:var(--ink-700);line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;}
.link-preview-linktext{font-size:11.5px;color:var(--navy-700);font-weight:700;margin-top:2px;}
.biz-page .link-preview-linktext{color:var(--orange-600-text);}
@media (max-width:520px){
  .link-preview-thumb{flex-basis:96px;height:96px;}
  .link-preview-title{-webkit-line-clamp:2;}
  .link-preview-desc{display:none;}
}

.form-panel{background:var(--bg-soft);border-radius:var(--radius-lg);padding:36px;max-width:640px;margin:0 auto;}
.form-row{margin-bottom:18px;}
.form-row label{display:block;font-size:13.5px;font-weight:700;margin-bottom:8px;color:var(--ink-900);}
.form-row input[type="text"],.form-row input[type="tel"],.form-row input[type="email"],.form-row select,.form-row textarea{
  width:100%;padding:12px 14px;border-radius:10px;border:1px solid var(--line);font-size:14px;font-family:inherit;background:#fff;
}
.form-row textarea{min-height:140px;resize:vertical;}
.form-check{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink-700);font-weight:400;}
.form-actions{display:flex;justify-content:center;margin-top:8px;}
.form-result{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);padding:28px;max-width:640px;margin:24px auto 0;text-align:center;}
.form-result .receipt-no{font-size:22px;font-weight:800;color:var(--navy-800);margin:10px 0 18px;}
.form-lookup{display:flex;gap:8px;max-width:360px;}
.form-lookup input{flex:1;padding:10px 12px;border-radius:8px;border:1px solid var(--line);}
.form-error{color:var(--red-600-text);font-size:13.5px;margin-top:10px;}
.hero-dots button.active{background:#fff;width:22px;border-radius:5px;}

/* ---------- 정보/제도 안내 페이지 공통 (info-page.html) ----------
   지원대상/수수료 등 "제도 소개 + 표 + 외부 사이트 바로가기 버튼"
   구조를 갖는 콘텐츠 페이지 전반에서 재사용한다. 사이트(INST/BIZ)
   포인트 컬러는 body 클래스(inst-page/biz-page)에 따라 자동으로 바뀐다. */
.info-intro{
  display:flex;align-items:center;gap:24px;
  background:var(--bg-soft);border-radius:var(--radius-lg);
  padding:32px 36px;margin-bottom:32px;
}
.info-intro-icon{
  flex-shrink:0;width:76px;height:76px;border-radius:50%;
  background:#fff;box-shadow:var(--shadow-sm);
  display:flex;align-items:center;justify-content:center;
}
.info-intro-icon svg{width:34px;height:34px;stroke:var(--navy-700);}
.biz-page .info-intro-icon svg{stroke:var(--red-600);}
.info-intro-text p{margin:0 0 6px;font-size:19px;line-height:1.7;color:var(--ink-700);}
.info-intro-text p:last-child{margin-bottom:0;}

/* panel의 markText 옵션(2026-07-31, 경영공시 등) - SVG 아이콘 대신 원 안에 "ALIO" 같은 짧은
   텍스트 마크가 필요할 때. 기존 .info-intro-icon(흰 배경+그림자) 대신 남색/레드 그라데이션 배경에
   굵은 흰 텍스트로 표시한다(예전 헤더 로고 마크와 동일한 톤). */
.info-intro-icon.mark-text{
  background:linear-gradient(135deg,var(--navy-700),var(--navy-900));
  box-shadow:none;color:#fff;font-weight:900;font-size:14px;letter-spacing:.02em;text-align:center;
}
.biz-page .info-intro-icon.mark-text{background:linear-gradient(135deg,var(--red-600),var(--orange-500));}

/* panel의 labeledLines 옵션(2026-07-31, 경영공시 ALIO/KSPO 태그 줄) - 문단 앞에 붙는 작은 굵은 태그 */
.info-intro-tag-line{display:flex;gap:8px;align-items:baseline;}
.info-intro-tag-line .tag-label{flex-shrink:0;font-weight:800;font-size:12.5px;color:var(--navy-700);min-width:66px;}
.biz-page .info-intro-tag-line .tag-label{color:var(--red-600-text);}

/* linkTabs 섹션 타입(2026-07-31, 경영공시 "항목별 보고서") - 균등폭 외부링크 탭바 */
.link-tab-bar{display:flex;flex-wrap:wrap;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff;}
.link-tab-item{
  flex:1 1 0;min-width:100px;text-align:center;padding:14px 8px;
  font-size:14px;font-weight:600;color:var(--ink-700);text-decoration:none;
  border-right:1px solid var(--line);border-bottom:1px solid transparent;
  transition:background .15s ease,color .15s ease;
}
.link-tab-item:last-child{border-right:none;}
.link-tab-item:hover{background:var(--bg-soft);color:var(--navy-700);}
.biz-page .link-tab-item:hover{color:var(--red-600-text);}
@media (max-width: 720px){
  .link-tab-item{flex:1 1 25%;border-bottom:1px solid var(--line);}
}

/* linkGroups 섹션 타입(2026-07-31, ESG경영공시) - "E.환경/S.사회/G.지배구조"처럼 분류별
   링크 목록이 2단 컬럼에 배치되는 구성. 컬럼당 그룹 개수가 달라도(오른쪽에 그룹 하나가 길게,
   왼쪽에 그룹 두 개가 짧게 등) 각 컬럼은 세로 flex로 그룹을 순서대로 쌓기만 하면 되므로
   그대로 대응된다. */
.esg-groups{display:grid;grid-template-columns:1fr 1fr;gap:0 48px;align-items:start;}
.esg-col{display:flex;flex-direction:column;gap:32px;}
.esg-group-title{font-size:17px;font-weight:800;color:var(--ink-900);margin:0 0 14px;padding-bottom:10px;border-bottom:2px solid var(--ink-900);}
.esg-link-list{display:flex;flex-direction:column;gap:8px;}
.esg-link-item{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:14px 16px;border:1px solid var(--line);border-radius:8px;
  font-size:14.5px;font-weight:600;color:var(--ink-800);text-decoration:none;
  transition:background .15s ease,border-color .15s ease;
}
.esg-link-item:hover{background:var(--bg-soft);border-color:var(--navy-700);}
.biz-page .esg-link-item:hover{border-color:var(--red-600);}
.esg-link-item svg{width:13px;height:13px;flex-shrink:0;color:var(--ink-400);}
@media (max-width: 720px){
  .esg-groups{grid-template-columns:1fr;}
}

/* linkChipGrid 섹션 타입(2026-08-21, BIZ_RELATED_GROUPS 관련단체 페이지 전용) - 위
   .esg-link-item(세로 목록)과 달리 항목이 많은 카테고리(프로축구 25개팀 등)도 세로로
   과도하게 길어지지 않도록 칩(pill)을 가로로 흐르게 배치. 시각적 톤은 esg-link-item과
   맞추되(테두리+호버 시 배경/테두리 강조) inline-flex로 내용 폭만큼만 차지한다. */
.link-chip-grid{display:flex;flex-wrap:wrap;gap:10px;}
.link-chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:10px 16px;border:1px solid var(--line);border-radius:999px;
  font-size:13.5px;font-weight:600;color:var(--ink-800);text-decoration:none;
  background:#fff;white-space:nowrap;
  transition:background .15s ease,border-color .15s ease,color .15s ease;
}
.link-chip:hover{background:var(--bg-soft);border-color:var(--navy-700);color:var(--navy-800);}
.biz-page .link-chip:hover{border-color:var(--red-600);color:var(--red-600-text);}
.link-chip svg{width:11px;height:11px;flex-shrink:0;color:var(--ink-400);}

/* pageTabs 섹션 타입(신규, 2026-07-31, ESG경영 추진체계) - 제목 바로 아래 탭 바 + 탭별 sections 전환.
   timeline-tabs와 같은 톤(밑줄 강조)이지만 폭이 자유로운 좀 더 큰 탭 버튼 스타일을 쓴다.
   2026-08-02: 탭 바로 아래 본문이 너무 붙어 보인다는 피드백에 margin-bottom을 28px→44px로 넉넉하게 키움
   (밑줄형/박스형 두 변형 모두 동일하게 적용해, pageTabs를 쓰는 모든 페이지에 일괄 반영됨). */
.page-tab-bar{display:flex;gap:4px;border-bottom:2px solid var(--line);margin-bottom:44px;}
.page-tab-btn{
  padding:12px 22px;font-size:15px;font-weight:700;color:var(--ink-500);
  background:none;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;cursor:pointer;
}
.page-tab-btn.active{color:var(--navy-800);border-bottom-color:var(--navy-800);}
.biz-page .page-tab-btn.active{color:var(--red-600-text);border-bottom-color:var(--red-600);}

/* pageTabs의 tabStyle:'boxed' 변형(신규, 2026-08-02, 윤리경영) - "아이디어 제안" 페이지의
   .idea-tabs와 동일한 등분할 테두리 박스형 탭(활성 탭은 남색 배경 채움). 기존 밑줄형(.page-tab-btn
   기본 스타일)은 그대로 두고, 이 클래스가 추가로 붙었을 때만 완전히 다른 모양으로 덮어쓴다. */
.page-tab-bar--boxed{
  display:flex;gap:0;border:1px solid var(--line);border-radius:var(--radius-md);
  overflow:hidden;border-bottom:1px solid var(--line);margin-bottom:44px;
}
.page-tab-bar--boxed .page-tab-btn{
  flex:1;text-align:center;padding:16px 12px;font-size:15px;font-weight:700;color:var(--ink-500);
  background:#fff;border:none;border-right:1px solid var(--line);margin-bottom:0;
}
.page-tab-bar--boxed .page-tab-btn:last-child{border-right:none;}
.page-tab-bar--boxed .page-tab-btn:hover{background:var(--bg-soft);}
.page-tab-bar--boxed .page-tab-btn.active{background:var(--navy-800);color:#fff;border-bottom:none;}
/* 2026-09-02 웹접근성 점검(검사항목 8) - 흰 텍스트(color:#fff, 위 규칙에서 상속)와 짝지어지는
   배경이라 --red-600(4.17:1, 미달) 대신 --red-700(5.71:1)을 쓴다. */
.biz-page .page-tab-bar--boxed .page-tab-btn.active{background:var(--red-700);}
@media (max-width:640px){
  .page-tab-bar--boxed{flex-wrap:wrap;}
  .page-tab-bar--boxed .page-tab-btn{flex:1 1 50%;border-bottom:1px solid var(--line);}
  /* 2026-08-20 - 이벤트 안내(event-list.html, #statusTabBar) 탭 3개(전체/진행중/종료)는
     위 공용 2열 규칙(짝수 개를 염두에 두고 만든 규칙) 그대로 쓰면 2+1로 줄바꿈되어 마지막
     "종료" 탭만 다음 줄에 혼자 남는 어색한 모양이 됨(사용자 스크린샷 확인). 다른 페이지(공표
     목록 6개, 윤리경영 5개 등 개수가 더 많거나 라벨이 긴 곳)의 기존 2열 줄바꿈은 그대로 두고,
     라벨이 짧은 이 탭바만 id로 좁혀 항상 한 줄 3등분으로 유지한다. */
  #statusTabBar.page-tab-bar--boxed{flex-wrap:nowrap;}
  #statusTabBar.page-tab-bar--boxed .page-tab-btn{flex:1 1 0;border-bottom:none;padding:14px 6px;font-size:13.5px;}
  /* 2026-08-24 - 사전정보공표(disclosure-list.html, #fieldTabBar) 6개 탭이 위 공용 2열 규칙으로
     3행까지 쌓여 세로로 길어 보인다는 사용자 피드백 - 짝수(6개)라 3열로 바꿔도 2행에 고르게
     떨어지므로(3+3) 이 탭바만 id로 좁혀 3등분으로 변경. 라벨이 최대 4글자(경영일반/인사총무/
     계약구매/홍보협력)라 statusTabBar와 동일하게 패딩·폰트를 줄여 3등분 폭에 맞춘다. */
  #fieldTabBar.page-tab-bar--boxed .page-tab-btn{flex:1 1 33.3333%;padding:14px 6px;font-size:13.5px;}
}

/* leadStatement 섹션 타입(신규, 2026-07-31, ESG 경영비전) - 볼드 제목 + 설명 문단. */
.lead-statement{background:var(--bg-soft);border-radius:var(--radius-lg);padding:28px 32px;}
.lead-statement-headline{font-size:19px;font-weight:800;color:var(--ink-900);line-height:1.5;margin-bottom:12px;}
.lead-statement p{font-size:16px;color:var(--ink-700);line-height:1.7;margin:0;}

/* esgDirectionGrid 섹션 타입(신규, 2026-07-31, ESG 추진방향) - E/S/G 3단 카드. */
.esg-direction-intro{font-size:14px;color:var(--ink-500);margin:0 0 18px;line-height:1.6;}
.esg-direction-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;}
.esg-direction-col{background:var(--bg-soft);border-radius:var(--radius-lg);padding:24px 22px;}
.esg-direction-tag{font-size:13px;font-weight:800;color:var(--navy-700);margin-bottom:10px;}
.biz-page .esg-direction-tag{color:var(--red-600-text);}
.esg-direction-title{font-size:15.5px;font-weight:800;color:var(--ink-900);line-height:1.5;margin-bottom:14px;min-height:2.9em;}
@media (max-width:820px){
  .esg-direction-grid{grid-template-columns:1fr;}
}

/* esgTaskGroups 섹션 타입(신규, 2026-07-31, ESG 핵심과제) - 분류별 번호 목록. */
.esg-task-groups{display:flex;flex-direction:column;gap:28px;}
.esg-task-group-title{font-size:16.5px;font-weight:800;color:var(--ink-900);padding-bottom:10px;border-bottom:2px solid var(--ink-900);margin-bottom:16px;}
.esg-task-list{display:flex;flex-direction:column;gap:14px;}
.esg-task-item{display:flex;gap:14px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-md);background:#fff;}
.esg-task-no{flex:0 0 auto;font-size:16px;font-weight:800;color:var(--navy-700);}
.biz-page .esg-task-no{color:var(--red-600-text);}
.esg-task-title{font-size:14.5px;font-weight:700;color:var(--ink-900);margin-bottom:4px;}
.esg-task-body p{font-size:13.5px;color:var(--ink-700);line-height:1.6;margin:0;}

/* strategyDirection 섹션 타입(신규, 2026-08-01, 환경경영 전략방향) - 색상 헤더 3단 카드 + 카드
   사이 화살표(→) 연결. 카드 안 항목은 작은 회색 원형 번호 배지 + 텍스트로 구성. */
.strategy-direction-row{display:flex;align-items:stretch;gap:0;}
.strategy-card{flex:1;min-width:0;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;display:flex;flex-direction:column;}
.strategy-card-title{padding:16px 16px;font-size:14px;font-weight:800;color:#fff;text-align:center;line-height:1.4;}
.strategy-card.theme-green .strategy-card-title{background:#2e7d55;}
.strategy-card.theme-blue .strategy-card-title{background:var(--navy-800);}
.strategy-card.theme-purple .strategy-card-title{background:#5b4b9e;}
.strategy-card-body{flex:1;display:flex;flex-direction:column;gap:14px;padding:20px 18px;}
.strategy-item{display:flex;align-items:flex-start;gap:10px;font-size:13.5px;color:var(--ink-700);line-height:1.6;}
.strategy-item p{margin:0;}
.strategy-item-no{
  flex:0 0 auto;width:24px;height:24px;border-radius:50%;background:var(--bg-soft);color:var(--navy-800);
  font-size:12px;font-weight:800;display:flex;align-items:center;justify-content:center;margin-top:1px;
}
.strategy-arrow{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:34px;color:var(--ink-400);font-size:20px;}
@media (max-width:820px){
  .strategy-direction-row{flex-direction:column;gap:10px;}
  .strategy-arrow{width:100%;height:20px;transform:rotate(90deg);}
}

/* orgStructure 섹션 타입(신규, 2026-07-31, ESG 추진조직) - 좌측 라벨 + 우측 박스형 조직도. */
.org-structure{display:flex;flex-direction:column;gap:24px;}
.org-structure-group{display:flex;align-items:flex-start;gap:16px;}
.org-structure-label{
  flex:0 0 128px;display:flex;align-items:center;justify-content:center;text-align:center;
  background:var(--navy-800);color:#fff;font-size:14.5px;font-weight:800;border-radius:var(--radius-lg);
  padding:22px 12px;min-height:64px;
}
.biz-page .org-structure-label{background:var(--red-600);}
.org-structure-arrow{flex:0 0 auto;font-size:22px;color:var(--ink-400);align-self:center;}
.org-structure-rows{flex:1;display:flex;flex-direction:column;gap:12px;min-width:0;}
.org-structure-row{border:1px solid var(--line);border-radius:var(--radius-md);padding:18px 20px;background:#fff;}
.org-structure-row-head{margin-bottom:10px;}
.org-structure-row-title{font-size:15px;font-weight:800;color:var(--ink-900);}
.org-structure-row-subtitle{font-size:13px;color:var(--ink-500);margin-top:2px;}
@media (max-width:720px){
  .org-structure-group{flex-direction:column;}
  .org-structure-label{width:100%;}
  .org-structure-arrow{display:none;}
}

/* categoryBulletGrid 섹션 타입(신규, 2026-07-31, ESG 성과관리) - 단계별 박스 그리드. */
.category-bullet-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;}
.category-bullet-item{border:1px solid var(--line);border-radius:var(--radius-md);padding:20px 22px;background:#fff;}
.category-bullet-title{font-size:15px;font-weight:800;color:var(--ink-900);margin-bottom:10px;}
@media (max-width:820px){
  .category-bullet-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:480px){
  .category-bullet-grid{grid-template-columns:1fr;}
}

/* benefitGrid 섹션 타입(신규, 2026-08-01, 복리후생) - 원형 아이콘 + 제목 + 설명이 담긴 카드 그리드. */
.benefit-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;}
.benefit-card{border:1px solid var(--line);border-radius:var(--radius-md);padding:30px 18px;background:#fff;text-align:center;}
.benefit-icon{width:88px;height:88px;margin:0 auto 18px;border-radius:50%;border:1px solid var(--gold);display:flex;align-items:center;justify-content:center;}
.benefit-icon svg{width:42px;height:42px;color:var(--gold);}
.benefit-title{font-size:16px;font-weight:800;color:var(--ink-900);margin-bottom:8px;}
.benefit-desc{font-size:13px;color:var(--ink-500);line-height:1.6;}
/* benefitGrid item.desc가 배열(2026-08-26, 복리후생 세부항목 여러 줄)일 때의 불릿 목록 - 카드
   자체는 text-align:center라 목록만 inline-block으로 감싸 가운데 배치하고 글자는 좌측정렬한다. */
.benefit-desc-list{list-style:none;margin:0;padding:0;display:inline-block;text-align:left;}
.benefit-desc-list li{position:relative;padding-left:12px;font-size:13px;color:var(--ink-500);line-height:1.6;margin-bottom:4px;}
.benefit-desc-list li:last-child{margin-bottom:0;}
.benefit-desc-list li::before{content:'';position:absolute;left:0;top:7px;width:4px;height:4px;border-radius:50%;background:var(--ink-500);}
.biz-page .benefit-icon{border-color:var(--orange-500);}
.biz-page .benefit-icon svg{color:var(--orange-500);}
@media (max-width:820px){
  .benefit-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:480px){
  .benefit-grid{grid-template-columns:1fr;}
}

/* groupedTable의 items가 문자열일 때(신규, 2026-07-31, ESG 핵심성과지표) - 불릿 없이 한 줄 텍스트로 표시. */
.group-table-text{font-size:14px;color:var(--ink-700);line-height:1.7;}

/* declaration 섹션 타입(신규, 2026-07-31, ESG경영 선언문) - 가운데정렬 선언문 박스.
   2026-08-01: 성혼선언문류 인증서 디자인을 참고해 이중 테두리(남색 바깥선 + 금색 안쪽선)와
   네 모서리 장식(코너 브래킷)을 추가해 "선언문/방침" 다운 격식 있는 느낌을 주었다.
   --decl-accent 변수로 안쪽선·코너 색을 한 번에 관리하며, BIZ 사이트는 오렌지 계열로 자동 전환. */
.declaration-box{
  --decl-accent: var(--gold);
  position:relative;text-align:center;max-width:720px;margin:0 auto;
  padding:48px 44px;border:2px solid var(--navy-800);background:#fff;
}
.declaration-box::before{
  content:'';position:absolute;inset:9px;border:1px solid var(--decl-accent);pointer-events:none;
}
.biz-page .declaration-box{--decl-accent: var(--orange-500);border-color:var(--red-600);}
.declaration-corner{position:absolute;width:20px;height:20px;pointer-events:none;}
.declaration-corner.tl{top:2px;left:2px;border-top:2px solid var(--decl-accent);border-left:2px solid var(--decl-accent);}
.declaration-corner.tr{top:2px;right:2px;border-top:2px solid var(--decl-accent);border-right:2px solid var(--decl-accent);}
.declaration-corner.bl{bottom:2px;left:2px;border-bottom:2px solid var(--decl-accent);border-left:2px solid var(--decl-accent);}
.declaration-corner.br{bottom:2px;right:2px;border-bottom:2px solid var(--decl-accent);border-right:2px solid var(--decl-accent);}
@media (max-width:640px){
  .declaration-box{padding:36px 22px;}
}
.declaration-title{font-size:19px;font-weight:800;color:var(--ink-900);margin-bottom:18px;}
.declaration-intro p{font-size:16px;color:var(--ink-700);line-height:1.8;margin:0 0 24px;}
.declaration-subheading{font-size:16px;font-weight:800;color:var(--navy-800);padding-bottom:10px;border-bottom:2px solid var(--navy-800);display:inline-block;margin:0 auto 22px;}
.biz-page .declaration-subheading{color:var(--red-600-text);border-bottom-color:var(--red-600);}
.declaration-list{display:flex;flex-direction:column;gap:16px;text-align:left;}
.declaration-item{display:flex;align-items:center;gap:16px;font-size:16px;color:var(--ink-700);line-height:1.6;}
/* 2026-08-01(환경경영/에너지경영 방침 참고 개편) - "하나." 표시를 굵은 텍스트에서 원형 배지로
   바꿔 좀 더 정돈된 느낌을 준다. 기존 ESG경영 선언문에도 함께 적용되어 동일하게 개선된다. */
.declaration-item b{
  flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  width:58px;height:58px;border-radius:50%;background:var(--navy-800);color:#fff;
  font-size:13px;font-weight:800;text-align:center;
}
.biz-page .declaration-item b{background:var(--red-600);}

/* policyPoster 섹션 타입(신규, 2026-08-01, 안전보건경영방침) - "이미지처럼 보이는" 포스터형 방침 카드.
   남색 배너 + 서브바 + 흰 배경 본문(번호목록+서명란) + 하단 브랜드바 순서로 구획이 뚜렷하게 나뉜다. */
.policy-poster{max-width:720px;margin:0 auto;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg);border:1px solid var(--line);}
.policy-poster-banner{background:linear-gradient(135deg, var(--navy-900), var(--navy-700));padding:40px 30px 34px;text-align:center;}
.policy-poster-main-title{color:#fff;font-size:25px;font-weight:800;line-height:1.4;word-break:keep-all;}
.policy-poster-subbar{background:var(--bg-soft);text-align:center;padding:16px;font-size:19px;font-weight:800;color:var(--navy-800);letter-spacing:.02em;}
.policy-poster-body{background:#fff;padding:38px 34px;}
.policy-poster-intro p{text-align:center;font-size:15.5px;font-weight:700;color:var(--ink-900);line-height:1.8;margin:0 0 30px;}
.policy-poster-list{display:flex;flex-direction:column;gap:20px;margin-bottom:34px;}
.policy-poster-item{display:flex;gap:16px;align-items:flex-start;}
.policy-poster-no{flex:0 0 auto;width:28px;height:28px;border-radius:6px;background:var(--navy-800);color:#fff;font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;}
.policy-poster-item-title{font-size:15px;font-weight:800;color:var(--ink-900);margin-bottom:4px;}
.policy-poster-item-body p{font-size:13.5px;color:var(--ink-700);line-height:1.7;margin:0;}
.policy-poster-date{text-align:center;font-size:14px;color:var(--ink-700);margin-bottom:18px;}
.policy-poster-signatures{display:flex;justify-content:center;gap:48px;flex-wrap:wrap;}
.policy-poster-sign{text-align:center;}
.policy-poster-sign .org{font-size:13px;color:var(--ink-500);margin-bottom:4px;}
.policy-poster-sign .role-name span{font-size:13.5px;color:var(--ink-700);margin-right:6px;}
.policy-poster-sign .role-name b{font-size:15px;font-weight:800;color:var(--ink-900);}
.policy-poster-footer{background:var(--navy-900);color:#fff;text-align:center;padding:20px;font-size:20px;font-weight:800;letter-spacing:.04em;}
.biz-page .policy-poster-banner{background:linear-gradient(135deg, var(--red-700), var(--red-600));}
.biz-page .policy-poster-subbar{color:var(--red-700);}
.biz-page .policy-poster-no{background:var(--red-600);}
.biz-page .policy-poster-footer{background:var(--red-700);}
@media (max-width:640px){
  .policy-poster-banner{padding:30px 20px;}
  .policy-poster-main-title{font-size:20px;}
  .policy-poster-body{padding:28px 20px;}
  .policy-poster-signatures{flex-direction:column;gap:16px;}
}

/* bigNumberList 섹션 타입(신규, 2026-08-01, 윤리경영철학) - headline+intro 아래 옅은 회색 큰
   번호(01,02...) + 제목 + 본문이 구분선으로 나뉘어 반복되는 목록. */
.big-number-headline{text-align:center;font-size:19px;font-weight:800;color:var(--navy-800);line-height:1.5;margin-bottom:14px;}
.big-number-intro{text-align:center;margin-bottom:8px;}
.big-number-intro p{font-size:16px;color:var(--ink-700);line-height:1.8;margin:0;}
.big-number-items{margin-top:36px;}
.big-number-item{display:flex;gap:32px;align-items:flex-start;padding:32px 0;border-top:1px solid var(--line);}
.big-number-no{flex:0 0 auto;width:88px;font-size:42px;font-weight:800;color:#D7DCE4;line-height:1;}
.big-number-title{font-size:17px;font-weight:800;color:var(--navy-800);margin-bottom:10px;}
.big-number-body p{font-size:14px;color:var(--ink-700);line-height:1.8;margin:0 0 6px;}
@media (max-width:640px){
  .big-number-item{gap:18px;}
  .big-number-no{width:56px;font-size:30px;}
}

/* ethicsStrategyMap 섹션 타입(신규, 2026-08-01, 윤리경영 전략방향) - 3단 카드 → 화살표 →
   원형 허브(좌우 점선박스 설명) → 화살표 → 번호 배지 3단 요약 순서로 이어지는 전략체계 도식. */
.ethics-strategy-cards{display:flex;gap:18px;}
.ethics-strategy-card{flex:1;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;}
.ethics-strategy-card-title{padding:14px 16px;text-align:center;font-weight:800;font-size:14.5px;color:#fff;background:var(--navy-800);}
.ethics-strategy-card.theme-gold .ethics-strategy-card-title{background:var(--gold);color:var(--navy-900);}
.ethics-strategy-card.theme-outline .ethics-strategy-card-title{background:#fff;color:var(--navy-800);border-bottom:2px solid var(--navy-800);}
.ethics-strategy-card-list{list-style:none;margin:0;padding:14px 16px;display:flex;flex-direction:column;gap:8px;}
.ethics-strategy-card-list li{border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;font-size:13px;color:var(--ink-700);text-align:center;}
.ethics-strategy-arrow{text-align:center;font-size:26px;color:var(--ink-400);margin:14px 0;}
.ethics-strategy-hub-row{display:flex;align-items:center;justify-content:center;gap:24px;}
.ethics-strategy-hub-circle{
  flex:0 0 auto;width:150px;height:150px;border-radius:50%;border:2px solid var(--navy-800);
  display:flex;align-items:center;justify-content:center;text-align:center;font-weight:800;
  font-size:14.5px;color:var(--navy-800);padding:10px;line-height:1.4;background:#fff;
}
.ethics-strategy-hub-note{
  flex:1;max-width:260px;border:1px dashed var(--line);border-radius:var(--radius-md);
  padding:16px 18px;font-size:13px;color:var(--ink-700);text-align:center;line-height:1.7;
}
.ethics-strategy-steps{display:flex;gap:18px;margin-top:8px;}
.ethics-strategy-step{flex:1;text-align:center;}
.ethics-strategy-step-no{
  width:32px;height:32px;line-height:32px;border-radius:50%;background:var(--navy-800);color:#fff;
  font-weight:800;font-size:13px;margin:0 auto 12px;
}
.ethics-strategy-step p{font-size:13px;color:var(--ink-700);line-height:1.7;margin:0;padding-top:12px;border-top:1px solid var(--line);}
.biz-page .ethics-strategy-card-title{background:var(--red-600);}
.biz-page .ethics-strategy-card.theme-outline .ethics-strategy-card-title{background:#fff;color:var(--red-700);border-bottom-color:var(--red-700);}
.biz-page .ethics-strategy-hub-circle{border-color:var(--red-700);color:var(--red-700);}
.biz-page .ethics-strategy-step-no{background:var(--red-600);}
@media (max-width:820px){
  .ethics-strategy-cards{flex-direction:column;}
  .ethics-strategy-hub-row{flex-direction:column;}
  .ethics-strategy-hub-note{max-width:none;width:100%;}
  .ethics-strategy-steps{flex-direction:column;gap:20px;}
}

/* orgBandChart 섹션 타입(신규, 2026-08-01, 윤리경영 조직체계) - orgStructure(좌측 라벨형)와 달리
   그룹 라벨이 전체 폭 남색 띠(band)로 표시되는 조직도. */
.org-band-chart{display:flex;flex-direction:column;gap:20px;}
.org-band-label{background:var(--navy-800);color:#fff;font-weight:800;font-size:14.5px;text-align:center;padding:12px;border-radius:var(--radius-sm);}
.biz-page .org-band-label{background:var(--red-600);}
.org-band-rows{display:flex;flex-direction:column;gap:12px;margin-top:12px;}
.org-band-rows.is-row{flex-direction:row;flex-wrap:wrap;}
.org-band-rows.is-row .org-band-row{flex:1 1 0;min-width:180px;}
.org-band-row{border:1px solid var(--line);border-radius:var(--radius-md);padding:16px 18px;background:#fff;}
.org-band-row-title{font-size:14.5px;font-weight:800;color:var(--ink-900);margin-bottom:8px;text-align:center;}
.org-band-row .info-bullet-list{margin:0;}
@media (max-width:640px){
  .org-band-rows.is-row{flex-direction:column;}
}

/* ethicsFrameworkDiagram 섹션 타입(신규, 2026-08-01, 윤리규범체계) - 점선 연결된 원 5개(가운데
   강조 원에 로고 포함) → intro → 박스 2개 → 화살표 → 점선 테두리 마무리 박스 순서. */
.ethics-framework-circles{display:flex;align-items:center;justify-content:center;gap:0;flex-wrap:wrap;margin-bottom:28px;}
.ethics-framework-connector{flex:0 0 32px;height:0;border-top:2px dashed var(--line);}
.ethics-framework-circle{
  flex:0 0 auto;width:110px;height:110px;border-radius:50%;background:var(--navy-800);color:#fff;
  display:flex;align-items:center;justify-content:center;text-align:center;font-size:12.5px;font-weight:700;
  padding:10px;line-height:1.4;
}
.ethics-framework-circle.is-center{width:150px;height:150px;background:#fff;border:1px solid var(--line);color:var(--navy-800);box-shadow:var(--shadow-sm);}
.ethics-framework-circle.is-center span{font-weight:800;font-size:14px;margin-top:6px;}
.ethics-framework-circle-logo{width:36px;height:auto;}
.ethics-framework-intro{text-align:center;margin-bottom:28px;}
.ethics-framework-intro p{font-size:15px;font-weight:700;color:var(--navy-800);line-height:1.8;margin:0;}
.ethics-framework-boxes{display:flex;gap:20px;}
.ethics-framework-box{flex:1;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;}
.ethics-framework-box-title{background:var(--navy-800);color:#fff;text-align:center;font-weight:800;font-size:14.5px;padding:13px;}
.ethics-framework-box-body{padding:20px 22px;}
.ethics-framework-box-body p{font-size:13.5px;color:var(--ink-700);line-height:1.8;text-align:center;margin:0 0 8px;}
.ethics-framework-arrow{text-align:center;font-size:24px;color:var(--ink-400);margin:22px 0;}
.ethics-framework-closing{border:1px dashed var(--navy-700);border-radius:var(--radius-lg);padding:22px 26px;text-align:center;}
.ethics-framework-closing b{display:block;font-size:14px;color:var(--navy-800);margin-bottom:8px;}
.ethics-framework-closing p{font-size:14px;color:var(--ink-700);line-height:1.8;margin:0;}
.biz-page .ethics-framework-circle{background:var(--red-600);}
.biz-page .ethics-framework-circle.is-center{background:#fff;color:var(--red-700);}
.biz-page .ethics-framework-box-title{background:var(--red-600);}
.biz-page .ethics-framework-closing{border-color:var(--red-700);}
.biz-page .ethics-framework-closing b{color:var(--red-700);}
@media (max-width:720px){
  .ethics-framework-connector{flex-basis:14px;}
  .ethics-framework-circle{width:80px;height:80px;font-size:11px;}
  .ethics-framework-circle.is-center{width:110px;height:110px;}
  .ethics-framework-boxes{flex-direction:column;}
}

/* boxedText 섹션 타입(신규, 2026-07-31, 적극행정 정의 등) - 회색 박스 안에 문단만 넣는 단순 정의 박스. */
.boxed-text{background:var(--bg-soft);border-radius:var(--radius-lg);padding:26px 30px;}
.boxed-text p{font-size:16px;color:var(--ink-700);line-height:1.7;margin:0;}
.boxed-text p + p{margin-top:10px;}

/* linkedBox 섹션 타입(신규, 2026-07-31, 적극행정 국민신청 제도/소극행정 소개/사례 등) -
   굵은 제목과 같은 줄 우측에 "바로가기 ›" 링크가 붙는 박스. */
.linked-box{border:1px solid var(--line);border-radius:var(--radius-lg);padding:24px 28px;background:#fff;}
.linked-box-head{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;}
.linked-box-title{font-size:16px;font-weight:800;color:var(--ink-900);}
.linked-box-link{display:inline-flex;align-items:center;gap:3px;font-size:14px;font-weight:700;color:var(--navy-700);text-decoration:none;flex-shrink:0;}
.linked-box-link:hover{text-decoration:underline;}
.linked-box-link .chev{font-weight:400;}
.biz-page .linked-box-link{color:var(--red-600-text);}
.linked-box-text{margin:12px 0 0;font-size:14px;color:var(--ink-700);line-height:1.7;}
/* link.style:'button'(2026-08-26, 뷰어다운로드 전용) - .linked-box-link 대신 .info-intro-btn
   (정보공개 신청하기 .info-cta a와 동일한 네이비 리본 디자인) 버튼을 본문 아래에 배치할 때의 여백. */
.linked-box-btn-wrap{margin-top:16px;}

.info-table{width:100%;border-collapse:collapse;border-top:2px solid var(--ink-900);margin-bottom:32px;}
.info-table tr{border-bottom:1px solid var(--line);}
.info-table th,.info-table td{padding:16px 20px;font-size:16px;text-align:left;vertical-align:top;}
.info-table th{
  width:150px;background:var(--bg-soft);font-weight:700;color:var(--ink-900);
  border-right:1px solid var(--line);
}
.info-table td{color:var(--ink-700);}
.info-table td[colspan]{color:var(--ink-700);}

/* 2026-08-24 - margin-bottom 없이 margin-top만 있어 cta 버튼과 바로 아래 이어지는 섹션 제목이
   맞닿아 보이던 문제(사용자 신고, 정보공개청구 페이지) - 버튼 아래에도 간격을 준다. */
.info-cta{display:flex;justify-content:center;margin-top:8px;margin-bottom:32px;}
/* 2026-08-24 - 사용자가 첨부한 목업(네이비 박스 + 좌상단 파란 삼각 포인트 + 굵은 흰 글씨)에
   맞춰 전면 재디자인. 원본 목업은 Noto Sans KR 900/26px·280px 고정폭이었으나, 실제 버튼은
   "공공데이터 제공 신청하기"처럼 문장형 라벨이 많아 그대로 쓰면 줄바꿈/잘림이 발생하므로
   사이트 기본 폰트(Pretendard, 가변폭이라 900 굵기 자체는 지원됨)에 font-weight만 900으로
   맞추고 폰트 크기·패딩은 실사용 라벨 길이에 맞게 조정했다. 목업에 border-radius가 없어(사각
   모서리) 그대로 반영 - 사이트의 다른 둥근 버튼들과는 의도적으로 다른 "리본형" 룩. 삼각 포인트는
   추가 마크업 없이 ::before 하나로 구현. INST/BIZ 양쪽에 동일한 이미지를 쓰라는 요청이라
   기존 .biz-page 전용 그라데이션 오버라이드는 제거했다(아래 .info-intro-btn도 동일). */
.info-cta a{
  position:relative;overflow:hidden;
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:#132A6F;color:#fff;font-weight:900;font-size:15px;
  padding:16px 32px;border-radius:0;box-shadow:var(--shadow-sm);
  transition:background .15s ease;
}
.info-cta a::before{content:'';position:absolute;top:0;left:0;width:0;height:0;
  border-top:20px solid #359DE3;border-right:20px solid transparent;}
.info-cta a:hover{background:#0E2159;}
.info-cta a svg{width:15px;height:15px;position:relative;flex-shrink:0;}

.info-section{margin-bottom:36px;}
/* section.sectionBoxed 공용 옵션(2026-08-24 신설, info-page.html kospoleRenderSectionsHtml() 참고) -
   섹션 타입에 상관없이 .info-section 전체를 불복구제절차(.hr-group-boxed)와 동일한 회색 박스로
   감싼다(정보공개방법 페이지의 공개원칙~본인 확인 8개 항목, 정보공개청구 페이지의 "오프라인
   정보공개 청구신청" 등). */
.info-section.info-section-boxed{background:var(--bg-soft);border-radius:var(--radius-lg);padding:32px 36px;}
@media (max-width:640px){
  /* 좁은 화면에서 박스 자체 padding(36px)까지 더해지면 안쪽 콘텐츠(특히 "처리흐름도"의
     flow-chart처럼 폭이 필요한 도표)가 지나치게 좁아지므로, .info-intro의 모바일 padding
     (28px 22px)과 같은 수준으로 줄인다. */
  .info-section.info-section-boxed{padding:24px 18px;}
}
/* 2026-08-10 확대(17px/800→22.4px/700) - info-page.html의 모든 "■ 소제목"이 이 클래스 하나를
   공유하므로(section.heading 렌더링, info-page.html의 kospoleRenderIntroSections() 참고) 이 값을
   바꾸면 사회공헌소개뿐 아니라 미션및비전/ESG경영/이사회 일반현황 등 같은 템플릿을 쓰는 모든
   페이지에 공통 적용된다(사용자 명시적 요청). */
.info-section-heading{display:flex;align-items:center;gap:9px;font-size:22.4px;font-weight:700;color:var(--ink-900);margin:0 0 18px;}
.info-section-heading::before{content:'';width:8px;height:8px;flex-shrink:0;background:var(--navy-700);}
.biz-page .info-section-heading::before{background:var(--red-600);}

/* 2026-08-19 신설(후속, BIZ_KTOS 전용) - 이 페이지의 대분류 제목(K-TOS 아키텍처/각 도메인/
   베트맨/상표권)만 하단 세부 항목과 뚜렷이 구분되도록 박스형으로 스타일링한다. info-page.html이
   렌더링 시 body에 붙이는 `info-page-{key}` 클래스로 스코프해 다른 20여개 info-page 콘텐츠에는
   전혀 영향을 주지 않는다. 색상은 사이트 공통 BIZ 레드 대신 K-TOS 다이어그램 원본이 쓰는 팀 톤
   (진한 티일 #0e4d46 + 포인트 밝은 티일 #12b8a0)을 그대로 가져와 본문에 삽입된 다이어그램들과
   시각적으로 한 세트처럼 자연스럽게 어울리게 했다(그라데이션 없이 단색 두 톤만 사용). */
.info-page-biz-ktos .info-section-heading{
  display:block;
  position:relative;
  font-size:22.4px;
  font-weight:700;
  color:#fff;
  background:#0e4d46;
  padding:14px 22px 14px 28px;
  border-radius:10px;
  margin:0 0 22px;
}
.info-page-biz-ktos .info-section-heading::before{
  content:'';
  position:absolute;
  left:0;top:0;bottom:0;
  width:6px;
  background:#12b8a0;
  border-radius:10px 0 0 10px;
}

.info-steps{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;border:1px solid var(--line);border-radius:var(--radius-lg);padding:40px 24px;background:#fff;}
.info-step{display:flex;flex-direction:column;align-items:center;justify-content:center;width:120px;height:120px;border-radius:50%;border:2px solid var(--navy-700);text-align:center;flex-shrink:0;padding:0 10px;}
.biz-page .info-step{border-color:var(--red-600);}
.info-step .no{font-size:20px;font-weight:800;color:var(--navy-700);margin-bottom:4px;}
.biz-page .info-step .no{color:var(--red-600-text);}
.info-step .label{font-size:12.5px;color:var(--ink-700);line-height:1.4;white-space:pre-line;}
.info-step-arrow{color:var(--ink-500);font-size:22px;flex-shrink:0;}

/* ---------- 아이디어 제안 처리절차(idea-proposal.html 전용, 2026-08-24 신설) ----------
   사용자 제공 목업(아이콘 원 + 쉐브론/화살표 모양 5단계 흐름도)을 그대로 이관. 위 .info-step/
   .info-steps(원+화살표, 여러 페이지가 공유하는 컴포넌트)와는 완전히 다른 룩이라 건드리지 않고
   이 페이지 전용 클래스로 신설했다. */
.idea-process-flow{display:flex;align-items:flex-end;}
.idea-process-step{display:flex;flex-direction:column;align-items:center;flex:1;min-width:0;}
.idea-process-step:not(:first-child){margin-left:-24px;}
.idea-process-icon{width:72px;height:72px;border-radius:50%;background:var(--bg-soft);display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0;}
.idea-process-icon svg{width:30px;height:30px;color:var(--ink-700);}
.idea-process-chevron{position:relative;width:100%;height:92px;display:flex;align-items:center;justify-content:center;
  padding:0 8% 0 16%;box-sizing:border-box;
  clip-path:polygon(0% 0%, 88% 0%, 100% 50%, 88% 100%, 0% 100%, 12% 50%);}
.idea-process-badge{position:absolute;left:10%;top:8px;width:22px;height:22px;border-radius:50%;background:rgba(255,255,255,.9);font-size:11.5px;font-weight:900;display:flex;align-items:center;justify-content:center;}
.idea-process-title{position:relative;color:#fff;font-weight:800;font-size:16px;text-align:center;line-height:1.3;white-space:pre-line;}
.idea-process-baseline{height:26px;background:var(--bg-soft);margin-top:-1px;border-radius:0 0 var(--radius-lg) var(--radius-lg);}

@media (max-width:640px){
  .idea-process-flow{flex-direction:column;align-items:stretch;gap:10px;}
  .idea-process-step{flex-direction:row;align-items:center;margin-left:0 !important;gap:14px;}
  .idea-process-icon{margin-bottom:0;}
  .idea-process-chevron{clip-path:none;border-radius:10px;height:auto;flex:1;
    justify-content:flex-start;gap:10px;padding:12px 16px;}
  .idea-process-badge{position:static;flex-shrink:0;}
  .idea-process-title{text-align:left;}
  .idea-process-baseline{display:none;}
}

/* ---------- info-page.html: paragraphs / labeledList / numberedList / disclosureFlow (정보공개방법 등) ---------- */
.info-paragraphs p{margin:0 0 10px;font-size:16.5px;line-height:1.8;color:var(--ink-700);}
.info-paragraphs p:last-child{margin-bottom:0;}

.info-labeled-list{list-style:none;margin:0;padding:0;}
.info-labeled-list li{margin-bottom:18px;}
.info-labeled-list li:last-child{margin-bottom:0;}
.info-labeled-list .label-line{display:flex;align-items:center;gap:8px;margin-bottom:6px;}
.info-labeled-list .label-line .dot{width:5px;height:5px;background:var(--navy-700);flex-shrink:0;}
.biz-page .info-labeled-list .label-line .dot{background:var(--red-600);}
.info-labeled-list .label-line strong{font-size:15px;color:var(--ink-900);}
.info-labeled-list p{margin:0 0 0 13px;font-size:16px;line-height:1.75;color:var(--ink-700);}

/* 2026-08-19 신설(후속, BIZ_KTOS "개요"/"특징" 전용) - labeledList의 라벨 글자 크기를 대분류
   제목(.info-section-heading, 22.4px)과 맞추고 싶을 때 section.size:'lg'로 opt-in한다. 다른
   페이지의 기본 labeledList(예: 도메인 하위 시스템 목록, 정보공개종류 등)에는 영향 없음. */
.info-labeled-list-lg .label-line strong{font-size:22.4px;}

/* 2026-08-19 신설(BIZ_KTOS 전용 htmlEmbed section 타입) - 고정폭(보통 1200px) 다이어그램이나
   단일 이미지를 원본 그대로 삽입할 때 쓰는 컨테이너. 좁은 화면에서 다이어그램이 잘리지 않도록
   자체 가로 스크롤을 갖되, 화면이 다이어그램보다 넓을 때는 가운데 정렬되도록 flex로 감싼다. */
.info-html-embed{overflow-x:auto;border-radius:var(--radius-lg);}
.info-html-embed > *{margin:0 auto;}

/* 2026-08-20 신설(BIZ_VOTING_TICKET splitRow 섹션 타입) - 좌측 표 + 우측 임의 HTML(주로
   거버넌스 다이어그램 등)을 나란히 배치. 우측 다이어그램이 svg viewBox로 반응형이라 min-width:0
   으로 flex 자식이 부모보다 커지지 않게(overflow) 막아준다. ≤860px에서는 세로로 쌓는다. */
.info-split-row{display:flex;gap:32px;align-items:flex-start;}
.info-split-col-table{flex:0 0 var(--split-left-width, 38%);min-width:0;}
.info-split-col-table .info-group-table{width:100%;}
.info-split-col-embed{flex:1 1 auto;min-width:0;}
@media(max-width:860px){
  .info-split-row{flex-direction:column;}
  .info-split-col-table,.info-split-col-embed{flex:1 1 auto;width:100%;}
}

/* 2026-08-19 신설(후속, BIZ_KTOS 전용 sectionNav section 타입) - 본문 상단 목차: 하위 섹션
   바로가기 링크를 칩 형태로 나열한다. 클릭 시 html{scroll-behavior:smooth}(전역, 상단 참고)에
   의해 부드럽게 스크롤 이동한다. 데스크톱/태블릿은 줄바꿈으로 전부 보여주고, 폭이 좁은
   모바일(≤760px)에서만 아래 미디어쿼리로 한 줄 가로 스크롤로 전환한다(2026-08-20, K-TOS
   페이지가 좁은 화면에서 목차 칩 8개가 5줄까지 밀려 지저분해 보인다는 지적에 따른 수정). */
.info-section-nav{display:flex;flex-wrap:wrap;gap:9px;}
.info-section-nav-link{display:inline-flex;align-items:center;padding:9px 16px;border-radius:999px;border:1px solid var(--line);background:#fff;font-size:13.5px;font-weight:600;color:var(--ink-700);text-decoration:none;transition:border-color .15s,color .15s,background .15s;flex-shrink:0;}
.info-section-nav-link:hover{border-color:var(--navy-700);color:var(--navy-700);background:var(--navy-50,#f4f7fb);}
.biz-page .info-section-nav-link:hover{border-color:var(--red-600);color:var(--red-600-text);background:var(--red-50,#fdf3f3);}
@media(max-width:760px){
  .info-section-nav{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px;
    mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);}
  .info-section-nav::-webkit-scrollbar{display:none;}
}

/* 2026-08-20 신설 - "가로 스크롤이 되는데 화살표도 없어서 스와이프해봐야만 더 있는 걸 안다"는
   지적에 따라, 이미 좌우 화살표가 있는 캐러셀(NEWS 카드/SNS/배당률 위젯/팝업존 - 그 자체로
   "더 있음" 신호가 충분함)을 제외한 나머지 모든 가로 스크롤 컨테이너에 공통으로 적용하는
   "오른쪽 끝 페이드" 힌트. mask-image로 스크롤 위치와 무관하게 항상 컨테이너 오른쪽 끝
   28~40px을 투명하게 그라데이션 처리해, 그 안의 콘텐츠(표/다이어그램/칩/링크 등)가 배경색과
   상관없이 자연스럽게 옅어지며 "이 뒤에 더 있다"는 것을 스와이프 없이도 알 수 있게 한다.
   완전히 끝까지 스크롤한 뒤에도 페이드가 옅게 남는 것은 의도된 단순화(스크롤 위치를 감지해
   양 끝에서만 켜고 끄려면 JS가 필요한데, 그정도로 정교하게는 만들지 않음 - 시작 지점에서
   왼쪽에는 페이드를 넣지 않은 것도 같은 이유: 처음엔 왼쪽으로 스크롤할 게 없어 오해를 줄 수
   있어 오른쪽에만 건다). 화면이 넓어 애초에 넘치지 않는 컨테이너에서는 오른쪽 끝 콘텐츠가
   약간 옅어 보일 수 있어 실제로 가로 스크롤이 걸리는 모바일 폭(≤760px)에만 적용한다. */
@media(max-width:760px){
  .data-catalog-table-wrap,
  .info-html-embed,
  .org-chart,
  .cross-bar .wrap,
  .view-content-html{
    mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent 100%);
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent 100%);
  }
}

.info-numbered-list{list-style:none;counter-reset:info-num;margin:0;padding:0;}
.info-numbered-list li{counter-increment:info-num;position:relative;padding-left:24px;font-size:16px;line-height:1.8;color:var(--ink-700);margin-bottom:8px;}
.info-numbered-list li:last-child{margin-bottom:0;}
.info-numbered-list li::before{content:counter(info-num)'.';position:absolute;left:0;top:0;font-weight:700;color:var(--navy-700);}
.biz-page .info-numbered-list li::before{color:var(--red-600-text);}
.info-numbered-note{margin:14px 0 0;font-size:13px;line-height:1.7;color:var(--orange-500);}

/* panel 섹션(.info-intro-text) 안에 문단 아래로 불릿/번호 목록이 이어질 때(수수료 안내의
   "수수료 감면" 등) 문단과 목록 사이 간격을 살짝 띄운다. */
.info-intro-text .info-numbered-list,
.info-intro-text .info-bullet-list{margin-top:8px;}
.info-intro-text .info-numbered-list:last-child,
.info-intro-text .info-bullet-list:last-child{margin-bottom:0;}

.flow-chart{display:flex;flex-direction:column;align-items:center;border:1px solid var(--line);border-radius:var(--radius-lg);padding:32px 20px;background:#fff;}
.flow-row{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;}
.flow-row-branch{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;width:100%;max-width:760px;}
.flow-branch{display:flex;align-items:center;gap:6px;}
.flow-branch-left{justify-self:end;}
.flow-branch-right{justify-self:start;}
.flow-main{justify-self:center;}
.flow-row-two{gap:16px;}
.flow-box{min-width:150px;border:1.5px solid var(--navy-700);border-radius:10px;background:#fff;padding:10px 16px;text-align:center;}
.biz-page .flow-box{border-color:var(--red-600);}
.flow-box .fb-label{font-size:13.5px;font-weight:700;color:var(--ink-900);}
.flow-box .fb-sub{font-size:11.5px;color:var(--ink-500);margin-top:3px;}
.flow-box-full{width:100%;max-width:520px;background:var(--navy-700);border-color:var(--navy-700);}
.flow-box-full .fb-label{color:#fff;}
.flow-box-full .fb-sub{color:rgba(255,255,255,.75);}
.biz-page .flow-box-full{background:var(--red-600);border-color:var(--red-600);}
.flow-arrow-h{color:var(--ink-500);font-size:16px;flex-shrink:0;}
.flow-down-arrow{color:var(--ink-500);font-size:16px;line-height:1;margin:6px 0;}
@media (max-width:640px){
  .flow-row-branch{grid-template-columns:1fr;}
  .flow-branch{justify-self:center !important;}
  .flow-row-pair,.flow-row-two{flex-direction:column;}
}

.info-cards{display:grid;grid-template-columns:repeat(var(--info-cards-cols,4),1fr);border:1px solid var(--line);border-radius:var(--radius-lg);background:#fff;overflow:hidden;}
.info-card-item{padding:34px 16px;text-align:center;border-right:1px solid var(--line);}
.info-card-item:last-child{border-right:none;}
.info-card-icon{width:64px;height:64px;border-radius:50%;background:var(--bg-soft);display:flex;align-items:center;justify-content:center;font-size:26px;margin:0 auto 16px;}
.info-card-item .label{font-size:13px;color:var(--ink-700);line-height:1.5;white-space:pre-line;}

.info-contact{display:flex;flex-wrap:wrap;gap:12px 36px;background:var(--bg-soft);border-radius:var(--radius-md);padding:18px 24px;font-size:15px;color:var(--ink-700);}
.info-contact-item{display:flex;align-items:center;gap:7px;}
.info-contact-item .dot{width:6px;height:6px;border-radius:50%;background:var(--navy-700);flex-shrink:0;}
.biz-page .info-contact-item .dot{background:var(--red-600);}
.info-contact-item b{color:var(--ink-900);font-weight:700;}

/* 인트로 박스 - 로고 이미지 버전(기관소개 등) + 첫 문단 강조 */
.info-intro-logo{
  flex-shrink:0;width:190px;background:#fff;border-radius:var(--radius-md);
  box-shadow:var(--shadow-sm);padding:22px 20px;display:flex;align-items:center;justify-content:center;
}
.info-intro-logo img{width:100%;height:auto;display:block;}
/* 2026-08-01: 기존에는 p:first-child로 "첫 문단=헤드라인"을 구분했으나, introEyebrow(아래)가
   추가되면 실제 DOM상 첫 <p>가 eyebrow가 되어 어긋나는 문제가 있어 명시적 클래스(intro-headline)
   기반으로 바꿨다. 기존 페이지들도 intro[0]에 자동으로 이 클래스가 붙으므로 동일하게 동작한다. */
.info-intro-text.has-headline p{font-size:19px;color:var(--ink-700);}
.info-intro-text.has-headline p.intro-headline{font-size:18.5px;font-weight:800;color:var(--ink-900);margin-bottom:10px;}

/* introEyebrow(선택, 신규 2026-08-01, 환경경영 목표 등) - has-headline 헤드라인 위에 붙는 작은 라벨. */
.info-intro-eyebrow{font-size:12.5px;font-weight:700;color:var(--navy-700);letter-spacing:.02em;margin:0 0 6px;}
.biz-page .info-intro-eyebrow{color:var(--red-600-text);}

/* 연혁(timeline) 섹션 - 연도 탭 필터 + 연대별 그룹 + 연도별 항목 목록.
   향후 새 연도가 추가돼도 코드 변경 없이 자동으로 연대 그룹이 늘어난다. */
.timeline-tabs{display:flex;border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;background:#fff;}
.timeline-tabs button{
  flex:1;background:#fff;border:none;border-right:1px solid var(--line);
  padding:14px 0;font-size:14px;font-weight:700;color:var(--ink-500);cursor:pointer;
}
.timeline-tabs button:last-child{border-right:none;}
.timeline-tabs button.active{color:var(--navy-800);box-shadow:inset 0 -3px 0 var(--navy-800);}
.biz-page .timeline-tabs button.active{color:var(--red-600-text);box-shadow:inset 0 -3px 0 var(--red-600);}

.timeline-decade{margin-top:32px;}
.timeline-decade:first-child{margin-top:24px;}
.timeline-decade > h3{font-size:19px;font-weight:800;color:var(--navy-800);margin:0 0 4px;}
.biz-page .timeline-decade > h3{color:var(--red-600-text);}

.timeline-year{display:flex;gap:24px;padding:22px 6px;border-bottom:1px solid var(--line);}
.timeline-year-label{flex-shrink:0;width:76px;font-size:16px;font-weight:800;color:var(--ink-900);padding-top:1px;}
.timeline-entries{flex:1;display:flex;flex-direction:column;gap:12px;}
.timeline-entry{display:flex;align-items:baseline;gap:10px;font-size:14px;}
.timeline-entry .dot{width:5px;height:5px;background:var(--navy-700);flex-shrink:0;margin-bottom:1px;}
.biz-page .timeline-entry .dot{background:var(--red-600);}
.timeline-entry .month{font-weight:700;color:var(--ink-900);flex-shrink:0;width:32px;}
.timeline-entry .text{color:var(--navy-700);}
.biz-page .timeline-entry .text{color:var(--ink-700);}

@media (max-width:640px){
  .info-intro-logo{width:130px;padding:16px;}
  .timeline-tabs button{font-size:12.5px;padding:12px 0;}
  .timeline-year{flex-direction:column;gap:10px;}
  .timeline-year-label{width:auto;}
}

/* 미션/비전/핵심가치/경영방침 등 - 라벨 + 점선 커넥터 + 콘텐츠 행이 반복되는 구조 */
.value-rows{display:flex;flex-direction:column;gap:36px;}
.value-row{display:flex;align-items:center;}
.value-label{flex-shrink:0;width:100px;font-size:15px;font-weight:800;color:var(--ink-900);}
.biz-page .value-label{color:var(--red-700);}
.value-connector{flex-shrink:0;width:40px;border-top:1px dotted var(--ink-500);margin:0 14px;}
.value-content{flex:1;min-width:0;}

.value-caption{display:block;font-size:14px;font-weight:800;color:var(--navy-700);letter-spacing:.08em;text-transform:uppercase;}
.biz-page .value-caption{color:var(--red-600-text);}

.value-quote-box{border:1px solid var(--line);border-radius:var(--radius-lg);padding:26px 40px;text-align:center;background:#fff;}
.value-quote-box .value-caption{margin-bottom:10px;}
.value-quote-box .quote-text{font-size:19px;font-weight:700;color:var(--ink-900);line-height:1.5;}
.value-quote-box .quote-text .mark{font-size:26px;color:var(--line);font-weight:900;margin:0 4px;display:inline-block;}

.value-icon-grid-wrap .value-caption{text-align:center;margin-bottom:16px;}
.value-icon-grid{display:flex;gap:16px;}
.value-icon-item{flex:1;text-align:center;border:1px solid var(--line);border-radius:var(--radius-md);padding:26px 10px;background:#fff;}
.value-icon-item .icon{font-size:28px;margin-bottom:14px;}
.value-icon-item .title{font-size:15px;font-weight:800;color:var(--ink-900);margin-bottom:4px;}
.value-icon-item .subtitle{font-size:11px;color:var(--navy-700);font-weight:700;letter-spacing:.02em;}
.biz-page .value-icon-item .subtitle{color:var(--red-600-text);}

.value-policy-box{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;}
.value-policy-header{background:var(--navy-700);color:#fff;text-align:center;font-weight:700;font-size:13px;letter-spacing:.06em;padding:11px 0;}
.biz-page .value-policy-header{background:var(--red-600);}
.value-policy-items{display:flex;}
.value-policy-item{flex:1;text-align:center;padding:28px 12px;}
.value-policy-item .icon{width:64px;height:64px;border-radius:50%;background:var(--bg-soft);display:flex;align-items:center;justify-content:center;font-size:26px;margin:0 auto 14px;}
.value-policy-item .title{font-size:14px;font-weight:800;color:var(--ink-900);}

@media (max-width:640px){
  .value-row{flex-direction:column;align-items:flex-start;gap:10px;}
  .value-connector{display:none;}
  .value-icon-grid,.value-policy-items{flex-direction:column;}
}

/* ---------- 미션 및 비전(MISSION_VISION 전용, missionVisionBoard 섹션 타입, 2026-08-24 신설) ----------
   사용자 제공 목업을 그대로 이관 - 네이비 라벨 칸 + 흰 카드 그리드. 위 .value-* 룩(점선 커넥터)과는
   완전히 다른 디자인이라 별도 클래스로 신설했다(.value-quote-box/.value-caption은 framework 섹션과
   공유 중이라 건드리지 않음). 목업 폰트는 Noto Sans KR 900/26px였으나, 실제 문장형 라벨에 맞춰
   사이트 기본 폰트(Pretendard, 가변폭이라 900 굵기 지원)로 대체하고 크기를 조정했다. */
.mvb-rows{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;}
.mvb-row{display:grid;grid-template-columns:170px 1fr;border-bottom:1px solid var(--line);}
.mvb-row:last-child{border-bottom:none;}
.mvb-label{background:var(--navy-800);color:#fff;font-weight:800;font-size:19px;
  display:flex;align-items:center;justify-content:center;text-align:center;
  line-height:1.4;white-space:pre-line;padding:14px 8px;}
.mvb-content{display:flex;align-items:center;min-width:0;}
.mvb-text{padding:22px 32px;font-size:19px;font-weight:700;color:var(--ink-900);line-height:1.5;}

.mvb-goal-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:18px 24px;width:100%;}
.mvb-goal-item{background:#3A5DA4;color:#fff;font-weight:800;font-size:16px;text-align:center;border-radius:8px;padding:18px 10px;}

.mvb-card-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0;background:var(--bg-soft);padding:22px 16px;width:100%;}
.mvb-card{padding:0 16px;border-right:1px solid var(--line);}
.mvb-card:last-child{border-right:none;}
.mvb-card-head{display:flex;align-items:center;gap:10px;margin-bottom:14px;}
.mvb-card-icon{position:relative;width:46px;height:46px;border-radius:12px;background:#fff;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.mvb-card-icon svg{width:22px;height:22px;color:var(--navy-800);}
.mvb-card-badge{position:absolute;top:-7px;left:-7px;width:20px;height:20px;border-radius:50%;background:#3A5DA4;color:#fff;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;}
.mvb-card-title{font-weight:800;font-size:15.5px;color:var(--navy-800);line-height:1.3;}
.mvb-card-items{display:flex;flex-direction:column;gap:7px;}
.mvb-card-item{display:flex;align-items:flex-start;gap:6px;font-size:13px;color:var(--ink-700);line-height:1.4;}
.mvb-card-item .check{color:var(--navy-800);font-weight:800;flex-shrink:0;margin-top:1px;}

@media (max-width:640px){
  .mvb-row{grid-template-columns:1fr;}
  .mvb-label{padding:10px;font-size:16px;white-space:normal;}
  .mvb-text{padding:18px 20px;font-size:16px;}
  .mvb-goal-grid{grid-template-columns:1fr;padding:16px 18px;}
  .mvb-card-grid{grid-template-columns:1fr;padding:18px;gap:22px;}
  .mvb-card{border-right:none;padding:0;}
}

/* 인사말(CEO greeting) - 2026-08-13 KEPCO(kepco.co.kr/home/about/introduce/ceo.do) 벤치마킹으로
   전면 개편(사용자 제공 참고 이미지·URL): 기존의 작은 로고+사진 박스(.greeting-media) 대신
   큰 2줄 헤드라인 + 화면 폭 꽉 채운 사진 + 좌(강조 인사말)/우(본문) 2단 구성으로 바꿔 "강력한
   메시지 전달"이라는 요청 취지를 살렸다. */
.greeting-headline{margin:0 0 28px;font-size:38px;font-weight:800;line-height:1.4;color:var(--navy-800);}
.biz-page .greeting-headline{color:var(--red-600-text);}
.greeting-photo{margin-bottom:36px;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-md);}
.greeting-photo img{width:100%;height:auto;display:block;}
.greeting-columns{display:flex;gap:48px;align-items:flex-start;}
.greeting-lead{flex:0 0 300px;}
.greeting-lead p{font-size:29px;font-weight:800;color:var(--navy-800);line-height:1.45;margin:0 0 6px;}
.biz-page .greeting-lead p{color:var(--red-600-text);}
.greeting-lead p:last-child{margin-bottom:0;}
.greeting-body{flex:1;min-width:0;}
/* 2026-08-13 - "본문이 너무 작다, KEPCO처럼 크게(단, 좌측 강조 인사말 29px보다는 살짝 작게)"
   요청에 따라 확대. KEPCO 실제 본문 문단을 getComputedStyle로 실측한 값이 23.3px였는데, 우리
   좌측 인사말이 29px라 그보다 분명히 작아 보이도록 21px로(그래도 기존 14.5px 대비 크게 확대). */
.greeting-body p{font-size:21px;line-height:1.8;color:var(--ink-700);margin:0 0 16px;}
.greeting-body p:last-child{margin-bottom:0;}
.greeting-body .info-numbered-list{margin:20px 0;}
.greeting-body .info-numbered-list li{font-size:19px;font-weight:700;color:var(--ink-900);line-height:1.7;}
.greeting-text strong,.greeting-lead strong,.greeting-body strong{font-weight:800;color:var(--ink-900);}
.greeting-signature{text-align:right;margin-top:32px;padding-top:20px;border-top:1px solid var(--line);}
.greeting-signature .sig-title{display:block;font-size:15px;font-weight:600;color:var(--ink-700);}
.greeting-signature .sig-name{display:block;margin-top:8px;font-size:30px;font-weight:800;color:var(--navy-800);}
.biz-page .greeting-signature .sig-name{color:var(--red-600-text);}

@media (max-width:760px){
  .greeting-headline{font-size:27px;}
  .greeting-columns{flex-direction:column;gap:20px;}
  .greeting-lead{flex:none;}
  .greeting-lead p{font-size:22px;}
  .greeting-body p{font-size:16.5px;}
  .greeting-body .info-numbered-list li{font-size:15.5px;}
  .greeting-signature .sig-name{font-size:24px;}
}

/* 약력(profileHeader) - 원형 사진 + 소속직함/이름 + 영문 직함 */
.profile-header{display:flex;align-items:center;gap:32px;padding:4px 0 32px;}
.profile-header .profile-photo{width:170px;height:170px;border-radius:50%;object-fit:cover;flex-shrink:0;background:var(--bg-soft);box-shadow:var(--shadow-sm);}
.profile-header .profile-name{font-size:17px;color:var(--ink-700);margin:0;}
.profile-header .profile-name strong{font-size:19px;font-weight:800;color:var(--ink-900);margin-left:4px;}
.profile-header .profile-eng-role{margin:10px 0 0;font-size:16px;color:var(--ink-500);}
@media (max-width:640px){
  .profile-header{flex-direction:column;text-align:center;gap:18px;}
}

/* 약력(careerList) - 연도 없이 구분선으로만 나뉜 단순 이력 목록 */
.career-list{border-top:2px solid var(--ink-900);}
.career-item{padding:18px 4px;border-bottom:1px solid var(--line);font-size:17px;color:var(--ink-900);}

/* 이사회 일반현황(orgOverview) - 상단 불릿목록 + 아이콘 박스 그리드(+커넥터) */
.info-bullet-list{list-style:none;margin:0 0 20px;padding:0;}
.info-bullet-list li{position:relative;padding-left:14px;font-size:16px;color:var(--ink-700);line-height:1.8;margin-bottom:8px;}
.info-bullet-list li:last-child{margin-bottom:0;}
.info-bullet-list li::before{content:'';position:absolute;left:0;top:9px;width:5px;height:5px;background:var(--navy-700);}
.biz-page .info-bullet-list li::before{background:var(--red-600);}
.info-bullet-list li .sub-line{display:block;margin-top:2px;color:var(--ink-500);font-size:13.5px;}
.info-numbered-list li .sub-line{display:block;margin-top:4px;color:var(--ink-500);font-size:13.5px;line-height:1.7;}

/* bulletBlocks/hrGroups block.items 공용 - 항목 안 중첩 번호목록, 굵은 소제목 줄, 붉은색 강조 각주 */
.info-bullet-list li .sub-numbered,
.info-numbered-list li .sub-numbered{list-style:none;counter-reset:info-num-sub;margin:8px 0 0;padding:0;}
.info-bullet-list li .sub-numbered li,
.info-numbered-list li .sub-numbered li{counter-increment:info-num-sub;position:relative;padding-left:20px;font-size:13.5px;color:var(--ink-700);line-height:1.75;margin-bottom:6px;}
.info-bullet-list li .sub-numbered li:last-child,
.info-numbered-list li .sub-numbered li:last-child{margin-bottom:0;}
.info-bullet-list li .sub-numbered li::before,
.info-numbered-list li .sub-numbered li::before{content:counter(info-num-sub)'.';position:absolute;left:0;top:0;font-weight:600;color:var(--ink-500);}
.bullet-block-subheading{font-weight:700;color:var(--ink-900);margin:16px 0 8px;font-size:14.5px;}
.bullet-block-note{margin:10px 0 0;font-size:13px;line-height:1.75;color:var(--red-600-text);}
.text-red{color:var(--red-600-text);}

.org-unit-grid{display:flex;gap:24px;position:relative;}
.org-unit-box{flex:1;background:var(--bg-soft);border-radius:var(--radius-lg);padding:26px 28px;}
.org-unit-box .head{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.org-unit-box .icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;box-shadow:var(--shadow-sm);flex-shrink:0;}
.org-unit-box .title{font-size:16px;font-weight:800;color:var(--ink-900);}
.org-unit-box .desc{font-size:13.5px;color:var(--ink-700);line-height:1.7;}
.org-unit-connector{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:36px;height:36px;border-radius:50%;background:#fff;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:17px;color:var(--ink-500);box-shadow:var(--shadow-sm);}
@media (max-width:640px){
  .org-unit-grid{flex-direction:column;}
  .org-unit-connector{display:none;}
}

/* 인재상(talentHero) - 가운데 정렬 큰 제목 + 강조색 부제목 + 설명문단 */
.talent-hero{text-align:center;padding:4px 0 12px;}
.talent-hero-title{font-size:30px;font-weight:900;color:var(--ink-900);margin:0 0 14px;letter-spacing:-.01em;}
.talent-hero-subtitle{font-size:18px;font-weight:800;color:var(--navy-700);margin-bottom:14px;}
.biz-page .talent-hero-subtitle{color:var(--red-600-text);}
.talent-hero-body p{margin:0;font-size:16px;line-height:1.85;color:var(--ink-700);}

/* 인재상(talentBanners) - 사진 배너 위/옆에 제목+설명이 겹쳐진 카드가 세로로 쌓이는 목록 */
.talent-banners{display:flex;flex-direction:column;gap:22px;}
.talent-banner{
  position:relative;min-height:230px;border-radius:var(--radius-lg);overflow:hidden;
  background-size:cover;background-position:center;display:flex;align-items:flex-end;
}
.talent-banner::before{content:'';position:absolute;inset:0;}
.talent-banner .tb-text{position:relative;z-index:1;padding:28px 34px;max-width:460px;}
.talent-banner .tb-title{font-size:21px;font-weight:800;margin-bottom:8px;}
.talent-banner .tb-desc{font-size:14px;line-height:1.6;}

.talent-banner.overlay-left::before,
.talent-banner.overlay-right::before{
  background:linear-gradient(0deg, rgba(8,16,34,.8) 0%, rgba(8,16,34,.25) 55%, transparent 78%);
}
.talent-banner.overlay-left{justify-content:flex-start;}
.talent-banner.overlay-right{justify-content:flex-end;}
.talent-banner.overlay-left .tb-text,
.talent-banner.overlay-right .tb-text{color:#fff;}
.talent-banner.overlay-right .tb-text{text-align:right;margin-left:auto;}

.talent-banner.split-left{align-items:center;}
.talent-banner.split-left::before{
  background:linear-gradient(90deg, #fff 0%, #fff 34%, rgba(255,255,255,.78) 46%, transparent 64%);
}
.talent-banner.split-left .tb-title{color:var(--ink-900);}
.talent-banner.split-left .tb-desc{color:var(--ink-700);}
@media (max-width:640px){
  .talent-banner{min-height:190px;}
  .talent-banner .tb-text{padding:20px 22px;max-width:80%;}
  .talent-banner.split-left::before{background:linear-gradient(90deg, #fff 0%, #fff 55%, rgba(255,255,255,.6) 68%, transparent 85%);}
}

/* 인사관리 및 교육운영(hrGroups) - 굵은 대제목 + "• 소제목 + 줄글/표" 블록 반복 */
.hr-group{margin-bottom:40px;}
.hr-group:last-child{margin-bottom:0;}
.hr-group-title{font-size:21px;font-weight:800;color:var(--ink-900);margin:0 0 20px;}
/* hrGroups boxed:true 옵션(2026-07-30, 불복구제절차) - "수수료 안내"의 panel 박스(.info-intro)와
   같은 회색 배경 박스로 각 group(이의신청/행정심판/행정소송 등)을 감싼다. boxed를 안 쓰는 기존
   hrGroups(인사관리/교육운영 등)는 위 기본 .hr-group 그대로라 영향 없음.
   2026-08-26: 제목(이의신청/행정심판/행정소송)을 정보공개제도안내 페이지의 섹션 제목과 동일하게
   박스 밖으로 빼면서(.info-section-heading 재사용, kospoleRenderSection() hrGroups 분기 참고)
   박스 안에는 더 이상 .hr-group-title이 없어 아래 오버라이드는 불필요해짐 - 제거함. */
.hr-group-boxed{background:var(--bg-soft);border-radius:var(--radius-lg);padding:32px 36px;margin-bottom:32px;}
.hr-group-boxed:last-child{margin-bottom:0;}
.hr-block{margin-bottom:26px;}
.hr-block:last-child{margin-bottom:0;}
.hr-block-label{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:800;color:var(--ink-900);margin:0 0 10px;}
.hr-block-label::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--navy-700);flex-shrink:0;}
.biz-page .hr-block-label::before{background:var(--red-600);}
.hr-block-lines{padding-left:14px;}
.hr-block-lines p{margin:0 0 6px;font-size:14px;line-height:1.7;color:var(--ink-700);}
.hr-block-lines p:last-child{margin-bottom:0;}
.hr-span-table{width:100%;border-collapse:collapse;border-top:2px solid var(--ink-900);margin-left:14px;width:calc(100% - 14px);}
.hr-span-table th{background:var(--bg-soft);font-weight:700;font-size:13px;color:var(--ink-700);padding:12px;border-bottom:1px solid var(--line);text-align:center;}
.hr-span-table td{border-bottom:1px solid var(--line);padding:14px;text-align:center;font-size:14px;color:var(--ink-900);}
@media (max-width:640px){
  .hr-span-table{margin-left:0;width:100%;}
}

/* 채용절차(processStages) - 단계별 제목(+태그) 아래에 아이콘+라벨 카드가 가로로 나열 */
.process-stages{display:flex;flex-direction:column;gap:30px;}
.process-stage-heading{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:800;color:var(--ink-900);margin:0 0 14px;}
.process-stage-heading::before{content:'';width:8px;height:8px;flex-shrink:0;background:var(--navy-700);}
.biz-page .process-stage-heading::before{background:var(--red-600);}
.process-stage-tag{font-size:12.5px;font-weight:500;color:var(--ink-500);margin-left:2px;}
.process-card-row{display:flex;gap:16px;flex-wrap:wrap;}
.process-card{
  display:flex;align-items:center;gap:14px;flex:1 1 220px;min-width:200px;max-width:280px;
  border:1px solid var(--line);border-radius:var(--radius-md);padding:18px 20px;background:#fff;
}
.process-card .icon{font-size:24px;flex-shrink:0;width:30px;text-align:center;}
.process-card .label{font-size:14px;font-weight:700;color:var(--ink-900);line-height:1.4;}
@media (max-width:640px){
  .process-card{flex:1 1 100%;max-width:none;}
}

/* 관련법령(lawCards) - 카드형 카탈로그, 카드 전체가 외부 링크(국가법령정보센터)로 연결됨.
   [2026-08-10] 사용자가 첨부한 서양 고서 도서관 사진(images/law-card-bg.jpg, 2000×1111 크롭)으로
   기존 대각선 줄무늬 남색 배경을 교체 - "법령"이라는 성격에 어울리는 서고 이미지를 배경으로 깔고,
   그 위에 어두운 그라디언트(기관은 남색, BIZ는 레드 계열 - 기존 브랜드 컬러 구분 유지)를 겹쳐
   흰 글자(로고/법령명)의 가독성을 확보했다(다른 서브페이지 사진 배너와 동일한 방식). */
.law-card-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;}
.law-card{
  display:flex;flex-direction:column;border-radius:var(--radius-lg);overflow:hidden;
  box-shadow:var(--shadow-sm);text-decoration:none;
  transition:transform .15s ease, box-shadow .15s ease;
}
.law-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);}
.law-card-top{
  position:relative;min-height:190px;padding:18px;display:flex;flex-direction:column;
  background-image:
    linear-gradient(180deg, rgba(11,20,45,.6) 0%, rgba(11,20,45,.78) 100%),
    url(images/law-card-bg.jpg);
  background-size:cover;background-position:center;
}
.biz-page .law-card-top{
  background-image:
    linear-gradient(180deg, rgba(60,12,10,.58) 0%, rgba(60,12,10,.78) 100%),
    url(images/law-card-bg.jpg);
  background-size:cover;background-position:center;
}
.law-card-logo{display:flex;align-items:center;gap:6px;flex:0 0 auto;}
.law-card-logo .mark{width:22px;height:22px;border-radius:6px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:900;color:#fff;}
.law-card-logo span:last-child{font-size:10.5px;font-weight:700;color:#fff;opacity:.9;}
.law-card-name-box{
  margin:auto 0 0;border:1.5px solid rgba(255,255,255,.8);border-radius:8px;
  padding:16px 10px;text-align:center;
}
.law-card-name-box span{color:#fff;font-weight:800;font-size:16px;line-height:1.4;word-break:keep-all;}
.law-card-foot{background:#fff;padding:12px 10px;text-align:center;font-size:10.5px;color:var(--ink-500);line-height:1.5;}
@media (max-width:820px){
  .law-card-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:520px){
  .law-card-grid{grid-template-columns:1fr;}
}

/* 슬로건 박스(사회공헌소개 등) - 제목 아래 밑줄 + 가운데 정렬 설명 */
.slogan-box{border:1px solid var(--line);border-radius:var(--radius-lg);padding:30px 40px;text-align:center;background:#fff;}
.slogan-box .title{font-size:21px;font-weight:800;color:var(--ink-900);padding-bottom:16px;margin-bottom:16px;border-bottom:2px solid var(--navy-700);}
.biz-page .slogan-box .title{border-bottom-color:var(--red-600);}
.slogan-box .body p{font-size:16px;line-height:1.9;color:var(--ink-700);margin:0;}
.slogan-box .body strong{color:var(--navy-700);font-weight:800;}
.biz-page .slogan-box .body strong{color:var(--red-600-text);}

/* 프레임워크 박스(사회공헌 추진체계 등) - 미션/비전 인용박스(.value-quote-box 재사용) + 전략과제 카드 */
.framework-box{border:1px solid var(--line);border-radius:var(--radius-lg);padding:36px 40px;background:#fff;}
.framework-box .value-quote-box{border-color:var(--line);margin-bottom:20px;}
.framework-box .value-quote-box:last-of-type{margin-bottom:28px;}
.task-caption{text-align:center;margin-bottom:16px;}
.task-caption .en{display:block;font-size:12px;font-weight:800;color:var(--navy-700);letter-spacing:.08em;}
.biz-page .task-caption .en{color:var(--red-600-text);}
.task-caption .ko{display:block;font-size:16px;color:var(--ink-500);margin-top:2px;}
.task-grid{display:flex;gap:14px;}
.task-item{flex:1;border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--line);}
.task-item .head{background:var(--navy-800);color:#fff;font-weight:700;font-size:16px;text-align:center;padding:12px 8px;}
.biz-page .task-item .head{background:var(--red-600);}
.task-item .sub{background:#fff;color:var(--ink-500);font-size:16px;text-align:center;padding:16px 8px;line-height:1.5;}

/* 구분별 그룹 테이블(사회공헌활동 프로그램 등) - 왼쪽 구분명 + 오른쪽 불릿 목록 */
.info-group-table{width:100%;border-collapse:collapse;border-top:2px solid var(--ink-900);}
.info-group-table th{background:var(--bg-soft);font-weight:700;font-size:16px;color:var(--ink-700);padding:12px;border-bottom:1px solid var(--line);text-align:center;}
.info-group-table td{border-bottom:1px solid var(--line);padding:20px;vertical-align:middle;}
/* 2026-08-10 - 이전엔 font-size를 별도 지정하지 않아 브라우저 기본값(16px)을 그대로 썼는데,
   사용자가 17px을 목표로 지정해 이제 명시적으로 선언함(브라우저/사이트 기본값에 기대면 다른
   전역 스타일 변경에 따라 값이 달라질 수 있어 안정적이지 않음). */
.info-group-table td.label{width:200px;text-align:center;font-weight:700;font-size:17px;color:var(--ink-900);background:var(--bg-soft);}
.info-group-table td.items ul{margin:0;padding:0;list-style:none;}
.info-group-table td.items li{position:relative;padding-left:14px;font-size:15px;color:var(--ink-700);line-height:1.9;}
.info-group-table td.items li::before{content:'';position:absolute;left:0;top:9px;width:5px;height:5px;background:var(--navy-700);}
.biz-page .info-group-table td.items li::before{background:var(--red-600);}

@media (max-width:640px){
  .task-grid{flex-direction:column;}
  .info-group-table td.label{width:auto;display:block;}
  .info-group-table, .info-group-table tbody, .info-group-table tr, .info-group-table td{display:block;width:100%;}
}

/* 섹션 헤딩 옆 단위 표기(예: (단위:천원)) - heading과 unit을 한 줄에 양끝정렬 */
.info-section-heading-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.info-section-heading-row .info-section-heading{margin-bottom:18px;}
.section-unit{font-size:12.5px;color:var(--ink-500);white-space:nowrap;}

/* 사진 그리드(기부금 지원 활동 등) - 3열 x N행 */
.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;}
.photo-grid-item{border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--line);background:var(--bg-soft);}
.photo-grid-item img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;}
@media (max-width:640px){
  .photo-grid{grid-template-columns:repeat(2,1fr);}
}

/* 연도별 표(기부금 지원내역 등) - "연도" 헤더행 + 값 1행 */
.year-table{width:100%;border-collapse:collapse;border-top:2px solid var(--ink-900);}
.year-table th,.year-table td{padding:14px 10px;text-align:center;font-size:14px;border-bottom:1px solid var(--line);border-right:1px solid var(--line);}
.year-table th:last-child,.year-table td:last-child{border-right:none;}
.year-table thead th{background:var(--bg-soft);font-weight:700;color:var(--ink-900);}
.year-table tbody td:first-child{background:var(--bg-soft);font-weight:700;color:var(--ink-900);}

/* panel 섹션: 한 페이지 안에 아이콘+설명+버튼 박스가 여러 번 반복될 때 사용 */
.info-section-lead p{font-size:16px;line-height:1.8;color:var(--ink-700);margin:0 0 20px;}
.info-intro-buttons{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;}
/* 2026-08-24 - .info-cta a와 동일한 목업 디자인(네이비+좌상단 삼각 포인트, border-radius:0)을
   패널 안 버튼(수수료 안내/공공데이터 이용안내 등)에도 동일 적용(사용자 요청 - 사이트 전체 버튼
   형태 바로가기 링크에 동일 이미지). INST/BIZ 공통이라 .biz-page 그라데이션 오버라이드는 제거. */
.info-intro-btn{
  position:relative;overflow:hidden;
  display:inline-flex;align-items:center;gap:6px;
  background:#132A6F;color:#fff;font-weight:900;font-size:13.5px;
  padding:12px 20px;border-radius:0;transition:background .15s ease;
}
.info-intro-btn::before{content:'';position:absolute;top:0;left:0;width:0;height:0;
  border-top:14px solid #359DE3;border-right:14px solid transparent;}
.info-intro-btn:hover{background:#0E2159;}
.info-intro-btn svg{width:12px;height:12px;flex-shrink:0;position:relative;}
.info-section .info-intro{margin-bottom:0;}

@media (max-width:640px){
  .info-intro{flex-direction:column;text-align:center;padding:28px 22px;}
  .info-intro-text p{text-align:justify;}
  .info-intro-text p.intro-headline{text-align:center;}
  /* 2026-08-24 - .info-intro가 모바일에서 text-align:center인데 문단(p)만 justify/center로
     되돌려져 있고 그 안의 번호/불릿 목록(수수료 안내의 "1. 비영리의 ~" 등)은 재정의가 없어
     그대로 가운데 정렬로 남아 있던 문제(사용자 신고) - 좌측 정렬로 되돌린다. */
  .info-intro-text .info-numbered-list,
  .info-intro-text .info-bullet-list{text-align:left;}
  /* 2026-08-21 - 게시판 페이지네이션(.pagination, board-list.html 등 9개 목록 페이지가 공유)이
     페이지 수가 많아지면(예: 언론보도 14페이지) 번호 버튼 전체가 justify-content:center로
     가운데 정렬되면서 컨테이너 폭을 넘어 좌우로 흘러넘치는데, 넘친 왼쪽 절반은 x좌표가 음수라
     스크롤로도 닿을 수 없어 1~3페이지 버튼이 영구히 안 보이는 문제였다(사용자 신고). 모바일에서
     좌측 정렬 + 자체 가로 스크롤 컨테이너로 전환해 전체 페이지가 옆으로 밀리지 않고, 모든
     페이지 번호에 스크롤로 닿을 수 있도록 수정. */
  .pagination{flex-wrap:nowrap;justify-content:flex-start;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:2px 2px 6px;
    mask-image:linear-gradient(to right,transparent 0,#000 14px,#000 calc(100% - 14px),transparent 100%);
    -webkit-mask-image:linear-gradient(to right,transparent 0,#000 14px,#000 calc(100% - 14px),transparent 100%);}
  .pagination::-webkit-scrollbar{display:none;}
  .pagination button{flex:0 0 auto;}
  .info-table th{width:110px;padding:12px 14px;font-size:13.5px;}
  .info-table td{padding:12px 14px;font-size:13.5px;}
  .info-cards{grid-template-columns:repeat(2,1fr);}
  .info-card-item{border-bottom:1px solid var(--line);}
  .info-card-item:nth-child(2n){border-right:none;}
  .info-step{width:100px;height:100px;}
  /* 2026-08-20 신설(cards columns 옵션 - BIZ_VOTING_TICKET "구매 가능한 경기" 5열) - 위
     범용 모바일 2열 규칙(.info-cards)보다 클래스 2개(specificity 우선)로 재정의해, 640px
     이하에서도 지정된 열 개수를 유지한다(2열로 줄바꿈되지 않게). 480px 이하 초협소 화면은
     아래 별도 미디어쿼리에서 가로 스크롤로 전환. */
  .info-cards--fixed-cols{grid-template-columns:repeat(var(--info-cards-cols,4),1fr);}
  .info-cards--fixed-cols .info-card-item{border-bottom:none;}
  .info-cards--fixed-cols .info-card-item:nth-child(2n){border-right:1px solid var(--line);}
  .info-cards--fixed-cols .info-card-item:last-child{border-right:none;}
}

@media (max-width:480px){
  /* 아이콘(36px)+라벨이 5열 균등폭에서 너무 찌그러지는 초협소 화면(폴드류 등)에서는 균등
     그리드 대신 카드별 고정폭 가로 스크롤로 전환 - 여전히 "한 줄"이되 넘치는 부분만 스와이프.
     mask-image로 오른쪽 끝 페이드(2026-08-20 추가) - 아래 .kospole-scroll-fade-x 참고. */
  .info-cards--fixed-cols{display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch;
    mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);}
  .info-cards--fixed-cols .info-card-item{flex:0 0 92px;border-right:1px solid var(--line);border-bottom:none;}
  .info-cards--fixed-cols .info-card-item:last-child{border-right:none;}
}

/* GALLERY형 게시판(CEO소식 등) - 목록 3열 사진 카드 그리드 */
.gallery-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:32px 22px;margin:8px 0 8px;}
.gallery-card{display:block;color:inherit;}
.gallery-card-thumb{border-radius:var(--radius-md);overflow:hidden;border:1px solid var(--line);background:var(--bg-soft);}
.gallery-card-thumb img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;transition:transform .25s ease;}
.gallery-card-thumb.portrait img{aspect-ratio:3/4;}
.gallery-card:hover .gallery-card-thumb img{transform:scale(1.05);}
.gallery-card-title{margin:14px 0 0;font-size:15.5px;font-weight:700;line-height:1.5;color:var(--ink-900);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.9em;}
.gallery-card:hover .gallery-card-title{text-decoration:underline;}
.gallery-card-meta{margin-top:8px;font-size:12.5px;color:var(--ink-500);display:flex;gap:10px;flex-wrap:wrap;}

/* GALLERY_BOARD_DOWNLOAD 카드(2026-08-01, 지속가능경영 보고서 등) - 카드 전체를 링크로 감싸는 대신
   표지 이미지는 순수 정보 표시용으로 두고, 그 아래 별도의 "다운로드" 버튼(.gallery-download-btn)을
   둔다(시각장애인이 스크린리더로 이용할 때 "이미지를 클릭하면 다운로드된다"는 숨은 규칙에 의존하지
   않고, 버튼이라는 명확한 상호작용 요소로 기능을 알 수 있도록 하기 위함 - 웹접근성 대응).
   카드 자체는 더 이상 <a>가 아니라 <div>라 hover 커서가 기본값(default)이 된다. */
.gallery-card-static{cursor:default;}
.gallery-download-btn{
  display:flex;align-items:center;justify-content:center;gap:6px;
  margin-top:14px;width:100%;box-sizing:border-box;
  background:var(--navy-800);color:#fff;font-weight:700;font-size:13.5px;
  padding:11px 18px;border-radius:8px;transition:background .15s ease;
}
.gallery-download-btn:hover{background:var(--navy-900);}
.gallery-download-btn svg{width:14px;height:14px;flex-shrink:0;}
.biz-page .gallery-download-btn{background:linear-gradient(120deg,var(--red-600),var(--orange-500));}
.biz-page .gallery-download-btn:hover{filter:brightness(1.05);}
.gallery-download-btn.is-disabled{opacity:.45;pointer-events:none;}

@media (max-width:820px){
  .gallery-grid{grid-template-columns:repeat(2,1fr);gap:26px 18px;}
}
@media (max-width:480px){
  .gallery-grid{grid-template-columns:1fr;}
}

/* GALLERY형 게시판 상세 - 본문 아래 이미지 세로 나열 */
.gallery-view-images{display:flex;flex-direction:column;gap:20px;margin-top:16px;}
.gallery-view-images img{width:100%;border-radius:var(--radius-md);border:1px solid var(--line);display:block;}

/* 홍보영상 등 GALLERY형 게시글의 유튜브 영상 프레임(신규, 2026-08-02) - 클릭 전에는 미리보기
   이미지 + 재생버튼 + "YouTube" 배지(facade), 클릭하면 실제 iframe으로 교체되어 그 자리에서 재생된다. */
.gallery-view-video{position:relative;width:100%;aspect-ratio:16/9;border-radius:var(--radius-lg);overflow:hidden;background:#000;margin:20px 0;}
.gallery-view-video iframe{width:100%;height:100%;border:none;display:block;}
.gallery-video-facade{position:relative;width:100%;height:100%;padding:0;border:none;margin:0;cursor:pointer;display:block;background:#000;}
.gallery-video-facade img{width:100%;height:100%;object-fit:cover;display:block;opacity:.85;}
.gallery-video-facade:hover img{opacity:1;}
.gallery-video-play{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:72px;height:72px;border-radius:50%;background:rgba(20,20,20,.72);
  display:flex;align-items:center;justify-content:center;
}
.gallery-video-badge{
  position:absolute;bottom:14px;right:14px;background:#FF0000;color:#fff;
  font-size:12px;font-weight:800;letter-spacing:.02em;padding:5px 10px;border-radius:4px;
}

/* 이벤트 안내(EVENT_BIZ, 2026-08-05 신설) - 목록은 갤러리형 카드 그리드 대신, 실제
   sportstoto.co.kr/event.php와 동일하게 가로형 리스트 카드(왼쪽 배너 사진 + 가운데 제목/기간
   + 오른쪽 진행중·종료 상태 배지)로 구성한다. */
.event-list{display:flex;flex-direction:column;gap:16px;margin:8px 0 8px;}
.event-row{
  display:flex;align-items:center;gap:24px;color:inherit;
  border:1px solid var(--line);border-radius:var(--radius-md);padding:18px;transition:box-shadow .15s ease, border-color .15s ease;
}
.event-row:hover{border-color:var(--navy-700);box-shadow:var(--shadow-md);}
.biz-page .event-row:hover,
body[data-site="BIZ"] .event-row:hover{border-color:var(--orange-600);}
.event-row-thumb{flex:0 0 220px;aspect-ratio:2/1;border-radius:var(--radius-sm);overflow:hidden;background:var(--bg-soft);}
.event-row-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.event-row-body{flex:1;min-width:0;}
.event-row-title{font-size:16.5px;font-weight:800;color:var(--ink-900);line-height:1.5;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.event-row:hover .event-row-title{text-decoration:underline;}
.event-row-date{margin-top:10px;font-size:13px;color:var(--ink-500);}
.event-row-status{flex-shrink:0;}
.event-status-badge{
  display:flex;align-items:center;justify-content:center;
  width:58px;height:58px;border-radius:50%;
  font-size:13px;font-weight:800;color:#fff;background:var(--ink-900);
}
.event-status-badge.ongoing{background:var(--orange-600);}
@media (max-width:640px){
  .event-row{flex-wrap:wrap;}
  .event-row-thumb{flex:1 1 100%;aspect-ratio:16/9;}
  .event-row-status{order:3;}
}

/* 갤러리 상세 본문은 board-view.html의 .view-head/.view-content를 공유하되,
   "밑줄 → 본문 첫 줄" 간격과 "본문 마지막 줄 → 첫 사진" 간격이 동일하게 보이도록
   양쪽 다 16px 한 곳(위: view-head의 margin-bottom, 아래: gallery-view-images의 margin-top)에서만
   여백을 주고, 본문 박스 자체의 상하 패딩은 0으로 없앤다(min-height도 함께 해제). */
.gallery-view-head{margin-bottom:16px;}
.gallery-view-content{min-height:0;padding-top:0;padding-bottom:0;}

/* 아이디어 제안 페이지 - 상단 3개 탭(실제 페이지 이동 링크, JS show/hide 아님) */
.idea-tabs{display:flex;border:1px solid var(--line);border-radius:var(--radius-md);overflow:hidden;margin-bottom:32px;}
.idea-tabs a{flex:1;text-align:center;padding:16px 12px;font-size:18px;font-weight:700;color:var(--ink-500);background:#fff;border-right:1px solid var(--line);}
.idea-tabs a:last-child{border-right:none;}
.idea-tabs a:hover{background:var(--bg-soft);}
.idea-tabs a.active{background:var(--navy-800);color:#fff;}
/* 2026-08-10 - 본문 탭 데스크톱 폭 확대(15px→18px)에 맞춰 모바일도 함께 검토. 이 탭은 자리를
   4등분(국민제안 페이지는 3등분)해 쓰는 구조라 좁은 화면에서 18px를 그대로 쓰면 "여자축구단
   소개"처럼 긴 라벨이 여러 줄로 꺾이거나 줄바꿈이 잦아질 수 있어, 데스크톱보다 낮춰 한 줄에
   가깝게 들어오는 가독성 좋은 크기로 맞췄다. */
@media (max-width:760px){
  .idea-tabs a{padding:13px 8px;font-size:13.5px;}
}

/* 일반제안/공모제안 탭 상단 안내박스 - "제안으로 볼 수 없는 사항" / "고객의 소리 바로가기" 버튼 포함 */
.idea-info-box{background:var(--bg-soft);border-radius:var(--radius-md);padding:22px 24px;margin-bottom:24px;}
.idea-info-box p{margin:0 0 6px;font-size:16px;line-height:1.7;color:var(--ink-700);}
.idea-info-box p:last-of-type{margin-bottom:16px;}
.idea-info-box .idea-info-actions{display:flex;gap:10px;flex-wrap:wrap;}
.idea-info-actions .btn{padding:10px 18px;border-radius:var(--radius-sm);font-size:13.5px;font-weight:700;}

/* 공모제안 하단 강조 안내 박스 */
.idea-closed-notice{margin-top:24px;padding:16px 20px;border-radius:var(--radius-md);background:rgba(230,57,70,.08);border:1px solid rgba(230,57,70,.25);color:var(--red-700);font-size:14px;font-weight:700;text-align:center;}

/* "제안으로 볼 수 없는 사항" 팝업 모달 */
.idea-modal-backdrop{display:none;position:fixed;inset:0;background:rgba(11,30,66,.55);z-index:200;align-items:center;justify-content:center;padding:20px;}
.idea-modal-backdrop.open{display:flex;}
.idea-modal{background:#fff;border-radius:var(--radius-lg);max-width:560px;width:100%;max-height:82vh;overflow-y:auto;padding:32px;box-shadow:var(--shadow-lg);}
.idea-modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;}
.idea-modal-title{font-size:19px;font-weight:800;color:var(--ink-900);}
.idea-modal-close{width:32px;height:32px;border-radius:50%;border:1px solid var(--line);background:#fff;color:var(--ink-700);font-size:16px;flex-shrink:0;cursor:pointer;}
.idea-modal-close:hover{background:var(--bg-soft);}
.idea-modal .info-bullet-list{margin-bottom:0;}

/* 다운로드 버튼이 비활성(관리자 미등록) 상태일 때 */
.info-intro-btn.is-disabled{opacity:.45;pointer-events:none;}

/* downloadButton 섹션 타입(신규, 2026-07-31, 정보공개청구 페이지의 "서식 내려받기" 등) -
   아이콘 박스 없이 .info-intro-btn 버튼 하나만 독립적으로 두는 최소 래퍼. */
.download-button-wrap{margin:4px 0 22px;}
/* 2026-08-24 - section.sectionBoxed 안(.info-section-boxed의 마지막 자식)에서 쓰일 때는 박스 자체
   padding(32px)에 이 래퍼의 하단 margin(22px)까지 더해져 박스 아래쪽 여백이 과하게 벌어지므로
   0으로 상쇄한다. */
.info-section-boxed .download-button-wrap{margin-bottom:0;}
/* 2026-08-24 - 처음엔 "독립된 바로가기 버튼"(.info-cta/.download-button-wrap)에만 좁은 화면
   풀폭을 적용했으나, 사용자가 범위를 "패널 묶음 버튼까지 전부"로 확장 요청 - 이제 .info-intro-btn
   전체(패널 안 여러 개가 나란히 놓이는 수수료 안내/공공데이터 이용안내 등 포함)에 적용한다.
   .info-intro-buttons가 이미 flex-wrap:wrap이라 각 버튼이 width:100%가 되면 자동으로 한 줄에
   하나씩 세로로 쌓인다(추가 CSS 불필요). */
@media (max-width:640px){
  .info-cta a,
  .info-intro-btn{
    width:100%;justify-content:center;font-size:15px;padding:14px 20px;
  }
}

/* accordion 섹션 타입(신규, 2026-07-31, OPEN API 이용방법 상세설명 등) - 항목별로 클릭하면
   펼쳐지는 아코디언. lines가 비어 있어도(추후 채워 넣을 예정) 헤더+빈 안내문 형태로 정상 동작한다. */
.info-accordion{border-top:2px solid var(--navy-700);}
.info-accordion-item{border-bottom:1px solid var(--line);}
.info-accordion-header{display:flex;align-items:center;gap:18px;width:100%;padding:20px 6px;background:none;border:none;cursor:pointer;text-align:left;font:inherit;}
.info-accordion-header .no{font-size:15px;font-weight:800;color:var(--navy-700);width:26px;flex-shrink:0;}
.info-accordion-header .label{flex:1;font-size:15px;font-weight:700;color:var(--ink-900);}
.info-accordion-header .chevron{width:20px;height:20px;color:var(--ink-500);flex-shrink:0;transition:transform .2s ease;}
.info-accordion-header .chevron svg{width:100%;height:100%;}
.info-accordion-item.is-open .info-accordion-header .chevron{transform:rotate(180deg);color:var(--navy-700);}
.info-accordion-body{max-height:0;overflow:hidden;transition:max-height .25s ease;}
.info-accordion-item.is-open .info-accordion-body{max-height:600px;}
.info-accordion-body-inner{padding:0 6px 20px 50px;font-size:14px;line-height:1.8;color:var(--ink-700);}
.info-accordion-body-inner p{margin:0 0 8px;}
.info-accordion-body-inner p:last-child{margin-bottom:0;}
.info-accordion-empty{color:var(--ink-500);}
.biz-page .info-accordion{border-top-color:var(--red-600);}
.biz-page .info-accordion-header .no{color:var(--red-600-text);}
.biz-page .info-accordion-item.is-open .info-accordion-header .chevron{color:var(--red-600-text);}

/* headingLink(신규, 2026-07-31, 공공데이터 개방목록의 "공공데이터포털" 옆 바로가기 등) -
   .info-section-heading이 이미 flex(gap:9px) 컨테이너라 별도 레이아웃 없이 자연스럽게 붙는다. */
.info-heading-link-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid var(--line);border-radius:4px;color:var(--ink-700);flex-shrink:0;}
.info-heading-link-icon svg{width:13px;height:13px;}
.info-heading-link-icon:hover{border-color:var(--navy-700);color:var(--navy-700);}
.biz-page .info-heading-link-icon:hover{border-color:var(--red-600);color:var(--red-600-text);}

/* dataTable 섹션 타입(신규, 2026-07-31, 공공데이터 개방목록의 "구분/목록명/제공방식/담당부서" 등) -
   고정 헤더가 있는 일반 데이터 표. 화면이 좁을 때는 가로 스크롤로 대응한다. */
.data-catalog-table-wrap{overflow-x:auto;}
.data-catalog-table{width:100%;min-width:720px;border-collapse:collapse;border-top:2px solid var(--navy-700);}
.data-catalog-table th{text-align:center;font-size:13.5px;font-weight:700;color:var(--ink-700);padding:12px 14px;border-bottom:1px solid var(--line);white-space:nowrap;}
.data-catalog-table td{text-align:center;font-size:13.5px;color:var(--ink-700);padding:16px 14px;border-bottom:1px solid var(--line);vertical-align:middle;line-height:1.6;}
.data-catalog-table td:first-child{font-weight:700;color:var(--ink-900);white-space:nowrap;}
.data-catalog-table:not(.data-catalog-table--finance):not(.data-catalog-table--wide) th:nth-child(1){width:16%;}
.data-catalog-table:not(.data-catalog-table--finance):not(.data-catalog-table--wide) th:nth-child(3){width:11%;}
.data-catalog-table:not(.data-catalog-table--finance):not(.data-catalog-table--wide) th:nth-child(4){width:17%;}
.biz-page .data-catalog-table{border-top-color:var(--red-600);}

/* dataTable variant:'wide'(신규, 2026-08-20, BIZ_VOTING_TICKET "체육진흥투표권(스포츠토토) 안내"
   표) - 뒤 컬럼(불릿 목록이 들어가는 환급률/단위환급금)이 앞 컬럼보다 훨씬 넓어야 해서 기본
   16%/11%/17% 규칙 대신 이 표만의 비율을 쓴다. 첫 컬럼도 "구분" 라벨이 아니라 데이터 값이라
   굵게/줄바꿈금지 처리하지 않는다. */
.data-catalog-table--wide td:first-child{font-weight:400;color:var(--ink-700);white-space:normal;}
.data-catalog-table--wide th:nth-child(1){width:13%;}
.data-catalog-table--wide th:nth-child(2){width:21%;}
.data-catalog-table--wide th:nth-child(3){width:21%;}
.data-catalog-table--wide th:nth-child(4){width:45%;}
.data-catalog-table--wide td{text-align:center;vertical-align:middle;}
.data-table-cell-list{list-style:none;margin:0;padding:0;text-align:left;display:inline-block;}
.data-table-cell-list li{position:relative;padding-left:12px;line-height:1.6;}
.data-table-cell-list li + li{margin-top:6px;}
.data-table-cell-list li::before{content:'-';position:absolute;left:0;color:var(--ink-400,#9aa3b2);}

/* dataTable variant:'finance'(신규, 2026-08-19, 공익기금 사용내역의 연도별 매출·수익금 표 등) -
   컬럼 수가 표마다 다르므로 위 3개 width 규칙은 적용하지 않고(:not() 처리), 대신 숫자 컬럼은
   오른쪽 정렬 + 표 형식 숫자(tabular-nums)로, "계" 합계 행은 옅은 배경으로 강조한다. */
.data-catalog-table--finance{min-width:100%;}
.data-catalog-table--finance th{white-space:nowrap;padding:12px 16px;}
.data-catalog-table--finance td{white-space:nowrap;padding:11px 16px;}
.data-catalog-table--finance td:first-child{font-weight:600;text-align:center;}
.data-catalog-table--finance td.num{text-align:right;font-variant-numeric:tabular-nums;}
.data-catalog-table--finance tr.is-total td{background:var(--bg-soft);font-weight:700;color:var(--ink-900);}

/* statPercentCards 섹션 타입(신규, 2026-08-19, 공익기금 사용내역의 매출·수익금 배분비율) -
   org-unit-box와 동일한 톤(연한 회색 배경 카드)을 재사용해 큰 숫자를 강조한다. */
.stat-percent-grid{display:flex;flex-wrap:wrap;gap:14px;}
.stat-percent-card{flex:1;min-width:140px;background:var(--bg-soft);border-radius:var(--radius-lg);padding:22px 18px;text-align:center;}
.stat-percent-card .value{font-size:28px;font-weight:800;color:var(--navy-700);line-height:1.2;margin-bottom:6px;font-variant-numeric:tabular-nums;}
.biz-page .stat-percent-card .value{color:var(--red-600-text);}
.stat-percent-card .label{font-size:14px;font-weight:600;color:var(--ink-900);}
.stat-percent-card .note{font-size:12px;color:var(--ink-500);margin-top:4px;line-height:1.5;}
@media (max-width:640px){
  .stat-percent-card{min-width:calc(50% - 7px);flex:none;}
}

/* board-list.html 상단 안내박스의 "※ 절차 안내" 아래 들여쓰기로 표시하는 절차 요약 줄
   (.info-intro-text.has-headline p:not(:first-child) 규칙보다 상세도가 높아야 덮어쓰므로 클래스를 한 번 더 겹쳐 지정) */
.info-intro-text.has-headline p.board-intro-proc{margin-left:14px;color:var(--ink-500);font-size:13.5px;}

/* board-list.html 안내박스 안의 텍스트 링크(예: "정보공개포털 바로가기 ›", 2026-07-30 추가) -
   상단 외부링크 버튼(BOARD_EXTERNAL_LINK, .btn.btn-inst)과 달리 박스 본문에 자연스럽게 이어지는
   링크가 필요할 때 사용(BOARD_INTRO_BOX의 link 필드). */
.board-intro-link{display:inline-flex;align-items:center;gap:3px;margin-top:10px;font-size:14px;font-weight:700;color:var(--navy-700);text-decoration:none;}
.board-intro-link:hover{text-decoration:underline;}
.board-intro-link .chev{font-weight:400;}
.biz-page .board-intro-link{color:var(--red-600-text);}
/* link.style:'button'(2026-08-26, 정보공개 목록) - .board-intro-link 대신 .info-intro-btn(정보공개
   신청하기 .info-cta a와 동일한 네이비 리본 디자인) 버튼을 쓸 때의 상단 여백. */
.board-intro-btn-wrap{margin-top:14px;}

/* ---------- 국민참여형 게시판(civil-board-*.html) - 홈페이지 개선제안, 고객의 소리 등 ---------- */

/* 안내박스 안에서 헤드라인/문단 사이에 들어가는 굵은 소제목(예: "고객의 소리 이용시 확인해 주세요!") */
.info-intro-text.has-headline p.board-intro-subheading{font-weight:700;color:var(--ink-900);font-size:14.5px;margin:14px 0 6px;}
.info-intro-text.has-headline .info-bullet-list{margin:0 0 14px;}
.info-intro-text.has-headline .info-bullet-list:last-child{margin-bottom:0;}

/* 목록 화면 상단 안내박스 + 고객의소리/부조리신고 버튼 */
.civil-intro-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px;}

/* 8컬럼 목록 표 (번호/구분/제목/첨부파일/작성자/등록일/담당부서/처리현황) */
.civil-board-table{width:100%;border-collapse:collapse;}
.civil-board-table th,.civil-board-table td{padding:13px 8px;border-bottom:1px solid var(--line);font-size:13.5px;text-align:center;}
.civil-board-table th{color:var(--ink-500);font-weight:700;font-size:12px;border-bottom:2px solid var(--ink-900);}
.civil-board-table td.col-title{text-align:left;}
.civil-board-table td.col-title a{color:var(--ink-900);display:inline-flex;align-items:center;gap:6px;}
.civil-board-table td.col-title a:hover{text-decoration:underline;}
.civil-board-table .lock-icon{flex-shrink:0;color:var(--ink-500);}
.civil-board-table .cat-badge{display:inline-block;padding:3px 9px;border-radius:6px;font-size:11.5px;font-weight:800;background:var(--bg-soft);color:var(--ink-700);}
.civil-board-table .status-badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:800;}
/* 2026-09-02 웹접근성 점검(검사항목 8) - var(--ink-500)(#6B7280)은 순수 흰 배경 기준 4.83:1이지만
   이 배지의 반투명(12%) 배경과 실제로 섞이면 4.16:1로 미달한다. 배지 전용으로 더 어두운
   회색(#4B5563, 그 배경 대비 6.51:1)을 쓴다. */
.civil-board-table .status-badge.waiting{background:rgba(107,114,128,.12);color:#4B5563;}
/* 2026-09-02 웹접근성 점검(검사항목 8, 명도대비 4.5:1) - 텍스트 색을 #1B9C5A(흰 배경 대비 3.53:1,
   미달)에서 더 진한 초록(6.57:1)으로 교체. 연한 배경(12% 투명도)은 브랜드 톤 유지를 위해 그대로 둠. */
.civil-board-table .status-badge.answered{background:rgba(27,156,90,.12);color:#116B3E;}
.civil-board-table .file-icon{color:var(--ink-500);}
.civil-list-actions{display:flex;justify-content:flex-end;margin-top:16px;}

/* 글쓰기 화면 - 공개여부/구분 라디오 그룹 */
.civil-radio-group{display:flex;gap:18px;flex-wrap:wrap;}
.civil-radio-group label{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:400;color:var(--ink-700);}
.civil-radio-group input[type="radio"]{width:auto;margin:0;}

/* 글쓰기 화면 - 필수입력 안내(우측 상단, 작은 폰트) */
.civil-required-note{text-align:right;font-size:12px;color:var(--ink-500);margin:-8px 0 14px;}
.civil-required-note .req-mark{color:var(--red-600-text);font-weight:700;}
.form-row label .req-mark{color:var(--red-600-text);margin-left:2px;}

/* 글쓰기 화면 - 본인인증 버튼 + 안내 */
.civil-verify-row{display:flex;align-items:center;gap:10px;margin-bottom:18px;flex-wrap:wrap;}
.civil-verify-status{font-size:12.5px;color:var(--ink-500);}

/* 글쓰기 화면 - 파일첨부 목록 */
.civil-file-list{display:flex;flex-direction:column;gap:8px;margin-top:10px;}
.civil-file-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:13px;}
.civil-file-item .name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} /* 2026-08-10 - .post-list a와 동일한 이유로 min-width:0 추가(좁은 화면 말줄임 버그 예방) */
.civil-file-item button{flex-shrink:0;border:none;background:none;color:var(--red-600-text);font-weight:700;cursor:pointer;font-size:13px;}
.civil-file-status{font-size:12px;color:var(--ink-500);margin-top:6px;}

/* 글쓰기 화면 - 개인정보 수집·이용 동의서 */
.civil-consent-box{background:var(--bg-soft);border-radius:var(--radius-md);padding:24px;margin:28px 0;}
.civil-consent-box h2{font-size:16px;margin:0 0 10px;display:flex;align-items:center;gap:7px;}
.civil-consent-box h2::before{content:'';width:8px;height:8px;background:var(--navy-700);flex-shrink:0;}
.civil-consent-box p{font-size:13.5px;line-height:1.7;color:var(--ink-700);margin:0 0 16px;}
.civil-consent-table{width:100%;border-collapse:collapse;background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;margin-bottom:14px;}
.civil-consent-table th,.civil-consent-table td{padding:13px 14px;border-bottom:1px solid var(--line);font-size:13px;text-align:center;}
.civil-consent-table th{background:var(--bg-soft);font-weight:700;color:var(--ink-700);}
.civil-consent-table td.retention{text-decoration:underline;font-weight:700;}
.civil-consent-note{font-size:12.5px;color:var(--ink-500);margin-bottom:14px;}
.civil-consent-question{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-size:14px;font-weight:700;color:var(--ink-900);}
.civil-consent-question .civil-radio-group{font-weight:400;}

/* 상세 화면 - 첨부파일(이미지는 작은 썸네일, 그 외는 파일명 다운로드 버튼) */
.civil-attachments{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px;}
.civil-attachments .file-thumb{display:block;width:96px;height:96px;border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--line);}
.civil-attachments .file-thumb img{width:100%;height:100%;object-fit:cover;display:block;}

/* 상세 화면 - 답변 명함형 카드 */
.civil-reply-card{display:flex;align-items:center;gap:20px;margin-top:36px;padding:24px 28px;border:1px solid var(--line);border-radius:var(--radius-lg);background:#fff;}
.civil-reply-card .logo{flex-shrink:0;width:56px;height:56px;object-fit:contain;}
.civil-reply-card .info{flex:1;}
.civil-reply-card .heading{font-size:12.5px;font-weight:800;color:var(--navy-700);letter-spacing:.02em;margin-bottom:6px;}
.civil-reply-card .dept-phone{font-size:14.5px;font-weight:700;color:var(--ink-900);margin-bottom:4px;}
.civil-reply-card .reply-date{font-size:12px;color:var(--ink-500);}
.civil-reply-content{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line);font-size:16px;line-height:1.8;color:var(--ink-800,var(--ink-900));white-space:pre-line;}

@media (max-width:720px){
  .civil-board-table{font-size:12px;}
  .civil-board-table th:nth-child(4),.civil-board-table td:nth-child(4){display:none;} /* 좁은 화면에선 첨부파일 컬럼 숨김 */
  .civil-reply-card{flex-direction:column;align-items:flex-start;}
}

/* 2026-08-20 신설 - 폴드6 접은 화면(약 344px) 등 초협소 모바일에서 civil-board-table(고객의
   소리/아이디어제안 등 국민참여형 게시판)이 번호/구분/제목/작성자/등록일/담당부서/처리현황
   7개 컬럼을 그대로 욱여넣어 글자가 여러 줄로 쪼개지는 문제(사용자 스크린샷 확인) - board-list.
   html의 .board-table이 이미 쓰고 있는 "제목/담당부서만 남기고 나머지는 숨김" 패턴(국립환경
   과학원 사례 참고, 위 720px 규칙의 유래와 동일)을 그대로 적용해 번호(1)/구분(2)/작성자(5)/
   등록일(6)/처리현황(8)을 추가로 숨긴다(첨부파일(4)은 위 720px 규칙에서 이미 숨겨짐 - 두 규칙이
   함께 적용돼 최종적으로 제목(3)·담당부서(7)만 남는다). 상세 페이지에서는 숨긴 항목도 그대로
   확인 가능. 컬럼이 2개로 줄어 공간이 넉넉해진 만큼 폰트도 함께 키움. */
@media (max-width:480px){
  .civil-board-table th:nth-child(1),.civil-board-table td:nth-child(1),
  .civil-board-table th:nth-child(2),.civil-board-table td:nth-child(2),
  .civil-board-table th:nth-child(5),.civil-board-table td:nth-child(5),
  .civil-board-table th:nth-child(6),.civil-board-table td:nth-child(6),
  .civil-board-table th:nth-child(8),.civil-board-table td:nth-child(8){display:none;}
  .civil-board-table th,.civil-board-table td{font-size:14px;}
}

/* ---------- 조직도/직원안내 (org-directory.html, 신규 2026-07-31) ---------- */

/* 상단 탭(조직도/직원안내) - 2개의 동일 폭 버튼, 선택된 쪽만 채워진 배경.
   info-page.html의 밑줄형 .page-tab-btn과는 다른 첨부 이미지 스타일(양쪽 동일폭 필박)이라 별도 클래스로 둔다. */
.org-tab-bar{display:flex;gap:10px;margin-bottom:28px;}
.org-tab-btn{
  flex:1;padding:14px 20px;font-size:15.5px;font-weight:700;text-align:center;
  background:#fff;border:1px solid var(--line);border-radius:10px;color:var(--ink-500);
  cursor:pointer;transition:background .15s,color .15s,border-color .15s;font-family:inherit;
}
.org-tab-btn:hover:not(.active){background:var(--bg-soft);}
.org-tab-btn.active{background:var(--navy-800);color:#fff;border-color:var(--navy-800);}

/* 조직도 - 순수 CSS 트리 다이어그램(중첩 ul/li + 가상요소 연결선, 트리 깊이에 상관없이
   재사용 가능한 고전적인 기법). 화면이 좁으면 가로 스크롤로 대응한다(2026-07-31 폭 축소로
   평소에는 거의 발생하지 않도록 개선했지만 아주 좁은 창에서는 안전장치로 남겨둠).
   2026-07-31 수정: 실간 간격 축소(가로폭 절감), 각 박스 직각 모서리로 변경, 팀명 가운데 정렬,
   대표이사→본부 세로 연결선 누락 수정(아래 .org-tree-root 참고), 감사/감사실을 본부와 같은
   가로줄에 나란히 두지 않고 대표이사-본부 트렁크 중간에서 갈라지는 별도 가지로 재구성. */
.org-chart{position:relative;overflow-x:auto;padding:20px 10px 32px;}
.org-tree,.org-tree ul{list-style:none;margin:0;padding:0;position:relative;}
.org-tree{display:flex;justify-content:center;min-width:max-content;}
.org-tree ul{display:flex;padding-top:18px;}
.org-tree li{display:flex;flex-direction:column;align-items:center;position:relative;padding:18px 7px 0;}
.org-tree li::before,.org-tree li::after{
  content:'';position:absolute;top:0;right:50%;
  border-top:2px solid var(--line);width:50%;height:18px;
}
.org-tree li::after{right:auto;left:50%;border-left:2px solid var(--line);}
.org-tree li:only-child::before,.org-tree li:only-child::after{display:none;}
.org-tree li:only-child{padding-top:0;}
.org-tree li:first-child::before,.org-tree li:last-child::after{border:0 none;}
.org-tree li:last-child::before{border-right:2px solid var(--line);}
.org-tree ul ul::before{
  content:'';position:absolute;top:0;left:50%;
  border-left:2px solid var(--line);width:0;height:18px;
}
/* 본부→실 연결선(신규, 버그수정). ".org-tree ul ul"은 조상 사슬 상 "ul" 조상이 하나 더
   있어야 걸리는 선택자라 실→팀박스(3단계 아래)에는 걸리지만, 본부→실(root의 바로 다음
   단계, 2단계 아래)에는 걸리지 않는다 - jsdom으로 실제 매칭 결과를 확인해서 찾아낸
   문제로, 아래 전용 규칙으로 명시적으로 보완한다(대표이사→본부 트렁크와 같은 이유의
   버그이며 같은 방식으로 고쳤다). */
.org-tree-root > li > ul::before{
  content:'';position:absolute;top:0;left:50%;
  border-left:2px solid var(--line);width:0;height:18px;
}

/* 대표이사 행 + 대표이사→본부 트렁크(세로 연결선). 트리의 맨 위 레벨은 ".org-tree ul ul"
   같은 하위 선택자로는 걸리지 않아(대표이사 li 자체가 org-tree의 유일한 자식이 아니라 4개
   본부가 org-tree-root의 직속 자식이 되면서) 별도 규칙으로 명시했다 - 이전 버전에서
   대표이사-본부 연결선이 안 보이던 원인이 바로 이 선택자 문제였다. */
/* 대표이사 행 - 높이를 고정값(52px)으로 명시해둔다. 아래 .org-audit-branch가
   .org-chart 기준으로 절대배치되는데(바로 아래 설명 참고), 그 top 좌표를 계산하려면
   이 행의 높이를 알아야 하기 때문 - 폰트 렌더링에 따라 달라지는 실제 텍스트 높이에
   의존하지 않도록 고정하고, 안의 박스는 flex로 가운데 정렬한다. */
.org-ceo-row{display:flex;justify-content:center;align-items:center;height:52px;}
.org-tree-root{position:relative;padding-top:90px;}
.org-tree-root::before{
  content:'';position:absolute;top:0;left:50%;
  border-left:2px solid var(--line);width:0;height:90px;
}

/* 감사/감사실 - 4개 본부와 같은 가로줄에 나란히 두지 않고, 대표이사→본부 트렁크 중간
   지점에서 오른쪽으로 갈라지는 별도 가지로 배치.
   버그수정(2026-07-31, 2차): 트렁크를 56px→90px로 늘리면서 감사 가지 좌표를 다시
   계산했다. 지난 수정 때는 트렁크 "중간 지점"만 맞추고 감사 가지 자체의 세로 높이
   (감사 박스+세로선+감사실 박스, 총 3개 요소가 위아래로 쌓임)가 트렁크 폭 안에 다
   들어가는지는 확인하지 않아, 감사실 박스가 트렁크 아래에 있는 본부 박스 줄과 겹쳐
   보이는 문제가 있었다(첨부 스크린샷으로 확인). 이번에는 감사/감사실 박스 높이도
   32px로 고정해(.org-box-audit, 아래 참고) 가지 전체 높이를 정확히 계산할 수 있게
   했다: 32(감사)+14(세로선 .org-audit-vline)+32(감사실) = 78px. 트렁크 90px 안에
   78px짜리 가지를 위아래 여백이 균등하도록(90-78=12px → 위 6px/아래 6px) 배치하면
   top = 52(대표이사 행 고정 높이) + 6 = 58px. 이제 가지 전체(감사~감사실)가 트렁크
   구간(대표이사 행 끝 y=52 ~ 본부 행 시작 y=52+90=142) 안에 완전히 들어가
   본부 박스와 겹치지 않는다(58+78=136 ≤ 142). */
/* 버그수정(2026-07-31, 3차): 감사실을 클릭할 수 없고 감사도 마우스 위치에 따라 클릭이
   되다 안 되다 하는 문제 - 진짜 원인은 픽셀 좌표 계산이 아니라 쌓임 순서(stacking order)
   였다. .org-audit-branch는 .org-tree-root(본부 목록 ul)보다 마크업상 먼저 나오는
   "형제" 요소인데, 둘 다 position이 지정돼 있고 z-index는 지정하지 않은 상태(auto)라
   같은 쌓임 순위에서는 "문서에 나중에 나오는 요소가 위에 그려진다"는 규칙이 적용된다.
   .org-tree-root의 padding-top(트렁크 길이만큼의 빈 공간)과 각 <li>의 자체 padding은
   눈에는 안 보여도 실제로는 그 li/ul의 박스 영역이라 클릭을 가로챌 수 있는데, 이 보이지
   않는 영역이 감사 가지가 있는 자리와 겹치면서 감사/감사실보다 위쪽(나중 그려짐)에서
   클릭을 가로채고 있었다 - 감사 가지의 가로 위치가 본부 컬럼과 컬럼 사이 "빈 틈"에
   걸치느냐 아니냐에 따라 마우스 위치별로 클릭이 되다 안 되다 했던 것도 이걸로 설명된다.
   z-index를 명시적으로 지정해 항상 감사 가지가 위에 그려지고 클릭도 항상 감사 가지가
   먼저 받도록 고정한다. */
.org-audit-branch{
  position:absolute;top:58px;left:calc(50% + 120px);z-index:5;
  display:flex;flex-direction:column;align-items:center;
}
.org-audit-branch::before{
  content:'';position:absolute;top:16px;left:-120px;
  width:120px;height:0;border-top:2px solid var(--line);
}
.org-audit-vline{width:0;height:14px;border-left:2px solid var(--line);}

/* 조직도 박스 - 계층별 색상 단계(대표이사 > 본부 > 실 > 팀목록박스). 모두 직각 사각형
   (border-radius:0)으로 통일(2026-07-31, 사이트 다른 곳의 둥근 버튼/카드와는 별개로
   조직도 전용 스타일). */
.org-box{
  display:inline-block;padding:9px 15px;border-radius:0;font-size:13.5px;font-weight:700;
  border:1px solid var(--line);background:#fff;color:var(--ink-900);white-space:nowrap;font-family:inherit;
}
/* 대표이사/본부/실/감사/감사실 박스는 모두 클릭해서 직원안내 탭으로 연계되므로
   (2026-07-31 추가) <button> 태그를 쓰고 cursor:pointer + hover 배경으로 클릭 가능함을
   보여준다. */
.org-box-ceo{background:var(--navy-900);color:#fff;border-color:var(--navy-900);font-size:15px;padding:11px 26px;cursor:pointer;}
.org-box-ceo:hover{background:var(--navy-800);}
.org-box-dept{background:var(--navy-800);color:#fff;border-color:var(--navy-800);cursor:pointer;}
.org-box-dept:hover{background:var(--navy-700);}
.org-box-div{background:var(--navy-600);color:#fff;border-color:var(--navy-600);font-weight:600;font-size:12.5px;padding:8px 13px;cursor:pointer;}
.org-box-div:hover{background:var(--navy-700);}
/* 감사/감사실 박스는 높이를 32px로 고정한다(2026-07-31) - .org-audit-branch의 세로
   좌표 계산(감사+세로선+감사실 전체 높이가 트렁크 안에 들어가는지)이 실제 텍스트
   렌더링 높이가 아닌 고정값을 기준으로 정확히 맞아떨어지게 하기 위함.
   이번에 감사/감사실도 클릭 가능해져(cursor:default → pointer) 아래 회색 계열
   hover 배경을 추가했다. */
.org-box-audit{
  background:var(--ink-500);border-color:var(--ink-500);cursor:pointer;
  height:32px;padding:0 15px;display:flex;align-items:center;justify-content:center;
}
.org-box-audit:hover{background:var(--ink-700);}

/* 실 하단의 팀/지사 목록 박스 - 팀별 개별 박스+연결선 대신 하나의 박스 안에 줄줄이 나열.
   min-width를 없애 각 박스가 자기 안의 가장 긴 팀명 폭만큼만 차지하도록 해 전체 가로폭을
   줄였고(2026-07-31), 팀명 글자는 박스 안에서 가운데 정렬되도록 했다. */
.org-team-box{
  display:flex;flex-direction:column;gap:4px;padding:8px 10px;border:1px solid var(--line);
  border-radius:0;background:var(--bg-soft);
}
.org-team-link{
  display:block;font-size:12px;color:var(--ink-700);text-decoration:none;
  padding:2px 4px;border-radius:0;white-space:nowrap;text-align:center;
}
.org-team-link:hover{background:#fff;color:var(--navy-800);text-decoration:underline;}

/* 직원안내 탭 - 검색 폼 */
.org-search-form{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:24px;padding:18px;background:var(--bg-soft);border-radius:10px;}
.org-search-form select,.org-search-form input[type="text"]{
  padding:9px 12px;border:1px solid var(--line);border-radius:6px;font-size:13.5px;background:#fff;color:var(--ink-900);
}
.org-search-form select:disabled{color:var(--ink-500);background:#F0F1F4;}
.org-search-form input[type="text"]{flex:1;min-width:160px;}
.org-search-btn{
  width:40px;height:40px;flex:0 0 auto;border-radius:6px;border:none;background:var(--navy-800);color:#fff;
  display:flex;align-items:center;justify-content:center;cursor:pointer;
}
.org-search-btn:hover{background:var(--navy-700);}

/* 직원안내 탭 - 검색결과 표 */
.org-result-title{font-size:17px;font-weight:800;color:var(--ink-900);margin:0 0 14px;}
.org-result-table{width:100%;border-collapse:collapse;font-size:13.5px;}
.org-result-table th,.org-result-table td{padding:12px 10px;border-bottom:1px solid var(--line);text-align:center;}
.org-result-table thead th{background:var(--bg-soft);font-weight:700;color:var(--ink-900);border-top:2px solid var(--navy-800);}
.org-result-table td.org-empty{padding:40px 0;color:var(--ink-500);}

@media (max-width:720px){
  .org-search-form{flex-direction:column;align-items:stretch;}
  .org-search-form select,.org-search-form input[type="text"]{width:100%;}
  .org-search-btn{width:100%;}
}

/* 인증·수상 현황 섹션(신규, 2026-08-02, 메인 화면 하단, INST 전용)
   2026-08-29 - 사용자 요청으로 로고 아래 설명 문구(.cert-name)를 삭제하고 이미지만 남김 -
   더 이상 쓰는 곳이 없어진 .cert-name 규칙도 함께 삭제. 로고만 남아 카드가 훨씬 작아져도
   되므로, 기존에 ≤760px에서 1열로 쌓이던 것도 없애고 로고 박스 높이/카드 패딩을 줄여
   가장 좁은 모바일에서도 3장이 항상 한 줄에 들어가도록 함(요청사항 "한 줄에 다 나오도록"). */
.cert-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
.cert-card{
  display:flex;align-items:center;justify-content:center;padding:20px 12px;
  background:#fff;border:1px solid var(--line);border-radius:14px;text-decoration:none;
  transition:box-shadow .2s,transform .2s;
}
.cert-card:hover{box-shadow:0 10px 24px rgba(20,23,31,.08);transform:translateY(-3px);}
.cert-logo-box{width:100%;height:80px;display:flex;align-items:center;justify-content:center;}
.cert-logo-box img{max-width:100%;max-height:100%;object-fit:contain;}
@media (max-width:760px){
  .cert-grid{gap:10px;}
  .cert-card{padding:12px 8px;}
  .cert-logo-box{height:52px;}
}

/* 다국어지원(Google 웹사이트 번역기 연동, 2026-08-03 신설) - 유틸리티 바의 "ENGLISH" 자리를
   대체. #google_translate_element는 Google 위젯이 내부적으로 필요로 하는 숨은 요소(select 등)를
   담는 그릇일 뿐이라 화면 밖으로 완전히 밀어둔다(위젯 자체 UI 대신 아래 커스텀 버튼/드롭다운만
   사용).
   ⚠️ 2026-08-03 2차 수정 - 처음엔 번역 시 자동으로 붙는 상단 배너(iframe.goog-te-banner-frame)를
   `display:none`으로 숨기고 `body{top:0}`으로 되돌리려 했으나(+ lang-switch.js의
   MutationObserver로 계속 강제), 실제로 이 배너는 원래 구글이 자기 높이만큼 body를 자동으로
   밀어내려서(자체적으로 body에 top 값을 계산해 넣음) 배너와 본문이 겹치지 않게 설계된
   것이었습니다. 우리가 그 top 값을 계속 0으로 되돌려버려서 배너(고정 위치)와 유틸리티 바가
   서로 겹쳐 보이는 문제였던 것 - 배너를 숨기거나 되돌리는 대신 그냥 구글의 기본 동작(배너
   높이만큼 페이지 전체를 아래로 밀어내림)을 그대로 두기로 하고 아래 두 줄은 제거했습니다:
   `.goog-te-banner-frame{display:none !important}` / `body{top:0 !important}`
   (lang-switch.js의 MutationObserver도 동일한 이유로 제거함). */
#google_translate_element{position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;}
.goog-text-highlight{background:none !important;box-shadow:none !important;}

/* 2026-08-20 - 모바일 메뉴가 열려 util-bar가 position:fixed로 바뀐 상태에서 "다국어지원"을
   탭하면 버튼 클릭 대신 글자가 선택(하이라이트)되며 정작 클릭 이벤트는 발생하지 않는 문제가
   사용자 실제 기기에서 재현됨(이 세션의 자동화 클릭 테스트에서도 동일하게 재현 확인 - 클릭
   대신 텍스트가 파랗게 선택됨). 네이티브 <button>은 보통 기본적으로 선택 불가이지만, 실제로는
   짧은 탭에도 이렇게 선택으로 해석되는 경우가 있어(특히 이 요소처럼 조상이 position:fixed로
   막 전환된 상태) 명시적으로 선택을 막아 탭이 항상 클릭으로만 해석되도록 방어적으로 처리한다.
   버튼(.lang-switch-btn)뿐 아니라 메뉴 항목(.lang-switch-item)에도 동일하게 적용(아래). */
.lang-switch{position:relative;display:inline-flex;}
.lang-switch-btn{display:inline-flex;align-items:center;gap:6px;background:none;border:none;
  color:inherit;font:inherit;font-size:inherit;cursor:pointer;padding:0;opacity:.85;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}
.lang-switch-btn:hover{opacity:1;}
.lang-switch-gicon{width:14px;height:14px;flex-shrink:0;}
.lang-switch-btn::after{content:'';margin-left:2px;border-left:4px solid transparent;
  border-right:4px solid transparent;border-top:5px solid currentColor;opacity:.7;}
.lang-switch-menu{position:absolute;top:calc(100% + 12px);right:0;z-index:120;background:#fff;
  border-radius:10px;box-shadow:var(--shadow-lg);padding:14px 18px;columns:3;column-gap:22px;width:420px;}
.lang-switch-menu[hidden]{display:none;}
.lang-switch-item{display:block;width:100%;text-align:left;background:none;border:none;
  padding:6px 8px;margin:0 0 2px;border-radius:6px;font-size:12.5px;color:var(--ink-700);
  cursor:pointer;white-space:nowrap;break-inside:avoid;
  user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}
.lang-switch-item.selected{font-weight:800;color:var(--navy-800);}
.biz-page .lang-switch-item.selected{color:var(--orange-700);}
/* 2026-08-03 - 하이라이트가 흐려서 어떤 언어에 마우스가 있는지 알아보기 어렵다는 피드백으로
   진한 배경+흰 글자로 대비를 높임(선택된 상태여도 마우스를 올리면 이 스타일이 우선되도록
   .selected 규칙보다 아래에 위치). */
.lang-switch-item:hover{background:var(--navy-800);color:#fff;}
.biz-page .lang-switch-item:hover{background:var(--orange-700);color:#fff;}
@media (max-width:520px){
  .lang-switch-menu{width:270px;columns:2;right:-40px;}
}

/* 이용약관/개인정보처리방침 페이지(policy-page.html, 2026-08-03 신설) - 시행일자 드롭다운 +
   PDF 다운로드 + 본문. */
.policy-selector{display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--line);}
.policy-selector label{font-size:13.5px;font-weight:700;color:var(--ink-700);}
.policy-selector select{width:auto;min-width:180px;padding:9px 14px;border:1px solid var(--line);
  border-radius:8px;font-size:13.5px;background:#fff;color:var(--ink-900);}
.policy-pdf-link{margin-left:auto;display:inline-flex;align-items:center;gap:6px;
  font-size:13.5px;font-weight:700;color:var(--navy-800);}
.policy-pdf-link:hover{text-decoration:underline;}
.biz-page .policy-pdf-link{color:var(--orange-700);}
.policy-content h2{font-size:19px;font-weight:800;color:var(--ink-900);margin:32px 0 14px;
  padding-top:20px;border-top:1px solid var(--line);}
.policy-content h2:first-child{margin-top:0;padding-top:0;border-top:none;}
.policy-content h3{font-size:15.5px;font-weight:700;color:var(--ink-900);margin:20px 0 8px;}
.policy-content p{font-size:16px;line-height:1.8;color:var(--ink-700);margin:0 0 10px;}
.policy-content strong{color:var(--ink-900);}
.policy-table{width:100%;border-collapse:collapse;margin:14px 0 18px;font-size:13.5px;}
.policy-table th,.policy-table td{border:1px solid var(--line);padding:9px 12px;text-align:left;}
.policy-table thead th{background:var(--bg-soft);font-weight:700;color:var(--ink-900);}
.policy-empty{color:var(--ink-500);font-size:14px;text-align:center;padding:40px 0;}
@media (max-width:560px){
  .policy-pdf-link{margin-left:0;width:100%;}
}

/* 게임일정/게임결과/게임공지/토토가이드 페이지(game-schedule/game-result/game-notice/game-guide.html,
   2026-08-03~04) - 원본 사이트처럼 베트맨 iframe만 임베드하는 공용 스타일.
   2026-08-06 - 1차: 원본 사이트(sportstoto.co.kr)의 CSS(`.frame.schedule`등)에 박힌 높이값을
   그대로 가져왔는데(게임일정 1100/게임결과 850/게임공지 700/게임안내 600), 게임일정만 스크롤바가
   사라지고 나머지 3개는 여전히 iframe 내부 스크롤바가 남는 문제가 재발했다.
   2026-08-06(2차, 원인 확정) - 브라우저로 베트맨 iframe 주소를 직접 열어 실제 렌더링된 높이를
   측정해보니, 베트맨 쪽 공통 래퍼(`#iframeNoti.contents`)에 `min-height:875px`가 페이지 종류와
   무관하게 공통으로 박혀있었다 - 즉 원본 sportstoto.co.kr의 850/700/600px 자체가 베트맨 쪽 최신
   레이아웃(최소 875px)보다 낮게 잡힌, 원본 쪽에서도 이미 살짝 안 맞는 값이었던 것(원본 사이트가
   최신화되며 어긋난 것으로 추정, 우리 문제가 아니었음). 게임일정만 실제 콘텐츠(달력 그리드 등)가
   이 875px 바닥값을 넘어서 자체적으로 더 크기 때문에 1100px가 맞았던 것이고, 게임결과/게임공지는
   875px 바닥값이 그대로 적용되며, 토토가이드는 콘텐츠가 875px보다 더 커서 약 968~988px가 필요함을
   실측으로 확인했다. 이 실측값에 여유분(약 25px)을 더해 최종 반영: 게임결과/게임공지 900px,
   토토가이드 1000px(게임일정 1100px는 기존 값 그대로 유지, 이미 정상 확인됨). */
.embed-iframe-wrap{width:100%;}
.embed-iframe{width:100%;height:900px;border:none;display:block;} /* 기본값 = 게임결과 기준(베트맨 실측 875px + 여유분) */
.embed-iframe.embed-iframe--schedule{height:1100px;} /* 게임일정 - 달력 그리드 포함, 실측상 875px 바닥값을 넘어서는 페이지 */
.embed-iframe.embed-iframe--notice{height:900px;} /* 게임공지 - 베트맨 875px 바닥값 + 여유분 */
.embed-iframe.embed-iframe--guide{height:1000px;} /* 토토가이드 - 베트맨 실측 약 968~988px + 여유분 */

/* 2026-08-30 - "온라인 구매방법"(online-purchase.html)만 겪는 별도 문제 발견·수정: 이 페이지가
   띄우는 베트맨 URL(gameguide/buyGuideGameA.html)은 게임공지/배당률/게임결과/게임일정/토토가이드와
   달리 모바일 대응이 안 된 고정폭 페이지라, 실측 결과 가로 폭이 최소 980px 필요했다(Playwright로
   iframe 내부 document.scrollWidth 직접 측정 - 나머지 5개 페이지는 전부 327px로 문제 없음을
   같은 방법으로 재확인, 이 페이지만 해당). 모바일 화면에서 iframe을 100%(약 340px)로 좁혀 넣으면
   iframe *내부에서* 강제로 가로 스크롤이 생기는데, 베트맨 페이지 자체는 그런 내부 가로 스크롤을
   전혀 예상하지 못한 레이아웃(좌측 사이드바 등)이라 손가락으로 좌우 스와이프하면 사이드바와
   콘텐츠가 서로 어긋나며 겹쳐 보이는 버그가 발생했다(사용자 스크린샷으로 최초 리포트).
   게임공지 등 나머지 페이지처럼 PC/모바일(m.betman.co.kr) URL 분기를 시도해봤으나, 이 특정
   가이드 콘텐츠는 m.betman.co.kr 쪽에 동일한 내용의 모바일 전용 페이지가 없음을 확인했다(가장
   가까운 대체 이용안내 페이지조차 "베트맨은 PC에서만 이용 가능합니다"라고 안내함) - 그래서
   URL 분기 대신, iframe 자체를 베트맨이 필요로 하는 실제 폭(1000px, 실측 980px + 여유분)으로
   고정해 베트맨 페이지가 자기 레이아웃대로 내부 스크롤 없이 정상 렌더링되게 하고, 대신 바깥
   래퍼(.embed-iframe-wrap--scroll)에서 통째로 가로 스크롤하도록 책임을 옮겼다. 이렇게 하면
   iframe *내부*에서는 스크롤이 아예 발생하지 않으므로 사이드바-콘텐츠 어긋남 자체가 생기지
   않는다. 다른 5개 페이지는 이 문제가 없음을 실측으로 확인했으므로 그대로 두었다(불필요하게
   가로 스크롤 UX를 추가하지 않기 위함). */
.embed-iframe-wrap--scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.embed-iframe.embed-iframe--purchase{min-width:1000px;}

/* 게임일정/게임결과/게임공지/토토가이드 페이지 스크롤바 숨김 시도 - 원상복구(2026-08-06)
   ⚠️ 2026-08-03~04에 1~3차에 걸쳐 스크롤바를 "안 보이게" 만들려고 시도했었다(1차 CSS 숨김 →
   안 먹힘, 2차 html까지 확대 적용 → 여전히 안 먹힘, 3차 overflow clipping으로 화면 밖에 그리기 →
   그것도 실제로는 스크롤바가 콘텐츠 바로 옆에 그대로 보임, 2026-08-06 사용자 재확인). 그런데
   사용자가 원했던 최종 모습은 "스크롤바가 아예 없는 것"이 아니라 "브라우저 맨 오른쪽 끝에 나오는
   지극히 평범한 스크롤바"(원본 사이트도 그렇게 동작함)였다는 게 이번에 확인됨 - 즉 애초에 아무
   것도 하지 않는 것이 정답이었다. `html`/`body`에 `overflow:hidden`을 걸고 `#embedScrollClip`
   래퍼가 스크롤을 대신 떠맡게 하던 3차 방식을 걷어내고, 4개 페이지(game-schedule/game-result/
   game-notice/game-guide)의 `<html class="embed-page">`/`<body class="... embed-page">`/
   `<div id="embedScrollClip">` 래퍼도 함께 제거해 일반적인 문서 스크롤(=브라우저 기본 스크롤바)로
   되돌렸다. */

/* 자가진단 테스트(self-test.html, 2026-08-04 신설) - 원본 사이트(self.php)는 베트맨 iframe이
   아니라 자체 9문항 설문 로직을 가진 페이지라 이번엔 실제 UI를 새로 만든다. 원본의 부트스트랩
   기반 테이블형 레이아웃 대신 KOSPOLE 디자인 시스템(카드/알약형 버튼)에 맞춰 재구성했지만
   문항·선택지·점수 로직·결과 문구는 원본과 동일(점수 구간은 self-test.html 인라인 스크립트의
   SELFTEST_RESULT_BANDS 참고 - 실제 원본 사이트에 점수를 직접 제출해 확인함). */
.selftest-intro{max-width:760px;margin:0 auto 36px;text-align:center;}
.selftest-intro h2{font-size:24px;font-weight:700;color:var(--ink-900);line-height:1.5;margin:0 0 18px;}
.selftest-intro .selftest-sub{font-size:16px;color:var(--ink-700);margin:0 0 20px;}
.selftest-intro .selftest-desc{font-size:14px;color:var(--ink-500);line-height:1.6;background:var(--bg-soft);border-radius:var(--radius-md);padding:16px 20px;}

.selftest-qna-item{border-top:1px solid var(--line);padding:22px 4px;display:flex;align-items:center;gap:24px;flex-wrap:wrap;}
.selftest-qna-item:first-child{border-top:1px solid var(--ink-900);}
.selftest-qna-q{flex:1 1 420px;font-size:15px;color:var(--ink-900);line-height:1.5;}
.selftest-qna-choices{display:flex;gap:8px;flex:0 0 auto;flex-wrap:wrap;}
.selftest-choice{position:relative;}
.selftest-choice input{position:absolute;opacity:0;width:1px;height:1px;}
.selftest-choice label{display:flex;align-items:center;justify-content:center;min-width:64px;height:40px;padding:0 14px;border:1px solid var(--line);border-radius:999px;font-size:13px;color:var(--ink-700);cursor:pointer;transition:.15s;}
.selftest-choice input:checked+label{background:var(--navy-800);border-color:var(--navy-800);color:#fff;font-weight:600;}
.selftest-choice label:hover{border-color:var(--navy-600);}

.selftest-submit-row{border-top:1px solid var(--line);padding-top:24px;margin-top:8px;text-align:center;}
/* 2026-09-02 웹접근성 점검(검사항목 8) - 흰 텍스트와 짝지어지는 배경이라 --orange-600(3.58:1,
   미달) 대신 --orange-700(4.91:1)을 쓴다. */
.selftest-submit-btn{display:inline-flex;align-items:center;justify-content:center;min-width:160px;height:52px;border-radius:var(--radius-md);background:var(--orange-700);color:#fff;font-size:16px;font-weight:700;border:none;cursor:pointer;}
.selftest-submit-btn:hover{background:var(--orange-700);}

.selftest-result{max-width:660px;margin:0 auto;text-align:center;}
.selftest-result-score{font-size:20px;color:var(--ink-700);text-align:right;margin-bottom:8px;}
.selftest-result-score strong{font-size:32px;color:var(--orange-600-text);}
.selftest-result-title{font-size:28px;font-weight:700;color:var(--ink-900);margin:0 0 24px;}
.selftest-result-text{font-size:17px;color:var(--ink-900);line-height:1.7;margin-bottom:20px;}
.selftest-result-sub{font-size:16px;color:var(--ink-700);line-height:1.6;margin-bottom:28px;}
.selftest-result-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-bottom:20px;}
.selftest-action-btn{display:none;padding:10px 18px;border-radius:999px;border:1px solid var(--navy-600);color:var(--navy-800);font-size:14px;font-weight:600;text-decoration:none;}
.selftest-action-btn:hover{background:var(--navy-800);color:#fff;}
.selftest-retry-btn{display:inline-block;margin-top:8px;padding:10px 24px;border-radius:999px;background:var(--bg-soft);color:var(--ink-700);font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--line);}

/* 투표권 적중확인(score-check.html, 2026-08-04 신설) - 원본 사이트(score_check.php)의 QR 안내
   박스 + 오프라인 조회 입력 박스 레이아웃을 재현. 실제 판매 DB가 없어 "적중조회" 버튼은 항상
   원본에도 있는 "조회 불가" 안내 문구를 보여준다(자세한 배경은 score-check.html 인라인 주석 참고). */
.scorecheck-box{border:1px solid var(--line);background:#fcfcfc;border-radius:var(--radius-md);padding:24px;margin-bottom:24px;}
.scorecheck-qr-row{display:flex;gap:24px;align-items:center;}
.scorecheck-qr-img{flex:0 0 130px;width:130px;}
.scorecheck-qr-img img{width:100%;display:block;border-radius:var(--radius-sm);}
.scorecheck-title{font-size:18px;font-weight:700;color:var(--ink-900);margin-bottom:12px;}
.scorecheck-desc{font-size:14px;color:var(--ink-700);line-height:1.7;}
.scorecheck-offline-row{display:flex;gap:24px;align-items:flex-start;}
.scorecheck-offline-img{flex:0 0 130px;width:130px;}
.scorecheck-offline-img img{width:100%;display:block;border-radius:var(--radius-sm);border:1px solid var(--line);}
.scorecheck-offline-body{flex:1;min-width:0;}
.scorecheck-input-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:22px;}
.scorecheck-input{width:88px;height:44px;border:1px solid var(--line);border-radius:var(--radius-sm);text-align:center;font-size:15px;}
.scorecheck-input:focus{outline:none;border-color:var(--navy-600);}
.scorecheck-dash{color:var(--ink-500);}
.scorecheck-btn{height:44px;padding:0 22px;border-radius:var(--radius-sm);background:var(--navy-800);color:#fff;font-size:14px;font-weight:700;border:none;cursor:pointer;}
.scorecheck-btn:hover{background:var(--navy-900);}
.scorecheck-error{margin-top:18px;padding:16px 18px;background:var(--bg-soft);border-radius:var(--radius-sm);font-size:13px;color:var(--ink-700);line-height:1.7;}
.scorecheck-ps{font-size:13px;color:var(--ink-500);line-height:1.9;}

/* 투표권 적중확인 - 조회 결과 표(2026-08-04, 실제 API 연동 시 추가). 원본 사이트의
   score_result_line 표 구조를 그대로 재현 - 상태/게임종목·게임회차/판매일시·판매금액/
   적중순위개수·적중일시/적중순위·적중금 5줄. */
.scorecheck-result{margin-top:22px;border-top:1px solid var(--line);}
.scorecheck-result-row{display:flex;border-bottom:1px solid var(--line);}
.scorecheck-result-status-row{border-top:1px solid var(--ink-900);}
.scorecheck-result-label{flex:0 0 120px;padding:14px 16px;background:var(--bg-soft);font-size:13px;color:var(--ink-700);font-weight:600;}
.scorecheck-result-value{flex:1;min-width:0;padding:14px 16px;font-size:14px;color:var(--ink-900);}
.scorecheck-result-status{font-weight:700;color:var(--red-600-text);}
.scorecheck-retry-row{text-align:center;padding-top:22px;}
.scorecheck-retry-btn{display:inline-block;padding:10px 24px;border-radius:999px;background:var(--navy-800);color:#fff;font-size:14px;font-weight:600;cursor:pointer;border:none;}
.scorecheck-retry-btn:hover{background:var(--navy-900);}
@media (max-width: 720px){
  .scorecheck-result-row{flex-wrap:wrap;}
  .scorecheck-result-label,.scorecheck-result-value{flex:1 1 50%;}
}
@media (max-width: 720px){
  .scorecheck-qr-row,.scorecheck-offline-row{flex-direction:column;align-items:flex-start;}
  .scorecheck-qr-img,.scorecheck-offline-img{flex:0 0 auto;width:110px;}
  .scorecheck-input{width:22%;min-width:60px;}
}

/* 빙상단 페이지(skating-club.html, 2026-08-05 신설) - 사업안내 > KOSPOLE 스포츠단 > 빙상단.
   idea-proposal.html의 .idea-tabs 4단 탭 패턴을 그대로 재사용(탭 개수만 3->4). */
.team-intro-section{margin-bottom:40px;}
.team-intro-section:last-child{margin-bottom:0;}
.team-intro-heading{display:flex;align-items:center;gap:10px;font-size:22px;font-weight:800;color:var(--ink-900);margin:0 0 18px;}
.team-intro-heading .no{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--navy-800);color:#fff;font-size:13px;font-weight:700;flex:0 0 auto;}
.team-emblem-row{display:flex;gap:32px;align-items:center;}
.team-emblem-img{flex:0 0 260px;}
.team-emblem-img img{width:100%;display:block;}
.team-emblem-list{flex:1;min-width:0;margin:0;padding:0;list-style:none;}
.team-emblem-list li{position:relative;padding-left:16px;font-size:16px;line-height:1.8;color:var(--ink-700);margin-bottom:10px;}
.team-emblem-list li:last-child{margin-bottom:0;}
.team-emblem-list li::before{content:'';position:absolute;left:0;top:10px;width:5px;height:5px;border-radius:50%;background:var(--navy-600);}
.team-uniform-img{text-align:center;}
.team-uniform-img img{max-width:100%;}
.team-uniform-caption{margin-top:18px;font-size:16px;line-height:1.8;color:var(--ink-700);text-align:center;max-width:640px;margin-left:auto;margin-right:auto;}
.team-goal-title{font-size:20px;font-weight:800;color:var(--navy-800);line-height:1.5;margin:0 0 16px;}
.team-goal-text{font-size:15px;line-height:1.85;color:var(--ink-700);}

/* 코칭스탭/선수 - 서울시청 선수단 홈페이지 형식(사진+이름+경력사항) 재구성 */
.roster-group-title{display:flex;align-items:center;gap:10px;font-size:18px;font-weight:800;color:var(--navy-800);margin:36px 0 4px;padding-bottom:12px;border-bottom:2px solid var(--navy-800);}
.roster-group-title:first-child{margin-top:0;}
.roster-list{margin:0;}
.roster-card{display:flex;gap:28px;padding:26px 4px;border-bottom:1px solid var(--line);}
.roster-card:first-of-type{border-top:1px solid var(--ink-900);}
.roster-photo{flex:0 0 140px;width:140px;height:140px;border-radius:var(--radius-md);overflow:hidden;background:var(--bg-soft);}
/* object-fit:contain(2026-08-05, 2차 수정) - 처음엔 object-fit:cover(꽉 채우고 넘치는 부분
   자르기) + object-position:top으로 "잘리더라도 얼굴 쪽은 보존"하는 방식을 썼는데, 그래도
   원본 비율이 정사각형(140x140 박스)과 다른 사진은 일부가 계속 잘렸다(예: 여자축구단 신규
   얼굴사진 68x84 - 세로가 살짝 더 길어 위/아래가 소폭 잘림). 사용자가 "사진이 작게 나와도
   되니 얼굴 전체가 다 보이게" 요청해 object-fit:contain(잘라내지 않고 박스 안에 전체가 들어
   오도록 축소, 남는 여백은 .roster-photo의 배경색으로 채워짐)으로 전면 변경 - 어떤 원본
   비율이든 항상 사진 전체가 보장된다. 이미 정사각형(300x300 등)인 사진은 박스에 꽉 차게
   나와 기존과 시각적으로 동일하다. */
.roster-photo img{width:100%;height:100%;object-fit:contain;display:block;}
.roster-info{flex:1;min-width:0;}
.roster-name{font-size:17px;font-weight:800;color:var(--ink-900);margin-bottom:12px;}
.roster-career-heading{font-size:13px;font-weight:700;color:var(--navy-700);margin-bottom:8px;}
.roster-career-list{margin:0;padding:0;list-style:none;}
.roster-career-list li{position:relative;padding-left:14px;font-size:14px;line-height:1.75;color:var(--ink-700);}
.roster-career-list li::before{content:'·';position:absolute;left:0;color:var(--ink-500);}
/* 여자축구단 선수 카드 3열 레이아웃(2026-08-05) - 사용자가 새 선수 사진을 첨부하며 "새 사진(왼쪽) |
   경력사항(가운데) | 기존 사진(오른쪽)" 형태로 두 사진을 함께 보여달라고 요청. .roster-photo가
   이미 flex:0 0 140px라 세 번째 .roster-photo를 마크업에 추가하기만 하면 자동으로 3열이 되고,
   기존 사진 쪽에는 살짝 옅게 처리해 "새 사진"과 구분되는 참고용임을 표시한다. */
.roster-photo-secondary-wrap{flex:0 0 140px;}
.roster-photo-secondary{opacity:.72;}
/* 오른쪽(기존 사진) 열은 object-fit:contain 전면 변경(3차 수정) 대상에서 제외(2026-08-05, 4차 수정) -
   왼쪽(새 사진)은 얼굴 전체가 보이도록 contain을 유지하되, 오른쪽은 사용자가 "수정 전 사진으로
   되돌려달라"고 요청해 그 이전 방식인 object-fit:cover + object-position:top(꽉 채우고 위쪽 기준
   크롭)으로 되돌림. 아울러 오른쪽 사진 아래 "기존 사진" 캡션도 제거 요청받아 마크업/CSS 모두 삭제. */
.roster-photo-secondary img{object-fit:cover;object-position:top;}
@media (max-width: 640px){
  .team-emblem-row{flex-direction:column;align-items:stretch;}
  .team-emblem-img{flex:0 0 auto;max-width:220px;margin:0 auto;}
  .roster-card{flex-direction:column;gap:14px;}
  .roster-photo{width:110px;height:110px;}
  /* 2026-08-10 - 본문 소제목("① 여자축구단 개요" 등) 데스크톱 폭 확대(19px→22px)에 맞춰 모바일도
     함께 검토, 가독성 좋은 크기로 한 단계 낮췄다. */
  .team-intro-heading{font-size:18px;}
}

/* 응원하기 게시판(cheer-board.js가 공용으로 쓰는 마크업/스타일).
   2026-08-07 개편: 익명 자유게시판(닉네임 자유입력) → OAuth 본인인증 게이트 + 목록/상세/글쓰기
   3단 구조로 전면 교체(civil-board-list.html "고객의 소리"와 동일한 룩). 목록은 .cheer-board-table
   (아래), 본인인증 게이트는 .oauth-login-box(공용, 이 파일 아래쪽 참고)를 그대로 재사용하고,
   글쓰기 폼(내용 textarea)만 이 섹션에 남아있다. */
.cheer-content-input{width:100%;min-height:90px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--radius-sm);font-size:14.5px;line-height:1.6;resize:vertical;font-family:inherit;margin-bottom:12px;}
.cheer-submit-row{display:flex;justify-content:space-between;align-items:center;}
.cheer-char-count{font-size:12.5px;color:var(--ink-500);}
.cheer-submit-btn{height:42px;padding:0 24px;border-radius:var(--radius-sm);background:var(--orange-600);color:#fff;font-size:14px;font-weight:700;border:none;cursor:pointer;}
.cheer-submit-btn:hover{background:var(--orange-700);}

/* 목록 - civil-board-table과 시각적으로 동일하되, 컬럼 수가 달라(4개: 번호/내용/작성자/등록일)
   civil-board-table의 반응형 규칙(4번째 컬럼 숨김 = 거기선 첨부파일)이 그대로 걸리면 안 되므로
   별도 클래스로 분리했다(스타일 내용은 동일하게 복제). */
.cheer-board-table{width:100%;border-collapse:collapse;}
.cheer-board-table th,.cheer-board-table td{padding:13px 8px;border-bottom:1px solid var(--line);font-size:13.5px;text-align:center;}
.cheer-board-table th{color:var(--ink-500);font-weight:700;font-size:12px;border-bottom:2px solid var(--ink-900);}
.cheer-board-table td.col-content{text-align:left;}
.cheer-board-table td.col-content a{color:var(--ink-900);}
.cheer-board-table td.col-content a:hover{text-decoration:underline;}
@media (max-width:760px){.cheer-board-table{font-size:12px;}}

/* 여자축구단 페이지(womens-soccer-club.html, 2026-08-05) 전용 추가 요소 - 빙상단의 team 계열,
   roster 계열 클래스를 그대로 재사용하되, "3F 목표" 박스와 코칭스탭/선수 카드의 인적사항
   요약 줄(생년월일/출신교, 등번호/포지션 등)만 새로 추가한다.
   [2026-08-30 발견·수정] 이 주석에 원래 클래스명을 별표(와일드카드)+슬래시로 나열해 적어뒀는데,
   와일드카드 뒤에 슬래시가 바로 붙으면 CSS 주석 종료 기호와 우연히 같은 두 글자가 만들어져
   주석이 그 자리에서 조기 종료되고, 뒤에 이어지는 설명 문장 전체가 실제 CSS로 잘못 파싱되어
   버로 다음 규칙인 .team-3f-grid의 display:grid 선언이 통째로 무효화(사라짐)되는 버그가
   있었다 - "3F 목표" 그리드가 3열이 아니라 1열로 세로 쌓이는 형태로 렌더링되고 있었을 것
   (빙상단·휠체어테니스단 소개 탭). 클래스명을 나열할 때 와일드카드 뒤에는 항상 쉼표나 공백을
   넣어 그 두 글자 조합이 우연히 만들어지지 않게 할 것 - 같은 실수가 이 파일 안에 두 곳 더
   있었다(styles.css 아래쪽 "여자축구단 소개"/"응원하기·경기일정" 관련 주석, 둘 다 같은
   방식으로 수정). */
.team-3f-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:20px;}
.team-3f-card{background:var(--bg-soft);border-radius:var(--radius-md);padding:20px 18px;text-align:center;}
.team-3f-card .f-word{font-size:17px;font-weight:800;color:var(--navy-800);margin-bottom:6px;}
.team-3f-card .f-desc{font-size:13.5px;color:var(--ink-700);line-height:1.5;}
.roster-meta{font-size:13px;color:var(--ink-500);margin-bottom:12px;}
@media (max-width: 640px){
  .team-3f-grid{grid-template-columns:1fr;}
}

/* 여자축구단 "경기일정" 탭(2026-08-30 신설) - sportstoto.co.kr 실제 경기일정 페이지(사용자
   제공 스크린샷)와 동일하게 라운드/경기일시/홈·원정/결과 4열 표 형태로 만들고, 행을 클릭하면
   상세(사진·설명)를 보여준다. 가장 좁은 모바일에서도 참고 이미지처럼 4열 그대로 유지하되
   패딩/글자만 줄인다(다른 섹션들처럼 스와이프 캐러셀로 바꾸지 않음 - 원본 참고 화면 자체가
   이미 좁은 화면에서도 표 형태를 유지하고 있었기 때문). main.js가 아니라 womens-soccer-club.html
   전용 womens-soccer-schedule.js가 렌더링을 담당한다.
   2026-08-30 톤앤매너 개편: "여자축구단 소개" 탭과 맞추기 위해 아래 색상을 전부 라이트 톤에서
   다크+골드 톤으로 바꿨다 - .schedule-*는 이 페이지 전용 클래스라 스코프 없이 바로 바꿔도
   안전함(grep으로 다른 페이지 미사용 확인). */
.schedule-toolbar{display:flex;justify-content:flex-end;margin-bottom:16px;}
.schedule-toolbar select{padding:8px 14px;border:1px solid rgba(255,255,255,.16);border-radius:8px;font-size:14px;font-weight:700;color:#F5F1E8;background:rgba(255,255,255,.05);}

.schedule-table{width:100%;border-collapse:collapse;}
.schedule-table th,.schedule-table td{padding:14px 6px;border-bottom:1px solid rgba(255,255,255,.08);font-size:14px;text-align:center;color:#F5F1E8;}
.schedule-table th{color:rgba(245,241,232,.55);font-weight:700;font-size:12.5px;border-bottom:2px solid rgba(255,255,255,.2);}
.schedule-table tbody tr{cursor:pointer;transition:background .15s ease;}
.schedule-table tbody tr:hover{background:rgba(255,255,255,.05);}
.schedule-table .schedule-team-stack{display:flex;flex-direction:column;gap:2px;font-weight:700;color:#F5F1E8;line-height:1.4;}
.schedule-table .schedule-vs{font-size:10.5px;color:rgba(245,241,232,.45);font-weight:400;}
.schedule-table .col-result{font-weight:800;white-space:nowrap;}
.schedule-table .col-result.win{color:var(--gold,#F5B800);}
.schedule-table .col-result.lose{color:#FF8A80;}
.schedule-table .col-result.draw{color:rgba(245,241,232,.6);}
.schedule-table .col-result.pending{color:rgba(245,241,232,.4);font-weight:400;}
.schedule-empty{text-align:center;padding:60px 0;color:rgba(245,241,232,.5);}

@media (max-width:480px){
  .schedule-table th,.schedule-table td{padding:10px 3px;font-size:12px;}
  .schedule-table th{font-size:10px;}
}

.schedule-detail-head{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:8px;padding:28px 20px;text-align:center;margin-bottom:24px;}
.schedule-detail-round{font-size:13.5px;font-weight:800;color:var(--gold,#F5B800);letter-spacing:.04em;margin-bottom:10px;}
.schedule-detail-teams{font-size:22px;font-weight:800;color:#F5F1E8;margin:0 0 6px;}
.schedule-detail-teams .schedule-detail-score{color:var(--gold,#F5B800);margin:0 8px;}
.schedule-detail-meta{font-size:14px;color:rgba(245,241,232,.55);}
.schedule-detail-meta span+span::before{content:'·';margin:0 8px;color:rgba(255,255,255,.25);}
.schedule-detail-content{line-height:1.7;color:#F5F1E8;}
.schedule-detail-content img{max-width:100%;height:auto;display:inline-block;}
.schedule-detail-content p{margin:0 0 4px;}
.schedule-detail-content a{color:var(--gold,#F5B800);font-weight:700;text-decoration:underline;}

/* ============================================================
   여자축구단 "소개" 탭 - 매거진풍 다크 테마 재구성(2026-08-30, 사용자 제공 참고 디자인
   HTML(genspark) 레이아웃을 그대로 적용). 사이트 전역에서 이미 쓰이는 이름과 겹치는
   범용 클래스명(.hero/.overview/.nav 등)을 그대로 가져오면 다른 페이지가 깨지므로
   전부 `.wsc-intro-` 접두사로 새로 이름 붙였다 - 기존 team 계열, roster 계열 클래스(빙상단·
   휠체어테니스단 소개 탭이 공유하는 클래스, styles.css 위쪽 참고)는 이 작업에서 전혀 건드리지
   않는다(여자축구단만 이 새 디자인, 다른 두 구단 페이지는 기존 디자인 그대로 유지).
   참고 디자인 원본에 있던 자체 상단 nav/footer는 이 페이지의 실제 GNB·풋터와 중복되므로
   가져오지 않고, hero 이하 콘텐츠 섹션만 이식했다. 원본은 뷰포트 전체 폭으로 배경이
   깔리는 구조였는데, 이 탭은 이미 `.wrap`(최대 1400px) 안에 있어 그 폭 기준으로만
   가장자리까지 배경이 닿도록(`margin:0 -24px`, .wrap의 좌우 padding 24px 상쇄) 조정했다.
   ============================================================ */
.wsc-intro{color:var(--paper,#F5F1E8);}
.wsc-intro-display{font-family:'Anton',sans-serif;font-weight:400;letter-spacing:-.01em;line-height:.88;text-transform:uppercase;}
.wsc-intro-mono{font-family:'Space Grotesk',monospace;letter-spacing:.05em;}
.wsc-intro img{max-width:100%;display:block;}

/* ---- HERO ---- */
.wsc-intro-hero{
  position:relative;overflow:hidden;background:#0A0A0A;
  margin:0 -24px 0;min-height:460px;height:min(74vh,680px);
}
.wsc-intro-hero-img{
  position:absolute;inset:0;background:url('images/womens-soccer-schedule/20260407011809568317382.jpg') center 30%/cover no-repeat;
  filter:grayscale(.1) contrast(1.05) brightness(.7);
}
.wsc-intro-hero-vignette{
  position:absolute;inset:0;
  background:radial-gradient(ellipse at 30% 40%,transparent 0%,rgba(10,10,10,.35) 55%,rgba(10,10,10,.92) 100%),
             linear-gradient(180deg,rgba(10,10,10,.5) 0%,transparent 32%,transparent 62%,rgba(10,10,10,.96) 100%);
}
.wsc-intro-hero-content{
  position:relative;z-index:2;height:100%;display:flex;flex-direction:column;justify-content:space-between;
  padding:56px 40px 40px;
}
.wsc-intro-hero-eyebrow{display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;color:var(--gold,#F5B800);text-transform:uppercase;}
.wsc-intro-hero-eyebrow::before{content:"";width:32px;height:1px;background:var(--gold,#F5B800);}
.wsc-intro-hero-title{margin-top:auto;}
.wsc-intro-hero-title h2{font-size:clamp(44px,9vw,120px);color:#F5F1E8;line-height:.86;}
.wsc-intro-hero-title h2 .row2{display:block;color:var(--gold,#F5B800);}
.wsc-intro-hero-meta{display:flex;gap:32px;margin-top:28px;font-family:'Space Grotesk',sans-serif;flex-wrap:wrap;}
.wsc-intro-hero-meta .cell .lbl{font-size:10px;letter-spacing:.22em;color:#8B8680;text-transform:uppercase;margin-bottom:6px;}
.wsc-intro-hero-meta .cell .val{font-size:22px;font-weight:500;color:#F5F1E8;}
@media (max-width:760px){
  .wsc-intro-hero{margin:0 -16px;height:420px;min-height:420px;}
  .wsc-intro-hero-content{padding:36px 20px 28px;}
  .wsc-intro-hero-meta{gap:22px;}
  .wsc-intro-hero-meta .cell .val{font-size:17px;}
}

/* ---- SECTION FRAME ---- */
.wsc-intro-section{padding:80px 0;}
@media (max-width:760px){.wsc-intro-section{padding:52px 0;}}
/* 2026-09-02 웹접근성 점검(검사항목 8) - 이 기본값이 쓰이는 밝은 배경(#F5F1E8)에서
   #C99500(2.39:1, 미달)보다 어두운 톤(5.26:1)으로 교체. --gold-deep의 다른 사용처(버튼 hover
   등)에는 영향 주지 않도록 여기서만 직접 지정(변수 fallback 대신 하드코딩). */
.wsc-intro-sec-num{
  font-family:'Space Grotesk',monospace;font-size:11px;letter-spacing:.28em;text-transform:uppercase;
  margin-bottom:20px;display:flex;align-items:center;gap:12px;color:#7D6000;
}
.wsc-intro-sec-num::before{content:"";width:32px;height:1px;background:currentColor;}
.wsc-intro-overview .wsc-intro-sec-num{color:var(--gold,#F5B800);}
/* 2026-09-02 웹접근성 점검(검사항목 8) - .wsc-intro-emblem 섹션은 어두운 배경(#0A0A0A)이라
   기본값(밝은 배경용으로 어둡게 조정한 색)이 오히려 미달이 되어 별도 지정(10.09:1). */
.wsc-intro-emblem .wsc-intro-sec-num{color:#E0B400;}
.wsc-intro-sec-title{font-size:clamp(34px,5.5vw,68px);line-height:.95;margin-bottom:44px;}
.wsc-intro-sec-title .accent{color:var(--gold,#F5B800);}

/* ---- OVERVIEW (다크) ---- */
.wsc-intro-overview{background:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.wsc-intro-overview{margin:0 -16px;padding:52px 16px;}}
.wsc-intro-overview .wsc-intro-sec-title{color:#F5F1E8;}
/* ⚠️ 2026-08-30 - 이 프로젝트에서 이미 한 번 겪은 것과 같은 그리드 함정(recruit-panel 관련
   주석 참고) - grid 자식은 기본값이 min-width:auto라 안에 큰 이미지 등이 들어있으면 그 칸이
   줄어들지 않고 옆 칸(텍스트)이 거의 0폭으로 밀려 한 글자씩 줄바꿈되는 버그가 실제로 발생
   (사용자 스크린샷으로 확인) - 이 아래 .wsc-intro-*-grid/-header/-showcase 전부에
   `> *{min-width:0}`을 미리 걸어 재발을 막는다. */
.wsc-intro-overview-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:56px;align-items:start;}
.wsc-intro-overview-grid > *{min-width:0;}
@media (max-width:900px){.wsc-intro-overview-grid{grid-template-columns:1fr;gap:32px;}}
.wsc-intro-tag{
  display:inline-flex;align-items:center;gap:10px;padding:7px 14px;border:1px solid rgba(245,241,232,.16);
  border-radius:100px;font-size:11px;letter-spacing:.22em;color:#F5F1E8;text-transform:uppercase;margin-bottom:24px;
}
.wsc-intro-tag .dot{width:6px;height:6px;background:var(--gold,#F5B800);border-radius:50%;}
.wsc-intro-lead{font-size:19px;line-height:1.6;color:#F5F1E8;opacity:.85;max-width:520px;margin-bottom:36px;font-weight:400;}
.wsc-intro-lead b{color:var(--gold,#F5B800);font-weight:700;}
.wsc-intro-info-table{border-top:1px solid rgba(245,241,232,.14);}
.wsc-intro-info-row{display:grid;grid-template-columns:120px 1fr;gap:20px;padding:18px 0;border-bottom:1px solid rgba(245,241,232,.14);align-items:baseline;}
.wsc-intro-info-row > *{min-width:0;}
.wsc-intro-info-row .k{font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.2em;color:#8B8680;text-transform:uppercase;}
.wsc-intro-info-row .v{font-size:15.5px;color:#F5F1E8;line-height:1.5;}
.wsc-intro-info-row .v .en{display:block;font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.12em;color:#8B8680;margin-top:4px;text-transform:uppercase;}
@media (max-width:760px){.wsc-intro-info-row{grid-template-columns:92px 1fr;gap:14px;}}
.wsc-intro-overview-visual{position:relative;}
.wsc-intro-overview-visual img{width:100%;height:440px;object-fit:cover;filter:contrast(1.05) saturate(1.05);}
.wsc-intro-stat-block{position:absolute;bottom:-18px;left:-18px;z-index:2;background:var(--gold,#F5B800);color:#0A0A0A;padding:20px 24px;}
.wsc-intro-stat-block .n{font-family:'Anton';font-size:56px;line-height:.9;}
.wsc-intro-stat-block .l{font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;margin-top:4px;font-weight:700;}
@media (max-width:760px){
  .wsc-intro-overview-visual img{height:280px;}
  .wsc-intro-stat-block{padding:14px 18px;left:0;bottom:-14px;}
  .wsc-intro-stat-block .n{font-size:40px;}
}

/* ---- VISION 3F (밝은 배경 - 원본 그대로) ---- */
.wsc-intro-vision{background:var(--paper,#F5F1E8);color:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.wsc-intro-vision{margin:0 -16px;padding:52px 16px;}}
.wsc-intro-vision .wsc-intro-sec-title{color:#0A0A0A;}
.wsc-intro-vision-header{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:end;margin-bottom:56px;}
.wsc-intro-vision-header > *{min-width:0;}
@media (max-width:900px){.wsc-intro-vision-header{grid-template-columns:1fr;gap:20px;}}
.wsc-intro-vision-header .rt{font-size:16px;line-height:1.7;color:#333;max-width:460px;}
.wsc-intro-three-f{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;background:#0A0A0A;border:2px solid #0A0A0A;}
.wsc-intro-three-f > *{min-width:0;}
@media (max-width:760px){.wsc-intro-three-f{grid-template-columns:1fr;}}
.wsc-intro-f-card{background:var(--paper,#F5F1E8);position:relative;padding:40px 32px 32px;min-height:400px;display:flex;flex-direction:column;overflow:hidden;transition:background .4s ease;}
.wsc-intro-f-card::before{content:"";position:absolute;inset:0;z-index:0;background-size:cover;background-position:center;opacity:0;transition:opacity .5s ease;filter:grayscale(.15) contrast(1.05);}
.wsc-intro-f-card:nth-child(1)::before{background-image:url('images/womens-soccer-schedule/202604070117072073314288.jpg');}
.wsc-intro-f-card:nth-child(2)::before{background-image:url('images/womens-soccer-schedule/20260407011317270512432.jpg');}
.wsc-intro-f-card:nth-child(3)::before{background-image:url('images/womens-soccer-schedule/20260407011700829347152.jpg');}
.wsc-intro-f-card::after{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(10,10,10,.2),rgba(10,10,10,.86));opacity:0;transition:opacity .5s ease;}
.wsc-intro-f-card:hover{background:#0A0A0A;}
.wsc-intro-f-card:hover::before{opacity:.55;}
.wsc-intro-f-card:hover::after{opacity:1;}
.wsc-intro-f-card:hover .f-num,.wsc-intro-f-card:hover .f-name,.wsc-intro-f-card:hover .f-title,.wsc-intro-f-card:hover .f-desc{color:#F5F1E8;}
.wsc-intro-f-card > *{position:relative;z-index:2;transition:color .4s;}
.wsc-intro-f-card .f-num{font-family:'Space Grotesk';font-size:11px;letter-spacing:.28em;color:#8B8680;display:flex;justify-content:space-between;text-transform:uppercase;margin-bottom:auto;}
.wsc-intro-f-card .f-mark{font-family:'Anton';font-size:130px;line-height:.85;color:#0A0A0A;margin:0 0 -.05em -.02em;}
.wsc-intro-f-card:nth-child(2) .f-mark{color:var(--gold-deep,#C99500);}
.wsc-intro-f-card .f-name{font-family:'Anton';font-size:42px;line-height:.9;color:#0A0A0A;margin-top:16px;}
.wsc-intro-f-card .f-title{margin-top:14px;font-size:13.5px;color:#0A0A0A;opacity:.65;line-height:1.5;}
.wsc-intro-f-card .f-desc{margin-top:20px;font-size:13px;line-height:1.6;color:#666;padding-top:16px;border-top:1px solid rgba(10,10,10,.15);}
.wsc-intro-vision-quote{margin-top:56px;padding:44px 32px;background:#0A0A0A;color:#F5F1E8;display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center;}
.wsc-intro-vision-quote > *{min-width:0;}
.wsc-intro-vision-quote .qmark{font-family:'Anton';font-size:100px;line-height:.7;color:var(--gold,#F5B800);}
.wsc-intro-vision-quote .qtxt{font-size:18px;line-height:1.6;font-weight:400;}
.wsc-intro-vision-quote .qtxt b{color:var(--gold,#F5B800);font-weight:600;}
@media (max-width:760px){
  .wsc-intro-vision-quote{grid-template-columns:1fr;padding:28px 20px;gap:14px;}
  .wsc-intro-vision-quote .qmark{font-size:60px;}
  .wsc-intro-f-card .f-mark{font-size:88px;}
  .wsc-intro-f-card .f-name{font-size:32px;}
  .wsc-intro-f-card{min-height:auto;padding:26px 20px;}
}

/* ---- EMBLEM (다크) ---- */
.wsc-intro-emblem{background:#0A0A0A;margin:0 -24px;padding:80px 24px;position:relative;overflow:hidden;}
@media (max-width:760px){.wsc-intro-emblem{margin:0 -16px;padding:52px 16px;}}
.wsc-intro-emblem .wsc-intro-sec-title{color:#F5F1E8;}
.wsc-intro-emblem-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;}
.wsc-intro-emblem-grid > *{min-width:0;}
@media (max-width:900px){.wsc-intro-emblem-grid{grid-template-columns:1fr;gap:32px;}}
.wsc-intro-emblem-vis{position:relative;aspect-ratio:1/1;background:radial-gradient(circle at 50% 40%,#1a1a1a 0%,#0A0A0A 70%);border:1px solid rgba(245,241,232,.14);display:flex;align-items:center;justify-content:center;padding:48px;}
.wsc-intro-emblem-vis img{width:100%;max-width:320px;filter:drop-shadow(0 20px 60px rgba(245,184,0,.15));}
.wsc-intro-emblem-sub{font-size:18px;line-height:1.6;font-weight:400;color:#F5F1E8;opacity:.82;margin-bottom:32px;}
.wsc-intro-emblem-points{list-style:none;counter-reset:pt;}
.wsc-intro-emblem-points li{counter-increment:pt;display:grid;grid-template-columns:50px 1fr;gap:18px;padding:20px 0;border-top:1px solid rgba(245,241,232,.14);}
.wsc-intro-emblem-points li > *{min-width:0;}
.wsc-intro-emblem-points li:last-child{border-bottom:1px solid rgba(245,241,232,.14);}
.wsc-intro-emblem-points li::before{content:"0" counter(pt);font-family:'Space Grotesk';font-size:13px;color:var(--gold,#F5B800);letter-spacing:.08em;padding-top:2px;}
.wsc-intro-emblem-points .pt-title{font-family:'Anton';font-size:17px;color:#F5F1E8;letter-spacing:.02em;margin-bottom:6px;text-transform:uppercase;}
.wsc-intro-emblem-points .pt-body{font-size:13.5px;line-height:1.65;color:#8B8680;}
.wsc-intro-emblem-points .pt-body b{color:#F5F1E8;font-weight:600;}

/* ---- UNIFORM (다크) ---- */
.wsc-intro-uniform{background:linear-gradient(180deg,#0A0A0A 0%,#0f0f0f 100%);margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.wsc-intro-uniform{margin:0 -16px;padding:52px 16px;}}
.wsc-intro-uniform .wsc-intro-sec-title{color:#F5F1E8;}
.wsc-intro-uniform-head{display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:end;margin-bottom:44px;}
.wsc-intro-uniform-head > *{min-width:0;}
@media (max-width:900px){.wsc-intro-uniform-head{grid-template-columns:1fr;gap:20px;}}
.wsc-intro-uniform-head .rt{font-size:16px;line-height:1.7;color:#F5F1E8;opacity:.75;max-width:480px;}
.wsc-intro-uniform-showcase{background:var(--paper,#F5F1E8);padding:40px;border-radius:2px;display:grid;grid-template-columns:1.4fr 1fr;gap:40px;align-items:center;}
.wsc-intro-uniform-showcase > *{min-width:0;}
.wsc-intro-uniform-showcase img{width:100%;max-height:420px;object-fit:contain;}
.wsc-intro-swatches{display:flex;flex-direction:column;gap:2px;}
.wsc-intro-swatch{display:grid;grid-template-columns:44px 1fr;gap:14px;align-items:center;padding:12px 0;border-bottom:1px solid rgba(10,10,10,.1);}
.wsc-intro-swatch:last-child{border-bottom:none;}
.wsc-intro-swatch .chip{width:44px;height:44px;}
.wsc-intro-swatch .info .n{font-family:'Anton';font-size:17px;color:#0A0A0A;letter-spacing:.02em;text-transform:uppercase;}
.wsc-intro-swatch .info .h{font-family:'Space Grotesk';font-size:10.5px;color:#666;letter-spacing:.08em;margin-top:2px;}
@media (max-width:760px){.wsc-intro-uniform-showcase{grid-template-columns:1fr;padding:24px;gap:22px;}}

/* ---- CLOSING (다크, 사진 배경) ---- */
.wsc-intro-closing{
  position:relative;min-height:340px;margin:0 -24px;padding:0;
  background:url('images/womens-soccer-schedule/20260407011809568317382.jpg') center/cover no-repeat;
  display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden;
}
@media (max-width:760px){.wsc-intro-closing{margin:0 -16px;}}
.wsc-intro-closing::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,10,.86) 0%,rgba(10,10,10,.55) 50%,rgba(10,10,10,.9) 100%);}
.wsc-intro-closing-inner{position:relative;z-index:2;padding:64px 20px;}
.wsc-intro-closing .eyebrow{font-size:11px;letter-spacing:.3em;color:var(--gold,#F5B800);text-transform:uppercase;margin-bottom:20px;}
.wsc-intro-closing h3{font-family:'Anton';font-size:clamp(34px,7vw,84px);line-height:.9;color:#F5F1E8;}
.wsc-intro-closing h3 .gd{color:var(--gold,#F5B800);display:inline-block;}
.wsc-intro-closing .sub{margin-top:18px;font-size:15.5px;color:#F5F1E8;opacity:.85;max-width:520px;margin-left:auto;margin-right:auto;line-height:1.6;}

/* =========================================================
   여자축구단 - "코칭스탭"/"선수" 탭 (2026-08-30 개편)
   참고: 젠스파크 Team.html 디자인의 레이아웃(다크 톤 · 골드 포인트 · Fraunces 세리프
   · JetBrains Mono 넘버링 · 감독 히어로+스태프 그리드+포지션별 선수 그리드)을 차용했다.
   원본은 사진이 전혀 없이 이니셜 글자·거대 등번호·추상 그라데이션으로만 이뤄진 완전
   가상 데이터 목업이었는데, 실제 코치/선수 사진과 실제 인적사항(생년월일·출신교·경력)
   으로 전면 교체했다(사용자 확인: "전체를 사진으로 교체" 방식 채택). 원본에 있던 apps/
   goals/assists/height/foot/country 같은 기록은 우리 데이터에 없어서 지어내지 않고
   전부 뺐다. 원본 자체의 상단 nav·footer·섹션 내부 코치/선수 토글 탭은 실제 사이트
   GNB/이 페이지의 상단 탭(#teamTabs)과 중복이라 빼고, 코치/선수 두 패널만 이식했다.
   기존 .roster-*(빙상단·휠체어테니스단 페이지와 공유하는 클래스라 절대 수정 금지)와
   완전히 분리된 .wsc-team- 접두사로 새 이름공간을 만들었다. 코칭스탭 4명(감독 제외)의
   상세 경력은 카드에 다 못 넣으므로 선수 카드와 동일하게 클릭 → 모달 방식으로 확장
   했다(사용자 확인: "선수처럼 모달 확장" 방식 채택) - 모달 내용은 각 카드 안의
   <template>에 정적 HTML로 넣어두고 JS는 그걸 그대로 복제해서 보여주기만 한다(별도
   데이터 배열을 따로 유지할 필요가 없어 유지보수가 쉽다). ========================================================= */
.wsc-team{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 84px;}
@media (max-width:760px){.wsc-team{margin:0 -16px;padding:44px 16px 60px;}}

.wsc-team-sechdr{display:grid;grid-template-columns:150px 1fr;gap:24px;align-items:end;
  padding-bottom:28px;margin-bottom:44px;border-bottom:1px solid rgba(255,255,255,.12);}
.wsc-team-sechdr-num{font-family:'JetBrains Mono',ui-monospace,monospace;font-size:12px;
  letter-spacing:.12em;color:var(--gold,#F5B800);}
.wsc-team-sechdr h2{grid-column:2;font-family:'Fraunces',serif;font-weight:600;
  font-size:clamp(26px,4vw,42px);line-height:1.15;margin:0 0 10px;color:#F5F1E8;}
.wsc-team-sechdr h2 em{font-style:italic;color:var(--gold,#F5B800);}
.wsc-team-sechdr-kicker{grid-column:2;font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;}
@media (max-width:640px){.wsc-team-sechdr{grid-template-columns:1fr;gap:8px;}
  .wsc-team-sechdr h2,.wsc-team-sechdr-kicker{grid-column:1;}}

/* ---- 감독 히어로 ---- */
.wsc-team-hero{display:grid;grid-template-columns:1.05fr 1fr;gap:44px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);
  border-radius:6px;padding:36px;margin-bottom:36px;}
.wsc-team-hero>*{min-width:0;}
@media (max-width:900px){.wsc-team-hero{grid-template-columns:1fr;padding:24px;gap:26px;}}
.wsc-team-hero-portrait{position:relative;border-radius:3px;overflow:hidden;
  min-height:360px;background:#111;}
.wsc-team-hero-portrait img{width:100%;height:100%;min-height:360px;object-fit:cover;
  display:block;filter:grayscale(.15) contrast(1.05);}
.wsc-team-hero-badge{position:absolute;left:16px;top:16px;font-family:'JetBrains Mono',monospace;
  font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:#0A0A0A;
  background:var(--gold,#F5B800);padding:5px 12px;border-radius:2px;font-weight:700;}
.wsc-team-hero-body{display:flex;flex-direction:column;justify-content:center;min-width:0;}
.wsc-team-hero-role{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.1em;
  color:var(--gold,#F5B800);margin-bottom:10px;}
.wsc-team-hero-name{font-family:'Fraunces',serif;font-weight:600;font-size:clamp(28px,4vw,44px);
  margin:0 0 10px;color:#F5F1E8;}
.wsc-team-hero-meta{font-size:13.5px;color:rgba(245,241,232,.62);margin-bottom:26px;}
.wsc-team-hero-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.wsc-team-hero-career ul{list-style:none;margin:0;padding:0;columns:2;column-gap:28px;}
.wsc-team-hero-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);
  padding:7px 0;border-top:1px solid rgba(255,255,255,.08);break-inside:avoid;}
.wsc-team-hero-career li:first-child{border-top:none;}
@media (max-width:640px){.wsc-team-hero-career ul{columns:1;}}

/* ---- 스태프 그리드 ---- */
.wsc-team-staff-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
@media (max-width:1180px){.wsc-team-staff-grid{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.wsc-team-staff-grid{grid-template-columns:repeat(2,1fr);gap:10px;}}
.wsc-team-staff-card{cursor:pointer;background:rgba(255,255,255,.03);
  border:1px solid rgba(255,255,255,.08);border-radius:6px;overflow:hidden;padding:0;
  transition:border-color .18s ease,transform .18s ease;text-align:left;display:block;
  width:100%;font:inherit;color:inherit;}
.wsc-team-staff-card:hover{border-color:var(--gold,#F5B800);transform:translateY(-3px);}
.wsc-team-staff-photo{aspect-ratio:1/1;background:#111;overflow:hidden;}
.wsc-team-staff-photo img{width:100%;height:100%;object-fit:cover;display:block;
  filter:grayscale(.15);}
.wsc-team-staff-body{padding:14px 16px 18px;}
.wsc-team-staff-role{font-family:'JetBrains Mono',monospace;font-size:10.5px;
  letter-spacing:.08em;color:var(--gold,#F5B800);text-transform:uppercase;margin-bottom:6px;}
.wsc-team-staff-name{font-size:16px;font-weight:700;margin:0 0 4px;}
.wsc-team-staff-meta{font-size:12px;color:rgba(245,241,232,.55);}

/* ---- 선수 탭 필터바 ---- */
.wsc-team-filterbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:32px;}
.wsc-team-ftab{background:transparent;border:1px solid rgba(255,255,255,.16);color:rgba(245,241,232,.7);
  border-radius:999px;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;
  transition:all .15s ease;font-family:inherit;}
.wsc-team-ftab .c{opacity:.6;margin-left:5px;font-family:'JetBrains Mono',monospace;font-size:11.5px;}
.wsc-team-ftab.active,.wsc-team-ftab:hover{background:var(--gold,#F5B800);border-color:var(--gold,#F5B800);color:#0A0A0A;}
.wsc-team-ftab.active .c,.wsc-team-ftab:hover .c{opacity:.7;}

/* ---- 포지션 밴드 ---- */
.wsc-team-band{display:flex;align-items:baseline;gap:16px;padding:22px 0 14px;
  border-bottom:1px solid rgba(255,255,255,.12);margin-top:8px;}
.wsc-team-band-code{font-family:'Fraunces',serif;font-style:italic;font-weight:600;
  font-size:30px;color:var(--gold,#F5B800);}
.wsc-team-band-full{font-size:13px;color:rgba(245,241,232,.55);text-transform:uppercase;letter-spacing:.06em;}
.wsc-team-band-count{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:11.5px;
  color:rgba(245,241,232,.45);}

/* ---- 선수 카드 그리드 ---- */
.wsc-team-players{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:8px;}
@media (max-width:1180px){.wsc-team-players{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.wsc-team-players{grid-template-columns:repeat(2,1fr);gap:10px;}}
.wsc-team-player-card{position:relative;aspect-ratio:3/4;border-radius:5px;overflow:hidden;
  cursor:pointer;background:#111;border:1px solid rgba(255,255,255,.08);padding:0;display:block;
  width:100%;font:inherit;color:inherit;transition:transform .18s ease,border-color .18s ease;}
.wsc-team-player-card:hover{transform:translateY(-4px);border-color:var(--gold,#F5B800);}
.wsc-team-player-card>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  filter:grayscale(.1);}
.wsc-team-player-card::after{content:"";position:absolute;left:0;right:0;bottom:0;height:62%;
  background:linear-gradient(180deg,rgba(10,10,10,0) 0%,rgba(10,10,10,.92) 100%);pointer-events:none;}
.wsc-team-player-no{position:absolute;left:10px;top:10px;z-index:2;font-family:'Fraunces',serif;
  font-style:italic;font-weight:600;font-size:15px;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6);}
.wsc-team-player-pos{position:absolute;right:10px;top:10px;z-index:2;font-family:'JetBrains Mono',monospace;
  font-size:11px;font-weight:700;letter-spacing:.05em;color:var(--gold,#F5B800);
  background:rgba(10,10,10,.55);padding:3px 8px;border-radius:2px;}
.wsc-team-player-pos.gk{color:#7CB9E8;}
.wsc-team-player-info{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:12px 14px 14px;text-align:left;}
.wsc-team-player-name{font-size:15.5px;font-weight:700;color:#fff;margin-bottom:3px;}
.wsc-team-player-meta{font-size:11px;color:rgba(245,241,232,.65);}
.wsc-team-band-group[hidden],.wsc-team-player-card[hidden]{display:none;}

/* ---- 코치/선수 공용 상세 모달 ---- */
.wsc-team-modal-scrim{position:fixed;inset:0;z-index:400;background:rgba(6,6,6,.82);
  display:none;align-items:center;justify-content:center;padding:20px;}
.wsc-team-modal-scrim.open{display:flex;}
.wsc-team-modal{width:100%;max-width:760px;max-height:88vh;overflow-y:auto;
  background:#111;border:1px solid rgba(255,255,255,.1);border-radius:8px;
  display:grid;grid-template-columns:1fr 1.15fr;color:#F5F1E8;position:relative;}
.wsc-team-modal>*{min-width:0;}
@media (max-width:720px){.wsc-team-modal{grid-template-columns:1fr;max-height:92vh;}}
.wsc-team-modal-portrait{position:relative;min-height:280px;background:#000;}
/* object-fit:cover(+top)로 "박스를 꽉 채우기"를 시도했었는데(2026-08-30 1차 수정), 코치
   상세 모달처럼 박스 가로세로 비율이 원본 사진과 많이 다르면 top 기준으로도 사진 아래쪽
   (턱 밑)이 잘려 보이는 문제가 남아있었다(사용자 스크린샷으로 확인). object-fit:contain으로
   바꿔 원본 사진 전체가 항상 잘리지 않고 박스 안에 다 들어오도록 축소해서 보여주고, 남는
   여백은 검정 배경(.wsc-team-modal-portrait의 background:#000)이 자연스럽게 채운다. */
.wsc-team-modal-portrait img{width:100%;height:100%;object-fit:contain;object-position:center;
  display:block;position:absolute;inset:0;filter:grayscale(.1);}
.wsc-team-modal-close{position:absolute;right:14px;top:14px;z-index:3;width:32px;height:32px;
  border-radius:50%;border:none;background:rgba(10,10,10,.6);color:#fff;font-size:16px;
  cursor:pointer;display:flex;align-items:center;justify-content:center;}
.wsc-team-modal-close:hover{background:var(--gold,#F5B800);color:#0A0A0A;}
.wsc-team-modal-body{padding:32px 30px;min-width:0;}
.wsc-team-modal-role{font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.1em;
  color:var(--gold,#F5B800);text-transform:uppercase;margin-bottom:10px;}
.wsc-team-modal-name{font-family:'Fraunces',serif;font-weight:600;font-size:28px;margin:0 0 6px;color:#F5F1E8;}
.wsc-team-modal-meta{font-size:13px;color:rgba(245,241,232,.6);margin-bottom:22px;}
.wsc-team-modal-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.wsc-team-modal-career ul{list-style:none;margin:0;padding:0;}
.wsc-team-modal-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);
  padding:8px 0;border-top:1px solid rgba(255,255,255,.08);}
.wsc-team-modal-career li:first-child{border-top:none;}

/* =========================================================
   여자축구단 - "응원하기"/"경기일정" 탭 톤앤매너 개편(2026-08-30)
   "여자축구단 소개" 탭(.wsc-intro-*)과 톤을 맞추기 위해 두 탭을 같은 다크(#0A0A0A)+골드
   (var(--gold)) 풀블리드 섹션으로 감쌌다. 헤더는 .wsc-intro-sec-num/.wsc-intro-sec-title를
   그대로 재사용(새 클래스를 또 만들지 않고 이미 있는 "0N — LABEL" 에디토리얼 헤더 패턴을
   그대로 이식) - 각 탭 안에서는 독립적으로 01부터 시작한다(다른 탭 번호와 이어지는 일련번호
   아님, 코치/선수 탭도 각자 01/02로 시작하는 것과 동일한 관례).
   "경기일정"(.schedule-*)은 이 페이지 전용 클래스라 위에서 기본 규칙 자체를 다크 톤으로
   바꿨지만, "응원하기"는 civil-board-list.html 등 5개 페이지가 공유하는 cheer-board.js의
   컴포넌트(.cheer-board-table/.pagination/.view-계열/.cheer-content-input/.cheer-submit-btn/
   .btn-outline)를 그대로 쓰기 때문에, 기본 규칙은 절대 건드리지 않고 .wsc-cheer 스코프
   안에서만 색을 오버라이드했다(다른 5개 페이지의 라이트 톤은 그대로 유지됨).
   본인인증 OAuth 박스(.oauth-login-box, 구글/네이버/카카오 공식 브랜드 버튼 포함)는 일부러
   오버라이드하지 않았다 - 브랜드 버튼 고유색(흰/초록/노랑)을 다크 배경 위에서도 그대로
   유지해 즉시 인식 가능한 밝은 카드로 다크 섹션 위에 떠 있는 형태가 더 자연스럽다. */
.wsc-cheer,.wsc-schedule{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 80px;}
@media (max-width:760px){.wsc-cheer,.wsc-schedule{margin:0 -16px;padding:44px 16px 56px;}}
.wsc-cheer-sechdr,.wsc-schedule-sechdr{margin-bottom:12px;}
.wsc-cheer-kicker{font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;margin:-24px 0 40px;}
@media (max-width:640px){.wsc-cheer-kicker{margin-top:-14px;}}

/* ---- 응원하기: 공용 cheer-board 컴포넌트를 이 탭 안에서만 다크 톤으로 오버라이드 ---- */
.wsc-cheer .cheer-board-table th{color:rgba(245,241,232,.55);border-bottom-color:rgba(255,255,255,.2);}
.wsc-cheer .cheer-board-table td{border-bottom-color:rgba(255,255,255,.08);color:#F5F1E8;}
.wsc-cheer .cheer-board-table td.col-content a{color:#F5F1E8;}
.wsc-cheer .pagination button{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.16);color:#F5F1E8;}
.wsc-cheer .pagination button.active{background:var(--gold,#F5B800);border-color:var(--gold,#F5B800);color:#0A0A0A;}
.wsc-cheer .civil-list-actions .btn.btn-inst{background:var(--gold,#F5B800);color:#0A0A0A;box-shadow:none;}
.wsc-cheer .civil-list-actions .btn.btn-inst:hover{background:var(--gold-deep,#C99400);}
.wsc-cheer .view-head{border-bottom-color:rgba(255,255,255,.2);}
.wsc-cheer .view-meta{color:rgba(245,241,232,.55);}
.wsc-cheer .view-content{color:#F5F1E8;}
.wsc-cheer .cheer-content-input{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.18);color:#F5F1E8;}
.wsc-cheer .cheer-content-input::placeholder{color:rgba(245,241,232,.4);}
.wsc-cheer .cheer-char-count{color:rgba(245,241,232,.5);}
.wsc-cheer .cheer-submit-btn{background:var(--gold,#F5B800);color:#0A0A0A;}
.wsc-cheer .cheer-submit-btn:hover{background:var(--gold-deep,#C99400);}
.wsc-cheer .msg.ok{color:#8FE3A6;}
.wsc-cheer .msg.err{color:#FF8A80;}

/* "← 목록으로"/"← 메인으로" 아웃라인 버튼 - 응원하기/경기일정 두 탭 모두에서 다크 배경에
   맞게 밝은 텍스트로. border는 currentColor라 색만 바꾸면 테두리도 같이 밝아진다. */
.wsc-cheer .btn.btn-outline,.wsc-schedule .btn.btn-outline{color:#F5F1E8;}
.wsc-cheer .btn.btn-outline:hover,.wsc-schedule .btn.btn-outline:hover{background:rgba(255,255,255,.08);}

/* =========================================================
   휠체어테니스단 - "소개"/"코칭스탭"/"선수"/"응원하기" 탭 전면 개편(2026-08-30)
   레이아웃은 여자축구단(.wsc-intro-*, .wsc-team-*, .wsc-cheer) 구조를 그대로 이식하되, 색감은
   이 팀 엠블럼(tennis_logo.png - 그린을 주색, 골드를 보조색으로 쓰는 디자인)에 맞춰 골드가
   주색이던 자리를 전부 그린으로, 보조 강조색은 골드로 바꿨다. 새 이름공간은 .wct- 접두사(다른
   팀 페이지의 .wsc-*와 완전히 분리, 클래스명 겹칠 일 없음). 빙상단과 공유하는 team 계열,
   roster 계열 클래스는 이 페이지에서 더는 안 쓰지만 원래 규칙은 무변경(빙상단 페이지 그대로
   동작). 참고: 클래스명을 comment에 나열할 때 와일드카드 뒤에 슬래시를 바로 붙이면 CSS 주석
   종료 기호와 우연히 같아져 다음 규칙이 통째로 사라지는 사고가 났던 적이 있어(2026-08-30,
   PROJECT_STATUS.md 144번), 이 주석에서는 항상 쉼표로 구분했다.
   컬러: 그린 #0F7A3D(주색, --gold 자리), 그린딥 #0B5C2E(hover), 골드 #C9A227(보조,
   사이트 공통 --gold와 거의 동일해 재사용), 골드딥 #A9821D. ========================================================= */
.wct-intro{color:#F5F1E8;}
.wct-intro-display{font-family:'Anton',sans-serif;font-weight:400;letter-spacing:-.01em;line-height:.88;text-transform:uppercase;}
.wct-intro-mono{font-family:'Space Grotesk',monospace;letter-spacing:.05em;}
.wct-intro img{max-width:100%;display:block;}

/* ---- HERO ---- */
.wct-intro-hero{position:relative;overflow:hidden;background:#0A0A0A;margin:0 -24px 0;min-height:460px;height:min(74vh,680px);}
.wct-intro-hero-img{position:absolute;inset:0;background-size:cover;background-position:center 30%;filter:grayscale(.1) contrast(1.05) brightness(.65);}
.wct-intro-hero-vignette{position:absolute;inset:0;
  background:radial-gradient(ellipse at 30% 40%,transparent 0%,rgba(10,10,10,.35) 55%,rgba(10,10,10,.92) 100%),
             linear-gradient(180deg,rgba(10,10,10,.5) 0%,transparent 32%,transparent 62%,rgba(10,10,10,.96) 100%);}
.wct-intro-hero-content{position:relative;z-index:2;height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:56px 40px 40px;}
.wct-intro-hero-eyebrow{display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;color:#2FAF6C;text-transform:uppercase;}
.wct-intro-hero-eyebrow::before{content:"";width:32px;height:1px;background:#2FAF6C;}
.wct-intro-hero-title{margin-top:auto;}
.wct-intro-hero-title h2{font-size:clamp(40px,8vw,104px);color:#F5F1E8;line-height:.88;}
.wct-intro-hero-title h2 .row2{display:block;color:#2FAF6C;}
.wct-intro-hero-meta{display:flex;gap:32px;margin-top:28px;font-family:'Space Grotesk',sans-serif;flex-wrap:wrap;}
.wct-intro-hero-meta .cell .lbl{font-size:10px;letter-spacing:.22em;color:#8B8680;text-transform:uppercase;margin-bottom:6px;}
.wct-intro-hero-meta .cell .val{font-size:22px;font-weight:500;color:#F5F1E8;}
@media (max-width:760px){
  .wct-intro-hero{margin:0 -16px;height:420px;min-height:420px;}
  .wct-intro-hero-content{padding:36px 20px 28px;}
  .wct-intro-hero-meta{gap:22px;}
  .wct-intro-hero-meta .cell .val{font-size:17px;}
}

/* ---- SECTION FRAME (소개 탭 섹션 헤더 - 코칭스탭/선수/응원하기 탭 sechdr도 그대로 재사용) ---- */
.wct-intro-section{padding:80px 0;}
@media (max-width:760px){.wct-intro-section{padding:52px 0;}}
/* 2026-09-02 웹접근성 점검(검사항목 8) - 이 기본값이 쓰이는 밝은 배경(#F5F1E8)에서
   #A9821D(3.16:1, 미달)보다 어두운 톤(5.53:1)으로 교체. */
.wct-intro-sec-num{font-family:'Space Grotesk',monospace;font-size:11px;letter-spacing:.28em;text-transform:uppercase;
  margin-bottom:20px;display:flex;align-items:center;gap:12px;color:#7A5C15;}
.wct-intro-sec-num::before{content:"";width:32px;height:1px;background:currentColor;}
.wct-intro-overview .wct-intro-sec-num,.wct-team-sechdr .wct-intro-sec-num,.wct-cheer-sechdr .wct-intro-sec-num{color:#2FAF6C;}
/* 2026-09-02 웹접근성 점검(검사항목 8) - .wct-intro-emblem 섹션은 어두운 배경(#0A0A0A)이라
   기본값(밝은 배경용으로 어둡게 조정한 색)이 오히려 미달이 되어 별도 지정(8.94:1). */
.wct-intro-emblem .wct-intro-sec-num{color:#D4A845;}
.wct-intro-sec-title{font-size:clamp(34px,5.5vw,68px);line-height:.95;margin-bottom:44px;}
.wct-intro-sec-title .accent{color:#2FAF6C;}

/* ---- 1) 개요 ---- */
.wct-intro-overview{background:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.wct-intro-overview{margin:0 -16px;padding:52px 16px;}}
.wct-intro-overview .wct-intro-sec-title{color:#F5F1E8;}
.wct-intro-overview-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:56px;align-items:start;}
.wct-intro-overview-grid > *{min-width:0;}
@media (max-width:900px){.wct-intro-overview-grid{grid-template-columns:1fr;gap:32px;}}
.wct-intro-tag{display:inline-flex;align-items:center;gap:8px;font-size:11px;letter-spacing:.2em;color:#8B8680;text-transform:uppercase;margin-bottom:22px;}
.wct-intro-tag .dot{width:6px;height:6px;background:#2FAF6C;border-radius:50%;}
.wct-intro-lead{font-size:19px;line-height:1.6;color:#F5F1E8;opacity:.85;max-width:520px;margin-bottom:36px;font-weight:400;}
.wct-intro-lead b{color:#2FAF6C;font-weight:700;}
.wct-intro-info-table{border-top:1px solid rgba(245,241,232,.14);}
.wct-intro-info-row{display:grid;grid-template-columns:120px 1fr;gap:20px;padding:18px 0;border-bottom:1px solid rgba(245,241,232,.14);align-items:baseline;}
.wct-intro-info-row > *{min-width:0;}
@media (max-width:760px){.wct-intro-info-row{grid-template-columns:92px 1fr;gap:14px;}}
.wct-intro-info-row .k{font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.2em;color:#8B8680;text-transform:uppercase;}
.wct-intro-info-row .v{font-size:15.5px;color:#F5F1E8;line-height:1.5;}
.wct-intro-info-row .v .en{display:block;font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.12em;color:#8B8680;margin-top:4px;text-transform:uppercase;}
.wct-intro-overview-visual{position:relative;}
.wct-intro-overview-visual img{width:100%;height:440px;object-fit:cover;object-position:center 22%;filter:contrast(1.05) saturate(1.05);}
.wct-intro-stat-block{position:absolute;bottom:-18px;left:-18px;z-index:2;background:#2FAF6C;color:#0A0A0A;padding:20px 24px;}
.wct-intro-stat-block .n{font-family:'Anton';font-size:56px;line-height:.9;}
.wct-intro-stat-block .l{font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;margin-top:4px;font-weight:700;}

/* ---- 2) 목표 ---- */
.wct-intro-vision{background:#F5F1E8;color:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.wct-intro-vision{margin:0 -16px;padding:52px 16px;}}
.wct-intro-vision .wct-intro-sec-title{color:#0A0A0A;}
.wct-intro-vision-header{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:end;margin-bottom:48px;}
.wct-intro-vision-header > *{min-width:0;}
@media (max-width:900px){.wct-intro-vision-header{grid-template-columns:1fr;gap:20px;}}
.wct-intro-vision-header .rt{font-size:16px;line-height:1.7;color:#333;max-width:460px;}
.wct-intro-goal-card{background:#0A0A0A;color:#F5F1E8;padding:40px 36px;}
.wct-intro-goal-title{font-family:'Anton';font-size:clamp(22px,3vw,30px);line-height:1.25;color:#2FAF6C;margin-bottom:18px;text-transform:none;}
.wct-intro-goal-text{font-size:15px;line-height:1.8;color:#F5F1E8;opacity:.85;}
.wct-intro-vision-quote{margin-top:44px;padding:44px 32px;background:#0A0A0A;color:#F5F1E8;display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center;}
.wct-intro-vision-quote > *{min-width:0;}
.wct-intro-vision-quote .qmark{font-family:'Anton';font-size:100px;line-height:.7;color:#C9A227;}
.wct-intro-vision-quote .qtxt{font-size:18px;line-height:1.6;font-weight:400;}
.wct-intro-vision-quote .qtxt b{color:#C9A227;font-weight:600;}

/* ---- 3) 엠블럼 ---- */
.wct-intro-emblem{background:#0A0A0A;margin:0 -24px;padding:80px 24px;position:relative;overflow:hidden;}
@media (max-width:760px){.wct-intro-emblem{margin:0 -16px;padding:52px 16px;}}
.wct-intro-emblem .wct-intro-sec-title{color:#F5F1E8;}
.wct-intro-emblem-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;}
.wct-intro-emblem-grid > *{min-width:0;}
@media (max-width:900px){.wct-intro-emblem-grid{grid-template-columns:1fr;gap:32px;}}
.wct-intro-emblem-vis{position:relative;aspect-ratio:1/1;background:radial-gradient(circle at 50% 40%,#10201a 0%,#0A0A0A 70%);border:1px solid rgba(245,241,232,.14);display:flex;align-items:center;justify-content:center;padding:48px;}
.wct-intro-emblem-vis img{width:100%;max-width:280px;filter:drop-shadow(0 20px 60px rgba(15,122,61,.25));}
.wct-intro-emblem-sub{font-size:18px;line-height:1.6;font-weight:400;color:#F5F1E8;opacity:.82;margin-bottom:32px;}
.wct-intro-emblem-points{list-style:none;counter-reset:pt;}
.wct-intro-emblem-points li{counter-increment:pt;display:grid;grid-template-columns:50px 1fr;gap:18px;padding:20px 0;border-top:1px solid rgba(245,241,232,.14);}
.wct-intro-emblem-points li > *{min-width:0;}
.wct-intro-emblem-points li:last-child{border-bottom:1px solid rgba(245,241,232,.14);}
.wct-intro-emblem-points li::before{content:"0" counter(pt);font-family:'Space Grotesk';font-size:13px;color:#2FAF6C;letter-spacing:.08em;padding-top:2px;}
.wct-intro-emblem-points .pt-title{font-family:'Anton';font-size:17px;color:#F5F1E8;letter-spacing:.02em;margin-bottom:6px;text-transform:uppercase;}
.wct-intro-emblem-points .pt-body{font-size:13.5px;line-height:1.65;color:#8B8680;}
.wct-intro-emblem-points .pt-body b{color:#F5F1E8;font-weight:600;}

/* ---- CLOSING(다크, 사진 배경) ---- */
.wct-intro-closing{position:relative;min-height:340px;margin:0 -24px;padding:0;background-size:cover;background-position:center;background-repeat:no-repeat;display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden;}
@media (max-width:760px){.wct-intro-closing{margin:0 -16px;}}
.wct-intro-closing::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,10,.86) 0%,rgba(10,10,10,.55) 50%,rgba(10,10,10,.9) 100%);}
.wct-intro-closing-inner{position:relative;z-index:2;padding:64px 20px;}
.wct-intro-closing .eyebrow{font-size:11px;letter-spacing:.3em;color:#2FAF6C;text-transform:uppercase;margin-bottom:20px;}
.wct-intro-closing h3{font-family:'Anton';font-size:clamp(34px,7vw,84px);line-height:.9;color:#F5F1E8;}
.wct-intro-closing h3 .gd{color:#2FAF6C;display:inline-block;}
.wct-intro-closing .sub{margin-top:18px;font-size:15.5px;color:#F5F1E8;opacity:.85;max-width:520px;margin-left:auto;margin-right:auto;line-height:1.6;}

/* =========================================================
   휠체어테니스단 - "코칭스탭"/"선수" 탭(.wct-team-*, 여자축구단 .wsc-team-* 구조 이식,
   그린/골드 톤). 코치 스태프 1명, 선수 4명뿐이라 포지션 필터·밴드 그룹 없이 카드 그리드만
   둔다. ========================================================= */
.wct-team{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 80px;}
@media (max-width:760px){.wct-team{margin:0 -16px;padding:44px 16px 56px;}}

.wct-team-sechdr{display:grid;grid-template-columns:150px 1fr;gap:24px;align-items:end;
  padding-bottom:28px;margin-bottom:44px;border-bottom:1px solid rgba(255,255,255,.12);}
.wct-team-sechdr h2{grid-column:2;font-family:'Fraunces',serif;font-weight:600;font-size:clamp(26px,4vw,42px);line-height:1.15;margin:0 0 10px;color:#F5F1E8;}
.wct-team-sechdr h2 em{font-style:italic;color:#2FAF6C;}
.wct-team-sechdr-kicker{grid-column:2;font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;}
@media (max-width:640px){.wct-team-sechdr{grid-template-columns:1fr;gap:8px;}
  .wct-team-sechdr h2,.wct-team-sechdr-kicker{grid-column:1;}}

/* ---- 감독 히어로 ---- */
.wct-team-hero{display:grid;grid-template-columns:1.05fr 1fr;gap:44px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:36px;margin-bottom:36px;}
.wct-team-hero>*{min-width:0;}
@media (max-width:900px){.wct-team-hero{grid-template-columns:1fr;padding:24px;gap:26px;}}
.wct-team-hero-portrait{position:relative;border-radius:3px;overflow:hidden;min-height:360px;background:#111;}
.wct-team-hero-portrait img{width:100%;height:100%;min-height:360px;object-fit:cover;display:block;filter:grayscale(.15) contrast(1.05);}
.wct-team-hero-badge{position:absolute;left:16px;top:16px;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.1em;
  text-transform:uppercase;color:#0A0A0A;background:#2FAF6C;padding:5px 12px;border-radius:2px;font-weight:700;}
.wct-team-hero-body{display:flex;flex-direction:column;justify-content:center;min-width:0;}
.wct-team-hero-role{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.1em;color:#2FAF6C;margin-bottom:10px;}
.wct-team-hero-name{font-family:'Fraunces',serif;font-weight:600;font-size:clamp(28px,4vw,44px);margin:0 0 22px;color:#F5F1E8;}
.wct-team-hero-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.wct-team-hero-career ul{list-style:none;margin:0;padding:0;columns:2;column-gap:28px;}
.wct-team-hero-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);padding:7px 0;border-top:1px solid rgba(255,255,255,.08);break-inside:avoid;}
.wct-team-hero-career li:first-child{border-top:none;}
@media (max-width:640px){.wct-team-hero-career ul{columns:1;}}

/* ---- 스태프 그리드 ---- */
.wct-team-staff-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
@media (max-width:1180px){.wct-team-staff-grid{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.wct-team-staff-grid{grid-template-columns:repeat(2,1fr);gap:10px;}}
.wct-team-staff-card{cursor:pointer;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:6px;overflow:hidden;padding:0;
  transition:border-color .18s ease,transform .18s ease;text-align:left;display:block;width:100%;font:inherit;color:inherit;}
.wct-team-staff-card:hover{border-color:#2FAF6C;transform:translateY(-3px);}
.wct-team-staff-photo{aspect-ratio:1/1;background:#111;overflow:hidden;}
.wct-team-staff-photo img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(.15);}
.wct-team-staff-body{padding:14px 16px 18px;}
.wct-team-staff-role{font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.08em;color:#2FAF6C;text-transform:uppercase;margin-bottom:6px;}
.wct-team-staff-name{font-size:16px;font-weight:700;margin:0;}

/* ---- 선수 카드 그리드 ---- */
.wct-team-players{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:8px;}
@media (max-width:1180px){.wct-team-players{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.wct-team-players{grid-template-columns:repeat(2,1fr);gap:10px;}}
.wct-team-player-card{position:relative;aspect-ratio:3/4;border-radius:5px;overflow:hidden;cursor:pointer;background:#111;border:1px solid rgba(255,255,255,.08);
  padding:0;display:block;width:100%;font:inherit;color:inherit;transition:transform .18s ease,border-color .18s ease;}
.wct-team-player-card:hover{transform:translateY(-4px);border-color:#2FAF6C;}
.wct-team-player-card>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(.1);}
.wct-team-player-card::after{content:"";position:absolute;left:0;right:0;bottom:0;height:56%;
  background:linear-gradient(180deg,rgba(10,10,10,0) 0%,rgba(10,10,10,.92) 100%);pointer-events:none;}
.wct-team-player-info{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:12px 14px 14px;text-align:left;}
.wct-team-player-name{font-size:15.5px;font-weight:700;color:#fff;}

/* ---- 코치/선수 공용 상세 모달 ---- */
.wct-team-modal-scrim{position:fixed;inset:0;z-index:400;background:rgba(6,6,6,.82);display:none;align-items:center;justify-content:center;padding:20px;}
.wct-team-modal-scrim.open{display:flex;}
.wct-team-modal{width:100%;max-width:760px;max-height:88vh;overflow-y:auto;background:#111;border:1px solid rgba(255,255,255,.1);border-radius:8px;
  display:grid;grid-template-columns:1fr 1.15fr;color:#F5F1E8;position:relative;}
.wct-team-modal>*{min-width:0;}
@media (max-width:720px){.wct-team-modal{grid-template-columns:1fr;max-height:92vh;}}
.wct-team-modal-portrait{position:relative;min-height:280px;background:#000;}
.wct-team-modal-portrait img{width:100%;height:100%;object-fit:contain;object-position:center;display:block;position:absolute;inset:0;filter:grayscale(.1);}
.wct-team-modal-close{position:absolute;right:14px;top:14px;z-index:3;width:32px;height:32px;border-radius:50%;border:none;background:rgba(10,10,10,.6);color:#fff;
  font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.wct-team-modal-close:hover{background:#2FAF6C;color:#0A0A0A;}
.wct-team-modal-body{padding:32px 30px;min-width:0;}
.wct-team-modal-role{font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.1em;color:#2FAF6C;text-transform:uppercase;margin-bottom:10px;}
.wct-team-modal-name{font-family:'Fraunces',serif;font-weight:600;font-size:28px;margin:0 0 20px;color:#F5F1E8;}
.wct-team-modal-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.wct-team-modal-career ul{list-style:none;margin:0;padding:0;}
.wct-team-modal-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);padding:8px 0;border-top:1px solid rgba(255,255,255,.08);}
.wct-team-modal-career li:first-child{border-top:none;}

/* =========================================================
   휠체어테니스단 - "응원하기" 탭(.wct-cheer, 여자축구단 .wsc-cheer 구조 이식, 그린/골드 톤).
   civil-board-list.html 등 여러 페이지가 공유하는 cheer-board.js 컴포넌트 기본 규칙은 절대
   건드리지 않고, 이 스코프 안에서만 색을 오버라이드했다. ========================================================= */
.wct-cheer{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 80px;}
@media (max-width:760px){.wct-cheer{margin:0 -16px;padding:44px 16px 56px;}}
.wct-cheer-kicker{font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;margin:-24px 0 40px;}
@media (max-width:640px){.wct-cheer-kicker{margin-top:-14px;}}

.wct-cheer .cheer-board-table th{color:rgba(245,241,232,.55);border-bottom-color:rgba(255,255,255,.2);}
.wct-cheer .cheer-board-table td{border-bottom-color:rgba(255,255,255,.08);color:#F5F1E8;}
.wct-cheer .cheer-board-table td.col-content a{color:#F5F1E8;}
.wct-cheer .pagination button{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.16);color:#F5F1E8;}
.wct-cheer .pagination button.active{background:#2FAF6C;border-color:#2FAF6C;color:#0A0A0A;}
.wct-cheer .civil-list-actions .btn.btn-inst{background:#2FAF6C;color:#0A0A0A;box-shadow:none;}
.wct-cheer .civil-list-actions .btn.btn-inst:hover{background:#0B5C2E;}
.wct-cheer .view-head{border-bottom-color:rgba(255,255,255,.2);}
.wct-cheer .view-meta{color:rgba(245,241,232,.55);}
.wct-cheer .view-content{color:#F5F1E8;}
.wct-cheer .cheer-content-input{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.18);color:#F5F1E8;}
.wct-cheer .cheer-content-input::placeholder{color:rgba(245,241,232,.4);}
.wct-cheer .cheer-char-count{color:rgba(245,241,232,.5);}
.wct-cheer .cheer-submit-btn{background:#2FAF6C;color:#0A0A0A;}
.wct-cheer .cheer-submit-btn:hover{background:#0B5C2E;}
.wct-cheer .msg.ok{color:#8FE3A6;}
.wct-cheer .msg.err{color:#FF8A80;}
.wct-cheer .btn.btn-outline{color:#F5F1E8;}
.wct-cheer .btn.btn-outline:hover{background:rgba(255,255,255,.08);}

/* =========================================================
   빙상단 - "소개"/"코칭스탭"/"선수"/"응원하기" 탭 전면 개편(2026-08-30)
   레이아웃은 여자축구단(.wsc-intro-*, .wsc-team-*, .wsc-cheer) 구조를 그대로 이식하되,
   색감은 이 팀 엠블럼(skating_introduce_2.png - 오렌지를 주색, 군청을 배경 톤, 보라를
   보조색으로 쓰는 삼색 디자인)에 맞췄다. 새 이름공간은 .skt- 접두사(다른 팀 페이지의
   .wsc- 계열, .wct- 계열과 완전히 분리). 휠체어테니스단과 공유하는 team 계열, roster 계열
   클래스는 이 페이지에서 더는 안 쓰지만 원래 규칙은 무변경(휠체어테니스단 페이지 그대로
   동작).
   참고: 클래스명을 comment에 나열할 때 와일드카드 뒤에 슬래시를 바로 붙이면 CSS 주석
   종료 기호와 우연히 같아져 다음 규칙이 통째로 사라지는 사고가 났던 적이 있어(2026-08-30,
   PROJECT_STATUS.md 144·145번), 이 주석은 항상 쉼표로 구분했고 저장 직후 정규식으로
   재확인했다(검색 패턴은 별표 다음 슬래시 다음 공백아닌문자 - 이 설명 자체에 그 패턴을
   그대로 타이핑하면 또 같은 사고가 나므로 여기서도 말로 풀어 쓴다).
   컬러: 오렌지 #F36F21(주색, --gold 자리), 오렌지딥 #C6501A(라이트 배경 위 텍스트용),
   군청 #0B1F4D(배경 톤 보조), 보라 #702C91(보조 강조, 인용부호 등). 선수 탭은 스피드
   스케이팅/쇼트트랙 두 종목이 있어 여자축구단의 포지션 필터바+밴드 그룹 패턴을 그대로
   재사용(밴드는 코드/전체 라벨 없이 종목명 하나만 표시하도록 단순화). ========================================================= */
.skt-intro{color:#F5F1E8;--skt-orange-deep:#C6501A;}
.skt-intro-display{font-family:'Anton',sans-serif;font-weight:400;letter-spacing:-.01em;line-height:.88;text-transform:uppercase;}
.skt-intro-mono{font-family:'Space Grotesk',monospace;letter-spacing:.05em;}
.skt-intro img{max-width:100%;display:block;}

/* ---- HERO ---- */
.skt-intro-hero{position:relative;overflow:hidden;background:#0A0A0A;margin:0 -24px 0;min-height:460px;height:min(74vh,680px);}
.skt-intro-hero-img{position:absolute;inset:0;background-size:cover;background-position:center 38%;filter:grayscale(.1) contrast(1.05) brightness(.6);}
.skt-intro-hero-vignette{position:absolute;inset:0;
  background:radial-gradient(ellipse at 30% 40%,transparent 0%,rgba(10,10,10,.35) 55%,rgba(10,10,10,.92) 100%),
             linear-gradient(180deg,rgba(10,10,10,.5) 0%,transparent 32%,transparent 62%,rgba(10,10,10,.96) 100%);}
.skt-intro-hero-content{position:relative;z-index:2;height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:56px 40px 40px;}
.skt-intro-hero-eyebrow{display:flex;align-items:center;gap:14px;font-size:11px;letter-spacing:.3em;color:#F36F21;text-transform:uppercase;}
.skt-intro-hero-eyebrow::before{content:"";width:32px;height:1px;background:#F36F21;}
.skt-intro-hero-title{margin-top:auto;}
.skt-intro-hero-title h2{font-size:clamp(44px,9vw,120px);color:#F5F1E8;line-height:.86;}
.skt-intro-hero-title h2 .row2{display:block;color:#F36F21;}
.skt-intro-hero-meta{display:flex;gap:32px;margin-top:28px;font-family:'Space Grotesk',sans-serif;flex-wrap:wrap;}
.skt-intro-hero-meta .cell .lbl{font-size:10px;letter-spacing:.22em;color:#8B8680;text-transform:uppercase;margin-bottom:6px;}
.skt-intro-hero-meta .cell .val{font-size:22px;font-weight:500;color:#F5F1E8;}
@media (max-width:760px){
  .skt-intro-hero{margin:0 -16px;height:420px;min-height:420px;}
  .skt-intro-hero-content{padding:36px 20px 28px;}
  .skt-intro-hero-meta{gap:22px;}
  .skt-intro-hero-meta .cell .val{font-size:17px;}
}

/* ---- SECTION FRAME (소개 탭 섹션 헤더 - 코칭스탭/선수/응원하기 탭 sechdr도 그대로 재사용) ---- */
.skt-intro-section{padding:80px 0;}
@media (max-width:760px){.skt-intro-section{padding:52px 0;}}
/* 2026-09-02 웹접근성 점검(검사항목 8) - 이 기본값이 쓰이는 어두운 배경(#0A0A0A)에서
   #702C91(2.32:1, 미달)보다 밝은 톤(5.41:1)으로 교체. */
.skt-intro-sec-num{font-family:'Space Grotesk',monospace;font-size:11px;letter-spacing:.28em;text-transform:uppercase;
  margin-bottom:20px;display:flex;align-items:center;gap:12px;color:#A96FC2;}
.skt-intro-sec-num::before{content:"";width:32px;height:1px;background:currentColor;}
.skt-intro-overview .skt-intro-sec-num,.skt-team-sechdr .skt-intro-sec-num,.skt-cheer-sechdr .skt-intro-sec-num{color:#F36F21;}
/* 2026-09-02 웹접근성 점검(검사항목 8) - .skt-intro-vision 섹션은 밝은 배경(#F5F1E8)이라
   기본값(어두운 배경용으로 밝게 조정한 색)이 오히려 미달(3.16:1)이 되어 별도 지정(9.69:1). */
.skt-intro-vision .skt-intro-sec-num{color:#5A2373;}
.skt-intro-sec-title{font-size:clamp(34px,5.5vw,68px);line-height:.95;margin-bottom:44px;}
.skt-intro-sec-title .accent{color:#F36F21;}

/* ---- 1) 개요 ---- */
.skt-intro-overview{background:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.skt-intro-overview{margin:0 -16px;padding:52px 16px;}}
.skt-intro-overview .skt-intro-sec-title{color:#F5F1E8;}
.skt-intro-overview-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:56px;align-items:start;}
.skt-intro-overview-grid > *{min-width:0;}
@media (max-width:900px){.skt-intro-overview-grid{grid-template-columns:1fr;gap:32px;}}
.skt-intro-tag{display:inline-flex;align-items:center;gap:8px;font-size:11px;letter-spacing:.2em;color:#8B8680;text-transform:uppercase;margin-bottom:22px;}
.skt-intro-tag .dot{width:6px;height:6px;background:#F36F21;border-radius:50%;}
.skt-intro-lead{font-size:19px;line-height:1.6;color:#F5F1E8;opacity:.85;max-width:520px;margin-bottom:36px;font-weight:400;}
.skt-intro-lead b{color:#F36F21;font-weight:700;}
.skt-intro-info-table{border-top:1px solid rgba(245,241,232,.14);}
.skt-intro-info-row{display:grid;grid-template-columns:120px 1fr;gap:20px;padding:18px 0;border-bottom:1px solid rgba(245,241,232,.14);align-items:baseline;}
.skt-intro-info-row > *{min-width:0;}
@media (max-width:760px){.skt-intro-info-row{grid-template-columns:92px 1fr;gap:14px;}}
.skt-intro-info-row .k{font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.2em;color:#8B8680;text-transform:uppercase;}
.skt-intro-info-row .v{font-size:15.5px;color:#F5F1E8;line-height:1.5;}
.skt-intro-info-row .v .en{display:block;font-family:'Space Grotesk',monospace;font-size:10.5px;letter-spacing:.12em;color:#8B8680;margin-top:4px;text-transform:uppercase;}
.skt-intro-overview-visual{position:relative;}
.skt-intro-overview-visual img{width:100%;height:440px;object-fit:cover;object-position:center 30%;filter:contrast(1.05) saturate(1.05);}
.skt-intro-stat-block{position:absolute;bottom:-18px;left:-18px;z-index:2;background:#F36F21;color:#0A0A0A;padding:20px 24px;}
.skt-intro-stat-block .n{font-family:'Anton';font-size:56px;line-height:.9;}
.skt-intro-stat-block .l{font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;margin-top:4px;font-weight:700;}

/* ---- 2) 목표 ---- */
.skt-intro-vision{background:#F5F1E8;color:#0A0A0A;margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.skt-intro-vision{margin:0 -16px;padding:52px 16px;}}
.skt-intro-vision .skt-intro-sec-title{color:#0A0A0A;}
.skt-intro-vision-header{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:end;margin-bottom:48px;}
.skt-intro-vision-header > *{min-width:0;}
@media (max-width:900px){.skt-intro-vision-header{grid-template-columns:1fr;gap:20px;}}
.skt-intro-vision-header .rt{font-size:16px;line-height:1.7;color:#333;max-width:460px;}
.skt-intro-goal-card{background:#0A0A0A;color:#F5F1E8;padding:40px 36px;}
.skt-intro-goal-title{font-family:'Anton';font-size:clamp(22px,3vw,30px);line-height:1.25;color:#F36F21;margin-bottom:18px;text-transform:none;}
.skt-intro-goal-text{font-size:15px;line-height:1.8;color:#F5F1E8;opacity:.85;}
.skt-intro-vision-quote{margin-top:44px;padding:44px 32px;background:#0A0A0A;color:#F5F1E8;display:grid;grid-template-columns:auto 1fr;gap:28px;align-items:center;}
.skt-intro-vision-quote > *{min-width:0;}
.skt-intro-vision-quote .qmark{font-family:'Anton';font-size:100px;line-height:.7;color:#702C91;}
.skt-intro-vision-quote .qtxt{font-size:18px;line-height:1.6;font-weight:400;}
.skt-intro-vision-quote .qtxt b{color:#B07AC9;font-weight:600;}

/* ---- 3) 엠블럼 ---- */
.skt-intro-emblem{background:#0A0A0A;margin:0 -24px;padding:80px 24px;position:relative;overflow:hidden;}
@media (max-width:760px){.skt-intro-emblem{margin:0 -16px;padding:52px 16px;}}
.skt-intro-emblem .skt-intro-sec-title{color:#F5F1E8;}
.skt-intro-emblem-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:center;}
.skt-intro-emblem-grid > *{min-width:0;}
@media (max-width:900px){.skt-intro-emblem-grid{grid-template-columns:1fr;gap:32px;}}
.skt-intro-emblem-vis{position:relative;aspect-ratio:1/1;background:radial-gradient(circle at 50% 40%,#170f1e 0%,#0A0A0A 70%);border:1px solid rgba(245,241,232,.14);display:flex;align-items:center;justify-content:center;padding:48px;}
.skt-intro-emblem-vis img{width:100%;max-width:280px;filter:drop-shadow(0 20px 60px rgba(243,111,33,.2));}
.skt-intro-emblem-sub{font-size:18px;line-height:1.6;font-weight:400;color:#F5F1E8;opacity:.82;margin-bottom:32px;}
.skt-intro-emblem-points{list-style:none;counter-reset:pt;}
.skt-intro-emblem-points li{counter-increment:pt;display:grid;grid-template-columns:50px 1fr;gap:18px;padding:20px 0;border-top:1px solid rgba(245,241,232,.14);}
.skt-intro-emblem-points li > *{min-width:0;}
.skt-intro-emblem-points li:last-child{border-bottom:1px solid rgba(245,241,232,.14);}
.skt-intro-emblem-points li::before{content:"0" counter(pt);font-family:'Space Grotesk';font-size:13px;color:#F36F21;letter-spacing:.08em;padding-top:2px;}
.skt-intro-emblem-points .pt-title{font-family:'Anton';font-size:17px;color:#F5F1E8;letter-spacing:.02em;margin-bottom:6px;text-transform:uppercase;}
.skt-intro-emblem-points .pt-body{font-size:13.5px;line-height:1.65;color:#8B8680;}
.skt-intro-emblem-points .pt-body b{color:#F5F1E8;font-weight:600;}

/* ---- 4) 유니폼 ---- */
.skt-intro-uniform{background:linear-gradient(180deg,#0A0A0A 0%,#0f0f0f 100%);margin:0 -24px;padding:80px 24px;}
@media (max-width:760px){.skt-intro-uniform{margin:0 -16px;padding:52px 16px;}}
.skt-intro-uniform .skt-intro-sec-title{color:#F5F1E8;}
.skt-intro-uniform-head{display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:end;margin-bottom:44px;}
.skt-intro-uniform-head > *{min-width:0;}
@media (max-width:900px){.skt-intro-uniform-head{grid-template-columns:1fr;gap:20px;}}
.skt-intro-uniform-head .rt{font-size:16px;line-height:1.7;color:#F5F1E8;opacity:.75;max-width:480px;}
.skt-intro-uniform-showcase{background:#F5F1E8;padding:40px;border-radius:2px;display:grid;grid-template-columns:1.4fr 1fr;gap:40px;align-items:center;}
.skt-intro-uniform-showcase > *{min-width:0;}
.skt-intro-uniform-showcase img{width:100%;max-height:420px;object-fit:contain;}
@media (max-width:760px){.skt-intro-uniform-showcase{grid-template-columns:1fr;padding:24px;gap:22px;}}
.skt-intro-swatches{display:flex;flex-direction:column;gap:2px;}
.skt-intro-swatch{display:grid;grid-template-columns:44px 1fr;gap:14px;align-items:center;padding:12px 0;border-bottom:1px solid rgba(10,10,10,.1);}
.skt-intro-swatch:last-child{border-bottom:none;}
.skt-intro-swatch .chip{width:44px;height:44px;}
.skt-intro-swatch .info .n{font-family:'Anton';font-size:17px;color:#0A0A0A;letter-spacing:.02em;text-transform:uppercase;}
.skt-intro-swatch .info .h{font-family:'Space Grotesk';font-size:10.5px;color:#666;letter-spacing:.08em;margin-top:2px;}

/* ---- CLOSING(다크, 사진 배경) ---- */
.skt-intro-closing{position:relative;min-height:340px;margin:0 -24px;padding:0;background-size:cover;background-position:center;background-repeat:no-repeat;display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden;}
@media (max-width:760px){.skt-intro-closing{margin:0 -16px;}}
.skt-intro-closing::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(10,10,10,.86) 0%,rgba(10,10,10,.55) 50%,rgba(10,10,10,.9) 100%);}
.skt-intro-closing-inner{position:relative;z-index:2;padding:64px 20px;}
.skt-intro-closing .eyebrow{font-size:11px;letter-spacing:.3em;color:#F36F21;text-transform:uppercase;margin-bottom:20px;}
.skt-intro-closing h3{font-family:'Anton';font-size:clamp(34px,7vw,84px);line-height:.9;color:#F5F1E8;}
.skt-intro-closing h3 .gd{color:#F36F21;display:inline-block;}
.skt-intro-closing .sub{margin-top:18px;font-size:15.5px;color:#F5F1E8;opacity:.85;max-width:520px;margin-left:auto;margin-right:auto;line-height:1.6;}

/* =========================================================
   빙상단 - "코칭스탭"/"선수" 탭(.skt-team-*, 여자축구단 .wsc-team-* 구조 이식, 오렌지/보라
   톤). 선수 탭은 스피드스케이팅/쇼트트랙 두 종목이 있어 여자축구단의 포지션 필터바+밴드
   그룹 패턴을 재사용한다(포지션 코드 없이 종목명만 표시). ========================================================= */
.skt-team{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 80px;}
@media (max-width:760px){.skt-team{margin:0 -16px;padding:44px 16px 56px;}}

.skt-team-sechdr{display:grid;grid-template-columns:150px 1fr;gap:24px;align-items:end;
  padding-bottom:28px;margin-bottom:44px;border-bottom:1px solid rgba(255,255,255,.12);}
.skt-team-sechdr h2{grid-column:2;font-family:'Fraunces',serif;font-weight:600;font-size:clamp(26px,4vw,42px);line-height:1.15;margin:0 0 10px;color:#F5F1E8;}
.skt-team-sechdr h2 em{font-style:italic;color:#F36F21;}
.skt-team-sechdr-kicker{grid-column:2;font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;}
@media (max-width:640px){.skt-team-sechdr{grid-template-columns:1fr;gap:8px;}
  .skt-team-sechdr h2,.skt-team-sechdr-kicker{grid-column:1;}}

/* ---- 감독 히어로 ---- */
.skt-team-hero{display:grid;grid-template-columns:1.05fr 1fr;gap:44px;
  background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:36px;margin-bottom:36px;}
.skt-team-hero>*{min-width:0;}
@media (max-width:900px){.skt-team-hero{grid-template-columns:1fr;padding:24px;gap:26px;}}
.skt-team-hero-portrait{position:relative;border-radius:3px;overflow:hidden;min-height:360px;background:#111;}
.skt-team-hero-portrait img{width:100%;height:100%;min-height:360px;object-fit:cover;display:block;filter:grayscale(.15) contrast(1.05);}
.skt-team-hero-badge{position:absolute;left:16px;top:16px;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.1em;
  text-transform:uppercase;color:#0A0A0A;background:#F36F21;padding:5px 12px;border-radius:2px;font-weight:700;}
.skt-team-hero-body{display:flex;flex-direction:column;justify-content:center;min-width:0;}
.skt-team-hero-role{font-family:'JetBrains Mono',monospace;font-size:12px;letter-spacing:.1em;color:#F36F21;margin-bottom:10px;}
.skt-team-hero-name{font-family:'Fraunces',serif;font-weight:600;font-size:clamp(28px,4vw,44px);margin:0 0 22px;color:#F5F1E8;}
.skt-team-hero-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.skt-team-hero-career ul{list-style:none;margin:0;padding:0;columns:2;column-gap:28px;}
.skt-team-hero-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);padding:7px 0;border-top:1px solid rgba(255,255,255,.08);break-inside:avoid;}
.skt-team-hero-career li:first-child{border-top:none;}
@media (max-width:640px){.skt-team-hero-career ul{columns:1;}}

/* ---- 스태프 그리드 ---- */
.skt-team-staff-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;}
@media (max-width:1180px){.skt-team-staff-grid{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.skt-team-staff-grid{grid-template-columns:repeat(2,1fr);gap:10px;}}
.skt-team-staff-card{cursor:pointer;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.08);border-radius:6px;overflow:hidden;padding:0;
  transition:border-color .18s ease,transform .18s ease;text-align:left;display:block;width:100%;font:inherit;color:inherit;}
.skt-team-staff-card:hover{border-color:#F36F21;transform:translateY(-3px);}
.skt-team-staff-photo{aspect-ratio:1/1;background:#111;overflow:hidden;}
.skt-team-staff-photo img{width:100%;height:100%;object-fit:cover;display:block;filter:grayscale(.15);}
.skt-team-staff-body{padding:14px 16px 18px;}
.skt-team-staff-role{font-family:'JetBrains Mono',monospace;font-size:10.5px;letter-spacing:.08em;color:#F36F21;text-transform:uppercase;margin-bottom:6px;}
.skt-team-staff-name{font-size:16px;font-weight:700;margin:0;}

/* ---- 선수 탭 필터바 ---- */
.skt-team-filterbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:32px;}
.skt-team-ftab{background:transparent;border:1px solid rgba(255,255,255,.16);color:rgba(245,241,232,.7);
  border-radius:999px;padding:8px 18px;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease;font-family:inherit;}
.skt-team-ftab .c{opacity:.6;margin-left:5px;font-family:'JetBrains Mono',monospace;font-size:11.5px;}
.skt-team-ftab.active,.skt-team-ftab:hover{background:#F36F21;border-color:#F36F21;color:#0A0A0A;}
.skt-team-ftab.active .c,.skt-team-ftab:hover .c{opacity:.7;}

/* ---- 종목 밴드 ---- */
.skt-team-band{display:flex;align-items:baseline;gap:16px;padding:22px 0 14px;border-bottom:1px solid rgba(255,255,255,.12);margin-top:8px;}
.skt-team-band-name{font-family:'Fraunces',serif;font-style:italic;font-weight:600;font-size:24px;color:#F36F21;}
.skt-team-band-count{margin-left:auto;font-family:'JetBrains Mono',monospace;font-size:11.5px;color:rgba(245,241,232,.45);}

/* ---- 선수 카드 그리드 ---- */
.skt-team-players{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:8px;}
@media (max-width:1180px){.skt-team-players{grid-template-columns:repeat(3,1fr);}}
@media (max-width:640px){.skt-team-players{grid-template-columns:repeat(2,1fr);gap:10px;}}
.skt-team-player-card{position:relative;aspect-ratio:3/4;border-radius:5px;overflow:hidden;cursor:pointer;background:#111;border:1px solid rgba(255,255,255,.08);
  padding:0;display:block;width:100%;font:inherit;color:inherit;transition:transform .18s ease,border-color .18s ease;}
.skt-team-player-card:hover{transform:translateY(-4px);border-color:#F36F21;}
.skt-team-player-card>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:grayscale(.1);}
.skt-team-player-card::after{content:"";position:absolute;left:0;right:0;bottom:0;height:56%;
  background:linear-gradient(180deg,rgba(10,10,10,0) 0%,rgba(10,10,10,.92) 100%);pointer-events:none;}
.skt-team-player-info{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:12px 14px 14px;text-align:left;}
.skt-team-player-name{font-size:15.5px;font-weight:700;color:#fff;margin-bottom:3px;}
.skt-team-player-meta{font-size:11px;color:rgba(245,241,232,.65);}
.skt-team-band-group[hidden]{display:none;}

/* ---- 코치/선수 공용 상세 모달 ---- */
.skt-team-modal-scrim{position:fixed;inset:0;z-index:400;background:rgba(6,6,6,.82);display:none;align-items:center;justify-content:center;padding:20px;}
.skt-team-modal-scrim.open{display:flex;}
.skt-team-modal{width:100%;max-width:760px;max-height:88vh;overflow-y:auto;background:#111;border:1px solid rgba(255,255,255,.1);border-radius:8px;
  display:grid;grid-template-columns:1fr 1.15fr;color:#F5F1E8;position:relative;}
.skt-team-modal>*{min-width:0;}
@media (max-width:720px){.skt-team-modal{grid-template-columns:1fr;max-height:92vh;}}
.skt-team-modal-portrait{position:relative;min-height:280px;background:#000;}
.skt-team-modal-portrait img{width:100%;height:100%;object-fit:contain;object-position:center;display:block;position:absolute;inset:0;filter:grayscale(.1);}
.skt-team-modal-close{position:absolute;right:14px;top:14px;z-index:3;width:32px;height:32px;border-radius:50%;border:none;background:rgba(10,10,10,.6);color:#fff;
  font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.skt-team-modal-close:hover{background:#F36F21;color:#0A0A0A;}
.skt-team-modal-body{padding:32px 30px;min-width:0;}
.skt-team-modal-role{font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.1em;color:#F36F21;text-transform:uppercase;margin-bottom:10px;}
.skt-team-modal-name{font-family:'Fraunces',serif;font-weight:600;font-size:28px;margin:0 0 20px;color:#F5F1E8;}
.skt-team-modal-career h5{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:rgba(245,241,232,.5);margin:0 0 12px;font-weight:700;}
.skt-team-modal-career ul{list-style:none;margin:0;padding:0;}
.skt-team-modal-career li{font-size:13.5px;line-height:1.7;color:rgba(245,241,232,.85);padding:8px 0;border-top:1px solid rgba(255,255,255,.08);}
.skt-team-modal-career li:first-child{border-top:none;}

/* =========================================================
   빙상단 - "응원하기" 탭(.skt-cheer, 여자축구단 .wsc-cheer 구조 이식, 오렌지/보라 톤).
   civil-board-list.html 등 여러 페이지가 공유하는 cheer-board.js 컴포넌트 기본 규칙은 절대
   건드리지 않고, 이 스코프 안에서만 색을 오버라이드했다. ========================================================= */
.skt-cheer{background:#0A0A0A;color:#F5F1E8;margin:0 -24px;padding:64px 24px 80px;}
@media (max-width:760px){.skt-cheer{margin:0 -16px;padding:44px 16px 56px;}}
.skt-cheer-kicker{font-size:14px;color:rgba(245,241,232,.62);line-height:1.6;max-width:560px;margin:-24px 0 40px;}
@media (max-width:640px){.skt-cheer-kicker{margin-top:-14px;}}

.skt-cheer .cheer-board-table th{color:rgba(245,241,232,.55);border-bottom-color:rgba(255,255,255,.2);}
.skt-cheer .cheer-board-table td{border-bottom-color:rgba(255,255,255,.08);color:#F5F1E8;}
.skt-cheer .cheer-board-table td.col-content a{color:#F5F1E8;}
.skt-cheer .pagination button{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.16);color:#F5F1E8;}
.skt-cheer .pagination button.active{background:#F36F21;border-color:#F36F21;color:#0A0A0A;}
.skt-cheer .civil-list-actions .btn.btn-inst{background:#F36F21;color:#0A0A0A;box-shadow:none;}
.skt-cheer .civil-list-actions .btn.btn-inst:hover{background:#C6501A;}
.skt-cheer .view-head{border-bottom-color:rgba(255,255,255,.2);}
.skt-cheer .view-meta{color:rgba(245,241,232,.55);}
.skt-cheer .view-content{color:#F5F1E8;}
.skt-cheer .cheer-content-input{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.18);color:#F5F1E8;}
.skt-cheer .cheer-content-input::placeholder{color:rgba(245,241,232,.4);}
.skt-cheer .cheer-char-count{color:rgba(245,241,232,.5);}
.skt-cheer .cheer-submit-btn{background:#F36F21;color:#0A0A0A;}
.skt-cheer .cheer-submit-btn:hover{background:#C6501A;}
.skt-cheer .msg.ok{color:#8FE3A6;}
.skt-cheer .msg.err{color:#FF8A80;}
.skt-cheer .btn.btn-outline{color:#F5F1E8;}
.skt-cheer .btn.btn-outline:hover{background:rgba(255,255,255,.08);}

/* ---------- 설문조사(survey-list.html/survey-view.html, 2026-08-06 신설) ----------
   국민참여 > 설문조사. 목록 상태 배지, 상세화면 본인인증 게이트(스텁)+설문 응답 폼,
   범용 폼 메시지(.msg)를 담당한다. */
.survey-status-badge{display:inline-block;padding:4px 14px;border-radius:999px;font-size:12.5px;font-weight:800;color:#fff;background:var(--ink-900);}
.survey-status-badge.ongoing{background:var(--navy-700, var(--navy-600));}
.biz-page .survey-status-badge.ongoing{background:var(--orange-600);}
.survey-status-badge.ended{background:var(--ink-900);}

/* 본인인증(OAuth: 구글/네이버/카카오) 로그인 게이트 박스 - 원래 설문조사 전용(.survey-oauth-*)
   이었으나 2026-08-07 응원하기 게시판(cheer-board.js)도 똑같은 게이트가 필요해져 이름을
   일반화해서 공용 컴포넌트로 승격했다(옛 .survey-verify-box, 나이스 스텁 시절 대체가 그 출발점).
   버튼을 세로로 쌓고 가운데 정렬해 실제 로그인 버튼처럼 보이게 한다. */
.oauth-login-box{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius-md);padding:24px;margin:24px 0;text-align:center;}
.oauth-login-box p{margin:0 0 16px;font-size:14px;color:var(--ink-700);}
.oauth-login-buttons{display:flex;flex-direction:column;gap:10px;max-width:320px;margin:0 auto;}
.oauth-login-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 16px;border-radius:8px;font-size:14.5px;font-weight:700;cursor:pointer;border:1px solid var(--line);transition:opacity .15s ease,box-shadow .15s ease;}
.oauth-login-btn:hover{opacity:.88;}
.oauth-login-btn:focus-visible{outline:2px solid var(--navy-700);outline-offset:2px;}
.oauth-login-btn.google{background:#fff;color:#1f1f1f;border-color:#dadce0;}
.oauth-login-btn.naver{background:#03C75A;color:#fff;border-color:#03C75A;}
.oauth-login-btn.kakao{background:#FEE500;color:#191600;border-color:#FEE500;}
.oauth-login-status{margin-top:14px;font-size:12.5px;color:var(--ink-500);}
.oauth-login-status.ok{color:#1B9C5A;font-weight:700;}
.oauth-login-status.err{color:var(--red-600, #d92d20);font-weight:700;}

.survey-question-block{border-top:1px solid var(--line);padding:24px 0;}
.survey-question-block:first-child{border-top:none;}
.survey-question-title{font-size:15.5px;font-weight:700;color:var(--ink-900);margin-bottom:14px;}
.survey-option-list{display:flex;flex-direction:column;gap:10px;}
.survey-option-item{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--ink-700);cursor:pointer;padding:10px 14px;border:1px solid var(--line);border-radius:var(--radius-sm, 8px);transition:border-color .15s ease,background .15s ease;}
.survey-option-item:hover{background:var(--bg-soft);}
.survey-option-item input[type="radio"]{accent-color:var(--navy-800);width:16px;height:16px;flex-shrink:0;}
.survey-option-item:has(input:checked){border-color:var(--navy-800);background:rgba(18,42,86,.05);}
.biz-page .survey-option-item:has(input:checked){border-color:var(--orange-600);background:rgba(232,89,12,.05);}
.survey-submit-btn{margin-top:24px;width:100%;padding:14px;font-size:15px;}
.survey-done-box{background:var(--bg-soft);border:1px solid var(--line);border-radius:var(--radius-md);padding:24px;text-align:center;color:var(--ink-700);font-size:14.5px;margin:24px 0;}

/* 공개 페이지 폼 결과 메시지 - 성공/실패 상태를 색으로 구분(설문조사 제출 결과 등에서 재사용 가능) */
.msg{font-size:13.5px;}
.msg.ok{color:#1B9C5A;font-weight:700;}
.msg.err{color:var(--red-600-text);font-weight:700;}

/* =========================================================
   AI 챗봇 위젯 (GraphRAG 연동 1단계 - 화면(UI)만 우선 구현, 2026-08-28 신설)
   - 요청사항: BIZ 홈페이지 랜딩페이지 우측 하단 상시 노출 아이콘 + 최초 이용시
     주의사항 팝업 + 대화 화면(웰컴 메시지/단계별 "답변 준비중" 표시/답변근거 출처).
   - 마크업은 business-main.html에 직접 삽입(팝업존과 동일한 페이지별 배치 방식),
     동작은 chatbot-widget.js가 담당. 색상은 .btn-biz와 동일한 주황 그라데이션을
     그대로 재사용해 사업(BIZ) 사이트 톤을 맞췄고, 이 위젯을 INST 등 다른 사이트에도
     붙일 경우를 대비해 기본값(.kchat-*)은 기관 사이트 톤(네이비)으로 잡아뒀다.
   ========================================================= */
.kchat-fab-wrap{position:fixed;right:22px;bottom:22px;z-index:150;display:flex;flex-direction:column;align-items:flex-end;gap:10px;}

.kchat-fab-tip{display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);
  border-radius:999px;padding:9px 10px 9px 16px;box-shadow:var(--shadow-md);font-size:13.5px;
  font-weight:700;color:var(--navy-800);animation:kchatTipIn .35s ease;}
.kchat-fab-tip[hidden]{display:none;}
.kchat-fab-tip-x{width:20px;height:20px;border-radius:50%;border:none;background:var(--bg-soft);
  color:var(--ink-500);display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;}
.kchat-fab-tip-x svg{width:11px;height:11px;}
@keyframes kchatTipIn{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}

.kchat-fab{position:relative;width:58px;height:58px;border-radius:50%;border:none;cursor:pointer;flex-shrink:0;
  background:linear-gradient(135deg,var(--navy-700),var(--navy-900));box-shadow:0 10px 26px rgba(11,30,66,.35);
  display:flex;align-items:center;justify-content:center;transition:transform .18s ease,box-shadow .18s ease;}
.kchat-fab:hover{transform:translateY(-3px);box-shadow:0 14px 30px rgba(11,30,66,.42);}
.kchat-fab svg{width:27px;height:27px;color:#fff;}
.kchat-fab-dot{position:absolute;top:1px;right:1px;width:12px;height:12px;border-radius:50%;
  background:var(--gold);border:2px solid #fff;}
/* 2026-08-31 - BIZ 홈페이지 AI 챗봇 아이콘을 주황 그라데이션 원+말풍선 SVG에서 사용자 제공
   축구공 마스코트 캐릭터 이미지(kchat-mascot-icon.png, 투명 배경)로 교체(사용자 요청). 버튼
   크기(58px, 모바일 52px)는 기존 그대로 유지하고 안쪽 내용물만 바꿨다 - 배경을 흰 원으로
   바꿔 어떤 캐릭터 이미지를 얹어도 깨끗하게 떠 보이게 하고, 그림자도 주황 색조 대신 중립
   톤으로 바꿨다. 알림 점(.kchat-fab-dot)은 흰 배경 위에서도 보이도록 흰색 대신 오렌지로
   바꿨다(기본/INST 톤이 쓰는 골드+흰테두리 패턴과 동일한 방식). 기본(향후 INST 확장 대비)
   .kchat-fab/.kchat-fab svg 톤은 그대로 둬서, 나중에 다른 사이트에 이 위젯을 붙일 때 원래
   말풍선 SVG+네이비 톤을 그대로 쓸 수 있게 했다. */
.kchat-fab-icon{width:44px;height:44px;object-fit:contain;pointer-events:none;}
.biz-page .kchat-fab{background:#fff;box-shadow:0 10px 24px rgba(20,20,20,.22);}
.biz-page .kchat-fab:hover{box-shadow:0 14px 28px rgba(20,20,20,.28);}
.biz-page .kchat-fab-dot{background:var(--orange-600);}

/* 이용시 주의사항 팝업 - 최초 진입 시 1회(또는 "다시 보지 않기" 해제 시 매번) */
.kchat-notice-overlay{position:fixed;inset:0;z-index:220;display:flex;align-items:center;justify-content:center;
  background:rgba(11,20,42,.55);padding:20px;}
.kchat-notice-box{width:100%;max-width:400px;background:#fff;border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);padding:30px 26px 24px;text-align:center;max-height:calc(100vh - 40px);overflow-y:auto;}
.kchat-notice-icon{width:52px;height:52px;border-radius:50%;background:rgba(232,89,12,.1);color:var(--orange-600-text);
  display:flex;align-items:center;justify-content:center;margin:0 auto 14px;}
.kchat-notice-icon svg{width:26px;height:26px;}
.kchat-notice-title{margin:0 0 18px;font-size:17px;font-weight:800;color:var(--ink-900);line-height:1.4;}
.kchat-notice-body{text-align:left;background:var(--bg-soft);border-radius:var(--radius-md);padding:16px 18px;margin-bottom:18px;}
.kchat-notice-lead{display:flex;align-items:center;gap:6px;margin:0 0 10px;font-size:13.5px;font-weight:800;color:var(--orange-600-text);}
.kchat-notice-lead svg{width:15px;height:15px;flex-shrink:0;}
.kchat-notice-body ul{display:flex;flex-direction:column;gap:10px;padding-left:16px;list-style:disc;}
.kchat-notice-body li{font-size:13px;line-height:1.65;color:var(--ink-700);}
.kchat-notice-body li small{display:block;margin-top:2px;color:var(--ink-500);}
.kchat-danger{color:var(--red-600-text);font-weight:800;}
.kchat-notice-check{display:flex;align-items:center;justify-content:center;gap:7px;font-size:13.5px;
  color:var(--ink-700);cursor:pointer;margin-bottom:16px;}
.kchat-notice-check input{width:16px;height:16px;accent-color:var(--orange-600);}
.kchat-notice-confirm{width:100%;padding:13px;border:none;border-radius:var(--radius-sm);font-size:15px;
  font-weight:800;color:#fff;cursor:pointer;background:linear-gradient(135deg,var(--orange-600),var(--orange-500));}
.kchat-notice-confirm:hover{opacity:.92;}

/* 대화 패널 */
.kchat-panel{position:fixed;right:22px;bottom:22px;z-index:220;width:392px;max-width:calc(100vw - 32px);
  height:min(640px, calc(100vh - 40px));background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);
  display:flex;flex-direction:column;overflow:hidden;}
.kchat-head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:14px 16px;
  background:linear-gradient(135deg,var(--orange-600),var(--orange-500));color:#fff;}
.kchat-head-id{display:flex;align-items:center;gap:9px;min-width:0;}
.kchat-head-avatar{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.2);flex-shrink:0;
  display:flex;align-items:center;justify-content:center;}
.kchat-head-avatar svg{width:16px;height:16px;color:#fff;}
.kchat-head-title{font-size:14.5px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.kchat-head-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;}
.kchat-head-btn{width:30px;height:30px;border-radius:50%;border:none;background:transparent;color:#fff;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s ease;}
.kchat-head-btn:hover{background:rgba(255,255,255,.2);}
.kchat-head-btn svg{width:16px;height:16px;}

.kchat-body{flex:1;overflow-y:auto;padding:18px 16px;display:flex;flex-direction:column;gap:16px;background:var(--bg-soft);}

.kchat-msg{display:flex;gap:9px;max-width:100%;}
.kchat-msg.user{flex-direction:row-reverse;}
.kchat-msg-avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--orange-600),var(--orange-500));
  color:#fff;flex-shrink:0;display:flex;align-items:center;justify-content:center;}
.kchat-msg-avatar svg{width:15px;height:15px;}
.kchat-msg-bubble{max-width:78%;background:#fff;border:1px solid var(--line);border-radius:16px 16px 16px 4px;
  padding:13px 15px;font-size:13.5px;line-height:1.7;color:var(--ink-900);}
.kchat-msg.user .kchat-msg-bubble{background:linear-gradient(135deg,var(--orange-600),var(--orange-500));
  color:#fff;border:none;border-radius:16px 16px 4px 16px;white-space:pre-wrap;word-break:break-word;}
.kchat-msg-bubble p{margin:0 0 8px;}
.kchat-msg-bubble p:last-child{margin-bottom:0;}
.kchat-answer-list{margin:0 0 8px;padding-left:18px;list-style:disc;}
.kchat-answer-list li{margin-bottom:4px;}
/* 실 API 스트리밍 중 표시되는 평문 영역(타이핑 효과) - 완료 후 kchatFinalizeBotAnswer가
   Markdown 서식으로 다시 그려 이 클래스는 사라진다. */
.kchat-stream-text{white-space:pre-wrap;word-break:break-word;}
/* 답변 안의 "## 소제목"을 옮긴 것 - 별도 마크다운 라이브러리 없이 굵은 한 줄로만 표시 */
.kchat-answer-heading{margin:10px 0 4px;font-weight:800;color:var(--ink-900);}
.kchat-answer-heading:first-child{margin-top:0;}
/* 답변 안의 "### 소제목"("정의"/"구성요소" 등) - 대제목(##)과 구분되도록 한 단계 작고
   포인트 컬러로 표시(2026-08-28 신설) - 예전엔 ##/###를 똑같이 그려서 모델이 소제목까지
   불릿으로 대신 쓰다 보니 화면이 온통 점(·) 목록으로만 보이는 문제가 있었다. */
.kchat-answer-subheading{margin:12px 0 4px;font-size:13px;font-weight:800;color:var(--orange-600-text);}
.kchat-answer-subheading:first-child{margin-top:0;}
.kchat-answer-table{width:100%;border-collapse:collapse;margin:2px 0 10px;font-size:12.5px;}
.kchat-answer-table th,.kchat-answer-table td{border:1px solid var(--line);padding:6px 8px;text-align:left;}
.kchat-answer-table th{background:var(--bg-soft);font-weight:700;}

/* 답변 준비중 - 단계별 안내 문구(질문 이해 → 문서 검색 → 핵심 내용 정리) */
.kchat-thinking{display:flex;align-items:center;gap:8px;color:var(--ink-500);font-weight:700;}
.kchat-thinking-dot{display:inline-flex;width:6px;height:6px;border-radius:50%;background:var(--orange-500);
  animation:kchatBlink 1.1s ease-in-out infinite;}
@keyframes kchatBlink{0%,80%,100%{opacity:.25;}40%{opacity:1;}}

/* 답변 완료 후 - 복사/다시 검색 아이콘 + "출처" 구분선 + 번호 목록 */
.kchat-msg-actions{display:flex;gap:4px;margin-top:8px;}
.kchat-msg-action-btn{width:24px;height:24px;border-radius:6px;border:none;background:transparent;
  color:var(--ink-500);display:flex;align-items:center;justify-content:center;}
.kchat-msg-action-btn:hover{background:var(--bg-soft);color:var(--ink-900);}
.kchat-msg-action-btn svg{width:13px;height:13px;}
/* 답변 맨 마지막에 붙는 출처 한 줄(2026-08-28 수정 - 파일명 노출 없이 고정 라벨만 표시) */
.kchat-source-line{margin-top:10px;padding-top:8px;border-top:1px dashed var(--line);
  font-size:12px;color:var(--ink-500);}
/* 모든 정상 답변 맨 마지막에 항상 붙는 고정 안내문구(2026-08-28 신설, 사용자 요청) - 출처
   줄이 있으면 그 아래, 없으면(근거를 못 찾은 답변) 답변 본문 바로 아래에 붙는다. 오류
   메시지에는 안 붙으므로 여기서 구분선을 또 넣지 않고 출처 줄과 톤을 맞춘 옅은 회색 작은
   글씨로만 표시(출처 줄이 있을 때 구분선이 중복되지 않도록 margin-top만 살짝). */
.kchat-disclaimer{margin-top:8px;font-size:11px;line-height:1.5;color:var(--ink-500);}
.kchat-source-line + .kchat-disclaimer{margin-top:4px;padding-top:0;border-top:none;}

/* 추천 질문 칩 */
.kchat-suggest{flex-shrink:0;padding:10px 16px;border-top:1px solid var(--line);background:#fff;}
.kchat-suggest[hidden]{display:none;}
.kchat-suggest-label{margin:0 0 8px;font-size:12px;font-weight:700;color:var(--ink-500);}
.kchat-suggest-list{display:flex;flex-wrap:wrap;gap:6px;}
.kchat-suggest-chip{padding:7px 12px;border-radius:999px;border:1px solid var(--line);background:var(--bg-soft);
  font-size:12.5px;color:var(--ink-700);cursor:pointer;transition:border-color .15s ease,color .15s ease;}
.kchat-suggest-chip:hover{border-color:var(--orange-500);color:var(--orange-600-text);}

/* 입력창 */
.kchat-input-row{flex-shrink:0;display:flex;align-items:flex-end;gap:8px;padding:12px 14px;border-top:1px solid var(--line);background:#fff;}
.kchat-input{flex:1;resize:none;border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;
  font-size:13.5px;font-family:inherit;color:var(--ink-900);max-height:90px;line-height:1.5;}
.kchat-input:focus{outline:none;border-color:var(--orange-500);}
.kchat-input-count{flex-shrink:0;font-size:11px;color:var(--ink-500);padding-bottom:11px;white-space:nowrap;}
.kchat-send-btn{flex-shrink:0;width:38px;height:38px;border-radius:50%;border:none;cursor:pointer;
  background:linear-gradient(135deg,var(--orange-600),var(--orange-500));color:#fff;
  display:flex;align-items:center;justify-content:center;transition:opacity .15s ease,transform .15s ease;}
.kchat-send-btn svg{width:16px;height:16px;}
.kchat-send-btn:disabled{opacity:.4;cursor:not-allowed;}
.kchat-send-btn:not(:disabled):hover{transform:translateY(-1px);}
.kchat-powered{flex-shrink:0;margin:0;padding:6px 0 10px;text-align:center;font-size:10.5px;color:var(--ink-500);background:#fff;}

@media (max-width:600px){
  .kchat-fab-wrap{right:14px;bottom:14px;}
  .kchat-fab{width:52px;height:52px;}
  .kchat-fab svg{width:24px;height:24px;}
  .kchat-fab-icon{width:40px;height:40px;}
  .kchat-panel{right:10px;left:10px;bottom:10px;width:auto;max-width:none;height:min(88vh, 640px);}
  .kchat-msg-bubble{max-width:84%;}
}
