/*신청과정 중 CSS오류 수정*/
.input-with-button{
    display: flex;
    gap: 8px;
}
.input-with-button input{
    flex: 1 1 0%;
}
.input-with-button button{
    min-width: 0;
    height: 52px;
    font-size: 15px;
    padding: 0 22px;
}
@media (max-width: 768px) {
    .input-with-button{
        flex-wrap: wrap;
    }

}

/*배우자 정보 입력 - 혼인 자격요건 안내*/
.apply-card__req{
    margin: 8px 0 0;
    padding-left: 18px;
    font-size: 14px;
    line-height: 1.7;
    color: #555;
}
.apply-card__req li{
    list-style: disc;
}
.gform__hint--warn{
    color: #EA5529;
    font-weight: 600;
}

/* ------------------------------------------------------------------
   사업안내 전체 진행 흐름도
   2026-08-25: 신청절차와 지원금 지급 사이에 사용자 제공 흐름도를 배치한다.
   ------------------------------------------------------------------ */
.dalseong-guide-flow{
    margin: 0;
    padding: 16px;
    overflow: hidden;
    text-align: center;
}
.dalseong-guide-flow__image{
    display: block;
    width: 100%;
    max-width: 1076px;
    height: auto;
    margin: 0 auto;
    image-rendering: -webkit-optimize-contrast;
}

@media (max-width: 1480px) {
    .dalseong-guide-flow__image {
        width: 100%;
    }
}

/* ------------------------------------------------------------------
   신청 모달(가입자 확인사항 / 약정서 / 개인정보 동의서)
   2026-08-18: 도민연금 CSS 제거(2026-08-04) 이후 .modal 정의가 사라져
   모달 내용이 본문 하단에 그대로 노출되던 문제를 보정한다.
   달성군 원본 퍼블리싱에 대응 스타일이 없어 미러 밖에서 처리한다.
   ------------------------------------------------------------------ */
.modal{
    display: none;
    position: fixed;
    inset: 0;
    z-index: 1000;
    background: rgba(0, 0, 0, .55);
    padding: 24px 16px;
    overflow: hidden;
}
.modal.active{
    display: flex;
    align-items: center;
    justify-content: center;
}
.modal-content{
    display: flex;
    flex-direction: column;
    width: 100%;
    max-width: 720px;
    max-height: calc(100vh - 48px);
    background: #fff;
    border-radius: 12px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, .25);
    overflow: hidden;
}
.modal-header{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex: 0 0 auto;
    padding: 18px 22px;
    border-bottom: 1px solid #e5e5e5;
}
.modal-header h2{
    margin: 0;
    font-size: 18px;
    font-weight: 700;
}
.modal-close{
    flex: 0 0 auto;
    width: 36px;
    height: 36px;
    border: none;
    background: none;
    font-size: 26px;
    line-height: 1;
    color: #666;
    cursor: pointer;
}
/* 본문만 스크롤되어야 끝까지 읽고 동의하는 흐름이 성립한다. */
.modal-body{
    flex: 1 1 auto;
    min-height: 0;
    overflow-y: auto;
    -webkit-overflow-scrolling: touch;
    padding: 20px 22px;
}
.modal-footer{
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    flex: 0 0 auto;
    padding: 16px 22px;
    border-top: 1px solid #e5e5e5;
    background: #fafafa;
}
.modal-footer .btn-cancel,
.modal-footer .btn-confirm{
    min-width: 110px;
    height: 46px;
    padding: 0 20px;
    border-radius: 6px;
    font-size: 15px;
    font-weight: 700;
    cursor: pointer;
}
.modal-footer .btn-cancel{
    border: 1px solid #cfcfcf;
    background: #fff;
    color: #444;
}
.modal-footer .btn-confirm{
    border: 1px solid #EA5529;
    background: #EA5529;
    color: #fff;
}
/* 항목을 모두 확인하기 전에는 눌리지 않는다는 것이 보여야 한다. */
.modal-footer .btn-confirm:disabled{
    border-color: #d6d6d6;
    background: #d6d6d6;
    color: #fff;
    cursor: not-allowed;
}
@media (max-width: 768px){
    .modal{ padding: 12px; }
    .modal-content{ max-height: calc(100vh - 24px); }
    .modal-header,
    .modal-body,
    .modal-footer{ padding-left: 16px; padding-right: 16px; }
    .modal-footer .btn-cancel,
    .modal-footer .btn-confirm{ flex: 1 1 0; min-width: 0; }
}

/* ------------------------------------------------------------------
   약정서·동의서 본문(.application-document)
   2026-08-18: 문서 본문을 감싸는 박스 스타일이 없어 평문처럼 보이던 문제 보정.
   ------------------------------------------------------------------ */
.modal-body .application-document{
    border: 1px solid #e0e0e0;
    border-radius: 8px;
    background: #fcfcfc;
    padding: 20px 22px;
    font-size: 15px;
    line-height: 1.75;
    color: #333;
}
.modal-body .application-document > p{
    margin: 0 0 12px;
}
.modal-body .application-document h3{
    margin: 20px 0 8px;
    padding-bottom: 6px;
    border-bottom: 1px solid #ececec;
    font-size: 16px;
    font-weight: 700;
    color: #222;
}
.modal-body .application-document h3:first-child{
    margin-top: 0;
}
.modal-body .application-document ol,
.modal-body .application-document ul{
    margin: 0 0 12px;
    padding-left: 20px;
}
.modal-body .application-document li{
    margin-bottom: 6px;
}
/* 본문 안의 강조 안내 박스 */
.modal-body .application-document .info-box{
    margin: 0 0 16px;
    padding: 14px 16px;
    border-left: 4px solid var(--green, #0cb14b);
    border-radius: 6px;
    background: var(--tint-green, #f2f8ee);
}
.modal-body .application-document .info-box p{
    margin: 0;
}

/* ------------------------------------------------------------------
   신청목적·신청경로 라디오 — 개인정보 동의서와 같은 라디오+박스 형태
   2026-08-18: 기본 브라우저 라디오로 남아 있어 화면 톤이 어긋나던 문제 보정.
   ------------------------------------------------------------------ */
.form-group .radio-group{
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 8px;
}
.form-group .radio-group > label{
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 12px 18px;
    border: 2px solid #ddd;
    border-radius: 8px;
    background: #fff;
    font-size: 15px;
    cursor: pointer;
    transition: all .2s ease;
}
.form-group .radio-group > label:hover{
    border-color: #999;
}
.form-group .radio-group > label:focus-within{
    border-color: var(--green, #0cb14b);
    outline: 2px solid rgba(12, 177, 75, .25);
    outline-offset: 1px;
}
/* 기본 라디오는 숨기고 표식을 직접 그린다. 접근성을 위해 위치만 옮긴다. */
.form-group .radio-group > label input[type="radio"]{
    position: absolute;
    opacity: 0;
    width: 0;
    height: 0;
}
.form-group .radio-group > label > span{
    flex: 0 0 auto;
    width: 20px;
    height: 20px;
    border: 2px solid #c4c4c4;
    border-radius: 50%;
    background: #fff;
    transition: all .2s ease;
}
.form-group .radio-group > label input[type="radio"]:checked + span{
    border-color: var(--green, #0cb14b);
    background: var(--green, #0cb14b);
    box-shadow: inset 0 0 0 3px #fff;
}
.form-group .radio-group > label:has(input[type="radio"]:checked){
    border-color: var(--green, #0cb14b);
    background: var(--tint-green, #f2f8ee);
    color: var(--green-dark, #0d7234);
    font-weight: 600;
}
@media (max-width: 768px){
    .form-group .radio-group > label{
        flex: 1 1 calc(50% - 10px);
        justify-content: flex-start;
        padding: 12px 14px;
    }
}

/* ------------------------------------------------------------------
   신청완료(step_int) 화면의 원본 외 요소
   2026-08-18: 원본 sub2_5_2_신청완료.html에는 안내 목록과 제출서류 목록이 없다.
   원본 클래스명을 침범하지 않도록 dsx- 접두어를 쓰고 여기서만 정의한다.
   ------------------------------------------------------------------ */
.adone .dsx-notice{
    margin: 24px auto 0;
    padding: 18px 20px;
    max-width: 640px;
    border-radius: 10px;
    background: #f7f8fa;
    list-style: none;
    text-align: left;
}
.adone .dsx-notice li{
    position: relative;
    padding-left: 16px;
    margin-bottom: 8px;
    font-size: 14px;
    line-height: 1.7;
    color: #555;
}
.adone .dsx-notice li:last-child{ margin-bottom: 0; }
.adone .dsx-notice li::before{
    content: "※";
    position: absolute;
    left: 0;
    color: #999;
}
.adone .dsx-notice strong{ color: #333; }

.adone .dsx-files{
    margin: 24px auto 0;
    max-width: 640px;
    text-align: left;
}
.adone .dsx-files__title{
    margin: 0 0 10px;
    font-size: 15px;
    font-weight: 700;
    color: #333;
}
.adone .dsx-files__list{
    margin: 0;
    padding: 0;
    list-style: none;
    border-top: 1px solid #e5e5e5;
}
.adone .dsx-files__item{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 12px;
    padding: 12px 4px;
    border-bottom: 1px solid #e5e5e5;
}
.adone .dsx-files__divide{
    flex: 0 0 auto;
    padding: 4px 10px;
    border-radius: 4px;
    background: var(--tint-green, #f2f8ee);
    color: var(--green-dark, #0d7234);
    font-size: 13px;
    font-weight: 600;
}
.adone .dsx-files__name{
    flex: 1 1 160px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 14px;
    color: #444;
}
.adone .dsx-files__actions{
    flex: 0 0 auto;
    display: flex;
    gap: 6px;
}
@media (max-width: 768px){
    .adone .dsx-notice,
    .adone .dsx-files{ margin-left: 0; margin-right: 0; }
    .adone .dsx-files__actions{ width: 100%; }
}

/* ------------------------------------------------------------------
   마이페이지 — 원본 0-1.마이페이지.html에 없는 블록
   2026-08-18: 사유 안내와 제출서류 목록은 원본에 대응 요소가 없어
   dsx- 접두어로 두고 여기서만 정의한다.
   ------------------------------------------------------------------ */
.dsx-reason{
    margin-top: 20px;
    border-left: 4px solid var(--orange, #ff6b4a);
}
.dsx-reason__title{
    margin: 0 0 8px;
    font-size: 16px;
    font-weight: 700;
    color: #333;
}
.dsx-reason__body{
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: #555;
    white-space: pre-line;
}

.dsx-files{
    margin-top: 20px;
    padding: 20px 22px;
    border: 1px solid #e5e5e5;
    border-radius: 10px;
    background: #fff;
}
.dsx-files__title{
    margin: 0 0 12px;
    font-size: 16px;
    font-weight: 700;
    color: #333;
}
.dsx-files__list{
    margin: 0;
    padding: 0;
    list-style: none;
    border-top: 1px solid #e5e5e5;
}
.dsx-files__item{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 12px;
    padding: 12px 4px;
    border-bottom: 1px solid #e5e5e5;
}
.dsx-files__divide{
    flex: 0 0 auto;
    padding: 4px 10px;
    border-radius: 4px;
    background: var(--tint-green, #f2f8ee);
    color: var(--green-dark, #0d7234);
    font-size: 13px;
    font-weight: 600;
}
.dsx-files__name{
    flex: 1 1 160px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 14px;
    color: #444;
}
.dsx-files__actions{
    flex: 0 0 auto;
    display: flex;
    gap: 6px;
}
.address-count-link{
    cursor: pointer;
    color: var(--green-dark, #0d7234);
    text-decoration: underline;
}
@media (max-width: 768px){
    .dsx-files{ padding: 16px; }
    .dsx-files__actions{ width: 100%; }
}

/* ------------------------------------------------------------------
   내 정보보기(/mypage/profile)
   2026-08-18: 원본 퍼블리싱에 대응 페이지가 없어 도민연금 클래스가
   정의 없이 남아 화면이 무너져 있었다. 공통 토큰 기준으로 정상화한다.
   화면별 고유 레이아웃을 새로 만들지 않고 목록·버튼 형태로만 맞춘다.
   ------------------------------------------------------------------ */
.profile-section{
    margin-bottom: 28px;
}
.profile-section:last-child{ margin-bottom: 0; }
.profile-title{
    margin: 0 0 12px;
    padding-bottom: 10px;
    border-bottom: 2px solid #333;
    font-size: 17px;
    font-weight: 700;
    color: #222;
}
.info-row{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px 16px;
    padding: 14px 4px;
    border-bottom: 1px solid #ececec;
}
.info-label{
    flex: 0 0 140px;
    font-size: 15px;
    font-weight: 600;
    color: #555;
}
.info-value{
    flex: 1 1 240px;
    min-width: 0;
    font-size: 15px;
    color: #222;
    word-break: break-all;
}
.info-value-wrap{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px;
}
/* 값 옆의 작은 동작 버튼 */
.btn-change,
.btn-save,
.btn-submit{
    height: 38px;
    padding: 0 14px;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
}
.btn-change{
    border: 1px solid #cfcfcf;
    background: #fff;
    color: #444;
}
.btn-change:hover{ border-color: #999; }
.btn-save,
.btn-submit{
    border: 1px solid var(--green, #0cb14b);
    background: var(--green, #0cb14b);
    color: #fff;
}
.email-edit-wrap{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    width: 100%;
}
.email-input,
.form-input{
    flex: 1 1 200px;
    min-width: 0;
    height: 42px;
    padding: 0 12px;
    border: 1px solid #cfcfcf;
    border-radius: 6px;
    font-size: 15px;
    width: 100%;
}
.email-input:focus,
.form-input:focus{
    border-color: var(--green, #0cb14b);
    outline: none;
}
.form-label{
    display: block;
    margin: 12px 0 6px;
    font-size: 14px;
    font-weight: 600;
    color: #555;
}
.password-form{
    margin-top: 12px;
    padding: 18px 20px;
    border: 1px solid #e5e5e5;
    border-radius: 10px;
    background: #fafafa;
}
.password-note{
    margin: 10px 0 0;
    font-size: 13px;
    line-height: 1.6;
    color: #777;
}
/* 가입 서류 보기 */
.document-btn-group{
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.btn-document{
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 16px 18px;
    border: 1px solid #e0e0e0;
    border-radius: 10px;
    background: #fff;
    font-size: 15px;
    color: #333;
    text-decoration: none;
    transition: all .2s ease;
}
.btn-document:hover{
    border-color: var(--green, #0cb14b);
    background: var(--tint-green, #f2f8ee);
}
.doc-icon{ flex: 0 0 auto; font-size: 20px; }
.doc-text{ flex: 1 1 auto; font-weight: 600; }
@media (max-width: 768px){
    .info-label{ flex: 0 0 100%; }
    .info-value{ flex: 1 1 100%; }
}

/* ------------------------------------------------------------------
   로그인 화면(/mypage/login)
   폼 자체는 디자인 원본의 .gform/.ginput/.gcheck-plain/.gbtn을 그대로 쓴다.
   원본에 로그인 페이지가 없어 여기서만 필요한 요소에 dsx- 접두어를 쓴다.
   ------------------------------------------------------------------ */
.dsx-login-welcome{
    margin: 0 0 24px;
    font-size: 20px;
    font-weight: 800;
    letter-spacing: -0.5px;
    color: var(--ink, #222);
    word-break: keep-all;
}

.dsx-login-links{
    
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin-top: 20px;
}
.dsx-login-links a{
    font-size: 15px;
    color: var(--gray2, #7d8486);
    text-decoration: none;
}
.dsx-login-links a:hover{
    color: var(--green, #0cb14b);
    text-decoration: underline;
}
.dsx-login-links span{ color: var(--line, #e1e7ee); }

.dsx-login-notice{
    margin: 24px 0 0;
    padding: 16px 20px;
    border: 1px solid var(--orange-border, #f0844a);
    border-radius: 12px;
    background: var(--tint-orange, #fff5f3);
    font-size: 14px;
    font-weight: 500;
    line-height: 1.6;
    color: var(--orange, #ff6b4a);
    text-align: center;
    word-break: keep-all;
}

/* 로그인 화면의 아이디 저장은 약관 동의와 달리 한 줄짜리 보조 선택이다. */
.login-form-content .gcheck-plain{ padding: 12px 16px; }

@media (max-width: 768px){
    .dsx-login-welcome{ font-size: 18px; }
}

/* ------------------------------------------------------------------
   아이디/비밀번호 찾기 계열 (find-id, find-id-result, find-password, reset-password)
   로그인 화면과 같은 어휘를 쓴다. 폼은 원본의 .gform/.ginput/.gbtn,
   원본에 없는 요소만 dsx- 접두어로 여기서 정의한다.
   ------------------------------------------------------------------ */
.dsx-login-desc{
    margin: 0 0 24px;
    font-size: 15px;
    line-height: 1.6;
    color: var(--gray2, #7d8486);
    text-align: center;
    word-break: keep-all;
}

/* 휴대폰 본인인증(PASS) 선택 카드 */
.dsx-cert{
    display: flex;
    justify-content: center;
    gap: 20px;
}
.dsx-cert__card{
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 200px;
    height: 120px;
    border: 1px solid var(--line, #e1e7ee);
    border-radius: 12px;
    background: #fff;
    cursor: pointer;
    transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease;
}
.dsx-cert__card:hover{
    border-color: var(--green, #0cb14b);
    box-shadow: 0 10px 22px rgba(12, 177, 75, .18);
    transform: translateY(-2px);
}
.dsx-cert__logo{
    display: flex;
    align-items: center;
    justify-content: center;
    width: 80px;
    height: 40px;
}
.dsx-cert__logo img{ max-width: 100%; max-height: 100%; }
.dsx-cert__text{
    font-size: 14px;
    font-weight: 700;
    color: var(--ink, #222);
}

/* 아이디 찾기 결과 */
.dsx-result{
    padding: 30px;
    border: 1px solid var(--line, #e1e7ee);
    border-radius: 16px;
    background: var(--tint-green, #f2f8ee);
    text-align: center;
}
.dsx-result__label{
    margin: 0 0 12px;
    font-size: 14px;
    color: var(--gray2, #7d8486);
}
.dsx-result__value{
    margin: 0;
    font-size: 24px;
    font-weight: 800;
    letter-spacing: 2px;
    color: var(--green-dark, #0d7234);
    word-break: break-all;
}

/* 두 개짜리 버튼 줄 */
.dsx-btn-row{ display: flex; gap: 12px; }
.dsx-btn-row .gbtn{ flex: 1; min-width: 0; }

.dsx-error{
    margin: 0 0 20px;
    padding: 14px 18px;
    border: 1px solid var(--orange-border, #f0844a);
    border-radius: 12px;
    background: var(--tint-orange, #fff5f3);
    font-size: 14px;
    color: var(--orange, #ff6b4a);
    text-align: center;
    word-break: keep-all;
}

@media (max-width: 768px){
    .dsx-cert__card{ width: 100%; }
    .dsx-btn-row{ flex-direction: column; }
}

/* 게시판 에디터 본문은 외부 HTML을 렌더링하므로 원본 디자인 뒤에서 넘침을 제한한다. */
.board-view__body {
    overflow-x: auto;
    overflow-wrap: anywhere;
}
.board-view__body img,
.board-view__body iframe,
.board-view__body video {
    max-width: 100%;
    height: auto;
}
.board-view__body table {
    width: auto;
    max-width: 100%;
}
.board-view__body th,
.board-view__body td {
    word-break: break-word;
}

/* ------------------------------------------------------------------
   동의서 확인 버튼과 동의 라디오
   2026-08-20: step6.jsp 인라인에만 있어 배우자 동의 화면(step_add_file.jsp)에서
   스타일이 적용되지 않았다. 두 화면이 공유하도록 미러 밖 보정 CSS로 올린다.
   step6.jsp의 인라인 규칙은 값이 동일하므로 그대로 두고 후속 정리 대상으로 남긴다.
   ------------------------------------------------------------------ */
.confirmation-buttons{
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.confirmation-buttons .confirmation-btn{
    display: flex;
    align-items: center;
    gap: 12px;
    width: 100%;
    padding: 16px 18px;
    background: #fff;
    border: 2px solid #ddd;
    border-radius: 10px;
    cursor: pointer;
    transition: all .2s;
    text-align: left;
    font-size: 15px;
}
.confirmation-buttons .confirmation-btn:hover,
.confirmation-buttons .confirmation-btn[data-confirmed="true"]{
    border-color: #4CAF50;
    background: #E8F5E9;
}
.confirmation-buttons .confirmation-btn .btn-text{
    flex: 1;
    font-weight: 500;
    color: #333;
}

.privacy-consent-group{
    display: flex;
    justify-content: center;
    gap: 20px;
    margin: 15px 0;
}
.privacy-consent-group label{
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 12px 24px;
    border: 2px solid #ddd;
    border-radius: 8px;
    cursor: pointer;
    transition: all .2s ease;
    background: #fff;
}
.privacy-consent-group label:hover{ border-color: #999; }
.privacy-consent-group label.selected-agree{
    background-color: #E8F5E9;
    border-color: #4CAF50;
    color: #2E7D32;
    font-weight: 600;
}
/* 선택된 항목은 색만으로 구분하지 않고 체크 표시를 함께 둔다. */
.privacy-consent-group label.selected-agree::before{
    content: "✓";
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    background: #4CAF50;
    color: #fff;
    border-radius: 50%;
    font-size: 12px;
    font-weight: bold;
    margin-right: 4px;
}
.privacy-consent-group label.selected-disagree{
    background-color: #FFEBEE;
    border-color: #EF5350;
    color: #C62828;
    font-weight: 600;
}
.privacy-consent-group input[type="radio"]{
    width: 18px;
    height: 18px;
    accent-color: #4CAF50;
}
.privacy-consent-group label.selected-agree input[type="radio"],
.privacy-consent-group label.selected-disagree input[type="radio"]{
    display: none;
}

/* ------------------------------------------------------------------
   이용약관 모달
   2026-08-20: 관리자 판본 미리보기 iframe도 실제 모달과 같은 서식을
   사용하도록 terms-modal.jsp의 인라인 스타일을 공용 CSS로 이관한다.
   ------------------------------------------------------------------ */
.terms-modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10000;
    display: flex;
    align-items: center;
    justify-content: center;
}
.terms-modal-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.6);
}
.terms-modal-content {
    position: relative;
    background: #fff;
    border-radius: 16px;
    width: 90%;
    max-width: 800px;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
}
.terms-modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 24px;
    border-bottom: 1px solid #eee;
    flex-shrink: 0;
}
.terms-modal-header h2 {
    margin: 0;
    font-size: 20px;
    font-weight: 700;
    color: #333;
}
.terms-modal-close {
    background: none;
    border: none;
    font-size: 28px;
    color: #999;
    cursor: pointer;
    padding: 0;
    line-height: 1;
    transition: color 0.2s;
}
.terms-modal-close:hover {
    color: #333;
}
.terms-modal-body {
    padding: 24px;
    overflow-y: auto;
    flex: 1;
    line-height: 1.7;
    color: #444;
    font-size: 14px;
}
.terms-modal-body h3 {
    font-size: 18px;
    font-weight: 700;
    color: #222;
    margin: 30px 0 15px 0;
    padding-bottom: 10px;
    border-bottom: 2px solid #EA5529;
}
.terms-modal-body h3:first-child {
    margin-top: 0;
}
.terms-modal-body h4 {
    font-size: 15px;
    font-weight: 600;
    color: #333;
    margin: 20px 0 10px 0;
}
.terms-modal-body p {
    margin: 10px 0;
}
.terms-modal-body ol {
    margin: 10px 0;
    padding-left: 25px;
    list-style-type: decimal;
}
.terms-modal-body ol li {
    margin: 8px 0;
    list-style-type: decimal;
}
.terms-modal-body ol ol {
    margin: 5px 0;
    padding-left: 25px;
    list-style-type: decimal;
}
.terms-modal-body ol ol li {
    list-style-type: decimal;
}
.terms-modal-body .terms-notice {
    background: #FFF8E1;
    padding: 15px;
    border-radius: 8px;
    border-left: 4px solid #FFC107;
    margin: 20px 0;
    font-size: 13px;
}
.terms-modal-body .terms-date {
    text-align: center;
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid #eee;
    color: #666;
}

/* 모바일 반응형 */
@media (max-width: 768px) {
    .terms-modal-content {
        width: 95%;
        max-height: 90vh;
        border-radius: 12px;
    }
    .terms-modal-header {
        padding: 16px 20px;
    }
    .terms-modal-header h2 {
        font-size: 18px;
    }
    .terms-modal-body {
        padding: 20px;
        font-size: 13px;
    }
    .terms-modal-body h3 {
        font-size: 16px;
    }
    .terms-modal-body h4 {
        font-size: 14px;
    }
}

/* 푸터 이용약관 링크 스타일 */
.footer-title .title-text {
    cursor: pointer;
    text-decoration: none;
    color: inherit;
    transition: color 0.2s;
}
.footer-title .title-text:hover {
    color: #EA5529;
    text-decoration: underline;
}

/* ------------------------------------------------------------------
   개인정보처리방침 모달
   2026-08-20: 관리자 판본 미리보기 iframe도 실제 모달과 같은 서식을
   사용하도록 privacy-modal.jsp의 인라인 스타일을 공용 CSS로 이관한다.
   ------------------------------------------------------------------ */
.privacy-modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 10000;
    display: flex;
    align-items: center;
    justify-content: center;
}
.privacy-modal-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.6);
}
.privacy-modal-content {
    position: relative;
    background: #fff;
    border-radius: 16px;
    width: 90%;
    max-width: 800px;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
}
.privacy-modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 24px;
    border-bottom: 1px solid #eee;
    flex-shrink: 0;
}
.privacy-modal-header h2 {
    margin: 0;
    font-size: 20px;
    font-weight: 700;
    color: #333;
}
.privacy-modal-close {
    background: none;
    border: none;
    font-size: 28px;
    color: #999;
    cursor: pointer;
    padding: 0;
    line-height: 1;
    transition: color 0.2s;
}
.privacy-modal-close:hover {
    color: #333;
}
.privacy-modal-body {
    padding: 24px;
    overflow-y: auto;
    flex: 1;
    line-height: 1.7;
    color: #444;
    font-size: 14px;
}
.privacy-modal-body .privacy-intro {
    background: #f8f9fa;
    padding: 16px;
    border-radius: 8px;
    margin-bottom: 24px;
    font-size: 14px;
    line-height: 1.8;
    color: #555;
}
.privacy-modal-body h3 {
    font-size: 18px;
    font-weight: 700;
    color: #222;
    margin: 30px 0 15px 0;
    padding-bottom: 10px;
    border-bottom: 2px solid #EA5529;
}
.privacy-modal-body h3:first-of-type {
    margin-top: 0;
}
.privacy-modal-body h4 {
    font-size: 15px;
    font-weight: 600;
    color: #333;
    margin: 20px 0 10px 0;
}
.privacy-modal-body p {
    margin: 10px 0;
}
.privacy-modal-body ol {
    margin: 10px 0;
    padding-left: 25px;
    list-style-type: decimal;
}
.privacy-modal-body ol li {
    margin: 8px 0;
    list-style-type: decimal;
}
.privacy-modal-body ol ol {
    margin: 5px 0;
    padding-left: 25px;
    list-style-type: decimal;
}
.privacy-modal-body ol ol li {
    list-style-type: decimal;
}
.privacy-modal-body .privacy-notice {
    background: #FFF8E1;
    padding: 12px 15px;
    border-radius: 8px;
    border-left: 4px solid #FFC107;
    margin: 15px 0;
    font-size: 13px;
}
.privacy-modal-body .privacy-date {
    text-align: center;
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid #eee;
    color: #666;
}

/* 목차 테이블 스타일 */
.privacy-toc-wrap {
    margin: 20px 0 30px 0;
}
.privacy-toc-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}
.privacy-toc-table th {
    background: #f0f7ff;
    border: 1px solid #ccc;
    padding: 14px 10px;
    text-align: center;
    font-weight: 600;
    color: #333;
    font-size: 15px;
}
.privacy-toc-table td {
    border: 1px solid #ddd;
    border-top: 1px dotted #ccc;
    padding: 12px 15px;
    text-align: left;
    color: #444;
}
.privacy-toc-table tbody tr:first-child td {
    border-top: 1px solid #ccc;
}

/* 테이블 스타일 */
.privacy-table-wrap {
    overflow-x: auto;
    margin: 15px 0;
}
.privacy-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
    min-width: 400px;
}
.privacy-table th,
.privacy-table td {
    border: 1px solid #ddd;
    padding: 12px 10px;
    text-align: center;
    vertical-align: middle;
}
.privacy-table th {
    background: #f5f5f5;
    font-weight: 600;
    color: #333;
}
.privacy-table td {
    background: #fff;
    color: #555;
}
.privacy-table tbody tr:hover td {
    background: #fafafa;
}

/* 모바일 반응형 */
@media (max-width: 768px) {
    .privacy-modal-content {
        width: 95%;
        max-height: 90vh;
        border-radius: 12px;
    }
    .privacy-modal-header {
        padding: 16px 20px;
    }
    .privacy-modal-header h2 {
        font-size: 18px;
    }
    .privacy-modal-body {
        padding: 20px;
        font-size: 13px;
    }
    .privacy-modal-body .privacy-intro {
        padding: 14px;
        font-size: 13px;
    }
    .privacy-modal-body h3 {
        font-size: 16px;
    }
    .privacy-modal-body h4 {
        font-size: 14px;
    }
    .privacy-table {
        font-size: 12px;
    }
    .privacy-table th,
    .privacy-table td {
        padding: 10px 8px;
    }
}

/* 푸터 개인정보처리방침 링크 스타일 */
.footer-title .title-label {
    cursor: pointer;
    text-decoration: none;
    color: inherit;
    transition: color 0.2s;
}
.footer-title .title-label:hover {
    color: #EA5529;
    text-decoration: underline;
}

/* ------------------------------------------------------------------
   전자문서 확인 상태 배지 (.gstatus)
   2026-08-26: 디자인 원본에 .gstatus 규칙이 없어 그냥 본문 텍스트로 나오고 있었다.
   상태가 눈에 안 들어오는 것도 문제지만, 더 나쁜 것은 '확인완료'·'확인 대기'·
   '관리자 확인 필요'·'자격 미충족'이 전부 똑같이 보여 서로 구분되지 않는 점이다.
   자격 미충족을 단순 대기로 읽으면 신청인이 손쓸 시점을 놓친다.

   진행바나 스피너를 쓰지 않는다. 각 행은 비율이 아니라 개별 상태이고, 서버가
   무언가 처리하는 중도 아니다. 신청인이 전자지갑에서 제출하기 전에는 아무 일도
   일어나지 않으므로 움직이는 표시는 사실과 다르다.

   .is-complete만 있는 화면(step3, step_add_file, mypage)은 기본형 + 완료형으로
   그대로 동작한다.
   ------------------------------------------------------------------ */
.gstatus {
    display: inline-flex;
    align-items: center;
    align-self: flex-start;
    gap: 7px;
    padding: 6px 14px;
    border: 1px solid var(--line, #e1e7ee);
    border-radius: 999px;
    background: #f4f6f8;
    color: #5b6366;
    font-size: 14px;
    font-weight: 800;
    line-height: 1.2;
    letter-spacing: -0.3px;
    white-space: nowrap;
}
/* 점은 글자색을 그대로 받아 상태별로 같이 바뀐다. */
.gstatus::before {
    content: '';
    flex: none;
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentColor;
}
.gstatus.is-complete {
    background: var(--tint-green, #f2f8ee);
    border-color: #b7e3c6;
    color: var(--green-dark, #0d7234);
}
.gstatus.is-review {
    background: var(--tint-blue, #edf5fd);
    border-color: #bcd9f5;
    color: var(--blue, #005cb9);
}
.gstatus.is-blocked {
    background: var(--tint-orange, #fff5f3);
    border-color: var(--orange-border, #f0844a);
    color: #EA5529;
}
@media (max-width: 768px) {
    .gstatus {
        font-size: 13px;
        padding: 5px 12px;
    }
}

/* ------------------------------------------------------------------
   중간승인 서류 제출 - 신청인/배우자 구분
   2026-08-26: 한 목록에 신청인 서류와 배우자 서류가 섞여 있어 어느 쪽 서류인지
   읽히지 않았다. 특히 신청인 혼인관계증명서가 배우자 항목들 사이에 놓여
   배우자 것으로 오해됐다.
   ------------------------------------------------------------------ */
.dsx-doc-group + .dsx-doc-group { margin-top: 28px; }
.dsx-doc-group__title {
    margin: 0 0 16px;
    padding-left: 10px;
    border-left: 3px solid var(--green, #0cb14b);
    font-size: 16px;
    font-weight: 800;
    letter-spacing: -0.5px;
    color: var(--ink, #222);
}
/* .gform이 flex column이라 그룹 내부에도 같은 간격을 준다. */
.dsx-doc-group .gform__row + .gform__row { margin-top: 20px; }

/* ------------------------------------------------------------------
   메인 팝업 - 데스크톱에서도 Swiper로 두 장씩
   2026-08-28: 원본(design/dalseong-main/css/main.css)의 데스크톱 배치는
   `.swiper-wrapper`에 gap과 justify-content:center를 주고 슬라이드를
   `width:auto; flex:0 1 auto`로 두어, 팝업이 정확히 두 장일 때만 맞았다.
   관리자가 세 개 이상을 켜면 화면 밖으로 넘쳐 겹쳐 보였다.

   데스크톱에서도 Swiper를 켜므로(js/dalseong-popup.js) 슬라이드 폭과 간격은
   Swiper가 인라인으로 잡는다. 원본의 gap과 중앙정렬은 그 계산을 어긋나게 하므로
   여기서 되돌린다. 원본이 갱신되면 이 보정의 필요성을 다시 확인한다.
   ------------------------------------------------------------------ */
@media (min-width: 769px) {
    /* gap은 Swiper의 spaceBetween과 이중으로 걸린다. 정렬은 Swiper가 transform으로 한다. */
    .popup__swiper .swiper-wrapper {
        gap: 0;
        justify-content: flex-start;
        align-items: center;
    }
    /* 폭은 Swiper가 인라인으로 준다. shrink를 열어 두면 그 값이 무너진다. */
    .popup__swiper .swiper-slide {
        flex-shrink: 0;
    }
    /* 슬라이드 폭(약 508px)을 넘지 않게만 두고 원본 비율은 유지한다. */
    .popup__link img {
        max-height: 76vh;
    }
    /* 원본은 데스크톱에서 페이지네이션을 숨긴다. 넘길 슬라이드가 있을 때만 되살린다. */
    .popup.is-paged .popup__pagination {
        display: block;
        position: static;
        margin-top: 14px;
        text-align: center;
    }
    .popup.is-paged .popup__pagination .swiper-pagination-bullet {
        width: 9px;
        height: 9px;
        background: #fff;
        opacity: 0.5;
    }
    .popup.is-paged .popup__pagination .swiper-pagination-bullet-active {
        opacity: 1;
        background: var(--green, #0cb14b);
    }
}

/* 모바일도 넘길 것이 없으면 점 하나만 남으므로 숨긴다. */
@media (max-width: 768px) {
    .popup:not(.is-paged) .popup__pagination { display: none; }
}

/* ------------------------------------------------------------------
   메인 모집 안내문 / FAQ 카드를 클릭 가능하게
   2026-08-28: 카드가 게시글을 보여주면서 링크가 아니어서, 눌러도 아무 일도
   일어나지 않았다. `.ncard`가 이미 position:relative이므로 겹치는 링크를
   하나 얹는다. article을 <a>로 감싸면 .notice__cards의 그리드 아이템이
   바뀌어 카드 높이가 무너진다.
   ------------------------------------------------------------------ */
.ncard__link {
    position: absolute;
    inset: 0;
    z-index: 2;
    border-radius: 18px; /* .ncard와 같은 값. 포커스 링이 모서리를 넘지 않게 한다. */
}
/* 키보드 사용자에게 어디에 있는지 보인다. 원본에는 이 카드용 포커스 서식이 없다. */
.ncard__link:focus-visible {
    outline: 3px solid var(--green, #0cb14b);
    outline-offset: 3px;
}

/* ------------------------------------------------------------------
   메인 모집 안내문 / FAQ 카드 본문을 4줄로 자른다
   2026-08-28: 카드 본문이 관리자 글 전문의 앞부분이라 길이가 제각각이고,
   긴 글이 걸리면 그 카드만 세로로 늘어나 옆 카드와 높이가 어긋났다.
   .ncard는 min-height만 있고 max-height가 없어 내용만큼 자란다.

   line-clamp는 display:-webkit-box일 때만 동작한다. 원본의 p는 블록이지만
   여기서만 바꾼다. 표준 line-clamp를 함께 적어 둔다.
   ------------------------------------------------------------------ */
/* 제목도 두 줄에서 자른다. 세 줄짜리 제목이 등록되면 그 카드만 밀려 나온다.
   .ncard__q의 원본 min-height(64px)가 20px x line-height 1.6 x 2줄과 같은 값이라,
   두 줄로 자르면 제목 칸 높이가 카드마다 정확히 같아진다. */
.ncard h4 {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
    line-clamp: 2;
    overflow: hidden;
    max-height: calc(1.6em * 2);
}

.ncard p {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 4;
    line-clamp: 4;
    overflow: hidden;
    /* 잘린 줄이 카드 아래를 넘지 않도록 줄 수만큼만 자리를 잡는다.
       .ncard p의 line-height는 원본에서 1.65다. */
    max-height: calc(1.65em * 4);
}

/* 전자문서 제출 방법 안내 모달(document_guide.jsp).
   신청인 화면 세 곳이 같은 조각을 쓰므로 스타일도 여기 한 곳에만 둔다. */
.dsx-guide-tabs {
    display: flex;
    gap: 8px;
    margin: 0 0 14px;
    flex-wrap: wrap;
}

.dsx-guide-tab {
    padding: 8px 16px;
    border: 1px solid #d0d5dd;
    border-radius: 999px;
    background: #fff;
    font-size: 15px;
    cursor: pointer;
}

.dsx-guide-tab.is-active {
    border-color: #1f6feb;
    background: #1f6feb;
    color: #fff;
    font-weight: 600;
}

.dsx-guide-steps {
    margin: 0;
    padding-left: 20px;
    line-height: 2;
}

.dsx-guide-steps > li {
    padding-left: 2px;
}

/* 앱 메뉴 아이콘(햄버거·점 세 개). 글자로만 '왼쪽 위 메뉴'라고 하면
   무엇을 찾아야 하는지 알기 어려워 실제 모양을 함께 보여 준다.
   currentColor를 쓰므로 주변 글자색을 그대로 따라간다. */
.dsx-guide-icon {
    display: inline-block;
    width: 1.05em;
    height: 1.05em;
    vertical-align: -0.16em;
    margin: 0 2px;
    fill: currentColor;
}

/* ------------------------------------------------------------------
   hidden 속성을 실제로 숨긴다
   2026-09-02: 브라우저 기본 스타일시트의 [hidden]{display:none}은
   작성자 스타일보다 약하다. 그래서 display를 지정한 클래스가 붙은 요소는
   hidden을 걸어도 그대로 보였다.

   실제로 이런 것들이 항상 보이고 있었다.
   - .gnotice-banner(display:flex) — step_fl의 '제출할 서류가 모두
     확인되었습니다' 배너, step4의 자격 안내 배너
   - .gstatus(display:inline-flex) — '배우자 전자지갑 문서 수신 확인됨' 표시

   원본 CSS는 이 함정을 만날 때마다 .popup[hidden], .mtab-panel[hidden]처럼
   한 클래스씩 막아 왔다. 새 클래스를 만들 때마다 되풀이되므로 여기서
   한 번에 막는다. hidden 속성과 style.display를 함께 쓰는 자리는 없다.
   ------------------------------------------------------------------ */
[hidden] {
    display: none !important;
}

/* 확인 사유 목록. 사유가 여럿일 때 한 줄로 이어 붙이면 어디서 끊어 읽어야 할지
   알 수 없어 한 건에 한 줄씩 준다(2026-09-02). 배너(.gnotice-banner)는 flex라
   목록이 아이콘 옆 칸을 차지한다. */
.dsx-message-list {
    margin: 0;
    padding: 0;
    list-style: none;
    min-width: 0;
}

.dsx-message-list > li + li {
    margin-top: 6px;
}
