@charset "utf-8";
/* ==========================================================================
   유덕건축(dbcom92) — 건축사사무소 포트폴리오 · PC 1920
   Figma  C0jd8QVJgzgwCstvhc0kM4  (PC 1920 · 콘텐츠 1600 / 좌우 160)
   바탕은 temp23 템플릿 테마(그누보드 5.3.1.4). 4 · 6 · 7 · 11 · 12 · 13 · 14-0 · 14-1절이 시안이고,
   14절 글보기는 템플릿 구조에 시안 색만 입혔다. 14절 목록 행 · 15~17절(표 목록 · 회원)은 아직 템플릿 그대로다 — 1절 템플릿 토큰을 쓴다.
   18 · 19절(온라인 문의 폼 · 토스트)은 시안 4-2 다

   이 파일과 response.css 둘뿐이다. 새 CSS 파일을 만들지 않는다.
   게시판·회원 스킨의 style.css 도 두지 않는다 — 모양은 전부 여기서 잡는다.

    1. 토큰 — 시안 토큰(Figma 'dbcom92 tokens') · 템플릿 토큰
    2. 초기화 · 그누보드 공용 유틸
    3. 공통 조각 — 아이콘 · 버튼 · 배지 · 키-값 표 · 등장 (템플릿 — 서브 · 게시판이 쓴다)
    4. Header 120 · 로고 · Button Outline
    5. 모바일 드로어(삼선 메뉴) — 768 이하
    6. SubTop · SNB · 브레드크럼
    7. 메인 S1 프로젝트 바둑판
   11. Footer
       (8 · 9 · 10절은 비움 — 템플릿 메인 S2~S5 자리. 게시판 스킨 주석이 13~16절 번호를 가리켜 번호를 당기지 않았다)
   12. 서브 — 판면 · 사진 자리 · 건축개요 · 소개글 · 지도 · 개요 묶음 · 소제목 줄 · 지도 자리 · 빈 상태
   13. 게시판 공통 — 툴바(건수 · 검색) · 페이저 · 관리자 줄
   14-0. 게시판 — PROJECT 목록 · 상세 (skin/board/gallery)
   14. 게시판 — 목록 행 · 글보기(basic · news · history · qa 글보기가 같이 쓴다)
   14-1. 게시판 — NEWS 목록 (skin/board/news)
   15. 게시판 — 표 목록(1:1 문의) · 연혁 · 정책 · 1:1 문의
   16. 글쓰기 폼(관리자용 기본 스킨)
   17. 회원 · 컨텐츠 · 검색 · FAQ
   18. 온라인 문의 폼 (skin/board/inquiry) — 칸 · 에러 · 자동등록방지 · 동의 · 보내기
   19. 토스트 (문의 보낸 뒤)
   ========================================================================== */


/* ==========================================================================
   1. 토큰
   화면 규칙에 hex 를 직접 쓰지 않는다.
   ========================================================================== */
:root {
	/* ── 시안 토큰 — Figma 'dbcom92 tokens'(C0jd8QVJgzgwCstvhc0kM4). 헤더 · 메인 · 푸터 · 서브 상단 · 정적 서브 · PROJECT · NEWS · 글보기 색이 쓴다 ──
	   아래 템플릿 토큰은 아직 템플릿 그대로인 목록 행 · 회원 · 문의가 쓴다. 그 화면을 시안대로 바꿀 때 이쪽으로 합친다 */
	--c-text-strong:    #1c1c1c;   /* color/text/strong */
	--c-text-body:      #555555;   /* color/text/body — #fcfcfc 위 7.3:1 */
	--c-text-muted:     #737373;   /* color/text/muted — #fcfcfc 위 4.6:1. bg/soft 위에는 두지 않는다(4.1:1) */
	--c-text-on-brand:  #ffffff;   /* color/text/on-brand */
	--c-bg-paper:       #fcfcfc;   /* color/bg/paper — 페이지 */
	--c-bg-default:     #ffffff;   /* color/bg/default — 입력칸 · 체크 상자 면(FormField · AgreeCheck) */
	--c-bg-soft:       #efefef;   /* color/bg/soft — 사진 자리 */
	--c-bg-inverse:     #1c1c1c;   /* color/bg/inverse — Button Outline hover 면 */
	--c-border-default: #e3e3e3;   /* color/border/default */
	--c-border-strong:  #8c8c8c;   /* color/border/strong — 버튼 테두리 */
	--c-brand-accent:   #ee5120;   /* color/brand/accent — 로고 주황. 현재 메뉴 아래 2px 막대에만(3.5:1 · 비텍스트 3:1 통과). 글자에 쓰지 않는다 */
	--c-dim:            rgba(28, 28, 28, .5);   /* 드로어 뒤 딤 한 겹 — text/strong .5 (CSS 전용, 시안에 모바일 없음) */

	/* 판면 — layout/container 1600 · layout/gutter 160(1920 에서 --yd-pad 가 160) · layout/header 120 · layout/grid-gap 32
	   ★ --yd-pad 는 꽉 찬 요소의 좌우 padding 으로만 쓴다(그 요소 폭으로 계산된다). 좁아지면 --yd-pad-min(response.css 가 줄인다) */
	--layout-container: 1600px;
	--layout-header:    120px;
	--layout-grid-gap:  32px;
	--yd-pad-min: 80px;
	--yd-pad: max(var(--yd-pad-min), calc((100% - var(--layout-container)) / 2));

	/* 글자 — 텍스트 스타일(Pretendard 하나 · 하한 14). font 축약형이라 자간은 따로 적는다 */
	--t-page:    300 40px/52px var(--font);   /* title/page — Light 40/52 · 자간 -1%(--ls-title) · 서브 상단 제목 */
	--t-project: 300 32px/44px var(--font);   /* title/project — Light 32/44 · 자간 -1% · 프로젝트 · 회사명 */
	--t-heading: 400 20px/30px var(--font);   /* heading/section — 소제목 줄 · 로고 파일이 없을 때 글자 로고 */
	--t-body-l:  400 17px/30px var(--font);   /* body/l — 부제 · 소개 본문 */
	--t-body-m:  400 16px/28px var(--font);   /* body/m — 프로젝트 설명 · 빈 상태 */
	--t-body-s:  400 15px/24px var(--font);   /* body/s — 개요 값 · 검색어 · 페이지 번호 */
	--t-nav:     500 15px/22px var(--font);   /* nav · button — Medium 15/22 · 자간 4% · 대문자 */
	--t-label:   500 14px/20px var(--font);   /* label/en — Medium 14/20 · 자간 10% · 대문자 */
	--t-caption: 400 14px/22px var(--font);   /* caption — Regular 14/22 · 자간 0 */
	--ls-title:  -.01em;
	--ls-caps:   .04em;
	--ls-label:  .1em;

	/* 움직임 — ProjectTile 주석: hover 사진 opacity .8(.14s ease-out) · 로딩 opacity 0→1(.3s) */
	--dur-tile-hover: 140ms;
	--dur-tile-in:    300ms;

	/* ── 템플릿 토큰(temp23) — 서브 · 게시판 · 회원 ─────────────────────────────────────── */
	/* 색 — 템플릿 Figma 변수 (왼쪽 이름은 바탕 테마에서 쓰던 이름 · 주석이 템플릿 Figma 변수) */
	--brand:        #1656AC;   /* color/primary/base   — 버튼 · 강조 면 · 밝은 바탕 위 글자 */
	--brand-hover:  #0F3D78;   /* color/primary/deep   — 블루 면 hover */
	--brand-soft:   #EAF1FB;   /* color/primary/soft */
	--ink:          #0F141A;   /* color/ink/900 — 제목 */
	--text-2:       #48515C;   /* color/ink/700 — 본문 */
	--text-3:       #677180;   /* color/ink/500 — 보조 */
	--line:         #E2E6EB;   /* color/line/base */
	--white:       #FFFFFF;   /* color/surface/white · onDark/high */
	--paper:        #F3F5F8;   /* color/surface/paper */
	--chip:         #F3F5F8;   /* 배지 면 = paper */
	--dark:         #0B1016;   /* color/dark/900 */
	--dark-700:     #1C2631;   /* color/dark/700 — 다크 면 hover */

	/* 반투명 — Figma 컬러 스타일 */
	--line-on-photo-16:    rgba(255, 255, 255, .16);     /* line/on-photo-16 */

	/* 간격 — 시안 space/4 ~ space/160 (판면 좌우는 위 --yd-pad) */
	--sp-4: 4px;    --sp-8: 8px;    --sp-12: 12px;  --sp-16: 16px;  --sp-20: 20px;
	--sp-24: 24px;  --sp-32: 32px;  --sp-40: 40px;  --sp-48: 48px;  --sp-56: 56px;
	--sp-64: 64px;  --sp-80: 80px;  --sp-120: 120px; --sp-160: 160px;

	/* 모양 — radius/none 0 · radius/pill 30 */
	--radius: 0;
	--radius-pill: 30px;

	/* 글꼴 — Pretendard 하나(국문 · 영문) */
	--font: "Pretendard Variable", Pretendard, -apple-system, BlinkMacSystemFont,
	        "Apple SD Gothic Neo", "Malgun Gothic", "맑은 고딕", sans-serif;

	/* 움직임 — 모션 스토리보드 22:2 토큰 + 인터랙션 플로우 70:2 (글자 쪼개기 · 숫자 굴림 · 사진 리빌은 쓰지 않는다) */
	--dur:       600ms;   /* duration/base — 진입 fade-up · 카드 사진 hover */
	--dur-state: 240ms;   /* duration/fast — hover · 탭 (시안 헤더 · 버튼 hover 도 쓴다) */
	--ease:      cubic-bezier(.16, 1, .3, 1);   /* easing/out-expo */
	--ease-out:  cubic-bezier(.16, 1, .3, 1);
	--rise:      24px;    /* 통째 페이드인 업 거리(플로우 · SubTop 주석) */
}


/* ==========================================================================
   2. 초기화 · 그누보드 공용 유틸
   그누보드가 실제로 쓰는 것만 남긴다. .sound_only 를 지우면
   "팝업레이어 알림이 없습니다" 같은 문구가 화면에 그대로 뜬다
   ========================================================================== */
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
html { -webkit-text-size-adjust: 100%; }
body {
	background: var(--c-bg-paper);   /* 시안 화면 바탕 bg/paper — 메인 · 서브 모두 */
	color: var(--text-2);
	font-family: var(--font);
	font-size: 16px;
	line-height: 1.75;
	letter-spacing: -0.2px;
	word-break: keep-all;
	overflow-x: hidden;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

h1, h2, h3, h4, h5, h6, p, ul, ol, li, dl, dt, dd, figure, blockquote { margin: 0; padding: 0; }
ul, ol { list-style: none; }
img { max-width: 100%; height: auto; border: 0; vertical-align: middle; }
a { color: inherit; text-decoration: none; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
	outline: 2px solid var(--c-text-strong); outline-offset: 2px;   /* 시안에 파랑이 없다 — 먹색 */
}
button { font: inherit; color: inherit; }
table { border-collapse: collapse; border-spacing: 0; }
address, em { font-style: normal; }
legend { position: absolute; width: 0; height: 0; overflow: hidden; visibility: hidden; font-size: 0; line-height: 0; }
fieldset { border: 0; margin: 0; padding: 0; }
hr { display: none; }

/* ★ 그누보드 스킨 전체가 쓰는 클래스다. 절대 지우지 않는다 */
.sound_only, #hd_h1, #skip_to_container a, .msg_sound_only {
	position: absolute !important; width: 1px !important; height: 1px !important;
	margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%);
	white-space: nowrap; border: 0;
}
#skip_to_container a:focus, #skip_to_container a:active {
	position: fixed !important; left: 0; top: 0; z-index: 10000;
	width: 200px !important; height: auto !important; padding: 12px 0;
	clip: auto; clip-path: none; background: var(--ink); color: var(--white); text-align: center;
}
#hd_login_msg { display: none; }

/* 팝업레이어 */
#hd_pop { position: relative; z-index: 1000; margin: 0 auto; height: 0; }
#hd_pop h2 { position: absolute; font-size: 0; line-height: 0; overflow: hidden; }
.hd_pops { position: absolute; border: 1px solid var(--line); background: var(--white); }
.hd_pops img { max-width: 100%; }
.hd_pops_con { max-width: 100%; }
.hd_pops_footer { display: flex; justify-content: space-between; padding: 0; background: var(--ink); color: var(--white); }
.hd_pops_footer button { display: inline-block; height: 40px; padding: 0 16px; border: 0; background: none; color: var(--white); font-size: 14px; cursor: pointer; }

/* 새창 · 사이드뷰 */
#newwin { background: var(--white); }
.sv_wrap { position: relative; display: inline-block; font-weight: normal; }
.sv_wrap .sv { display: none; position: absolute; z-index: 1000; top: 24px; left: 0; width: 100px; padding: 8px 0; border: 1px solid var(--line); background: var(--white); }
.sv_wrap .sv a { display: block; padding: 6px 12px; font-size: 14px; }
.sv_wrap.sv_on .sv { display: block; }

/* 캡챠 */
#captcha { display: inline-flex; align-items: center; gap: var(--sp-8); flex-wrap: wrap; }
#captcha legend { display: none; }
#captcha #captcha_img { height: 52px; border: 1px solid var(--line); vertical-align: middle; }
/* ★ 아이콘이 없어 글자 버튼이다. 52px 정사각으로 두면 "숫자음성듣기"가 칸을 넘어
   옆 버튼과 겹쳐 보인다 — 글자 길이만큼 늘어나게 둔다 */
#captcha #captcha_mp3, #captcha #captcha_reload {
	width: auto; height: 52px; padding: 0 var(--sp-12); white-space: nowrap;
	border: 1px solid var(--line); border-radius: var(--radius); background: transparent;
	color: var(--text-3); font-size: 14px; cursor: pointer;
}
#captcha #captcha_mp3:hover, #captcha #captcha_reload:hover { border-color: var(--ink); color: var(--ink); }
#captcha #captcha_mp3 span, #captcha #captcha_reload span { display: none; }
#captcha #captcha_key { width: 120px; height: 52px; padding: 0 var(--sp-12); border: 1px solid var(--line); font-size: 16px; }
#captcha #captcha_info { display: block; width: 100%; margin-top: var(--sp-8); font-size: 14px; color: var(--text-3); }

/* 체크박스·라디오 — 브라우저 기본 파랑을 주색으로 돌린다 */
input[type="checkbox"], input[type="radio"] { accent-color: var(--c-text-strong); }   /* 시안에 파랑이 없다 — 먹색 */

/* 그누보드 기본 버튼 — 시안 Btn 처럼 pill. 주요 = 다크 면 */
.btn_submit {
	display: inline-flex; align-items: center; justify-content: center;
	height: 56px; padding: 0 var(--sp-40); border: 0; border-radius: var(--radius-pill);
	background: var(--dark); color: var(--white);
	font-family: var(--font); font-size: 16px; font-weight: 600; line-height: 1.45; cursor: pointer;
	transition: background-color var(--dur-state) var(--ease-out);
}
.btn_submit:hover { background: var(--dark-700); }
.btn_cancel, .btn_close {
	display: inline-flex; align-items: center; justify-content: center;
	height: 56px; padding: 0 var(--sp-32); border: 1px solid var(--line); border-radius: var(--radius-pill);
	background: transparent; color: var(--text-2); font-size: 16px; cursor: pointer;
	transition: border-color var(--dur-state) var(--ease-out), color var(--dur-state) var(--ease-out);
}
.btn_cancel:hover, .btn_close:hover { border-color: var(--ink); color: var(--ink); }
/* 관리자 · 선택삭제 · 글쓰기는 관리용이다. 강조하지 않는다 — 직각 · 선 border/default · caption text/body */
.btn_b01, .btn_b02, .btn_b03, .btn_admin {
	display: inline-flex; align-items: center; justify-content: center;
	height: 44px; padding: 0 var(--sp-20); border: 1px solid var(--c-border-default); border-radius: var(--radius);
	background: transparent; color: var(--c-text-body); font: var(--t-caption); letter-spacing: 0; cursor: pointer;
	transition: border-color var(--dur-state) ease-out, color var(--dur-state) ease-out;
}
.btn_b01:hover, .btn_b02:hover, .btn_b03:hover, .btn_admin:hover { border-color: var(--c-text-strong); color: var(--c-text-strong); }
.btn_confirm { display: flex; justify-content: center; gap: var(--sp-12); }

/* 그누보드 기본 표 — 남겨 두되 톤만 맞춘다 */
.tbl_wrap table { width: 100%; border-top: 2px solid var(--ink); }
.tbl_wrap th, .tbl_wrap td { padding: var(--sp-16); border-bottom: 1px solid var(--line); font-size: 16px; text-align: left; }
.tbl_wrap th { background: var(--paper); color: var(--ink); font-weight: 600; }
.tbl_head01 caption, .tbl_head02 caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* 본문 폭 컨테이너 */
#wrapper, #wrapper02 { position: relative; }



/* ==========================================================================
   3. 공통 조각 — 아이콘 · 버튼 · 화살표 · 배지 · 키-값 표 · 등장
      (템플릿 영문 라벨 .eyebrow · 섹션 표제 .sec-head 는 2026-10-19 문의 폼을 시안으로 바꾸며 지웠다 — 쓰는 곳이 그것뿐이었다)
   ========================================================================== */
/* 아이콘 — Lucide 선 1.5. 크기와 상관없이 선 1.5px (시안 인스턴스가 16·18·20·48 어디서나 1.5) */
.dm-i { flex: none; display: inline-block; vertical-align: middle; }
.dm-i * { vector-effect: non-scaling-stroke; }

/* 버튼 — Btn 3:26. 높이 60 · pill · padding 0 24 0 32 · 글자 Btn/KR 15/15 · 화살표 20 · 간격 24
   ★ .btn 에는 면·테두리를 적지 않는다. 그누보드 스킨이 `btn_cancel btn` 처럼 두 클래스를 같이 다는 곳이 있다 */
.btn {
	display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-24);
	height: 60px; padding: 0 var(--sp-24) 0 var(--sp-32); border-radius: var(--radius-pill);
	font-family: var(--font); font-size: 15px; font-weight: 600; line-height: 1; letter-spacing: -0.2px; white-space: nowrap; cursor: pointer;
	transition: background-color var(--dur-state) var(--ease-out), border-color var(--dur-state) var(--ease-out), color var(--dur-state) var(--ease-out);
}
.btn:not(:has(.dm-i)) { padding: 0 var(--sp-32); }
.btn--blue  { border: 0; background: var(--brand); color: var(--white); }
.btn--blue:hover { background: var(--brand-hover); }
.btn--dark  { border: 0; background: var(--dark); color: var(--white); }
.btn--dark:hover { background: var(--dark-700); }
.btn--white { border: 1px solid var(--line); background: var(--white); color: var(--ink); }
.btn--white:hover { border-color: var(--ink); }
.btn--ghost { border: 1px solid var(--line-on-photo-16); background: transparent; color: var(--white); }
.btn--ghost:hover { border-color: var(--white); }
.btn .dm-i { transition: transform var(--dur-state) var(--ease-out); }
.btn:hover .dm-i { transform: translateX(3px); }
.btn:disabled { opacity: .5; cursor: default; }

/* 배지 — 알약형 */
.badge { display: inline-flex; align-items: center; padding: 4px var(--sp-12); border-radius: var(--radius-pill); font-size: 14px; font-weight: 500; line-height: 22px; letter-spacing: -0.1px; font-style: normal; white-space: nowrap; }
.badge--neutral { background: var(--chip); color: var(--text-3); }
.badge--brand { background: var(--brand-soft); color: var(--brand); }

/* 키-값 표 — 글보기 머리 정보(분류 · 준공 연도 · 문의 항목). 행 위에만 선 */
.kv { display: flex; flex-direction: column; }
.kv__row { display: flex; gap: var(--sp-24); padding: var(--sp-16) 0; border-top: 1px solid var(--line); }
.kv dt { flex: none; width: 140px; font-size: 15px; font-weight: 600; line-height: 26px; letter-spacing: -0.2px; color: var(--text-3); }
.kv dd { flex: 1; min-width: 0; margin: 0; font-size: 16px; line-height: 28px; letter-spacing: -0.2px; color: var(--ink); }

/* 등장 — 통째 페이드인 업(아래→위 24 · 600ms · out-expo) · 뷰포트 진입 시 1회.
   숨김 클래스(.reveal)는 JS 가 붙인다 — JS 가 실패하면 처음부터 보인다 */
.reveal { opacity: 0; transform: translateY(var(--rise)); transition: opacity var(--dur) var(--ease), transform var(--dur) var(--ease); }
.reveal.is-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
	.reveal { opacity: 1; transform: none; transition: none; }
}
.pc-only { display: inline; }


/* ==========================================================================
   4. Header 120 · 로고 · Button Outline — 시안 Header 10:17 · Logo 10:8 · NavItem 10:16 · Button 10:94
      고정하지 않는다(스크롤과 함께 올라간다 — 레퍼런스). 로고 왼쪽 · 1차 메뉴(간격 40) + 로그인 줄(간격 64) 오른쪽.
      로그인 줄 = 로그인 / 관리자 · 내정보 + 로그아웃(2026-10-19 사용자 요청). 2차 메뉴는 1차 아래 작은 드롭다운(사용자 요청 — 시안에는 없다).
      768 이하는 메뉴 · 로그인 줄 대신 삼선 버튼 → 5절 드로어
   ========================================================================== */
.hd { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-40); height: var(--layout-header); padding: 0 var(--yd-pad); background: var(--c-bg-paper); }
.hd__logo { flex: none; display: inline-flex; }
.hd__right { display: flex; align-items: center; gap: var(--sp-64); }

/* 로고 190×56 — 헤더 · 푸터 공용(dm_logo). 파일이 없으면 홈페이지 제목 글자 */
.dm-logo { display: block; width: 190px; height: 56px; object-fit: contain; }
.dm-logo--text { width: auto; height: auto; font: var(--t-heading); letter-spacing: 0; color: var(--c-text-strong); white-space: nowrap; }

/* 1차 메뉴 · 로그인 — 글자 nav 15/22 대문자 + 아래 막대 2px(간격 4) · 위아래 8 → 누르는 높이 44.
   기본 text/muted · hover text/strong · Active(현재 1차) text/strong + 막대 brand/accent */
.gnb { display: flex; align-items: center; gap: var(--sp-40); }
.hd__util { display: flex; align-items: center; gap: var(--sp-40); }   /* 로그인 줄 — 관리자 · 내정보 + 로그아웃. 메뉴와 같은 간격 */
.gnb__link { display: inline-flex; flex-direction: column; align-items: center; gap: var(--sp-4); padding: var(--sp-8) 0; font: var(--t-nav); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-muted); white-space: nowrap; transition: color var(--dur-state) ease-out; }
.gnb__link::after { content: ""; align-self: stretch; height: 2px; background: transparent; }
.gnb__link:hover, .gnb__link.active { color: var(--c-text-strong); }
.gnb__link.active::after { background: var(--c-brand-accent); }
/* 2차 메뉴 드롭다운 — 1차 바로 아래 가운데. 면 bg/paper + 테두리 1px border/default · 라운드 0 · 그림자 0.
   2차 글자 nav 15/22 대문자 · 위아래 12 → 누르는 높이 46. 기본 text/muted · hover · 현재 2차 text/strong.
   PC = hover · 키보드 초점(focus-within), 터치 = .is-open(tail.php 4). 투명도만 바뀌고 움직이지 않는다(모션 원칙) */
.gnb__item { position: relative; display: flex; }
.gnb__item:hover > .gnb__link, .gnb__item.is-open > .gnb__link { color: var(--c-text-strong); }
.gnb__sub { position: absolute; top: 100%; left: 50%; z-index: 1100; min-width: 160px; padding: var(--sp-8) 0; border: 1px solid var(--c-border-default); background: var(--c-bg-paper); transform: translateX(-50%); opacity: 0; visibility: hidden; transition: opacity var(--dur-state) ease-out, visibility 0s linear var(--dur-state); }
.gnb__item:hover > .gnb__sub, .gnb__item:focus-within > .gnb__sub, .gnb__item.is-open > .gnb__sub { opacity: 1; visibility: visible; transition: opacity var(--dur-state) ease-out, visibility 0s; }
.gnb__sub-link { display: block; padding: var(--sp-12) var(--sp-24); font: var(--t-nav); letter-spacing: var(--ls-caps); text-transform: uppercase; text-align: center; color: var(--c-text-muted); white-space: nowrap; transition: color var(--dur-state) ease-out; }
.gnb__sub-link:hover, .gnb__sub-link.active { color: var(--c-text-strong); }
.gnb__empty { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); }
.gnb__empty a { text-decoration: underline; }

/* Button Outline — 직각 · 테두리 1px border/strong · 글자 button 15/22 대문자 + 아이콘 20(간격 12) · 위아래 16 · 좌우 32.
   Figma 자동 레이아웃이 테두리를 크기에 넣는다 — 인스턴스 실측 높이 56(MORE 142×56 · 목록 93×56). hover = 면 bg/inverse + 흰 글자 */
.btn-line { display: inline-flex; align-items: center; gap: var(--sp-12); padding: var(--sp-16) var(--sp-32); border: 1px solid var(--c-border-strong); border-radius: var(--radius); background: transparent; font: var(--t-nav); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-strong); white-space: nowrap; cursor: pointer; transition: background-color var(--dur-state) ease-out, border-color var(--dur-state) ease-out, color var(--dur-state) ease-out; }
.btn-line:hover, .btn-line:focus-visible { border-color: var(--c-bg-inverse); background: var(--c-bg-inverse); color: var(--c-text-on-brand); }
.btn-line .dm-i { stroke-width: 1px; }   /* 시안 아이콘은 Lucide 렌더 1px. .dm-i 기본은 템플릿 1.5 */
.hd__menu-btn { display: none; }   /* 삼선 버튼 — 768 이하에서만(response.css) */


/* ==========================================================================
   5. 모바일 드로어(삼선 메뉴) — 768 이하에서만 열린다(response.css · tail.php 6). 2026-10-19 사용자 요청 — 템플릿 방식
      오른쪽에서 밀려 나오는 패널(bg/paper · 폭 360 · 화면 88% 이내) + 뒤 딤 한 겹. 1차 + 2차 모두 펼침.
      1차 nav 대문자 18 · text/strong(현재 1차 = 왼쪽 2px brand/accent 막대) · 2차 body/s · text/body(현재 2차 text/strong)
      ★ z-index 1200 — 메인에서 그누보드 팝업레이어가 #hd 를 인라인 1000 으로 끌어올린다
   ========================================================================== */
#mo_drawer { display: none; position: fixed; inset: 0; z-index: 1200; visibility: hidden; transition: visibility 0s linear var(--dur-tile-in); }
#mo_drawer.is-open { visibility: visible; transition: visibility 0s; }
#mo_drawer .dim { position: absolute; inset: 0; background: var(--c-dim); opacity: 0; transition: opacity var(--dur-tile-in) ease-out; }
#mo_drawer.is-open .dim { opacity: 1; }
#mo_drawer .panel { position: absolute; right: 0; top: 0; bottom: 0; display: flex; flex-direction: column; width: min(360px, 88vw); overflow-y: auto; background: var(--c-bg-paper); transform: translateX(100%); transition: transform var(--dur-tile-in) ease-out; }
#mo_drawer.is-open .panel { transform: none; }
@media (prefers-reduced-motion: reduce) {
	#mo_drawer, #mo_drawer .dim, #mo_drawer .panel { transition: none; }
}
.dr-head { flex: none; display: flex; align-items: center; justify-content: space-between; height: 64px; padding: 0 var(--sp-8) 0 var(--sp-20); border-bottom: 1px solid var(--c-border-default); }
.dr-head .dm-logo { width: 136px; height: 40px; }
.dr-close { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; padding: 0; border: 0; background: none; color: var(--c-text-strong); cursor: pointer; }
.dr-close .dm-i, .hd__menu-btn .dm-i { stroke-width: 1px; }
.dr-nav { flex: 1; padding: var(--sp-8) var(--sp-20); }
.dr-group { padding: var(--sp-16) 0; border-bottom: 1px solid var(--c-border-default); }
.dr-1da { position: relative; display: block; padding: var(--sp-12) 0; font: 500 18px/26px var(--font); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-strong); }
.dr-1da.active::before { content: ""; position: absolute; left: calc(var(--sp-20) * -1); top: var(--sp-12); bottom: var(--sp-12); width: 2px; background: var(--c-brand-accent); }
.dr-sub a { display: block; padding: var(--sp-12) 0; font: var(--t-body-s); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-body); }
.dr-sub a.active { color: var(--c-text-strong); }
.dr-foot { flex: none; display: flex; flex-wrap: wrap; gap: 0 var(--sp-24); padding: var(--sp-16) var(--sp-20) var(--sp-24); }
.dr-login { display: inline-block; padding: var(--sp-12) 0; font: var(--t-nav); letter-spacing: var(--ls-caps); color: var(--c-text-muted); }
body.drawer-open { position: fixed; width: 100%; overflow: hidden; }
body.drawer-open #hd { pointer-events: none; }   /* z-index 가 또 밀려도 헤더가 탭을 못 가져간다 */



/* ==========================================================================
   6. SubTop · SNB · 브레드크럼 — 시안 SubTop 10:50 · SnbTab 10:43 · Breadcrumb 10:44 (모든 서브 공통)
      제목 title/page(위 80 · 아래 48) → SNB(아래 선 1px border/default) = 왼쪽 2차 탭(간격 40) · 오른쪽 브레드크럼
   ========================================================================== */
.sub-top { padding: var(--sp-80) var(--yd-pad) var(--sp-48); }
.sub-top__title { font: var(--t-page); letter-spacing: var(--ls-title); color: var(--c-text-strong); word-break: keep-all; }

.snb { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-24); padding: 0 var(--yd-pad); border-bottom: 1px solid var(--c-border-default); }
/* 탭 — 위 16 · 글자 nav 15/22 대문자 · 16 · 막대 2px → 높이 56. 기본 text/muted · hover · Active text/strong + 막대 brand/accent */
.snb__tabs { display: flex; align-items: flex-end; gap: var(--sp-40); min-width: 0; }
.snb__tab { display: inline-flex; flex-direction: column; align-items: center; gap: var(--sp-16); padding-top: var(--sp-16); font: var(--t-nav); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-muted); white-space: nowrap; transition: color var(--dur-state) ease-out; }
.snb__tab::after { content: ""; align-self: stretch; height: 2px; background: transparent; }
.snb__tab:hover, .snb__tab.active { color: var(--c-text-strong); }
.snb__tab.active::after { background: var(--c-brand-accent); }
/* 브레드크럼 — caption 14/22 · 간격 8 · 위아래 12. 마지막(현재)은 text/strong · 링크 없음.
   2차 메뉴명이 소문자(project · contact)라도 대문자로 보인다(시안 · 한글 영향 없음) */
.crumb { flex: none; display: flex; align-items: center; gap: var(--sp-8); padding: var(--sp-12) 0; font: var(--t-caption); letter-spacing: 0; text-transform: uppercase; color: var(--c-text-muted); white-space: nowrap; }
.crumb a { padding: var(--sp-12) 0; margin: calc(var(--sp-12) * -1) 0; transition: color var(--dur-state) ease-out; }   /* 누르는 높이 46 */
.crumb a:hover { color: var(--c-text-strong); }
.crumb strong { font-weight: inherit; color: var(--c-text-strong); }

/* 게시판 · 회원 등 그누보드 스킨을 감싸는 판면 — 위 64 · 아래 120 · 좌우 160(시안 2-1 S1) */
#container.dm-wrap { padding: var(--sp-64) var(--yd-pad) var(--sp-120); }
#container.dm-wrap::after { content: ""; display: block; clear: both; }


/* ==========================================================================
   7. 메인 S1 프로젝트 — 시안 `0. 메인` 12:34 · 바둑판 grid 12:35 · ProjectTile 23:445
      위 64 · 아래 120 · 바둑판 4열(1920 에서 칸 376 정사각) 간격 32 · 줄 사이 40 → 64 아래 MORE
      칸 = PROJECT 게시판 최신 12건(latest theme/dm_tile). 히어로 · 소개문 없음
   ========================================================================== */
.m-works { display: flex; flex-direction: column; align-items: center; gap: var(--sp-64); padding: var(--sp-64) var(--yd-pad) var(--sp-120); background: var(--c-bg-paper); }
.tile-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--sp-40) var(--layout-grid-gap); width: 100%; }
.tile a { display: flex; flex-direction: column; gap: var(--sp-12); }
/* 사진 자리 bg/soft 위에 사진. hover 는 사진 투명도만(.8 · .14s ease-out),
   로딩은 JS 가 붙인 .is-loading 을 받는 대로 떼며 0→1(.3s) — tail.php 2 */
.tile__photo { display: block; aspect-ratio: 1 / 1; overflow: hidden; background: var(--c-bg-soft); transition: opacity var(--dur-tile-hover) ease-out; }
.tile__photo img { display: block; width: 100%; height: 100%; max-width: none; object-fit: cover; transition: opacity var(--dur-tile-in) ease-out; }
.tile__photo img.is-loading { opacity: 0; }
.tile a:hover .tile__photo, .tile a:focus-visible .tile__photo { opacity: .8; }
/* 제목 caption 14/22 · text/body · 가운데 1줄(넘치면 말줄임) */
.tile__title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: var(--t-caption); letter-spacing: 0; color: var(--c-text-body); text-align: center; }
.tile-grid__empty { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); text-align: center; }


/* ==========================================================================
   11. Footer — 시안 Footer 10:67 · bg/paper · 위 선 1px border/default · 위 48 · 아래 64
       왼쪽 로고 + 회사정보 2줄(caption · text/muted · 항목 간격 24 · 줄 간격 4) / 오른쪽 아래 개인정보처리방침 + 카피라이트
       (8 · 9 · 10절은 비움 — 템플릿 메인 S2~S5 자리였다)
   ========================================================================== */
.ft { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-40); padding: var(--sp-48) var(--yd-pad) var(--sp-64); border-top: 1px solid var(--c-border-default); background: var(--c-bg-paper); }
.ft__co { min-width: 0; display: flex; flex-direction: column; align-items: flex-start; gap: var(--sp-24); }
.ft__logo { display: flex; }
.ft__info { display: flex; flex-direction: column; gap: var(--sp-4); font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); }
.ft__row { display: flex; flex-wrap: wrap; column-gap: var(--sp-24); }
.ft__legal { flex: none; display: flex; flex-direction: column; align-items: flex-end; }
.ft__privacy { padding: var(--sp-12) 0; font: var(--t-caption); letter-spacing: 0; color: var(--c-text-strong); }   /* 누르는 높이 46 */
.ft__privacy:hover { text-decoration: underline; text-underline-offset: .2em; }
.ft__copy { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); }


/* ==========================================================================
   12. 서브 — 판면 · 사진 자리 · 건축개요(1-1) · 소개글(1-2) · 지도(4-1) · 개요 묶음 · 소제목 줄 · 지도 자리 · 빈 상태
       시안 15:79 · 41:458 · 16:415 · SpecRow 11:30 · SectionHead 11:33 · MapBlock 11:78 · EmptyState 39:456
   ========================================================================== */
/* 정적 서브 본문 — 위 64 · 아래 120 · 좌우 160(시안 4-1 S1). 건축개요 · 소개글은 위 80 */
.sub-sec { padding: var(--sp-64) var(--yd-pad) var(--sp-120); }

/* 사진 자리 — bg/soft 위에 사진이 opacity 0→1 .3s(tail.php 2). 사진은 자리를 꽉 채운다 */
.ph { overflow: hidden; background: var(--c-bg-soft); }
.ph img { display: block; width: 100%; height: 100%; max-width: none; object-fit: cover; transition: opacity var(--dur-tile-in) ease-out; }
.ph img.is-loading { opacity: 0; }

/* 건축개요 · 소개글 — 대표 사진 1600×800(2:1) → 64 → 제목 칸(나머지 폭) | 개요 묶음 둘(420 · 간격 40) 또는 본문 880 · 간격 80 */
.about { display: flex; flex-direction: column; gap: var(--sp-64); padding-top: var(--sp-80); }
.about__photo { aspect-ratio: 2 / 1; }
.about__info { display: flex; align-items: flex-start; gap: var(--sp-80); }
.about__title { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-12); }
.about__title h3 { font: var(--t-project); letter-spacing: var(--ls-title); color: var(--c-text-strong); }
.about__title p { font: var(--t-body-l); letter-spacing: 0; color: var(--c-text-body); }
.about__specs { flex: none; display: flex; gap: var(--sp-40); width: 880px; max-width: 100%; }
.about__specs .spec { flex: 1; min-width: 0; }
.about__text { flex: none; width: 880px; max-width: 100%; font: var(--t-body-l); letter-spacing: 0; color: var(--c-text-body); word-break: keep-all; }
/* 원고가 아직 없는 자리 — 글자만 흐리게(text/muted). 원고를 넣으면 클래스를 뗀다 */
.about .is-todo { color: var(--c-text-muted); }

/* 지도(4-1) — 왼쪽 회사명 · 연락처 480 | 오른쪽 지도 1040×600 · 간격 80(1600 판면을 같은 비율로 나눈다) */
.contact { display: grid; grid-template-columns: minmax(0, 480fr) minmax(0, 1040fr); align-items: start; gap: var(--sp-80); }
.contact__info { display: flex; flex-direction: column; gap: var(--sp-40); }
.contact__name { display: flex; flex-direction: column; gap: var(--sp-8); }
.contact__name h3 { font: var(--t-project); letter-spacing: var(--ls-title); color: var(--c-text-strong); word-break: keep-all; }
.contact__name p { font: var(--t-label); letter-spacing: var(--ls-label); text-transform: uppercase; color: var(--c-text-muted); }

/* 개요 묶음 — 묶음 위 선 1px border/strong · 위 24 · 줄 간격 12. 줄마다 선은 없다.
   줄 = 항목명(caption · text/muted · 96 고정) + 값(body/s · text/strong) · 간격 24 */
.spec { display: flex; flex-direction: column; gap: var(--sp-12); padding-top: var(--sp-24); border-top: 1px solid var(--c-border-strong); }
.spec__row { display: flex; align-items: flex-start; gap: var(--sp-24); }
.spec dt { flex: none; width: 96px; font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); }
.spec dd { flex: 1; min-width: 0; margin: 0; font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-strong); overflow-wrap: anywhere; }

/* 소제목 줄 — 제목 heading/section · 오른쪽 보조 body/s text/body · 아래 16 + 선 1px border/default */
.sec-bar { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-24); padding-bottom: var(--sp-16); border-bottom: 1px solid var(--c-border-default); }
.sec-bar__title { flex: none; font: var(--t-heading); letter-spacing: 0; color: var(--c-text-strong); }
.sec-bar__aside { min-width: 0; font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-body); text-align: right; }

/* 지도 자리 — bg/soft + 핀 32(선 1px). 카카오 지도가 그려지면(.is-ready, tail.php 5) 무채색 — 고객 요청 */
.map-block { display: flex; align-items: center; justify-content: center; overflow: hidden; background: var(--c-bg-soft); color: var(--c-text-strong); }
.map-block .dm-i { stroke-width: 1px; }
/* 카카오 약도(sub0401) — 크기는 약도가 스스로 잡는다(폭 = 칸 폭 · 높이 = 시안 비율 − 안내 띠, sub0401 3). 지도 색은 카카오 기본 그대로(2026-10-19 사용자: 흑백 빼기) */
.map-block--rough { display: block; }
.map-block--rough .root_daum_roughmap { max-width: 100%; }

/* 빈 상태 — 글 없음(문구만) · 검색 결과 없음(+ 전체 목록) · 준비중(+ 메인으로). 위아래 120 · 문구 body/m text/body → 24 → Button Outline */
.empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--sp-24); padding: var(--sp-120) 0; text-align: center; }
.empty-state__msg { font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-body); }


/* ==========================================================================
   13. 게시판 공통 — 툴바(건수 · 검색) · 페이저 · 관리자 줄
   시안 BoardToolbar 13:116 · SearchBar 13:111 · Pager 11:56 (분류 칩은 템플릿 그대로 — 지금 분류 쓰는 게시판이 없다)
   ★ 스킨 폴더의 style.css 에 규칙을 두지 않는다. 여기 한 곳에서 게시판 전체를 맞춘다
   ========================================================================== */
/* 툴바 → 40 → 목록 → 40 → 페이저(위 24) */
.board { display: flex; flex-direction: column; gap: var(--sp-40); }
.board__toolbar, .board__top { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-24); }
.board__toolbar-right { display: flex; align-items: center; gap: var(--sp-24); margin-left: auto; }
.board__count { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); white-space: nowrap; }
.board__count strong { font-weight: inherit; }

/* 분류 칩 — TabPill. 높이 47 · padding 16/32 · pill · 기본 흰 면 + 선 1px(inside) · 선택 ink/900 면 + 흰 글자 */
.cat-tabs { display: flex; flex-wrap: wrap; gap: var(--sp-8); }
.cat-tab {
	display: inline-flex; align-items: center; height: 47px; padding: 0 var(--sp-32); border-radius: var(--radius-pill);
	box-shadow: inset 0 0 0 1px var(--line); background: var(--white);
	font-size: 15px; font-weight: 600; line-height: 1; letter-spacing: -0.2px; color: var(--text-2); white-space: nowrap;
	transition: box-shadow var(--dur-state) var(--ease-out), color var(--dur-state) var(--ease-out), background-color var(--dur-state) var(--ease-out);
}
.cat-tab:hover { box-shadow: inset 0 0 0 1px var(--ink); color: var(--ink); }
.cat-tab.active { box-shadow: none; background: var(--ink); color: var(--white); }

/* 검색 — 320×44 · 아래 선 1px border/strong(초점 text/strong) · 검색어 body/s · 오른쪽 검색 버튼 44(아이콘 20 · 선 1px).
   버튼을 오른쪽으로 12 내밀어 아이콘 끝을 선 끝에 맞추고, 아래로 1 내려 누르는 높이 44 를 지킨다(면이 없어 선은 그대로 보인다) */
.search-bar { flex: none; display: flex; align-items: center; width: 320px; max-width: 100%; height: 44px; border-bottom: 1px solid var(--c-border-strong); transition: border-color var(--dur-state) ease-out; }
.search-bar:focus-within { border-color: var(--c-text-strong); }
.search-bar__field { flex: 1; min-width: 0; display: flex; align-items: center; height: 100%; }
.search-bar__field input { width: 100%; height: 100%; padding: 0; border: 0; border-radius: 0; background: transparent; font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-strong); }
.search-bar__field input::placeholder { color: var(--c-text-muted); }
.search-bar__field input:focus { outline: none; }
.search-bar__submit { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; margin: 0 calc(var(--sp-12) * -1) -1px 0; padding: 0; border: 0; background: transparent; color: var(--c-text-strong); cursor: pointer; }
.search-bar__submit .dm-i { stroke-width: 1px; }

/* 고르기 칸 — 문의하기 폼(18절)이 쓴다 */
.select { position: relative; display: inline-flex; align-items: center; }
.select select {
	appearance: none; -webkit-appearance: none;
	height: 56px; padding: 0 var(--sp-48) 0 var(--sp-20); border: 1px solid var(--line); border-radius: 0; background: var(--white);
	font-family: var(--font); font-size: 16px; line-height: 28px; letter-spacing: -0.2px; color: var(--ink); cursor: pointer;
}
.select .dm-i { position: absolute; right: var(--sp-20); color: var(--text-3); pointer-events: none; }
.select--block { display: flex; }
.select--block select { width: 100%; }

/* 페이저 — 칸 44 · 간격 4 · 숫자 body/s text/muted(hover text/strong) · 현재 쪽 text/strong + 아래 2px brand/accent ·
   화살표 아이콘 20(선 1px). 그누보드 get_paging 출력에 맞춘다 */
.pager { display: flex; justify-content: center; padding-top: var(--sp-24); }
.pager:empty { display: none; }   /* 한 쪽뿐이면 get_paging() 이 빈 문자열을 준다 — 죽은 여백을 막는다 */
.pager .pg { display: flex; align-items: center; justify-content: center; gap: var(--sp-4); }
.pager .pg_page, .pager .pg_current, .pager a, .pager strong {
	display: inline-flex; align-items: center; justify-content: center;
	width: 44px; height: 44px; padding: 0;
	font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-muted);
	transition: color var(--dur-state) ease-out;
}
.pager a:hover { color: var(--c-text-strong); }
.pager strong, .pager .pg_current { color: var(--c-text-strong); box-shadow: inset 0 -2px 0 var(--c-brand-accent); }
.pager .dm-i { stroke-width: 1px; }

/* 관리자 버튼 줄 — ★ <form> 안이라 .board 의 gap 이 안 닿는다. 위 여백을 직접 준다 */
.board__admin { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-32); }


/* ==========================================================================
   14-0. 게시판 — PROJECT 목록 · 상세 (skin/board/gallery) — 시안 2-1 15:181 · 2-1-1 16:282
   목록 = 7절 바둑판(.tile-grid · dm_tile) 그대로 + 관리자 선택 체크박스
   ========================================================================== */
.tile { position: relative; min-width: 0; }
.tile__chk { position: absolute; left: var(--sp-12); top: var(--sp-12); z-index: 1; display: inline-flex; }
.tile__chk input { width: 20px; height: 20px; margin: 0; }

/* 상세 S1 — 사진 칸 1040 | 정보 칸 480 · 간격 80(1600 판면을 같은 비율로 나눈다). 사진은 원본 비율로 세로 나열(간격 16) */
.pj__main { display: grid; grid-template-columns: minmax(0, 1040fr) minmax(0, 480fr); align-items: start; gap: var(--sp-80); }
.pj__photos { display: flex; flex-direction: column; gap: var(--sp-16); }
.pj__photo img { height: auto; }
.pj__photo--empty { aspect-ratio: 1040 / 728; }
/* 정보 칸 — 화면 위 64 에 붙어 따라오고 사진 칸 끝에서 같이 올라간다(주석 16:327).
   제목 · 부제(12) → 40 → 설명 → 40 → 개요 묶음 둘 → 40 → 목록 */
.pj__info { position: sticky; top: var(--sp-64); display: flex; flex-direction: column; align-items: flex-start; gap: var(--sp-40); }
.pj__info .spec, .pj__desc { align-self: stretch; }
.pj__head { display: flex; flex-direction: column; gap: var(--sp-12); }
.pj__title { font: var(--t-project); letter-spacing: var(--ls-title); color: var(--c-text-strong); word-break: keep-all; }
.pj__sub { font: var(--t-body-l); letter-spacing: 0; color: var(--c-text-body); }
.pj__desc { font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-body); word-break: keep-all; overflow-wrap: anywhere; }
.pj__desc > * + * { margin-top: var(--sp-16); }
.pj__desc img { max-width: 100%; height: auto; }
.pj__info .board__admin { margin-top: 0; justify-content: flex-start; }
/* S2 건축물 위치 · S3 다른 프로젝트 — 위 120 · 소제목 줄 → 24 → 지도 560 / 소제목 줄 → 40 → 바둑판 4칸 → 40 → MORE */
.pj__sec { display: flex; flex-direction: column; gap: var(--sp-24); padding-top: var(--sp-120); }
.pj__sec .map-block { height: 560px; }
.pj__more { align-items: center; gap: var(--sp-40); }
.pj__more .sec-bar { align-self: stretch; }


/* ==========================================================================
   14. 게시판 — 목록 행 · 글보기
   목록 행(basic 목록)은 아직 템플릿 색이다. 글보기는 시안 색(아래 '글보기')
   ========================================================================== */
/* ListRow 115 — 행 전체가 링크다 */
.list-rows { display: flex; flex-direction: column; }
.list-row { display: flex; align-items: center; gap: var(--sp-16); border-bottom: 1px solid var(--line); }
.list-row__chk { flex: none; display: inline-flex; }
.list-row__chk input { width: 18px; height: 18px; margin: 0; }
.list-row__link { flex: 1; min-width: 0; display: flex; align-items: center; gap: var(--sp-24); padding: var(--sp-24) 0; color: var(--text-3); }
.list-row__left { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-12); }
.list-row__title-row { display: flex; align-items: center; gap: var(--sp-12); min-width: 0; }
.list-row__title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 17px; font-weight: 600; line-height: 24px; letter-spacing: -0.01em; color: var(--ink); transition: color var(--dur-state) var(--ease-out); }
.list-row__attach { flex: none; display: inline-flex; color: var(--text-3); }
.list-row__cmt { flex: none; font-size: 14px; font-weight: 600; color: var(--brand); }
.list-row__meta { display: flex; align-items: center; gap: var(--sp-12); font-size: 14px; line-height: 22px; letter-spacing: -0.01em; color: var(--text-3); }
.list-row__meta i { font-style: normal; }
.list-row__link:hover .list-row__title { color: var(--brand); }
.list-row__link > .dm-i { transition: transform var(--dur-state) var(--ease-out); }
.list-row__link:hover > .dm-i { transform: translateX(3px); color: var(--ink); }
.list-row.is-notice .list-row__title { color: var(--ink); }

/* 글보기 — 템플릿 basic 글보기 구조 그대로, 색만 시안 토큰(무채색 · 주황 글자 없음). news · basic · history · qa 글보기가 같이 쓴다 */
.view { display: flex; flex-direction: column; color: var(--c-text-body); }   /* body 글자색(2절)이 아직 템플릿 토큰이라 여기서 끊는다 */
.view__head { display: flex; flex-direction: column; gap: var(--sp-16); padding-bottom: var(--sp-32); border-bottom: 1px solid var(--c-border-strong); }
.view__title { font-size: 36px; font-weight: 700; line-height: 48px; letter-spacing: -0.015em; color: var(--c-text-strong); word-break: keep-all; }
.view__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-16); font-size: 15px; line-height: 26px; letter-spacing: -0.01em; color: var(--c-text-muted); }
.view__meta i { font-style: normal; }
.view__body { padding: var(--sp-48) 0; font-size: 16px; line-height: 27px; letter-spacing: -0.01em; color: var(--c-text-body); }
.view__body img { max-width: 100%; height: auto; }
.view__body #bo_v_img, .view__body > a img { display: block; margin-bottom: var(--sp-24); }
#bo_v_con { min-height: 120px; word-break: keep-all; overflow-wrap: anywhere; }
#bo_v_con > * + * { margin-top: var(--sp-24); }
#bo_v_con a { color: var(--c-text-strong); text-decoration: underline; text-underline-offset: 3px; }
#bo_v_con strong, #bo_v_con b { color: var(--c-text-strong); }
.view__link { margin-top: var(--sp-16); font-size: 15px; }
.view__link a { color: var(--c-text-strong); text-decoration: underline; text-underline-offset: 3px; }

/* 첨부 줄 — 면 bg/soft · 위아래 선. 크기 글자는 text/body(bg/soft 위 text/muted 는 4.1:1 이라 쓰지 않는다) */
.view__files { display: flex; flex-direction: column; }
.file-row { display: flex; align-items: center; gap: var(--sp-16); padding: var(--sp-24); border-top: 1px solid var(--c-border-default); border-bottom: 1px solid var(--c-border-default); background: var(--c-bg-soft); color: var(--c-text-strong); }
.file-row + .file-row { border-top: 0; }
.file-row strong { font-size: 15px; font-weight: 600; line-height: 21px; letter-spacing: -0.01em; }
.file-row__size { flex: 1; font-size: 15px; line-height: 26px; color: var(--c-text-body); }
.file-row:hover strong { color: var(--c-text-strong); text-decoration: underline; text-underline-offset: 3px; }

/* 이전글 · 다음글 — 제목 text/body, hover 는 글자 text/strong(시안 메뉴 · 페이저와 같은 방식) */
.post-nav { display: flex; flex-direction: column; padding-top: var(--sp-48); }
.post-nav__row { display: flex; align-items: center; gap: var(--sp-16); padding: var(--sp-24) 0; border-bottom: 1px solid var(--c-border-default); color: var(--c-text-body); }
.post-nav__row:first-child { border-top: 1px solid var(--c-border-default); }
.post-nav__lab { flex: none; width: 96px; font-size: 15px; font-weight: 600; line-height: 21px; color: var(--c-text-muted); }
.post-nav__tit { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; line-height: 27px; letter-spacing: -0.01em; transition: color var(--dur-state) var(--ease-out); }
.post-nav__row:hover .post-nav__tit { color: var(--c-text-strong); }
.view__foot { display: flex; justify-content: center; padding-top: var(--sp-48); }
.board__admin--view { justify-content: center; }
.kv--inquiry { margin-bottom: var(--sp-40); border-bottom: 1px solid var(--c-border-default); }

/* 연혁 — 관리자에게만 보이는 줄 체크박스(선택삭제 · 복사 · 이동용) */
.history__chk { flex: none; display: inline-flex; align-items: center; height: 26px; }
.history__chk input { width: 18px; height: 18px; margin: 0; cursor: pointer; }


/* ==========================================================================
   14-1. 게시판 — NEWS 목록 (skin/board/news) — 시안 3-1 42:602 · NewsCard 39:442
   바둑판 · 사진 자리 · 로딩 페이드 · hover · 관리자 체크박스는 7 · 14-0절(.tile-grid · .tile · .tile__photo · .tile__chk) 그대로.
   여기는 NewsCard 만의 것 — 사진 4:3 → 16 → 제목 body/m text/strong 2줄 말줄임 → 8 → 날짜 caption text/muted, 왼쪽 정렬
   ========================================================================== */
.news-card a { gap: var(--sp-16); }
.news-card .tile__photo { aspect-ratio: 4 / 3; }
.news-card__text { display: flex; flex-direction: column; gap: var(--sp-8); }
.news-card__title { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-strong); overflow-wrap: anywhere; }
.news-card__date { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-muted); }



/* ==========================================================================
   15. 게시판 — 표 목록(1:1 문의) · 연혁 · 정책 · 1:1 문의
   아래는 비지니스(temp14) 판형에서 살려 둔 규칙이다. 토큰 이름만 이 판형으로 바꿨다.
   ========================================================================== */
/* 표 목록 — 1:1 문의 스킨(theme/skin/qa/basic)이 쓴다. 게시판 목록은 14절 목록 행이다 */
.board-table { width: 100%; border-top: 2px solid var(--ink); }
.board-table th, .board-table td { height: 88px; padding: 0 var(--sp-12); border-bottom: 1px solid var(--line); font-size: 16px; line-height: 1.45; text-align: left; vertical-align: middle; }
.board-table thead th { font-weight: 400; color: var(--text-2); white-space: nowrap; }
.board-table tbody td { color: var(--text-2); }
.board-table .col-num  { width: 88px;  padding-left: var(--sp-24); }
.board-table .col-cate { width: 112px; }
.board-table .col-date { width: 154px; }
.board-table .col-hit  { width: 104px; padding-right: var(--sp-24); }
.board-table .col-subj { width: auto; }
.board-table td.col-subj { font-weight: 500; color: var(--ink); }
.board-table td.col-subj a { display: inline-flex; align-items: center; gap: var(--sp-8); transition: color var(--dur-state) var(--ease-out); }
.board-table tbody tr { transition: background-color var(--dur-state) var(--ease-out); }
.board-table tbody tr:hover { background: var(--paper); }
.board-table tbody tr:hover td.col-subj a { color: var(--brand); }
/* 공지 행 — 종이 면으로 눕힌다. 번호 자리에 '공지' */
.board-table tr.is-notice { background: var(--paper); }
.board-table tr.is-notice td.col-num { font-weight: 500; color: var(--ink); }
.board-table .chk { display: inline-flex; align-items: center; }
.board-table .chk input { width: 18px; height: 18px; margin: 0; }
.board-table .board-icons { display: inline-flex; gap: var(--sp-4); vertical-align: middle; }

/* ==========================================================================
   15-1. 게시판 — 연혁 타임라인 (skin/board/history)
   글 한 건 = 한 줄. 제목 칸에 연도, 여분필드 1 에 월을 적는다
   ========================================================================== */
.history { border-top: 2px solid var(--ink); }
.history__group { display: flex; align-items: flex-start; gap: var(--sp-80); padding: var(--sp-48) var(--sp-24); border-bottom: 1px solid var(--line); }
.history__year { flex: none; width: 200px; font-size: 40px; font-weight: 700; line-height: 1.2; letter-spacing: -0.03em; color: var(--ink); }
.history__items { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: var(--sp-20); }
.history__row { display: flex; align-items: flex-start; gap: var(--sp-24); }
.history__mon { flex: none; width: 44px; padding-top: 3px; font-size: 14px; font-weight: 600; line-height: 1.45; letter-spacing: .04em; color: var(--brand); }
.history__text { flex: 1; min-width: 0; font-size: 18px; font-weight: 400; line-height: 1.55; color: var(--text-2); }
.history__text p { margin: 0; }
.history__edit { flex: none; font-size: 13px; color: var(--text-3); text-decoration: underline; text-underline-offset: 3px; }
.history__edit:hover { color: var(--ink); }

/* 글쓰기 안내 줄 — 연혁처럼 칸의 쓰임이 정해진 게시판에 둔다 */
.bo_w_help { margin-bottom: var(--sp-8); padding: var(--sp-16) var(--sp-20); background: var(--paper); font-size: 15px; line-height: 1.6; color: var(--text-2); }
.bo_w_help strong { color: var(--ink); font-weight: 600; }


/* ==========================================================================
   15-2. 정책 페이지 — 개인정보처리방침 · 이용약관
   이 설치본에는 bbs/privacy.php · bbs/provision.php 가 없어 정적 페이지로 만들었다
   ========================================================================== */
/* ★ 이 요소는 .dm-inner 이기도 하다(`class="dm-inner policy"`). .dm-inner 의 `margin: 0 auto` 가
   살아 있어서 폭만 좁히면 글이 화면 가운데로 몰린다 — 왼쪽 기준선에 세우려면 마진을 다시 적는다 */
.policy { display: flex; flex-direction: column; gap: var(--sp-40); max-width: 1120px; margin-left: 0; margin-right: auto; }
.policy__lead { padding-bottom: var(--sp-32); border-bottom: 2px solid var(--ink); font-size: 20px; font-weight: 500; line-height: 1.55; color: var(--ink); }
.policy__item { display: flex; flex-direction: column; gap: var(--sp-12); }
.policy__title { font-size: 20px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
.policy__body { font-size: 17px; font-weight: 400; line-height: 1.75; color: var(--text-2); }
.policy__date { padding-top: var(--sp-24); border-top: 1px solid var(--line); font-size: 14px; font-weight: 500; color: var(--text-3); }


/* ==========================================================================
   15-3. 1:1 문의 (theme/skin/qa/basic)
   ★ 이 스킨은 테마 안에 있다(그누보드는 테마 스킨을 루트 스킨보다 먼저 쓴다).
     2026-09-23 까지 이 폴더에 16KB 짜리 style.css 가 남아 있어 테마 CSS 를 덮고 있었다 — 지웠다.
     마크업은 게시판 스킨과 같다(.board · .board-table · .view · #bo_w).
     여기는 문의에만 있는 것 — 글쓴이 · 상태 칸, 답변 블록, 답변 대기 안내, 폼의 '답변받기' 체크
   ========================================================================== */
.board-table .col-name { width: 140px; }
.board-table .col-stat { width: 140px; padding-right: var(--sp-24); white-space: nowrap; }
.qa-stat { font-size: 14px; font-weight: 500; line-height: 1.45; color: var(--text-3); }
.qa-stat.is-done { font-weight: 600; color: var(--brand); }
.board-table td.col-subj .view__cate { margin-right: var(--sp-8); }

/* 답변 — 질문 본문 아래 종이 면 한 덩어리 */
.qa-answer { display: flex; flex-direction: column; gap: var(--sp-24); padding: var(--sp-40); background: var(--paper); }
.qa-answer__head { display: flex; flex-direction: column; gap: var(--sp-8); }
.qa-answer__label { font-size: 14px; font-weight: 600; line-height: 1.45; letter-spacing: .04em; color: var(--brand); }
.qa-answer__title { font-size: 24px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
.qa-answer__date { font-size: 14px; font-weight: 500; line-height: 1.45; color: var(--text-3); }
.qa-answer__body { font-size: 18px; line-height: 1.75; color: var(--text-2); }
.qa-answer__body img { max-width: 100%; height: auto; }
.qa-answer__act { display: flex; flex-wrap: wrap; gap: var(--sp-8); }

/* 답변 대기 안내 — 회원에게 보인다 */
.qa-wait { padding: var(--sp-32) var(--sp-40); background: var(--paper); font-size: 16px; line-height: 1.6; color: var(--text-2); }
.qa-wait strong { display: block; margin-bottom: var(--sp-8); font-size: 14px; font-weight: 600; letter-spacing: .04em; color: var(--brand); }

/* 관리자 답변 폼 — 글보기 안에서 #bo_w(16절)를 그대로 쓴다 */
.qa-answer-form { padding-top: var(--sp-40); border-top: 1px solid var(--line); }
.qa-answer-form > h2 { font-size: 20px; font-weight: 600; line-height: 1.45; color: var(--ink); }

/* 연관 문의 */
.qa-rel { display: flex; flex-direction: column; gap: var(--sp-16); }
.qa-rel__title { font-size: 20px; font-weight: 600; line-height: 1.45; color: var(--ink); }

/* 글쓰기 — 이메일 · 휴대폰 옆의 '답변받기' 체크. 라벨이 block 이면 줄이 갈라진다 */
#bo_w label.chk_box { display: inline-flex; align-items: center; gap: 6px; margin: 0; font-size: 15px; font-weight: 400; color: var(--text-2); cursor: pointer; }
#bo_w label.chk_box input[type="checkbox"] { width: 18px; height: 18px; margin: 0; }


/* ==========================================================================
   16. 글쓰기 폼
   ★ 스킨 style.css 를 두지 않으므로 여기서 전부 잡는다.
     목록·글보기는 멀쩡한데 글쓰기만 무너지는 자리다 —
     임시저장 팝업 · 옵션 줄 · .lb_icon · .frm_file · .file_del 다섯을 같이 가져온다
   ========================================================================== */
/* ★ 칸을 세로로 쌓는 것은 #bo_w 가 아니라 그 안의 <form> 이다 — #bo_w 에만 flex · gap 을 걸면 칸이 서로 붙는다 */
#bo_w form { display: flex; flex-direction: column; gap: var(--sp-20); }
#bo_w .write_div { margin: 0; }
#bo_w .bo_w_tit { margin: 0; }
#bo_w label:not(.sound_only) { display: block; margin-bottom: var(--sp-8); font-size: 15px; font-weight: 600; color: var(--ink); }
#bo_w label span { font-weight: 400; font-size: 14px; color: var(--text-3); }
#bo_w input[type="text"], #bo_w input[type="password"], #bo_w input[type="email"],
#bo_w input[type="tel"], #bo_w input[type="number"], #bo_w select, #bo_w textarea {
	width: 100%; height: 56px; padding: 0 var(--sp-16);
	border: 1px solid var(--line); border-radius: var(--radius); background: transparent;
	font-family: var(--font); font-size: 16px; line-height: 1.6; color: var(--ink);
}
#bo_w textarea { height: auto; min-height: 180px; padding: var(--sp-16); line-height: 1.7; resize: vertical; }
#bo_w input::placeholder, #bo_w textarea::placeholder { color: var(--text-3); }
#bo_w input:focus, #bo_w select:focus, #bo_w textarea:focus { border-color: var(--ink); outline: none; }
/* 그누보드 기본 별표 이미지는 입력칸 안에서 걷어낸다 */
#bo_w .required, #bo_w textarea.required { background-image: none !important; }
/* ★ :not(.sound_only) 을 빼면 안 된다 — 숨긴 라벨 안의 「필수」가 입력칸 위로 튀어나온다 */
#bo_w label:not(.sound_only) strong { display: inline-block; margin-left: var(--sp-4); padding: 2px 6px; background: var(--paper); color: var(--brand); font-size: 12px; font-weight: 600; vertical-align: 2px; }
#bo_w .bo_w_info { display: flex; flex-wrap: wrap; gap: var(--sp-12); align-items: center; }
#bo_w .bo_w_info input { flex: 1; min-width: 200px; }
/* PROJECT 글쓰기 개요 칸(skin/board/gallery) — 두 열. 안내 줄 · 부제 · 주소는 한 줄 전체 */
#bo_w .bo_w_spec { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-16) var(--sp-24); }
#bo_w .bo_w_spec .bo_w_help, #bo_w .bo_w_spec__item.is-wide { grid-column: 1 / -1; }

/* 옵션 줄 — 라벨이 block 이면 체크박스와 따로 놀아 한 줄에 하나씩 떨어진다 */
#bo_w .bo_w_option { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-8); padding: var(--sp-12) var(--sp-16); border: 1px solid var(--line); background: var(--paper); }
#bo_w .bo_w_option input[type="checkbox"] { width: 18px; height: 18px; margin: 0; }
#bo_w .bo_w_option label + input[type="checkbox"] { margin-left: var(--sp-16); }
#bo_w .bo_w_option label:not(.sound_only) { display: inline-block; margin: 0; font-weight: 500; font-size: 15px; cursor: pointer; }
#bo_w .chk_box { display: inline-flex; align-items: center; gap: 6px; font-size: 15px; color: var(--text-2); }
#bo_w .chk_box input { width: auto; height: auto; }

/* 임시 저장 — 팝업은 스킨 style.css 가 숨겨 주던 것이라 여기서 다시 숨긴다.
   안 하면 목록이 펼쳐진 채로 남는다 */
#bo_w #autosave_wrapper { position: relative; }
#bo_w #autosave_wrapper .frm_input { padding-right: 150px; }
#bo_w #btn_autosave { box-sizing: border-box; height: 36px; padding: 0 var(--sp-12); border: 1px solid var(--line); border-radius: var(--radius); background: transparent; color: var(--text-3); font-size: 14px; line-height: 34px; cursor: pointer; }
#bo_w #autosave_wrapper #btn_autosave { position: absolute; right: 8px; top: 50%; transform: translateY(-50%); }
#bo_w #btn_autosave:hover { border-color: var(--ink); color: var(--ink); }
#bo_w #autosave_pop { display: none; position: absolute; z-index: 20; right: 0; top: calc(100% + 8px); width: 360px; max-height: 260px; padding: var(--sp-8); border: 1px solid var(--line); background: var(--white); }
#bo_w #autosave_pop strong { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
#bo_w #autosave_pop ul { max-height: 180px; margin: 0; padding: 0; overflow-y: auto; }
#bo_w #autosave_pop li { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-8); padding: 10px 12px; border-bottom: 1px solid var(--line); font-size: 14px; }
#bo_w #autosave_pop li:last-child { border-bottom: 0; }
#bo_w #autosave_pop a { color: var(--ink); }
#bo_w #autosave_pop span { color: var(--text-3); font-size: 14px; }
#bo_w .autosave_close { width: 100%; height: 36px; border: 0; border-top: 1px solid var(--line); background: none; color: var(--text-3); font-size: 14px; cursor: pointer; }
#bo_w .autosave_close:hover { color: var(--ink); }
#bo_w .autosave_content { display: none; }
#bo_w .autosave_del { width: 24px; height: 24px; border: 0; background: none; color: var(--text-3); font-size: 0; cursor: pointer; }
#bo_w .autosave_del::before { content: "\00d7"; font-size: 18px; line-height: 24px; }

/* 본문 에디터 — 폭을 폼에 맞춘다. 안쪽 iframe 배경은 건드리지 않는다 */
#bo_w .wr_content { width: 100%; }
#bo_w .wr_content > div, #bo_w .wr_content table { max-width: 100% !important; }
#bo_w .cke_sc, #bo_w #char_count_wrap { font-size: 14px; color: var(--text-3); }
#bo_w .btn_cke_sc { height: 32px; padding: 0 10px; border: 1px solid var(--line); background: transparent; color: var(--text-3); font-size: 14px; cursor: pointer; }

/* 링크 · 파일첨부 — 그누보드 기본 모양이다. 아이콘 칩이 칸 왼쪽 안에 붙고 한 줄에 하나 */
#bo_w .bo_w_link, #bo_w .bo_w_flie { position: relative; }
#bo_w .bo_w_link label, #bo_w .bo_w_flie .lb_icon {
	position: absolute; left: 1px; top: 1px; z-index: 1;
	display: flex; align-items: center; justify-content: center;
	width: 46px; height: 54px; margin: 0;
	border-right: 1px solid var(--line); background: var(--paper); color: var(--text-3); font-size: 15px;
}
#bo_w .bo_w_link .frm_input { padding-left: 62px; }
#bo_w .bo_w_flie .file_wr { position: relative; height: 56px; border: 1px solid var(--line); background: transparent; }
#bo_w .bo_w_flie .frm_file { display: block; width: 100%; height: 54px; padding: 15px var(--sp-16) 15px 62px; border: 0; background: none; font-size: 14px; color: var(--text-2); cursor: pointer; }
#bo_w .bo_w_flie .frm_input { height: 56px; margin-top: var(--sp-8); font-size: 14px; }
#bo_w .file_del { display: flex; align-items: center; gap: 6px; margin-top: var(--sp-8); font-size: 14px; color: var(--text-3); }
#bo_w .file_del input[type="checkbox"] { width: 16px; height: 16px; margin: 0; }
#bo_w .file_del label:not(.sound_only) { display: inline; margin: 0; font-size: 14px; font-weight: 400; color: var(--text-3); cursor: pointer; }

#bo_w .btn_confirm { margin-top: var(--sp-20); }
#bo_w .btn_confirm .btn_submit, #bo_w .btn_confirm .btn_cancel {
	display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box;
	height: 56px; padding: 0 var(--sp-40); border-radius: var(--radius); font-size: 16px; line-height: normal;
}
#bo_w .btn_confirm .btn_submit { border: 1px solid var(--ink); font-weight: 600; }
#bo_w .btn_confirm .btn_cancel { font-weight: 400; }


/* ==========================================================================
   17. 회원 · 컨텐츠 · 검색 · FAQ
   디자인이 없는 화면이다. 톤만 이 판형에 맞춘다
   ★ 회원 스킨은 테마가 아니라 루트 skin/member/basic/ 을 쓴다.
     그 style.css 가 테마 CSS 뒤에 실려서 그냥 쓰면 진다 —
     `#container` 를 앞에 붙여 특이도를 한 단계 올린다
   ========================================================================== */
#container .mbskin, .mbskin {
	width: auto; max-width: 480px; margin: 0 auto; padding: 0;
	border: 0; border-radius: 0; background: none; box-shadow: none; text-align: left;
}
/* ★ 상자만 지워도 그림자가 남는다 — 루트 스킨이 `.mbskin:before/:after` 에
   `box-shadow: 0 0 20px rgba(0,0,0,.8)` + `skew·rotate` 로 종이 말린 효과를 걸어 두었다.
   요소 자체에는 그림자가 없어서 개발자도구로 `.mbskin` 만 보면 안 보인다 */
#container .mbskin::before, #container .mbskin::after,
.mbskin::before, .mbskin::after { display: none; content: none; box-shadow: none; }
#container .mbskin #login_fs { padding: 0; border: 0; }
/* 화면 제목은 Page title 에 이미 크게 있다 — 읽어 주는 데는 남기고 눈에서만 뺀다 */
.mbskin > h1, .mbskin > h2 { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.mbskin input[type="text"], .mbskin input[type="password"], .mbskin input[type="email"], .mbskin select {
	width: 100%; height: 56px; padding: 0 var(--sp-16); margin-bottom: var(--sp-12);
	border: 1px solid var(--line); border-radius: var(--radius); background: transparent;
	font-family: var(--font); font-size: 16px; color: var(--ink);
}
.mbskin input:focus, .mbskin select:focus { border-color: var(--ink); outline: none; }
/* ★ 스킨의 `.mbskin .btn_submit{height:45px;font-weight:bold;font-size:1.25em}` 과 특이도가 같다.
   우리가 안 적은 값은 그대로 살아남으므로 높이·글자까지 여기서 다 적는다 */
.mbskin .btn_submit { width: 100%; height: 56px; margin: var(--sp-8) 0 0; font-size: 16px; font-weight: 600; }
#reg_result .btn_submit { height: 56px; margin-top: var(--sp-32); padding: 0 var(--sp-40); font-size: 16px; font-weight: 600; line-height: normal; }
.mbskin .btn_confirm { margin-top: var(--sp-8); }
.mbskin #login_info, .mbskin .mb_login_etc { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--sp-8) var(--sp-20); margin-top: var(--sp-24); padding-top: var(--sp-24); border-top: 1px solid var(--line); font-size: 15px; white-space: nowrap; }
.mbskin #login_info > div, .mbskin .mb_login_etc > div { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--sp-8) var(--sp-20); width: 100%; }
.mbskin #login_info a, .mbskin .mb_login_etc a { float: none; width: auto; white-space: nowrap; color: var(--text-3); }
.mbskin #login_info a:hover, .mbskin .mb_login_etc a:hover { color: var(--ink); }
/* ★ 루트 스킨의 `#mb_login #login_info a{width:50%;float:left}` 는 id 가 둘이라
   `.mbskin #login_info a`(id 하나) 로는 못 이긴다 */
#container .mbskin #login_info { padding: var(--sp-24) 0 0; background: none; border-top: 1px solid var(--line); }
#container .mbskin #login_info a { float: none; width: auto; }
#container .mbskin #login_password_lost { padding-right: var(--sp-20); border-right: 1px solid var(--line); }
/* 새창 — 아이디·비밀번호 찾기(`#find_info.new_win`). 헤더·푸터 없이 뜨는 창이라
   ★ 여기에 규칙이 하나도 없으면 글자가 창 왼쪽 끝에 붙는다 */
.new_win { max-width: 560px; margin: 0 auto; padding: var(--sp-48) var(--sp-32) var(--sp-40); }
.new_win h1, .new_win h2 { margin-bottom: var(--sp-24); font-size: 24px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
.new_win p { margin-bottom: var(--sp-20); font-size: 16px; line-height: 1.7; color: var(--text-2); }
.new_win fieldset { margin-bottom: var(--sp-20); }
.new_win input[type="text"], .new_win input[type="password"], .new_win input[type="email"] {
	width: 100%; height: 56px; padding: 0 var(--sp-16);
	border: 1px solid var(--line); border-radius: var(--radius); background: transparent;
	font-family: var(--font); font-size: 16px; color: var(--ink);
}
.new_win input:focus { border-color: var(--ink); outline: none; }
.new_win .btn_submit { width: 100%; height: 56px; margin-top: var(--sp-24); font-size: 16px; font-weight: 600; }
.new_win .btn_close { width: 100%; height: 56px; margin-top: var(--sp-8); }
#find_info #mb_email { margin: 0; }
#find_info #captcha #captcha_key { width: 160px; }
.mbskin #auto_login { display: flex; align-items: center; justify-content: center; gap: 6px; margin-top: var(--sp-16); font-size: 15px; color: var(--text-2); }
.mbskin #auto_login input { width: auto; height: auto; margin: 0; }

/* 회원가입 약관 동의 — 이 화면은 `.mbskin` 이 아니다(`#fregister` 안에 section 두 개).
   ★ 루트 스킨이 분홍 안내 상자 · 회색 제목 띠 · 남보라 표 머리를 박아 두었다 — 끄는 것부터 적는다 */
#fregister { max-width: 720px; margin: 0 auto; }
#fregister > p { margin: 0 0 var(--sp-32); padding: 0; border: 0; background: none; text-align: left; font-size: 16px; line-height: 1.7; color: var(--text-2); }
#fregister_chkall { display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-8); margin-bottom: var(--sp-24); font-size: 15px; color: var(--ink); }
#fregister_chkall label { order: 2; cursor: pointer; }
#fregister_chkall input { order: 1; width: 18px; height: 18px; margin: 0; }
#fregister section { position: static; margin: 0 0 var(--sp-56); padding: 0; border: 0; border-radius: 0; background: none; }
#fregister h2 { margin: 0 0 var(--sp-24); padding: 0 0 var(--sp-16); background: none; border-bottom: 1px solid var(--line); text-align: left; font-size: 20px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
#fregister h2 i { display: none; }
#fregister textarea { display: block; width: 100%; height: 200px; padding: var(--sp-20); resize: vertical; border: 1px solid var(--line); border-radius: var(--radius); background: transparent; font-family: var(--font); font-size: 15px; line-height: 1.75; color: var(--text-2); }
#fregister_private div { padding: 0; background: none; }
#fregister_private table { width: 100%; border-collapse: collapse; border-top: 2px solid var(--ink); }
#fregister_private table caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
#fregister_private table th, #fregister_private table td { padding: var(--sp-16); border: 0; border-bottom: 1px solid var(--line); font-size: 15px; line-height: 1.7; text-align: left; background: none; }
#fregister_private table th { width: 33.33%; font-weight: 600; color: var(--ink); }
#fregister_private table td { color: var(--text-2); }
#fregister .fregister_agree { position: static; display: flex; align-items: center; justify-content: flex-end; gap: var(--sp-8); margin-top: var(--sp-16); padding: 0; font-size: 15px; color: var(--text-2); }
#fregister .fregister_agree label { order: 2; cursor: pointer; }
#fregister .fregister_agree input { order: 1; width: 18px; height: 18px; margin: 0; }
#fregister .btn_confirm { display: flex; justify-content: center; margin-top: var(--sp-40); }
#fregister .btn_confirm .btn_submit,
#fregisterform .btn_confirm .btn_submit { height: 56px; padding: 0 var(--sp-40); font-size: 16px; font-weight: 600; }
#fregisterform .btn_confirm .btn_cancel { height: 56px; padding: 0 var(--sp-32); font-size: 16px; font-weight: 400; line-height: normal; }

/* 회원가입 폼 — ★ 이 화면만 `.mbskin` 이 아니라 `#register_form.form_01` 이라
   위의 회원 스킨 규칙이 하나도 안 걸려 그누보드 기본 모양 그대로 나온다 */
#register_form { max-width: 640px; margin: 0 auto; padding: 0; background: none; }
#fregisterform .form_01 div, #register_form > div { margin: 0 0 var(--sp-56); }
#register_form > div:last-child { margin-bottom: 0; }
#register_form h2 { margin-bottom: var(--sp-24); padding-bottom: var(--sp-16); border-bottom: 1px solid var(--line); font-size: 20px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
#register_form ul { display: flex; flex-direction: column; gap: var(--sp-16); }
#register_form li { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-8) var(--sp-12); font-size: 15px; line-height: 1.6; color: var(--text-2); }
#register_form a { color: var(--ink); text-decoration: underline; text-underline-offset: 3px; }
#register_form li:empty { display: none; }
#register_form input[type="text"], #register_form input[type="password"], #register_form input[type="email"] {
	flex: 1 1 220px; width: auto; min-width: 0; height: 56px; margin: 0; padding: 0 var(--sp-16);
	border: 1px solid var(--line); border-radius: var(--radius); background: transparent;
	font-family: var(--font); font-size: 16px; color: var(--ink);
}
#register_form input.full_input { flex-basis: 100%; }
#register_form input:focus { border-color: var(--ink); outline: none; }
#register_form input::placeholder { color: var(--text-3); }
#fregisterform .frm_info, #register_form .frm_info { flex-basis: 100%; margin: 0; font-size: 14px; line-height: 1.6; color: var(--text-3); }
#register_form .frm_label { min-width: 84px; margin: 0; font-size: 15px; font-weight: 600; color: var(--ink); }
#register_form input[type="checkbox"] { width: 18px; height: 18px; margin: 0; }
#register_form #msg_mb_id, #register_form #msg_mb_nick { flex-basis: 100%; font-size: 14px; color: var(--text-3); }
#register_form .btn_confirm { justify-content: center; margin-top: var(--sp-40); }
#register_form .is_captcha_use { flex-wrap: wrap; }
#register_form #captcha, #fregisterform .captcha { flex-basis: 100%; margin: var(--sp-8) 0 0; }

#ctt, #ctt_con { font-size: 18px; line-height: 1.75; color: var(--text-2); }
#ctt h1, #ctt_con h1 { margin-bottom: var(--sp-24); font-size: 40px; font-weight: 700; line-height: 1.45; letter-spacing: -0.03em; color: var(--ink); }
#sch_res h2, #faq_wrap h2, #new_wrap h2, #ctt h2 { margin-bottom: var(--sp-24); font-size: 24px; font-weight: 600; line-height: 1.45; letter-spacing: -0.02em; color: var(--ink); }
#sch_res .sch_res_ul li { padding: var(--sp-20) 0; border-bottom: 1px solid var(--line); }
#faq_wrap .faq_ul li { border-bottom: 1px solid var(--line); }
#faq_wrap .faq_ul a { display: block; padding: var(--sp-20) 0; font-size: 18px; color: var(--ink); }


/* ==========================================================================
   18. 온라인 문의 폼 (skin/board/inquiry) — 시안 4-2 41:526 · FormField 40:488 · Captcha 39:468 · AgreeCheck 39:467 · Button 10:94
       판면은 게시판과 같다(#container.dm-wrap 위 64 · 좌우 160 · 아래 120 = 시안 S1).
       왼쪽 정보 480 | 폼 1040 · 간격 80 — 1600 판면을 같은 비율로 나눈다(4-1 지도와 같다). 왼쪽 칸은 12절 .contact__info · .contact__name · .spec 그대로.
       폼 = 칸 사이 32 · 칸 안 라벨 → 8 → 상자 → 8 → 에러 줄. 상자 높이 54(위아래 12 + body/m 28 + 테두리 2) · 문의 내용 160
       ★ 상자 면 color/bg/default(#fff)는 1절에 토큰이 없다 — 값이 같은 --c-text-on-brand 로 맞췄다
       ★ 에러는 주황 글자 · 빨강 없이 — 테두리 brand/accent + 주황 선 아이콘 + 문구 text/strong(FormField State=Error)
   ========================================================================== */
.inq { display: grid; grid-template-columns: minmax(0, 480fr) minmax(0, 1040fr); align-items: start; gap: var(--sp-80); }
.inq .dm-i { stroke-width: 1px; }   /* 시안 아이콘은 Lucide 렌더 1px. .dm-i 기본은 템플릿 1.5 */
.inq__form { display: flex; flex-direction: column; gap: var(--sp-32); min-width: 0; }
.inq__row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-24); }

/* 칸 — 라벨 body/s text/strong(필수 * 도 무채색 · 간격 4) · 상자 테두리 border/strong(초점 text/strong) · 글자 body/m(안내 text/muted) */
.fld { display: flex; flex-direction: column; align-items: flex-start; gap: var(--sp-8); min-width: 0; }
.fld__label { display: flex; gap: var(--sp-4); font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-strong); }
.fld__box {
	display: block; width: 100%; margin: 0; padding: var(--sp-12) var(--sp-16);
	border: 1px solid var(--c-border-strong); border-radius: 0; background: var(--c-bg-default);
	font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-strong);
	transition: border-color var(--dur-state) ease-out;
}
textarea.fld__box { height: var(--sp-160); min-height: var(--sp-160); resize: vertical; }
.fld__box::placeholder { color: var(--c-text-muted); opacity: 1; }
.fld__box:focus { outline: none; border-color: var(--c-text-strong); }
.fld__box[readonly] { background: var(--c-bg-paper); color: var(--c-text-body); }

/* 에러 줄 — circle-alert 20(주황 선) + 문구 caption text/strong · 간격 8. 보내기를 누르면 스킨 JS 가 .is-error 를 붙인다 */
.fld__error { display: none; align-items: center; gap: var(--sp-8); font: var(--t-caption); letter-spacing: 0; color: var(--c-text-strong); }
.fld__error .dm-i { color: var(--c-brand-accent); }
.fld.is-error > .fld__error { display: flex; }
.fld.is-error .fld__box, .fld.is-error .fld__box:focus { border-color: var(--c-brand-accent); }

/* 자동등록방지 — 그누보드 kcaptcha 코어 마크업 그대로. 2절 #captcha 기본값을 이 칸에서만 덮는다.
   이미지 160(테두리 border/default) → 듣기 → 새로고침(54 정사각 · 아이콘 20) → 입력 160 · 간격 8 · 높이 54.
   코어 순서(이미지 · 입력 · 듣기 · 새로고침)를 order 로 바꾼다. 버튼 글자는 sound_only(스킨 JS), 안내 문구는 화면에서만 숨긴다.
   모바일 기기(is_mobile)는 코어가 듣기 버튼 대신 <audio controls> 를 넣는다 — 칸 아래 한 줄 전체 */
.inq__captcha #captcha { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; align-self: stretch; gap: var(--sp-8); min-width: 0; margin: 0; }
.inq__captcha #captcha #captcha_img { order: 1; flex: none; width: var(--sp-160); height: 54px; border: 1px solid var(--c-border-default); background: var(--c-bg-default); object-fit: contain; }
.inq__captcha #captcha #captcha_mp3 { order: 2; }
.inq__captcha #captcha #captcha_reload { order: 3; }
.inq__captcha #captcha #captcha_mp3, .inq__captcha #captcha #captcha_reload {
	flex: none; display: inline-flex; align-items: center; justify-content: center;
	width: auto; height: auto; padding: 0 var(--sp-16); border: 1px solid var(--c-border-strong); border-radius: 0;
	background: transparent; color: var(--c-text-strong); cursor: pointer;
	transition: background-color var(--dur-state) ease-out, border-color var(--dur-state) ease-out, color var(--dur-state) ease-out;
}
.inq__captcha #captcha #captcha_mp3:hover, .inq__captcha #captcha #captcha_reload:hover { border-color: var(--c-bg-inverse); background: var(--c-bg-inverse); color: var(--c-text-on-brand); }
/* 2절이 버튼 안 span 을 display:none 으로 숨긴다 — 그러면 읽어 주지도 않는다 */
.inq__captcha #captcha #captcha_mp3 .sound_only, .inq__captcha #captcha #captcha_reload .sound_only { display: block; }
.inq__captcha #captcha #captcha_key {
	order: 4; flex: none; width: var(--sp-160); height: auto; margin: 0; padding: var(--sp-12) var(--sp-16);
	border: 1px solid var(--c-border-strong); border-radius: 0; background: var(--c-bg-default);
	font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-strong);
	transition: border-color var(--dur-state) ease-out;
}
.inq__captcha #captcha #captcha_key::placeholder { color: var(--c-text-muted); opacity: 1; }
.inq__captcha #captcha #captcha_key:focus { outline: none; border-color: var(--c-text-strong); }
.inq__captcha.is-error #captcha #captcha_key { border-color: var(--c-brand-accent); }
.inq__captcha #captcha #captcha_audio { order: 5; flex: 1 1 100%; min-width: 0; }
.inq__captcha #captcha #captcha_info { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* 동의 — AgreeCheck. 줄 높이 48(위아래 12) · 상자 20(테두리 border/strong) → 12 → 문구 body/s → 12 → 내용 보기 caption text/body 밑줄.
   켜면 상자 면 bg/inverse + 흰 체크 16. 라벨이 상자 · 문구를 감싼다(누르는 영역) */
.agree { display: flex; flex-wrap: wrap; align-items: center; column-gap: var(--sp-12); }
.agree__check { position: relative; display: inline-flex; align-items: center; gap: var(--sp-12); padding: var(--sp-12) 0; cursor: pointer; }
.agree__check input { position: absolute; left: 0; top: var(--sp-12); width: 20px; height: 20px; margin: 0; opacity: 0; cursor: pointer; }
.agree__box { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border: 1px solid var(--c-border-strong); background: var(--c-bg-default); color: var(--c-text-on-brand); transition: background-color var(--dur-state) ease-out, border-color var(--dur-state) ease-out; }
.agree__box .dm-i { opacity: 0; }
.agree__check input:checked + .agree__box { border-color: var(--c-bg-inverse); background: var(--c-bg-inverse); }
.agree__check input:checked + .agree__box .dm-i { opacity: 1; }
.agree__check input:focus-visible + .agree__box { outline: 2px solid var(--c-text-strong); outline-offset: 2px; }
.fld.is-error .agree__box { border-color: var(--c-brand-accent); }
.agree__label { font: var(--t-body-s); letter-spacing: 0; color: var(--c-text-strong); }
.agree__link { font: var(--t-caption); letter-spacing: 0; color: var(--c-text-body); text-decoration: underline; text-underline-position: from-font; text-decoration-thickness: from-font; transition: color var(--dur-state) ease-out; }
.agree__link:hover { color: var(--c-text-strong); }

/* 문의 보내기 — 시안 submit 41:630 = Button Primary: 면 bg/inverse · 글자 button 15/22 대문자 흰색 + arrow-right 20(간격 12) · 위아래 16 · 좌우 32 · 직각.
   높이 56 = 테두리 포함(2026-10-19 사용자 — 4절 Button Outline 과 같은 높이). 테두리는 면과 같은 bg/inverse 라 모양은 Primary 그대로다.
   ★ <button> 이라 면 · 테두리 · 글꼴 · 커서를 전부 적는다 — 하나라도 빠지면 UA 기본값(2px outset · ButtonFace)이 남는다(지뢰 9-1). .btn 은 쓰지 않는다
   hover 는 시안에 Outline 것만 있다(면 bg/inverse + 흰 글자 = 이 버튼의 평소 모양) — 바꾸지 않는다.
   같은 줄의 관리자 '목록'은 4절 .btn-line(Outline 56)이라 높이 · 선이 같다 */
.inq__foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-12); }
.inq__submit {
	display: inline-flex; align-items: center; gap: var(--sp-12); margin: 0; padding: var(--sp-16) var(--sp-32);
	border: 1px solid var(--c-bg-inverse); border-radius: 0; background: var(--c-bg-inverse); box-shadow: none; appearance: none; -webkit-appearance: none;
	font: var(--t-nav); letter-spacing: var(--ls-caps); text-transform: uppercase; color: var(--c-text-on-brand); white-space: nowrap; cursor: pointer;
}
.inq__submit:disabled { cursor: default; }


/* ==========================================================================
   19. 토스트 — 템플릿 토스트 그대로, 색만 시안 토큰(🎬 동작 설명 · 4-2 ⚙️ 주석). tail.php 3 이 띄운다
       면 bg/inverse · 문구 body/m 흰색. 상태 아이콘 20 — 성공 흰색(무채색) · 실패 brand/accent. 그림자 없음(시안에 그림자가 없다)
   ========================================================================== */
.toast {
	position: fixed; left: 50%; bottom: var(--sp-40); z-index: 1300;
	display: flex; align-items: center; gap: var(--sp-12); padding: var(--sp-16) var(--sp-24);
	background: var(--c-bg-inverse);
	transform: translate(-50%, var(--sp-16)); opacity: 0; transition: opacity 300ms var(--ease-out), transform 300ms var(--ease-out);
}
.toast[hidden] { display: none; }
.toast.is-on { opacity: 1; transform: translate(-50%, 0); }
.toast__icon { display: none; }
.toast .dm-i { stroke-width: 1px; }
.toast--success .toast__icon--success { display: inline-flex; color: var(--c-text-on-brand); }
.toast--error .toast__icon--error { display: inline-flex; color: var(--c-brand-accent); }
.toast__msg { font: var(--t-body-m); letter-spacing: 0; color: var(--c-text-on-brand); white-space: nowrap; }
