/* --- Global Variables --- */ :root { --primary-color: #2c3e50; /* 진한 남색 */ --secondary-color: #34495e; /* 조금 더 연한 남색 */ --accent-color: #e67e22; /* 주황색 포인트 */ --white-color: #ffffff; --light-gray: #f8f9fa; --text-color: #343a40; } /* --- 게시판 목록 (Board List) --- */ .bo-list-container { padding: 20px 0; } .bo-list-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid var(--primary-color); } .bo-list-total { font-size: 16px; color: var(--secondary-color); } .bo-list-buttons a { display: inline-flex; align-items: center; justify-content: center; padding: 8px 18px; border-radius: 6px; text-decoration: none; font-weight: 700; transition: all 0.3s ease; margin-left: 8px; } .bo-list-buttons .btn-write { background-color: var(--primary-color); color: var(--white-color); border: 1px solid var(--primary-color); } .bo-list-buttons .btn-write:hover { background-color: var(--secondary-color); } .bo-list-buttons .btn-admin { background-color: #fff; color: var(--accent-color); border: 1px solid var(--accent-color); } .bo-list-buttons .btn-admin:hover { background-color: var(--accent-color); color: var(--white-color); } .list-chk-all { margin-bottom: 10px; padding: 10px; background-color: var(--light-gray); border-radius: 6px; } .bo-list-item { display: flex; align-items: center; padding: 20px 15px; border-bottom: 1px solid #e9ecef; transition: background-color 0.2s; } .bo-list-item:hover { background-color: var(--light-gray); } .bo-list-item.is-notice { background-color: #fffaf5; border-left: 3px solid var(--accent-color); } .item-chk { flex-shrink: 0; margin-right: 15px; } .item-main { flex-grow: 1; min-width: 0; } .item-subject { margin-bottom: 8px; white-space: nowrap; } .item-notice-badge { display: inline-block; background-color: var(--accent-color); color: var(--white-color); font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 4px; margin-right: 8px; vertical-align: middle; } .item-category { display: inline-block; background-color: #e9ecef; color: var(--secondary-color); font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 4px; margin-right: 8px; vertical-align: middle; text-decoration: none; } .item-title { font-size: 18px; font-weight: 700; color: var(--primary-color); text-decoration: none; vertical-align: middle; } .item-title:hover { text-decoration: underline; } .item-comment-count { font-size: 14px; font-weight: 700; color: var(--accent-color); margin-left: 6px; vertical-align: middle; } .item-new-icon { display: inline-block; background: #e67e22; color: white; font-size: 10px; width: 16px; height: 16px; line-height: 16px; text-align: center; border-radius: 50%; margin-left: 6px; font-weight: bold; vertical-align: middle; } .item-meta { font-size: 14px; color: #868e96; } .item-meta span { margin-right: 12px; } .item-meta span:not(:last-child)::after { content: '|'; margin-left: 12px; color: #dee2e6; } .empty-list { padding: 80px 20px; text-align: center; color: #868e96; font-size: 18px; border-bottom: 1px solid #e9ecef; } .bo-list-footer { margin-top: 20px; text-align: right; } .bo-list-footer .btn-admin { padding: 6px 12px; font-size: 14px; background-color: #6c757d; color: white; border: 1px solid #6c757d; border-radius: 4px; cursor: pointer; } .bo-list-footer .btn-admin:hover { background-color: #5a6268; } .bo-pagination { display: flex; justify-content: center; margin-top: 40px; } .pg_wrap { display: flex; gap: 5px; } .pg_page, .pg_current, .pg_start, .pg_prev, .pg_next, .pg_end { display: inline-block; min-width: 32px; height: 32px; line-height: 30px; padding: 0 5px; text-align: center; border: 1px solid #dee2e6; border-radius: 4px; text-decoration: none; color: var(--secondary-color); background-color: #fff; } .pg_page:hover, .pg_start:hover, .pg_prev:hover, .pg_next:hover, .pg_end:hover { background-color: #f8f9fa; } .pg_current { background-color: var(--primary-color); color: #fff; border-color: var(--primary-color); font-weight: 700; } .bo-search-box { margin-top: 40px; padding: 20px; background-color: var(--light-gray); border-radius: 8px; text-align: center; } .bo-search-box form { display: flex; justify-content: center; align-items: center; gap: 10px; } .bo-search-box select, .bo-search-box .sch-input { padding: 10px; border: 1px solid #ced4da; border-radius: 4px; font-size: 16px; } .bo-search-box .sch-input { width: 300px; } .bo-search-box .sch-btn { padding: 10px 20px; background-color: var(--secondary-color); color: #fff; border: none; border-radius: 4px; font-size: 16px; font-weight: 700; cursor: pointer; } .bo-search-box .sch-btn:hover { background-color: var(--primary-color); } .selec_chk + label span { display: inline-block; width: 18px; height: 18px; margin-right: 5px; vertical-align: middle; background: #fff; border: 1px solid #d0d4df; border-radius: 3px; cursor: pointer; } .selec_chk:checked + label span { background: var(--primary-color) url('data:image/svg+xml;utf8,') no-repeat center center; border-color: var(--primary-color); } .lightbox_content { max-width: 90%; max-height: 90%; object-fit: contain; animation: zoomIn 0.3s; } .lightbox_close { position: absolute; top: 20px; right: 40px; color: #fff; font-size: 40px; font-weight: bold; transition: 0.3s; cursor: pointer; } .lightbox_close:hover { color: #bbb; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes zoomIn { from { transform: scale(0.8); } to { transform: scale(1); } } /* --- 📌 [수정] 게시판 쓰기 (Board Write) --- */ #bo_w { padding: 20px 0; max-width: 900px; margin: 0 auto; } #bo_w .write_div { margin-bottom: 30px; } #bo_w .frm_label { display: block; font-size: 18px; font-weight: 700; color: var(--secondary-color); margin-bottom: 12px; } #bo_w .frm_input { width: 100%; padding: 12px 15px; font-size: 16px; border: 1px solid #ced4da; border-radius: 6px; background-color: #fff; color: var(--text-color); transition: border-color 0.2s, box-shadow 0.2s; } #bo_w .frm_input:focus { border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(44, 62, 80, 0.1); outline: none; } /* 스마트에디터 테두리 */ #bo_w .cke_chrome { border-radius: 6px !important; border: 1px solid #ced4da !important; overflow: hidden; } /* 📌 [추가] 파일 미리보기 스타일 */ .file_preview_wrapper { position: relative; width: 100%; padding-top: 56.25%; /* 16:9 비율 */ border: 2px dashed #ced4da; border-radius: 8px; background-color: var(--light-gray); transition: border-color 0.3s; } .file_preview_wrapper:hover { border-color: var(--primary-color); } .file_preview { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; cursor: pointer; background-size: cover; background-position: center; background-repeat: no-repeat; } .preview_text { color: #868e96; font-weight: 500; } .file_info { margin-top: 10px; font-size: 14px; color: #495057; display: flex; justify-content: space-between; align-items: center; } .file_del label { color: #e53e3e; cursor: pointer; } .file_del label:hover { text-decoration: underline; } /* 📌 [수정] 버튼 영역 및 버튼 중앙 정렬 */ #bo_w .btn_confirm { text-align: right; margin-top: 40px; padding-top: 30px; border-top: 1px solid #e9ecef; } #bo_w .btn_confirm .btn { display: inline-flex; /* flexbox로 변경 */ align-items: center; /* 수직 중앙 정렬 */ justify-content: center; /* 수평 중앙 정렬 */ min-width: 120px; padding: 12px 28px; border-radius: 6px; text-decoration: none; font-weight: 700; font-size: 16px; transition: all 0.3s ease; margin-left: 8px; border: 1px solid; cursor: pointer; line-height: 1; } #bo_w .btn_confirm .btn_cancel { background-color: #6c757d; color: var(--white-color); border-color: #6c757d; } #bo_w .btn_confirm .btn_cancel:hover { background-color: #5a6268; } #bo_w .btn_confirm .btn_submit { background-color: var(--primary-color); color: var(--white-color); border-color: var(--primary-color); } #bo_w .btn_confirm .btn_submit:hover { background-color: var(--secondary-color); } /* --- 📌 [추가] 보기 전환 버튼 스타일 --- */ /* --- 📌 [수정] 보기 전환 토글 버튼 스타일 --- */ .btn-view-toggle { display: inline-flex; align-items: center; justify-content: center; width: 40px; /* 높이와 너비를 동일하게 설정 */ height: 40px; padding: 0; /* 패딩 제거 */ border-radius: 6px; text-decoration: none; font-weight: 700; transition: all 0.3s ease; margin-left: 8px; background-color: #fff; color: var(--secondary-color); border: 1px solid #ddd; cursor: pointer; } .btn-view-toggle:hover { background-color: #f5f5f5; border-color: var(--secondary-color); } .btn-view-toggle .fa { font-size: 18px; } /* --- 📌 [추가] 목록 페이지 상태 배지 스타일 --- */ .item-status-wrapper, .card-status-wrapper { display: inline-flex; align-items: center; gap: 8px; } .status-badge { display: inline-block; padding: 3px 10px; font-size: 12px; font-weight: 700; border-radius: 12px; color: #fff; line-height: 1.5; } /* 노출중, 즉시노출 */ .status-badge.status-active { background-color: #28a745; /* 초록색 */ } /* 예약됨 */ .status-badge.status-scheduled { background-color: #ffc107; /* 노란색 */ color: #212529; } /* 기간만료 */ .status-badge.status-expired { background-color: #6c757d; /* 회색 */ } .reservation-info { font-size: 13px; color: #868e96; } /* --- 📌 [수정] 목록 아이템 액션 버튼 스타일 --- */ .item-actions { margin-left: auto; /* 버튼들을 오른쪽 끝으로 보냄 */ padding-left: 20px; flex-shrink: 0; display: flex; align-items: center; gap: 16px; /* 액션 그룹 사이의 간격 */ } .action-group { display: flex; align-items: center; gap: 8px; /* 라벨과 버튼, 버튼과 버튼 사이 간격 */ } .item-action-label { font-size: 13px; font-weight: 700; color: var(--secondary-color); } .btn-status-toggle { background: none; border: none; cursor: pointer; font-size: 28px; padding: 5px; transition: color 0.3s ease; display: flex; align-items: center; } .btn-status-toggle.status-on { color: #28a745; } .btn-status-toggle.status-off { color: #6c757d; } .btn-status-toggle:hover { opacity: 0.7; } /* 수정/삭제 버튼 공통 스타일 */ .btn-action { display: inline-block; padding: 4px 12px; font-size: 13px; font-weight: 700; border-radius: 4px; text-decoration: none; transition: all 0.2s; border: 1px solid transparent; white-space: nowrap; } .btn-action.btn-modify { background-color: #f8f9fa; color: #495057; border-color: #dee2e6; } .btn-action.btn-modify:hover { background-color: #e9ecef; } .btn-action.btn-delete { background-color: #fff5f5; color: #e53e3e; border-color: #f5c6cb; } .btn-action.btn-delete:hover { background-color: #fed7d7; } /* --- 📌 [수정] 카드형 레이아웃 및 하위 요소 스타일 --- */ #bo_list_body.card-view { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 25px; } /* 기본 상태에서는 카드형 숨기기 */ .list-view .bo-card-item { display: none; } /* 카드형 보기일 때 목록형 숨기기 */ .card-view .bo-list-item { display: none; } .card-view .list-chk-all { display: none; } .bo-card-item { position: relative; border: 1px solid #e9ecef; border-radius: 8px; overflow: hidden; background-color: #fff; transition: transform 0.3s ease, box-shadow 0.3s ease; display: flex; flex-direction: column; } .bo-card-item:hover { transform: translateY(-5px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); } .card-thumbnail { position: relative; width: 100%; padding-top: 65%; background-color: #f8f9fa; } .card-thumbnail a { display: block; } .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; } .card-content-preview { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 20px; display: flex; align-items: center; justify-content: center; text-align: left; font-size: 14px; color: #495057; line-height: 1.6; overflow: hidden; } .card-info { padding: 15px; display: flex; flex-direction: column; flex-grow: 1; } .card-subject { font-size: 16px; font-weight: 700; color: var(--primary-color); margin-bottom: 10px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .card-subject a { text-decoration: none; color: var(--primary-color); } .card-subject a:hover { text-decoration: underline; } .card-chk { position: absolute; top: 10px; right: 10px; } .card-status-wrapper { margin-top: 10px; padding-top: 0; border-top: none; } .card-actions { margin-top: auto; padding-top: 12px; border-top: 1px solid #f1f3f5; display: flex; align-items: center; justify-content: space-between; } .card-actions .item-action-label { color: var(--secondary-color); font-size: 13px; font-weight: 700; } .card-actions .btn-status-toggle { font-size: 28px; padding: 0; } .card-actions .btn-status-toggle.status-on { color: #28a745; } .card-actions .btn-status-toggle.status-off { color: #6c757d; } /* --- 📌 [추가] 숨김 상태 배지 스타일 --- */ .status-badge.status-hidden { background-color: #343a40; /* 어두운 회색 */ } /* --- 📌 [추가] main_visual 스킨 전용 스타일 --- */ /* 라디오 버튼 그룹 스타일 */ .option_group { display: flex; gap: 20px; } .option_group label { display: flex; align-items: center; gap: 6px; font-size: 16px; cursor: pointer; } .option_group input[type="radio"] { width: 18px; height: 18px; } /* 날짜 선택 그룹 스타일 */ .date_picker_group { display: flex; align-items: center; gap: 15px; background-color: #f8f9fa; padding: 20px; border-radius: 8px; } .date_picker_group .date_item { flex: 1; } .date_picker_group .frm_label { font-size: 16px; margin-bottom: 8px; } .date_picker_group .datepicker { background-color: white; } .date_picker_group .date_divider { font-size: 20px; font-weight: 700; color: #868e96; padding-top: 30px; /* 라벨 높이만큼 패딩 */ } /* 파일 미리보기 정보 스타일 */ .preview_info { position: absolute; bottom: 10px; left: 10px; right: 10px; background-color: rgba(0, 0, 0, 0.6); color: white; padding: 8px 12px; border-radius: 6px; font-size: 14px; display: flex; justify-content: space-between; align-items: center; } .preview_info .file_del label { color: #ffc107; text-decoration: none; } .preview_info .file_del label:hover { text-decoration: underline; } /* --- 📌 [추가] 파일 업로드 그리드 스타일 --- */ .file_upload_grid { display: grid; /* 화면 크기에 따라 1~3개의 컬럼으로 자동 변경되는 반응형 그리드 */ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 20px; } .current_file_name { /* 파일 이름이 길 경우 말줄임표(...) 처리 */ white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 70%; /* 삭제 버튼 공간 확보 */ } .view_content { padding: 15px; border: 1px solid #ddd; background: #fafafa; line-height: 1.8; word-break: break-word; max-height: 400px; /* 최대 높이 */ overflow-y: auto; /* 세로 스크롤 */ } .view_content img { max-width: 100%; height: auto; display: block; margin: 0 auto; } /* --- 📌 [수정] 게시판 보기 (Board View) --- */ #bo_v { padding-top: 20px; } #bo_v_title { font-size: 32px; font-weight: 900; color: var(--primary-color); margin-bottom: 20px; line-height: 1.4; word-break: keep-all; } #bo_v_info { display: flex; align-items: center; gap: 20px; padding-bottom: 25px; margin-bottom: 35px; border-bottom: 1px solid #e9ecef; font-size: 14px; color: #868e96; } #bo_v_info strong { font-weight: 700; color: var(--secondary-color); } #bo_v_info span { display: inline-flex; align-items: center; gap: 6px; } #bo_v_atc { padding-bottom: 50px; margin-bottom: 50px; border-bottom: 1px solid #e9ecef; } #bo_v_main_visual { margin-bottom: 40px; border-radius: 12px; overflow: hidden; background-color: #000; } #bo_v_main_visual img, #bo_v_main_visual video { display: block; width: 100%; height: auto; } #bo_v_con { line-height: 1.8; font-size: 16px; color: var(--text-color); min-height: 100px; } #bo_v_con img { max-width: 100%; height: auto; border-radius: 8px; margin: 20px 0; } #bo_v_gallery { margin-top: 40px; padding-top: 40px; border-top: 1px solid #e9ecef; } #bo_v_gallery h3 { font-size: 20px; font-weight: 700; color: var(--primary-color); margin-bottom: 20px; } .gallery_grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 15px; } .gallery_grid a { display: block; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; cursor: pointer; background-color: #f8f9fa; aspect-ratio: 1 / 1; } .gallery_grid a:hover { transform: translateY(-5px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12); } .gallery_grid img { width: 100%; height: 100%; object-fit: cover; } .gallery_item_other { background-color: #f8f9fa; border: 1px solid #e9ecef; border-radius: 8px; padding: 15px; display: flex; align-items: center; justify-content: center; text-align: center; aspect-ratio: 1 / 1; } .view_file_link { text-decoration: none; color: var(--secondary-color); font-weight: 500; } .view_file_link .fa { margin-right: 8px; } #bo_v_bot { margin-bottom: 60px; } #bo_v_bot .btn_area { display: flex; justify-content: flex-end; gap: 10px; margin-top: 30px; } #bo_v_bot a, #bo_v_bot button { display: inline-flex; align-items: center; justify-content: center; padding: 10px 24px; border-radius: 6px; text-decoration: none; font-weight: 700; font-size: 15px; transition: all 0.3s ease; border: 1px solid; cursor: pointer; } #bo_v_bot .btn_b01 { background-color: #6c757d; color: var(--white-color); border-color: #6c757d; } #bo_v_bot .btn_b02 { background-color: var(--primary-color); color: var(--white-color); border-color: var(--primary-color); } #bo_v_bot .btn_b01:hover { background-color: #5a6268; } #bo_v_bot .btn_b02:hover { background-color: var(--secondary-color); } .image_lightbox { display: none; position: fixed; z-index: 9999; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.85); justify-content: center; align-items: center; animation: fadeIn 0.3s; } .lightbox_content { max-width: 90%; max-height: 90%; object-fit: contain; animation: zoomIn 0.3s; } .lightbox_close { position: absolute; top: 20px; right: 40px; color: #fff; font-size: 40px; font-weight: bold; transition: 0.3s; cursor: pointer; } .lightbox_close:hover { color: #bbb; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes zoomIn { from { transform: scale(0.8); } to { transform: scale(1); } } /* --- 반응형 스타일 --- */ @media (max-width: 768px) { .bo-list-bottom-wrapper { /* 페이지네이션과 검색창이 세로로 자연스럽게 배치되도록 합니다. */ display: flex; flex-direction: column; gap: 30px; /* 페이지네이션과 검색창 사이 간격 */ margin-top: 20px; } .bo-pagination, .bo-search-box { margin-top: 0; /* 위에서 gap으로 간격을 줬으므로 개별 margin은 초기화 */ } .bo-search-box { padding: 15px; } .bo-search-box form { flex-direction: column; /* 검색 요소들을 세로로 쌓음 */ align-items: stretch; /* 너비를 100%로 */ gap: 10px; /* 검색 요소들 사이 간격 */ } .bo-search-box .sch-input { width: 100%; /* 입력창 너비 100% */ } /* --- [추가] 글쓰기 폼 반응형 스타일 --- */ /* 날짜 선택 그룹을 세로로 쌓음 */ .date_picker_group { flex-direction: column; align-items: stretch; /* 아이템들을 꽉 채움 */ gap: 20px; } /* 물결(~) 표시를 회전시켜 세로 구분선처럼 보이게 함 */ .date_picker_group .date_divider { padding-top: 0; text-align: center; transform: rotate(90deg); margin: -5px 0; /* 회전된 아이콘 주변 여백 미세 조정 */ } }