* { box-sizing: border-box; }
/* 목록 페이지마다 세로 스크롤바 유무가 갈려(데이터 건수 차이) .inner 중앙정렬 여백이
   좌우 ~7.5px씩(스크롤바 폭만큼) 흔들리는 문제 — 스크롤바 자리를 항상 예약해서 고정.
   퍼블 원본엔 없는 규칙(퍼블도 이 흔들림 자체는 있음) — PP 단독 안정화 목적으로 추가. */
html { scrollbar-gutter: stable; }
html, body { height: 100%; }
/* ★ `overflow-x: hidden` 을 두지 않는다 (2026-08-05 제거).
   퍼블 common.css 는 `#wrap { min-width: 1200px }` 위에 자기 의도를 적어놨다 —
   "1200 미만에서도 깨지지 않도록 최소폭 고정 (그 이하 가로 스크롤)".
   여기 있던 overflow-x:hidden 은 퍼블에 없는 PP 자체 규칙(39c7fd6, 퍼블 이관 이전)이었고
   바로 그 가로 스크롤을 막아, 좁은 화면에서 우측이 잘린 채 접근 불가가 됐다.
   헤더 쪽 짝은 header-pub.css 의 "고정 헤더 → sticky" 절에 있다. */
body {
    margin: 0;
    font-family: var(--font-sans);
    font-size: var(--fs-14);
    color: var(--color-text);
    background: var(--color-bg);
    -webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
:where([hidden]) { display: none !important; }
/* common.css 파생본은 생성 파일이므로 PP 전용 접근성 보강은 레거시/브릿지 레이어에 둔다. */
.pp-pub a:focus-visible,
.pp-pub button:focus-visible,
.pp-pub input:focus-visible,
.pp-pub select:focus-visible,
.pp-pub textarea:focus-visible,
.pp-pub [tabindex]:focus-visible {
    outline: 2px solid var(--color-focus-ring, var(--color-point));
    outline-offset: 2px;
}
/* 네이티브 <input type="date"> 는 자체 최소 콘텐츠 폭(~176px)이 있어서 .f-date 의
   flex-basis(140px, 퍼블과 동일)를 무시하고 더 넓게 렌더링된다(flex item 기본
   min-width:auto 라 콘텐츠 최소폭 밑으로 못 줄어듦) — 강제로 축소 허용해서 퍼블과
   동일한 140px 박스를 유지한다. */
.pp-pub .f-date input {
    min-width: 0;
}
.page-main {
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: var(--space-8) var(--space-6) var(--space-10);
}
/* .auth-main · .login-wrap · .login-head 는 2026-07-30 제거했다.
   auth/{join-status,logout} 과 error/* 4종을 layout/auth + 퍼블 .find-* 어휘로 이관하면서 참조 0건이 됐다.
   ★.auth-main 의 min-height:100dvh 는 실제로 버그를 만들고 있었다 — layout/auth 로 들어가면 #wrap 의
     헤더 오프셋(padding-top:70)·푸터와 이중 계산돼 세로 153px 오버플로가 났다. 세로 중앙정렬은
     error.css 의 .pp-pub .error-page{align-items:center} 로 옮겼다(flex:1 1 100% 만으로 남은 높이를 채운다). */
.page-title { font-size: var(--fs-24); font-weight: var(--fw-bold); margin: 0 0 var(--space-2); }
.page-desc { color: var(--color-text-sub); font-size: var(--fs-14); margin: 0; line-height: 1.6; }
.card {
    max-width: 100%;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
}
.muted { color: var(--color-text-muted); }
.form-field { margin-bottom: var(--space-5); }
.form-field > label {
    display: block;
    font-size: var(--fs-14);
    font-weight: var(--fw-medium);
    color: var(--color-text-sub);
    margin-bottom: var(--space-2);
}
.input {
    width: 100%;
    height: 40px;
    padding: 0 var(--space-3);
    border: 1px solid var(--color-border-strong);
    border-radius: var(--radius-sm);
    font-family: var(--font-sans);
    font-size: var(--fs-14);
    color: var(--color-text);
    background: var(--color-surface);
}
.input:focus {
    outline: none;
    border-color: var(--color-primary);
    box-shadow: 0 0 0 3px var(--color-focus-ring);
}
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    height: 40px;
    padding: 0 var(--space-4);
    border-radius: var(--radius-sm);
    font-size: var(--fs-14);
    font-weight: var(--fw-medium);
    cursor: pointer;
    border: 1px solid transparent;
    white-space: nowrap;
    font-family: var(--font-sans);
}
.btn-primary { color: var(--color-text-invert); background: var(--color-primary); }
.btn-primary:hover { background: var(--color-primary-dark); }
.btn-line { color: var(--color-text); background: var(--color-surface); border-color: var(--color-border-strong); }
.btn-line:hover { border-color: var(--color-primary); color: var(--color-primary); }
.btn:disabled, .input:disabled { opacity: .6; cursor: not-allowed; }
.form-submit { display: flex; justify-content: center; margin-top: var(--space-6); }
.form-submit .btn { width: 100%; height: 48px; font-size: var(--fs-16); }
.status-message { min-height: 20px; margin: var(--space-4) 0 0; color: var(--color-text-sub); line-height: 1.5; }
.status-message.error { color: var(--color-danger); }

/* .login-foot(+a·.foot-note) · .result-card(+strong) · .result-label · .result-meta(+div·dt·dd) 는
   2026-07-30 제거했다. auth/join-status 를 퍼블 .find-* 어휘로 이관하면서 참조 0건이 됐다 —
   결과 카드는 퍼블 .find-result/.find-result-title/.find-result-id/.find-result-desc 로,
   정의목록은 pages/auth-pub.css 의 .find-meta(퍼블 pages/partner.css 의 .pm-info 이식)로,
   하단 링크줄은 .find-nav-btns 로 대체했다. */
/* 구 헤더/내비(.topbar · .brand · .main-nav · .nav-item · .nav-link · .nav-dropdown*)는
   2026-07-30 제거했다. 2026-07-23 재구조화로 fragments/header.html 이 퍼블 GNB 원본
   (<header id="header" class="header">, header-login.html 구조)로 전면 교체되면서 죽은 규칙이 됐다.
   제거 시점에 12개 클래스 전부 템플릿·JS 참조 0건을 개별 확인했다.
   → 스코프 해제 시 역전되던 .topbar-actions .btn 도 함께 사라졌다. */
.dashboard-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--space-5); }
.dashboard-card { padding: var(--space-6); }
.dashboard-card h2 { margin: 0 0 var(--space-3); font-size: var(--fs-18); }
.menu-list { list-style: none; margin: var(--space-4) 0 0; padding: 0; display: grid; gap: var(--space-2); }
.menu-list a { display: block; padding: var(--space-3); border: 1px solid var(--color-border); border-radius: var(--radius-md); }
.menu-list a:hover { border-color: var(--color-primary); color: var(--color-primary); }

/* .mock-data-badge(스텁 화면 안내 배지)는 2026-07-30 제거했다. 주석엔 "설정관리(LUK 관리·상태
   변경알림)에서 사용"이라 적혀 있었지만 실제 참조는 0건이었다 — 해당 화면들이 실API로 붙으면서
   배지를 걷어냈는데 CSS 와 주석만 남은 것이다. */

/* 조회 화면 검색폼(발급상품 조회 등에서 공용으로 사용) — OP filter-grid/field/filter-actions와 동일 구조 */
.filter-card { padding: var(--space-6); }
.filter-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-4) var(--space-6); }
.filter-grid .field { display: grid; grid-template-columns: 130px 1fr; align-items: center; gap: var(--space-3); }
.filter-grid .field label { font-size: var(--fs-14); font-weight: var(--fw-medium); color: var(--color-text-sub); }
.filter-actions {
    display: flex;
    justify-content: center;
    gap: var(--space-2);
    margin-top: var(--space-5);
    padding-top: var(--space-5);
    border-top: 1px solid var(--color-border);
}
@media (max-width: 720px) {
    .filter-grid { grid-template-columns: 1fr; }
}

/* 테이블 위 툴바(건수 등) — OP table-toolbar와 동일 구조 */
.table-toolbar { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-3); }
.table-toolbar .count { font-size: var(--fs-14); color: var(--color-text-sub); }
.table-toolbar .count b { color: var(--color-primary); }

/* 페이지네이션(공용) — OP pagination과 동일 구조 */
.pagination { display: flex; justify-content: center; align-items: center; gap: var(--space-1); margin-top: var(--space-4); }

/* 조회 화면 목록 테이블(공용) */
.data-table { width: 100%; border-collapse: collapse; font-size: var(--fs-14); }
.data-table th, .data-table td { padding: var(--space-3); text-align: left; border-bottom: 1px solid var(--color-border); }
.data-table th { color: var(--color-text-sub); font-weight: var(--fw-medium); background: var(--color-bg); }
.data-table tbody tr:hover { background: var(--color-primary-soft); }
.data-table .empty { padding: var(--space-10); text-align: center; color: var(--color-text-muted); cursor: default; }
.data-table tr:has(.empty):hover { background: none; }

.join-approval-layout {
    display: grid;
    grid-template-columns: minmax(0, 1.1fr) minmax(360px, .9fr);
    gap: var(--space-5);
    margin-top: var(--space-6);
    align-items: start;
}
.join-approval-card { padding: var(--space-6); min-width: 0; overflow: hidden; }
.join-approval-card .table-toolbar h2 { margin: 0; font-size: var(--fs-18); }
.join-approval-table-wrap { width: 100%; max-width: 100%; overflow-x: auto; }
.join-approval-view-button { height: 34px; }
.join-approval-detail-list { display: grid; gap: 0; margin: 0; }
.join-approval-detail-list div {
    display: grid;
    grid-template-columns: 110px minmax(0, 1fr);
    gap: var(--space-3);
    padding: var(--space-3) 0;
    border-bottom: 1px solid var(--color-border);
}
.join-approval-detail-list dt { color: var(--color-text-sub); font-weight: var(--fw-medium); }
.join-approval-detail-list dd { margin: 0; overflow-wrap: anywhere; }
.join-approval-access {
    display: grid;
    min-width: 0;
    gap: var(--space-3);
    margin: var(--space-6) 0 0;
    padding: var(--space-5);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
}
.join-approval-access legend { padding: 0 var(--space-2); font-weight: var(--fw-semibold); }
.join-approval-access-choice,
.join-approval-service-option {
    display: flex;
    gap: var(--space-3);
    align-items: flex-start;
    cursor: pointer;
}
.join-approval-access-choice input,
.join-approval-service-option input { margin-top: 3px; accent-color: var(--color-primary); }
.join-approval-access-choice span { display: grid; gap: var(--space-1); }
.join-approval-access-choice small { color: var(--color-text-muted); line-height: 1.5; }
.join-approval-service-options {
    display: grid;
    gap: var(--space-2);
    margin-left: var(--space-6);
    padding: var(--space-4);
    border-radius: var(--radius-md);
    background: var(--color-bg);
}
.join-approval-reason-field { margin-top: var(--space-6); }
.join-approval-reason-field label {
    display: block;
    margin-bottom: var(--space-2);
    color: var(--color-text-sub);
    font-size: var(--fs-14);
    font-weight: var(--fw-medium);
}
.join-approval-reason { min-height: 110px; padding-block: var(--space-3); resize: vertical; }
.join-approval-actions {
    display: flex;
    justify-content: flex-end;
    gap: var(--space-2);
    margin-top: var(--space-5);
}

/* 가입 화면 구 레이아웃(.auth-main-wide · .signup-wrap · .signup-section* · .company-search-row ·
   .company-search-field · .company-result)은 2026-07-30 제거했다. auth/signup.html 이 퍼블 마크업으로
   이관되면서(.auth-page · .input-group · .form-label · .check-box, 검색결과 컨테이너는 #companyResult
   id + 인라인 스타일) 참조 0건이 됐다. .company-option/.empty-result 는 partner-signup.js 가
   지금도 만들어 넣으므로 남긴다. */
.section-head { margin-bottom: var(--space-4); overflow-wrap: break-word; word-break: keep-all; }
.section-head h2 { margin: 0 0 var(--space-2); font-size: var(--fs-18); font-weight: var(--fw-bold); }
.section-head p { margin: 0; color: var(--color-text-sub); line-height: 1.6; }
.company-option { display: grid; gap: var(--space-1); width: 100%; min-height: 72px; padding: var(--space-4); border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-surface); color: var(--color-text); font-family: var(--font-sans); text-align: left; cursor: pointer; }
.company-option:hover, .company-option:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px var(--color-focus-ring); }
.company-option.selected { border-color: var(--color-primary); background: var(--color-primary-soft); }
.company-option strong { font-size: var(--fs-15); }
.company-option span { color: var(--color-text-muted); font-size: var(--fs-12); }
.empty-result { grid-column: 1 / -1; margin: 0; padding: var(--space-4); border: 1px dashed var(--color-border-strong); border-radius: var(--radius-md); color: var(--color-text-muted); text-align: center; }
.helper-text { min-height: 18px; margin: var(--space-2) 0 0; color: var(--color-text-muted); font-size: var(--fs-12); line-height: 1.5; }
.helper-text.success { color: var(--color-primary-dark); }
.helper-text.error { color: var(--color-danger); }
/* .form-grid · .check-row(+input) · .form-submit-split 도 위 가입화면 이관으로 죽어 함께 제거.
   반응형 규칙(.signup-wrap · .company-search-row · .company-result · .signup-section ·
   .form-submit-split · .result-actions · .auth-main-wide)도 같이 걷어냈다. */
/* 이 자리에 있던 .result-meta div 반응형 규칙도 위 제거와 함께 걷어냈다. */

@media (max-width: 720px) {
    /* 구 헤더/내비 반응형 규칙(.topbar · .brand · .topbar-actions · .main-nav)도 위와 함께 제거. */
    .join-approval-layout { grid-template-columns: 1fr; }
    .join-approval-card { padding: var(--space-5); }
    .join-approval-table-wrap .data-table { min-width: 560px; }
    .join-approval-table-wrap .data-table th:last-child,
    .join-approval-table-wrap .data-table td:last-child {
        position: sticky;
        right: 0;
        background: var(--color-surface);
        box-shadow: -8px 0 12px -12px var(--color-text-muted);
    }
    .join-approval-table-wrap .data-table th:last-child { background: var(--color-bg); }
    .join-approval-detail-list div { grid-template-columns: 100px minmax(0, 1fr); }
    .join-approval-actions { display: grid; grid-template-columns: 1fr 1fr; }
    .join-approval-actions .btn { width: 100%; min-width: 0; }
    .dashboard-grid { grid-template-columns: 1fr; }
    .page-main { padding: var(--space-6) var(--space-4); }
    /* .auth-main · .form-card · .login-head 반응형 규칙도 위 제거와 함께 걷어냈다. */
    .page-title { font-size: var(--fs-20); }
    .section-head, .page-desc, .section-head p { word-break: normal; overflow-wrap: break-word; }
}
