@charset "utf-8";
/* ------------------------------------------------------------------
   2026 대전 서구 아트페스티벌 — 서브페이지 (theme/basic/head.php 와 한 쌍)
   festival.css 뒤에 로드된다. 그누보드 기본 스킨 마크업을 시안에 맞춰 덮는다.
   theme/basic/css/default.css 는 건드리지 않는다.
------------------------------------------------------------------ */

.afs { background: #fff; }

/* 그누보드 기본 레이아웃 잔재 무력화 */
.afs #container { float: none; width: auto; min-height: 0; margin: 0; zoom: normal; }
.afs #container_title { display: none; }
.afs #hd_login_msg { position: absolute; left: -9999px; }

/* ---------------- 서브 비주얼 ---------------- */
.afs-visual {
  position: relative; width: 100%;
  height: clamp(300px, 26vw, 420px);
  background-image: url('../img/festival/main-bg-01.jpg');
  background-size: cover; background-position: center 42%;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 14px; padding: 60px 20px 0;
}
.afs-visual__slogan {
  font-family: var(--af-hand);
  font-size: clamp(22px, 2.2vw, 32px); color: var(--af-navy-soft);
}
.afs-visual__title {
  font-size: clamp(34px, 4vw, 60px); font-weight: 800; letter-spacing: -.03em;
  color: var(--af-navy); text-shadow: 0 2px 14px rgba(255,255,255,.6); text-align: center;
}

/* ---------------- 경로 ---------------- */
.afs-crumb__wrap { width: 100%; padding: 0 clamp(20px, 5vw, 120px); }
.afs-crumb {
  max-width: 1240px; margin: 0 auto;
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 18px 0; border-bottom: 1px solid #eceae5;
  font-size: 13px; color: #6f7684;
}
.afs-crumb span { color: var(--af-navy); font-weight: 600; }
.afs-crumb a { font-weight: 600; color: var(--af-green); }
.afs-crumb a:hover { color: #1f7d66; }

/* ---------------- 본문 틀 ---------------- */
.afs-body__wrap {
  width: 100%;
  padding: clamp(36px, 4vw, 70px) clamp(20px, 5vw, 120px) clamp(60px, 7vw, 110px);
}
.afs-body {
  max-width: 1240px; margin: 0 auto;
  display: flex; flex-wrap: wrap; align-items: flex-start;
  gap: clamp(28px, 4vw, 64px);
}

/* 좌측 메뉴 */
.afs-side { flex: 0 0 auto; width: 100%; max-width: 240px; min-width: 200px; }
.afs-side__head {
  padding: 22px 24px; border-radius: 16px 16px 0 0;
  background: var(--af-teal); color: #fff;
}
.afs-side__head p { font-size: clamp(19px, 1.7vw, 23px); font-weight: 800; letter-spacing: -.02em; }
/* 선택된 항목이 베이지, 나머지는 흰색 */
.afs-side__nav {
  display: flex; flex-direction: column; background: #fff;
  border: 1px solid #eceae5; border-top: 0; border-radius: 0 0 16px 16px; overflow: hidden;
}
.afs-side__nav a {
  padding: 16px 24px; font-size: 15px; font-weight: 600;
  background: #fff; color: var(--af-navy);
  border-bottom: 1px solid #eee9e1; transition: background .18s, color .18s;
}
.afs-side__nav a:last-child { border-bottom: 0; }
.afs-side__nav a:hover { background: var(--af-cream); color: var(--af-teal); }
.afs-side__nav a.is-on { background: var(--af-cream); color: var(--af-teal); font-weight: 700; }

/* 본문 */
.afs-content {
  flex: 1 1 520px; min-width: min(300px, 100%);
  display: flex; flex-direction: column; gap: clamp(36px, 4vw, 60px);
}
.afs-content h2.afs-h2 {
  margin: 0 0 20px; font-size: clamp(24px, 2.4vw, 34px);
  font-weight: 800; letter-spacing: -.02em; color: var(--af-navy);
}

/* 좁은 화면 — 좌측 메뉴를 위로 */
@media (max-width: 899px) {
  .afs-side { max-width: none; }
  .afs-side__nav { flex-direction: row; flex-wrap: wrap; }
  .afs-side__nav a { flex: 1 1 auto; text-align: center; border-bottom: 0; border-right: 1px solid #eee9e1; }
  .afs-side__nav a:last-child { border-right: 0; }
}

/* ---------------- 정의형 표 (행사개요 등) ---------------- */
.afs-dl { display: flex; flex-direction: column; border-top: 2px solid var(--af-navy); }
.afs-dl__row { display: flex; flex-wrap: wrap; border-bottom: 1px solid #eceae5; }
.afs-dl__k {
  flex: 0 0 160px; padding: 18px 22px; background: var(--af-cream);
  font-size: 15px; font-weight: 700; color: var(--af-navy);
}
.afs-dl__v {
  flex: 1 1 260px; padding: 18px 22px;
  font-size: clamp(14px, 1.15vw, 16px); color: #33404f; text-wrap: pretty;
}

/* 소개 박스 */
.afs-lead { display: flex; flex-direction: column; gap: 18px; padding: clamp(24px, 3vw, 40px); border-radius: 18px; background: var(--af-cream); }
.afs-lead__h { font-size: clamp(17px, 1.6vw, 22px); font-weight: 700; letter-spacing: -.02em; color: var(--af-navy); }
.afs-lead p { font-size: clamp(14px, 1.15vw, 16px); line-height: 1.85; color: #4a5462; text-wrap: pretty; }

/* 프로그램 카드 */
.afs-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; }
.afs-card {
  display: flex; flex-direction: column; gap: 10px; padding: 26px 24px;
  border: 1px solid #eceae5; border-radius: 16px; background: #fff; transition: border-color .18s;
}
.afs-card:hover { border-color: var(--af-teal); }
.afs-card__tag { font-size: 12px; font-weight: 700; letter-spacing: .1em; color: var(--af-green); }
.afs-card__name { font-size: clamp(17px, 1.5vw, 20px); font-weight: 800; letter-spacing: -.02em; color: var(--af-navy); }
.afs-card__place { font-size: 14px; color: #5b6472; }

/* ==================================================================
   그누보드 게시판 스킨 보정 — basic(목록/보기) + gallery
   마크업은 그대로 두고 겉모습만 시안에 맞춘다.
================================================================== */

/* 상단 글 수 / 버튼줄 */
.afs #bo_list_total { font-size: 13px; color: #6f7684; }
.afs .bo_fx { margin-bottom: 14px; }
.afs .bo_fx:after { content: ''; display: block; clear: both; }

/* 목록 표 */
.afs .tbl_head01 { margin: 0; }
.afs .tbl_head01 table { width: 100%; border-collapse: collapse; border-top: 2px solid var(--af-navy); border-bottom: 0; background: #fff; }
.afs .tbl_head01 thead th {
  padding: 14px 10px; background: var(--af-cream); border-bottom: 1px solid #eceae5;
  font-size: 14px; font-weight: 700; color: var(--af-navy); text-align: center;
}
.afs .tbl_head01 tbody td {
  padding: 18px 10px; border-bottom: 1px solid #eceae5;
  font-size: clamp(14px, 1.15vw, 16px); color: #8a9099; text-align: center;
}
.afs .tbl_head01 tbody tr:hover td { background: var(--af-cream); }
.afs .tbl_head01 td.td_subject { text-align: left; }
.afs .tbl_head01 thead th.td_subject { text-align: left; padding-left: 14px; }
.afs .tbl_head01 td.td_subject a { font-weight: 600; color: var(--af-navy); text-wrap: pretty; }
.afs .tbl_head01 td.td_subject a:hover { color: var(--af-teal); }
.afs .tbl_head01 .td_num, .afs .tbl_head01 .td_num2 { font-size: 14px; }
.afs .tbl_head01 .td_datetime { font-size: 13px; }
.afs .empty_table, .afs .empty_list { padding: 60px 0 !important; color: #8a9099; text-align: center; }

/* 좁은 화면 — 번호·글쓴이·조회를 접는다. 제목과 날짜만 남긴다.
   머리글(th)에는 클래스가 없어서 festival.js 가 본문 칸 클래스를 복사해 준다. */
@media (max-width: 700px) {
  .afs .tbl_head01 .td_num, .afs .tbl_head01 .td_num2,
  .afs .tbl_head01 .td_name, .afs .tbl_head01 .td_nick { display: none; }
  .afs .tbl_head01 thead th, .afs .tbl_head01 tbody td { padding: 14px 8px; }
  .afs .tbl_head01 .td_subject, .afs .tbl_head01 thead th.td_subject { padding-left: 14px; }
  .afs .tbl_head01 .td_datetime { white-space: nowrap; }
}

/* 페이징 */
.afs .pg_wrap { display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 28px; }
.afs .pg { display: flex; gap: 8px; }
.afs .pg_page, .afs .pg_current, .afs .pg_start, .afs .pg_prev, .afs .pg_next, .afs .pg_end {
  width: 38px; height: 38px; display: grid; place-items: center; float: none;
  border: 1px solid #eceae5; border-radius: 10px; background: #fff;
  font-size: 14px; font-weight: 700; color: var(--af-navy); text-decoration: none;
  transition: border-color .18s, color .18s;
}
.afs .pg_page:hover, .afs .pg_start:hover, .afs .pg_prev:hover, .afs .pg_next:hover, .afs .pg_end:hover {
  border-color: var(--af-teal); color: var(--af-teal);
}
.afs .pg_current { background: var(--af-navy); border-color: var(--af-navy); color: #fff; }

/* ==================================================================
   게시판 버튼 — 전부 '아이콘 + 글자' 알약 버튼으로 통일한다.
   스킨 버튼에는 <span class="sound_only">글쓰기</span> 처럼 라벨이
   이미 들어 있지만 화면에서 숨겨져 있다. 그 숨김을 풀어 글자를 드러낸다.
================================================================== */

/* 숨겨진 라벨 드러내기 (원본 규칙이 !important 라 같은 수준으로 맞춘다) */
.afs .btn_bo_user .sound_only,
.afs .btn_bo_adm .sound_only,
.afs #bo_v_top .sound_only,
.afs #bo_v_bot .sound_only,
.afs .bo_v_nb .sound_only {
  display: inline !important; position: static;
  width: auto; height: auto; clip: auto;
  font-size: inherit; line-height: inherit;
  overflow: visible !important;
}

/* 공통 알약 버튼 */
.afs .btn_bo_user .btn_b01,
.afs .btn_bo_user .btn_b02,
.afs .btn_bo_user .btn_admin,
.afs .btn_bo_adm button,
.afs .btn_submit, .afs .btn_cancel, .afs .btn_close,
.afs .cmt_btn, .afs .sch_btn, .afs a.btn_b02 {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  box-sizing: border-box; width: auto; height: 42px; padding: 0 20px;
  border: 1px solid #eceae5; border-radius: 999px; background: #fff;
  color: var(--af-navy); font-size: 14px; font-weight: 700; line-height: 1;
  text-decoration: none; vertical-align: middle; cursor: pointer; white-space: nowrap;
  transition: background .18s, border-color .18s, color .18s;
}
.afs .btn_bo_user .btn_b01:hover,
.afs .btn_bo_user .btn_b02:hover,
.afs .btn_bo_adm button:hover,
.afs .btn_cancel:hover, .afs .btn_close:hover,
.afs .cmt_btn:hover {
  border-color: var(--af-teal); color: var(--af-teal); background: #fff;
}
.afs .btn_bo_user .fa, .afs .btn_bo_adm .fa { font-size: 13px; line-height: 1; }

/* 주 동작(글쓰기·검색실행·댓글등록·확인) 은 주황 */
.afs .btn_submit, .afs .sch_btn,
.afs .btn_bo_user a[title="글쓰기"] {
  background: var(--af-orange); border-color: var(--af-orange); color: #fff;
}
.afs .btn_submit:hover, .afs .sch_btn:hover,
.afs .btn_bo_user a[title="글쓰기"]:hover {
  background: var(--af-orange-dark); border-color: var(--af-orange-dark); color: #fff;
}
.afs .btn_cancel, .afs .btn_close { color: #6f7684; }

/* 관리자 전용 */
.afs .btn_bo_user .btn_admin { color: #d13f4a; border-color: #f0d3d5; }
.afs .btn_bo_user .btn_admin:hover { border-color: #d13f4a; color: #d13f4a; }

/* 버튼 묶음 배치 */
.afs #bo_btn_top {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 10px; margin: 0 0 14px;
}
.afs #bo_btn_top:after { display: none; }
.afs #bo_list_total { float: none; margin: 0; }
.afs .btn_bo_user {
  float: none; display: flex; flex-wrap: wrap; gap: 8px;
  margin: 0; padding: 0; list-style: none;
}
.afs .btn_bo_user li { float: none; width: auto; margin: 0; padding: 0; background: none; }
.afs .btn_bo_adm { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 0; padding: 0; list-style: none; }
.afs .btn_bo_adm li { float: none; margin: 0; }
.afs #bo_list_wrap, .afs #bo_v_top, .afs #bo_v_bot {
  display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin: 18px 0 0;
}
.afs #bo_v_top .btn_bo_user, .afs #bo_v_bot .btn_bo_user { justify-content: flex-end; }
.afs .btn_confirm { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 24px; }

@media (max-width: 600px) {
  .afs #bo_btn_top { justify-content: flex-start; }
  .afs .btn_bo_user .btn_b01,
  .afs .btn_bo_user .btn_b02,
  .afs .btn_submit, .afs .cmt_btn, .afs .sch_btn { height: 40px; padding: 0 16px; font-size: 13px; }
  .afs .bo_v_nb a { padding: 12px 14px; }
}

/* 이전글 · 다음글 이동줄 — 버튼이 아니다.
   <li> 안이 [nb_tit 라벨][a 제목][nb_date 날짜] 세 조각이라 li 를 카드로 삼는다. */
.afs .bo_v_nb { display: flex; flex-direction: column; gap: 8px; margin: 26px 0 0; padding: 0; list-style: none; border: 0; }
.afs .bo_v_nb li {
  display: flex; align-items: center; flex-wrap: wrap; gap: 6px 14px;
  margin: 0; padding: 14px 18px;
  border: 1px solid #eceae5; border-radius: 12px; background: #fff;
  transition: border-color .18s, background .18s;
}
.afs .bo_v_nb li:hover { border-color: var(--af-teal); background: var(--af-cream); }
.afs .bo_v_nb .nb_tit {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px;
  font-size: 13px; font-weight: 700; color: var(--af-green);
}
.afs .bo_v_nb .nb_tit .fa { font-size: 11px; }
.afs .bo_v_nb a {
  flex: 1 1 200px; min-width: 0; color: var(--af-navy);
  font-size: clamp(14px, 1.15vw, 16px); font-weight: 600; text-wrap: pretty;
}
.afs .bo_v_nb li:hover a { color: var(--af-teal); }
.afs .bo_v_nb .nb_date { flex: 0 0 auto; margin-left: auto; font-size: 12px; color: #8a9099; white-space: nowrap; }

@media (max-width: 600px) {
  .afs .bo_v_nb li { padding: 12px 14px; }
  .afs .bo_v_nb .nb_date { margin-left: 0; }
}

/* 검색 */
.afs .bo_sch_wrap { z-index: 90; }
.afs .bo_sch { border-radius: 16px; }
.afs .bo_sch input[type="text"], .afs .bo_sch select { height: 40px; border-radius: 10px; border: 1px solid #eceae5; padding: 0 12px; }

/* ---- 글 보기 ----
   .profile_info 가 float:left 라 뒤따르는 #bo_v_top 과 겹친다. 흐름을 끊어준다. */
.afs #bo_v { border-top: 2px solid var(--af-navy); padding-top: 26px; }
.afs #bo_v_info { display: flow-root; }
.afs #bo_v_info:after { content: ''; display: block; clear: both; }
.afs #bo_v_top { clear: both; }
.afs #bo_v_top, .afs #bo_v_bot { display: flow-root; }
.afs #bo_v_title { font-size: clamp(20px, 2vw, 28px); font-weight: 800; letter-spacing: -.02em; color: var(--af-navy); }
.afs #bo_v_info { margin: 12px 0 0; padding-bottom: 18px; border-bottom: 1px solid #eceae5; font-size: 13px; color: #8a9099; }
.afs #bo_v_atc { padding: 26px 0 36px; min-height: 120px; font-size: clamp(15px, 1.2vw, 17px); line-height: 1.85; color: #33404f; }
.afs #bo_v_atc img { max-width: 100%; height: auto; }
.afs #bo_v_file, .afs #bo_v_top, .afs #bo_v_bot { margin: 0 0 18px; }
.afs #bo_v_con { word-break: break-word; }

/* ---- 갤러리 스킨 ----
   스킨 원본은 float + 좌우 -10px 음수마진(거터) 구조다.
   그리드로 바꾸면서 음수마진과 칸 패딩을 함께 0 으로 되돌려야 넘치지 않는다.
   #bo_gall #gall_ul 은 ID 두 개라 선택자를 같은 수준으로 맞춘다. */
.afs #bo_gall #gall_ul {
  margin: 0; padding: 0; list-style: none;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 18px;
}
.afs #bo_gall #gall_ul:after { display: none; }
.afs #bo_gall #gall_ul > li {
  float: none !important; width: auto !important;
  padding: 0 !important; margin: 0 !important; list-style: none;
}
.afs #bo_gall .gall_box { position: relative; margin: 0; border-radius: 16px; }
.afs #bo_gall .gall_con {
  position: relative; overflow: hidden;
  border: 1px solid #eceae5; border-radius: 16px; background: #fff;
  transition: border-color .18s;
}
.afs #bo_gall #gall_ul > li:hover .gall_con { border-color: var(--af-teal); }
.afs #bo_gall .gall_img { width: 100%; overflow: hidden; background: var(--af-cream); border: 0; }
.afs #bo_gall .gall_img a { display: block; width: 100%; height: 100%; }
.afs #bo_gall .gall_img img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .35s; }
.afs #bo_gall #gall_ul > li:hover .gall_img img { transform: scale(1.05); }
.afs #bo_gall .gall_text_href { padding: 16px 18px 6px; font-size: 15px; font-weight: 600; }
.afs #bo_gall .gall_text_href a { color: var(--af-navy); }
.afs #bo_gall .gall_text_href a:hover { color: var(--af-teal); }
.afs #bo_gall .gall_info { padding: 0 18px 16px; font-size: 12px; color: #8a9099; }
.afs #bo_gall .gall_info span { margin-right: 10px; }
.afs #bo_gall .gall_chk { position: absolute; top: 8px; left: 8px; z-index: 2; padding: 0; }
.afs #bo_gall .empty_list { grid-column: 1 / -1; padding: 60px 0; text-align: center; color: #8a9099; }
.afs #bo_gall h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }

/* 회원/검색 등 나머지 폼 페이지 공통 보정 */
.afs .tbl_frm01 table { width: 100%; border-collapse: collapse; }
.afs .tbl_frm01 th { background: var(--af-cream); color: var(--af-navy); }
.afs .frm_input, .afs select, .afs textarea { border-radius: 10px; border: 1px solid #eceae5; }

/* ---------------- 서브 안의 간이 목록 (행사개요 페이지의 공지 미리보기) ---------------- */
.afs-list__head, .afs-list__row {
  display: flex; align-items: center; gap: 16px;
  padding: 14px 22px; border-bottom: 1px solid #eceae5;
}
.afs-list__head { background: var(--af-cream); font-size: 14px; font-weight: 700; color: var(--af-navy); }
.afs-list__row { padding: 18px 22px; color: var(--af-navy); transition: background .18s; }
.afs-list__row:hover { background: var(--af-cream); }
.afs-list__no { flex: 0 0 70px; font-size: 14px; color: #8a9099; }
.afs-list__head .afs-list__no { color: var(--af-navy); }
.afs-list__subject { flex: 1 1 auto; min-width: 0; font-size: clamp(14px, 1.15vw, 16px); font-weight: 600; text-wrap: pretty; }
.afs-list__head .afs-list__subject { font-weight: 700; }
.afs-list__date { flex: 0 0 110px; text-align: right; font-size: 13px; color: #8a9099; }
.afs-list__head .afs-list__date { color: var(--af-navy); }
.afs-list__empty { padding: 44px 22px; text-align: center; color: #8a9099; font-size: 15px; border-bottom: 1px solid #eceae5; }

.afs-more__wrap { margin-top: 24px; text-align: center; }
.afs-more {
  display: inline-flex; align-items: center; justify-content: center;
  height: 44px; padding: 0 26px; border-radius: 999px;
  background: var(--af-orange); color: #fff; font-size: 15px; font-weight: 700;
  transition: background .18s, transform .18s;
}
.afs-more:hover { background: var(--af-orange-dark); color: #fff; transform: translateY(-2px); }

@media (max-width: 600px) {
  .afs-list__no { display: none; }
  .afs-list__row, .afs-list__head { padding-left: 14px; padding-right: 14px; }
  .afs-dl__k { flex: 0 0 100px; padding: 14px; font-size: 14px; }
  .afs-dl__v { padding: 14px; }
}

/* ---------------- 준비중 안내 ---------------- */
.afs-ready {
  display: flex; flex-direction: column; align-items: center; text-align: center;
  gap: 18px; padding: clamp(60px, 9vw, 120px) clamp(20px, 4vw, 48px);
  border: 1px solid #eceae5; border-radius: 20px; background: var(--af-cream);
}
.afs-ready__mark { width: clamp(56px, 7vw, 86px); height: auto; display: block; opacity: .9; }
.afs-ready__title {
  font-size: clamp(22px, 2.4vw, 32px); font-weight: 800;
  letter-spacing: -.02em; color: var(--af-navy);
}
.afs-ready__desc { font-size: clamp(14px, 1.2vw, 16px); line-height: 1.8; color: #5b6472; }
.afs-ready__desc strong { font-weight: 700; color: var(--af-navy); }
.afs-ready__btns { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 6px; }
.afs-more--ghost { background: #fff; border: 1px solid #eceae5; color: var(--af-navy); }
.afs-more--ghost:hover { background: #fff; border-color: var(--af-teal); color: var(--af-teal); }

/* ==================================================================
   세밀 조정 — 글자 크기 · 여백 정리
   (스킨 CSS 뒤에 오도록 파일 맨 끝에 둔다)
================================================================== */

/* ---- 글자 크기 단계 ----
   본문 16 / 보조 14 / 미세 13. 13px 아래로는 내려가지 않는다. */
.afs { font-size: 16px; }
.afs-crumb { font-size: 14px; }
.afs #bo_list_total { font-size: 14px; }

/* 게시글 제목 — 스킨의 .bo_v_tit 가 2em 이라 내 값에 곱해져 두 배가 된다.
   크기는 .bo_v_tit 에 직접 준다. */
.afs #bo_v_title { font-size: 16px; margin: 0; }
.afs #bo_v_title .bo_v_tit {
  display: block; margin: 0;
  font-size: clamp(21px, 1.9vw, 30px); font-weight: 800;
  line-height: 1.38; letter-spacing: -.02em; color: var(--af-navy);
  word-break: keep-all; text-wrap: pretty;          /* 한글이 낱말 중간에서 끊기지 않게 */
}
.afs #bo_v_title .bo_v_cate {
  display: inline-block; margin: 0 0 10px; padding: 4px 12px;
  border-radius: 999px; background: var(--af-cream);
  color: var(--af-green); font-size: 13px; font-weight: 700; line-height: 1.6;
}

/* 글쓴이 · 조회 · 날짜 줄 */
.afs #bo_v_info { font-size: 14px; color: #6f7684; padding-bottom: 20px; }
.afs #bo_v_info strong,
.afs #bo_v_info a,
.afs #bo_v_info .sv_member,
.afs #bo_v_info .if_date { font-size: 14px; font-weight: 600; }
.afs #bo_v_info .profile_info { margin: 16px 0 6px; }
.afs #bo_v_info .profile_info .pf_img img { width: 44px; height: 44px; }

/* 본문 — 스킨의 min-height:200px 가 아래에 빈 공간을 만든다 */
.afs #bo_v_atc { padding: 28px 0 8px; min-height: 0; }
.afs #bo_v_con { min-height: 0; font-size: 16px; line-height: 1.85; }
.afs #bo_v_share { padding: 0; }

/* 이전 · 다음글 */
.afs .bo_v_nb { margin-top: 32px; }
.afs .bo_v_nb .nb_tit { font-size: 14px; }
.afs .bo_v_nb .nb_date { font-size: 13px; }

/* 댓글 */
.afs #bo_vc { margin-top: 36px; }
.afs #bo_vc p, .afs .cmt_none, .afs #bo_vc .empty_list { font-size: 15px; color: #8a9099; }
.afs #bo_vc_w { margin-top: 20px; }
.afs #bo_vc_w textarea { min-height: 110px; padding: 14px; font-size: 15px; line-height: 1.7; }
.afs #bo_vc_w .frm_input { height: 42px; padding: 0 14px; font-size: 14px; }
.afs #bo_vc_w label, .afs #bo_vc_w .chk_box label { font-size: 14px; color: #5b6472; }
.afs #captcha_info, .afs .captcha_info { font-size: 13px; color: #8a9099; }
.afs #bo_vc_w .btn_confirm { align-items: center; gap: 14px; }

/* 목록 표 — 줄 높이와 제목 정렬 */
.afs .tbl_head01 thead th { padding: 15px 10px; font-size: 14px; }
.afs .tbl_head01 tbody td { padding: 17px 10px; font-size: 15px; }
.afs .tbl_head01 .td_datetime, .afs .tbl_head01 .td_num, .afs .tbl_head01 .td_num2 { font-size: 13px; }
.afs .tbl_head01 td.td_subject a { font-size: 16px; }

/* ---- 여백 ----
   목록 아래 버튼줄(.bo_fx)이 표에 붙어 있었다. 위아래로 띄운다. */
.afs .bo_fx { float: none; display: flex; justify-content: flex-end; margin: 22px 0 0; }
.afs .bo_fx ul { margin: 0; }
.afs #bo_btn_top { margin: 0 0 16px; }
.afs :is(#bo_list,#bo_gall) { margin: 0; }
.afs #bo_v { padding-top: 28px; }
.afs #bo_v_top { margin: 20px 0 0; }
.afs #bo_v_bot { margin: 24px 0 0; }

/* 서브 비주얼 — 손글씨 슬로건이 어중간하게 두 줄로 끊기지 않게 */
.afs-visual { gap: 12px; }
.afs-visual__slogan, .afs-visual__title {
  word-break: keep-all; text-wrap: balance; max-width: min(100%, 900px);
}
.afs-visual__slogan { font-size: clamp(20px, 1.9vw, 28px); line-height: 1.3; }
.afs-visual__title { line-height: 1.2; }

@media (max-width: 700px) {
  .afs .tbl_head01 tbody td { padding: 15px 8px; }
  .afs .tbl_head01 td.td_subject a { font-size: 15px; }
  .afs .bo_fx { justify-content: stretch; }
  .afs .bo_fx .btn_bo_user { width: 100%; }
  .afs .bo_fx .btn_bo_user li, .afs .bo_fx .btn_bo_user a { flex: 1 1 auto; }
}

/* ---- 댓글 영역 마무리 ---- */
/* "등록된 댓글이 없습니다" 가 80px 위아래 여백을 갖고 있어 과하게 비었다 */
.afs #bo_vc_empty { padding: 44px 0 !important; }
.afs #bo_vc { margin-top: 32px; }
.afs #bo_vc_w { margin: 16px 0 0; }

/* 댓글 입력줄 — 이름/비밀번호/자동등록방지를 한 흐름으로 정렬 */
.afs #bo_vc_w .frm_input { margin: 0; }
.afs #bo_vc_w #wr_name, .afs #bo_vc_w #wr_password { width: 200px; max-width: 100%; }
.afs #bo_vc_w .write_div { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 12px 0 0; }
.afs #captcha {
  display: flex; align-items: center; flex-wrap: wrap; gap: 8px;
  width: auto; padding: 0; margin: 12px 0 0;
}
.afs #captcha #captcha_img { border: 1px solid #eceae5; border-radius: 10px; vertical-align: middle; }
.afs #captcha #captcha_key { width: 110px; height: 42px; margin: 0; padding: 0 12px; border-radius: 10px; }
/* mp3 · 새로고침 버튼은 스프라이트 이미지로 아이콘을 그린다.
   크기나 background 를 건드리면 아이콘이 어긋나므로 모서리만 둥글린다. */
.afs #captcha #captcha_mp3, .afs #captcha #captcha_reload {
  border-radius: 8px; vertical-align: middle; cursor: pointer;
}
.afs #captcha #captcha_info { flex: 1 0 100%; margin: 8px 0 0; font-size: 13px; color: #8a9099; line-height: 1.6; }

/* 비밀글 체크 + 등록 버튼 줄 */
.afs #bo_vc_w .btn_confirm { justify-content: flex-end; margin-top: 18px; }
.afs #bo_vc_w .chk_box { display: inline-flex; align-items: center; gap: 6px; }
.afs #bo_vc_w .chk_box label { font-size: 14px; }

/* 댓글 토글 — 스킨의 파란 밑줄 대신 축제 색으로 */
.afs .cmt_btn { position: relative; }
.afs .cmt_btn:after { display: none !important; }

@media (max-width: 600px) {
  .afs #bo_vc_w #wr_name, .afs #bo_vc_w #wr_password { width: calc(50% - 5px); }
  .afs #bo_vc_w .btn_confirm { justify-content: space-between; }
}

/* ==================================================================
   서체 — 전부 Paperlogy
   ------------------------------------------------------------------
   예전에는 읽는 글만 Paperlogy 로 두고 버튼·입력폼·표 머리글 같은 UI 는
   Pretendard 로 갈라 썼다. 두 서체의 인상이 달라 제목과 본문이 따로 놀아
   축제 서체 한 벌로 통일한다. 굵기는 로드해 둔 6종(300~800)만 쓴다.
   예외는 둘 — 아이콘 글꼴과 손글씨다.
================================================================== */
.afs, .afs * {
  font-family: 'Paperlogy', 'Apple SD Gothic Neo', 'Malgun Gothic', sans-serif;
}

/* 아이콘 글꼴은 덮어쓰면 네모(두부)로 깨진다 */
.afs .fa, .afs [class^="fa-"], .afs [class*=" fa-"],
.afs .fa:before, .afs [class^="fa-"]:before, .afs [class*=" fa-"]:before {
  font-family: FontAwesome !important;
}

/* ---- 제목 / 본문 결 맞추기 ----
   Paperlogy 는 자간이 넉넉해 큰 글자일수록 성기게 보인다.
   제목은 조이고, 읽는 글은 줄간을 넉넉히 둔다. */
.afs .afs-visual__title,
.afs .afs-intro__title,
.afs .afs-content h2.afs-h2,
.afs #bo_v_title .bo_v_tit,
.afs #bo_w .afw-head__title,
.afs .afs-side__head p,
.afs .afs-way__h,
.afs .afs-ready__title { letter-spacing: -.025em; }

.afs #bo_v_con,
.afs .afs-intro__body,
.afs .afs-lead p { letter-spacing: -.005em; }

/* 표·메타·버튼처럼 작은 글자는 자간을 조금 벌려 또렷하게 */
.afs :is(#bo_list, #bo_gall) .tbl_head01 thead th,
.afs :is(#bo_list, #bo_gall) .tbl_head01 .td_num2,
.afs :is(#bo_list, #bo_gall) .tbl_head01 .td_datetime,
.afs .afs-crumb, .afs #bo_v_info, .afs .bo_v_nb .nb_tit,
.afs .pg_wrap, .afs .btn_bo_user a, .afs .btn_bo_user button,
.afs .afw-btn, .afs .btn_submit, .afs .btn_cancel { letter-spacing: 0; }

/* ==================================================================
   로그인 상태에서만 보이는 버튼들
   ------------------------------------------------------------------
   .btn_b03(스크랩) 은 테마의 a.btn { font-size:1.4em; height:35px } 을
   상속해 본문 17px 기준 23.8px 로 커진다. 글자가 상자 밖으로 밀리는 원인.
   다른 글자 버튼과 같은 알약으로 맞춘다.
================================================================== */

/* 공유 · 스크랩 줄 */
.afs #bo_v_share {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  margin: 0 0 20px; padding: 0; font-size: 14px;
}
.afs #bo_v_share > * { margin: 0; }

.afs .btn_b03, .afs .btn_b04, .afs #bo_v_share .btn, .afs #bo_v_share a {
  display: inline-flex; align-items: center; justify-content: center; gap: 7px;
  box-sizing: border-box; width: auto; height: 38px; padding: 0 16px;
  border: 1px solid #eceae5; border-radius: 999px; background: #fff;
  color: var(--af-navy);
  font-size: 14px !important;      /* a.btn 의 1.4em 을 끊는다 */
  font-weight: 700; line-height: 1; white-space: nowrap;
  text-decoration: none; vertical-align: middle;
  transition: border-color .18s, color .18s;
}
.afs .btn_b03:hover, .afs .btn_b04:hover, .afs #bo_v_share a:hover {
  border-color: var(--af-teal); color: var(--af-teal); background: #fff;
}
.afs #bo_v_share .fa { font-size: 13px; }

/* 추천 · 비추천 */
.afs #bo_v_act { display: flex; justify-content: center; gap: 10px; margin: 8px 0 28px; text-align: center; }
.afs #bo_v_act .bo_v_act_gng { position: relative; }
.afs #bo_v_act a {
  display: inline-flex; align-items: center; gap: 8px;
  height: 42px; padding: 0 20px; border: 1px solid #eceae5; border-radius: 999px;
  background: #fff; color: var(--af-navy); font-size: 14px !important; font-weight: 700; line-height: 1;
  transition: border-color .18s, color .18s;
}
.afs #bo_v_act a:hover { border-color: var(--af-teal); color: var(--af-teal); }
.afs #bo_v_act a strong { font-size: 14px; font-weight: 800; }
.afs #bo_v_act .fa { font-size: 14px; }

/* 더보기(…) 옵션 버튼 */
.afs .btn_more_opt { font-size: 14px !important; }
.afs .more_opt { font-size: 14px; }

/* ==================================================================
   게시판 옵션 레이어
   ------------------------------------------------------------------
   (1) ⋮ 게시판 리스트 옵션 드롭다운 — 스킨 원본이 width:90px / padding:10px 로
       글자가 꽉 차 있다. 폭을 내용에 맞추고 여백·모서리·그림자를 준다.
   (2) 게시판 검색 모달 — 원본은 width:330px 인데 margin-left:-125px 라
       가운데에서 40px 어긋난다. transform 으로 정확히 가운데 둔다.
================================================================== */

/* ---- (1) 옵션 드롭다운 ---- */
.afs .more_opt {
  top: calc(100% + 10px); right: 0; width: auto; min-width: 176px;
  padding: 6px; margin: 0; list-style: none;
  background: #fff; border: 1px solid #eceae5; border-radius: 14px;
  box-shadow: 0 12px 30px rgba(20, 60, 50, .14);
  overflow: hidden;
}
.afs .more_opt:before { display: none; }
.afs .more_opt:after {
  top: -7px; right: 18px; border-width: 0 7px 7px 7px;
  border-color: transparent transparent #fff transparent;
  filter: drop-shadow(0 -1px 0 #eceae5);
}
.afs .more_opt li {
  float: none; width: auto; margin: 0; padding: 0;
  border-bottom: 0; text-align: left;
}
.afs .more_opt li button,
.afs .more_opt li a {
  display: flex; align-items: center; gap: 10px;
  width: 100%; height: auto; padding: 11px 14px; margin: 0;
  border: 0; border-radius: 10px; background: #fff;
  color: var(--af-navy); font-size: 14px; font-weight: 600; line-height: 1.2;
  text-align: left; white-space: nowrap; cursor: pointer;
  transition: background .16s, color .16s;
}
.afs .more_opt li button:hover,
.afs .more_opt li a:hover { background: var(--af-cream); color: var(--af-teal); }
.afs .more_opt li i,
.afs .more_opt li .fa {
  float: none; flex: 0 0 16px; width: 16px; line-height: 1;
  font-size: 13px; color: #8a9099; text-align: center;
}
.afs .more_opt li button:hover .fa,
.afs .more_opt li a:hover .fa { color: var(--af-teal); }

/* ---- (2) 검색 모달 ---- */
.afs .bo_sch_wrap { z-index: 1000; }
.afs .bo_sch_bg { position: absolute; inset: 0; background: rgba(14, 34, 61, .45); }
.afs .bo_sch {
  top: 50%; left: 50%; margin: 0;
  transform: translate(-50%, -50%);          /* 원본의 어긋난 음수 마진을 대체 */
  width: min(380px, calc(100vw - 32px)); max-height: min(420px, calc(100vh - 32px));
  padding: 0 0 4px; overflow-y: auto; z-index: 1;
  background: #fff; border: 0; border-radius: 18px;
  box-shadow: 0 24px 60px rgba(14, 34, 61, .28);
}
.afs .bo_sch h3 {
  padding: 20px 22px; margin: 0; border-bottom: 1px solid #eceae5;
  font-size: 17px; font-weight: 800; color: var(--af-navy);
}
.afs .bo_sch form { padding: 20px 22px 22px; }
.afs .bo_sch select {
  width: 100%; height: 44px; padding: 0 12px;
  border: 1px solid #eceae5; border-radius: 10px; box-shadow: none;
  font-size: 14px; color: var(--af-navy); background: #fff;
}
.afs .bo_sch .sch_bar {
  display: flex; align-items: center; width: 100%; height: 46px;
  margin-top: 12px; padding: 0 4px 0 14px;
  border: 1px solid #eceae5; border-radius: 999px; box-shadow: none; background: #fff;
}
.afs .bo_sch .sch_bar:focus-within { border-color: var(--af-teal); }
.afs .bo_sch .sch_input {
  flex: 1 1 auto; width: auto; min-width: 0; height: 100%;
  float: none; padding: 0; border: 0; background: none; font-size: 15px;
}
.afs .bo_sch .sch_btn {
  flex: 0 0 auto; float: none; width: 38px; height: 38px; padding: 0;
  display: grid; place-items: center; border: 0; border-radius: 50%;
  background: var(--af-orange); color: #fff; font-size: 14px; cursor: pointer;
}
.afs .bo_sch .sch_btn:hover { background: var(--af-orange-dark); }
.afs .bo_sch .bo_sch_cls {
  position: absolute; top: 12px; right: 12px;
  width: 36px; height: 36px; padding: 0;
  display: grid; place-items: center; border: 0; border-radius: 50%;
  background: #fff; color: #8a9099; font-size: 15px; cursor: pointer;
  transition: background .16s, color .16s;
}
.afs .bo_sch .bo_sch_cls:hover { background: var(--af-cream); color: var(--af-navy); }

/* ==================================================================
   게시판 글쓰기 — skin/board/basic/write.skin.php 와 한 쌍
   시안: Art Festival Board Write.dc.html
   시안이 '라벨 칸 + 입력 칸' 2열 표라 스킨 마크업을 .afw-row 구조로
   다시 짰다. 여기서는 그 구조의 겉모습만 맡는다.
================================================================== */
.afs #bo_w { padding-top: 4px; }

/* ---- 제목줄 ---- */
.afs #bo_w .afw-head {
  display: flex; flex-wrap: wrap; align-items: baseline;
  justify-content: space-between; gap: 10px; margin: 0 0 20px;
}
.afs #bo_w .afw-head__title {
  margin: 0; font-size: clamp(24px, 2.4vw, 34px); font-weight: 800;
  letter-spacing: -.02em; color: var(--af-navy);
}
.afs #bo_w .afw-head__note { margin: 0; font-size: 13px; color: #8a9099; }
.afs #bo_w .afw-req { color: #e35c5c; font-weight: 700; }

/* ---- 표 ----
   라벨 칸 160px 고정. 좁아지면 라벨이 위로 올라가 한 줄씩 쌓인다. */
.afs #bo_w .afw-form { border-top: 2px solid var(--af-navy); }
.afs #bo_w .afw-row {
  display: flex; flex-wrap: wrap; align-items: stretch;
  border-bottom: 1px solid #eceae5;
}
.afs #bo_w .afw-row__label {
  flex: 0 0 160px; display: flex; align-items: center;
  padding: 18px 22px; background: var(--af-cream);
  font-size: 15px; font-weight: 700; color: var(--af-navy);
}
.afs #bo_w .afw-row__label label { display: inline; margin: 0; font-weight: 700; cursor: default; }
.afs #bo_w .afw-row__field {
  flex: 1 1 260px; min-width: 0;
  display: flex; flex-direction: column; justify-content: center; gap: 10px;
  padding: 12px 22px;
}

/* ---- 입력 ---- */
.afs #bo_w .afw-input,
.afs #bo_w select {
  width: 100%; height: 46px; padding: 0 16px; margin: 0;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; color: var(--af-navy); outline: none;
  transition: border-color .18s;
}
.afs #bo_w .afw-input--sm { max-width: 260px; }
.afs #bo_w .afw-input--md { max-width: 360px; }
.afs #bo_w select { max-width: 260px; }
.afs #bo_w .afw-input:focus,
.afs #bo_w select:focus,
.afs #bo_w .wr_content textarea:focus { border-color: var(--af-teal); }
.afs #bo_w .afw-input::placeholder { color: #9aa0a8; }
.afs #bo_w .afw-hint { margin: 0; font-size: 13px; color: #8a9099; line-height: 1.6; }

/* 제목줄 — 임시저장 버튼이 있으면 옆에 붙는다 */
.afs #bo_w .afw-subject { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.afs #bo_w .afw-subject .afw-input { flex: 1 1 260px; width: auto; }

/* ---- 내용 ---- */
.afs #bo_w .wr_content { width: 100%; }
.afs #bo_w .wr_content textarea {
  width: 100%; min-height: 300px; padding: 16px; margin: 0;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; line-height: 1.8; color: var(--af-navy);
  resize: vertical; outline: none; transition: border-color .18s;
}
.afs #bo_w #char_count_desc { margin: 0 0 8px; font-size: 13px; color: #8a9099; }
.afs #bo_w #char_count_wrap { margin: 8px 0 0; font-size: 13px; color: #8a9099; text-align: right; }

/* ---- 첨부파일 ----
   네이티브 file 입력은 숨기고 label 을 알약 버튼으로 쓴다.
   (display:none 이 아니라 clip 으로 숨긴다 — 전송에서 빠지지 않게) */
.afs #bo_w .afw-file {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
}
.afs #bo_w .afw-file + .afw-file { margin-top: 4px; }
.afs #bo_w .afw-file__input {
  position: absolute; width: 1px; height: 1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0,0,0,0); opacity: 0;
}
.afs #bo_w .afw-file__name {
  flex: 1 1 240px; min-width: 0; height: 46px;
  display: flex; align-items: center; padding: 0 16px;
  border: 1px dashed #d9d5cd; border-radius: 12px; background: #fff;
  font-size: 14px; color: #9aa0a8;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.afs #bo_w .afw-file__name.is-on { color: var(--af-navy); border-style: solid; border-color: #e3e0da; }
.afs #bo_w .afw-file__pick { flex: 0 0 auto; cursor: pointer; }
.afs #bo_w .afw-file__input:focus-visible + .afw-file__pick { border-color: var(--af-teal); color: var(--af-teal); }
.afs #bo_w .afw-file__desc { flex: 1 1 100%; }
.afs #bo_w .afw-file__del { flex: 1 1 100%; font-size: 13px; color: #8a9099; }

/* ---- 자동등록방지 ----
   kcaptcha 원본 마크업(fieldset#captcha)을 시안의 한 줄로 편다.
   mp3·새로고침 버튼은 스프라이트 아이콘이라 크기·배경은 건드리지 않는다. */
.afs #bo_w #captcha {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px;
  width: auto; margin: 0; padding: 0; border: 0;
}
.afs #bo_w #captcha legend { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.afs #bo_w #captcha #captcha_img {
  flex: 0 0 auto; height: 46px; width: auto;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff; vertical-align: middle;
}
.afs #bo_w #captcha #captcha_key {
  flex: 1 1 160px; max-width: 220px; width: auto; height: 46px; margin: 0; padding: 0 16px;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; color: var(--af-navy); outline: none;
  transition: border-color .18s;
}
.afs #bo_w #captcha #captcha_key:focus { border-color: var(--af-teal); }
.afs #bo_w #captcha #captcha_mp3,
.afs #bo_w #captcha #captcha_reload { flex: 0 0 auto; border-radius: 10px; cursor: pointer; }
.afs #bo_w #captcha #captcha_info {
  flex: 1 0 100%; margin: 2px 0 0; font-size: 13px; color: #8a9099; line-height: 1.6;
}

/* ---- 옵션 줄 (공지 · 비밀글 · html · 답변메일) ----
   스킨 CSS 가 체크박스를 숨기고 label>span 으로 그리던 흔적을 되돌린다. */
.afs #bo_w .afw-options {
  padding: 18px 22px; border-bottom: 1px solid #eceae5; background: var(--af-cream);
}
.afs #bo_w .afw-options .bo_v_option {
  display: flex; flex-wrap: wrap; align-items: center; gap: 22px;
  margin: 0; padding: 0; list-style: none;
}
.afs #bo_w .afw-options .chk_box {
  display: inline-flex; align-items: center; float: none; margin: 0; text-align: left;
}
.afs #bo_w .afw-options .chk_box label {
  display: inline-flex; align-items: center; margin: 0; padding: 0;
  font-size: 14px; font-weight: 600; color: var(--af-navy); cursor: pointer;
}
/* .selec_chk 는 스킨이 width:0;height:0;opacity:0;z-index:-1 로 완전히
   숨기고 label>span 에 가짜 네모를 그린다. 진짜 체크박스를 되살린다. */
.afs #bo_w .afw-options .chk_box input[type="checkbox"] {
  position: static; top: auto; left: auto; z-index: auto;
  width: 18px; height: 18px; margin: 0 8px 0 0;
  opacity: 1; clip: auto; overflow: visible; outline: revert;
  accent-color: var(--af-teal); cursor: pointer;
}
.afs #bo_w .afw-options .chk_box label span { display: none; }

/* ---- 버튼 ---- */
.afs #bo_w .afw-btn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 48px; padding: 0 26px; border-radius: 999px;
  font-family: inherit; font-size: 15px; font-weight: 700; white-space: nowrap;
  cursor: pointer; transition: background .18s, border-color .18s, color .18s, transform .18s;
}
.afs #bo_w .afw-btn--ghost {
  border: 1px solid #d9d5cd; background: #fff; color: var(--af-navy);
}
.afs #bo_w .afw-btn--ghost:hover {
  border-color: var(--af-navy); background: var(--af-cream); color: var(--af-navy);
}
.afs #bo_w .afw-btn--primary {
  border: 0; background: var(--af-orange); color: #fff;
  box-shadow: 0 6px 16px rgba(190,100,30,.28);
}
.afs #bo_w .afw-btn--primary:hover { background: var(--af-orange-dark); color: #fff; transform: translateY(-2px); }
.afs #bo_w .afw-btn--primary[disabled] { opacity: .6; transform: none; cursor: default; }
.afs #bo_w #btn_autosave { height: 46px; padding: 0 18px; font-size: 14px; }

.afs #bo_w .afw-btns {
  display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px;
  margin: 0; padding: 28px 4px 0; border: 0; background: none;
}

/* ---- 좁은 화면 — 라벨이 위로 올라간다 ---- */
@media (max-width: 700px) {
  .afs #bo_w .afw-row__label {
    flex: 1 1 100%; padding: 14px 16px;
    border-bottom: 1px solid #f1efea; font-size: 14px;
  }
  .afs #bo_w .afw-row__field { flex: 1 1 100%; padding: 14px 16px; }
  .afs #bo_w .afw-input--sm, .afs #bo_w .afw-input--md, .afs #bo_w select { max-width: 100%; }
  .afs #bo_w .afw-btns { justify-content: stretch; padding-top: 22px; }
  .afs #bo_w .afw-btns .afw-btn { flex: 1 1 auto; }
  .afs #bo_w .afw-options { padding: 16px; }
}

/* ==================================================================
   게시판 상세(보기) — 시안: Art Festival Board.dc.html (detail)
   앞쪽에 이미 잡아둔 #bo_v 규칙 위에, 시안과 어긋나던 것만 덮는다.
================================================================== */

/* ---- 순서 ----
   스킨은 제목과 버튼줄을 한 <header> 안에 넣어 버튼이 본문 위에 온다.
   시안은 본문 아래다. header 를 display:contents 로 풀어 #bo_v 의
   flex 항목으로 만든 뒤 순서만 다시 준다. (미지원 브라우저는 원래 순서) */
.afs #bo_v { display: flex; flex-direction: column; }
.afs #bo_v > header { display: contents; }
.afs #bo_v #bo_v_title { order: 1; }
.afs #bo_v #bo_v_info  { order: 2; }
.afs #bo_v #bo_v_atc   { order: 3; }
.afs #bo_v #bo_v_file  { order: 4; }
.afs #bo_v #bo_v_link  { order: 5; }
.afs #bo_v #bo_v_top   { order: 6; }
.afs #bo_v .bo_v_nb    { order: 7; }
.afs #bo_v .cmt_btn    { order: 8; }
.afs #bo_v #bo_vc      { order: 9; }
.afs #bo_v .bo_vc_w    { order: 10; }

/* ---- 제목 · 작성자 ---- */
.afs #bo_v #bo_v_title { margin: 0 0 16px; padding: 0 4px; }
.afs #bo_v #bo_v_info {
  margin: 0; padding: 0 4px clamp(24px, 3vw, 34px);
  border-bottom: 1px solid #eceae5;
}
.afs #bo_v #bo_v_info > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.afs #bo_v #bo_v_info .profile_info {
  float: none; display: flex; flex-wrap: wrap; align-items: center;
  gap: 10px 22px; margin: 0; padding: 0;
}
.afs #bo_v #bo_v_info .profile_info:after { display: none; }
.afs #bo_v #bo_v_info .pf_img { flex: 0 0 auto; margin: 0; }
.afs #bo_v #bo_v_info .pf_img img {
  width: 28px; height: 28px; border-radius: 50%; object-fit: cover; display: block;
}
/* 프로필 사진이 없으면 청록 동그라미 + 이름 첫 글자 (festival.js 가 만든다) */
.afs #bo_v #bo_v_info .afv-avatar {
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--af-teal); color: #fff;
  display: grid; place-items: center;
  font-size: 12px; font-weight: 800; line-height: 1;
}
.afs #bo_v #bo_v_info .profile_info_ct {
  flex: 1 1 auto; display: flex; flex-wrap: wrap; align-items: center;
  gap: 10px 22px; font-size: 14px; color: #6f7684;
}
.afs #bo_v #bo_v_info .profile_info_ct br { display: none; }
.afs #bo_v #bo_v_info .profile_info_ct strong {
  display: inline-flex; align-items: center; gap: 7px;
  margin: 0; font-size: 14px; font-weight: 400; color: #6f7684;
}
/* 첫 <strong> 이 작성자 이름 */
.afs #bo_v #bo_v_info .profile_info_ct > strong:first-of-type {
  font-weight: 700; color: var(--af-navy);
}
.afs #bo_v #bo_v_info .profile_info_ct strong a { color: inherit; }
.afs #bo_v #bo_v_info .profile_info_ct strong a:hover { color: var(--af-teal); }
.afs #bo_v #bo_v_info .profile_info_ct .fa { font-size: 12px; color: #9aa0a8; }

/* ---- 본문 ---- */
.afs #bo_v #bo_v_atc {
  margin: 0; padding: clamp(30px, 4vw, 56px) 4px;
  border-bottom: 1px solid #eceae5;
}
.afs #bo_v #bo_v_atc_title { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }

/* ---- 버튼줄 (본문 아래) ---- */
.afs #bo_v #bo_v_top {
  margin: 0; padding: 22px 4px; border-bottom: 1px solid #eceae5;
  display: block; clear: none;
}
.afs #bo_v #bo_v_top .btn_bo_user {
  display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px;
  margin: 0; padding: 0; list-style: none;
}
.afs #bo_v #bo_v_top .btn_bo_user:after { display: none; }
.afs #bo_v #bo_v_top .btn_bo_user li { float: none; margin: 0; }
.afs #bo_v #bo_v_top .btn_bo_user .btn { height: 46px; padding: 0 24px; font-size: 15px; }

/* ---- 이전글 · 다음글 ----
   앞에서 잡아둔 '떨어진 카드' 대신 시안의 맞붙은 행으로 바꾼다. */
.afs #bo_v .bo_v_nb {
  gap: 0; margin: 26px 0 0; padding: 0;
  border-top: 1px solid #eceae5;
}
.afs #bo_v .bo_v_nb li {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 20px;
  padding: 18px 22px; margin: 0;
  border: 0; border-bottom: 1px solid #eceae5; border-radius: 0; background: none;
  transition: background .18s;
}
.afs #bo_v .bo_v_nb li:hover { background: var(--af-cream); border-color: #eceae5; }
.afs #bo_v .bo_v_nb .nb_tit {
  flex: 0 0 64px; font-size: 13px; font-weight: 700;
}
.afs #bo_v .bo_v_nb .btn_prv .nb_tit { color: var(--af-teal); }
.afs #bo_v .bo_v_nb .btn_next .nb_tit { color: #8a9099; }
.afs #bo_v .bo_v_nb a {
  flex: 1 1 200px; min-width: 0; padding: 0;
  font-size: 15px; font-weight: 600; color: var(--af-navy); text-wrap: pretty;
}
.afs #bo_v .bo_v_nb li:hover a { color: var(--af-navy); }
.afs #bo_v .bo_v_nb .nb_date { flex: 0 0 auto; margin-left: auto; font-size: 13px; color: #8a9099; }

/* ---- 댓글 제목 ----
   스킨의 접기 버튼(.cmt_btn)이 시안의 제목 자리다. 알약을 풀고 제목으로.
   (누르면 댓글이 접히는 원래 동작은 그대로 둔다) */
.afs #bo_v .cmt_btn {
  display: flex; align-items: center; justify-content: flex-start; gap: 10px;
  width: 100%; height: auto; margin: clamp(40px, 5vw, 64px) 0 0; padding: 0 0 14px;
  border: 0; border-bottom: 2px solid var(--af-navy); border-radius: 0;
  background: none; cursor: pointer;
}
.afs #bo_v .cmt_btn:hover { background: none; border-color: var(--af-navy); color: var(--af-navy); }
.afs #bo_v .cmt_btn .total {
  display: inline-flex; align-items: center; gap: 10px;
  font-size: clamp(18px, 1.7vw, 22px); font-weight: 800;
  letter-spacing: -.02em; color: var(--af-navy);
}
.afs #bo_v .cmt_btn .total b { font-weight: 800; }
/* 숫자 배지 — festival.js 가 <em> 으로 감싸 준다 */
.afs #bo_v .cmt_btn .afv-cmt__n {
  min-width: 26px; height: 26px; padding: 0 9px; border-radius: 999px;
  background: var(--af-teal); color: #fff;
  font-size: 13px; font-weight: 800; font-style: normal; line-height: 1;
  display: inline-grid; place-items: center;
}

/* ---- 댓글 목록 ---- */
.afs #bo_v #bo_vc { margin: 0; }
.afs #bo_v #bo_vc > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.afs #bo_v #bo_vc_empty {
  margin: 0; padding: clamp(36px, 4vw, 56px) 0 !important;
  border-bottom: 1px solid #eceae5;
  text-align: center; font-size: 15px; color: #9aa0a8;
}

/* ---- 댓글 쓰기 — 크림색 라운드 박스 ---- */
.afs #bo_v .bo_vc_w {
  margin: 26px 0 0; padding: clamp(20px, 2.5vw, 28px);
  border: 0; border-radius: 16px; background: var(--af-cream);
}
.afs #bo_v .bo_vc_w > h2 { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
.afs #bo_v .bo_vc_w textarea {
  width: 100%; min-height: 110px; padding: 16px; margin: 0;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; line-height: 1.7; color: var(--af-navy);
  resize: vertical; outline: none; transition: border-color .18s;
}
.afs #bo_v .bo_vc_w textarea:focus { border-color: var(--af-teal); }
.afs #bo_v .bo_vc_w .bo_vc_w_info {
  display: flex; flex-wrap: wrap; gap: 10px; margin: 14px 0 0;
}
.afs #bo_v .bo_vc_w .frm_input {
  flex: 1 1 180px; width: auto; height: 46px; margin: 0; padding: 0 16px;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; color: var(--af-navy); outline: none;
  transition: border-color .18s;
}
.afs #bo_v .bo_vc_w .frm_input:focus { border-color: var(--af-teal); }
.afs #bo_v .bo_vc_w #captcha {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 14px 0 0;
}
.afs #bo_v .bo_vc_w #captcha #captcha_img {
  height: 46px; width: auto; border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
}
.afs #bo_v .bo_vc_w #captcha #captcha_key {
  flex: 1 1 160px; max-width: 220px; width: auto; height: 46px; margin: 0; padding: 0 16px;
  border: 1px solid #e3e0da; border-radius: 12px; background: #fff;
  font-family: inherit; font-size: 15px; color: var(--af-navy); outline: none;
}
.afs #bo_v .bo_vc_w #captcha #captcha_key:focus { border-color: var(--af-teal); }
.afs #bo_v .bo_vc_w #captcha #captcha_info {
  flex: 1 0 100%; margin: 2px 0 0; font-size: 13px; color: #8a9099;
}
.afs #bo_v .bo_vc_w .btn_confirm {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end;
  gap: 16px; margin: 18px 0 0;
}
.afs #bo_v .bo_vc_w .btn_confirm .secret_cm {
  display: inline-flex; align-items: center; margin: 0;
}
.afs #bo_v .bo_vc_w .btn_confirm .secret_cm label {
  display: inline-flex; align-items: center; margin: 0; padding: 0;
  font-size: 14px !important; font-weight: 600; color: var(--af-navy); cursor: pointer;
}
.afs #bo_v .bo_vc_w .btn_confirm .secret_cm input[type="checkbox"] {
  position: static; top: auto; left: auto; z-index: auto;
  width: 18px; height: 18px; margin: 0 8px 0 0;
  opacity: 1; clip: auto; overflow: visible;
  accent-color: var(--af-teal); cursor: pointer;
}
.afs #bo_v .bo_vc_w .btn_confirm .secret_cm label span { display: none; }
.afs #bo_v .bo_vc_w .btn_submit {
  height: 48px; padding: 0 30px; border: 0; border-radius: 999px;
  background: var(--af-orange); color: #fff; font-size: 15px; font-weight: 700;
  box-shadow: 0 6px 16px rgba(190,100,30,.28);
}
.afs #bo_v .bo_vc_w .btn_submit:hover { background: var(--af-orange-dark); color: #fff; }

@media (max-width: 700px) {
  .afs #bo_v #bo_v_top { padding: 18px 0; }
  .afs #bo_v #bo_v_top .btn_bo_user { justify-content: stretch; }
  .afs #bo_v #bo_v_top .btn_bo_user li { flex: 1 1 auto; }
  .afs #bo_v #bo_v_top .btn_bo_user .btn { width: 100%; height: 44px; padding: 0 14px; font-size: 14px; }
  .afs #bo_v .bo_v_nb li { padding: 14px 12px; }
  .afs #bo_v .bo_v_nb .nb_date { margin-left: 0; }
  .afs #bo_v .bo_vc_w .btn_confirm { justify-content: space-between; }
}

/* ==================================================================
   게시판 목록 — 시안: Art Festival Board.dc.html (list)
   앞쪽 .tbl_head01 규칙 위에, 시안과 어긋나던 것만 덮는다.
================================================================== */

/* ---- 배치 ----
   스킨은 [총건수+버튼] · 표 · 글쓰기 를 form 안에 넣고, 검색은 form 밖
   따로 떨어진 모달(.bo_sch_wrap)로 둔다. 시안은
     1줄: 전체 N건            [검색어] [검색]
     2줄: 표
     3줄: 페이저                        [글쓰기]
   form 을 display:contents 로 풀어 모두 #bo_list 의 flex 항목으로 만든 뒤
   순서를 준다. (미지원 브라우저는 원래 순서로 보일 뿐 깨지지 않는다) */
.afs :is(#bo_list,#bo_gall) { display: flex; flex-wrap: wrap; align-items: center; }
.afs :is(#bo_list,#bo_gall) > form#fboardlist { display: contents; }
.afs :is(#bo_list,#bo_gall) #bo_btn_top   { order: 1; flex: 1 1 240px; justify-content: flex-start; margin: 0; }
.afs :is(#bo_list,#bo_gall) .bo_sch_wrap  { order: 2; flex: 0 0 auto; margin-left: auto; }
.afs :is(#bo_list,#bo_gall) .tbl_head01   { order: 3; flex: 1 1 100%; margin: 22px 0 0; }
.afs :is(#bo_list,#bo_gall) .pg_wrap      { order: 4; flex: 1 1 auto; margin: 22px 0 0; }
.afs :is(#bo_list,#bo_gall) .bo_fx        { order: 5; flex: 0 0 auto; margin: 22px 0 0 auto; }

/* ---- 전체 N건 ----
   스킨 원문은 "<span>Total 4건</span> 1 페이지" 다.
   span 밖의 '1 페이지' 를 font-size:0 으로 지우고,
   'Total 4건' → '전체 4건' 은 festival.js 가 숫자만 감싸 다시 쓴다. */
.afs :is(#bo_list,#bo_gall) #bo_list_total { float: none; margin: 0; padding: 0; font-size: 0; }
.afs :is(#bo_list,#bo_gall) #bo_list_total span { font-size: 14px; color: #6f7684; }
.afs :is(#bo_list,#bo_gall) #bo_list_total .afl-total__n { color: var(--af-teal); font-weight: 800; font-style: normal; }

/* 상단 버튼줄 — 검색은 아래 상시 검색창으로, 글쓰기는 하단으로 옮겼다.
   (관리자 전용 버튼은 건드리지 않는다) */
.afs :is(#bo_list,#bo_gall) #bo_btn_top .btn_bo_user li:has(.btn_bo_sch),
.afs :is(#bo_list,#bo_gall) #bo_btn_top .btn_bo_user li:has(a[title="글쓰기"]) { display: none; }

/* ---- 검색 ----
   스킨은 position:fixed 모달이다. 여는 버튼(.btn_bo_sch)·닫기(.bo_sch_cls)·
   배경(.bo_sch_bg)을 모두 감췄으므로 토글 JS 는 더 이상 돌지 않는다.
   inline 으로 hide() 가 걸려도 버티도록 !important 로 편다. */
.afs :is(#bo_list,#bo_gall) .bo_sch_wrap {
  display: block !important; position: static;
  width: auto; height: auto; z-index: auto;
}
/* 위 '검색 모달' 블록의 잔재를 전부 끈다.
   position 만 static 으로 돌리면 transform 은 그대로 먹어서
   폭의 절반(-165px)·세로 -23px 만큼 밀려 그려진다 — 오른쪽에 뜨던 빈 공간의 정체. */
.afs :is(#bo_list,#bo_gall) .bo_sch {
  position: static; top: auto; left: auto; transform: none;
  width: auto; max-height: none; overflow: visible; z-index: auto;
  margin: 0; padding: 0; border: 0; border-radius: 0; box-shadow: none; background: none;
}
.afs :is(#bo_list,#bo_gall) .bo_sch:after { display: none; }
.afs :is(#bo_list,#bo_gall) .bo_sch h3,
.afs :is(#bo_list,#bo_gall) .bo_sch legend,
.afs :is(#bo_list,#bo_gall) .bo_sch_cls,
.afs :is(#bo_list,#bo_gall) .bo_sch_bg,
.afs :is(#bo_list,#bo_gall) .bo_sch select { display: none; }
.afs :is(#bo_list,#bo_gall) .bo_sch form {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; padding: 0;
}
.afs :is(#bo_list,#bo_gall) .bo_sch .sch_bar {
  display: flex; align-items: center; gap: 8px; width: auto; height: auto;
  margin: 0; padding: 0;            /* 모달용 알약(좌14·우4 패딩)을 되돌린다 */
  border: 0; border-radius: 0; box-shadow: none; background: none;
}
.afs :is(#bo_list,#bo_gall) .bo_sch .sch_bar:focus-within { border-color: transparent; }
.afs :is(#bo_list,#bo_gall) .sch_input {
  float: none; width: clamp(160px, 22vw, 240px); height: 44px; padding: 0 16px; margin: 0;
  border: 1px solid #e3e0da; border-radius: 10px; background: #fff;
  font-family: inherit; font-size: 14px; color: var(--af-navy); outline: none;
  transition: border-color .18s;
}
.afs :is(#bo_list,#bo_gall) .sch_input:focus { border-color: var(--af-teal); }
.afs :is(#bo_list,#bo_gall) .sch_btn {
  float: none; width: auto; height: 44px; padding: 0 20px; margin: 0;
  border: 0; border-radius: 10px; background: var(--af-navy); color: #fff;
  font-family: inherit; font-size: 14px; font-weight: 700; cursor: pointer;
  transition: background .18s;
}
.afs :is(#bo_list,#bo_gall) .sch_btn:hover { background: #23344f; color: #fff; }
.afs :is(#bo_list,#bo_gall) .sch_btn .fa { display: none; }
.afs :is(#bo_list,#bo_gall) .sch_btn .sound_only {
  display: inline !important; position: static;
  width: auto; height: auto; clip: auto; overflow: visible !important;
  font-size: inherit; line-height: inherit;
}

/* ---- 표 ----
   시안은 번호 / 제목 / 등록일 3칸이다. 글쓴이(td_name)·조회(td_num)는 감춘다.
   머리글 th 에는 클래스가 없어 festival.js 가 본문 칸 클래스를 복사해 준다. */
.afs :is(#bo_list,#bo_gall) .tbl_head01 table { border-top: 2px solid var(--af-navy); }
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead th {
  padding: 14px 22px; background: var(--af-cream);
  border-bottom: 1px solid #eceae5;
  font-size: 14px; font-weight: 700; color: var(--af-navy);
}
.afs :is(#bo_list,#bo_gall) .tbl_head01 tbody td {
  padding: 18px 22px; border-bottom: 1px solid #eceae5;
}
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_name,
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_num { display: none; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_num2 {
  width: 82px; font-size: 14px; color: #8a9099; white-space: nowrap;
}
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead .td_num2 { color: var(--af-navy); }
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_datetime {
  width: 110px; text-align: right; font-size: 13px; color: #8a9099; white-space: nowrap;
}
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead .td_datetime { color: var(--af-navy); }
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead .td_datetime a { color: inherit; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 td.td_subject { text-align: left; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 td.td_subject .bo_tit {
  display: flex; align-items: center; gap: 8px;
  font-size: clamp(14px, 1.15vw, 16px); font-weight: 600;
}
.afs :is(#bo_list,#bo_gall) .tbl_head01 td.td_subject a { font-size: inherit; font-weight: 600; }

/* ---- 페이저 ---- */
.afs :is(#bo_list,#bo_gall) .pg_wrap { text-align: left; }
.afs :is(#bo_list,#bo_gall) .pg { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.afs :is(#bo_list,#bo_gall) .pg_page,
.afs :is(#bo_list,#bo_gall) .pg_current {
  float: none; width: 38px; height: 38px; margin: 0; padding: 0;
  display: grid; place-items: center;
  border: 1px solid #e3e0da; border-radius: 10px; background: #fff;
  font-size: 14px; font-weight: 700; color: var(--af-navy); line-height: 1;
  transition: border-color .18s, color .18s, background .18s;
}
.afs :is(#bo_list,#bo_gall) .pg_page:hover { border-color: var(--af-teal); color: var(--af-teal); }
.afs :is(#bo_list,#bo_gall) .pg_current { background: var(--af-navy); border-color: var(--af-navy); color: #fff; }
/* 처음·이전·다음·맨끝 은 글자 대신 화살표 (시안의 ‹ › 모양) */
.afs :is(#bo_list,#bo_gall) .pg_start, .afs :is(#bo_list,#bo_gall) .pg_prev,
.afs :is(#bo_list,#bo_gall) .pg_next,  .afs :is(#bo_list,#bo_gall) .pg_end { font-size: 0; }
.afs :is(#bo_list,#bo_gall) .pg_start:before { content: '\00AB'; font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .pg_prev:before  { content: '\2039'; font-size: 18px; }
.afs :is(#bo_list,#bo_gall) .pg_next:before  { content: '\203A'; font-size: 18px; }
.afs :is(#bo_list,#bo_gall) .pg_end:before   { content: '\00BB'; font-size: 15px; }

/* ---- 하단 글쓰기 ---- */
.afs :is(#bo_list,#bo_gall) .bo_fx { float: none; display: flex; justify-content: flex-end; }
.afs :is(#bo_list,#bo_gall) .bo_fx .btn_bo_user {
  display: flex; flex-wrap: wrap; gap: 10px; margin: 0; padding: 0; list-style: none;
}
.afs :is(#bo_list,#bo_gall) .bo_fx .btn_bo_user:after { display: none; }
.afs :is(#bo_list,#bo_gall) .bo_fx .btn_bo_user li { float: none; margin: 0; }
.afs :is(#bo_list,#bo_gall) .bo_fx .btn { height: 46px; padding: 0 24px; font-size: 15px; }

@media (max-width: 700px) {
  .afs :is(#bo_list,#bo_gall) #bo_btn_top { flex: 1 1 100%; }
  .afs :is(#bo_list,#bo_gall) .bo_sch_wrap { flex: 1 1 100%; margin: 10px 0 0; }
  .afs :is(#bo_list,#bo_gall) .bo_sch form { flex-wrap: nowrap; }
  .afs :is(#bo_list,#bo_gall) .bo_sch .sch_bar { flex: 1 1 auto; }
  .afs :is(#bo_list,#bo_gall) .sch_input { flex: 1 1 auto; width: auto; }
  .afs :is(#bo_list,#bo_gall) .tbl_head01 thead th,
  .afs :is(#bo_list,#bo_gall) .tbl_head01 tbody td { padding: 14px 10px; }
  .afs :is(#bo_list,#bo_gall) .tbl_head01 .td_subject,
  .afs :is(#bo_list,#bo_gall) .tbl_head01 thead .td_subject { padding-left: 14px; }
  .afs :is(#bo_list,#bo_gall) .pg_wrap { flex: 1 1 100%; text-align: center; }
  .afs :is(#bo_list,#bo_gall) .bo_fx { flex: 1 1 100%; margin-left: 0; }
  .afs :is(#bo_list,#bo_gall) .bo_fx .btn_bo_user { width: 100%; }
  .afs :is(#bo_list,#bo_gall) .bo_fx .btn_bo_user li,
  .afs :is(#bo_list,#bo_gall) .bo_fx .btn { flex: 1 1 auto; width: 100%; }
}

/* ==================================================================
   글자 크기 한 단계 키움
   앞의 '글자 크기 단계' 는 본문16 / 보조14 / 미세13 이었는데
   실제 화면에서 13~15px 구간이 너무 작았다. 한 칸씩 올린다.
     미세 13 → 14   보조 14 → 15   기능(버튼·입력) 15 → 16   본문 16 → 17
   파일 맨 끝이라 앞의 값들을 그대로 덮는다.
================================================================== */

/* ---- 공통 ---- */
.afs-crumb { font-size: 15px; }
.afs-side__nav a { font-size: 16px; }
.afs .btn_bo_user .btn_b01,
.afs .btn_bo_user .btn_b02,
.afs .btn_bo_user .btn_admin,
.afs .btn_bo_adm button,
.afs .btn_submit, .afs .btn_cancel, .afs .btn_close,
.afs .sch_btn, .afs a.btn_b02 { font-size: 15px; }
.afs #bo_v_title .bo_v_cate { font-size: 14px; }

/* ---- 목록 ---- */
.afs :is(#bo_list,#bo_gall) #bo_list_total span { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead th { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_num2 { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 .td_datetime { font-size: 14px; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 thead .td_datetime a { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .tbl_head01 td.td_subject .bo_tit { font-size: clamp(15px, 1.2vw, 17px); }
.afs :is(#bo_list,#bo_gall) .sch_input { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .sch_btn { font-size: 15px; }
.afs :is(#bo_list,#bo_gall) .pg_page,
.afs :is(#bo_list,#bo_gall) .pg_current { font-size: 15px; }

/* ---- 상세 ---- */
.afs #bo_v #bo_v_info,
.afs #bo_v #bo_v_info .profile_info_ct,
.afs #bo_v #bo_v_info .profile_info_ct strong { font-size: 15px; }
.afs #bo_v #bo_v_info .afv-avatar { font-size: 13px; }
.afs #bo_v #bo_v_con { font-size: clamp(16px, 1.2vw, 17px); line-height: 1.9; }
.afs #bo_v .bo_v_nb .nb_tit { font-size: 14px; }
.afs #bo_v .bo_v_nb a { font-size: 16px; }
.afs #bo_v .bo_v_nb .nb_date { font-size: 14px; }
.afs #bo_v .cmt_btn .afv-cmt__n { font-size: 14px; }
.afs #bo_v #bo_vc_empty { font-size: 16px; }
.afs #bo_v .bo_vc_w textarea,
.afs #bo_v .bo_vc_w .frm_input,
.afs #bo_v .bo_vc_w #captcha #captcha_key { font-size: 16px; }
.afs #bo_v .bo_vc_w #captcha #captcha_info { font-size: 14px; }
.afs #bo_v .bo_vc_w .btn_confirm .secret_cm label { font-size: 15px !important; }
.afs #bo_v .bo_vc_w .btn_submit { font-size: 16px; }

/* ---- 글쓰기 ---- */
.afs #bo_w .afw-head__note { font-size: 14px; }
.afs #bo_w .afw-row__label { font-size: 16px; }
.afs #bo_w .afw-input,
.afs #bo_w select,
.afs #bo_w .wr_content textarea { font-size: 16px; }
.afs #bo_w .afw-hint { font-size: 14px; }
.afs #bo_w .afw-file__name { font-size: 15px; }
.afs #bo_w #captcha #captcha_key { font-size: 16px; }
.afs #bo_w #captcha #captcha_info { font-size: 14px; }
.afs #bo_w #char_count_desc,
.afs #bo_w #char_count_wrap { font-size: 14px; }
.afs #bo_w .afw-options .chk_box label { font-size: 15px; }
.afs #bo_w .afw-btn { font-size: 16px; }
.afs #bo_w #btn_autosave { font-size: 15px; }

/* 라벨 칸이 16px 이 되면 '자동등록방지' 6글자가 160px 을 아슬아슬하게 쓴다.
   조금 넓혀 두 줄로 접히지 않게 한다. */
.afs #bo_w .afw-row__label { flex-basis: 176px; }
@media (max-width: 700px) {
  .afs #bo_w .afw-row__label { flex-basis: auto; font-size: 15px; }
}

/* ==================================================================
   상세 보정 2 — 브라우저로 확인하고 잡은 것들
================================================================== */

/* ---- 버튼줄을 본문 아래로 (재시도) ----
   #bo_v_top 은 <header> 가 아니라 section#bo_v_info 안에 들어 있다.
   그래서 header 만 display:contents 로 풀어서는 닿지 않았다.
   #bo_v_info 도 풀어서 그 자식들을 #bo_v 의 flex 항목으로 올린다.
   섹션이 갖고 있던 테두리·여백은 .profile_info 로 옮긴다. */
.afs #bo_v #bo_v_info { display: contents; }
.afs #bo_v #bo_v_info > h2 {
  order: 2; position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0);
}
.afs #bo_v #bo_v_info .profile_info {
  order: 2; margin: 0; padding: 0 4px clamp(24px, 3vw, 34px);
  border-bottom: 1px solid #eceae5;
}
.afs #bo_v #bo_v_top { order: 6; }

/* ---- 본문 군더더기 여백 ----
   스킨이 #bo_v_share 에 아래 20px, #bo_v_con 에 위10·아래30px 을 주고 있어
   한 줄짜리 글에서 빈 칸이 크게 벌어졌다. */
.afs #bo_v #bo_v_share { margin: 0; }
.afs #bo_v #bo_v_con { margin: 0; }

/* ---- 이전글 · 다음글 라벨 ----
   스킨의 padding-right:20px 때문에 64px 칸 안에서 '이전글' 이 두 줄로 접혔다. */
.afs #bo_v .bo_v_nb .nb_tit {
  flex: 0 0 auto; min-width: 52px; padding: 0; white-space: nowrap;
}

/* ---- 필수 표시 이미지 ----
   default.css 가 `.required, textarea.required` 에 require.png(빨간 별)를
   !important 로 깔아 둥근 입력칸 모서리에 어긋나게 얹힌다. 시안엔 없고
   라벨의 * 로 충분하므로 끈다. (!important 라 같은 수준으로 맞선다) */
.afs #bo_w .required,
.afs #bo_w textarea.required,
.afs #bo_v .bo_vc_w .required,
.afs #bo_v .bo_vc_w textarea.required { background-image: none !important; }

/* ---- 댓글 제목의 파란 밑줄 ----
   스킨이 .cmt_btn span.total::after 로 파란 탭 표시선을 그린다.
   앞서 끈 것은 .cmt_btn:after 였고 이건 남아 있었다. */
.afs #bo_v .cmt_btn .total:after,
.afs #bo_v .cmt_btn .total::after { display: none !important; }

/* ---- 작성자 이름 ---- */
.afs #bo_v #bo_v_info .profile_info_ct .sv_member { font-size: 15px; }

/* ==================================================================
   갤러리 목록 — 이미지만
   틀(전체N건 + 검색 / 그리드 / 페이저 + 글쓰기)은 위 목록 규칙을
   :is(#bo_list,#bo_gall) 로 같이 쓴다. 여기서는 갤러리 고유분만.
================================================================== */

/* 표 자리에 사진 그리드가 온다 */
.afs #bo_gall #gall_ul { order: 3; flex: 1 1 100%; margin: 22px 0 0; }

/* ---- 사진 타일 ---- */
.afs #bo_gall #gall_ul {
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px;
}
.afs #bo_gall .gall_box { position: relative; margin: 0; }
.afs #bo_gall .gall_con {
  position: relative; border: 0; border-radius: 16px; background: var(--af-cream);
  overflow: hidden; transition: box-shadow .22s, transform .22s;
}
.afs #bo_gall #gall_ul > li:hover .gall_con {
  border: 0; transform: translateY(-2px); box-shadow: 0 12px 30px rgba(20, 60, 50, .18);
}
/* 칸 비율 4:3.
   스킨이 bo_gallery_height 를 인라인으로 박는다
   (<div class="gall_img" style="height:150px;max-height:150px">) —
   인라인은 선택자로 못 이기므로 !important 로 푼다. */
.afs #bo_gall .gall_img {
  width: 100%; aspect-ratio: 4 / 3;
  height: auto !important; max-height: none !important;
  border: 0; background: var(--af-cream); overflow: hidden;
}
.afs #bo_gall .gall_img a { display: block; width: 100%; height: 100%; }
.afs #bo_gall .gall_img img {
  width: 100%; height: 100%; max-width: none; display: block;
  object-fit: cover; transition: transform .35s;
}
.afs #bo_gall #gall_ul > li:hover .gall_img img { transform: scale(1.06); }

/* ---- 글자는 화면에서만 감춘다 ----
   지우지 않고 감추기만 해서 읽어주는 기기·검색엔진에는 제목이 남는다.
   (썸네일 img 의 alt 가 비어 있어 제목을 없애면 링크 이름이 사라진다) */
.afs #bo_gall .gall_text_href,
.afs #bo_gall .gall_info,
.afs #bo_gall .gall_option {
  position: absolute; width: 1px; height: 1px;
  margin: 0; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0);
}

/* 관리자 선택 체크박스는 사진 위에 남겨둔다 */
.afs #bo_gall .gall_chk {
  position: absolute; top: 10px; left: 10px; z-index: 3; padding: 0;
}
.afs #bo_gall .gall_chk input[type="checkbox"] {
  position: static; top: auto; left: auto; z-index: auto;
  width: 18px; height: 18px; margin: 0; opacity: 1; clip: auto; overflow: visible;
  accent-color: var(--af-teal); cursor: pointer;
}
.afs #bo_gall .gall_chk label span { display: none; }

/* 글이 없을 때 */
.afs #bo_gall .empty_list {
  grid-column: 1 / -1; padding: clamp(50px, 7vw, 90px) 0;
  text-align: center; font-size: 16px; color: #9aa0a8;
}

@media (max-width: 700px) {
  .afs #bo_gall #gall_ul {
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 12px;
  }
  .afs #bo_gall .gall_con { border-radius: 12px; }
}

/* ==================================================================
   서브 비주얼 갱신 — 시안 Sub/A-Sub_02.png
   나무·하늘 사진에서 초록 그라데이션(BG.png)으로 바뀌었고
   슬로건은 손글씨 이미지가 됐다. 모든 서브페이지·게시판이 함께 탄다.
================================================================== */
.afs-visual {
  height: clamp(300px, 30vw, 470px);
  background-color: #6ec3a6;
  background-image: url('../img/festival/sub-bg.jpg');
  background-position: center;
  gap: clamp(6px, .8vw, 12px);
  padding: 70px 20px 20px;
}
.afs-visual__slogan {
  width: clamp(150px, 15vw, 210px); height: auto; display: block;
}
/* 배경이 평평한 그라데이션이라 흰 그림자가 필요없다 */
.afs-visual__title {
  font-size: clamp(30px, 3.6vw, 52px); text-shadow: none;
}

/* ==================================================================
   축제소개 — sub/intro.php 와 한 쌍
   시안: Art Festival Sub.dc.html
================================================================== */
.afs-intro__eyebrow {
  margin: 0; font-size: clamp(15px, 1.2vw, 17px); font-weight: 400; color: #33404f;
}
.afs-intro__eyebrow strong { font-weight: 800; color: var(--af-navy); }
.afs-intro__title {
  margin: 0; font-size: clamp(24px, 2.7vw, 38px); font-weight: 800;
  letter-spacing: -.03em; color: var(--af-navy);
  word-break: keep-all; text-wrap: pretty;
}

/* 머리글(작은 한 줄) ↔ 제목 간격.
   테마 리셋 .af h2 { margin:0 } 이 .afs-intro__title 보다 우선해서
   여기서 특이도를 올려 준다 (아니면 0px 이 된다) */
.afs .afs-intro__eyebrow + .afs-intro__title { margin-top: 10px; }   /* 축제소개 · 오시는길 */
.afs .afs-intro__eyebrow + .afs-lu          { margin-top: 10px; }   /* 라인업 (머리글 → 1일차) */
/* 라인업은 .afs-lu-wrap 으로 감싼다 — .afs-content 의 flex gap(57.6px)이
   머리글과 날짜 섹션 사이에 끼어 10px 이 68px 로 벌어지던 문제 */
.afs .afs-lu-wrap { display: block; }

/* 본문 — 시안이 줄마다 <p> 로 끊어 한글 줄바꿈 자리를 잡아뒀다 */
.afs-intro__body {
  margin-top: clamp(26px, 3vw, 44px);
  display: flex; flex-direction: column; gap: 1px;
  font-size: clamp(15px, 1.2vw, 17px); line-height: 1.75; color: #33404f;
}
.afs-intro__body p { margin: 0; word-break: keep-all; text-wrap: pretty; }

/* ---- 행사 개요 — 청록 알약 라벨 ---- */
.afs-facts {
  margin: clamp(32px, 3.6vw, 52px) 0 0;
  display: flex; flex-direction: column; gap: 12px;
}
.afs-facts__row {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 22px;
}
.afs-facts dt {
  flex: 0 0 auto; min-width: 114px; padding: 8px 18px;
  border-radius: 999px; background: var(--af-teal); color: #fff;
  text-align: center; font-size: 15px; font-weight: 700; white-space: nowrap;
}
.afs-facts dd {
  flex: 1 1 200px; margin: 0;
  font-size: clamp(15px, 1.15vw, 17px); color: #33404f;
  word-break: keep-all; text-wrap: pretty;
}

/* ---- 현장 사진 ----
   원본 PNG 는 모서리가 둥글게 구워져 있었다. 모서리를 메워 JPEG 로 바꿨고
   (617KB -> 313KB) 둥글리기는 여기서 한다. */
.afs-photos {
  margin-top: clamp(40px, 5vw, 72px);
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: clamp(14px, 1.8vw, 26px);
}
.afs-photos img {
  width: 100%; height: auto; display: block;
  border-radius: 14px; background: var(--af-cream);
}

@media (max-width: 600px) {
  .afs-facts dt { flex: 1 1 100%; min-width: 0; }
  .afs-photos { grid-template-columns: 1fr; }
}

/* ---- 서브 헤더 — 초록 비주얼 위라 흰 글자 ----
   메인(work.php)은 밝은 하늘 사진 위라 네이비 그대로 두고, .afs 안에서만 바꾼다. */
.afs .afs-header {
  border-bottom: 1px solid rgba(255, 255, 255, .35);
  background: linear-gradient(180deg, rgba(12, 90, 80, .30), rgba(12, 90, 80, 0));
}
.afs .afs-header .af-gnb a {
  color: #fff; text-shadow: 0 1px 6px rgba(10, 60, 52, .35);
}
.afs .afs-header .af-gnb a:hover { color: var(--af-cream); }
/* 버거 아이콘은 어두운 PNG 라 흰색으로 반전시킨다 (시안도 같은 방식) */
.afs .afs-header .af-burger img { filter: brightness(0) invert(1); }

/* ==================================================================
   오시는길 — sub/location.php 와 한 쌍
   시안: Art Festival Sub.dc.html (page="오시는길")
   시안은 안내 그래픽 한 장으로 끝내지만, 좁은 화면에서는 그 안의 글자가
   4px 아래로 줄어 못 읽는다. 860px 이하에서는 지도만 남기고
   대중교통 안내를 글자판(.afs-way__text)으로 갈아 끼운다.
   시안 색 : 마룬 #570c13 / 패널 #fff6e4 / 형광 #fff100
================================================================== */
.afs-way { --afw-maroon: #570c13; --afw-panel: #fff6e4; }

/* ---- 안내 그래픽 ---- */
.afs-way__fig { margin: clamp(26px, 3vw, 44px) 0 0; }
.afs-way__fig img {
  width: 100%; height: auto; display: block;
  border-radius: 14px; background: var(--afw-panel);
}

/* ---- 글자판 — 넓은 화면에서는 그래픽에 이미 들어 있어 감춘다 ---- */
.afs-way__text { display: none; }

.afs-way__h {
  display: flex; align-items: center; gap: 10px;
  margin: 0 0 14px; font-size: clamp(19px, 1.8vw, 24px); font-weight: 800;
  letter-spacing: -.02em; color: var(--afw-maroon);
}
.afs-way__h:before {
  content: ''; flex: 0 0 auto; width: 4px; height: 1em;
  border-radius: 2px; background: var(--afw-maroon);
}
.afs-way__banner {
  margin: 0 0 6px; padding: 16px 20px; border-radius: 12px;
  background: var(--afw-panel);
  font-size: clamp(15px, 1.2vw, 17px); font-weight: 700; color: var(--afw-maroon);
  word-break: keep-all;
}
.afs-way__list { margin: 0; display: flex; flex-direction: column; }
.afs-way__row {
  display: flex; align-items: flex-start; gap: 14px;
  padding: 18px 0; border-top: 1px solid rgba(87, 12, 19, .18);
}
.afs-way__row dt { flex: 0 0 auto; margin: 0; }
.afs-way__row dd { flex: 1 1 auto; min-width: 0; margin: 0; }
.afs-way__ico {
  width: 46px; height: 46px; display: grid; place-items: center;
  border-radius: 11px; background: var(--afw-maroon); color: #fff;
}
.afs-way__ico .fa { font-size: 21px; line-height: 1; }
.afs-way__ico--p { font-size: 26px; font-weight: 800; line-height: 1; }
.afs-way__name {
  display: block; margin: 0 0 6px;
  font-size: clamp(17px, 1.5vw, 20px); font-weight: 800;
  letter-spacing: -.02em; color: var(--afw-maroon);
}
.afs-way__row dd p {
  margin: 0; font-size: clamp(15px, 1.15vw, 17px); line-height: 1.7; color: #33404f;
  word-break: keep-all; text-wrap: pretty;
}
.afs-way__row dd p + p { margin-top: 2px; }
.afs-way__when {
  display: inline-block; margin: 0 0 8px !important;
  padding: 7px 16px; border-radius: 999px;
  background: var(--afw-maroon); color: #fff !important;
  font-size: clamp(15px, 1.2vw, 17px); font-weight: 700;
}
.afs-way__when span { font-size: .88em; }
.afs-way__note {
  margin: 0; padding: 16px 0 0;
  border-top: 1px solid rgba(87, 12, 19, .18);
  font-size: clamp(15px, 1.2vw, 17px); font-weight: 700; color: var(--afw-maroon);
  word-break: keep-all; text-wrap: pretty;
}
.afs-way__note span {
  background: #fff100; box-decoration-break: clone; -webkit-box-decoration-break: clone;
  padding: 3px 6px; line-height: 1.9;
}

/* 행사장소 알약 — 그래픽 아래 */
.afs-way .afs-facts { margin-top: clamp(20px, 2.4vw, 30px); }

/* ---- 좁은 화면 — 글자판을 드러낸다 ---- */
@media (max-width: 860px) {
  .afs-way__text { display: block; margin-top: clamp(24px, 4vw, 36px); }
}

/* 서브 헤더의 서브메뉴 — 대메뉴는 흰 글자지만 판은 흰색이라 되돌린다 */
.afs .afs-header .af-gnb__sub a { color: var(--af-navy); text-shadow: none; }
.afs .afs-header .af-gnb__sub a:hover { color: var(--af-teal); }

/* Paperlogy 는 Pretendard 보다 폭이 넓다. 표 머리글이 좁은 칸에서
   두 줄로 접히던 것을 막는다 ('번호' 가 '번/호' 로 갈라졌다) */
.afs :is(#bo_list, #bo_gall) .tbl_head01 thead th { white-space: nowrap; }

/* ==================================================================
   프로그램 — sub/program_*.php + sub/_program.php 와 한 쌍
   시안: Art Festival Program.dc.html
   시안의 글자 크기(제목 50px / 본문 28px)는 넓은 캔버스 기준이라
   그대로 쓰면 본문 칸(약 940px)에서 과하다. 사이트 단계(본문 17px,
   제목 30px)에 맞춰 줄이고 나머지 수치는 시안 그대로 쓴다.
================================================================== */
.afs-pg {
  margin: 0 0 clamp(22px, 2.6vw, 34px);
  padding: clamp(26px, 3.4vw, 46px) clamp(22px, 3vw, 40px);
  border-radius: 20px; background: #fdf3e8;
}
.afs-pg:last-of-type { margin-bottom: 0; }

.afs-pg__head { display: flex; align-items: center; gap: 10px; }
.afs-pg__icon { width: clamp(18px, 1.7vw, 26px); height: auto; display: block; }
.afs-pg__title {
  margin: 0; font-size: clamp(20px, 2.2vw, 30px); font-weight: 800;
  letter-spacing: -.03em; color: var(--af-navy);
  word-break: keep-all; text-wrap: pretty;
}

.afs-pg__list {
  margin: clamp(18px, 2vw, 26px) 0 0;
  display: flex; flex-direction: column; gap: 12px;
}
.afs-pg__row {
  display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px 20px;
}
.afs-pg__row dt {
  flex: 0 0 auto; min-width: 96px; margin: 0;
  padding: 7px 18px; border-radius: 999px;
  background: var(--af-teal); color: #fff; text-align: center;
  font-size: clamp(15px, 1.2vw, 17px); font-weight: 700; white-space: nowrap;
}
.afs-pg__row dd {
  flex: 1 1 220px; margin: 0; padding-top: 6px;
  font-size: clamp(15px, 1.2vw, 17px); font-weight: 400; line-height: 1.7;
  color: #33404f; word-break: keep-all; text-wrap: pretty;
}

/* 카드 안 이미지 — 시안은 알약 칸만큼 들여쓴다 */
.afs-pg__img {
  width: calc(100% - var(--afs-pg-indent, 116px));
  height: auto; display: block;
  margin: clamp(22px, 2.6vw, 34px) 0 0 var(--afs-pg-indent, 116px);
  border-radius: 12px;
}
.afs-pg__pair {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: clamp(12px, 1.6vw, 22px);
  margin: clamp(22px, 2.6vw, 34px) 0 0 var(--afs-pg-indent, 116px);
}
.afs-pg__pair img { width: 100%; height: auto; display: block; border-radius: 12px; }

/* 체험프로그램 아래 두 장 — 시안 비율 358 : 662 */
.afs-pg__duo {
  margin: clamp(34px, 4vw, 56px) 0 0;
  display: grid; grid-template-columns: 358fr 662fr;
  gap: clamp(12px, 1.6vw, 22px);
  height: clamp(230px, 26vw, 360px);
}
.afs-pg__duo img {
  width: 100%; height: 100%; min-width: 0;
  object-fit: cover; display: block; border-radius: 12px;
}

@media (max-width: 760px) {
  /* 좁은 화면에서는 들여쓰기를 풀고 두 장짜리는 한 줄씩 */
  .afs-pg__img { width: 100%; margin-left: 0; }
  .afs-pg__pair { margin-left: 0; }
  .afs-pg__duo { grid-template-columns: 1fr; height: auto; }
  .afs-pg__duo img { height: auto; }
  .afs-pg__row dt { min-width: 84px; padding: 6px 14px; }
}

/* ==================================================================
   라인업 / 일정표 — sub/lineup.php · sub/schedule.php 와 한 쌍
   시안: Art Festival Lineup.dc.html
   시안 글자 크기(날짜 50px / 이름 36px)는 넓은 캔버스 기준이라
   본문 칸(약 940px)에 맞춰 줄인다. 배치·비율은 시안 그대로.
================================================================== */
.afs-lu { margin-top: clamp(18px, 2vw, 26px); }
.afs-lu--next {
  margin-top: clamp(40px, 5vw, 70px);
  padding-top: clamp(40px, 5vw, 70px);
  border-top: 1px solid #eceae5;
}
.afs-lu__head { display: flex; align-items: center; gap: 10px; }
.afs-lu__day {
  margin: 0; font-size: clamp(20px, 2.2vw, 30px); font-weight: 800;
  letter-spacing: -.03em; color: var(--af-navy);
}
/* 날짜가 갈수록 음표가 하나씩 늘어난다 (시안) */
.afs-lu__note { width: clamp(16px, 1.5vw, 22px); height: auto; display: block; }

.afs-lu__grid {
  margin-top: clamp(24px, 3vw, 40px);
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: clamp(14px, 2vw, 30px) clamp(10px, 1.4vw, 20px);
}
.afs-lu__item {
  margin: 0; display: flex; flex-direction: column; align-items: center; gap: 12px;
}
.afs-lu__item img {
  width: 100%; aspect-ratio: 1 / 1; border-radius: 50%;
  object-fit: cover; display: block; background: var(--af-cream);
}
/* 이름은 손글씨 — 메인 라인업의 아티스트 이름과 같은 서체 */
.afs-lu__item figcaption {
  font-family: var(--af-hand);
  font-size: clamp(16px, calc(1.9vw - 2px), 25px); line-height: 1.2;
  color: var(--af-navy); text-align: center; word-break: keep-all;
}

/* ---- 일정표 ---- */
.afs-sched { margin: 0; }
.afs-sched img {
  width: 100%; height: auto; display: block;
  border-radius: 14px; background: var(--af-cream);
}
.afs-sched figcaption {
  margin: 16px 0 0; text-align: right; font-size: 15px; color: #8a9099;
}

@media (max-width: 760px) {
  .afs-lu__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
