/* ==== 서브 화면 — 포트폴리오 · 미디어 · 문의 (sub/product_list · product_detail · list · view · contact_us)
 * 위쪽 배너 · 탭 줄은 회사 소개 컴포넌트(inc/corp_top.inc.php), 여기는 그 아래 본문
 * 토큰은 header.css :root (--kv-*) — 남색 ink · 파랑 signal · 연회색 haze */

.Sub.kv-sub { padding-bottom: 0; font-family: var(--kv-font); color: var(--kv-ink); word-break: keep-all; }
.kv-sub-body { padding: 96px 0 160px; background: #fff; }   /* 바탕을 못 박는다 — 브라우저 다크 바탕이 비치지 않게 */
.kv-sub-in--narrow > * { max-width: 880px; }

/* 머리 — 제목 · 설명 · 개수 */
.kv-sub-head {
	display: flex; align-items: flex-end; justify-content: space-between; gap: 24px;
	padding-bottom: 28px; border-bottom: 1px solid var(--kv-line);
}
.kv-sub-title { margin: 0; font-size: clamp(28px, 2.6vw, 40px); font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; color: var(--kv-ink); text-wrap: balance; }
.kv-sub-desc { margin: 14px 0 0; max-width: 60ch; font-size: 17px; line-height: 1.7; color: var(--kv-slate); }
.kv-sub-count { flex: none; font-family: var(--kv-font-num); font-size: 15px; color: var(--kv-slate); }

/* 분류 버튼 */
.kv-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 28px; }
.kv-chips + .kv-chips { margin-top: 12px; }
.kv-chip {
	display: inline-flex; align-items: center; height: 42px; padding: 0 20px;
	border: 1px solid var(--kv-line); border-radius: 999px; background: #fff;
	font-size: 15px; font-weight: 500; color: var(--kv-slate);
	transition: border-color .2s, color .2s, background-color .2s;
}
.kv-chip:hover { border-color: var(--kv-ink); color: var(--kv-ink); }
.kv-chip.is-on { border-color: var(--kv-ink); background: var(--kv-ink); color: #fff; }
.kv-chips--sub .kv-chip { height: 36px; padding: 0 16px; font-size: 14px; background: var(--kv-haze); border-color: transparent; }
.kv-chips--sub .kv-chip:hover { border-color: var(--kv-ink); }
.kv-chips--sub .kv-chip.is-on { background: #fff; border-color: var(--kv-signal); color: var(--kv-signal); }
.kv-chip:focus-visible, .kv-pf-card:focus-visible, .kv-bd-row:focus-visible, .kv-near-item:focus-visible, .kv-back:focus-visible {
	outline: 2px solid var(--kv-signal); outline-offset: 3px;
}

/* 카드 목록 — 포트폴리오 · 갤러리 게시판 */
.kv-pf-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 64px 32px; margin-top: 48px; }
.kv-pf-card { display: flex; flex-direction: column; color: inherit; }
.kv-pf-thumb { display: block; aspect-ratio: 16 / 10; overflow: hidden; border-radius: 14px; background: var(--kv-haze); }
.kv-pf-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--kv-ease); }
.kv-pf-card:hover .kv-pf-thumb img { transform: scale(1.04); }
.kv-pf-cat { margin-top: 20px; font-size: 13px; font-weight: 600; color: var(--kv-signal); }
.kv-pf-title { margin-top: 6px; font-size: 19px; font-weight: 700; line-height: 1.45; color: var(--kv-ink); }
.kv-pf-card:hover .kv-pf-title { text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 1px; }
.kv-pf-about {
	margin-top: 6px; font-size: 15px; line-height: 1.6; color: var(--kv-slate);
	display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.kv-badge {
	display: inline-flex; align-items: center; height: 22px; padding: 0 8px; margin-right: 8px;
	border-radius: 6px; background: var(--kv-ink); color: #fff; font-size: 12px; font-style: normal; font-weight: 600; vertical-align: 2px;
}

/* 빈 목록 */
.kv-empty { margin-top: 48px; padding: 96px 24px; border-radius: 16px; background: var(--kv-haze); text-align: center; font-size: 16px; color: var(--kv-slate); }

/* 쪽 번호 — PageNavi() 마크업 */
.kv-pager { margin-top: 80px; }
.kv-pager ul.pagination { gap: 4px; margin: 0; padding: 0; list-style: none; }
.kv-pager a.page-link { width: 42px; height: 42px; border-radius: 999px; font-family: var(--kv-font-num); font-size: 15px; color: var(--kv-slate); background: none; }
.kv-pager a.page-link.able:hover { background: var(--kv-haze); color: var(--kv-ink); }
.kv-pager a.page-link.now-page { background: var(--kv-ink); color: #fff; }

/* 상세 — 포트폴리오 · 게시글 */
.kv-back { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; font-weight: 500; color: var(--kv-slate); transition: color .2s, gap .2s; }
.kv-back:hover { color: var(--kv-ink); gap: 10px; }
.kv-pd-head { margin-top: 28px; padding-bottom: 40px; border-bottom: 1px solid var(--kv-line); }
.kv-pd-head .kv-pf-cat { margin-top: 0; display: block; }
.kv-pd-title { margin: 10px 0 0; font-size: clamp(30px, 3vw, 46px); font-weight: 700; line-height: 1.25; letter-spacing: -0.02em; color: var(--kv-ink); text-wrap: balance; }
.kv-pd-about { margin: 16px 0 0; max-width: 60ch; font-size: 18px; line-height: 1.7; color: var(--kv-slate); }

.kv-pd-gallery { position: relative; margin-top: 48px; overflow: hidden; border-radius: 18px; background: var(--kv-haze); }
.kv-pd-gallery .swiper-slide { display: flex; align-items: center; justify-content: center; aspect-ratio: 16 / 9; background: var(--kv-haze); }
.kv-pd-gallery .swiper-slide img { max-width: 100%; max-height: 100%; object-fit: contain; }
.kv-pd-arrow {
	position: absolute; top: 50%; z-index: 2; width: 52px; height: 52px; margin-top: -26px;
	display: flex; align-items: center; justify-content: center;
	border: 0; border-radius: 50%; background: rgba(255, 255, 255, .92); color: var(--kv-ink); font-size: 26px;
	box-shadow: 0 6px 20px rgba(14, 26, 61, .12); cursor: pointer; transition: background-color .2s, color .2s;
}
.kv-pd-arrow:hover { background: var(--kv-ink); color: #fff; }
.kv-pd-arrow.left { left: 20px; }
.kv-pd-arrow.right { right: 20px; }

.kv-pd-body { margin-top: 56px; font-size: 17px; line-height: 1.8; color: #2a3247; }
.kv-pd-body .ck-content img { max-width: 100%; height: auto; border-radius: 10px; }
.kv-pd-body .ck-content figure.image { margin: 24px 0; }

/* 이전 · 다음 */
.kv-near { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 96px; padding-top: 40px; border-top: 1px solid var(--kv-line); }
.kv-near-item { display: flex; flex-direction: column; gap: 8px; padding: 24px 28px; border-radius: 14px; background: var(--kv-haze); color: var(--kv-ink); transition: background-color .2s, color .2s; }
.kv-near-item.is-next { text-align: right; align-items: flex-end; }
.kv-near-item:hover { background: var(--kv-ink); color: #fff; }
.kv-near-lb { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; opacity: .7; }
.kv-near-item strong { font-size: 17px; font-weight: 700; line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* 게시판 줄 목록 */
.kv-bd-rows { margin-top: 8px; }
.kv-bd-row {
	display: grid; grid-template-columns: 120px minmax(0, 1fr) auto 24px; align-items: center; gap: 24px;
	padding: 28px 8px; border-bottom: 1px solid var(--kv-line); color: var(--kv-ink); transition: background-color .2s;
}
.kv-bd-row:hover { background: var(--kv-haze); }
.kv-bd-date { font-family: var(--kv-font-num); font-size: 15px; color: var(--kv-slate); }
.kv-bd-title { font-size: 18px; font-weight: 600; line-height: 1.5; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kv-bd-meta { font-size: 14px; color: var(--kv-slate); white-space: nowrap; }
.kv-bd-go { font-size: 20px; color: var(--kv-slate); transition: transform .3s var(--kv-ease), color .2s; }
.kv-bd-row:hover .kv-bd-go { transform: translateX(4px); color: var(--kv-ink); }
.kv-bd-head .kv-bd-meta { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 16px; font-family: var(--kv-font-num); }

/* 첨부 */
.kv-files { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 56px; padding: 20px 24px; border-radius: 14px; background: var(--kv-haze); }
.kv-files-lb { margin-right: 8px; font-size: 14px; font-weight: 600; }
.kv-file { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 14px; border: 1px solid var(--kv-line); border-radius: 999px; background: #fff; font-size: 14px; color: var(--kv-ink); cursor: pointer; }
.kv-file:hover { border-color: var(--kv-ink); }
.kv-file em { font-style: normal; color: var(--kv-slate); font-size: 13px; }

/* 문의하기 */
.kv-ct-in { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 80px; align-items: start; }
.kv-ct-side { position: sticky; top: calc(var(--header-height, 80px) + 32px); }
.kv-ct-steps { margin: 40px 0 0; padding: 0; list-style: none; counter-reset: kvstep; }
.kv-ct-steps li { counter-increment: kvstep; display: flex; align-items: center; gap: 14px; padding: 10px 0; font-size: 15px; color: var(--kv-slate); }
.kv-ct-steps li::before {
	content: counter(kvstep); flex: none; width: 28px; height: 28px; border-radius: 50%;
	display: flex; align-items: center; justify-content: center;
	background: var(--kv-haze); color: var(--kv-ink); font-family: var(--kv-font-num); font-size: 13px; font-weight: 600;
}

.kv-ct-form { padding: 48px; border-radius: 20px; background: var(--kv-haze); }
.kv-ct-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.kv-field { display: block; margin: 0 0 22px; }
.kv-field-lb { display: block; margin-bottom: 8px; font-size: 14px; font-weight: 600; color: var(--kv-ink); }
.kv-field-lb em { font-style: normal; color: var(--kv-signal); }
.kv-ct-form .form-input {
	display: block; width: 100%; height: 52px; padding: 0 16px; box-sizing: border-box;
	border: 1px solid var(--kv-line); border-radius: 10px; background: #fff;
	font: inherit; font-size: 16px; color: var(--kv-ink); transition: border-color .2s, box-shadow .2s;
}
.kv-ct-form textarea.form-input { height: auto; min-height: 180px; padding: 14px 16px; line-height: 1.6; resize: vertical; }
.kv-ct-form .form-input::placeholder { color: #a3abbb; }
.kv-ct-form .form-input:focus { outline: 0; border-color: var(--kv-signal); box-shadow: 0 0 0 3px rgba(46, 107, 255, .15); }
.kv-ct-mail { display: flex; align-items: center; gap: 10px; }
.kv-ct-mail .form-input { flex: 1; min-width: 0; }
.kv-ct-mail span { color: var(--kv-slate); }

.kv-ct-agree { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin: 6px 0 28px; }
.kv-check { display: inline-flex; align-items: center; gap: 10px; font-size: 14px; color: var(--kv-slate); cursor: pointer; }
.kv-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--kv-ink); }
.kv-link { padding: 0; border: 0; background: none; font-size: 14px; color: var(--kv-ink); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }

.kv-ct-send {
	display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; height: 60px;
	border: 0; border-radius: 12px; background: var(--kv-line); color: #fff; font-size: 17px; font-weight: 600;
	cursor: not-allowed; transition: background-color .25s;
}
.kv-ct-send.on { background: var(--kv-ink); cursor: pointer; }
.kv-ct-send.on:hover { background: var(--kv-signal); }

@media (prefers-reduced-motion: reduce) {
	.kv-pf-thumb img, .kv-bd-go, .kv-back { transition: none; }
}

@media (max-width: 1200px) {
	.kv-pf-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.kv-ct-in { grid-template-columns: 1fr; gap: 48px; }
	.kv-ct-side { position: static; }
}

@media (max-width: 768px) {
	.kv-sub-body { padding: 56px 0 96px; }
	.kv-sub-head { flex-direction: column; align-items: flex-start; gap: 10px; }
	.kv-pf-grid { grid-template-columns: 1fr; gap: 40px; margin-top: 32px; }
	.kv-chips { flex-wrap: nowrap; overflow-x: auto; margin-right: -16px; padding-right: 16px; scrollbar-width: none; }
	.kv-chips::-webkit-scrollbar { display: none; }
	.kv-chip { flex: none; }
	.kv-bd-row { grid-template-columns: minmax(0, 1fr) 20px; gap: 6px 12px; padding: 20px 4px; }
	.kv-bd-date { grid-row: 1; grid-column: 1; font-size: 13px; }
	.kv-bd-title { grid-column: 1; white-space: normal; font-size: 16px; }
	.kv-bd-meta { grid-column: 1; }
	.kv-bd-go { grid-row: 1 / span 3; grid-column: 2; }
	.kv-pd-gallery { margin-top: 32px; border-radius: 12px; }
	.kv-pd-arrow { width: 40px; height: 40px; margin-top: -20px; font-size: 22px; }
	.kv-near { grid-template-columns: 1fr; margin-top: 64px; }
	.kv-near-item.is-next { text-align: left; align-items: flex-start; }
	.kv-ct-form { padding: 28px 20px; border-radius: 16px; }
	.kv-ct-row { grid-template-columns: 1fr; gap: 0; }
	.kv-ct-agree { flex-direction: column; align-items: flex-start; }
}
