@charset "UTF-8";
/* =====================================================================
   ps-competition.css — 공모 페이지(목록/상세) 디자인 (업체 디자인 이식)
   원본: D:\html\project-seoul-alt-b-light\components\competition\*
   프리미티브(.ps-eyebrow/.ps-sticker/.ps-card-title)는 ps-tokens.css 공용.
   모든 규칙은 .ps-scope / .ps-cptt 하위로 한정.
   ===================================================================== */

/* 공모 페이지 본문 래퍼 — common.css 리셋(li marker/float) 방어 */
.ps-cptt { display: block; color: var(--ps-ink); background: var(--ps-paper); }
.ps-cptt ul, .ps-cptt ol { list-style: none; margin: 0; padding: 0; }
.ps-cptt li { list-style: none; float: none; }
.ps-cptt li::before, .ps-cptt li::marker { content: none; }
.ps-cptt a { text-decoration: none; color: inherit; }
.ps-cptt img { max-width: 100%; display: block; }
/* button/input 은 폰트를 상속 안 받아 시스템폰트로 굵어 보임 → PretendardPS 상속 강제 */
.ps-cptt button, .ps-cptt input { font-family: inherit; }

/* 페이지 상단 여백 */
.ps-cptt-page { padding: var(--ps-section-pad) var(--ps-gutter); }

/* =====================================================================
   페이지 헤더 (제목 좌 7 + 설명 우 5 + 하단 구분선)
   ===================================================================== */
/* 배포본: grid-cols-12 gap-8 items-end / 제목 col-span-7, 설명 col-span-5.
   7fr 5fr 이 아니라 실제 12컬럼이어야 설명 시작 위치가 배포본과 일치. */
.ps-cptt-header {
  display: grid; grid-template-columns: 1fr; gap: 32px;
  align-items: end;
  border-bottom: 1px solid var(--ps-ink); padding-bottom: 40px;
}
@media (min-width: 768px) {
  .ps-cptt-header { grid-template-columns: repeat(12, 1fr); }
  .ps-cptt-header-main { grid-column: span 7; }
  .ps-cptt-header-desc { grid-column: span 5; }
}
/* .ps-scope .ps-eyebrow{margin:0} 리셋(0,2,0) 을 이기도록 .ps-cptt 접두. */
.ps-cptt .ps-cptt-header-eyebrow { margin: 0 0 16px; }
/* 배포본 실측: 헤더 설명은 fs-lead(최대26px) 아니라 더 작게(14~16px) 렌더됨(소스≠배포본).
   색상도 배포본은 p 자체 색이 아니라 부모(.ps-cptt) 의 ink(#0a0a0a) 상속이 적용됨 —
   우리도 ink 로 맞춤(기존 mute-700 #4a4a4a 는 배포본보다 옅었음). */
.ps-cptt-header-desc {
  font-size: clamp(0.875rem, 0.83rem + 0.2vw, 1rem);
  font-weight: 400;  /* 배포본: weight 지정 없음 = 기본 400 (굵기 통일) */
  color: var(--ps-ink); max-width: 44ch; margin: 0;
  /* line-height 1.6 은 위치를 아래로 밀어 배포본과 어긋남 → 1.5(배포본 기본).
     2줄 사이 간격은 유지하면서 위치도 배포본에 맞춤. */
  line-height: 1.5;
}

/* =====================================================================
   필터 툴바 (sticky, 2줄) — 껍데기(시각만). 기능 연결은 백엔드 담당.
   ===================================================================== */
.ps-cptt-body { margin-top: 48px; }
.ps-cptt-toolbar-sentinel { height: 0; margin: 0; padding: 0; }
.ps-cptt-toolbar {
  position: sticky; top: var(--ps-header-h, 4.25rem); z-index: 30;
  margin: 0 calc(-1 * var(--ps-gutter)) 48px;
  padding: 0 var(--ps-gutter);
  background: var(--ps-paper);
  border-top: 1px solid var(--ps-ink); border-bottom: 1px solid var(--ps-ink);
}
/* 헤더에 붙었을 때(stuck) 위 border 제거 — 헤더 border-bottom 과 겹쳐 2px 로
   보이던 것을 1px 로. 붙기 전(맨 위 근처)엔 위 border 유지. */
.ps-cptt-toolbar.is-stuck { border-top-color: transparent; }
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .ps-cptt-toolbar {
    background: rgba(255,255,255,0.85);
    -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px);
  }
}
.ps-cptt-toolbar-row {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
  gap: 12px 24px; padding: 12px 0;
}
.ps-cptt-toolbar-row.is-sub { border-top: 1px solid var(--ps-mute-100); }

/* 단계/뷰 버튼 (공통) */
.ps-cptt-stage-list { display: flex; flex-wrap: wrap; gap: 8px; }
.ps-cptt-view-group { display: flex; align-items: center; gap: 8px; }
.ps-cptt-stage-btn,
.ps-cptt-detail-btn {
  cursor: pointer; padding: 8px 16px;
  font-size: 13px;  /* 배포본 text-xs 재정의값(0.8125rem=13px, 가독성 상향) */
  text-transform: uppercase; letter-spacing: 0.12em; line-height: 1;
  border: 1px solid var(--ps-mute-300); background: transparent;
  color: var(--ps-mute-500); font-weight: 600;  /* 배포본 semibold */
  transition: color 160ms ease, background 160ms ease, border-color 160ms ease;
}
.ps-cptt-stage-btn:hover,
.ps-cptt-detail-btn:hover { border-color: var(--ps-ink); color: var(--ps-ink); }
.ps-cptt-stage-btn.is-active {
  border-color: var(--ps-ink); background: var(--ps-ink);
  color: var(--ps-paper); font-weight: 900;
}
.ps-cptt-stage-btn:focus-visible,
.ps-cptt-detail-btn:focus-visible,
.ps-cptt-source-btn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
/* 상세조건 버튼은 단계 버튼과 달리 비활성 텍스트가 ink(#0a0a0a) — 배포본은
   text 색 미지정으로 부모 ink 상속. 아이콘 정렬용 flex 포함. */
.ps-cptt-detail-btn { display: inline-flex; align-items: center; gap: 8px; color: var(--ps-ink); }
.ps-cptt-detail-ico { display: inline-flex; align-items: center; }
/* 선택 있을 때 트리거 버튼 활성(검정) — 배포본 appliedCount>0 */
.ps-cptt-detail-btn.is-active {
  border-color: var(--ps-ink); background: var(--ps-ink);
  color: var(--ps-paper); font-weight: 900;
}
/* 선택 개수 배지 (라임 원) */
.ps-cptt-detail-count {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 18px; height: 18px; padding: 0 4px; border-radius: 9999px;
  background: var(--ps-accent); color: var(--ps-ink);
  font-size: 12px; font-weight: 900; font-variant-numeric: tabular-nums;
}
.ps-cptt-detail-count[hidden] { display: none; }

/* 상세조건 드롭다운 패널 */
.ps-cptt-detail-wrap { position: relative; }
.ps-cptt-detail-panel {
  position: absolute; right: 0; top: calc(100% + 8px); z-index: 50;
  width: min(92vw, 920px); max-height: 70vh; overflow-y: auto;
  border: 1px solid var(--ps-ink); background: var(--ps-paper);
  box-shadow: 0 24px 64px -20px rgba(0,0,0,0.45);
}
.ps-cptt-detail-panel[hidden] { display: none; }
/* 모바일  — 상세조건 버튼(툴바(전체폭)로 바꿔 좌우 여백 안에 꽉 채운다) */
@media (max-width: 767px) {
  .ps-cptt-detail-wrap { position: static; }
  .ps-cptt-detail-panel {
    left: var(--ps-gutter); right: var(--ps-gutter); top: 100%;
    width: auto; max-height: calc(100vh - var(--ps-header-h, 4.25rem) - 140px);
  }
}
.ps-cptt-detail-head {
  position: sticky; top: 0; z-index: 1;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 20px; border-bottom: 1px solid var(--ps-ink); background: var(--ps-paper);
}
.ps-cptt-detail-title { margin: 0; font-size: 0.875rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em; }
.ps-cptt-detail-close {
  cursor: pointer; border: 0; background: transparent; color: var(--ps-ink);
  font-size: 20px; line-height: 1; padding: 4px 8px;
}
.ps-cptt-detail-close:hover { color: var(--ps-mute-700); }
.ps-cptt-detail-close:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptt-detail-cat {
  display: grid; grid-template-columns: 1fr; gap: 12px;
  padding: 14px 20px; border-top: 1px solid var(--ps-mute-200);
}
.ps-cptt-detail-cat:first-child { border-top: 0; }
@media (min-width: 640px) { .ps-cptt-detail-cat { grid-template-columns: 120px 1fr; } }
.ps-cptt-detail-cat-label {
  margin: 0; display: flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.12em;
  color: var(--ps-mute-700);
}
.ps-cptt-detail-tick { display: inline-block; width: 6px; height: 6px; background: var(--ps-accent); flex: 0 0 auto; }
.ps-cptt-detail-opts { display: flex; flex-wrap: wrap; gap: 6px; }
.ps-cptt-detail-opt {
  cursor: pointer; padding: 4px 10px; font-size: 12px; letter-spacing: 0.02em;
  border: 1px solid var(--ps-mute-300); background: transparent; color: var(--ps-mute-700);
  transition: color 140ms ease, background 140ms ease, border-color 140ms ease;
}
.ps-cptt-detail-opt:hover { border-color: var(--ps-ink); color: var(--ps-ink); }
.ps-cptt-detail-opt[aria-pressed="true"] {
  border-color: var(--ps-ink); background: var(--ps-ink); color: var(--ps-paper); font-weight: 700;
}
.ps-cptt-detail-opt:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptt-detail-foot {
  position: sticky; bottom: 0;
  display: flex; align-items: center; justify-content: flex-end; gap: 8px;
  padding: 12px 20px; border-top: 1px solid var(--ps-ink); background: var(--ps-paper);
}
.ps-cptt-detail-reset {
  cursor: pointer; padding: 8px 16px; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.12em;
  border: 1px solid var(--ps-mute-300); background: transparent; color: var(--ps-ink);
}
.ps-cptt-detail-reset:hover { border-color: var(--ps-ink); }
.ps-cptt-detail-apply {
  cursor: pointer; padding: 8px 20px; font-size: 12px; font-weight: 900;
  text-transform: uppercase; letter-spacing: 0.14em;
  border: 0; background: var(--ps-ink); color: var(--ps-paper);
}
.ps-cptt-detail-apply:hover { opacity: 0.9; }
.ps-cptt-detail-reset:focus-visible,
.ps-cptt-detail-apply:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }

/* 발주기관 행 */
.ps-cptt-source-wrap { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
.ps-cptt-source-label {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em;
  font-weight: 800; color: var(--ps-mute-700); margin-right: 4px;
}
.ps-cptt-source-list { display: flex; flex-wrap: wrap; gap: 6px; }
.ps-cptt-source-btn {
  cursor: pointer; height: 28px; padding: 0 10px;  /* 배포본 실측 높이 28px */
  display: inline-flex; align-items: center;
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.14em; font-weight: 700;  /* 배포본 font-bold */
  border: 1px solid transparent; background: transparent; color: var(--ps-mute-500);
  transition: color 160ms ease, background 160ms ease, border-color 160ms ease;
}
.ps-cptt-source-btn:hover { color: var(--ps-ink); border-color: var(--ps-ink); }
.ps-cptt-source-btn.is-active {
  border-color: var(--ps-ink); background: var(--ps-ink); color: var(--ps-paper);
}

/* 검색 */
.ps-cptt-search { position: relative; display: flex; align-items: center; flex: 0 0 auto; }
.ps-cptt-search-input {
  width: clamp(140px, 18vw, 240px);
  border: 1px solid var(--ps-mute-300); background: transparent;
  padding: 6px 32px 6px 12px; font-size: 13px; outline: none; color: var(--ps-ink);  /* 배포본 text-xs=13px */
}
.ps-cptt-search-input:focus { border-color: var(--ps-ink); }
.ps-cptt-search-input::placeholder { color: var(--ps-mute-500); }
.ps-cptt-search-ico {
  position: absolute; right: 10px; display: inline-flex; align-items: center;
  color: var(--ps-mute-500); pointer-events: none;
}

/* =====================================================================
   공모 목록 그리드 (grid-cols-2 / md-3 / lg-4, gap 24px)
   ===================================================================== */
.ps-cptt-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px;
}
@media (min-width: 768px) { .ps-cptt-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1024px) { .ps-cptt-grid { grid-template-columns: repeat(4, 1fr); } }
.ps-cptt-grid-empty {
  grid-column: 1 / -1; padding: 80px 0; text-align: center; color: var(--ps-mute-500);
}
/* 조건에 맞는 공모가 없을 때 — viewMyRegist 의 .ps-sub-empty 와 동일한 점선 박스 스타일.
   fnBuildEmptyHtml() 이 그리드 <li class="ps-cptt-empty"> 로 렌더한다. 로딩 안내에도 같이 적용됨. */
.ps-cptt-empty {
  grid-column: 1 / -1; margin: 0; list-style: none;
  border: 1px dashed rgba(10, 10, 10, 0.3);
  padding: 32px 24px; text-align: center;
  font-size: 14px; line-height: 1.7; color: var(--ps-mute-700);
}

/* =====================================================================
   공모 카드
   ===================================================================== */
.ps-home a.ps-cptt-card,
.ps-cptt a.ps-cptt-card { display: block; }
/* 포스터 프레임 — 1:√2, 흰 letterbox + hairline. 이미지 없으면 사선 플레이스홀더 */
.ps-cptt-poster {
  position: relative; aspect-ratio: 1 / 1.414;
  background: var(--ps-paper); border: 1px solid var(--ps-mute-300);
  overflow: hidden;
}
.ps-cptt-poster img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }
/* 공모 결과 카드 = 1등 당선작 대표이미지 [2026-10-22]. 세로 포스터 틀(1:√2)이면 너무 길어서
   가로 4:3 틀로 맞추고 꽉 채운다(가장자리는 조금 잘림). 카드 높이가 일정해 줄이 가지런하다.
   ※ '전체' 탭은 결과 카드도 포스터를 쓴다(fnBuildArchCardHtml usePoster) — 이 규칙은 '결과' 탭 전용 */
.ps-cptt-poster.is-win { aspect-ratio: 4 / 3; border: 0; background: var(--ps-mute-100); }
.ps-cptt-poster.is-win img { object-fit: cover; }
/* 당선작 이미지가 없어 포스터로 대신하는 결과 카드도 같은 4:3 틀을 꽉 채운다(잘려도 됨 — 사용자 결정).
   공모전명이 보통 포스터 위쪽에 있어 위를 기준으로 자른다 */
.ps-cptt-poster.is-win.is-fallback img { object-position: top; }
@supports not (aspect-ratio: 4 / 3) {
  .ps-cptt-poster.is-win { height: 0; padding-top: 75%; }
}
/* 포스터 없을 때 — 사선 해치 + 라벨 */
.ps-cptt-poster.is-empty {
  border: 1px solid var(--ps-mute-300);
  background:
    repeating-linear-gradient(45deg, var(--ps-mute-100), var(--ps-mute-100) 10px, var(--ps-mute-50) 10px, var(--ps-mute-50) 20px);
}
.ps-cptt-poster.is-empty::after {
  content: attr(data-label);
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  color: var(--ps-mute-500); font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.1em;
}
/* 우상단 스티커(발주처 + S-Pool) */
.ps-cptt-stickers {
  position: absolute; right: 12px; top: 12px; z-index: 10;
  display: flex; flex-direction: column; align-items: flex-end; gap: 6px;
}
/* S-Pool 전용 스티커 (배포본: 남색 배경 흰 글자 tracking 0.04em)
   .ps-scope .ps-sticker(0,2,0) 를 이기도록 특이성 강화. */
.ps-scope .ps-cptt-sticker-spool,
.ps-sticker.ps-cptt-sticker-spool { background: #1A3A8F; color: #fff; letter-spacing: 0.04em; }

/* 카드 메타 행 (상태점 + D-day/마감) */
.ps-cptt-meta {
  margin-top: 16px; display: flex; align-items: center; justify-content: space-between;
  font-size: 12px;
}
.ps-cptt-status { display: inline-flex; align-items: center; gap: 8px; }
.ps-cptt-status-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 9999px; flex: 0 0 auto;
}
.ps-cptt-status-dot[data-status="open"]      { background: var(--ps-accent); }
.ps-cptt-status-dot[data-status="review"]    { background: var(--ps-ink); }
.ps-cptt-status-dot[data-status="awarded"]   { background: var(--ps-mute-700); }
.ps-cptt-status-dot[data-status="completed"] { background: var(--ps-mute-500); }
/* .ps-scope .ps-card-title{margin:0} 리셋(0,2,0)을 이기도록 .ps-cptt 접두로 특이성 강화.
   배포본: 메타→제목 mt-3(12px), 제목→기관 mt-1(4px). */
.ps-cptt .ps-cptt-card-title { margin-top: 12px; }
.ps-cptt .ps-cptt-org { margin-top: 4px; font-size: 0.875rem; color: var(--ps-mute-700); }
.ps-cptt .ps-cptt-org-pending { color: var(--ps-mute-500, #999); font-style: italic; }

/* 카드 hover — 제목 밑줄(라임) + 이미지 살짝 (배포본 group) */
.ps-cptt-card:hover .ps-cptt-card-title {
  text-decoration: underline; text-decoration-color: var(--ps-accent);
  text-decoration-thickness: 3px; text-underline-offset: 4px;
}
/* 키보드 포커스 표시 — 포스터 둘레 포커스 링 */
.ps-cptt-card:focus-visible { outline: none; }
.ps-cptt-card:focus-visible .ps-cptt-poster { outline: 3px solid var(--ps-focus); outline-offset: 3px; }

/* =====================================================================
   공모 상세 페이지 (competitions/[slug])
   구조: 히어로 + 본문 2단(좌 aside: 섹션네비/CTA/관련공모 + 우 섹션들)
   ===================================================================== */
.ps-cptd { display: block; color: var(--ps-ink); background: var(--ps-paper); }
.ps-cptd ul, .ps-cptd ol { list-style: none; margin: 0; padding: 0; }
.ps-cptd li { list-style: none; float: none; }
.ps-cptd li::before, .ps-cptd li::marker { content: none; }
.ps-cptd a { text-decoration: none; color: inherit; }
.ps-cptd img { max-width: 100%; display: block; }
.ps-cptd button, .ps-cptd input { font-family: inherit; }

/* ── 히어로 (배포본: 포스터 4열 + 정보 8열, items-start) ── */
.ps-cptd-hero {
  border-bottom: 1px solid var(--ps-ink);
  padding: calc(var(--ps-section-pad) / 2) var(--ps-gutter) var(--ps-section-pad);
}
.ps-cptd-hero-grid {
  display: grid; grid-template-columns: 1fr; gap: 32px; align-items: start;
}
@media (min-width: 768px) {
  .ps-cptd-hero-grid { grid-template-columns: repeat(12, 1fr); }
  .ps-cptd-hero-poster-col { grid-column: span 4; }
  .ps-cptd-hero-info { grid-column: span 8; }
}
/* 포스터 (+ 디지털 심사 배지) */
.ps-cptd-hero-poster {
  position: relative; width: 100%; aspect-ratio: 1 / 1.414;
  background: var(--ps-paper); border: 1px solid var(--ps-ink); overflow: hidden;
}
.ps-cptd-hero-poster img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; }
.ps-cptd-hero-badge {
  position: absolute; left: 12px; top: 12px;
  display: inline-block;  /* 배포본: 단순 inline-block, line-height 1.5 상속으로 높이 확보 */
  background: var(--ps-ink); color: var(--ps-paper);
  padding: 4px 8px; font-size: 12px; font-weight: 800;  /* 배포본 px-2 py-1 */
  letter-spacing: 0.18em; text-transform: uppercase;
}
/* 정보 컬럼 — 배포본보다 요소 사이 간격 넓게. 상태 라벨은 상단에 딱 붙음(패딩 없음). */
.ps-cptd-hero-info { display: flex; flex-direction: column; gap: 24px; }  /* 배포본 gap-6 */
.ps-cptd-hero-status { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 0; }
.ps-cptd-hero-h1 {
  margin: 0; line-height: 0.95; letter-spacing: -0.025em;
  font-size: clamp(1.75rem, 0.9rem + 2.4vw, 3.5rem);
}
.ps-cptd-hero-tagline {
  /* 배포본: fs-lead 지정이나 실제론 더 작게 + 색은 p 미지정 → 부모 ink 상속(소스≠배포본).
     제목 바로 아래 ~16px 띄움(부모 gap 24px 상쇄). */
  margin: -8px 0 0; font-size: clamp(0.875rem, 0.84rem + 0.18vw, 1rem);
  color: var(--ps-ink); max-width: 42ch; line-height: 1.5;
}
.ps-cptd-hero-place { display: flex; flex-direction: column; gap: 3px; }
.ps-cptd-hero-addr { margin: 0; font-size: 1rem; line-height: 1.625; }  /* 배포본 text-base leading-relaxed */
.ps-cptd-hero-area {
  margin: 0; font-size: 13px; text-transform: uppercase; letter-spacing: 0.12em;  /* 배포본 text-xs=13px */
  color: var(--ps-mute-500);
}
.ps-cptd-hero-area .num { font-variant-numeric: tabular-nums; font-weight: 700; color: var(--ps-ink); }
/* 일정 블록 */
.ps-cptd-hero-sched {
  border-top: 1px solid var(--ps-mute-300); padding-top: 24px;
  display: flex; flex-wrap: wrap; align-items: flex-start; gap: 24px 48px;
}
.ps-cptd-hero-sched-left { display: flex; flex-direction: column; gap: 6px; }
.ps-cptd-hero-timeleft {
  margin: 0; font-weight: 900; text-transform: uppercase;
  letter-spacing: -0.02em; font-size: 1.5rem;
}
.ps-cptd-hero-sched-right { display: flex; flex-direction: column; gap: 12px; min-width: 14rem; }
.ps-cptd-hero-sched-right > div > p:first-child { margin: 0; }
.ps-cptd-hero-window {
  margin: 4px 0 0; font-variant-numeric: tabular-nums; font-size: 1rem;
  font-weight: 700; letter-spacing: -0.01em;
}
/* 통계 */
.ps-cptd-hero-stats {
  margin: 0; font-size: 13px; text-transform: uppercase; letter-spacing: 0.12em;  /* 배포본 text-xs=13px */
  color: var(--ps-mute-500);
}
.ps-cptd-hero-stats .num { font-variant-numeric: tabular-nums; font-weight: 900; color: var(--ps-ink); }
.ps-cptd-hero-stats .sep { margin: 0 8px; color: var(--ps-mute-300); }
.ps-cptd-hero-roster {
  font-weight: 900; font-variant-numeric: tabular-nums; color: var(--ps-ink);
  background: none; border: 0; cursor: pointer; padding: 0;
  text-decoration: underline; text-decoration-color: var(--ps-ink);
  text-decoration-thickness: 2px; text-underline-offset: 3px;
}
.ps-cptd-hero-roster:hover { color: var(--ps-mute-700); }
/* 액션 버튼 */
.ps-cptd-hero-actions { display: flex; flex-wrap: wrap; align-items: stretch; gap: 8px; margin-top: 8px; }
.ps-cptd-hero-status-btn {
  display: inline-flex; align-items: center; padding: 12px 24px;
  border: 1px solid var(--ps-mute-300); background: transparent; color: var(--ps-mute-500);
  font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.16em;
  cursor: default;
}
.ps-cptd-hero-btn {
  display: inline-flex; align-items: center; gap: 8px; padding: 12px 16px;
  border: 1px solid var(--ps-ink); background: transparent; color: var(--ps-ink);
  font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.16em;
  cursor: pointer; transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-hero-btn:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-hero-btn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptd-hero-icons { margin-left: auto; display: flex; align-items: center; gap: 8px; }
.ps-cptd-hero-iconbtn {
  display: inline-flex; align-items: center; justify-content: center;
  height: 36px; width: 36px; border: 1px solid var(--ps-ink);
  background: var(--ps-paper); color: var(--ps-ink); cursor: pointer;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-hero-iconbtn:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-hero-iconbtn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }

/* ── 본문 2단 레이아웃 ── */
.ps-cptd-body { padding: var(--ps-section-pad) var(--ps-gutter); }
.ps-cptd-grid { display: block; }
@media (min-width: 768px) {
  .ps-cptd-grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 32px; }
}
.ps-cptd-aside { }
@media (min-width: 768px) {
  .ps-cptd-aside {
    grid-column: span 2; position: sticky; top: calc(var(--ps-header-h, 4.25rem) + 1.5rem);
    align-self: start; display: flex; flex-direction: column; gap: 48px;
  }
}
.ps-cptd-main { }
@media (min-width: 768px) { .ps-cptd-main { grid-column: span 10; } }
@media (max-width: 767px) { .ps-cptd-main { margin-top: 48px; } }

/* 섹션 네비 (좌측) — 배포본 aside */
/* 공모명 타이틀 (네비 상단, 하단 구분선) */
.ps-cptd-nav-title {
  margin: 0 0 20px; padding-bottom: 16px;
  border-bottom: 1px solid var(--ps-mute-200);
  font-size: clamp(1.3rem, 1.1rem + 0.6vw, 1.6rem);
  font-weight: 800; line-height: 1.25; letter-spacing: -0.015em;
  color: var(--ps-ink); word-break: keep-all;
}
.ps-cptd-nav-label {
  font-size: var(--ps-fs-eyebrow); font-weight: 500; text-transform: uppercase;
  letter-spacing: var(--ps-tr-eyebrow); color: var(--ps-mute-700); margin: 0 0 16px;
}
.ps-cptd-nav-list { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; }
.ps-cptd-nav-list a {
  display: block; font-size: 17px; line-height: 1.375; font-weight: 400;
  color: var(--ps-mute-500); transition: color 140ms ease;
}
.ps-cptd-nav-list a:hover { color: var(--ps-ink); }
.ps-cptd-nav-list a.is-active { color: var(--ps-ink); font-weight: 700; }

/* 접수 CTA (라임 블록) */
.ps-cptd-cta {
  display: block; text-align: center;
  background: var(--ps-accent); color: var(--ps-ink); border: 1px solid var(--ps-ink);
  padding: 16px 20px; font-size: 13px; font-weight: 800;
  text-transform: uppercase; letter-spacing: 0.16em;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-cta:hover { background: var(--ps-ink); color: var(--ps-accent); }

/* 관련 공모 */
/* 관련 공모 (공모결과 aside) — 배포본: 상단 ink 구분선 + gap-4, 항목별 상태/제목, hover 화살표 */
.ps-cptd-related { border-top: 1px solid var(--ps-ink); padding-top: 24px; display: flex; flex-direction: column; }
.ps-cptd-related-head {
  font-size: var(--ps-fs-eyebrow); font-weight: 500; text-transform: uppercase;
  letter-spacing: var(--ps-tr-eyebrow); color: var(--ps-mute-700); margin: 0 0 16px;
}
.ps-cptd-related a { display: block; }
.ps-cptd-related a + a { margin-top: 16px; }  /* gap-4 */
.ps-cptd-related .eyebrow {
  display: block; font-size: var(--ps-fs-eyebrow); text-transform: uppercase;
  letter-spacing: var(--ps-tr-eyebrow); font-weight: 500; color: var(--ps-mute-500);
}
.ps-cptd-related .title {
  display: block; margin-top: 4px; font-size: 0.9375rem; font-weight: 700; line-height: 1.375;
  color: var(--ps-ink); transition: color 140ms ease;
}
.ps-cptd-related a:hover .title { color: var(--ps-mute-700); }
/* hover 시 화살표 표시 */
.ps-cptd-related .title::after {
  content: " →"; opacity: 0; transition: opacity 140ms ease;
}
.ps-cptd-related a:hover .title::after { opacity: 1; }

/* 섹션 (우측) */
.ps-cptd-section { padding: 64px 0; }
@media (min-width: 768px) { .ps-cptd-section { padding: 80px 0; } }
.ps-cptd-section.has-divider { border-top: 1px solid var(--ps-ink); }
.ps-cptd-section:first-child { padding-top: 0; }
.ps-cptd-section-grid { display: block; }
@media (min-width: 768px) {
  .ps-cptd-section-grid { display: grid; grid-template-columns: repeat(10, 1fr); gap: 32px; align-items: start; }
}
.ps-cptd-section-title {
  font-size: clamp(2rem, 1.45rem + 1.2vw, 3rem);
  font-weight: 900; letter-spacing: -0.02em; line-height: 1.05; text-transform: uppercase;
  margin: 0;
}
@media (min-width: 768px) {
  .ps-cptd-section-title {
    grid-column: span 2; position: sticky; align-self: start;
    top: calc(var(--ps-header-h, 4.25rem) + 1.5rem);
  }
}
.ps-cptd-section-body { }
@media (min-width: 768px) { .ps-cptd-section-body { grid-column: span 8; } }
@media (max-width: 767px) { .ps-cptd-section-body { margin-top: 24px; } }

/* ── 개요 섹션: 스펙 그리드 + 운영/지원 + 데스크톱 권장 안내 ── */
.ps-cptd-spec-grid {
  display: grid; grid-template-columns: 1fr; gap: 32px 40px; margin: 0;
}
@media (min-width: 640px) { .ps-cptd-spec-grid { grid-template-columns: repeat(2, 1fr); } }
.ps-cptd-spec-item { border-top: 1px solid var(--ps-mute-300); padding-top: 12px; }
.ps-cptd-spec-dt { color: var(--ps-mute-500); margin: 0; }
.ps-cptd-spec-dd {
  margin: 8px 0 0; font-size: 0.9375rem; font-weight: 600; letter-spacing: -0.01em;  /* 일정 단계와 동일 15px */
}
.ps-cptd-spec-dd .num { font-variant-numeric: tabular-nums; }
/* 여러 줄 값 — 담당자가 적은 줄바꿈을 그대로 살린다 [2026-09-18].
   제한공모 참가자격이 쓴다. 한 문장으로 적는 경우가 많지만 조건을 줄로 나눠 적기도 한다.
   ⚠ pre-line 이다(pre 아님) — 들여쓰기 공백까지 살리면 붙여 넣은 글이 어긋나 보인다. */
.ps-cptd-spec-dd.is-pre { white-space: pre-line; font-weight: 500; line-height: 1.7; word-break: keep-all; }
/* 건축물 용도 칸의 세부 용도 줄 [2026-10-19] — 주 용도 아래 한 단계 약하게 */
.ps-cptd-spec-sub { display: block; margin-top: 4px; font-size: 0.875rem; font-weight: 500; color: var(--ps-mute-700); }
/* 공모전 태그 [2026-10-19] — 누르면 그 태그로 공모 목록 검색 */
.ps-cptd-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.ps-cptd-tag { border: 1px solid var(--ps-mute-400); background: none; padding: 4px 10px; font-size: 0.8125rem; font-weight: 500; color: var(--ps-ink); cursor: pointer; }
.ps-cptd-tag:hover { border-color: var(--ps-ink); }
.ps-cptd-arc-link { color: inherit; text-decoration: underline; text-decoration-color: var(--ps-mute-300); text-underline-offset: 2px; }
.ps-cptd-arc-link:hover { text-decoration-color: currentColor; }
/* 운영 및 지원 — 전체폭, 굵은 상단 구분선 */
.ps-cptd-spec-ops { margin-top: 32px; border-top: 2px solid var(--ps-ink); padding-top: 12px; }
.ps-cptd-spec-ops-dd { margin: 8px 0 0; font-size: 0.9375rem; letter-spacing: -0.01em; }  /* 15px */
.ps-cptd-ops-flow { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; }
.ps-cptd-ops-cell { display: flex; align-items: baseline; gap: 12px; }
.ps-cptd-ops-strong { font-weight: 600; }
.ps-cptd-ops-sep { color: var(--ps-mute-300); }
.ps-cptd-ops-mute { color: var(--ps-mute-700); }
.ps-cptd-ops-mute.num { font-variant-numeric: tabular-nums; }
.ps-cptd-ops-mail { color: var(--ps-mute-700); text-decoration: underline; text-underline-offset: 2px; }
.ps-cptd-ops-mail:hover { color: var(--ps-ink); }
/* 데스크톱 권장 안내 배지 */
.ps-cptd-desktop-notice {
  margin: 32px 0 0; display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid var(--ps-mute-300); padding: 8px 12px;
  font-size: var(--ps-fs-eyebrow); letter-spacing: var(--ps-tr-eyebrow);
  text-transform: uppercase; color: var(--ps-mute-700); font-weight: 500;
}

/* ── 일정 섹션: 테이블 (단계/일자/비고/상태) ── */
.ps-cptd-sched-wrap { overflow-x: auto; margin: 0 calc(-1 * var(--ps-gutter)); }
@media (min-width: 768px) { .ps-cptd-sched-wrap { margin: 0; } }
/* 2단계 설계공모: 1단계/2단계 일정 표 사이 간격 */
.ps-cptd-sched-wrap + .ps-cptd-sched-wrap { margin-top: 48px; }
.ps-cptd-sched-table {
  width: 100%; min-width: 640px; border-collapse: collapse;
  border-top: 1px solid var(--ps-ink); font-size: 0.9375rem;  /* text-sm=15px */
}
.ps-cptd-sched-table thead th {
  text-align: left; padding: 12px 16px 12px 0;
  font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.16em;
  color: var(--ps-mute-500);
}
.ps-cptd-sched-table th.col-stage { width: 28%; }
.ps-cptd-sched-table th.col-date  { width: 28%; }
.ps-cptd-sched-table th.col-status { width: 14%; text-align: right; padding-right: 8px; }
.ps-cptd-sched-table tbody tr { border-top: 1px solid var(--ps-mute-300); vertical-align: top; }
.ps-cptd-sched-table tbody tr.is-active { background: var(--ps-mute-50); }
.ps-cptd-sched-table td { padding: 16px 16px 16px 0; }
.ps-cptd-sched-table td.cell-stage { font-weight: 800; letter-spacing: -0.01em; }
.ps-cptd-sched-table td.cell-date { font-variant-numeric: tabular-nums; color: var(--ps-mute-700); white-space: nowrap; }
.ps-cptd-sched-table td.cell-note { color: var(--ps-mute-700); }
.ps-cptd-sched-table td.cell-status { text-align: right; padding-right: 8px; }
/* D-day / 상태 배지 */
.ps-cptd-sched-badge {
  display: inline-flex; align-items: center; padding: 2px 8px;
  font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.18em;
  border: 1px solid var(--ps-mute-300); color: var(--ps-mute-500);
  font-variant-numeric: tabular-nums;
}
.ps-cptd-sched-badge.is-now { border-color: var(--ps-ink); background: var(--ps-accent); color: var(--ps-ink); }
.ps-cptd-sched-badge.is-next { border-color: var(--ps-ink); color: var(--ps-ink); }

/* ── 보상금 섹션: 테이블 (수상 내용/수/상금) ── */
.ps-cptd-prize-wrap { overflow-x: auto; }
.ps-cptd-prize-table { width: 100%; border-collapse: collapse; font-size: 0.9375rem; }  /* text-sm=15px */
.ps-cptd-prize-table thead tr { border-bottom: 1px solid var(--ps-ink); }
.ps-cptd-prize-table th { margin: 0; padding: 12px 16px 12px 0; }
.ps-cptd-prize-table th.col-content { text-align: left; }
.ps-cptd-prize-table th.col-count { text-align: right; width: 64px; padding: 12px 16px; }
.ps-cptd-prize-table th.col-amount { text-align: right; width: 128px; padding: 12px 0 12px 16px; }
.ps-cptd-prize-table tbody tr { border-bottom: 1px solid var(--ps-mute-100); }
.ps-cptd-prize-table td { padding: 16px 0; vertical-align: top; }
.ps-cptd-prize-table td.cell-content { padding-right: 16px; }
.ps-cptd-prize-table td.cell-content .rank { color: var(--ps-mute-500); margin: 0; }
.ps-cptd-prize-table td.cell-content .content { margin: 4px 0 0; font-weight: 600; }
.ps-cptd-prize-table td.cell-count { text-align: right; padding: 16px; font-variant-numeric: tabular-nums; }
.ps-cptd-prize-table td.cell-amount { text-align: right; padding: 16px 0 16px 16px; font-variant-numeric: tabular-nums; }

/* ── 대상지 섹션: 주소 + 카카오맵 + 외부 지도 링크 ── */
.ps-cptd-site-addr { margin: 0; font-size: 1rem; }  /* 배포본 text-base */
.ps-cptd-site-mapbox {
  margin-top: 24px; position: relative; width: 100%; aspect-ratio: 21 / 9;
  border: 1px solid var(--ps-ink); background: var(--ps-paper);
  isolation: isolate;  /* 지도 내부 z-index 가 sticky 헤더/네비 위로 안 뜨게 격리 */
}
.ps-cptd-site-map { position: absolute; inset: 0; z-index: 0; }
/* ── 공모/아카이브 목록 '지도 보기' [2026-09-27] ──
   대상지 지도(.ps-cptd-site-mapbox)와 같은 카카오맵 + .ps-map-pin 커스텀 핀을 재사용하되,
   여러 건을 한 지도에 뿌리는 전체화면형 컨테이너라 이쪽만 따로 둔다. */
.ps-cptt-mapview {
  margin-top: 8px; position: relative; width: 100%; height: min(70vh, 640px);
  border: 1px solid var(--ps-ink); background: var(--ps-paper);
  isolation: isolate;
}
.ps-cptt-map { position: absolute; inset: 0; z-index: 0; }
.ps-cptt-map img { max-width: none; filter: grayscale(0.9) contrast(0.95); }
.ps-cptt-map-error { padding: 24px; color: var(--ps-mute-500); font-size: 14px; }
.ps-map-count {
  /* 확대/축소 버튼(좌상단 10,10)과 겹치지 않게 우상단에 둔다. button 엘리먼트라 기본 버튼
     스타일(테두리 없음 등)을 리셋한다 — 시각은 예전 div 배지와 동일하게 유지. */
  appearance: none; cursor: pointer; font: inherit; color: inherit;
  position: absolute; right: 12px; top: 12px; z-index: 5;
  display: inline-flex; align-items: center; gap: 8px;
  background: var(--ps-paper); border: 1px solid var(--ps-ink);
  padding: 6px 10px; font-size: 12px; font-weight: 800; letter-spacing: 0.16em; text-transform: uppercase;
  transition: background 140ms ease, color 140ms ease;
}
.ps-map-count:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-map-count:hover .dot { background: var(--ps-paper); }
.ps-map-count:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-map-count .dot { width: 8px; height: 8px; border-radius: 9999px; background: var(--ps-ink); transition: background 140ms ease; }
/* 건수 배지 → 목록 패널 [2026-09-27] — 배지 바로 아래로 펼쳐지는 디스클로저 패널 */
.ps-map-panel {
  position: absolute; right: 12px; top: 52px; z-index: 6;
  width: min(320px, calc(100% - 24px)); max-height: min(70%, 420px);
  display: flex; flex-direction: column;
  background: var(--ps-paper); border: 1px solid var(--ps-ink);
  box-shadow: 0 8px 24px -8px rgba(0,0,0,0.35);
}
/* ⚠ [hidden] 특이도 함정 — .ps-map-panel{display:flex} 가 단독 클래스 선택자라, 브라우저 기본
   [hidden]{display:none} 과 특이도가 같은 상태에서 소스 순서상 이 시트가 나중에 로드돼 이겨
   버린다. 그래서 hidden 속성을 줘도(닫아도) 계속 flex 로 보였다 — 열림/닫힘이 전혀 안 되는
   것처럼 보인 원인 [2026-09-27]. 특이도를 명시적으로 더 높여 되돌린다. */
.ps-map-panel[hidden] { display: none; }
.ps-map-panel-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 10px 12px; border-bottom: 1px solid var(--ps-mute-300); flex-shrink: 0;
}
.ps-map-panel-title { margin: 0; font-size: 12px; font-weight: 800; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ps-mute-700); }
.ps-map-panel-close {
  appearance: none; border: 0; background: transparent; cursor: pointer;
  font-size: 18px; line-height: 1; color: var(--ps-ink); padding: 2px 4px;
}
.ps-map-panel-close:hover { color: var(--ps-seoul-red); }
.ps-map-panel-close:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 1px; }
.ps-map-panel-list { list-style: none; margin: 0; padding: 6px; overflow-y: auto; }
.ps-map-panel-list li + li { border-top: 1px solid var(--ps-mute-100); }
.ps-map-panel-list a {
  display: block; padding: 9px 8px; font-size: 13.5px; color: var(--ps-ink); text-decoration: none;
}
.ps-map-panel-list a:hover { background: var(--ps-mute-100); text-decoration: underline; }
.ps-map-panel-list a:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: -2px; }
.ps-map-panel-empty { padding: 16px 8px; color: var(--ps-mute-500); font-size: 13px; text-align: center; }
/* 커스텀 확대/축소 버튼 (좌상단) — 카카오 기본 ZoomControl 슬라이더 스케일바 제거용 */
.ps-cptd-site-mapbox .ps-map-zoom,
.ps-cptt-mapview .ps-map-zoom {
  position: absolute; left: 10px; top: 10px; z-index: 5;
  display: flex; flex-direction: column;
  border: 1px solid var(--ps-ink); background: var(--ps-paper);
  box-shadow: 0 2px 8px -2px rgba(0,0,0,0.3);
}
.ps-cptd-site-mapbox .ps-map-zoom button,
.ps-cptt-mapview .ps-map-zoom button {
  width: 30px; height: 30px; display: grid; place-items: center;
  background: var(--ps-paper); color: var(--ps-ink); border: 0; cursor: pointer;
  font-size: 18px; font-weight: 700; line-height: 1; padding: 0;
  transition: background 140ms ease, color 140ms ease;
}
.ps-cptd-site-mapbox .ps-map-zoom .zin,
.ps-cptt-mapview .ps-map-zoom .zin { border-bottom: 1px solid var(--ps-mute-300); }
.ps-cptd-site-mapbox .ps-map-zoom button:hover,
.ps-cptt-mapview .ps-map-zoom button:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-site-mapbox .ps-map-zoom button:focus-visible,
.ps-cptt-mapview .ps-map-zoom button:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: -2px; }
/* 카카오 지도 타일은 img — .ps-cptd img{max-width:100%} 리셋이 타일을 찌그러뜨리지
   않도록 해제. Leaflet 과 달리 카카오 CSS 엔 !important 오버라이드가 없음.
   grayscale: 카카오 기본 지도가 너무 쨍해서 회색조로 톤다운(핀은 div 라 영향 없음). */
.ps-cptd-site-map img { max-width: none; filter: grayscale(0.9) contrast(0.95); }
/* 커스텀 핀 (dot + halo 펄스) — 카카오 CustomOverlay content. hover/focus 시 확대+라벨. */
.ps-map-pin { position: relative; width: 22px; height: 22px; cursor: pointer; outline: none; }
.ps-map-pin .dot {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 12px; height: 12px; border-radius: 9999px;
  background: var(--ps-ink); border: 2px solid var(--ps-paper);
  box-shadow: 0 1px 4px rgba(0,0,0,0.4); z-index: 2;
  transition: transform 140ms ease, background 140ms ease;
}
.ps-map-pin:hover .dot,
.ps-map-pin:focus-visible .dot { transform: translate(-50%, -50%) scale(1.35); background: var(--ps-seoul-red); }
/* 웹접근성: 키보드 포커스 표시 (dot 둘레 포커스 링) */
.ps-map-pin:focus-visible::before {
  content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 22px; height: 22px; border-radius: 9999px; box-shadow: 0 0 0 2px var(--ps-focus); z-index: 3;
}
/* hover/focus 시 주소 툴팁 (핀 위) — 배포본: 흰 배경 + ink 테두리 + 굵은 주소 */
.ps-map-pin .pin-label {
  position: absolute; left: 50%; bottom: calc(100% + 9px); transform: translateX(-50%);
  white-space: nowrap; background: var(--ps-paper); color: var(--ps-ink);
  border: 1px solid var(--ps-ink); box-shadow: 0 4px 12px -4px rgba(0,0,0,0.35);
  font-size: 12px; padding: 5px 9px; z-index: 4;
  opacity: 0; visibility: hidden; transition: opacity 140ms ease;
  pointer-events: none;
}
.ps-map-pin .pin-label strong { font-weight: 700; }
/* 아래쪽 화살표(tip): ink 테두리 삼각형 위에 흰 삼각형을 겹쳐 테두리 연결 */
.ps-map-pin .pin-label::before,
.ps-map-pin .pin-label::after {
  content: ""; position: absolute; left: 50%; top: 100%; transform: translateX(-50%);
  width: 0; height: 0; border-style: solid;
}
.ps-map-pin .pin-label::before { border-width: 7px 7px 0; border-color: var(--ps-ink) transparent transparent; }
.ps-map-pin .pin-label::after  { border-width: 6px 6px 0; border-color: var(--ps-paper) transparent transparent; margin-top: -1px; }
.ps-map-pin:hover .pin-label,
.ps-map-pin:focus-visible .pin-label { opacity: 1; visibility: visible; }
.ps-map-pin .halo {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 22px; height: 22px; border-radius: 9999px;
  background: var(--ps-accent); opacity: 0.55; z-index: 1;
  animation: ps-pin-pulse 1.8s ease-out infinite;
}
@keyframes ps-pin-pulse {
  0%   { transform: translate(-50%, -50%) scale(0.6); opacity: 0.6; }
  70%  { transform: translate(-50%, -50%) scale(1.6); opacity: 0; }
  100% { opacity: 0; }
}
@media (prefers-reduced-motion: reduce) { .ps-map-pin .halo { animation: none; } }
/* 외부 지도 링크 */
.ps-cptd-site-links { margin-top: 16px; display: flex; flex-direction: column; gap: 10px; }
.ps-cptd-site-links-label { margin: 0; color: var(--ps-mute-500); }  /* 간격은 부모 gap:10px 이 담당 */
.ps-cptd-maplinks { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin: 0; padding: 0; }
@media (min-width: 640px) { .ps-cptd-maplinks { max-width: 28rem; } }
.ps-cptd-maplink {
  display: flex; flex-direction: column; gap: 6px; height: 100%;
  border: 1px solid var(--ps-ink); padding: 10px 12px;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-maplink:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-maplink .name-row { display: flex; align-items: center; gap: 6px; }
.ps-cptd-maplink .dot { width: 10px; height: 10px; flex: 0 0 auto; border-radius: 9999px; box-shadow: 0 0 0 1px rgba(10,10,10,0.15); }
.ps-cptd-maplink .name { font-size: 13px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ps-cptd-maplink .open {
  font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.1em;
  color: var(--ps-mute-500);
}
.ps-cptd-maplink:hover .open { color: var(--ps-paper); }

/* ── 심사위원 섹션: 카드 그리드 (초상 1:1 + 이름 + 역할 + S-POOL) ── */
.ps-cptd-jury-grid {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; align-items: start;
  margin: 0; padding: 0; list-style: none;
}
@media (min-width: 640px) { .ps-cptd-jury-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1024px) { .ps-cptd-jury-grid { grid-template-columns: repeat(4, 1fr); } }
.ps-cptd-jury-grid > li { list-style: none; }
.ps-cptd-jury-link { display: block; }
/* 초상 프레임 (이니셜 플레이스홀더) — 라벨 하단 표기 */
.ps-cptd-jury-frame {
  position: relative; aspect-ratio: 1 / 1; display: grid; place-items: center;
  overflow: hidden; background: var(--ps-mute-100); color: var(--ps-ink);
  font-weight: 900; text-transform: uppercase; font-size: clamp(2rem, 6vw, 3.5rem);
}
.ps-cptd-jury-frame::after {
  content: attr(data-label); position: absolute; left: 10px; bottom: 8px;
  font-size: 10px; font-weight: 500; letter-spacing: var(--ps-tr-eyebrow);
  text-transform: uppercase; color: var(--ps-mute-500);
}
/* [2026-10-06, 9/28 회의] 사진은 흑백, 사진이 없으면 이름 첫 글자 대신 사람 실루엣(머리+어깨, 아래에 붙인다) */
.ps-cptd-jury-frame.is-photo { filter: grayscale(1); }
.ps-cptd-jury-frame.is-empty { place-items: end center; }
.ps-cptd-jury-frame.is-empty::after { content: none; }   /* 실루엣엔 'PORTRAIT 1:1' 라벨을 안 붙인다 (사용자 요청) */
.ps-cptd-jury-frame.is-empty .ps-jry-ph { display: block; width: 66%; height: auto; fill: var(--ps-mute-300); }
.ps-cptd-jury-name {
  margin: 10px 0 0; font-size: 0.9375rem; font-weight: 700;  /* text-sm=15px */
  transition: color 140ms ease;
}
.ps-cptd-jury-link:hover .ps-cptd-jury-name { color: var(--ps-mute-700); }
.ps-cptd-jury-chair {
  margin: 2px 0 0; display: inline-flex; align-items: center; gap: 6px;
  font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;
  color: var(--ps-ink);
}
.ps-cptd-jury-chair .dot { display: inline-block; width: 6px; height: 6px; border-radius: 9999px; background: var(--ps-accent); }
/* 예비심사위원 — 이름 옆 꼬리표 */
.ps-cptd-jury-reserve {
  margin-left: 6px; vertical-align: 1px;
  font-size: 12px; font-weight: 600; color: var(--ps-mute-700); white-space: nowrap;
}
.ps-cptd-jury-role {
  margin: 2px 0 0; font-size: 13px; color: var(--ps-mute-700);  /* text-xs=13px */
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
/* S-POOL 선정 사유 버튼 */
.ps-cptd-jury-spool-wrap { margin-top: 10px; }   /* 업체 디자인 mt-2.5 */
.ps-cptd-jury-spool {
  display: inline-flex; align-items: center; gap: 4px; cursor: pointer;
  background: var(--ps-accent); color: var(--ps-ink); border: 0;
  height: 22px; padding: 0 8px; line-height: 1;  /* 배포본 높이 22px 고정 */
  font-size: 12px; font-weight: 900;
  text-transform: uppercase; letter-spacing: 0.08em; transition: opacity 160ms ease;
}
.ps-cptd-jury-spool:hover { opacity: 0.8; }
.ps-cptd-jury-spool:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptd-jury-spool .caret { font-size: 10px; transition: transform 160ms ease; }
.ps-cptd-jury-spool[aria-expanded="true"] .caret { transform: rotate(180deg); }
/* 선정 사유 — 펼침 [2026-10-22] 업체 디자인: mt-2 space-y-1 border-l-2 accent pl-3 text-[13px] leading-snug mute-700
   (display 를 주지 않는다 — [hidden] 이 풀린다) */
/* ⚠ .ps-cptd ul { margin:0; padding:0 } (0,1,1) 이 덮으므로 .ps-cptd 를 앞에 붙인다 */
.ps-cptd .ps-cptd-jury-spool-panel {
  margin: 8px 0 0; padding: 0 0 0 12px; list-style: none; border-left: 2px solid var(--ps-accent);
  font-size: 13px; line-height: 1.375; color: var(--ps-mute-700);
}
.ps-cptd .ps-cptd-jury-spool-panel > li { list-style: none; }
.ps-cptd .ps-cptd-jury-spool-panel > li + li { margin-top: 4px; }
.ps-cptd .ps-cptd-jury-spool-panel > li.more { font-size: 12px; color: var(--ps-mute-500); }
.ps-cptd .ps-cptd-jury-spool-panel > li.cond { margin-top: 8px; font-size: 12px; }
.ps-cptd .ps-cptd-jury-spool-panel > li.cond b { display: block; color: var(--ps-ink); font-weight: 700; }

/* ── 공지사항 섹션: 목록 (번호/제목/PIN/날짜) ── */
.ps-cptd-notices { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--ps-ink); }
.ps-cptd-notices > li { list-style: none; border-bottom: 1px solid var(--ps-mute-300); }
.ps-cptd-notices > li.ps-cptd-jury-empty { padding: 16px 0; }
.ps-cptd-notice-btn {
  width: 100%; display: grid; grid-template-columns: 2.5rem 1fr auto;
  align-items: center; gap: 16px; padding: 16px 0; text-align: left;
  background: none; border: 0; cursor: pointer; color: inherit;
  font-size: 1rem;  /* button 은 font-size 미상속 → 질의응답 타이틀(16px)과 동일하게 명시 */
  transition: background 140ms ease;
}
.ps-cptd-notice-btn:hover { background: var(--ps-mute-50); }
.ps-cptd-notice-btn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: -2px; }
.ps-cptd-notice-btn .num {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 700;
  color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}
.ps-cptd-notice-btn .title {
  font-weight: 600; letter-spacing: -0.01em; display: flex; align-items: center; gap: 8px;
}
.ps-cptd-notice-btn .pin {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  border: 1px solid var(--ps-ink); padding: 2px 6px; background: var(--ps-accent); color: var(--ps-ink);
  flex: 0 0 auto;
}
.ps-cptd-notice-btn .date {
  font-size: 13px; color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}

/* ── 질의응답 섹션: 안내 + 목록 + 더보기 ── */
.ps-cptd-qna-note {
  margin: 0 0 24px; font-size: 0.9375rem; line-height: 1.625; color: var(--ps-mute-700);
  border-left: 2px solid var(--ps-accent); padding-left: 16px;
}
.ps-cptd-qna-note .link {
  font-weight: 700; color: var(--ps-ink);
  text-decoration: underline; text-decoration-color: var(--ps-accent);
  text-decoration-thickness: 2px; text-underline-offset: 2px;
}
.ps-cptd-qna-note .link:hover { background: var(--ps-accent); }
.ps-cptd-qna-list { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--ps-ink); }
.ps-cptd-qna-list > li {
  list-style: none; display: grid; grid-template-columns: 2.5rem 1fr auto;
  align-items: baseline; gap: 16px; padding: 16px 0; border-bottom: 1px solid var(--ps-mute-300);
}
.ps-cptd-qna-list > li.ps-cptd-jury-empty { display: block; }
.ps-cptd-qna-list .num {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 700;
  color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}
.ps-cptd-qna-list .title { font-weight: 600; letter-spacing: -0.01em; line-height: 1.375; }
.ps-cptd-qna-list .date {
  font-size: 13px; color: var(--ps-mute-500); font-variant-numeric: tabular-nums; white-space: nowrap;
}
/* 질의 목록도 공지사항처럼 — 눌러서 본문 팝업을 여는 행 */
.ps-cptd-qna-list > li:not(.ps-cptd-jury-empty) { display: block; padding: 0; gap: 0; }
/* 질의 답변 [2026-10-23] — 목록 행의 '답변' 표시 + 팝업 안 답변 칸 */
.ps-cptd-notice-btn .ans {
  font-size: 11px; letter-spacing: 0.08em; font-weight: 800;
  border: 1px solid var(--ps-ink); padding: 1px 6px; color: var(--ps-ink); flex: 0 0 auto;
}
/* 답변 상자 — 공지 팝업 첨부파일 한 줄(.ps-cptd-modal-filelist a)과 같은 테두리·여백·글자 크기 */
.ps-cptd-qna-answer-box {
  padding: 11px 14px; border: 1px solid var(--ps-mute-100); background: var(--ps-paper); color: var(--ps-ink);
  font-size: 0.875rem; line-height: 1.7; white-space: pre-line; word-break: break-all;
}
/* 팝업 안 본인 글 수정/삭제 버튼 묶음 */
.ps-cptd-modal-actions { margin-top: 22px; display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
.ps-cptd-modal-actions .button {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 0; height: auto; line-height: 1; border-radius: 0;
  padding: 9px 22px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-modal-actions .button.white2 { background: transparent; color: var(--ps-ink); border: 1px solid var(--ps-ink); }
.ps-cptd-modal-actions .button.white2:hover,
.ps-cptd-modal-actions .button.white2:active { background: var(--ps-mute-100); color: var(--ps-ink); border-color: var(--ps-ink); }
.ps-cptd-modal-actions .button.graphite { background: var(--ps-ink); color: var(--ps-paper); border: 1px solid var(--ps-ink); }
.ps-cptd-modal-actions .button.graphite:hover,
.ps-cptd-modal-actions .button.graphite:active { background: var(--ps-mute-700); color: var(--ps-paper); border-color: var(--ps-ink); }
/* 더보기 + 카운트 */
.ps-cptd-qna-more { margin-top: 24px; display: flex; align-items: center; justify-content: center; gap: 12px; }
.ps-cptd-qna-more[hidden] { display: none; }
.ps-cptd-qna-more-btn {
  cursor: pointer; border: 1px solid var(--ps-ink); background: transparent; color: var(--ps-ink);
  padding: 8px 20px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-qna-more-btn:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-qna-more-btn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptd-qna-more-count {
  background: var(--ps-ink); color: var(--ps-paper); padding: 8px 12px;
  font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums;
}

/* 질의등록 버튼 — 승인된 참가자 + 질의접수 기간에만 노출. 더보기 버튼과 같은 톤(테두리→hover 채움) */
.ps-cptd-qna-actions { display: flex; justify-content: flex-end; margin-bottom: 16px; }
.ps-cptd-qna-write {
  cursor: pointer; border: 1px solid var(--ps-ink); background: transparent; color: var(--ps-ink);
  padding: 9px 22px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-qna-write:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-qna-write:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }

/* 질의등록 모달 폼 (공지 팝업 is-notice 안) */
.ps-cptd-qna-form { display: flex; flex-direction: column; gap: 16px; }
.ps-cptd-qna-form .fld { display: flex; flex-direction: column; gap: 6px; }
.ps-cptd-qna-form .lbl {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.14em; font-weight: 800; color: var(--ps-mute-500);
}
.ps-cptd-qna-form input[type="text"],
.ps-cptd-qna-form textarea {
  width: 100%; box-sizing: border-box; border: 1px solid var(--ps-mute-300); background: var(--ps-paper);
  color: var(--ps-ink); padding: 10px 12px; font: inherit; line-height: 1.5;
}
.ps-cptd-qna-form input[type="text"]:focus,
.ps-cptd-qna-form textarea:focus { outline: none; border-color: var(--ps-ink); }
.ps-cptd-qna-form textarea { resize: vertical; min-height: 160px; }
.ps-cptd-qna-form-hint { margin: 12px 0 0; font-size: 12.5px; line-height: 1.55; color: var(--ps-mute-500); }
.ps-cptd-qna-form-foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 20px; }
.ps-cptd-qna-form-cancel,
.ps-cptd-qna-form-submit {
  cursor: pointer; padding: 9px 22px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  border: 1px solid var(--ps-ink); transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-qna-form-cancel { background: transparent; color: var(--ps-ink); }
.ps-cptd-qna-form-cancel:hover { background: var(--ps-mute-100); }
.ps-cptd-qna-form-submit { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-qna-form-submit:hover { background: var(--ps-mute-700); }
.ps-cptd-qna-form-submit:disabled { opacity: 0.5; cursor: default; }

/* ── 다운로드 섹션: 분류별 파일 목록 ── */
.ps-cptd-dl-groups { display: flex; flex-direction: column; gap: 40px; }
.ps-cptd-dl-cat-head {
  margin: 0 0 12px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em;
  font-weight: 800; color: var(--ps-mute-500);
}
.ps-cptd-dl-list { margin: 0; padding: 0; list-style: none; border-top: 1px solid var(--ps-ink); }
.ps-cptd-dl-list > li { list-style: none; border-bottom: 1px solid var(--ps-mute-300); }
.ps-cptd-dl-link {
  display: grid; grid-template-columns: 2.5rem 1fr auto 2rem;
  align-items: center; gap: 16px; padding: 16px 0; color: inherit;
  transition: background 140ms ease;
}
.ps-cptd-dl-link:hover { background: var(--ps-mute-50); }
.ps-cptd-dl-link:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: -2px; }
.ps-cptd-dl-link .num {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 700;
  color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}
.ps-cptd-dl-link .title {
  font-weight: 600; letter-spacing: -0.01em; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.ps-cptd-dl-link .meta {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.14em; font-weight: 700;
  color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}
.ps-cptd-dl-link .icon {
  display: inline-flex; align-items: center; justify-content: flex-end;
  color: var(--ps-ink); transition: transform 140ms ease;
}
.ps-cptd-dl-link:hover .icon { transform: translateX(4px); }
/* 참가자 전용 잠금 배지 + 잠김 상태 */
.ps-cptd-dl-link .lock-badge {
  display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto;
  font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.14em;
  border: 1px solid var(--ps-ink); padding: 2px 6px;
}
.ps-cptd-dl-link.is-locked { cursor: pointer; }
.ps-cptd-dl-link.is-locked .icon.lock { color: var(--ps-mute-500); font-size: 14px; }
.ps-cptd-dl-link.is-locked:hover .icon { transform: none; }

/* ── 상세 인터랙션: 모달 / 공유패널 / S-POOL 사유 / 북마크 ── */
/* 공용 모달 */
.ps-cptd-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 16px; }
.ps-cptd-modal[hidden] { display: none; }
.ps-cptd-modal-backdrop { position: absolute; inset: 0; background: rgba(10,10,10,0.55); }
.ps-cptd-modal-dialog {
  position: relative; z-index: 1; width: min(92vw, 640px); max-height: 80vh; overflow-y: auto;
  background: var(--ps-paper); border: 1px solid var(--ps-ink);
  box-shadow: 0 24px 64px -20px rgba(0,0,0,0.5);
}
/* 제목이 두 줄(머리말+제목)이 될 수 있어 닫기 버튼은 위쪽에 맞춘다 */
.ps-cptd-modal-head {
  position: sticky; top: 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 16px;
  padding: 20px 24px; border-bottom: 1px solid var(--ps-ink); background: var(--ps-paper);
}
.ps-cptd-modal-headmain { min-width: 0; }   /* 긴 제목이 닫기 버튼을 밀어내지 않게 */
.ps-cptd-modal-title { margin: 0; font-size: 0.9375rem; font-weight: 800; text-transform: uppercase; letter-spacing: 0.08em; }
.ps-cptd-modal-eyebrow {
  margin: 0; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.18em;
  color: var(--ps-mute-500); font-variant-numeric: tabular-nums;
}
.ps-cptd-modal-eyebrow[hidden] { display: none; }   /* 접수명단 팝업엔 날짜가 없다 */
.ps-cptd-modal-eyebrow + .ps-cptd-modal-title { margin-top: 8px; }
.ps-cptd-modal-close { cursor: pointer; border: 0; background: transparent; color: var(--ps-ink); font-size: 20px; line-height: 1; padding: 4px 8px; }
.ps-cptd-modal-close:hover { color: var(--ps-mute-700); }
.ps-cptd-modal-close:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-cptd-modal-body { padding: 24px; }
.ps-cptd-modal-text { margin: 0; font-size: 0.9375rem; line-height: 1.7; color: var(--ps-ink); }

/* ── 심사위원 기피·불공정 신고 (2026-10-07) — 심사위원 섹션 버튼 + 공용 모달 안 내용 ──
   ⚠ 라임(--ps-accent)은 바탕 전용. 글자는 ink/mute. */
.ps-cptd-jury-rpt { display: flex; justify-content: flex-end; margin: 0 0 16px; }
.ps-cptd-jury-rpt-btn {
  border: 1px solid var(--ps-ink); background: var(--ps-paper); color: var(--ps-ink);
  padding: 8px 14px; font-size: 13px; font-weight: 700; cursor: pointer; transition: background .15s, color .15s;
}
.ps-cptd-jury-rpt-btn:hover { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-jury-rpt-btn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-rpt-guide { margin: 0 0 16px; font-size: 14px; line-height: 1.6; color: var(--ps-mute-700); }
.ps-rpt-guide b { color: var(--ps-ink); }
.ps-rpt-empty { margin: 0; font-size: 14px; color: var(--ps-mute-700); }
.ps-rpt-rows { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--ps-ink); }
.ps-rpt-row { padding: 14px 0; border-bottom: 1px solid var(--ps-mute-200); }
.ps-rpt-row .nm { margin: 0; font-size: 15px; font-weight: 800; color: var(--ps-ink); }
/* [2026-10-07 개편] 줄마다 [첨부] 하나 + 맨 아래 [제출하기] — 이름과 첨부 버튼을 한 줄에 */
.ps-rpt-row .top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.ps-rpt-row .files { margin-top: 8px; }
.ps-rpt-row .files .st {
  flex: none; font-size: 11px; font-weight: 700; padding: 1px 6px; border: 1px solid var(--ps-mute-400); color: var(--ps-mute-700);
}
.ps-rpt-row .files .st.is-sent { border-color: var(--ps-ink); background: var(--ps-ink); color: var(--ps-paper); }
.ps-rpt-row .files.is-pend .fn { color: var(--ps-mute-700); word-break: break-all; }
.ps-rpt-pdel {
  flex: none; width: 24px; height: 24px; border: 1px dashed var(--ps-mute-400); background: var(--ps-paper);
  color: var(--ps-mute-700); font-size: 15px; line-height: 1; cursor: pointer;
}
.ps-rpt-deadline { margin: -6px 0 16px; padding: 10px 12px; border-left: 3px solid var(--ps-ink); background: var(--ps-mute-50); font-size: 13px; line-height: 1.6; color: var(--ps-mute-700); }
.ps-rpt-deadline b { color: var(--ps-ink); }
/* 제출 줄은 창 아래에 고정 — 스크롤 주체가 .ps-cptd-modal-dialog 라 sticky bottom 이 거기에 붙는다(제목줄 sticky top 과 같은 원리).
   본문 여백(24px)을 음수 마진으로 걷어내 창 폭 전체를 덮고, 맨 끝 요소라 아래 여백도 걷는다. */
.ps-rpt-submit {
  position: sticky; bottom: 0; z-index: 1;
  display: flex; align-items: center; justify-content: flex-end; gap: 12px;
  margin: 16px -24px -24px; padding: 14px 24px;
  border-top: 1px solid var(--ps-ink); background: var(--ps-paper);
}
.ps-rpt-submit .cnt { font-size: 13px; color: var(--ps-mute-700); }
.ps-rpt-submitbtn {
  border: 1px solid var(--ps-ink); background: var(--ps-ink); color: var(--ps-paper);
  padding: 10px 22px; font-size: 14px; font-weight: 800; cursor: pointer;
}
.ps-rpt-submitbtn[disabled] { opacity: .4; cursor: default; }
.ps-rpt-submitbtn:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-rpt-row .files { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.ps-rpt-row .files li { display: flex; align-items: center; gap: 8px; font-size: 14px; }
.ps-rpt-row .files a { color: var(--ps-ink); text-decoration: underline; text-underline-offset: 2px; word-break: break-all; }
.ps-rpt-fdel {
  flex: none; width: 24px; height: 24px; border: 1px solid var(--ps-mute-400); background: var(--ps-paper);
  color: var(--ps-mute-700); font-size: 15px; line-height: 1; cursor: pointer;
}
.ps-rpt-fdel:hover { border-color: var(--ps-ink); color: var(--ps-ink); }
.ps-rpt-row .lock { margin: 0; font-size: 13px; color: var(--ps-mute-500); }
.ps-rpt-row .up { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
/* 파일 입력은 화면에서 감추고 라벨을 버튼처럼 — 감춰도 키보드로 닿게(display:none 금지) */
.ps-rpt-row .ps-rpt-file { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.ps-rpt-row .ps-rpt-file:focus-visible + .pick { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
.ps-rpt-row .pick {
  border: 1px solid var(--ps-mute-400); background: var(--ps-paper); color: var(--ps-ink);
  padding: 6px 12px; font-size: 13px; font-weight: 700; cursor: pointer;
}
.ps-rpt-row .sel { flex: 1 1 160px; min-width: 0; font-size: 13px; color: var(--ps-mute-700); word-break: break-all; }
.ps-rpt-upbtn {
  border: 1px solid var(--ps-ink); background: var(--ps-ink); color: var(--ps-paper);
  padding: 6px 14px; font-size: 13px; font-weight: 700; cursor: pointer;
}
.ps-rpt-upbtn[disabled] { opacity: .5; cursor: default; }
.ps-rpt-note { margin: 16px 0 0; padding: 12px 14px; background: var(--ps-mute-50); font-size: 13px; line-height: 1.6; color: var(--ps-mute-700); }

/* 공지 팝업(is-notice) — 접수명단 팝업과 서식이 다르다.
   제목은 대문자 변환 없이 크게(글이라서), 본문은 한 단계 작고 옅게. */
.ps-cptd-modal.is-notice .ps-cptd-modal-title {
  font-size: var(--ps-fs-lead); font-weight: 800; letter-spacing: -0.01em;
  text-transform: none; line-height: 1.3;
}
.ps-cptd-modal.is-notice .ps-cptd-modal-text {
  font-size: 0.875rem; line-height: 1.625; color: var(--ps-mute-700);
}

/* 공지 팝업 안의 첨부파일 / 관련영상.
   구 화면(viewDetailCpttNoti.jsp)의 ul.add_area 마크업을 그대로 들여오면 팝업과 따로 놀아서,
   renderFnNotices() 가 파일명·주소만 데이터로 뽑고 여기 규칙으로 다시 그린다. */
.ps-cptd-modal-files { margin-top: 22px; padding-top: 16px; border-top: 1px solid var(--ps-mute-100); }
.ps-cptd-modal-files-lbl {
  margin: 0 0 10px; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.14em; color: var(--ps-mute-500);
}
.ps-cptd-modal-filelist { margin: 0; padding: 0; list-style: none; }
.ps-cptd-modal-filelist li + li { margin-top: -1px; }
.ps-cptd-modal-filelist a {
  display: flex; align-items: center; gap: 12px;
  position: relative;   /* 아래 z-index 를 받으려면 필요하다 */
  padding: 11px 14px; border: 1px solid var(--ps-mute-100);
  background: var(--ps-paper); color: var(--ps-ink);
  font-size: 0.875rem; text-decoration: none;
  transition: border-color 160ms ease, background 160ms ease;
}
/* ⚠ z-index 를 빼지 말 것.
   위 li + li { margin-top:-1px } 로 항목끼리 테두리를 겹쳐 놨기 때문에,
   그냥 두면 다음 항목의 회색 border-top 이 나중에 그려져 지금 가리키는 항목의
   border-bottom 을 덮는다(마지막 항목만 아래쪽 색이 바뀌어 보였다). */
.ps-cptd-modal-filelist a:hover { border-color: var(--ps-ink); background: var(--ps-mute-50); z-index: 1; }
.ps-cptd-modal-filelist a:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; z-index: 1; }
/* 파일명이 길면 줄이고, '내려받기'는 오른쪽 끝에 붙여 둔다 */
.ps-cptd-modal-filelist .nm {
  flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ps-cptd-modal-filelist .act {
  flex-shrink: 0; font-size: 12px; font-weight: 700; color: var(--ps-mute-500);
  text-transform: uppercase; letter-spacing: 0.08em;
}
.ps-cptd-modal-filelist a:hover .act { color: var(--ps-ink); }
/* 관련영상 — 팝업 폭에 맞춰 16:9 로 늘린다 (구 화면은 450×300 고정이었다) */
.ps-cptd-modal-video { position: relative; width: 100%; padding-top: 56.25%; background: var(--ps-mute-100); }
.ps-cptd-modal-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
/* 영상 구역 [2026-10-12] — 홍보·심사·3D. 16:9 상자는 위 관련영상 것을 그대로 쓴다. 넓으면 2열, 좁으면 1열 */
.ps-cptd-videos { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 340px), 1fr)); gap: 24px; }
.ps-cptd-video-lbl { margin: 0 0 8px; color: var(--ps-mute-500); }
/* 접수 명단 테이블 (모달 내) — 배포본: sticky thead + #번호 + 공동 배지 */
.ps-cptd-roster-title { color: var(--ps-mute-500); }  /* #6e6e6e */
.ps-cptd-roster-count { margin-left: 8px; color: var(--ps-seoul-red); font-variant-numeric: tabular-nums; }
.ps-cptd-roster-scroll { overflow-y: auto; margin: -20px; }  /* 모달 본문 패딩 상쇄 → 전체폭 */
.ps-cptd-roster-table { width: 100%; border-collapse: collapse; font-size: 0.9375rem; }
.ps-cptd-roster-table thead { background: var(--ps-mute-50); }
.ps-cptd-roster-table thead th {
  text-align: left; padding: 10px 16px; font-size: 12px; text-transform: uppercase;
  letter-spacing: 0.12em; font-weight: 800; color: var(--ps-mute-700);
  border-bottom: 1px solid var(--ps-mute-300);
}
.ps-cptd-roster-table th.col-no { width: 64px; }
.ps-cptd-roster-table tbody tr { border-top: 1px solid var(--ps-mute-100); vertical-align: top; transition: background 120ms ease; }
.ps-cptd-roster-table tbody tr:first-child { border-top: 0; }
.ps-cptd-roster-table tbody tr:hover { background: var(--ps-mute-50); }
.ps-cptd-roster-table td { padding: 10px 16px; }
.ps-cptd-roster-table td.no { font-variant-numeric: tabular-nums; color: var(--ps-mute-500); white-space: nowrap; }
.ps-cptd-roster-table td.submitter { font-weight: 600; white-space: pre-line; color: var(--ps-mute-500); }  /* #6e6e6e */
.ps-cptd-roster-table td.firm { color: var(--ps-mute-700); white-space: pre-line; }
.ps-cptd-roster-table td.no .joint {
  margin-left: 8px; display: inline-block; vertical-align: middle;
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 800;
  background: #1A3A8F; color: #fff; padding: 1px 6px; border-radius: 2px;
}
/* 공유 패널 */
.ps-cptd-share { position: relative; }
.ps-cptd-share-panel {
  position: absolute; right: 0; top: calc(100% + 8px); z-index: 40; min-width: 11.5rem;
  background: var(--ps-paper); color: var(--ps-ink); border: 1px solid var(--ps-ink);
  box-shadow: 0 12px 32px -16px rgba(0,0,0,0.4);
}
.ps-cptd-share-panel[hidden] { display: none; }
.ps-cptd-share-item {
  display: flex; width: 100%; align-items: center; gap: 10px; text-align: left;
  background: none; border: 0; cursor: pointer; color: inherit;
  padding: 10px 12px; font-size: 13px; font-weight: 600;
  text-decoration: none;
  transition: background 140ms ease, color 140ms ease;
}
.ps-cptd-share-item:hover { background: var(--ps-ink); color: var(--ps-paper); text-decoration: none; }
.ps-cptd-share-item:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: -2px; }
.ps-cptd-share-item .dot { width: 12px; height: 12px; flex: 0 0 auto; border-radius: 9999px; }
.ps-cptd-share-item .dot.has-ring { box-shadow: 0 0 0 1px rgba(10,10,10,0.15); }
/* 북마크 active */
.ps-cptd-hero-iconbtn.is-marked { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-hero-iconbtn.is-marked svg { fill: var(--ps-paper); }
/* S-POOL 선정 사유 패널 */
.ps-cptd-jury-reason {
  margin-top: 8px; font-size: 13px; line-height: 1.6; color: var(--ps-mute-700);
  border-left: 2px solid var(--ps-accent); padding-left: 10px;
}
.ps-cptd-jury-reason[hidden] { display: none; }

/* ── 진행중(open) 히어로: 접수하기 CTA + D/H/M 카운트다운 ── */
.ps-cptd-hero-apply {
  display: inline-flex; align-items: center; padding: 12px 24px;
  background: var(--ps-accent); color: var(--ps-ink); border: 1px solid var(--ps-ink);
  font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.16em;
  transition: background 160ms ease, color 160ms ease;
}
.ps-cptd-hero-apply:hover { background: var(--ps-ink); color: var(--ps-accent); }
.ps-cptd-hero-apply:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
/* 공모결과 히어로: 당선작 보기 CTA (검정 → hover 반전) */
a.ps-cptd-hero-result {
  display: inline-flex; align-items: center; padding: 12px 24px;
  background: var(--ps-ink); color: #fff; border: 1px solid var(--ps-ink);
  font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.16em;
  transition: background 160ms ease, color 160ms ease;
}
a.ps-cptd-hero-result:hover { background: transparent; color: var(--ps-ink); }
.ps-cptd-hero-result:focus-visible { outline: 2px solid var(--ps-focus); outline-offset: 2px; }
/* 남은시간 라이브 펄스 dot */
.ps-cptd-hero-live { display: flex; align-items: center; gap: 8px; }
.ps-cptd-hero-live[hidden] { display: none; }
.ps-cptd-hero-live .pulse {
  display: inline-block; width: 6px; height: 6px; border-radius: 9999px;
  background: var(--ps-accent); animation: ps-live-pulse 1.6s ease-in-out infinite;
}
@keyframes ps-live-pulse { 0%,100%{ opacity: 1; } 50%{ opacity: 0.3; } }
@media (prefers-reduced-motion: reduce) { .ps-cptd-hero-live .pulse { animation: none; } }
/* 카운트다운 D/H/M */
.ps-cptd-hero-countdown { display: flex; align-items: baseline; gap: 12px; font-variant-numeric: tabular-nums; }
.ps-cptd-hero-countdown[hidden] { display: none; }
.ps-cptd-hero-countdown .unit { display: inline-flex; align-items: baseline; gap: 4px; }
.ps-cptd-hero-countdown .lab {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; font-weight: 800;
  color: var(--ps-mute-500);
}
.ps-cptd-hero-countdown .val { font-weight: 900; font-size: 1.5rem; line-height: 1; letter-spacing: -0.04em; }
.ps-cptd-hero-countdown .cd-sep { color: var(--ps-mute-300); font-weight: 300; }

/* ── 공모결과(result): 당선작 (목록 + 상세) ── */
.ps-cptd-sub { display: grid; grid-template-columns: 1fr; gap: 32px; align-items: start; }
@media (min-width: 768px) { .ps-cptd-sub { grid-template-columns: 3fr 9fr; gap: 40px; } }

/* 좌: 수상작 목록 */
.ps-cptd-sub-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; border-top: 1px solid var(--ps-ink); }
@media (min-width: 768px) {
  .ps-cptd-sub-list { position: sticky; top: 6rem; align-self: start; max-height: calc(100vh - 8rem); overflow-y: auto; }
}
.ps-cptd-sub-list > li.ps-cptd-jury-empty { padding: 16px 0; border-bottom: 1px solid var(--ps-mute-300); }
/* 당선작이 하나도 없을 때 */
.ps-cptd-sub-list.is-empty { grid-column: 1 / -1; }
.ps-cptd-sub-item {
  width: 100%; text-align: left; border: 0; border-bottom: 1px solid var(--ps-mute-100);
  background: transparent; color: var(--ps-ink); padding: 12px; display: flex; gap: 12px;
  align-items: flex-start; cursor: pointer; transition: background-color 140ms ease, color 140ms ease;
}
.ps-cptd-sub-item:hover { background: var(--ps-mute-50); }
.ps-cptd-sub-item.is-active { background: var(--ps-ink); color: var(--ps-paper); }
.ps-cptd-sub-item .thumb {
  flex: none; width: 56px; aspect-ratio: 4 / 5; border: 1px solid var(--ps-mute-300);
  overflow: hidden; background:
    repeating-linear-gradient(45deg, var(--ps-mute-100), var(--ps-mute-100) 8px, var(--ps-mute-50) 8px, var(--ps-mute-50) 16px);
}
.ps-cptd-sub-item .meta { min-width: 0; flex: 1; display: flex; flex-direction: column; }
.ps-cptd-sub-item .rank { font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 800; color: var(--ps-mute-500); }
.ps-cptd-sub-item .rank .arw { margin-left: 4px; opacity: 0.8; }
.ps-cptd-sub-item .title { margin-top: 4px; font-size: 14px; font-weight: 700; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ps-cptd-sub-item .team { margin-top: 2px; font-size: 13px; color: var(--ps-mute-700); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ps-cptd-sub-item.is-active .rank { color: var(--ps-accent); }
.ps-cptd-sub-item.is-active .team { color: var(--ps-mute-300); }

/* 우: 선택작 상세 */
.ps-cptd-sub-detail { display: flex; flex-direction: column; gap: 40px; }
.ps-cptd-sub-hero { position: relative; display: block; width: 100%; aspect-ratio: 16 / 9; border: 1px solid var(--ps-ink); overflow: hidden; background: var(--ps-mute-50); padding: 0; cursor: pointer; text-align: left; }
.ps-cptd-sub-hero .ph {
  position: absolute; inset: 0; background:
    repeating-linear-gradient(45deg, var(--ps-mute-100), var(--ps-mute-100) 12px, var(--ps-mute-50) 12px, var(--ps-mute-50) 24px);
}
.ps-cptd-sub-hero .badge {
  position: absolute; left: 12px; top: 12px; background: var(--ps-ink); color: var(--ps-paper);
  padding: 4px 8px; font-size: 12px; letter-spacing: 0.18em; font-weight: 800; text-transform: uppercase;
}
.ps-cptd-sub-hero .hover-cta {
  position: absolute; right: 12px; bottom: 12px; background: var(--ps-accent); color: var(--ps-ink);
  padding: 4px 8px; font-size: 12px; letter-spacing: 0.18em; font-weight: 800; text-transform: uppercase;
  opacity: 0; transition: opacity 140ms ease;
}
.ps-cptd-sub-hero .hover-cta.zoom { background: rgba(255, 255, 255, 0.85); color: var(--ps-ink); }
.ps-cptd-sub-hero:hover .hover-cta, .ps-cptd-sub-hero:focus-visible .hover-cta { opacity: 1; }

.ps-cptd-sub-head { display: flex; flex-direction: column; gap: 16px; }
.ps-cptd-sub-name { margin: 0; font-size: clamp(1.75rem, 0.9rem + 2.6vw, 3.75rem); letter-spacing: -0.025em; }
.ps-cptd-sub-name span { display: block; }
.ps-cptd-sub-lead { margin: 0; font-size: var(--ps-fs-lead); color: var(--ps-mute-700); max-width: 44ch; }
.ps-cptd-sub-archive {
  align-self: flex-start; margin-top: 8px; display: inline-flex; align-items: center; gap: 8px;
  padding: 8px 16px; background: var(--ps-accent); color: var(--ps-ink); border: 1px solid var(--ps-ink);
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 800;
  transition: background-color 140ms ease, color 140ms ease;
}
.ps-cptd-sub-archive:hover { background: var(--ps-ink); color: var(--ps-accent); }

.ps-cptd-sub-facts { margin: 0; display: grid; grid-template-columns: 1fr; border-top: 1px solid var(--ps-ink); border-bottom: 1px solid var(--ps-ink); }
@media (min-width: 640px) { .ps-cptd-sub-facts { grid-template-columns: repeat(3, 1fr); } }
.ps-cptd-sub-facts > div { padding: 16px 4px; }
@media (min-width: 640px) {
  .ps-cptd-sub-facts > div { padding: 16px; }
  .ps-cptd-sub-facts > div + div { border-left: 1px solid var(--ps-mute-300); }
}
.ps-cptd-sub-facts dt { color: var(--ps-mute-500); }
.ps-cptd-sub-facts dd { margin: 4px 0 0; font-size: 16px; font-weight: 700; }
.ps-cptd-sub-facts dd.tnum { font-variant-numeric: tabular-nums; }
.ps-cptd-sub-facts dd .pin { margin-left: 12px; font-weight: 400; color: var(--ps-mute-500); }

.ps-cptd-sub-block > .ps-eyebrow { margin: 0 0 16px; }
.ps-cptd-sub-text { margin: 0; font-size: 16px; line-height: 1.7; color: var(--ps-ink); max-width: 68ch; white-space: pre-wrap; }
/* 작품설명 아래 #키워드 (2026-10-06) — 건축인·사무소 화면(ps-arctn.css .ps-kwds)과 같은 모양. 글자만, 링크 아님 */
.ps-cptd-sub-block .ps-kwds { display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 12px 0 0; font-size: 14px; line-height: 1.5; color: var(--ps-mute-700); }

.ps-cptd-sub-reviews { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 24px; }
.ps-cptd-sub-reviews > li { border-left: 2px solid var(--ps-accent); padding-left: 20px; }
.ps-cptd-sub-reviews .who { margin: 0; font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 800; color: var(--ps-mute-500); }
.ps-cptd-sub-reviews .who span { margin-left: 8px; color: var(--ps-ink); }
.ps-cptd-sub-reviews .cmt { margin: 8px 0 0; font-size: 16px; line-height: 1.7; }

.ps-cptd-sub-panels, .ps-cptd-sub-drawings { display: grid; grid-template-columns: 1fr; gap: 12px; }
@media (min-width: 640px) { .ps-cptd-sub-panels, .ps-cptd-sub-drawings { grid-template-columns: repeat(2, 1fr); } }
/* 2026-09-23: [hidden] 은 UA 기본 스타일이라 위 display:grid 규칙에 밀려 무시된다 —
   당선작 "관련도면" 탭을 눌러도 숨긴 패널이 계속 보이던 원인. 명시적으로 이겨야 한다. */
.ps-cptd-sub-drawings[hidden] { display: none; }
.ps-cptd-sub-panel {
  position: relative; aspect-ratio: 4 / 3; border: 1px solid var(--ps-ink); overflow: hidden;
  background: var(--ps-mute-50); padding: 0; width: 100%; display: block; cursor: pointer;
}
.ps-cptd-sub-panel .ph {
  position: absolute; inset: 0; background:
    repeating-linear-gradient(45deg, var(--ps-mute-100), var(--ps-mute-100) 12px, var(--ps-mute-50) 12px, var(--ps-mute-50) 24px);
}
.ps-cptd-sub-panel .tag {
  position: absolute; left: 8px; top: 8px; background: var(--ps-ink); color: var(--ps-paper);
  padding: 2px 8px; font-size: 12px; letter-spacing: 0.16em; font-weight: 800; text-transform: uppercase; font-variant-numeric: tabular-nums;
}

.ps-cptd-sub-tabs { display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid var(--ps-ink); }
.ps-cptd-sub-tabs button {
  padding: 8px 16px; font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 800;
  border: 1px solid transparent; border-bottom: 0; background: transparent; color: var(--ps-mute-500); cursor: pointer;
}
.ps-cptd-sub-tabs button:hover { color: var(--ps-ink); }
.ps-cptd-sub-tabs button.is-active { background: var(--ps-ink); color: var(--ps-paper); border-color: var(--ps-ink); }
.ps-cptd-sub-drawings { margin-top: 16px; }

.ps-cptd-sub-voting {
  margin-top: 24px; align-self: flex-start; display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid var(--ps-ink); padding: 10px 16px; font-size: 12px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.12em; transition: background-color 140ms ease, color 140ms ease;
}
.ps-cptd-sub-voting:hover { background: var(--ps-ink); color: var(--ps-paper); }

/* 이미지 라이트박스 */
.ps-cptd-lightbox {
  position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center;
  background: rgba(10, 10, 10, 0.95); backdrop-filter: blur(2px); -webkit-backdrop-filter: blur(2px);
}
.ps-cptd-lightbox[hidden] { display: none; }
.ps-cptd-lb-close, .ps-cptd-lb-nav {
  position: absolute; z-index: 10; display: grid; place-items: center;
  border: 1px solid var(--ps-paper); background: transparent; color: var(--ps-paper);
  cursor: pointer; transition: background-color 140ms ease, color 140ms ease; line-height: 1;
}
.ps-cptd-lb-close { top: 24px; right: 24px; width: 40px; height: 40px; font-size: 18px; }
.ps-cptd-lb-nav { top: 50%; transform: translateY(-50%); width: 48px; height: 48px; font-size: 24px; }
.ps-cptd-lb-nav.prev { left: 16px; }
.ps-cptd-lb-nav.next { right: 16px; }
@media (min-width: 768px) { .ps-cptd-lb-nav.prev { left: 32px; } .ps-cptd-lb-nav.next { right: 32px; } }
.ps-cptd-lb-close:hover, .ps-cptd-lb-nav:hover { background: var(--ps-paper); color: var(--ps-ink); }
.ps-cptd-lb-figure { margin: 0; max-width: 92vw; max-height: 88vh; display: flex; flex-direction: column; align-items: center; }
.ps-cptd-lb-img {
  width: min(80vw, 1100px); max-width: 100%; aspect-ratio: 4 / 3; max-height: 80vh; border: 1px solid var(--ps-mute-700);
  background:
    repeating-linear-gradient(45deg, var(--ps-mute-700), var(--ps-mute-700) 16px, var(--ps-ink) 16px, var(--ps-ink) 32px);
}
.ps-cptd-lb-cap {
  margin-top: 16px; display: flex; align-items: center; gap: 12px;
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em; font-weight: 700; color: var(--ps-paper);
}
.ps-cptd-lb-cap .idx { font-variant-numeric: tabular-nums; opacity: 0.7; }

/* ═══════════ 투표공개 상세 (심사 결과 공개) ═══════════ */
.ps-vote { margin: 0 auto; padding: var(--ps-section-pad) var(--ps-gutter); }
.ps-vote-back { display: inline-block; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.14em; color: var(--ps-mute-700); }
.ps-vote-back:hover { color: var(--ps-ink); }
.ps-vote-head { margin-top: 24px; border-bottom: 1px solid var(--ps-ink); padding-bottom: 24px; }
.ps-vote-kicker { display: flex; align-items: center; gap: 8px; margin: 0; }
.ps-vote-kicker .dot { display: inline-block; width: 8px; height: 8px; border-radius: 9999px; background: var(--ps-accent); }
.ps-vote-title { margin: 12px 0 0; font-size: clamp(2rem, 1rem + 3vw, 4rem); letter-spacing: -0.025em; }
.ps-vote-stats { margin-top: 20px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 32px; font-size: 14px; }
.ps-vote-stats .stat { font-variant-numeric: tabular-nums; }
.ps-vote-stats .lbl { color: var(--ps-mute-500); }
.ps-vote-stats .num { font-weight: 900; color: var(--ps-seoul-red); }
.ps-vote-head .ps-cptd-hero-stats { margin-top: 20px; }

.ps-vote-section { margin-top: 40px; }
.ps-vote-h2 { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 1.25rem; font-weight: 900; letter-spacing: -0.01em; }
.ps-vote-h2 .mk { color: var(--ps-accent); }
.ps-vote-h2.ps-vote-group { padding-top: 40px; }

.ps-vote-method { margin-top: 24px; border: 1px solid var(--ps-ink); padding: 20px; }
.ps-vote-badge { display: inline-block; margin: 0; padding: 4px 8px; background: var(--ps-ink); color: var(--ps-paper); font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.14em; }
.ps-vote-method-list { list-style: none; margin: 16px 0 0; padding: 0; display: flex; flex-direction: column; gap: 8px; font-size: 14px; line-height: 1.6; }
.ps-vote-method-list li { display: flex; gap: 8px; }
.ps-vote-method-list .ck { color: var(--ps-ink); }

.ps-vote-result { margin-top: 24px; border: 1px solid var(--ps-ink); }
.ps-vote-result-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 32px; padding: 16px 20px; border-bottom: 1px solid var(--ps-ink); background: var(--ps-mute-50); }
.ps-vote-result-head .ttl { margin: 0; font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.14em; }
.ps-vote-result-head .stat { font-size: 14px; font-variant-numeric: tabular-nums; }
.ps-vote-result-head .lbl { color: var(--ps-mute-500); }
.ps-vote-result-head .num { font-weight: 900; }

.ps-vote-pins { padding: 16px 20px; }
.ps-vote-subttl { margin: 0 0 12px; font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.14em; color: var(--ps-mute-700); }
.ps-vote-pin-list { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.ps-vote-pin-list .pin { display: inline-block; padding: 4px 8px; font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; border: 1px solid var(--ps-mute-300); color: var(--ps-mute-700); }
.ps-vote-pin-list .pin.is-win { background: var(--ps-accent); color: var(--ps-ink); border-color: var(--ps-ink); cursor: help; }
.ps-vote-pin-note { margin: 12px 0 0; font-size: 12px; color: var(--ps-mute-500); }

.ps-vote-jurors { padding: 16px 20px; border-top: 1px solid var(--ps-mute-200); }
.ps-vote-juror-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.ps-vote-juror-list li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; font-size: 14px; }
.ps-vote-juror-list .jc { flex: none; min-width: 48px; font-weight: 900; }
.ps-vote-juror-list .pins { color: var(--ps-mute-700); font-variant-numeric: tabular-nums; }

/* 기술검토 종합결과서(공개) — 차수별 전문위원회 종합의견서 본문 (에디터 HTML) */
#ps-trdoc .ps-vote-result > .ps-vote-loading { margin: 0; padding: 22px 24px; color: var(--ps-mute-500); }
.ps-trdoc-opinion { padding: 24px 28px;
	font-size: 15px; line-height: 1.75; color: var(--ps-ink); word-break: keep-all; overflow-wrap: anywhere; }
.ps-trdoc-opinion p { margin: 0 0 .6em; }
.ps-trdoc-opinion img { max-width: 100%; height: auto; }
.ps-trdoc-opinion table { max-width: 100%; border-collapse: collapse; }

/* 종합의견서 */
.ps-cptd-opinion { margin: 0; font-size: 16px; line-height: 1.7; color: var(--ps-ink); max-width: 60ch; white-space: pre-wrap; }   /* 줄바꿈 살림 [2026-10-08] */
