/* =====================================================
   ParkPlay Admin - 페이지별 CSS 통합
   ===================================================== */

/* --- [공통] 유틸리티 --- */
.badge-inline {
    margin-left: 8px;
    vertical-align: middle;
    font-size: 12px;
}

/* --- [공통] 이미지 로드 실패 placeholder --- */
.img-error {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--content-bg);
    border: 1px dashed var(--border-color);
    border-radius: 8px;
    min-height: 60px;
}
.img-error::after {
    content: '\f03e'; /* fa-image */
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
    font-size: 24px;
    color: var(--text-muted);
    opacity: 0.5;
}

/* --- [공통] WebToast 알림 --- */
.web-toast-container {
    position: fixed;
    top: 24px;
    right: 24px;
    z-index: 99999;
    display: flex;
    flex-direction: column;
    gap: 8px;
    pointer-events: none;
}

.web-toast {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 20px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 500;
    color: var(--card-bg);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
    pointer-events: auto;
    opacity: 0;
    transform: translateX(40px);
    transition: opacity 0.3s, transform 0.3s;
}

.web-toast.show {
    opacity: 1;
    transform: translateX(0);
}

.web-toast.success {
    background: var(--success, #10b981);
}

.web-toast.error {
    background: var(--danger, #ef4444);
}

.web-toast.warning {
    background: var(--warning, #f59e0b);
    color: var(--text-primary);
}

.web-toast.info {
    background: var(--info, #3b82f6);
}

.web-toast i {
    font-size: 16px;
    flex-shrink: 0;
}

/* --- [공통] 모달 오버레이 --- */
.modal-overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: var(--modal-overlay-bg);
    z-index: 9000;
    display: none;
    justify-content: center;
    align-items: center;
}

.modal-overlay.active {
    display: flex;
}

.modal-container {
    background: var(--card-bg);
    border-radius: 12px;
    width: 90%;
    max-width: 480px;
    max-height: 85vh;
    overflow-y: auto;
    box-shadow: var(--modal-shadow);
}

.modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 24px;
    border-bottom: 1px solid var(--border-color);
}

.modal-header h5 {
    font-size: 18px;
    font-weight: 600;
    margin: 0;
}

.modal-close {
    background: none;
    border: none;
    font-size: 18px;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px;
}

.modal-close:hover {
    color: var(--text-primary);
}

.modal-body {
    padding: 24px;
}

.modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    padding: 16px 24px;
    border-top: 1px solid var(--border-color);
}

.modal-sm {
    max-width: 420px;
}

/* --- [공통] 입력 필드 + 초기화 버튼 --- */
.input-with-clear {
    position: relative;
    display: flex;
    align-items: center;
}

.input-with-clear .admin-form-input {
    flex: 1;
    padding-right: 32px;
}

.btn-input-clear {
    position: absolute;
    right: 8px;
    background: none;
    border: none;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px;
    font-size: 12px;
    line-height: 1;
    border-radius: 50%;
    transition: color 0.15s, background 0.15s;
}

.btn-input-clear:hover {
    color: var(--danger);
    background: rgba(239, 68, 68, 0.1);
}

/* --- [공통] 폼 힌트 ---
   유일 정의다. 종전에는 언스코프 `.form-hint` 가 :190 · :5832 · :7644 세 곳에 있어
   실제 렌더가 셋의 조합이었다 (2026-08-19 실측: font-size 11px(마지막 정의) +
   margin-top 6px(마지막) + margin-bottom 12px(첫 정의) + display block(중간)).
   11px 은 페이지 단위 안내문에 작아서 공통값 12px 로 되돌리고, 간격은 현행 렌더와
   같게 유지한다(mt 6 / mb 12). 화면별 조정이 필요하면 컨테이너로 스코프할 것. */
.form-hint {
    display: block;
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 6px;
    margin-bottom: 12px;
    padding-left: 2px;
}

.form-hint i {
    margin-right: 4px;
    color: var(--info);
}

/* --- [대시보드] main\webMainStyle.css --- */
.dashboard-container {
    min-height: 0;
}

.dashboard-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 16px;
    margin-bottom: 24px;
}

.dashboard-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
    margin-bottom: 24px;
}

/* 빠른 현황 칩 */
.dashboard-quick-row {
    display: flex;
    gap: 12px;
    margin-bottom: 24px;
    flex-wrap: wrap;
}

.dashboard-quick-chip {
    display: flex;
    align-items: center;
    gap: 10px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 12px 18px;
    box-shadow: var(--card-shadow);
    cursor: pointer;
    transition: all 0.2s;
    text-decoration: none;
    color: var(--text-primary);
}

.dashboard-quick-chip:hover {
    box-shadow: var(--card-hover-shadow);
    transform: translateY(-1px);
}

.quick-chip-icon {
    width: 36px;
    height: 36px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}

.quick-chip-icon.chip-warn {
    background: var(--warning-light);
    color: var(--warning);
}

.quick-chip-icon.chip-danger {
    background: var(--danger-light);
    color: var(--danger);
}

.quick-chip-icon.chip-info {
    background: var(--info-light);
    color: var(--info);
}

.quick-chip-label {
    font-size: 13px;
    color: var(--text-secondary);
}

.quick-chip-value {
    font-size: 18px;
    font-weight: 700;
}

/* 업체 현황 카드형 */
.dashboard-vendor-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.dashboard-vendor-item {
    text-align: center;
    padding: 16px;
    border-radius: 10px;
    background: var(--bg-muted);
}

.dashboard-vendor-type {
    font-size: 12px;
    color: var(--text-muted);
    margin-bottom: 4px;
}

.dashboard-vendor-type i {
    margin-right: 4px;
}

.dashboard-vendor-count {
    font-size: 28px;
    font-weight: 700;
    color: var(--primary);
}

.dashboard-vendor-detail {
    font-size: 11px;
    color: var(--text-muted);
    margin-top: 4px;
}

.dashboard-vendor-detail .vc-active {
    color: var(--success);
    font-weight: 600;
}

.dashboard-vendor-detail .vc-inactive {
    color: var(--danger);
    font-weight: 600;
}

/* 최근 리뷰 */
.dashboard-review-list {
    max-height: 320px;
    overflow-y: auto;
}

.dashboard-review-item.review-low {
    background: var(--danger-bg);
}

.dashboard-review-top {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 6px;
}

.dashboard-review-stars {
    display: flex;
    align-items: center;
    gap: 2px;
    font-size: 13px;
}

.dashboard-review-stars .star-filled {
    color: var(--warning);
}

.dashboard-review-stars .star-empty {
    color: var(--text-muted);
}

.dashboard-review-rating {
    margin-left: 6px;
    font-weight: 700;
    font-size: 13px;
    color: var(--text-primary);
}

.dashboard-review-rating.rating-low {
    color: var(--danger);
}

.dashboard-review-date {
    font-size: 12px;
    color: var(--text-muted);
}

.dashboard-review-store {
    font-size: 12px;
    color: var(--primary);
    font-weight: 500;
    margin-bottom: 4px;
}

.dashboard-review-content {
    font-size: 13px;
    color: var(--text-primary);
    line-height: 1.5;
    margin-bottom: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.dashboard-review-author {
    font-size: 12px;
    color: var(--text-muted);
}

/* 추이 차트 */
.dashboard-trend-section {
    margin-bottom: 4px;
}

.dashboard-trend-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.dashboard-trend-label i {
    color: var(--primary);
}

.dashboard-trend-chart {
    display: flex;
    align-items: flex-end;
    gap: 8px;
    height: 80px;
}

.dashboard-trend-bar-item {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
}

.dashboard-trend-bar {
    width: 100%;
    border-radius: 4px 4px 0 0;
    min-height: 4px;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    transition: height 0.3s;
}

.dashboard-trend-bar.bar-green {
    background: var(--primary);
}

.dashboard-trend-bar.bar-blue {
    background: var(--info);
}

.dashboard-trend-bar span {
    font-size: 10px;
    color: var(--card-bg);
    font-weight: 600;
    padding-top: 2px;
}

.dashboard-trend-day {
    font-size: 11px;
    color: var(--text-muted);
}

.dashboard-trend-bar-item.today .dashboard-trend-day {
    color: var(--primary);
    font-weight: 600;
}

.dashboard-trend-divider {
    height: 1px;
    background: var(--border-color);
    margin: 16px 0;
}

@media (max-width: 1200px) {
    .dashboard-stats {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {
    .dashboard-stats {
        grid-template-columns: 1fr;
    }

    .dashboard-grid {
        grid-template-columns: 1fr;
    }

    .dashboard-vendor-grid {
        grid-template-columns: 1fr;
    }
}

/* --- [배너관리] banner\bannerStyle.css --- */

/* 배너/팝업 목록 툴바 카드 (공통 modifier 스타일 공유) */
.banner-list-container .admin-card--toolbar,
.popup-list-container .admin-card--toolbar {
    margin-bottom: 16px;
    padding: 16px;
}

.banner-list-container .admin-toolbar--compact,
.popup-list-container .admin-toolbar--compact {
    margin-bottom: 0;
}

.banner-list-container .admin-search-bar--inline,
.popup-list-container .admin-search-bar--inline {
    margin-bottom: 0;
    flex: 1;
}

.banner-list-container .select-filter,
.popup-list-container .select-filter {
    width: 120px;
    flex: none;
}

/* 배너 테이블 컬럼 너비 */
.banner-list-container .col-no {
    width: 60px;
}

.banner-list-container .col-thumb {
    width: 80px;
}

.banner-list-container .col-status {
    width: 100px;
}

.banner-list-container .col-date {
    width: 120px;
}

.banner-list-container .col-author {
    width: 100px;
}

.banner-list-container .col-actions {
    width: 160px;
}

/* 배너 목록 그라데이션 썸네일 */
.banner-list-container .banner-thumb--gradient {
    background: var(--banner-thumb-bg, linear-gradient(135deg, var(--primary), var(--info)));
    border-radius: 6px;
}

/* 배너 목록 링크 스타일 */
.banner-list-container .banner-title-link {
    color: inherit;
    text-decoration: none;
}

.banner-list-container .banner-thumb {
    width: 64px;
    height: 36px;
    border-radius: 4px;
    overflow: hidden;
    background: var(--content-bg);
    border: 1px solid var(--border-color);
}

.banner-list-container .banner-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.banner-list-container .action-btns {
    display: flex;
    gap: 4px;
}

/* 배너 작성/수정 폼 */
.banner-write-container .banner-image-upload {
    margin-bottom: 8px;
}

.banner-write-container .banner-preview {
    width: 100%;
    max-width: 600px;
    /* 업로드 드롭존도 앱 히어로와 같은 15/8 이어야 한다 — 이 박스는 자기 안에
       '권장 1200x640 (15:8)' 안내문을 인쇄하고(bannerWrite.jsp:141) 업로드 이미지를
       #previewImage{object-fit:cover} 로 채운다. 3/1 이던 동안 안내대로 올린 관리자는
       여기서 세로 37.5%(1 − 1.875/3)가 잘린 그림을 보고, 바로 옆 app-banner-preview(:676)
       에서는 잘리지 않은 같은 그림을 봤다 — 한 화면의 두 미리보기가 서로를 반증했다.
       2026-08-19 실측: 드롭존 600x200(3.0000) vs 앱 미리보기 296x157.86(1.8751). */
    aspect-ratio: 15 / 8;
    border: 2px dashed var(--border-color);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    transition: all 0.2s ease;
    overflow: hidden;
    position: relative;
    background: var(--content-bg);
}

.banner-write-container .banner-preview:hover,
.banner-write-container .banner-preview.dragover {
    border-color: var(--primary);
    background: var(--primary-light);
}

.banner-write-container .preview-placeholder {
    text-align: center;
    color: var(--text-muted);
}

.banner-write-container .preview-placeholder i {
    font-size: 36px;
    margin-bottom: 8px;
    display: block;
}

.banner-write-container .preview-placeholder p {
    font-size: 14px;
    margin: 0 0 4px;
}

.banner-write-container .preview-placeholder span {
    font-size: 12px;
    color: var(--text-muted);
}

.banner-write-container #previewImage {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* 배너 작성 2단 그리드 (폼 + 미리보기) */
.banner-write-grid {
    display: grid;
    grid-template-columns: 1fr 380px;
    gap: 24px;
    align-items: start;
}

@media (max-width: 1024px) {
    .banner-write-grid {
        grid-template-columns: 1fr;
    }
}

/* 앱 배너 미리보기 */
.banner-write-container .app-banner-preview-section {
    padding: 4px 0;
}

.banner-write-container .app-banner-preview-section .admin-form-label {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 4px;
}

.banner-write-container .preview-desc {
    font-size: 13px;
    color: var(--text-muted);
    margin-bottom: 16px;
}

.banner-write-container .app-banner-preview-wrap {
    background: var(--content-bg);
    border-radius: 16px;
    padding: 16px;
    border: 1px solid var(--border-color);
}

.banner-write-container .app-banner-preview {
    /* 앱 홈 히어로와 같은 비율이어야 미리보기가 거짓말을 하지 않는다 —
       앱은 15/8(375x200, Figma 2154:2415)이고 object-fit:cover 로 채운다.
       3/1 이던 동안 관리자는 잘리지 않은 그림을 보고 앱에서는 좌우 18.75%씩 잘렸다. */
    aspect-ratio: 15 / 8;
    padding: 10px 14px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    color: var(--card-bg);
    border-radius: 16px;
    background: var(--banner-preview-bg, var(--banner-preview-default-bg, linear-gradient(135deg, var(--primary-hover), var(--primary))));
    overflow: hidden;
    position: relative;
    background-size: cover;
    background-position: center;
}

.banner-write-container .app-banner-preview.has-image {
    background-blend-mode: overlay;
}

.banner-write-container .app-banner-preview .banner-overlay {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.3);
    opacity: 0;
    transition: opacity 0.3s ease;
}

.banner-write-container .app-banner-preview.has-image .banner-overlay {
    opacity: 1;
}

.banner-write-container .app-banner-preview .banner-content {
    position: relative;
    z-index: 1;
    flex: 1;
    min-width: 0;
}

.banner-write-container .app-banner-preview .banner-tag {
    display: inline-block;
    background: rgba(255, 255, 255, 0.25);
    padding: 3px 10px;
    border-radius: 20px;
    font-size: 10px;
    font-weight: 700;
    margin-bottom: 8px;
}

.banner-write-container .app-banner-preview .banner-content h2 {
    font-size: 17px;
    font-weight: 700;
    margin-bottom: 4px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.banner-write-container .app-banner-preview .banner-content p {
    font-size: 12px;
    opacity: 0.9;
    margin: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.banner-write-container .app-banner-pagination {
    display: flex;
    justify-content: center;
    gap: 6px;
    margin-top: 12px;
}

.banner-write-container .app-banner-pagination .dot {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--border-color);
}

.banner-write-container .app-banner-pagination .dot.active {
    width: 20px;
    border-radius: 4px;
    background: var(--primary);
}

/* 배경 타입 선택 */
.banner-write-container .bg-type-selector {
    display: flex;
    gap: 16px;
    margin-bottom: 12px;
}

.banner-write-container .bg-type-option {
    display: flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    font-size: 14px;
}

.banner-write-container .bg-type-option input {
    accent-color: var(--primary);
}

/* 그라데이션 옵션 */
.banner-write-container .gradient-color-row {
    display: flex;
    gap: 16px;
    margin-bottom: 12px;
}

.banner-write-container .color-picker-group {
    display: flex;
    align-items: center;
    gap: 8px;
}

.banner-write-container .color-picker-group label {
    font-size: 13px;
    color: var(--text-secondary);
    white-space: nowrap;
}

.banner-write-container .color-picker-group input[type="color"] {
    width: 40px;
    height: 32px;
    border: 1px solid var(--border-color);
    border-radius: 6px;
    padding: 2px;
    cursor: pointer;
    background: none;
}

.banner-write-container .gradient-presets {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.banner-write-container .gradient-preset {
    width: 40px;
    height: 28px;
    border-radius: 6px;
    cursor: pointer;
    border: 2px solid transparent;
    transition: all 0.2s ease;
    background: var(--gradient-preset-bg);
}

.banner-write-container .gradient-preset:hover,
.banner-write-container .gradient-preset.active {
    border-color: var(--text-primary);
    transform: scale(1.1);
}

/* 공지사항 연결 */
.banner-write-container .notice-link-group {
    display: flex;
    align-items: center;
}

.banner-write-container .notice-link-display {
    display: flex;
    align-items: center;
    gap: 8px;
    flex: 1;
}

.banner-write-container .notice-link-text {
    font-size: 14px;
    color: var(--text-secondary);
    flex: 1;
}

/* 공지사항 선택 모달 */
.banner-notice-modal {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.5);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 9999;
}

.banner-notice-modal.active {
    display: flex;
}

.notice-modal-container {
    background: var(--card-bg);
    border-radius: 16px;
    width: 90%;
    max-width: 560px;
    max-height: 70vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

.notice-modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid var(--border-color);
}

.notice-modal-header h3 {
    margin: 0;
    font-size: 16px;
    font-weight: 700;
}

.notice-modal-close {
    background: none;
    border: none;
    font-size: 18px;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px;
}

.notice-modal-search {
    display: flex;
    gap: 8px;
    padding: 12px 20px;
    border-bottom: 1px solid var(--border-color);
}

.notice-modal-search .admin-form-input {
    flex: 1;
}

.notice-modal-list {
    overflow-y: auto;
    flex: 1;
    padding: 8px 0;
}

.notice-modal-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 20px;
    cursor: pointer;
    transition: background 0.15s ease;
}

.notice-modal-item:hover {
    background: var(--content-bg);
}

.notice-modal-title {
    flex: 1;
    font-size: 14px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.notice-modal-date {
    font-size: 12px;
    color: var(--text-muted);
    white-space: nowrap;
}

.notice-modal-empty {
    text-align: center;
    padding: 40px 20px;
    color: var(--text-muted);
    font-size: 14px;
}

.notice-modal-footer {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
    padding: 12px 20px;
    border-top: 1px solid var(--border-color);
}

.notice-page-info {
    font-size: 13px;
    color: var(--text-secondary);
    min-width: 60px;
    text-align: center;
}

.form-check-group {
    display: flex;
    gap: 24px;
    align-items: center;
}

.form-check-group .form-check-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 14px;
    cursor: pointer;
}

.form-check-group .form-check-input {
    accent-color: var(--primary);
}

.form-actions {
    display: flex;
    justify-content: space-between;
    margin-top: 32px;
    padding-top: 24px;
    border-top: 1px solid var(--border-color);
}

/* --- [공지사항관리] notice\noticeStyle.css --- */

/* 공지사항 목록 - 툴바 카드 */
.notice-list-container .notice-toolbar-card {
    margin-bottom: 16px;
    padding: 16px;
}

.notice-list-container .notice-toolbar-card .admin-toolbar {
    margin-bottom: 0;
}

.notice-list-container .notice-toolbar-card .admin-search-bar {
    margin-bottom: 0;
    flex: 1;
}

.notice-list-container .notice-type-select {
    width: 120px;
    flex: none;
}

/* 공지사항 목록 - 테이블 컬럼 너비 */
.notice-list-container .col-no       { width: 60px; }
.notice-list-container .col-type     { width: 100px; }
.notice-list-container .col-important{ width: 70px; }
.notice-list-container .col-views    { width: 80px; }
.notice-list-container .col-date     { width: 130px; }
.notice-list-container .col-author   { width: 100px; }
.notice-list-container .col-actions  { width: 140px; }

/* 공지사항 목록 - 아이콘 색상 */
.notice-list-container .icon-star-important {
    color: var(--warning);
}

.notice-list-container .icon-star-default {
    color: var(--text-muted);
}

/* 공지사항 목록 - 셀 텍스트 정렬 */
.notice-list-container .text-center {
    text-align: center;
}

.notice-list-container .notice-important-row td {
    background: var(--warning-light);
}

.notice-write-container .admin-form-textarea {
    min-height: 300px;
}

.notice-write-container .notice-type-chips {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}

.notice-write-container .notice-type-chip {
    padding: 6px 16px;
    border-radius: 20px;
    border: 1px solid var(--border-color);
    background: var(--card-bg);
    cursor: pointer;
    font-size: 13px;
    transition: all 0.2s ease;
}

.notice-write-container .notice-type-chip:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.notice-write-container .notice-type-chip.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

.notice-write-container .notice-type-chip input[type="radio"] {
    display: none;
}

/* 공지사항 목록 - 제목 링크 */
.notice-list-container .notice-title-link {
    color: var(--text-primary);
    text-decoration: none;
    font-weight: 600;
    transition: color 0.2s ease;
    display: inline-block;
    min-width: 200px;
    word-break: keep-all;
}

.notice-list-container .notice-title-link:hover {
    color: var(--primary);
    text-decoration: underline;
}

/* --- [공지사항 상세] notice\noticeViewStyle.css --- */
.notice-view-container .notice-view-header {
    margin-bottom: 12px;
}

.notice-view-container .notice-view-badges {
    display: flex;
    gap: 8px;
    align-items: center;
}

.notice-view-container .notice-view-title {
    font-size: 22px;
    font-weight: 700;
    color: var(--text-primary);
    margin: 12px 0 16px;
    line-height: 1.4;
}

.notice-view-container .notice-view-meta {
    display: flex;
    gap: 20px;
    align-items: center;
    font-size: 13px;
    color: var(--text-muted);
}

.notice-view-container .notice-view-meta .meta-item {
    display: flex;
    align-items: center;
    gap: 6px;
}

.notice-view-container .notice-view-divider {
    margin: 20px 0;
    border: none;
    border-top: 1px solid var(--border-color);
}

.notice-view-container .notice-view-content {
    font-size: 15px;
    line-height: 1.8;
    color: var(--text-primary);
    word-break: break-word;
    min-height: 200px;
    padding: 8px 0;
}

/* 에디터 HTML 콘텐츠 스타일 초기화 */
.notice-view-container .notice-view-content img {
    max-width: 100%;
    height: auto;
    border-radius: 8px;
    margin: 8px 0;
}

.notice-view-container .notice-view-content ul,
.notice-view-container .notice-view-content ol {
    padding-left: 20px;
    margin: 8px 0;
}

.notice-view-container .notice-view-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 8px 0;
}

.notice-view-container .notice-view-content table td,
.notice-view-container .notice-view-content table th {
    border: 1px solid var(--border-color);
    padding: 8px;
}

.notice-view-container .notice-view-actions {
    display: flex;
    gap: 8px;
}

/* 공지사항 상세 - 빈 상태 버튼 마진 */
.notice-view-container .admin-empty-state .btn-admin {
    margin-top: 16px;
}

/* Summernote 에디터 커스텀 스타일 */
.notice-write-container .note-editor {
    border-radius: 8px;
    border-color: var(--border-color);
}

.notice-write-container .note-editor .note-editing-area {
    background: var(--card-bg);
}

.notice-write-container .note-editor .note-toolbar {
    flex-wrap: wrap;
}

.notice-write-container .note-editor .note-toolbar .note-btn-group {
    flex-wrap: wrap;
}

/* --- [스크린 대시보드] mngscreen\screenDashboardStyle.css --- */
.screen-dashboard-container {
    min-height: 0;
}

/* 업체 정보 헤더 */
.screen-dashboard-container .screen-store-header {
    margin-bottom: 24px;
}

.screen-dashboard-container .store-header-content {
    display: flex;
    align-items: center;
    gap: 20px;
}

.screen-dashboard-container .store-header-thumb {
    width: 80px;
    height: 80px;
    border-radius: 12px;
    overflow: hidden;
    flex-shrink: 0;
    background: var(--content-bg);
    border: 1px solid var(--border-color);
}

.screen-dashboard-container .store-header-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.screen-dashboard-container .store-thumb-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
    color: var(--text-muted);
    background: var(--content-bg);
}

.screen-dashboard-container .store-header-info {
    flex: 1;
    min-width: 0;
}

.screen-dashboard-container .store-header-name {
    font-size: 20px;
    font-weight: 700;
    color: var(--text-primary);
    margin: 0 0 6px;
}

.screen-dashboard-container .store-header-addr {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0 0 8px;
}

.screen-dashboard-container .store-header-addr i {
    margin-right: 4px;
    color: var(--primary);
}

.screen-dashboard-container .store-header-meta {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
}

.screen-dashboard-container .store-header-meta .meta-item {
    font-size: 13px;
    color: var(--text-muted);
    display: flex;
    align-items: center;
    gap: 4px;
}

.screen-dashboard-container .store-header-actions {
    flex-shrink: 0;
}

.screen-dashboard-container .store-header-empty {
    text-align: center;
    padding: 20px;
    color: var(--text-muted);
    font-size: 14px;
}

.screen-dashboard-container .store-header-empty a {
    color: var(--primary);
    text-decoration: none;
    font-weight: 600;
}

.screen-dashboard-container .store-header-empty a:hover {
    text-decoration: underline;
}

/* 통계 카드 neutral 상태 */
.stat-change.neutral {
    color: var(--text-muted);
    font-size: 12px;
}

/* 빠른 바로가기 */
.screen-quick-links {
    margin-top: 24px;
}

.screen-quick-links .section-title {
    font-size: 16px;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 16px;
}

.quick-links-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 12px;
}

.quick-link-card {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px 20px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    text-decoration: none;
    color: inherit;
    transition: all 0.2s ease;
}

.quick-link-card:hover {
    border-color: var(--primary);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
    transform: translateY(-1px);
    color: inherit;
    text-decoration: none;
}

.quick-link-icon {
    width: 42px;
    height: 42px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex-shrink: 0;
}

.quick-link-icon.blue {
    background: var(--info-light);
    color: var(--info);
}

.quick-link-icon.green {
    background: var(--primary-light);
    color: var(--success);
}

.quick-link-icon.orange {
    background: var(--warning-light);
    color: var(--warning);
}

.quick-link-icon.purple {
    background: var(--purple-light);
    color: var(--purple);
}

.quick-link-icon.teal {
    background: rgba(5, 150, 105, 0.1);
    color: var(--primary);
}

.quick-link-icon.red {
    background: rgba(239, 68, 68, 0.1);
    color: var(--danger);
}

.quick-link-text {
    flex: 1;
    min-width: 0;
}

.quick-link-text h4 {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0 0 2px;
}

.quick-link-text p {
    font-size: 12px;
    color: var(--text-muted);
    margin: 0;
}

.quick-link-arrow {
    color: var(--text-muted);
    font-size: 12px;
    flex-shrink: 0;
}

@media (max-width: 1024px) {
    .screen-dashboard-container .store-header-content {
        flex-wrap: wrap;
    }

    .screen-dashboard-container .store-header-actions {
        width: 100%;
    }
}

@media (max-width: 768px) {
    .quick-links-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .screen-dashboard-container .store-header-thumb {
        width: 60px;
        height: 60px;
    }
}

/* 대시보드 별점 아이콘 */
.dashboard-star-icon {
    color: var(--warning);
}

/* 대시보드 리뷰 목록 */
.dashboard-review-list {
    padding: 0;
}

.dashboard-review-item {
    padding: 12px 16px;
    border-bottom: 1px solid var(--border-color);
}

.dashboard-review-item:last-child {
    border-bottom: none;
}

.review-item-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 6px;
}

.review-item-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.review-item-rating {
    font-size: 12px;
    color: var(--warning);
    font-weight: 600;
}

.review-item-date {
    font-size: 12px;
    color: var(--text-muted);
    margin-left: auto;
}

.review-item-content {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

/* --- [스크린 내 업체] webmain\webScreenMainStyle.css --- */
.screen-main-container {
    min-height: 0;
}

.screen-store-grid {
    display: grid;
    gap: 12px;
}

.screen-store-card {
    display: flex;
    align-items: center;
    gap: 16px;
    text-decoration: none;
    color: inherit;
    transition: all 0.2s ease;
}

.screen-store-card:hover {
    border-color: var(--primary);
    color: inherit;
    text-decoration: none;
}

.store-card-thumb {
    width: 64px;
    height: 64px;
    border-radius: 10px;
    overflow: hidden;
    flex-shrink: 0;
    background: var(--content-bg);
}

.store-card-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.store-card-thumb-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    color: var(--text-muted);
}

.store-card-body {
    flex: 1;
    min-width: 0;
}

.store-card-name {
    font-size: 16px;
    font-weight: 600;
    margin: 0 0 4px;
}

.store-card-addr {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0 0 6px;
}

.store-card-addr i {
    margin-right: 4px;
    color: var(--primary);
}

.store-card-stats {
    display: flex;
    gap: 12px;
}

.store-card-stats .stat-item {
    font-size: 12px;
    color: var(--text-muted);
}

.store-card-date {
    font-size: 12px;
    color: var(--text-muted);
    margin: 0;
}

.store-card-date i {
    margin-right: 4px;
}

/* 거절 사유 — screenInfoList/roundingInfoList 거절 카드 (2026-09-07) */
.store-card-reject-reason {
    font-size: 12px;
    color: var(--danger);
    margin: 0 0 6px;
    white-space: pre-line;
}

.store-card-reject-reason i {
    margin-right: 4px;
}

.store-card-arrow {
    color: var(--text-muted);
    flex-shrink: 0;
}

.screen-approved-section,
.screen-pending-section {
    margin-bottom: 24px;
}

.screen-approved-section .section-header-row,
.screen-pending-section .section-header-row {
    margin-bottom: 12px;
}

.screen-approved-section .section-header-row h3,
.screen-pending-section .section-header-row h3 {
    font-size: 16px;
    font-weight: 700;
    margin: 0;
}

/* 업체 목록 아이콘 색상 */
.screen-main-container .icon-success {
    color: var(--success);
}

.screen-main-container .icon-warning {
    color: var(--warning);
}

.screen-main-container .icon-star-rating {
    color: var(--warning);
}

.screen-store-card.pending {
    opacity: 0.7;
}

.screen-empty-section {
    margin-bottom: 24px;
}

.screen-empty-card {
    text-align: center;
    padding: 48px 24px;
}

.screen-empty-card .empty-icon {
    font-size: 48px;
    color: var(--text-muted);
    margin-bottom: 16px;
}

.screen-empty-card h3 {
    font-size: 18px;
    font-weight: 600;
    margin: 0 0 8px;
}

.screen-empty-card p {
    font-size: 14px;
    color: var(--text-secondary);
    margin: 0 0 20px;
}

.screen-add-section {
    text-align: center;
    margin-top: 16px;
}

/* --- [업체 등록/수정] mngscreen\screenFormStyle.css --- */

/* 폼 섹션 구분 */
.form-section {
    margin-bottom: 32px;
    padding-bottom: 24px;
    border-bottom: 1px solid var(--border-color);
}

.form-section:last-of-type {
    border-bottom: none;
    margin-bottom: 0;
    padding-bottom: 0;
}

.form-section-title {
    font-size: 16px;
    font-weight: 700;
    color: var(--text-primary);
    margin: 0 0 16px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.form-section-title i {
    color: var(--primary);
}

.form-section-card {
    margin-bottom: 16px;
}

/* 2열 / 3열 그리드 */

.form-row-3col {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
}

@media (max-width: 768px) {

    .form-row-2col,
    .form-row-3col {
        grid-template-columns: 1fr;
    }
}

/* 주소 검색 행 */
.address-search-row {
    display: flex;
    gap: 8px;
}

.address-search-row .admin-form-input {
    flex: 1;
}

/* 카카오 지도 */
.map-preview-wrap {
    margin-top: 12px;
}

.kakao-map-container {
    width: 100%;
    height: 300px;
    border-radius: 12px;
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.map-hint {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 6px;
}

.map-hint i {
    margin-right: 4px;
}

/* 등록 안내 배너 */
.register-info-banner {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    padding: 16px 20px;
    background: var(--info-light);
    border: 1px solid var(--info);
    border-radius: 10px;
    margin-bottom: 20px;
}

.register-info-banner>i {
    font-size: 20px;
    color: var(--info);
    flex-shrink: 0;
    margin-top: 2px;
}

.register-info-banner strong {
    display: block;
    font-size: 14px;
    color: var(--text-primary);
    margin-bottom: 2px;
}

.register-info-banner p {
    font-size: 13px;
    color: var(--text-secondary);
    margin: 0;
}

/* 태그 선택 칩 */
.tag-selector {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.tag-chip {
    padding: 6px 14px;
    border-radius: 20px;
    border: 1px solid var(--border-color);
    background: var(--card-bg);
    cursor: pointer;
    font-size: 13px;
    transition: all 0.2s ease;
    user-select: none;
}

.tag-chip:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.tag-chip.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

/* 도움말 텍스트 */
.form-help-text {
    font-size: 12px;
    color: var(--text-muted);
    margin: -4px 0 8px;
}

/* 대표 이미지 업로드 영역 */
.thumb-upload-area {
    width: 200px;
    height: 150px;
    border-radius: 12px;
    border: 2px dashed var(--border-color);
    overflow: hidden;
    cursor: pointer;
    position: relative;
    transition: border-color 0.2s ease;
}

.thumb-upload-area:hover {
    border-color: var(--primary);
}

.thumb-upload-area img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.thumb-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    color: var(--text-muted);
    background: var(--content-bg);
}

.thumb-placeholder i {
    font-size: 28px;
}

.thumb-placeholder span {
    font-size: 12px;
}

.thumb-overlay {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    padding: 6px;
    background: rgba(0, 0, 0, 0.6);
    color: var(--card-bg);
    text-align: center;
    font-size: 12px;
    opacity: 0;
    transition: opacity 0.2s ease;
}

.thumb-upload-area:hover .thumb-overlay {
    opacity: 1;
}

/* 슬라이드 이미지 그리드 */
.slide-images-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    margin-bottom: 12px;
}

.slide-image-item {
    position: relative;
    border-radius: 10px;
    overflow: hidden;
    border: 1px solid var(--border-color);
    aspect-ratio: 4/3;
}

.slide-image-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.slide-delete-btn {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: rgba(0, 0, 0, 0.6);
    color: var(--card-bg);
    border: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    opacity: 0;
    transition: opacity 0.2s ease;
}

.slide-image-item:hover .slide-delete-btn {
    opacity: 1;
}

.slide-delete-btn:hover {
    background: var(--danger);
}

.slide-upload-btn-wrap {
    display: flex;
    align-items: center;
    gap: 8px;
}

.slide-count {
    font-size: 13px;
    color: var(--text-muted);
}

@media (max-width: 768px) {
    .slide-images-grid {
        grid-template-columns: repeat(2, 1fr);
    }

    .thumb-upload-area {
        width: 160px;
        height: 120px;
    }
}

/* --- [예약 관리] mngscreen\screenReserveStyle.css --- */

.reserve-filter-bar {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.reserve-date-nav {
    display: flex;
    align-items: center;
    gap: 6px;
}

.reserve-date-input {
    border: 1px solid var(--border-color);
    border-radius: 6px;
    padding: 6px 10px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
    background: var(--card-bg);
    cursor: pointer;
}

.reserve-date-input:focus {
    outline: none;
    border-color: var(--primary);
}

.reserve-date-day {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
}

.reserve-date-day.day-sun {
    color: var(--danger);
}

.reserve-date-day.day-sat {
    color: var(--info);
}

.reserve-filter-divider {
    width: 1px;
    height: 24px;
    background: var(--border-color);
}

.reserve-status-filter {
    display: flex;
    align-items: center;
}

.reserve-status-select {
    border: 1px solid var(--border-color);
    border-radius: 6px;
    padding: 6px 12px;
    font-size: 13px;
    min-width: 120px;
}

.reserve-daily-revenue {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
    padding: 8px 16px;
    background: var(--primary-light);
    border-radius: 8px;
    color: var(--primary);
    font-weight: 600;
}

.reserve-daily-revenue i {
    font-size: 14px;
}

.revenue-label {
    font-size: 12px;
    font-weight: 500;
    color: var(--text-secondary);
}

.revenue-value {
    font-size: 18px;
    font-weight: 700;
}

.revenue-unit {
    font-size: 13px;
    font-weight: 500;
}

.reserve-stat-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 16px;
}

.screen-reserve-container .reserve-stat-row {
    grid-template-columns: repeat(5, 1fr);
}

.reserve-stat-card {
    padding: 16px;
    border-radius: 10px;
    text-align: center;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
}

.reserve-stat-card .stat-label {
    display: block;
    font-size: 12px;
    color: var(--text-muted);
    margin-bottom: 4px;
}

.reserve-stat-card .stat-value {
    display: block;
    font-size: 22px;
    font-weight: 700;
}

.stat-pending .stat-value {
    color: var(--warning);
}

.stat-confirmed .stat-value {
    color: var(--success);
}

.stat-completed .stat-value {
    color: var(--text-secondary);
}

.stat-cancelled .stat-value {
    color: var(--danger);
}

/* --- [노쇼 관리] --- */
.stat-no-show {
    border-color: var(--danger-border);
}
.stat-no-show .stat-label {
    color: var(--danger);
    font-weight: 600;
}
.stat-no-show .stat-value {
    color: var(--danger);
}

.admin-badge.badge-noshow {
    background: var(--danger-border);
    color: var(--danger-dark);
}

.noshow-count {
    font-weight: 700;
}
.noshow-count.danger {
    color: var(--danger);
}
.noshow-count.warning {
    color: var(--warning);
}

.row-noshow {
    background: var(--danger-bg);
}

.noshow-alert {
    background: var(--danger-bg);
    border: 1px solid var(--danger-border);
    border-radius: 10px;
    padding: 12px 16px;
    margin-bottom: 16px;
    display: flex;
    align-items: center;
    gap: 10px;
}
.noshow-alert .alert-icon {
    color: var(--danger);
    font-size: 18px;
}
.noshow-alert .alert-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--danger-dark);
}
.noshow-alert .alert-desc {
    font-size: 12px;
    color: var(--danger-text);
}

/* 컴팩트 액션 버튼 */
.btn-admin-sm.btn-success,
.btn-admin-sm.btn-danger,
.btn-admin-sm.btn-primary,
.btn-admin-sm.btn-secondary,
.btn-admin-sm.btn-noshow {
    padding: 4px 10px;
    font-size: 11px;
    border-radius: 6px;
    border: none;
    cursor: pointer;
    color: var(--card-bg);
    transition: opacity 0.2s;
}

.btn-admin-sm.btn-success:hover,
.btn-admin-sm.btn-danger:hover,
.btn-admin-sm.btn-primary:hover,
.btn-admin-sm.btn-secondary:hover,
.btn-admin-sm.btn-noshow:hover {
    opacity: 0.85;
}

.btn-admin-sm.btn-success {
    background: var(--success);
}

.btn-admin-sm.btn-danger {
    background: var(--danger);
}

.btn-admin-sm.btn-primary {
    background: var(--primary);
}

.btn-admin-sm.btn-secondary {
    background: var(--text-muted);
}

.btn-admin-sm.btn-noshow {
    background: var(--danger-light);
    color: var(--danger);
}
.btn-admin-sm.btn-noshow:hover {
    background: var(--danger-border);
}

/* 테이블 컬럼 너비 */
.screen-reserve-container .col-id {
    width: 60px;
}

.screen-reserve-container .col-status {
    width: 80px;
}

.screen-reserve-container .col-actions {
    width: 160px;
}

.reserve-empty-cell {
    text-align: center;
    padding: 40px;
    color: var(--text-muted);
}

.reserve-tel-cell {
    font-size: 13px;
}

.reserve-no-action {
    color: var(--text-muted);
    font-size: 12px;
}

/* 확인 필요 행 강조 */
.row-needs-action {
    background: rgba(245, 158, 11, 0.06);
    border-left: 3px solid var(--warning);
}

.row-needs-action td:first-child {
    padding-left: 13px;
}

/* 대시보드 금일 타임바 */
.dash-today-card {
    margin-bottom: 16px;
}

.dash-timebar-wrap {
    padding: 16px;
    overflow-x: auto;
}

.dash-timebar {
    position: relative;
    min-height: 80px;
    min-width: 1200px;
    background: var(--card-bg);
    border-radius: 8px;
    border: 1px solid var(--border-color);
}

.timebar-header {
    position: relative;
    height: 28px;
    background: var(--content-bg);
    border-bottom: 1px solid var(--border-color);
    border-radius: 8px 8px 0 0;
}

.timebar-hour {
    position: absolute;
    transform: translateX(-50%);
    font-size: 11px;
    color: var(--text-muted);
    top: 6px;
    font-weight: 600;
}

.timebar-hour::after {
    content: '';
    position: absolute;
    left: 50%;
    top: 20px;
    width: 1px;
    height: 1000px;
    background: var(--text-muted);
    opacity: 0.15;
    pointer-events: none;
    z-index: 1;
}

.timebar-now {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 2px;
    background: var(--danger);
    z-index: 10;
}

.timebar-now-label {
    position: absolute;
    top: 4px;
    left: 4px;
    font-size: 10px;
    font-weight: 700;
    color: var(--danger);
    white-space: nowrap;
    background: rgba(255, 255, 255, 0.85);
    padding: 0 4px;
    border-radius: 2px;
}

.timebar-block {
    position: absolute;
    height: 28px;
    min-width: 50px;
    border-radius: 5px;
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 0 10px;
    font-size: 12px;
    color: var(--card-bg);
    overflow: hidden;
    white-space: nowrap;
    cursor: default;
    z-index: 3;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15);
    transition: transform 0.1s, box-shadow 0.1s;
}

.timebar-block:hover {
    transform: translateY(-1px);
    box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2);
    z-index: 4;
}

.timebar-block.tb-confirmed {
    background: var(--success);
}

.timebar-block.tb-pending {
    background: var(--warning);
    color: var(--text-primary);
    border: 1px dashed rgba(0, 0, 0, 0.2);
}

.timebar-block.tb-completed {
    background: var(--info);
}

.tb-name {
    font-weight: 700;
}

.tb-cnt {
    opacity: 0.8;
    font-size: 10px;
}

.timebar-empty {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 60px;
    color: var(--text-muted);
    font-size: 13px;
}

/* 타임바 범례 */
.timebar-legend {
    display: flex;
    gap: 12px;
    padding: 8px 16px;
    font-size: 11px;
    color: var(--text-secondary);
    border-top: 1px solid var(--border-color);
}

.timebar-legend-item {
    display: flex;
    align-items: center;
    gap: 4px;
}

.timebar-legend-dot {
    width: 10px;
    height: 10px;
    border-radius: 3px;
}

.timebar-legend-dot.lg-confirmed { background: var(--success); }
.timebar-legend-dot.lg-pending { background: var(--warning); }
.timebar-legend-dot.lg-completed { background: var(--info); }

/* 대시보드 확인필요 카드 */
.dash-pending-card {
    margin-bottom: 16px;
    border-left: 4px solid var(--warning);
}

.dash-pending-card .card-header h3 {
    color: var(--warning);
}

.pending-count-badge {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 10px;
    font-size: 13px;
    font-weight: 700;
    background: var(--warning);
    color: var(--card-bg);
    margin-left: 4px;
}

/* 대시보드 확인 대기 재촉 배너 (2026-09-02). 24h 이내 건이 있으면 is-urgent 로 danger 톤 */
.dash-pending-banner {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 16px;
    padding: 12px 16px;
    border: 1px solid var(--warning);
    border-left-width: 4px;
    border-radius: 8px;
    background: var(--warning-light);
    color: var(--text-primary);
    font-size: 14px;
}

.dash-pending-banner[hidden] {
    display: none;
}

.dash-pending-banner-icon {
    font-size: 20px;
    color: var(--warning);
}

.dash-pending-banner-text {
    flex: 1;
}

.dash-pending-banner-soon {
    margin-left: 8px;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 700;
    background: var(--danger);
    color: var(--card-bg);
    animation: pending-pulse 2s ease-in-out infinite;
}

.dash-pending-banner.is-urgent {
    border-color: var(--danger);
    background: var(--danger-bg);
}

.dash-pending-banner.is-urgent .dash-pending-banner-icon {
    color: var(--danger);
}

/* 확인 필요 표 '만료까지' — 24h 이내(이미 지난 건 포함) */
.dash-pending-card td.expiry-soon {
    color: var(--danger-text);
    font-weight: 700;
}

/* 대시보드 대기 알림 */
.stat-card-alert {
    border: 1px solid var(--warning);
    box-shadow: 0 0 0 1px rgba(245, 158, 11, 0.2);
}

.pending-alert-text {
    color: var(--warning);
    font-weight: 700;
}

@keyframes pending-pulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.6; }
}

.pending-alert-text {
    animation: pending-pulse 2s ease-in-out infinite;
}

@media (max-width: 768px) {
    .reserve-stat-row {
        grid-template-columns: repeat(2, 1fr);
    }

    .reserve-filter-bar {
        flex-direction: column;
        align-items: stretch;
        gap: 10px;
    }

    .reserve-date-nav {
        justify-content: center;
    }

    .reserve-filter-divider {
        width: 100%;
        height: 1px;
    }

    .reserve-daily-revenue {
        justify-content: center;
    }
}

/* --- [이벤트/공지 관리] mngscreen\screenNoticeListStyle.css --- */

.screen-notice-container .admin-search-bar {
    margin-bottom: 0;
}

.screen-notice-container .col-w-60 { width: 60px; }
.screen-notice-container .col-w-70 { width: 70px; }
.screen-notice-container .col-w-80 { width: 80px; }
.screen-notice-container .col-w-100 { width: 100px; }

.screen-notice-container .table-row-clickable {
    cursor: pointer;
}

.screen-notice-container .cell-max-300 {
    max-width: 300px;
}

.screen-notice-container .text-sm {
    font-size: 12px;
}

.screen-notice-container .table-empty-cell {
    padding: 40px;
    color: var(--text-muted);
}

/* --- [이벤트/공지 등록/수정] mngscreen\screenNoticeWriteStyle.css --- */

.screen-notice-write-container .textarea-tall {
    min-height: 200px;
}

.screen-notice-write-container .thumb-notice {
    width: 300px;
    height: 180px;
}

/* --- [리뷰 관리] mngscreen\screenReviewStyle.css --- */

.star-sm {
    font-size: 13px;
}

.review-summary-row {
    margin-bottom: 16px;
}

.review-summary-card {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 20px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 12px;
}

.review-avg-rating {
    display: flex;
    align-items: center;
    gap: 10px;
}

.avg-number {
    font-size: 36px;
    font-weight: 800;
    color: var(--text-primary);
}

.review-total-count {
    font-size: 13px;
    color: var(--text-muted);
}

.review-item-card {
    padding: 16px 0;
    border-bottom: 1px solid var(--border-color);
}

.review-item-card:last-child {
    border-bottom: none;
}

.review-date {
    font-size: 12px;
    color: var(--text-muted);
    margin-left: 8px;
}

.review-content {
    margin: 8px 0;
    color: var(--text-secondary);
    font-size: 14px;
    line-height: 1.6;
}

.review-image {
    max-width: 200px;
    border-radius: 10px;
    margin: 8px 0;
}

.review-reply-box {
    margin-top: 10px;
    padding: 12px;
    background: var(--content-bg);
    border-radius: 8px;
    border-left: 3px solid var(--primary);
}

.review-reply-box strong {
    font-size: 12px;
    color: var(--primary);
}

.review-reply-box p {
    margin: 6px 0 4px;
    font-size: 13px;
    color: var(--text-secondary);
}

.reply-date {
    font-size: 11px;
    color: var(--text-muted);
    margin-right: 8px;
}

/* 리뷰 답글 모달 */
.review-original-text {
    color: var(--text-secondary);
    font-size: 13px;
    margin: 0;
}

.reply-form-group {
    margin-top: 12px;
}

.reply-textarea {
    min-height: 120px;
}

/* --- [업체목록] mngscreen\screenInfoList 토글 --- */

/* 카드 내부 링크 (전체 카드가 아닌 링크 부분만 클릭 가능) */
.screen-store-card .store-card-link {
    display: flex;
    align-items: center;
    text-decoration: none;
    color: inherit;
    padding: 16px;
    gap: 16px;
    flex: 1;
    transition: background 0.2s;
}

.screen-store-card .store-card-link:hover {
    background: var(--content-bg, #f8f9fa);
}

/* 카드 하단 영업 토글 영역 */
.store-card-toggle {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 8px 16px;
    border-top: 1px solid var(--border-color, #e2e8f0);
    background: var(--content-bg, #f8fafc);
    border-radius: 0 0 12px 12px;
}

.list-open-label {
    font-size: 13px;
    font-weight: 600;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    min-width: 80px;
}

.list-open-label.on {
    color: var(--success, #22c55e);
}

.list-open-label.on i {
    font-size: 8px;
}

.list-open-label.off {
    color: var(--text-muted, #94a3b8);
}

/* --- [업체정보수정] mngscreen\screenInfoEditStyle.css --- */

/* 상태 표시 도트 아이콘 */
.status-dot {
    font-size: 10px;
}

.status-dot--on {
    color: var(--success);
}

.status-dot--off {
    color: var(--text-muted);
}

/* 정기 휴무일 체크 그룹 */
.holiday-days-wrap {
    display: flex;
    gap: 12px;
    margin-top: 8px;
}

.holiday-day-label {
    display: flex;
    align-items: center;
    gap: 4px;
    cursor: pointer;
}

.holiday-day-label--sunday {
    color: var(--danger, #ef4444);
}

/* 도움 텍스트 마진 변형 */
.form-help-text--mb {
    margin-bottom: 12px;
}

/* 아이콘 색상 유틸리티 */
.text-icon-primary {
    color: var(--primary);
}

/* 라벨 옆 ? 아이콘 — 브라우저 기본 title 툴팁을 쓴다 (즉시예약 설명, 2026-09-04) */
.form-help-icon {
    margin-left: 4px;
    color: var(--text-muted);
    cursor: help;
    font-size: 13px;
}

.form-help-icon:hover,
.form-help-icon:focus {
    color: var(--primary);
}

/* 공지사항 바로가기 마진 */
.notice-shortcut-section--mt {
    margin-top: 12px;
}

/* 페이저 정보 텍스트 */
.pager-info {
    font-size: 13px;
    color: var(--text-muted);
}

/* 빈 상태 버튼 마진 */
.mt-16 {
    margin-top: 16px;
}

/* 영업여부 토글 스위치 */
.open-yn-toggle-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 8px;
}

.open-yn-switch {
    position: relative;
    display: inline-block;
    width: 50px;
    min-width: 50px;
    height: 26px;
    flex-shrink: 0;
}

.open-yn-switch input {
    opacity: 0;
    width: 0;
    height: 0;
}

.open-yn-slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: var(--border-color);
    transition: 0.3s;
    border-radius: 26px;
}

.open-yn-slider:before {
    position: absolute;
    content: "";
    height: 20px;
    width: 20px;
    left: 3px;
    bottom: 3px;
    background-color: var(--card-bg);
    transition: 0.3s;
    border-radius: 50%;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}

.open-yn-switch input:checked+.open-yn-slider {
    background-color: var(--success, #22c55e);
}

.open-yn-switch input:checked+.open-yn-slider:before {
    transform: translateX(24px);
}

.open-yn-label {
    font-size: 14px;
    font-weight: 600;
    display: flex;
    align-items: center;
    gap: 6px;
}

/* 공지사항 바로가기 섹션 */
.notice-shortcut-section {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

.notice-shortcut-section .form-help-text {
    margin: 0;
    flex: 1;
}

@media (max-width: 768px) {
    .notice-shortcut-section {
        flex-direction: column;
        align-items: flex-start;
    }
}

/* 공지사항 토글 및 인라인 미니 목록 */
.notice-toggle-wrap {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}

.notice-inline-body {
    padding: 0 4px;
}

.notice-shortcut-section .btn-admin-sm {
    padding: 6px 14px;
    font-size: 12px;
}

/* --- [업체정보수정] 실시간 미리보기 레이아웃 --- */

/* 2컬럼 레이아웃 */
.edit-preview-layout {
    display: flex;
    gap: 24px;
    align-items: flex-start;
}

.edit-panel {
    flex: 2;
    min-width: 0;
}

.preview-panel {
    flex: 1;
    min-width: 320px;
    max-width: 380px;
    position: sticky;
    top: 80px;
    align-self: flex-start;
}

.preview-panel-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    padding: 0 4px;
}

.preview-panel-header h4 {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
    margin: 0;
}

.preview-panel-header i {
    color: var(--primary);
    font-size: 14px;
}

/* 폰 프레임 */
.phone-frame {
    background: var(--phone-frame-bg);
    border-radius: 36px;
    padding: 12px;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(255, 255, 255, 0.08);
    position: relative;
    overflow: hidden;   /* 인앱 공지 팝업 오버레이 클리핑 */
}

.phone-notch {
    width: 120px;
    height: 24px;
    background: var(--phone-frame-bg);
    border-radius: 0 0 16px 16px;
    margin: 0 auto;
    position: relative;
    z-index: 2;
    top: -1px;
}

.phone-screen {
    background: var(--phone-screen-bg);
    border-radius: 24px;
    overflow-y: auto;
    overflow-x: hidden;
    height: 580px;
    scrollbar-width: thin;
    scrollbar-color: var(--phone-scrollbar) transparent;
}

.phone-screen::-webkit-scrollbar {
    width: 3px;
}

.phone-screen::-webkit-scrollbar-thumb {
    background: var(--phone-scrollbar);
    border-radius: 3px;
}

/* 앱 미리보기 스테이지 — 실제 앱 상세 JSP 를 iframe 에 렌더한다(cmmnAppPreview.js).
   iframe 두 장을 겹쳐 두고 뒤판(.is-back)에 새 화면을 받은 뒤 앞뒤를 바꾼다 — display:none 이면
   레이아웃이 없어 스크롤 위치를 복원할 수 없으므로 visibility 로 숨긴다. 높이는 .phone-screen(580px). */
.pv-stage {
    position: relative;
}

.pv-app-frame {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
    background: var(--phone-screen-bg);
}

.pv-app-frame.is-back {
    visibility: hidden;
}

/* 반응형 - 작은 화면에서 미리보기 숨김 */
@media (max-width: 1200px) {
    .preview-panel {
        display: none;
    }

    .edit-panel {
        flex: 1;
    }
}

/* --- [일정관리] mngscreen\schedulerStyle.css --- */

/* 탭 */
.scheduler-tabs {
    display: flex;
    gap: 0;
    margin-bottom: 20px;
    border-bottom: 2px solid var(--border-color);
}

.scheduler-tab {
    padding: 12px 28px;
    border: none;
    background: none;
    font-size: 14px;
    font-weight: 500;
    color: var(--text-muted);
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -2px;
    transition: color 0.2s, border-color 0.2s;
    display: flex;
    align-items: center;
    gap: 8px;
}

.scheduler-tab:hover {
    color: var(--text-primary);
}

.scheduler-tab.active {
    color: var(--primary);
    border-bottom-color: var(--primary);
    font-weight: 600;
}

/* ===== 요약 통계 카드 ===== */
.scheduler-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}

.scheduler-stat-card {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 16px 18px;
    border-radius: 10px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    transition: box-shadow 0.2s;
}

.scheduler-stat-card:hover {
    box-shadow: var(--card-hover-shadow);
}

.scheduler-stat-card .stat-icon {
    width: 42px;
    height: 42px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex-shrink: 0;
}

.scheduler-stat-card.stat-total .stat-icon {
    background: rgba(99, 102, 241, 0.1);
    color: var(--purple);
}

.scheduler-stat-card.stat-confirmed .stat-icon {
    background: rgba(59, 130, 246, 0.1);
    color: var(--info);
}

.scheduler-stat-card.stat-pending .stat-icon {
    background: rgba(245, 158, 11, 0.1);
    color: var(--warning);
}

.scheduler-stat-card.stat-usage .stat-icon {
    background: rgba(16, 185, 129, 0.1);
    color: var(--success);
}

.scheduler-stat-card.stat-completed .stat-icon {
    background: rgba(16, 185, 129, 0.1);
    color: var(--success);
}

.scheduler-stat-card .stat-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.scheduler-stat-card .stat-value {
    font-size: 22px;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.2;
}

.scheduler-stat-card .stat-label {
    font-size: 12px;
    color: var(--text-muted);
    font-weight: 500;
}

/* ===== 데이터 보존 안내 ===== */
.scheduler-retention-notice {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
    padding: 10px 14px;
    background: var(--badge-notice-bg);
    color: var(--badge-notice-text);
    border-left: 3px solid var(--info);
    border-radius: 6px;
    font-size: 13px;
    line-height: 1.5;
}

.scheduler-retention-notice i {
    font-size: 14px;
    flex-shrink: 0;
}

.scheduler-retention-notice strong {
    font-weight: 700;
}

/* ===== 툴바 ===== */
.scheduler-toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
    flex-wrap: wrap;
    gap: 12px;
}

.scheduler-date-nav {
    display: flex;
    align-items: center;
    gap: 8px;
}

.scheduler-date-nav .admin-form-input {
    width: 160px;
    text-align: center;
}

.scheduler-legend {
    display: flex;
    gap: 16px;
    font-size: 13px;
    color: var(--text-secondary);
}

.legend-hint {
    color: var(--text-muted);
    font-size: 12px;
}

.legend-hint i {
    font-size: 11px;
}

.legend-confirmed {
    background: var(--info);
}

.legend-pending {
    background: var(--warning);
}

.legend-completed {
    background: var(--success);
}

.legend-memo {
    background: var(--text-muted);
}

/* ===== 그리드 래퍼 ===== */
.scheduler-grid-wrapper {
    overflow-x: auto;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 0;
    position: relative;
}

/* 빈 상태 */
.scheduler-empty {
    text-align: center;
    padding: 60px 20px;
}

.scheduler-empty-icon {
    font-size: 48px;
    color: var(--text-muted);
    margin-bottom: 16px;
    opacity: 0.4;
}

.scheduler-empty-text {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-bottom: 6px;
}

.scheduler-empty-sub {
    font-size: 13px;
    color: var(--text-muted);
}

/* ===== 스케줄러 모달 오버레이 ===== */
.scheduler-container .modal-overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.5);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 9999;
}

.scheduler-container .modal-overlay.active {
    display: flex;
}

.scheduler-container .modal-container {
    background: var(--card-bg);
    border-radius: 12px;
    width: 90%;
    max-width: 480px;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}

.scheduler-container .modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 24px;
    border-bottom: 1px solid var(--border-color);
}

.scheduler-container .modal-header h5 {
    font-size: 18px;
    font-weight: 600;
    margin: 0;
}

.scheduler-container .modal-close {
    background: none;
    border: none;
    font-size: 18px;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px;
    line-height: 1;
}

.scheduler-container .modal-close:hover {
    color: var(--text-primary);
}

.scheduler-container .modal-body {
    padding: 24px;
    overflow-y: auto;
    flex: 1;
}

.scheduler-container .modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    padding: 16px 24px;
    border-top: 1px solid var(--border-color);
}

/* ===== CSS Grid 스케줄러 ===== */
.scheduler-grid {
    display: grid;
    position: relative;
    user-select: none;
}

.grid-corner {
    background: var(--content-bg);
    border-right: 1px solid var(--border-color);
    border-bottom: 2px solid var(--border-color);
    position: sticky;
    left: 0;
    /* sticky 컬럼은 reserve-block(3) / hover(4) / now-indicator(5) / dragging(10) 모두 위에 떠야 함 */
    z-index: 16;
    display: flex;
    align-items: center;
    justify-content: center;
}

.corner-label {
    font-size: 11px;
    font-weight: 600;
    color: var(--text-muted);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* 시간 헤더 (1시간 = 6슬롯 span) */
.grid-hour-header {
    display: flex;
    align-items: center;
    justify-content: center;
    border-bottom: 2px solid var(--border-color);
    border-right: 2px solid var(--border-color);
    background: var(--content-bg);
    position: relative;
}

/* 30분 구분선 */
.grid-hour-header::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: 0;
    width: 1px;
    height: 10px;
    background: var(--border-color);
}

.hour-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
    letter-spacing: 0.3px;
}

.grid-room-label {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    gap: 2px;
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
    background: var(--content-bg);
    border-right: 1px solid var(--border-color);
    border-bottom: 1px solid var(--border-color);
    position: sticky;
    left: 0;
    /* 가로 스크롤 시 reserve-block(3) / hover(4) / now-indicator(5) / dragging(10) 위에 떠 있어야 함 */
    z-index: 15;
}

.room-num {
    font-size: 18px;
    font-weight: 700;
    color: var(--primary);
    line-height: 1;
}

.room-text {
    font-size: 10px;
    color: var(--text-muted);
    font-weight: 500;
}

.grid-cell {
    border-right: 1px solid var(--border-light, #f0f0f0);
    border-bottom: 1px solid var(--border-color);
    min-height: 64px;
    cursor: pointer;
    transition: background 0.15s;
}

.grid-cell.hour-cell {
    border-right: 2px solid var(--border-color);
}

.grid-cell.half-cell {
    border-right: 1px dashed var(--border-color);
}

.grid-cell:hover {
    background: rgba(59, 130, 246, 0.06);
}

/* 현재 시간 인디케이터 */
.now-indicator {
    position: relative;
    z-index: 5;
    pointer-events: none;
}

.now-indicator::before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    left: 50%;
    width: 2px;
    background: var(--danger);
    transform: translateX(-50%);
}

.now-indicator::after {
    content: '';
    position: absolute;
    top: -3px;
    left: 50%;
    transform: translateX(-50%);
    width: 8px;
    height: 8px;
    background: var(--danger);
    border-radius: 50%;
}

/* ===== 예약 블럭 ===== */
.reserve-block {
    position: relative;
    border-radius: 4px;
    padding: 2px 6px;
    cursor: grab;
    overflow: hidden;
    z-index: 3;
    display: flex;
    align-items: center;
    margin: 3px 2px;
    transition: box-shadow 0.15s, opacity 0.15s, transform 0.1s;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

.reserve-block:hover {
    box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2);
    z-index: 4;
    transform: translateY(-1px);
}

.block-confirmed {
    background: linear-gradient(135deg, var(--info), #2563eb);
    color: var(--card-bg);
}

.block-pending {
    background: linear-gradient(135deg, var(--warning), #d97706);
    color: var(--card-bg);
}

.block-content {
    display: flex;
    flex-direction: column;
    gap: 0;
    overflow: hidden;
    flex: 1;
    justify-content: center;
    min-width: 0;
}

.block-name {
    font-size: 11px;
    font-weight: 600;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    line-height: 1.3;
}

.block-name i {
    font-size: 10px;
    margin-right: 2px;
    opacity: 0.8;
}

.block-info {
    font-size: 9px;
    opacity: 0.8;
    white-space: nowrap;
    line-height: 1.2;
}

/* 리사이즈 핸들 */
.block-resize-handle {
    position: absolute;
    right: 0;
    top: 0;
    bottom: 0;
    width: 8px;
    cursor: col-resize;
    background: rgba(255, 255, 255, 0.2);
    border-radius: 0 6px 6px 0;
    transition: background 0.15s;
}

.block-resize-handle:hover {
    background: rgba(255, 255, 255, 0.5);
}

.block-resize-handle::after {
    content: '';
    position: absolute;
    top: 50%;
    right: 2px;
    transform: translateY(-50%);
    width: 2px;
    height: 16px;
    background: rgba(255, 255, 255, 0.5);
    border-radius: 1px;
}

/* 드래그/리사이즈 상태 */
.reserve-block.dragging {
    opacity: 0.75;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3);
    cursor: grabbing;
    z-index: 10;
    transform: scale(1.02);
}

.reserve-block.resizing {
    opacity: 0.85;
    z-index: 10;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}

body.scheduler-dragging {
    cursor: grabbing !important;
    user-select: none !important;
}

/* ===== 모달 보완 ===== */
.reserve-modal-info {
    padding: 10px 14px;
    background: var(--content-bg);
    border-radius: 8px;
    font-weight: 600;
    color: var(--text-primary);
    border: 1px solid var(--border-color);
}

.admin-form-row {
    display: flex;
    gap: 12px;
}

.admin-form-row .admin-form-group {
    flex: 1;
}

.reserve-detail-grid {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.detail-row {
    display: flex;
    justify-content: space-between;
    padding: 8px 0;
    border-bottom: 1px solid var(--border-light, #f0f0f0);
    font-size: 14px;
}

.detail-row:last-child {
    border-bottom: none;
}

.detail-label {
    color: var(--text-muted);
    font-weight: 500;
    min-width: 80px;
}

.detail-bold {
    font-weight: 700;
}

.detail-status-confirmed {
    color: var(--info);
    font-weight: 600;
}

.detail-status-pending {
    color: var(--warning);
    font-weight: 600;
}

/* ===== 월간 캘린더 ===== */
.monthly-title {
    font-size: 18px;
    font-weight: 700;
    color: var(--text-primary);
    min-width: 140px;
    text-align: center;
}

.monthly-calendar {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 0;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    overflow: hidden;
}

.cal-header {
    padding: 12px 10px;
    text-align: center;
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    background: var(--content-bg);
    border-bottom: 2px solid var(--border-color);
}

.cal-header.cal-day-0 {
    color: var(--danger);
}

.cal-header.cal-day-6 {
    color: var(--info);
}

.cal-cell {
    min-height: 100px;
    padding: 8px 10px;
    border-right: 1px solid var(--border-color);
    border-bottom: 1px solid var(--border-color);
    cursor: pointer;
    transition: background 0.15s, box-shadow 0.15s;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.cal-cell:hover {
    background: rgba(59, 130, 246, 0.05);
    box-shadow: inset 0 0 0 1px rgba(59, 130, 246, 0.15);
}

.cal-cell.cal-empty {
    background: var(--content-bg);
    cursor: default;
    min-height: 100px;
}

.cal-cell.cal-empty:hover {
    box-shadow: none;
}

.cal-cell.cal-sunday {
    background: rgba(239, 68, 68, 0.03);
}

.cal-cell.cal-saturday {
    background: rgba(59, 130, 246, 0.03);
}

.cal-cell.cal-today {
    background: rgba(59, 130, 246, 0.08);
}

.cal-cell.cal-today .cal-date {
    background: var(--primary);
    color: var(--card-bg);
    border-radius: 50%;
    width: 28px;
    height: 28px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-weight: 700;
}

.cal-date {
    font-size: 14px;
    font-weight: 500;
    color: var(--text-primary);
    line-height: 1;
}

.cal-sunday .cal-date {
    color: var(--danger);
}

.cal-saturday .cal-date {
    color: var(--info);
}

/* 상태별 뱃지 */
.cal-badges {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
}

.cal-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 5px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: 700;
    color: var(--card-bg);
    line-height: 1;
}

.badge-completed {
    background: var(--success);
}

.cal-total {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-top: auto;
}

.cal-has-reserve {
    position: relative;
}

/* ===== 공지 핀 슬롯 ===== */

.pin-slot-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.pin-slot-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 9px 10px;
    border-radius: 8px;
    border: 1.5px solid var(--border-color);
    transition: all 0.15s ease;
}

/* 빈 슬롯 */
.pin-slot-empty {
    border-style: dashed;
    border-color: var(--border-color);
    cursor: pointer;
    background: transparent;
}

.pin-slot-empty:hover {
    border-color: var(--primary);
    background: var(--primary-light, rgba(34, 197, 94, 0.06));
}

.pin-slot-empty-text {
    font-size: 13px;
    color: var(--text-muted);
    flex: 1;
}

.pin-slot-empty:hover .pin-slot-empty-text {
    color: var(--primary);
}

/* 채워진 슬롯 */
.pin-slot-filled {
    background: var(--content-bg);
    border-color: var(--border-color);
}

/* 슬롯 번호 */
.pin-slot-num {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--primary);
    color: var(--card-bg);
    font-size: 11px;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.pin-slot-empty .pin-slot-num {
    background: var(--border-color);
}

/* 슬롯 제목 */
.pin-slot-title {
    flex: 1;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 슬롯 버튼 */
.pin-slot-btn {
    background: none;
    border: none;
    padding: 4px 6px;
    border-radius: 4px;
    cursor: pointer;
    font-size: 12px;
    color: var(--text-muted);
    transition: all 0.15s ease;
    flex-shrink: 0;
    line-height: 1;
}

.pin-slot-preview:hover { color: var(--primary); background: var(--primary-light, rgba(34,197,94,0.08)); }
.pin-slot-remove:hover  { color: var(--danger); background: var(--danger-light); }

/* 슬롯 배지 (공지 타입) */
.pin-slot-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 10px;
    font-size: 11px;
    font-weight: 700;
    white-space: nowrap;
    flex-shrink: 0;
}

/* ===== 공지 픽커 모달 ===== */

.pin-picker-modal {
    display: none;
    position: fixed;
    inset: 0;
    z-index: 9998;
    align-items: center;
    justify-content: center;
}

.pin-picker-modal.show {
    display: flex;
}

.pin-picker-overlay {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.5);
    backdrop-filter: blur(2px);
}

.pin-picker-dialog {
    position: relative;
    z-index: 1;
    background: var(--card-bg);
    border-radius: 16px;
    width: 90%;
    max-width: 500px;
    max-height: 80vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
    animation: npvSlideIn 0.22s ease;
}

.pin-picker-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 20px;
    border-bottom: 1px solid var(--border-color);
}

.pin-picker-header h4 {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 6px;
}

.pin-picker-header h4 i {
    color: var(--primary);
    font-size: 14px;
}

.pin-picker-header small {
    font-size: 12px;
    color: var(--text-muted);
    font-weight: 500;
    margin-left: 6px;
}

.pin-picker-search {
    display: flex;
    gap: 8px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--border-color);
}

.pin-picker-search .admin-form-input {
    flex: 1;
    font-size: 13px;
    padding: 6px 10px;
}

.pin-picker-list {
    overflow-y: auto;
    flex: 1;
    padding: 6px 0;
    min-height: 100px;
}

.pin-picker-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 16px;
    cursor: pointer;
    transition: background 0.12s ease;
}

.pin-picker-item:hover {
    background: var(--content-bg);
}

.pin-picker-item-disabled {
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
}

.pin-picker-item-title {
    flex: 1;
    font-size: 13px;
    color: var(--text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.pin-picker-item-date {
    font-size: 12px;
    color: var(--text-muted);
    white-space: nowrap;
    flex-shrink: 0;
}

.pin-picker-loading,
.pin-picker-empty {
    text-align: center;
    padding: 32px 20px;
    color: var(--text-muted);
    font-size: 13px;
    line-height: 2;
}

.pin-picker-pager {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    padding: 10px 16px;
    border-top: 1px solid var(--border-color);
}

.badge-notice  { background: var(--badge-notice-bg); color: var(--badge-notice-text); }
.badge-event   { background: var(--badge-event-bg); color: var(--badge-event-text); }
.badge-discount { background: var(--badge-discount-bg); color: var(--badge-discount-text); }

/* 새 공지 등록 버튼 비활성화 */
.btn-admin[disabled],
.btn-admin.disabled {
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
}

/* ===== 공지 앱 미리보기 모달 ===== */
.notice-preview-modal {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 9999;
    align-items: center;
    justify-content: center;
}

.notice-preview-modal.show {
    display: flex;
}

.notice-preview-overlay {
    position: absolute;
    inset: 0;
    background: rgba(0, 0, 0, 0.55);
    backdrop-filter: blur(2px);
}

.notice-preview-dialog {
    position: relative;
    z-index: 1;
    background: var(--card-bg);
    border-radius: 20px;
    width: 90%;
    max-width: 420px;
    max-height: 90vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 24px 80px rgba(0, 0, 0, 0.35);
    animation: npvSlideIn 0.25s ease;
}

@keyframes npvSlideIn {
    from { opacity: 0; transform: translateY(20px) scale(0.97); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
}

.notice-preview-dialog-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 20px;
    border-bottom: 1px solid var(--border-color);
}

.notice-preview-dialog-header h4 {
    margin: 0;
    font-size: 15px;
    font-weight: 700;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 6px;
}

.notice-preview-dialog-header h4 i {
    color: var(--primary);
    font-size: 14px;
}

.notice-preview-close {
    background: none;
    border: none;
    font-size: 18px;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px 8px;
    border-radius: 6px;
    line-height: 1;
    transition: background 0.15s ease;
}

.notice-preview-close:hover {
    background: var(--content-bg);
    color: var(--text-primary);
}

.notice-preview-body {
    padding: 20px;
    overflow-y: auto;
    flex: 1;
}

/* 앱 공지 카드 미리보기 */
.npv-notice-card {
    background: var(--content-bg);
    border-radius: 16px;
    overflow: hidden;
    border: 1px solid var(--border-color);
}

.npv-notice-head {
    padding: 16px 16px 12px;
    border-bottom: 1px solid var(--border-color);
}

.npv-notice-badge {
    display: inline-block;
    padding: 3px 10px;
    border-radius: 12px;
    font-size: 11px;
    font-weight: 700;
    margin-bottom: 10px;
}

.npv-badge-notice   { background: var(--badge-notice-bg); color: var(--badge-notice-text); }
.npv-badge-event    { background: var(--badge-event-bg); color: var(--badge-event-text); }
.npv-badge-discount { background: var(--badge-discount-bg); color: var(--badge-discount-text); }

.npv-notice-title-text {
    font-size: 16px;
    font-weight: 700;
    color: var(--text-primary);
    line-height: 1.4;
    margin-bottom: 6px;
}

.npv-notice-period {
    font-size: 12px;
    color: var(--text-muted);
    display: flex;
    align-items: center;
    gap: 4px;
}

.npv-notice-period i {
    font-size: 11px;
}

.npv-notice-img {
    width: 100%;
    max-height: 200px;
    object-fit: cover;
    display: block;
}

.npv-notice-content {
    padding: 16px;
    font-size: 14px;
    line-height: 1.7;
    color: var(--text-secondary);
    white-space: pre-wrap;
    word-break: break-word;
}

.npv-notice-inactive-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: var(--danger-light);
    color: var(--danger-text);
    font-size: 11px;
    font-weight: 700;
    padding: 2px 8px;
    border-radius: 6px;
    margin-bottom: 8px;
}

/* --- [스케줄러] mngscreen\schedulerStyle.css --- */

/* 유틸리티 */
.hidden { display: none !important; }

/* 미배치 영역 */
.unplaced-area {
    background: var(--content-bg);
    border: 1px solid var(--border-color);
    border-radius: 8px;
    margin-bottom: 16px;
    overflow: hidden;
}

.unplaced-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 16px;
    background: var(--card-bg);
    border-bottom: 1px solid var(--border-color);
}

.unplaced-header-left {
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
    font-size: 14px;
    color: var(--text-primary);
}

.unplaced-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 6px;
    background: var(--primary);
    color: var(--card-bg);
    font-size: 11px;
    font-weight: 700;
    border-radius: 11px;
}

.unplaced-list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding: 12px 16px;
    min-height: 48px;
}

.unplaced-block {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 500;
    cursor: grab;
    user-select: none;
    transition: box-shadow 0.15s, transform 0.15s;
    white-space: nowrap;
}

.unplaced-block:active {
    cursor: grabbing;
}

.unplaced-block:hover {
    transform: translateY(-1px);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
}

.unplaced-block.block-confirmed {
    background: var(--primary-light);
    color: var(--primary);
    border: 1px solid var(--primary);
}

.unplaced-block.block-pending {
    background: var(--warning-light);
    color: var(--badge-event-text);
    border: 1px solid var(--badge-event-text);
}

.unplaced-block-name {
    font-weight: 600;
}

.unplaced-block-info {
    color: var(--text-muted);
    font-size: 11px;
}

.unplaced-empty {
    padding: 16px;
    text-align: center;
    color: var(--text-muted);
    font-size: 13px;
}

/* 메모 블럭 */
.reserve-block.block-memo {
    background: linear-gradient(135deg, var(--border-color) 0%, #cbd5e1 100%);
    border-left: 3px solid var(--text-muted);
    color: var(--text-secondary);
}

.reserve-block.block-memo .block-name {
    color: var(--text-secondary);
    font-style: italic;
}

/* 스케줄러 액션 버튼 그룹 */
.scheduler-actions {
    display: flex;
    gap: 6px;
    align-items: center;
}

.scheduler-actions .btn-admin {
    font-size: 12px;
    padding: 5px 12px;
}

.scheduler-actions .btn-save-schedule {
    position: relative;
}

.scheduler-actions .btn-save-schedule.is-dirty {
    animation: pulse-save 1.5s infinite;
}

@keyframes pulse-save {
    0%, 100% { box-shadow: 0 0 0 0 rgba(5, 150, 105, 0.4); }
    50% { box-shadow: 0 0 0 6px rgba(5, 150, 105, 0); }
}

/* 드래그 고스트 */
.drag-ghost {
    position: fixed;
    z-index: 9999;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 600;
    pointer-events: none;
    opacity: 0.85;
    transform: rotate(-2deg);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
    background: var(--primary-light);
    color: var(--primary);
    border: 1px solid var(--primary);
}

/* 배치 블럭 원본시간 표시 */
.block-orig-time {
    font-size: 9px;
    color: var(--card-bg);
    background: rgba(0, 0, 0, 0.3);
    padding: 0 4px;
    border-radius: 3px;
    margin-left: 4px;
    text-decoration: line-through;
    font-weight: 400;
    vertical-align: middle;
}

/* 30분 헤더 (정시보다 연하게) */
.grid-half-header .hour-label {
    font-size: 10px;
    color: var(--text-muted);
    font-weight: 400;
}

/* 메모 블럭 모달 */
.memo-modal-info {
    font-size: 13px;
    color: var(--text-secondary);
    margin-bottom: 12px;
    padding: 8px 12px;
    background: var(--content-bg);
    border-radius: 6px;
}

/* --- [통계 공통] common\statStyle.css --- */

.stat-filter-bar {
    display: flex;
    align-items: center;
    gap: 16px;
    padding: 12px 16px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.stat-period-nav {
    display: flex;
    gap: 4px;
}

.stat-period-btn {
    padding: 6px 14px;
    border: 1px solid var(--border-color);
    border-radius: 6px;
    background: var(--card-bg);
    font-size: 13px;
    cursor: pointer;
    color: var(--text-secondary);
    transition: all 0.15s;
}

.stat-period-btn.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

.stat-custom-range {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
}

.stat-date-input {
    width: 140px;
    padding: 5px 8px;
    font-size: 13px;
}

/* 요약 카드 */
.stat-summary-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}

.stat-summary-card {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 18px 16px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
}

.stat-summary-icon {
    width: 44px;
    height: 44px;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    flex-shrink: 0;
}

.stat-summary-icon.blue { background: rgba(59, 130, 246, 0.1); color: var(--info); }
.stat-summary-icon.green { background: rgba(16, 185, 129, 0.1); color: var(--success); }
.stat-summary-icon.orange { background: rgba(245, 158, 11, 0.1); color: var(--warning); }
.stat-summary-icon.red { background: rgba(239, 68, 68, 0.1); color: var(--danger); }

.stat-summary-body {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.stat-summary-label {
    font-size: 12px;
    color: var(--text-muted);
}

.stat-summary-value {
    font-size: 20px;
    font-weight: 700;
    color: var(--text-primary);
}

/* 차트 그리드 */
.stat-chart-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 16px;
}

.stat-chart-wide {
    grid-column: 1 / -1;
}

.stat-chart-card .card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.stat-chart-body {
    padding: 16px;
    height: 280px;
    position: relative;
}

.stat-chart-wide .stat-chart-body {
    height: 320px;
}

.stat-chart-toggle {
    display: flex;
    gap: 4px;
}

.stat-toggle-btn {
    padding: 4px 10px;
    border: 1px solid var(--border-color);
    border-radius: 4px;
    background: var(--card-bg);
    font-size: 12px;
    cursor: pointer;
    color: var(--text-secondary);
}

.stat-toggle-btn.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

@media (max-width: 1024px) {
    .stat-summary-row {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 768px) {
    .stat-filter-bar {
        flex-direction: column;
        align-items: stretch;
    }

    .stat-custom-range {
        margin-left: 0;
    }

    .stat-summary-row {
        grid-template-columns: 1fr 1fr;
    }

    .stat-chart-grid {
        grid-template-columns: 1fr;
    }
}

/* --- [쿠폰관리] mngscreen\screenCouponStyle.css --- */

.coupon-toolbar {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 16px;
}

.coupon-card-list {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
    gap: 16px;
}

.coupon-card {
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    overflow: hidden;
    box-shadow: var(--card-shadow);
}

.coupon-card-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 14px 16px;
    border-bottom: 1px solid var(--border-color);
    background: var(--content-bg);
}

.coupon-card-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
}

.coupon-status-active {
    font-size: 12px;
    font-weight: 600;
    color: var(--success);
}

.coupon-status-inactive {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-muted);
}

.coupon-card-body {
    padding: 14px 16px;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.coupon-card-discount {
    display: flex;
    align-items: center;
    gap: 8px;
}

.coupon-discount-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
    background: var(--primary-light);
    color: var(--primary);
}

.coupon-discount-value {
    font-size: 16px;
    font-weight: 700;
    color: var(--text-primary);
}

.coupon-card-meta {
    font-size: 12px;
    color: var(--text-secondary);
}

.coupon-card-meta i {
    width: 14px;
    text-align: center;
    margin-right: 4px;
    color: var(--text-muted);
}

.coupon-card-actions {
    display: flex;
    gap: 6px;
    padding: 10px 16px;
    border-top: 1px solid var(--border-color);
}

/* 쿠폰 지급 모달 */
.issue-coupon-info {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    background: var(--content-bg);
    border-radius: 8px;
    margin-bottom: 16px;
}

.issue-coupon-info strong {
    font-size: 14px;
}

.issue-remain-badge {
    font-size: 12px;
    color: var(--primary);
    font-weight: 600;
}

.issue-mode-group {
    display: flex;
    gap: 16px;
}

.issue-mode-radio {
    display: flex;
    align-items: center;
    gap: 4px;
    font-size: 13px;
    cursor: pointer;
}

.issue-target-count {
    font-size: 13px;
    color: var(--text-secondary);
    margin-left: 12px;
}

.issue-target-list {
    max-height: 240px;
    overflow-y: auto;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    margin-top: 8px;
}

.issue-target-item {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 8px 12px;
    border-bottom: 1px solid var(--border-color);
    cursor: pointer;
    font-size: 13px;
}

.issue-target-item:last-child {
    border-bottom: none;
}

.issue-target-item:hover {
    background: var(--content-bg);
}

.issue-target-name {
    flex: 1;
}

.issue-empty {
    padding: 20px;
    text-align: center;
    color: var(--text-muted);
    font-size: 13px;
}

@media (max-width: 768px) {
    .coupon-card-list {
        grid-template-columns: 1fr;
    }

    .issue-mode-group {
        flex-direction: column;
        gap: 8px;
    }
}

/* ===== 이용자 관리 ===== */

/* 이용자 관리 - 유틸리티 */
.screen-user-container .mb-0 { margin-bottom: 0; }
.screen-user-container .mb-16,
.screen-user-detail-container .mb-16 { margin-bottom: 16px; }
.screen-user-container .col-num { width: 50px; }
.screen-user-container .col-memo { width: 70px; text-align: center; }
.screen-user-container .toolbar-filter-select {
    width: auto;
    min-width: 120px;
    margin-left: 8px;
}
.screen-user-container .empty-state-msg,
.screen-user-detail-container .empty-state-msg {
    padding: 40px;
    color: var(--text-muted);
}

/* 이용자 목록 - 클릭 가능한 Row */
.screen-user-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}
.screen-user-container .clickable-row:hover {
    background: var(--hover-bg, #f1f5f9);
}

/* 이용자 목록 - 메모 버튼 */
.screen-user-container .memo-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 6px;
    border: 1px solid var(--border-color, #e2e8f0);
    background: var(--card-bg, #fff);
    color: var(--text-muted);
    font-size: 14px;
    cursor: pointer;
    transition: all 0.15s;
}
.screen-user-container .memo-btn:hover {
    border-color: var(--primary);
    color: var(--primary);
    background: var(--hover-bg, #f1f5f9);
}
.screen-user-container .memo-btn.has-memo {
    border-color: var(--primary);
    color: var(--primary);
    background: rgba(5, 150, 105, 0.08);
}

/* 이용자 목록 - 메모 팝업 모달 */
.screen-user-container ~ .modal-overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.5);
    display: none;
    align-items: center;
    justify-content: center;
    z-index: 9999;
}
.screen-user-container ~ .modal-overlay.active {
    display: flex;
}
.screen-user-container ~ .modal-overlay .modal-container {
    background: var(--card-bg);
    border-radius: 12px;
    width: 90%;
    max-width: 480px;
    max-height: 85vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
}
.screen-user-container ~ .modal-overlay .modal-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px 24px;
    border-bottom: 1px solid var(--border-color);
}
.screen-user-container ~ .modal-overlay .modal-header h5 {
    font-size: 18px;
    font-weight: 600;
    margin: 0;
}
.screen-user-container ~ .modal-overlay .modal-close {
    background: none;
    border: none;
    font-size: 18px;
    color: var(--text-muted);
    cursor: pointer;
    padding: 4px;
    line-height: 1;
}
.screen-user-container ~ .modal-overlay .modal-close:hover {
    color: var(--text-primary);
}
.screen-user-container ~ .modal-overlay .modal-body {
    padding: 24px;
    overflow-y: auto;
}
.screen-user-container ~ .modal-overlay .modal-footer {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
    padding: 16px 24px;
    border-top: 1px solid var(--border-color);
}
/* 이용자 상세 - 회원 정보 카드 */
.screen-user-detail-container .user-info-card {
    padding: 16px 24px;
}
.screen-user-detail-container .user-info-row {
    display: flex;
    align-items: center;
    padding: 10px 0;
    border-bottom: 1px solid var(--border-color, #e2e8f0);
}
.screen-user-detail-container .user-info-row:last-child {
    border-bottom: none;
}
.screen-user-detail-container .user-info-label {
    flex: 0 0 120px;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
}
.screen-user-detail-container .user-info-value {
    flex: 1;
    font-size: 14px;
    color: var(--text-primary);
}

/* 이용자 상세 - 버튼 정렬 */
.screen-user-detail-container .text-right {
    text-align: right;
}

/* 반응형 */
@media (max-width: 768px) {
    .screen-user-detail-container .user-info-label {
        flex: 0 0 90px;
        font-size: 12px;
    }
    .screen-user-detail-container .user-info-value {
        font-size: 13px;
    }
}

/* --- [내 정보] profile\webProfileStyle.css --- */
.web-profile-container .admin-card {
    max-width: 600px;
    margin-bottom: 20px;
}
.profile-card-title {
    font-size: 16px;
    font-weight: 700;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--text-primary);
}
.profile-card-title i {
    color: var(--primary);
}
.profile-btn-row {
    margin-top: 20px;
    display: flex;
    justify-content: flex-end;
}

/* --- [업체 승인] approval\approvalStyle.css --- */

/* 필터 바 (한 줄 레이아웃) */
.approval-filter-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 16px;
}
.approval-filter-bar .admin-form-select {
    width: auto;
    min-width: 120px;
}
.approval-filter-bar .admin-search-bar {
    flex: 1;
    min-width: 180px;
    margin-bottom: 0;
}

/* 통계 칩 (필터 바 우측 인라인) */
.approval-stat-inline {
    display: flex;
    gap: 8px;
    align-items: center;
}
.stat-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 6px 12px;
    border-radius: 20px;
    font-size: 13px;
    color: var(--text-secondary);
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    white-space: nowrap;
}
.stat-chip strong { font-weight: 700; }
.stat-chip.stat-pending strong { color: var(--warning); }
.stat-chip.stat-approved strong { color: var(--success); }
.stat-chip.stat-rejected strong { color: var(--danger); }

/* 유형 배지 */
.vendor-type-badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 600;
}
.vendor-type-badge.type-screen {
    background: var(--primary-light);
    color: var(--primary);
}
.vendor-type-badge.type-rounding {
    background: var(--info-light);
    color: var(--info);
}
.vendor-type-badge.type-lesson {
    background: var(--badge-event-bg);
    color: var(--badge-event-text);
}

/* 상세 모달 (넓은 모달) */
.approval-container .modal-container.modal-lg {
    max-width: 640px;
}

/* 상세 섹션 */
.approval-detail-section {
    margin-bottom: 20px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
}
.approval-detail-section:last-child {
    border-bottom: none;
    margin-bottom: 0;
    padding-bottom: 0;
}
.approval-detail-section h6 {
    font-size: 14px;
    font-weight: 700;
    margin-bottom: 12px;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 6px;
}
.approval-detail-section h6 i {
    color: var(--primary);
    font-size: 13px;
}

/* 정보 그리드 (라벨-값 2열) */
.approval-info-grid {
    display: grid;
    grid-template-columns: 120px 1fr;
    gap: 8px 16px;
    font-size: 13px;
}
.approval-info-grid .label {
    color: var(--text-secondary);
    font-weight: 500;
}
.approval-info-grid .value {
    color: var(--text-primary);
}
.approval-info-grid .approval-refund-value {
    white-space: pre-line;
}

/* 거절 사유 박스 */
.reject-reason-box {
    background: var(--danger-bg);
    border: 1px solid var(--danger-border);
    border-radius: 8px;
    padding: 12px;
    margin-top: 12px;
    font-size: 13px;
    color: var(--danger-dark);
}
.reject-reason-box i {
    margin-right: 4px;
}

/* 테이블 업체명 링크 */
.approval-container .admin-table a {
    color: var(--primary);
    text-decoration: none;
    font-weight: 500;
}
.approval-container .admin-table a:hover {
    text-decoration: underline;
}

/* 빈 상태 메시지 */
.approval-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
    font-size: 14px;
}

/* 파일 업로드 영역 */
.file-upload-area {
    display: flex;
    align-items: center;
    gap: 12px;
}
.file-name-display {
    font-size: 13px;
    color: var(--text-secondary);
}
.file-link {
    color: var(--primary);
    text-decoration: none;
}
.file-link:hover {
    text-decoration: underline;
}

/* 반응형 */
@media (max-width: 768px) {
    .approval-filter-bar {
        flex-direction: column;
        align-items: stretch;
    }
    .approval-filter-bar .admin-form-select {
        width: 100%;
    }
    .approval-stat-inline {
        justify-content: center;
    }
    .approval-info-grid {
        grid-template-columns: 100px 1fr;
        gap: 6px 12px;
    }
}

/* --- [태그 관리] mngTag\tagStyle.css --- */
.tag-tab-row {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
}

.tag-tab {
    padding: 8px 16px;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    background: var(--card-bg);
    color: var(--text-secondary);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.2s;
}

.tag-tab:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.tag-tab.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

.tag-toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
}

.tag-count {
    font-size: 14px;
    color: var(--text-secondary);
}

.tag-count strong {
    color: var(--text-primary);
    font-weight: 700;
}

.tag-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 12px;
}

.tag-card {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 16px;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    background: var(--card-bg);
    transition: box-shadow 0.2s;
}

.tag-card:hover {
    box-shadow: var(--card-shadow);
}

.tag-card.tag-disabled {
    opacity: 0.5;
}

.tag-card-header {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.tag-chip {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
}

.tag-chip i {
    color: var(--primary);
    margin-right: 4px;
}

.tag-chip.active i {
    color: var(--card-bg);
}

.tag-type-label {
    font-size: 11px;
    color: var(--text-muted);
}

.tag-card-actions {
    display: flex;
    gap: 4px;
}

/* 아이콘 피커 */
.icon-selected-preview {
    padding: 8px 12px;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    margin-bottom: 8px;
    font-size: 13px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 8px;
}
.icon-preview-none {
    color: var(--text-muted);
}
.icon-preview-icon {
    font-size: 24px;
    color: var(--primary);
}
.icon-picker-grid {
    display: grid;
    grid-template-columns: repeat(8, 1fr);
    gap: 6px;
    max-height: 200px;
    overflow-y: auto;
    padding: 8px;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    background: var(--bg-muted);
}
.icon-picker-item {
    width: 36px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 6px;
    cursor: pointer;
    font-size: 16px;
    color: var(--text-secondary);
    border: 2px solid transparent;
    transition: all 0.15s;
}
.icon-picker-item:hover {
    background: var(--primary-light);
    color: var(--primary);
}
.icon-picker-item.selected {
    border-color: var(--primary);
    background: var(--primary-light);
    color: var(--primary);
}

@media (max-width: 768px) {
    .tag-grid {
        grid-template-columns: 1fr;
    }
}

/* --- [스크린 업체 목록] screen\screenListStyle.css --- */

/* 필터 바 (한 줄 레이아웃) */
.screen-list-filter-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 16px;
}
.screen-list-filter-bar .admin-form-select {
    width: auto;
    min-width: 120px;
}
.screen-list-filter-bar .admin-search-bar {
    flex: 1;
    min-width: 180px;
    margin-bottom: 0;
}
.list-count {
    font-size: 14px;
    color: var(--text-secondary);
    white-space: nowrap;
}
.list-count strong {
    color: var(--text-primary);
    font-weight: 700;
}

/* 클릭 가능한 행 */
.screen-list-container .clickable-row {
    cursor: pointer;
}
.screen-list-container .clickable-row:hover {
    background: var(--bg-muted);
}
.screen-list-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
}

/* --- [스크린 업체 관리 상세] adminScreen\screenManageStyle.css --- */

/* 업체 헤더 */
.screen-manage-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 20px 24px;
    margin-bottom: 0;
    box-shadow: var(--card-shadow);
}
.manage-header-left h2 {
    font-size: 20px;
    font-weight: 700;
    color: var(--text-primary);
    margin: 0 0 8px;
}
.manage-header-meta {
    display: flex;
    gap: 16px;
    flex-wrap: wrap;
    font-size: 13px;
    color: var(--text-secondary);
}
.manage-header-meta i {
    color: var(--text-muted);
    margin-right: 4px;
}
.manage-header-meta .rating-icon {
    color: var(--warning);
}
.manage-header-actions {
    display: flex;
    gap: 8px;
    align-items: flex-start;
}

/* 서브 탭 */
.manage-tab-nav {
    display: flex;
    gap: 4px;
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-top: none;
    border-radius: 0 0 12px 12px;
    padding: 0 16px;
    margin-bottom: 20px;
    overflow-x: auto;
}
.manage-tab {
    padding: 12px 16px;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    border-bottom: 2px solid transparent;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
    display: flex;
    align-items: center;
    gap: 6px;
    transition: color 0.2s ease;
}
.manage-tab:hover {
    color: var(--text-primary);
}
.manage-tab.active {
    color: var(--primary);
    border-bottom-color: var(--primary);
    font-weight: 600;
}

/* 탭 콘텐츠 */
.manage-tab-content {
    min-height: 400px;
}

/* 개요 탭 통계 */
.overview-stat-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}
.overview-stat-card {
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 16px;
    text-align: center;
    box-shadow: var(--card-shadow);
}
.overview-stat-icon {
    width: 40px;
    height: 40px;
    border-radius: 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    margin-bottom: 8px;
}
.overview-stat-icon.green {
    background: var(--primary-light);
    color: var(--primary);
}
.overview-stat-icon.blue {
    background: var(--info-light);
    color: var(--info);
}
.overview-stat-icon.orange {
    background: var(--warning-light);
    color: var(--warning);
}
.overview-stat-icon.purple {
    background: var(--purple-light);
    color: var(--purple);
}
.overview-stat-card .stat-value {
    font-size: 24px;
    font-weight: 700;
    color: var(--text-primary);
}
.overview-stat-card .stat-label {
    font-size: 12px;
    color: var(--text-secondary);
    margin-top: 4px;
}

/* 개요 2열 그리드 */
.overview-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-bottom: 16px;
}

/* 탭 내부 카드 */
.tab-section-card {
    background: var(--card-bg);
    border: 1px solid var(--border-color);
    border-radius: 12px;
    padding: 20px;
    box-shadow: var(--card-shadow);
}
.tab-section-title {
    font-size: 15px;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 12px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.tab-section-title i {
    color: var(--primary);
}
.tab-section-title .tab-count {
    font-size: 13px;
    font-weight: 400;
    color: var(--text-secondary);
}

/* 탭 내 간단 테이블 */
.tab-simple-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.tab-simple-table th {
    text-align: left;
    padding: 8px;
    color: var(--text-secondary);
    font-weight: 600;
    border-bottom: 1px solid var(--border-color);
    white-space: nowrap;
}
.tab-simple-table td {
    padding: 8px;
    color: var(--text-primary);
    border-bottom: 1px solid var(--border-color);
}
.tab-simple-table tbody tr:last-child td {
    border-bottom: none;
}

/* 탭 전체관리 링크 */
.tab-full-link {
    display: flex;
    justify-content: flex-end;
    margin-top: 12px;
}
.tab-full-link a {
    font-size: 13px;
    color: var(--primary);
    text-decoration: none;
}
.tab-full-link a:hover {
    text-decoration: underline;
}

/* 탭 로딩 */
.tab-loading {
    text-align: center;
    padding: 60px 0;
    color: var(--text-muted);
    font-size: 14px;
}
.tab-loading i {
    margin-right: 6px;
}

/* 개요 리뷰 내용 말줄임 */
.overview-review-content {
    max-width: 200px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 관리자 메모 저장 행 */
.memo-save-row {
    display: flex;
    justify-content: flex-end;
    margin-top: 8px;
}

/* 탭 테이블 행 클릭 */
.screen-manage-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}
.screen-manage-container .clickable-row:hover {
    background: var(--bg-muted);
}

/* 상세 모달 정보 그리드 */
.detail-info-grid {
    display: grid;
    grid-template-columns: 100px 1fr;
    gap: 10px 16px;
    font-size: 13px;
}
.detail-info-grid .detail-label {
    color: var(--text-secondary);
    font-weight: 500;
}
.detail-info-grid .detail-value {
    color: var(--text-primary);
}

/* 상세 모달 - 메모 */
.detail-memo-box {
    margin-top: 16px;
    padding: 12px;
    background: var(--bg-muted);
    border-radius: 8px;
    font-size: 13px;
    color: var(--text-primary);
    line-height: 1.5;
}

/* 상세 모달 - 리뷰 내용 */
.detail-review-content {
    margin: 16px 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--text-primary);
}

/* 상세 모달 - 리뷰 이미지 */
.detail-review-img {
    margin-bottom: 16px;
}
.detail-review-img img {
    max-width: 100%;
    border-radius: 8px;
}

/* 상세 모달 - 리뷰 평점 별 */
.detail-rating-stars {
    color: var(--warning);
    font-size: 14px;
    letter-spacing: 1px;
}

/* 상세 모달 - 답글 섹션 */
.detail-reply-section {
    border-top: 1px solid var(--border-color);
    padding-top: 12px;
}
.detail-reply-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-bottom: 8px;
}
.detail-reply-title i {
    margin-right: 4px;
    color: var(--primary);
}
.detail-reply-box {
    padding: 12px;
    border-left: 3px solid var(--primary);
    background: var(--bg-muted);
    border-radius: 0 8px 8px 0;
    font-size: 13px;
    line-height: 1.5;
    color: var(--text-primary);
}
.detail-reply-empty {
    font-size: 13px;
    color: var(--text-muted);
}

/* 상세 모달 - 공지 링크 */
.detail-notice-link {
    margin-top: 16px;
    text-align: right;
}
.detail-notice-link a {
    font-size: 13px;
    color: var(--primary);
    text-decoration: none;
}
.detail-notice-link a:hover {
    text-decoration: underline;
}

/* 업체 정보 탭 - 섹션 카드 간 여백 */
.screen-manage-container .tab-section-card + .tab-section-card {
    margin-top: 16px;
}

/* 업체 정보 탭 - 시설 소개 */
.info-description {
    font-size: 14px;
    line-height: 1.8;
    color: var(--text-primary);
    white-space: pre-line;
}

/* 통계 탭 - 기간 선택 */
.stats-period-bar {
    margin-bottom: 16px;
}
.stats-period-bar .admin-form-select {
    width: auto;
    min-width: 130px;
}

/* 통계 탭 - 요약 카드 */
.stats-summary-row {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
    margin-bottom: 20px;
}

/* 테이블 가로 스크롤 */
.screen-manage-container .table-responsive {
    overflow-x: auto;
}

/* 통계 탭 - 차트 그리드 */
.stats-chart-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-bottom: 16px;
}

/* 반응형 */
@media (max-width: 768px) {
    .screen-manage-header {
        flex-direction: column;
        gap: 12px;
    }
    .manage-tab-nav {
        padding: 0 8px;
    }
    .overview-stat-row {
        grid-template-columns: repeat(2, 1fr);
    }
    .overview-grid {
        grid-template-columns: 1fr;
    }
    .stats-chart-grid {
        grid-template-columns: 1fr;
    }
    .stats-summary-row {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* --- [회원 관리] user\userListStyle.css --- */

/* 권한 탭 */
.user-role-tabs {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}
.role-tab {
    padding: 8px 16px;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    background: var(--card-bg);
    color: var(--text-secondary);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.2s;
}
.role-tab:hover {
    border-color: var(--primary);
    color: var(--primary);
}
.role-tab.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

/* 필터 바 */
.user-filter-bar {
    display: flex;
    gap: 10px;
    align-items: center;
    flex-wrap: wrap;
    margin-bottom: 16px;
}
.user-filter-bar .admin-search-bar {
    flex: 1;
    min-width: 180px;
    margin-bottom: 0;
}
.user-filter-bar .btn-admin {
    white-space: nowrap;
}

/* 탈퇴 회원 행 */
.user-manage-container .row-deleted {
    opacity: 0.5;
}

/* 행 클릭 */
.user-manage-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}
.user-manage-container .clickable-row:hover {
    background: var(--bg-muted);
}

/* 빈 상태 메시지 */
.user-manage-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
}

/* 상세 모달 구분선 */
.detail-divider {
    margin: 16px 0;
    border: none;
    border-top: 1px solid var(--border-color);
}

/* 권한 뱃지 - 보라색 (레슨) */
.admin-badge.badge-purple {
    background: var(--purple-light);
    color: var(--purple);
}

/* 비밀번호 재설정 영역 */
.pw-reset-area {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.pw-reset-success {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    padding: 10px 12px;
    background: var(--primary-light);
    border-radius: 6px;
    font-size: 13px;
    color: var(--text-primary);
}
.pw-reset-success i {
    color: var(--success);
}
.temp-pw-value {
    font-family: monospace;
    font-size: 15px;
    letter-spacing: 1px;
    color: var(--primary);
    user-select: all;
}
.btn-copy-pw {
    background: none;
    border: 1px solid var(--border-color);
    border-radius: 4px;
    padding: 2px 6px;
    cursor: pointer;
    color: var(--text-secondary);
    font-size: 12px;
}
.btn-copy-pw:hover {
    background: var(--content-bg);
    color: var(--text-primary);
}
.pw-reset-notice {
    width: 100%;
    font-size: 12px;
    color: var(--text-secondary);
    margin-top: 2px;
}

/* 제재(경고/정지/해지) 영역 — 상세 모달 (2026-09-18 법무 Phase 3 Task 3.2, 03 §13②) */
.sanction-form {
    display: grid;
    grid-template-columns: 120px 90px 1fr auto;
    gap: 8px;
    align-items: center;
}
.sanction-form .admin-form-input,
.sanction-form .admin-form-select {
    margin: 0;
}
.sanction-history {
    margin-top: 8px;
    border: 1px solid var(--border-color);
    border-radius: 6px;
    overflow: hidden;
}
.sanction-history .admin-table {
    min-width: 0;
}
.sanction-history .admin-table tbody td {
    padding: 8px 10px;
    font-size: 13px;
}
.sanction-history .admin-table thead th {
    padding: 8px 10px;
    font-size: 12px;
}
.sanction-empty {
    padding: 10px 12px;
    font-size: 13px;
    color: var(--text-muted);
}

/* 반응형 */
@media (max-width: 768px) {
    .user-filter-bar {
        flex-direction: column;
        align-items: stretch;
    }
    .user-role-tabs {
        flex-wrap: wrap;
    }
}

/* --- [쿠폰관리] coupon\couponStyle.css --- */

/* 통계 카드 row */
.coupon-stat-row {
    display: flex;
    gap: 12px;
    margin-bottom: 20px;
}

/* 필터 바 */
.coupon-filter-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.coupon-filter-bar .admin-form-select {
    width: auto;
    min-width: 120px;
}

.coupon-filter-bar .admin-search-bar {
    flex: 1;
    min-width: 180px;
    margin-bottom: 0;
}

.coupon-service-tabs {
    display: flex;
    gap: 4px;
    background: var(--bg-muted);
    padding: 3px;
    border-radius: 8px;
}

.coupon-service-tab {
    padding: 7px 16px;
    border-radius: 6px;
    border: none;
    background: transparent;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-secondary);
    cursor: pointer;
    transition: all 0.2s;
}

.coupon-service-tab.active {
    background: var(--card-bg);
    color: var(--primary);
    box-shadow: var(--card-shadow);
}

.coupon-service-tab .tab-count {
    font-size: 11px;
    margin-left: 4px;
    background: var(--border-color);
    padding: 1px 6px;
    border-radius: 10px;
}

.coupon-service-tab.active .tab-count {
    background: var(--primary-light);
    color: var(--primary);
}

/* 서비스 배지 */
.coupon-svc-badge {
    font-size: 11px;
    font-weight: 600;
    padding: 2px 8px;
    border-radius: 4px;
    display: inline-block;
}

.coupon-svc-badge.svc-screen {
    background: var(--info-light);
    color: var(--badge-notice-text);
}

.coupon-svc-badge.svc-rounding {
    background: var(--warning-light);
    color: var(--badge-event-text);
}

.coupon-svc-badge.svc-lesson {
    background: var(--purple-light);
    color: var(--purple);
}

.coupon-svc-badge.svc-all {
    background: var(--primary-light);
    color: var(--primary-hover);
}

/* 할인 표시 */
.coupon-discount-display {
    font-weight: 700;
    color: var(--primary);
}

/* 발급현황 바 */
.coupon-issue-bar-wrapper {
    display: flex;
    align-items: center;
    gap: 8px;
}

.coupon-issue-bar {
    width: 80px;
    height: 6px;
    background: var(--border-color);
    border-radius: 3px;
    overflow: hidden;
}

.coupon-issue-bar-fill {
    height: 100%;
    border-radius: 3px;
    background: var(--primary);
}

.coupon-issue-bar-fill.high {
    background: var(--danger);
}

.coupon-issue-bar-fill.mid {
    background: var(--warning);
}

.coupon-issue-text {
    font-size: 12px;
    color: var(--text-secondary);
    white-space: nowrap;
}

/* 발급현황 모달 상태 필터 */
.issue-status-filter-bar {
    margin-bottom: 10px;
}

.issue-status-filter {
    width: auto;
    display: inline-block;
}

/* 행 비활성/만료 */
.coupon-manage-container .row-dimmed {
    opacity: 0.55;
}

/* 상세 모달 */
.coupon-detail-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
}

.coupon-detail-date {
    font-size: 12px;
    color: var(--text-muted);
}

.coupon-detail-title {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 16px;
}

.coupon-detail-grid {
    display: grid;
    grid-template-columns: 100px 1fr;
    gap: 10px;
    font-size: 13px;
}

.coupon-detail-label {
    color: var(--text-muted);
}

/* 폼 모달 */
.coupon-radio-group {
    display: flex;
    gap: 16px;
}

.coupon-radio-label {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    cursor: pointer;
}

.coupon-form-hint {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 4px;
}

/* 활성화 버튼 */
.coupon-btn-activate {
    background: var(--success);
    color: var(--card-bg);
}

/* 반응형 */
@media (max-width: 768px) {
    .coupon-stat-row {
        flex-wrap: wrap;
    }

    .coupon-stat-row .stat-card {
        flex: 1 1 calc(50% - 6px);
    }

    .coupon-filter-bar {
        flex-direction: column;
        align-items: stretch;
    }

    .coupon-service-tabs {
        flex-wrap: wrap;
    }

}

/* --- [QnA관리] qna\qnaStyle.css --- */

/* 발신자 탭 */
.qna-sender-tabs {
    display: flex;
    gap: 8px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.qna-sender-tab {
    padding: 8px 18px;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    background: var(--card-bg);
    color: var(--text-secondary);
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    transition: all 0.2s ease;
}

.qna-sender-tab:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.qna-sender-tab.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

.qna-manage-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}

.qna-manage-container .clickable-row:hover {
    background: var(--bg-muted);
}

.qna-manage-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
}

/*
   관리화면 공용 필터바 + 상태 칩 + 상세 모달.

   QnA 관리(qnaList) · 스크린 문의(screenQnaList) · 커뮤니티 신고(reportList) ·
   커뮤니티 게시글(postList) 네 화면이 같은 구성을 쓴다. 전에는 화면마다
   .qna-* / .cmreport-* / .cmpost-* 로 같은 본문을 복사해 3벌이 돌아다녔다(실측 99줄).
   선택자만 다르고 값이 같으면 한 벌이어야 한다 — 규약을 따르는 것과
   규약을 복사하는 것은 다르다.

   .stat-chip 베이스(승인관리용, 흰 배경 + 보더)를 여기서 덮어 색 배경 칩으로 만든다.
   톤 클래스는 의미가 화면마다 달라도 색을 공유한다: 대기=주황 / 완료=초록 / 종료·반려=회색.
*/
.admin-filter-bar {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 16px;
    flex-wrap: wrap;
}

.admin-filter-bar .admin-form-select {
    width: auto;
    min-width: 120px;
}

.admin-filter-bar .admin-search-bar {
    flex: 1;
    min-width: 180px;
    margin-bottom: 0;
}

.admin-stat-inline {
    display: flex;
    gap: 8px;
}

.admin-stat-inline .stat-chip {
    padding: 6px 14px;
    border-radius: 20px;
    font-size: 13px;
    font-weight: 500;
}

.admin-stat-inline .stat-chip strong {
    margin-left: 4px;
    font-weight: 700;
}

.admin-stat-inline .stat-waiting {
    background: var(--warning-light);
    color: var(--badge-event-text);
}

/* 톤은 3가지뿐이고 이름만 화면별로 다르다 — 값이 같으므로 별칭으로 묶는다
   (answered=완료·공개, closed=종료·반려·숨김) */
.admin-stat-inline .stat-answered,
.admin-stat-inline .stat-alive {
    background: var(--primary-light);
    color: var(--primary-hover);
}

.admin-stat-inline .stat-closed,
.admin-stat-inline .stat-hidden {
    background: var(--content-bg);
    color: var(--text-muted);
}

/* 상세 모달 공용 — 폭이 다른 화면은 자기 클래스로 width 만 덮는다 */
.admin-detail-modal {
    width: 640px;
    max-height: 85vh;
    overflow-y: auto;
}

.admin-detail-title {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 12px;
}

/* ── QnA 관리 고유 ── */
.qna-detail-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 12px;
}

.qna-detail-date {
    font-size: 12px;
    color: var(--text-muted);
}

.qna-detail-meta {
    display: flex;
    flex-wrap: wrap; /* 동의 감사 항목이 추가돼 한 줄을 넘긴다 (2026-08-10 법무요구) */
    gap: 8px 20px;
    font-size: 13px;
    color: var(--text-secondary);
    margin-bottom: 16px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
}

.qna-detail-content {
    font-size: 14px;
    line-height: 1.7;
    color: var(--text-primary);
    margin-bottom: 24px;
    white-space: pre-wrap;
}

/* 답변 섹션 */
.qna-reply-section {
    border-top: 1px solid var(--border-color);
    padding-top: 16px;
}

.qna-reply-title {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 12px;
    color: var(--text-primary);
}

.qna-reply-title i {
    color: var(--primary);
    margin-right: 6px;
}

.qna-reply-item {
    background: var(--bg-muted);
    border-radius: 8px;
    padding: 14px;
    margin-bottom: 10px;
}

.qna-reply-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 8px;
    font-size: 13px;
}

.qna-reply-date {
    font-size: 12px;
    color: var(--text-muted);
}

.qna-reply-content {
    font-size: 13px;
    line-height: 1.6;
    color: var(--text-primary);
    white-space: pre-wrap;
}

.qna-no-reply {
    font-size: 13px;
    color: var(--text-muted);
    text-align: center;
    padding: 20px 0;
}

/* 답변 입력 폼 */
.qna-reply-form {
    margin-top: 12px;
}

.qna-reply-form .admin-form-textarea {
    min-height: 80px;
    margin-bottom: 10px;
}

.qna-reply-form-actions {
    display: flex;
    justify-content: flex-end;
}

/* --- [업체 QnA 문의] mngscreen\screenQnaStyle.css --- */
.screen-qna-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}

.screen-qna-container .clickable-row:hover {
    background: var(--bg-muted);
}

.screen-qna-container .empty-state-msg {
    text-align: center;
    padding: 40px;
    color: var(--text-muted);
}

.screen-qna-container .write-modal-body .admin-form-textarea {
    min-height: 160px;
}

/* --- [QnA 카테고리 관리] qna\qnaCategoryStyle.css --- */

.qna-category-container .admin-toolbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
}

.qna-category-container .toolbar-info {
    font-size: 14px;
    color: var(--text-muted);
}

.qna-category-container .empty-state-msg {
    text-align: center;
    padding: 40px;
    color: var(--text-muted);
}

.qna-category-modal {
    width: 480px;
}

.qna-category-modal .admin-form-group {
    margin-bottom: 16px;
}

.qna-cat-help-text {
    display: block;
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 4px;
}

@media (max-width: 768px) {
    .qna-category-modal {
        width: 95%;
    }
}

/* --- [상품관리] mngscreen\screenProductListStyle.css --- */

/* 컨테이너 */
.product-manage-container {
    max-width: 1200px;
}

.product-manage-container .product-card-gap {
    margin-top: 24px;
}

/* 카드 헤더 */
.product-manage-container .product-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 20px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
}

.product-manage-container .product-card-header h3 {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 16px;
    font-weight: 600;
    margin: 0;
}

.product-manage-container .product-icon-price {
    color: var(--primary);
}

.product-manage-container .product-icon-package {
    color: var(--info);
}

/* 카운트 뱃지 */
.product-count-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    font-weight: 600;
    min-width: 20px;
    height: 20px;
    border-radius: 10px;
    padding: 0 6px;
}

.product-count-badge.price-badge {
    background: var(--primary-light);
    color: var(--primary);
}

.product-count-badge.package-badge {
    background: var(--info-light);
    color: var(--info);
}

/* 금액/시간 표시 */
.product-price-text {
    font-weight: 700;
    color: var(--primary);
}

.product-duration-text {
    color: var(--text-secondary);
    font-size: 13px;
}

/* 옵션 태그 */
.product-opt-tags {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.product-opt-tag {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 3px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 500;
}

.product-opt-tag.on {
    background: var(--primary-light);
    color: var(--primary);
    border: 1px solid var(--primary-light);
}

.product-opt-tag.off {
    background: var(--content-bg);
    color: var(--text-muted);
    border: 1px solid var(--border-color);
}

/* 액션 버튼 그룹 */
.product-action-group {
    display: flex;
    gap: 6px;
}

/* 모달 */
.product-modal-container {
    width: 560px;
    max-width: 95%;
}

/* 폼 힌트 */
.product-form-hint {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 4px;
}

/* 정렬 순서 입력 */
.product-sort-input {
    width: 120px;
}

/* 구분선 */
.product-divider {
    border: none;
    border-top: 1px solid var(--border-color);
    margin: 20px 0;
}

.product-option-divider {
    border: none;
    border-top: 1px solid var(--border-color);
    margin: 12px 0;
}

/* 예약 옵션 그룹 */
.product-option-group {
    background: var(--content-bg);
    border: 1px solid var(--border-color);
    border-radius: 10px;
    padding: 16px;
}

.product-option-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
    margin-bottom: 12px;
}

.product-option-title i {
    margin-right: 6px;
}

/* 옵션 아이템 */
.product-option-item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 12px;
    border-radius: 8px;
    transition: background 0.2s;
    margin-bottom: 4px;
    cursor: pointer;
}

.product-option-item:hover {
    background: var(--card-bg);
}

/* 하위 옵션 */
.product-option-sub {
    margin-left: 28px;
    padding: 8px 12px;
}

.product-option-disabled {
    opacity: 0.4;
    pointer-events: none;
}

/* 체크박스 */
.product-option-chk {
    width: 18px;
    height: 18px;
    min-width: 18px;
    border-radius: 4px;
    border: 2px solid var(--border-color);
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    margin-top: 1px;
    transition: all 0.2s;
}

.product-option-chk.checked {
    background: var(--primary);
    border-color: var(--primary);
}

.product-option-chk.checked::after {
    content: '\f00c';
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
    font-size: 10px;
    color: var(--card-bg);
}

/* 옵션 라벨/설명 */
.product-option-label {
    font-size: 14px;
    font-weight: 500;
    color: var(--text-primary);
}

.product-option-desc {
    font-size: 12px;
    color: var(--text-secondary);
    margin-top: 2px;
    line-height: 1.5;
}

/* 필수 표시 */
.product-manage-container .required {
    color: var(--danger);
    margin-left: 2px;
}

/* 반응형 */
@media (max-width: 768px) {
    .product-modal-container {
        width: 95%;
    }

    .product-opt-tags {
        gap: 4px;
    }

    .product-opt-tag {
        font-size: 10px;
        padding: 2px 6px;
    }
}

/* --- [휴무일관리] mngscreen\screenHolidayListStyle.css --- */

.holiday-manage-container {
    max-width: 1200px;
}

/* 범례 카드 */
.holiday-legend-card {
    margin-bottom: 20px;
}

.holiday-legend {
    display: flex;
    gap: 20px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.holiday-legend-item {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--text-secondary);
}

.holiday-dot {
    display: inline-block;
    width: 12px;
    height: 12px;
    border-radius: 50%;
}

.holiday-dot-regular {
    background: var(--text-muted);
}

.holiday-dot-extra {
    background: var(--danger);
}

.holiday-dot-today {
    background: var(--success);
}

.holiday-regular-info {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 14px;
    background: var(--content-bg);
    border-radius: 6px;
    font-size: 13px;
    color: var(--text-secondary);
    flex-wrap: wrap;
}

.holiday-regular-info i {
    color: var(--info);
}

.holiday-regular-edit {
    margin-left: auto;
    font-size: 12px;
    color: var(--primary);
    text-decoration: none;
    white-space: nowrap;
}

.holiday-regular-edit:hover {
    text-decoration: underline;
}

/* 3열 캘린더 그리드 */
.holiday-calendar-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
}

/* 월 카드 */
.holiday-month-card {
    padding: 16px;
}

.holiday-month-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
    text-align: center;
    margin-bottom: 12px;
}

/* 요일 헤더 */
.holiday-cal-header {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    margin-bottom: 4px;
}

.holiday-cal-day-name {
    text-align: center;
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
    padding: 4px 0;
}

.holiday-cal-day-name.holiday-sun {
    color: var(--danger);
}

.holiday-cal-day-name.holiday-sat {
    color: var(--info);
}

/* 날짜 셀 */
.holiday-cal-body {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}

.holiday-cal-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
    min-height: 44px;
    padding: 4px 2px;
    border-radius: 6px;
    cursor: pointer;
    transition: background 0.15s;
    position: relative;
}

.holiday-cal-cell:hover:not(.holiday-past):not(.holiday-empty) {
    background: var(--content-bg);
}

.holiday-cal-cell.holiday-empty {
    cursor: default;
}

/* 과거 날짜 */
.holiday-cal-cell.holiday-past {
    opacity: 0.35;
    cursor: default;
}

/* 오늘 */
.holiday-cal-cell.holiday-today .holiday-cal-date {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--success);
    color: var(--card-bg);
    font-weight: 600;
}

/* 정기 휴무 */
.holiday-cal-cell.holiday-regular {
    background: var(--content-bg);
}

.holiday-cal-cell.holiday-regular .holiday-cal-date {
    text-decoration: line-through;
    color: var(--text-muted);
}

/* 추가 휴무 */
.holiday-cal-cell.holiday-extra {
    background: var(--danger-bg, #fef2f2);
    border: 1px solid var(--danger-border, #fecaca);
}

.holiday-cal-cell.holiday-extra .holiday-cal-date {
    color: var(--danger);
    font-weight: 600;
}

/* 일요일/토요일 색상 */
.holiday-cal-cell.holiday-sun .holiday-cal-date {
    color: var(--danger);
}

.holiday-cal-cell.holiday-sat .holiday-cal-date {
    color: var(--info);
}

/* 오늘 + 일/토 겹침 시 오늘 스타일 우선 */
.holiday-cal-cell.holiday-today .holiday-cal-date {
    color: var(--card-bg);
}

/* 날짜 숫자 */
.holiday-cal-date {
    font-size: 13px;
    font-weight: 500;
    color: var(--text-primary);
    line-height: 1;
}

/* 사유 텍스트 */
.holiday-cal-reason {
    font-size: 9px;
    color: var(--danger);
    margin-top: 2px;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    text-align: center;
}

/* 모달 날짜 표시 */
.holiday-modal-date-display {
    background: var(--content-bg);
    font-weight: 600;
    color: var(--text-primary);
    pointer-events: none;
}

/* 반응형 */
@media (max-width: 992px) {
    .holiday-calendar-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 600px) {
    .holiday-calendar-grid {
        grid-template-columns: 1fr;
    }

    .holiday-regular-edit {
        margin-left: 0;
        margin-top: 4px;
    }
}
/* --- [가맹관리] partner\partnerStyle.css --- */

/* 필터 바 */
.partner-filter-bar {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 16px;
}

.partner-filter-bar .filter-bar-title {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
    white-space: nowrap;
}

.partner-filter-bar .list-count {
    margin-left: auto;
    font-size: 13px;
    color: var(--text-secondary);
    white-space: nowrap;
}

/* 엑셀 업로드 존 */
.excel-upload-zone {
    border: 2px dashed var(--border-color);
    border-radius: 8px;
    padding: 32px;
    text-align: center;
    background: var(--content-bg);
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s;
    position: relative;
}

.excel-upload-zone.drag-over {
    border-color: var(--primary);
    background: var(--primary-light);
}

.excel-upload-icon {
    font-size: 36px;
    color: var(--text-muted);
    margin-bottom: 8px;
}

.excel-upload-text {
    color: var(--text-secondary);
    margin: 0 0 4px;
}

.excel-upload-hint {
    color: var(--text-muted);
    font-size: 12px;
    margin: 0 0 16px;
}

.excel-file-input {
    display: none;
}

.excel-upload-btns {
    display: flex;
    gap: 8px;
    justify-content: center;
}

/* 엑셀 미리보기 */
.excel-preview-section {
    margin-top: 16px;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    overflow: hidden;
}

.excel-preview-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 16px;
    background: var(--primary-light);
}

.excel-preview-title {
    font-size: 14px;
    font-weight: 500;
    color: var(--text-primary);
}

.excel-preview-count {
    font-size: 13px;
    color: var(--text-secondary);
}

.excel-preview-actions {
    display: flex;
    gap: 8px;
    justify-content: flex-end;
    padding: 12px 16px;
    border-top: 1px solid var(--border-color);
}

.preview-ok {
    color: var(--success);
}

.preview-err {
    color: var(--danger);
}

.preview-error-row {
    background: var(--danger-bg);
}

/* 카드 섹션 타이틀 */
.card-section-title {
    font-size: 16px;
    font-weight: 600;
    color: var(--text-primary);
    margin: 0 0 16px;
}

.card-section-title i {
    color: var(--success);
    margin-right: 6px;
}

/* 비가맹 목록 섹션 */
.non-affiliated-list-section {
    margin-top: 24px;
}

/* 비가맹 목록 소형 버튼 색상 변형 (스코핑: 전역 영향 방지) */
.non-affiliated-container .btn-admin-sm.btn-admin-primary {
    background: var(--primary-light);
    color: var(--primary);
}

.non-affiliated-container .btn-admin-sm.btn-admin-primary:hover {
    background: var(--primary);
    color: var(--card-bg);
}

.non-affiliated-container .btn-admin-sm.btn-admin-danger {
    background: var(--danger-light);
    color: var(--danger);
}

.non-affiliated-container .btn-admin-sm.btn-admin-danger:hover {
    background: var(--danger);
    color: var(--card-bg);
}

/* 가맹 전환 모달 (modal-overlay/container는 공통 CSS 사용) */
.convert-modal-lg {
    max-width: 560px;
}

.convert-target-info {
    background: var(--content-bg);
    border-radius: 8px;
    padding: 12px 16px;
    margin-bottom: 16px;
}

.convert-info-name {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
}

.convert-info-detail {
    font-size: 12px;
    color: var(--text-muted);
    margin-top: 4px;
}

.convert-account-search {
    margin-bottom: 12px;
}

.convert-account-table-wrap {
    border: 1px solid var(--border-color);
    border-radius: 8px;
    overflow: hidden;
    max-height: 200px;
    overflow-y: auto;
}

.convert-account-table-wrap .admin-table {
    margin-bottom: 0;
}

.convert-account-table-wrap tr[data-user-id] {
    cursor: pointer;
    transition: background 0.15s;
}

.convert-account-table-wrap tr[data-user-id]:hover {
    background: var(--content-bg);
}

.convert-account-table-wrap tr.convert-account-selected,
.convert-account-table-wrap tr.convert-account-selected:hover {
    background: var(--primary-light);
}

.convert-account-table-wrap tr.convert-account-selected td:first-child {
    font-weight: 600;
    color: var(--primary);
}

/* --- [현장예약] mngscreen\walkInReserveStyle.css --- */

/* 현장예약 블럭 */
.reserve-block.block-walkin {
    background-color: var(--success);
    border-left: 3px solid var(--primary);
}
.reserve-block.block-walkin .block-name {
    color: var(--card-bg);
}
.reserve-block.block-walkin .block-detail {
    color: rgba(255, 255, 255, 0.85);
}
.reserve-block.block-walkin .block-badge {
    background-color: rgba(255, 255, 255, 0.25);
    color: var(--card-bg);
}

/* 범례 - 현장 */
.legend-walkin {
    background-color: var(--success);
}

/* 채널 뱃지 */
.badge-channel-app {
    background-color: var(--info-light);
    color: var(--info);
}
.badge-channel-phone {
    background-color: var(--warning-light);
    color: var(--warning);
}
.badge-channel-walkin {
    background-color: var(--primary-light);
    color: var(--primary);
}
.badge-channel-external {
    background-color: var(--purple-light);
    color: var(--purple);
}

/* 채널 필터 칩 */
.channel-filter-row {
    display: flex;
    align-items: center;
    gap: 6px;
    padding: 8px 0;
}
.channel-filter-row .filter-label {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    margin-right: 4px;
}
.channel-filter-chip {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 5px 12px;
    border-radius: 16px;
    font-size: 12px;
    font-weight: 600;
    border: 1px solid var(--border-color);
    background: var(--card-bg);
    cursor: pointer;
    transition: all 0.15s;
}
.channel-filter-chip:hover {
    border-color: var(--primary);
    background: var(--primary-light);
}
.channel-filter-chip.active {
    background: var(--primary);
    color: var(--card-bg);
    border-color: var(--primary);
}

/* 예약유형 라디오카드 */
.reserve-type-selector {
    display: flex;
    gap: 8px;
}
.reserve-type-option {
    flex: 1;
    padding: 10px 8px;
    border: 2px solid var(--border-color);
    border-radius: 8px;
    text-align: center;
    cursor: pointer;
    transition: all 0.15s;
}
.reserve-type-option:hover {
    border-color: var(--primary-light);
}
.reserve-type-option.active {
    border-color: var(--primary);
    background: var(--primary-light);
}
.reserve-type-option .type-icon {
    font-size: 20px;
    margin-bottom: 4px;
}
.reserve-type-option .type-label {
    font-size: 12px;
    font-weight: 600;
    color: var(--text-primary);
}

/* 요금제 카드 선택 */
.product-select-cards {
    display: flex;
    gap: 8px;
    flex-wrap: wrap;
}
.product-select-card {
    padding: 10px 14px;
    border: 2px solid var(--border-color);
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.15s;
    min-width: 110px;
}
.product-select-card:hover {
    border-color: var(--primary-light);
}
.product-select-card.active {
    border-color: var(--primary);
    background: var(--primary-light);
}
.product-select-card .product-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}
.product-select-card .product-duration {
    font-size: 11px;
    color: var(--text-secondary);
}
.product-select-card .product-price {
    font-size: 14px;
    font-weight: 700;
    color: var(--primary);
    margin-top: 2px;
}

/* 인원수 카운터 */
.counter-input-group {
    display: inline-flex;
    align-items: center;
    gap: 10px;
}
.counter-btn {
    width: 34px;
    height: 34px;
    border: 1px solid var(--border-color);
    background: var(--card-bg);
    border-radius: 6px;
    font-size: 16px;
    font-weight: 700;
    cursor: pointer;
    transition: all 0.15s;
    color: var(--text-primary);
}
.counter-btn:hover {
    background: var(--bg-muted);
    border-color: var(--primary);
    color: var(--primary);
}
.counter-value {
    font-size: 18px;
    font-weight: 700;
    min-width: 24px;
    text-align: center;
    color: var(--text-primary);
}

/* 경고 배너 */
.walkin-warning-banner {
    background: var(--warning-light);
    border: 1px solid var(--warning);
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 12px;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 12px;
}

/* 모달 섹션 구분선 */
.walkin-section-divider {
    font-size: 12px;
    color: var(--text-muted);
    font-weight: 600;
    margin: 16px 0 10px;
    padding-bottom: 6px;
    border-bottom: 1px solid var(--border-color);
}

/* 버튼 변형 - info */
.btn-admin-info {
    background: var(--info);
    color: var(--card-bg);
    border-color: var(--info);
}
.btn-admin-info:hover {
    opacity: 0.9;
}

/* 현장예약 모달 컨테이너 */
.walkin-modal-container {
    max-width: 520px;
}

/* 현장예약 폼 2열 레이아웃 */
.walkin-form-row {
    display: flex;
    gap: 10px;
}
.walkin-form-row > .admin-form-group {
    flex: 1;
}

/* 카운터 단위 라벨 */
.counter-unit-label {
    font-size: 12px;
    color: var(--text-muted);
    margin-left: 4px;
}

/* 배치 안내 배너 변형 */
.walkin-banner-placed {
    background: var(--primary-light);
    border-color: var(--primary);
    color: var(--primary);
}
.walkin-banner-placed i {
    color: var(--primary);
}
.walkin-banner-unplaced {
    background: var(--bg-muted);
    border-color: var(--border-color);
}

/* 빈 요금제 안내 */
.walkin-empty-product {
    font-size: 12px;
    color: var(--text-muted);
}

/* ========================================================================
   [강사 대시보드] mngteach\teachDashboardStyle.css
   ======================================================================== */

/* 강사 헤더 */
.teach-header .teach-header-content {
    display: flex;
    align-items: center;
    gap: 16px;
}

.teach-header-thumb {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    overflow: hidden;
    flex-shrink: 0;
}

.teach-header-thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.teach-thumb-placeholder {
    width: 100%;
    height: 100%;
    background: var(--content-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    color: var(--text-muted);
}

.teach-header-info {
    flex: 1;
}

.teach-header-name {
    font-size: 18px;
    font-weight: 700;
    color: var(--text-primary);
    margin-bottom: 4px;
}

.teach-header-meta {
    display: flex;
    gap: 16px;
    font-size: 13px;
    color: var(--text-secondary);
}

.teach-header-meta .meta-item {
    display: flex;
    align-items: center;
    gap: 4px;
}

.teach-header-meta .meta-item i {
    color: var(--text-muted);
    width: 14px;
    text-align: center;
}

.teach-header-actions {
    flex-shrink: 0;
}

/* 통계 카드 그리드 */
.teach-dashboard-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 16px;
    margin-bottom: 20px;
}

/* 하단 2컬럼 */
.teach-dashboard-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

/* 오늘 일정 리스트 */
.teach-today-list {
    display: flex;
    flex-direction: column;
}

.teach-today-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 16px;
    border-bottom: 1px solid var(--border-color);
    border-left: 3px solid transparent;
}

.teach-today-item:last-child {
    border-bottom: none;
}

.teach-today-confirmed {
    border-left-color: var(--success);
    background: rgba(16, 185, 129, 0.03);
}

.teach-today-pending {
    border-left-color: var(--warning);
    background: rgba(245, 158, 11, 0.03);
}

.teach-today-completed {
    border-left-color: var(--text-muted);
    opacity: 0.6;
}

.today-time {
    font-size: 14px;
    font-weight: 700;
    color: var(--text-primary);
    width: 50px;
    flex-shrink: 0;
}

.today-info {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.today-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.today-product {
    font-size: 12px;
    color: var(--text-secondary);
}

/* 최근 문의 리스트 */
.teach-qna-list {
    display: flex;
    flex-direction: column;
}

.teach-qna-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 16px;
    border-bottom: 1px solid var(--border-color);
}

.teach-qna-item:last-child {
    border-bottom: none;
}

.qna-info {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.qna-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.qna-title {
    font-size: 12px;
    color: var(--text-secondary);
    max-width: 300px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* ========================================================================
   [강사 프로필 편집] mngteach\teachInfoEditStyle.css
   ======================================================================== */

/* 2컬럼 레이아웃 */
.teach-edit-layout {
    display: flex;
    gap: 24px;
    align-items: flex-start;
}

.teach-edit-panel {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.teach-preview-panel {
    width: 320px;
    flex-shrink: 0;
    position: sticky;
    top: 80px;
    align-self: flex-start;
}

/* 미리보기 설명 텍스트 (배너/미리보기 패널) */
.preview-desc {
    font-size: 11px;
    color: var(--text-secondary);
    line-height: 1.5;
    white-space: pre-line;
    max-height: 60px;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* 폼 섹션 */
.teach-form-section .card-header {
    display: flex;
    align-items: center;
    gap: 8px;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--border-color);
    margin-bottom: 16px;
}

.teach-form-section .card-header h3 {
    font-size: 15px;
    font-weight: 600;
    color: var(--text-primary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.teach-form-section .card-header h3 i {
    color: var(--primary);
}

.form-row-2col {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 12px;
}

.input-with-suffix {
    display: flex;
    align-items: center;
    gap: 8px;
}

.input-with-suffix .admin-form-input {
    flex: 1;
}

.input-suffix {
    font-size: 13px;
    color: var(--text-secondary);
    flex-shrink: 0;
}

/* 프로필 사진 업로드 */
.teach-thumb-upload {
    display: flex;
    align-items: center;
    gap: 16px;
}

.teach-thumb-preview {
    width: 100px;
    height: 100px;
    border: 2px dashed var(--border-color);
    border-radius: 50%;
    overflow: hidden;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.teach-thumb-preview img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.teach-thumb-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    color: var(--text-muted);
    font-size: 11px;
}

.teach-thumb-empty i {
    font-size: 24px;
}

/* 배너 이미지 */
.teach-banner-list {
    display: flex;
    gap: 12px;
    flex-wrap: wrap;
}

.teach-banner-item {
    width: 160px;
    height: 90px;
    border-radius: 8px;
    overflow: hidden;
    position: relative;
}

.teach-banner-item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.teach-banner-delete {
    position: absolute;
    top: -6px;
    right: -6px;
    width: 22px;
    height: 22px;
    background: var(--danger);
    color: var(--card-bg);
    border: none;
    border-radius: 50%;
    font-size: 10px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
}

.teach-banner-add {
    width: 160px;
    height: 90px;
    border: 2px dashed var(--border-color);
    border-radius: 8px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 4px;
    color: var(--text-muted);
    font-size: 12px;
    cursor: pointer;
}

.teach-banner-add:hover {
    border-color: var(--primary);
    color: var(--primary);
}

/* 태그 칩 */
.teach-tag-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.teach-tag-chip {
    padding: 6px 14px;
    border-radius: 20px;
    font-size: 12px;
    cursor: pointer;
    background: var(--content-bg);
    color: var(--text-secondary);
    transition: all 0.2s;
    user-select: none;
}

.teach-tag-chip.active {
    background: var(--primary);
    color: var(--card-bg);
    font-weight: 500;
}

.teach-tag-chip:hover:not(.active) {
    background: var(--border-color);
}

/* 토글 행 */
.teach-toggle-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px;
    background: var(--content-bg);
    border-radius: 8px;
}

.teach-toggle-label .toggle-title {
    display: block;
    font-size: 13px;
    font-weight: 500;
    color: var(--text-primary);
}

.teach-toggle-label .toggle-desc {
    display: block;
    font-size: 11px;
    color: var(--text-muted);
}

/* 커리큘럼 목록 */
.teach-product-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-bottom: 12px;
}

.teach-product-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px;
    border: 1px solid var(--border-color);
    border-radius: 8px;
}

.teach-product-item .product-info {
    flex: 1;
}

.product-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.product-desc {
    font-size: 11px;
    color: var(--text-secondary);
    margin-top: 2px;
}

.product-price {
    text-align: right;
    flex-shrink: 0;
}

.price-original {
    font-size: 11px;
    color: var(--text-muted);
    text-decoration: line-through;
    display: block;
}

.price-current {
    font-size: 14px;
    font-weight: 700;
    color: var(--primary);
}

.product-actions {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}

.teach-product-add-btn {
    width: 100%;
    background: rgba(5, 150, 105, 0.05);
    color: var(--primary);
    border: 1px dashed var(--primary);
    border-radius: 8px;
    padding: 10px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
}

.teach-product-add-btn:hover {
    background: rgba(5, 150, 105, 0.1);
}

/* 주소 */
.teach-addr-row {
    display: flex;
    gap: 8px;
}

.teach-addr-row .admin-form-input {
    width: 140px;
}

/* 지도 미리보기 */
.teach-map-preview {
    height: 180px;
    background: var(--content-bg);
    border-radius: 8px;
    margin-top: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-muted);
    font-size: 12px;
}

/* 저장 버튼 영역 */
.teach-form-actions {
    display: flex;
    gap: 12px;
    justify-content: flex-end;
    padding: 8px 0;
}

/* ========================================================================
   [레슨 일정] mngteach\teachScheduleStyle.css
   ======================================================================== */

/* 탭 */
.teach-schedule-tabs {
    display: flex;
    gap: 4px;
    margin-bottom: 16px;
    border-bottom: 2px solid var(--border-color);
}

.schedule-tab {
    padding: 10px 20px;
    font-size: 13px;
    font-weight: 500;
    background: transparent;
    border: none;
    color: var(--text-secondary);
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -2px;
}

.schedule-tab.active {
    color: var(--primary);
    border-bottom-color: var(--primary);
    font-weight: 600;
}

/* 툴바 */
.schedule-toolbar {
    display: flex;
    align-items: center;
    gap: 16px;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

.schedule-date-nav {
    display: flex;
    align-items: center;
    gap: 8px;
}

.schedule-date-label {
    font-size: 14px;
    font-weight: 600;
    min-width: 140px;
    text-align: center;
}

.schedule-actions { margin-left: auto; }

.schedule-legend {
    display: flex;
    gap: 12px;
    font-size: 11px;
    color: var(--text-secondary);
}

.legend-item {
    display: flex;
    align-items: center;
    gap: 4px;
}

.legend-dot {
    width: 10px;
    height: 10px;
    border-radius: 2px;
    flex-shrink: 0;
}

/* 범례 색상 */
.legend-dot--available { background: var(--success); }
.legend-dot--blocked { background: var(--danger); }
.legend-dot--holiday { background: var(--text-muted); }
.legend-dot--warning { background: var(--warning); }

/* 비활성 스케줄 버튼 */
.btn-schedule-view.disabled { opacity: 0.4; }

/* 주간 그리드 */
.schedule-grid-card {
    overflow: auto;
    max-height: 500px;
}

.schedule-grid {
    width: 100%;
    border-collapse: collapse;
    font-size: 11px;
    table-layout: fixed;
}

.schedule-grid th, .schedule-grid td {
    border: 1px solid var(--border-color);
    padding: 4px;
    text-align: center;
    min-width: 80px;
}

.schedule-grid th {
    background: var(--content-bg);
    font-weight: 600;
    padding: 8px 4px;
    position: sticky;
    top: 0;
    z-index: 1;
}

.time-col {
    width: 55px !important;
    min-width: 55px !important;
    font-weight: 600;
    background: var(--content-bg) !important;
}

.today-col { background: rgba(245, 158, 11, 0.05) !important; }

.cell-confirmed { background: rgba(16, 185, 129, 0.08); }
.cell-pending { background: rgba(245, 158, 11, 0.08); }
.cell-memo { background: rgba(148, 163, 184, 0.08); }
.cell-holiday { background: rgba(239, 68, 68, 0.06); }
/* 취소는 종전에 분기가 없어 '확정' 초록색으로 칠해졌다 (2026-08-12 QA M-29).
   노쇼 칸 색(.cell-noshow)은 레슨 노쇼 미도입 확정(2026-08-13 HOLD-2)으로 제거했다 — 도달 불가 상태였다. */
.cell-cancelled { background: rgba(148, 163, 184, 0.14); }
/* 장시간 예약이 이어지는 칸. 종전에는 durationTime 을 안 봐서 90분 예약이 30분처럼 보였다. */
.cell-cont { background: rgba(16, 185, 129, 0.04); }

.cell-holiday-text {
    font-size: 10px;
    color: var(--danger);
}

.cell-block {
    font-size: 10px;
    font-weight: 500;
    padding: 2px 4px;
    border-radius: 3px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.cell-confirmed .cell-block { background: var(--success); color: white; }
.cell-pending .cell-block { background: var(--warning); color: white; }
.cell-memo .cell-block { background: var(--text-muted); color: white; }
.cell-cancelled .cell-block { background: var(--text-muted); color: white; text-decoration: line-through; }
.cell-cont .cell-block { background: transparent; color: var(--text-secondary); }

/* 소요시간 표기 — 격자 칸 수만으로는 비-30분 예약의 실제 시각을 알 수 없다. */
.cell-span { display: block; font-size: 9px; color: var(--text-secondary); }

/* 같은 슬롯의 나머지 예약 건수. 종전에는 뒤엣것이 앞엣것을 덮어 화면에서 사라졌다 (QA M-32). */
.cell-more {
    display: inline-block;
    font-size: 9px;
    font-weight: 700;
    padding: 0 4px;
    border-radius: 8px;
    background: var(--danger);
    color: white;
}

.cell-clickable { cursor: pointer; }
.cell-empty { color: var(--border-color); }

/* ========================================================================
   [레슨 일정] mngteach\teachScheduleStyle.css
   ======================================================================== */

/* 월간 캘린더 */
.monthly-nav {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
    margin-bottom: 16px;
}

.monthly-label {
    font-size: 18px;
    font-weight: 700;
}

.monthly-stats {
    display: flex;
    gap: 16px;
    justify-content: center;
    margin-bottom: 16px;
}

.stat-mini {
    text-align: center;
    background: var(--card-bg);
    padding: 12px 24px;
    border-radius: 8px;
    box-shadow: var(--card-shadow);
}

.stat-mini-value { font-size: 22px; font-weight: 700; display: block; }
.stat-mini-label { font-size: 11px; color: var(--text-secondary); }

.monthly-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;                 /* 셀 폭 균등 (내용량과 무관) */
}

.monthly-table th,
.monthly-table td {
    width: 14.2857%;                     /* 100% / 7 */
}

.monthly-table th {
    padding: 8px;
    text-align: center;
    font-size: 12px;
    font-weight: 600;
    color: var(--text-secondary);
}

.monthly-table th.sun { color: var(--danger); }
.monthly-table th.sat { color: var(--info); }

.month-cell {
    border: 1px solid var(--border-color);
    padding: 6px;
    height: 80px;
    vertical-align: top;
    cursor: pointer;
    overflow: hidden;                    /* 뱃지 오버플로 방지 */
}

.month-cell:hover { background: rgba(5, 150, 105, 0.03); }
.today-cell {
    /* border 두께 변경 대신 inset shadow — 레이아웃 영향 없음 */
    box-shadow: inset 0 0 0 2px var(--primary);
}

.month-date { font-size: 12px; font-weight: 500; margin-bottom: 4px; }

.month-badge {
    font-size: 9px;
    padding: 1px 6px;
    border-radius: 4px;
    display: inline-block;
    margin-bottom: 2px;
}

.badge-confirmed { background: var(--success); color: white; }
.badge-pending { background: var(--warning); color: white; }
/* 합계(cnt)에는 있는데 배지가 없던 상태. 지난달은 전건 COMPLETED 라 배지가 전부 빈칸이었다 (QA M-30).
   노쇼 배지(.badge-noshow)는 레슨 노쇼 미도입 확정(HOLD-2)으로 제거 —
   스크린 화면은 .admin-badge.badge-noshow 를 쓰므로 영향 없다. */
.badge-completed { background: var(--text-muted); color: white; }

.empty-cell { border: 1px solid var(--border-color); }

/* 날짜 상세 팝업 */
.day-detail-item {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 0;
    border-bottom: 1px solid var(--border-color);
    font-size: 12px;
}

.day-detail-item:last-child { border-bottom: none; }
.day-detail-time { font-weight: 700; width: 92px; }
.day-detail-name { font-weight: 600; }
.day-detail-product { color: var(--text-secondary); flex: 1; }

/* 슬롯 모달 하단 — 확정 예약은 여기서 예약관리로 넘어간다(종전에는 셀 클릭이 곧바로 이동해 겹친 건을 못 봤다). */
.day-detail-foot { padding-top: 12px; text-align: right; }

/* 휴무일 (teachSchedule 전용 — mngscreen/screenHolidayList와 class 이름 충돌 방지) */
.teach-schedule-container .holiday-legend-card {
    margin-bottom: 16px;
}

.teach-schedule-container .holiday-legend {
    display: flex;
    gap: 16px;
    margin-bottom: 8px;
}

.teach-schedule-container .holiday-regular-info {
    font-size: 12px;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.teach-schedule-container .holiday-regular-edit {
    color: var(--primary);
    font-size: 11px;
}

.teach-schedule-container .holiday-month-title {
    text-align: center;
    font-size: 14px;
    font-weight: 700;
    margin-bottom: 12px;
}

.holiday-mini-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    text-align: center;
}

.hm-header {
    font-size: 10px;
    font-weight: 600;
    color: var(--text-secondary);
    padding: 4px;
}

.hm-header.sun { color: var(--danger); }

.hm-day {
    font-size: 11px;
    padding: 6px 2px;
    border-radius: 50%;
    cursor: pointer;
    width: 28px;
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0 auto;
}

.hm-day:hover { background: var(--content-bg); }
.hm-today { background: var(--info) !important; color: white !important; font-weight: 700; }
.hm-regular { background: rgba(239, 68, 68, 0.15); color: var(--danger); font-weight: 600; cursor: default; }
.hm-extra { background: rgba(245, 158, 11, 0.2); color: var(--warning); font-weight: 600; }
.hm-empty { padding: 6px; }

/* 블록 유형 버튼 */
.block-type-btns {
    display: flex;
    gap: 8px;
}

.block-type-btn {
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 12px;
    cursor: pointer;
    background: var(--content-bg);
    color: var(--text-secondary);
    border: none;
}

.block-type-btn.active {
    background: var(--primary);
    color: var(--card-bg);
    font-weight: 500;
}

/* ========================================================================
   [레슨 예약 관리] mngteach\teachReserveListStyle.css
   ======================================================================== */

.teach-reserve-stats {
    display: flex;
    gap: 12px;
    margin-bottom: 16px;
    justify-content: center;
}

.teach-reserve-hint {
    font-size: 11px;
    color: var(--text-muted);
}

.teach-reserve-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.teach-reserve-card {
    background: var(--card-bg);
    border-radius: 12px;
    padding: 16px;
    box-shadow: var(--card-shadow);
}

.reserve-card-body {
    display: flex;
    align-items: flex-start;
    gap: 12px;
}

.reserve-card-icon {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex-shrink: 0;
}

.reserve-card-info { flex: 1; }

.reserve-card-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}

.reserve-card-name {
    font-size: 14px;
    font-weight: 600;
    color: var(--text-primary);
}

.reserve-card-detail {
    font-size: 12px;
    color: var(--text-secondary);
    margin-bottom: 4px;
}

.reserve-card-date {
    font-size: 11px;
    color: var(--text-muted);
}

.reserve-card-reschedule {
    font-size: 11px;
    margin-top: 4px;
    padding: 6px 8px;
    background: rgba(239, 68, 68, 0.04);
    border-radius: 6px;
}

.reserve-card-actions {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
    align-items: flex-start;
}

/* 예약 카드 - 상태별 border */
.teach-reserve-card.status-reschedule-req { border-left: 4px solid var(--danger); }
.teach-reserve-card.status-pending { border-left: 4px solid var(--warning); }
.teach-reserve-card.status-confirmed { border-left: 4px solid var(--success); }
.teach-reserve-card.status-completed,
.teach-reserve-card.status-default { border-left: 4px solid var(--text-muted); }

/* 예약 카드 아이콘 배경 - 상태별 */
.reserve-card-icon { background: var(--content-bg); }
.reserve-card-icon.icon-reschedule-req { background: var(--danger-bg); }
.reserve-card-icon.icon-pending { background: var(--warning-light); }
.reserve-card-icon.icon-confirmed { background: var(--primary-light); }

/* 일정변경 요청 인라인 정보 */
.reschedule-old-date { text-decoration: line-through; color: var(--danger); }
.reschedule-new-date { color: var(--success); font-weight: 600; }
.reschedule-by-label { font-size: 10px; color: var(--text-muted); }
.reschedule-reason-text { font-size: 11px; color: var(--text-secondary); margin-top: 2px; }

/* 예약카드 금액 */
.price-strong { color: var(--primary); font-weight: 700; }

/* 통계 미니값 색상 */
.stat-mini-value--warning { color: var(--warning); }
.stat-mini-value--danger { color: var(--danger); }
.stat-mini-value--success { color: var(--success); }
.stat-mini-value--primary { color: var(--primary); }

/* 일정변경 경고 안내 */
.reserve-warning-notice {
    background: rgba(245, 158, 11, 0.1);
    border: 1px solid rgba(245, 158, 11, 0.3);
    font-size: 11px;
    color: var(--text-secondary);
}

/* 예약 필터 */
.teach-reserve-container .admin-toolbar { margin-bottom: 16px; }
.teach-reserve-container #statusFilter { width: 140px; }

/* ========================================================================
   [레슨 리뷰 관리] mngteach\teachReviewListStyle.css
   ======================================================================== */

.teach-review-summary { margin-bottom: 16px; }

.review-summary-content {
    display: flex;
    align-items: center;
    gap: 24px;
}

.review-avg {
    text-align: center;
    flex-shrink: 0;
}

.review-avg-number {
    font-size: 36px;
    font-weight: 800;
    color: var(--text-primary);
}

.review-avg-stars { margin: 4px 0; }

.review-avg-count {
    font-size: 12px;
    color: var(--text-secondary);
}

.review-dist { flex: 1; }

.dist-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}

.dist-label {
    font-size: 11px;
    width: 30px;
    text-align: right;
    color: var(--text-secondary);
}

.dist-bar {
    flex: 1;
    height: 8px;
    background: var(--content-bg);
    border-radius: 4px;
    overflow: hidden;
}

.dist-count {
    font-size: 11px;
    color: var(--text-secondary);
    width: 30px;
}

.review-reply-stats {
    display: flex;
    flex-direction: column;
    gap: 8px;
    flex-shrink: 0;
}

/* 리뷰 아이템 */
.teach-review-item {
    padding: 16px;
    border-bottom: 1px solid var(--border-color);
}

.teach-review-item:last-child { border-bottom: none; }

.review-item-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 8px;
}

.review-item-user {
    display: flex;
    gap: 10px;
    align-items: center;
}

.review-user-avatar {
    width: 36px;
    height: 36px;
    background: var(--content-bg);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    flex-shrink: 0;
}

.review-user-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.review-stars {
    font-size: 11px;
    margin-left: 4px;
}

.review-meta {
    font-size: 11px;
    color: var(--text-muted);
}

.review-content {
    font-size: 13px;
    color: var(--text-primary);
    line-height: 1.6;
    margin-bottom: 8px;
}

.review-reply {
    background: rgba(5, 150, 105, 0.04);
    border-radius: 8px;
    padding: 10px 12px;
    border-left: 3px solid var(--primary);
}

.review-reply-label {
    font-size: 11px;
    font-weight: 600;
    color: var(--primary);
    margin-bottom: 4px;
}

.review-reply-content {
    font-size: 12px;
    color: var(--text-primary);
}

.review-reply-date {
    font-size: 10px;
    color: var(--text-muted);
    margin-top: 4px;
}

/* 별점 색상 */
.star-filled { color: var(--warning); }
.star-empty { color: var(--text-muted); }

/* 원문 리뷰 박스 */
.review-original-content {
    font-size: 13px;
    color: var(--text-primary);
    padding: 12px;
    background: var(--content-bg);
    border-radius: 8px;
}

/* ========================================================================
   [레슨 채팅] mngteach\teachChatStyle.css
   ======================================================================== */

/* 채팅 빈 상태 */
.chat-room-empty { padding: 40px 16px; }
.chat-empty-icon { font-size: 48px; color: var(--border-color); }
.chat-empty-text { color: var(--text-muted); margin-top: 12px; }

/* 예약 확인 카드 (teachReserveList 일정변경 모달) */
.booking-confirm-card { background: var(--content-bg); margin-bottom: 12px; }
.booking-confirm-label { color: var(--text-secondary); }
.booking-confirm-end-time { font-weight: 600; }

.chat-layout {
    display: flex;
    height: calc(100vh - 180px);
    min-height: 500px;
    background: var(--card-bg);
    border-radius: 12px;
    box-shadow: var(--card-shadow);
    overflow: hidden;
}

/* 좌측: 대화방 목록 */
.chat-room-panel {
    width: 340px;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    flex-shrink: 0;
}

.chat-room-header {
    padding: 16px;
    border-bottom: 1px solid var(--border-color);
}

.chat-room-header h3 {
    font-size: 16px;
    font-weight: 700;
    margin-bottom: 10px;
}

.chat-search {
    font-size: 12px !important;
    padding: 7px 10px !important;
}

.chat-room-list {
    flex: 1;
    overflow-y: auto;
}

.chat-room-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 12px 16px;
    border-bottom: 1px solid var(--border-color);
    cursor: pointer;
    transition: background 0.15s;
}

.chat-room-item:hover { background: var(--content-bg); }
.chat-room-item.active { background: var(--primary-light); border-left: 3px solid var(--primary); }
.chat-room-item.unread { background: var(--danger-light); }

.chat-room-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--content-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
    flex-shrink: 0;
}

.chat-room-item.unread .chat-room-avatar {
    background: var(--danger-light);
    color: var(--danger);
}

.chat-room-info { flex: 1; min-width: 0; }

.chat-room-name-row {
    display: flex;
    align-items: center;
    gap: 6px;
}

.chat-room-name {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-primary);
}

.chat-room-preview {
    font-size: 12px;
    color: var(--text-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    margin-top: 2px;
}

.chat-room-meta {
    text-align: right;
    flex-shrink: 0;
}

.chat-room-time {
    font-size: 10px;
    color: var(--text-muted);
    display: block;
}

.chat-unread-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    background: var(--danger);
    color: var(--card-bg);
    border-radius: 50%;
    font-size: 10px;
    font-weight: 700;
    margin-top: 4px;
    padding: 0 4px;
}

/* 우측: 채팅 영역 */
.chat-message-panel {
    flex: 1;
    display: flex;
    flex-direction: column;
}

.chat-empty {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.chat-header {
    padding: 12px 16px;
    border-bottom: 1px solid var(--border-color);
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.chat-header-info {
    display: flex;
    align-items: center;
    gap: 10px;
}

.chat-header-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: var(--content-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-secondary);
}

.chat-header-name {
    font-size: 14px;
    font-weight: 600;
}

/* 대화방 목록 더 보기 (2026-08-20). 목록 패널 폭에 맞춰 늘린다. [hidden] 명시는
   .chat-conn-banner 와 같은 이유다 — display 지정이 UA 기본 [hidden] 규칙을 덮는다. */
.chat-more-btn {
    display: block;
    width: calc(100% - 24px);
    margin: 8px 12px 12px;
}

.chat-more-btn[hidden] {
    display: none;
}

/* 연결 상태 인디케이터 (WebSocket 끊김) — 3초 이상 지속 시에만 노출 */
.chat-conn-banner {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 6px 12px;
    font-size: 13px;
    color: var(--warning);
    background: var(--warning-light);
    border-bottom: 1px solid var(--warning);
    flex-shrink: 0;
}

.chat-conn-banner[hidden] {
    display: none;
}

/* 거래 고지 — 금액·계좌 언급이 그려지면 열린다(js/cmmnChatFilter.js). 연결 배너 톤을 그대로 쓰되 두 줄이라 좌측 정렬. */
.chat-trade-notice {
    justify-content: flex-start;
    align-items: flex-start;
    text-align: left;
    line-height: 1.4;
}

/* 헤더 우측 액션 — 이용안내 글귀 + 강의예약서 버튼 */
.chat-header-actions {
    display: flex;
    align-items: center;
    gap: 12px;
}

/* 이용안내 (2026-09-07) — cmmnStyle .link-btn(글꼴 상속·밑줄 hover) 위의 모디파이어: 작은 회색 글귀.
   누르면 #chatGuideModal(공통 .modal-overlay)로 채팅 이용안내(분쟁 시 열람) 팝업. 상시 띠(.chat-notice, 09-06)를 대체한다 —
   고지는 채팅 이용 자체에 대한 안내라 상시 노출 대신 진입점만 둔다. 색은 --text-muted(흰 바탕 2.9:1)가 아니라 AA 를 넘는 --text-secondary. */
.chat-guide-btn {
    padding: 4px 2px;
    font-size: 12px;
    color: var(--text-secondary);
}

/* 메시지 영역 */
.chat-messages {
    flex: 1;
    overflow-y: auto;
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 10px;
    background: var(--content-bg);
}

.chat-date-divider {
    text-align: center;
    margin: 8px 0;
}

.chat-date-divider span {
    font-size: 10px;
    background: var(--border-color);
    color: var(--text-secondary);
    padding: 2px 10px;
    border-radius: 10px;
}

.chat-msg {
    display: flex;
    gap: 8px;
    max-width: 70%;
}

.chat-msg-student { align-self: flex-start; }
.chat-msg-teacher { align-self: flex-end; flex-direction: row-reverse; }

.chat-msg-avatar {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--border-color);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 11px;
    flex-shrink: 0;
}

.chat-msg-content { display: flex; flex-direction: column; }
.chat-msg-teacher .chat-msg-content { align-items: flex-end; }

.chat-bubble {
    padding: 10px 14px;
    border-radius: 12px;
    font-size: 13px;
    line-height: 1.5;
    word-break: break-word;
}

.chat-msg-student .chat-bubble {
    background: var(--card-bg);
    border-radius: 0 12px 12px 12px;
    box-shadow: var(--card-shadow);
}

.chat-msg-teacher .chat-bubble {
    background: var(--primary);
    color: var(--card-bg);
    border-radius: 12px 0 12px 12px;
}

.chat-msg-time {
    font-size: 10px;
    color: var(--text-muted);
    margin-top: 2px;
}

.chat-msg-time--right { text-align: right; }

/* 강의예약서 카드 */
.chat-booking-card {
    align-self: center;
    width: 85%;
    margin: 4px 0;
}

.booking-card-inner {
    background: var(--card-bg);
    border: 2px solid var(--primary);
    border-radius: 12px;
    overflow: hidden;
}

.booking-card-header {
    background: var(--primary);
    color: var(--card-bg);
    padding: 8px 14px;
    font-size: 12px;
    font-weight: 600;
}

.booking-card-body { padding: 12px 14px; }

.booking-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 6px;
    font-size: 12px;
}

.booking-row span:first-child { color: var(--text-secondary); }
.booking-row span:last-child { font-weight: 600; }

.booking-price { color: var(--primary) !important; font-size: 14px !important; }

.booking-status {
    text-align: center;
    padding-top: 8px;
    border-top: 1px solid var(--border-color);
    margin-top: 4px;
    font-size: 11px;
}

/* 입력 영역 */
.chat-input {
    padding: 12px 16px;
    border-top: 1px solid var(--border-color);
    display: flex;
    gap: 8px;
    align-items: center;
}

.chat-input-field {
    flex: 1;
    border-radius: 20px !important;
    padding: 8px 16px !important;
    font-size: 13px !important;
}

.chat-send-btn {
    width: 40px;
    height: 40px;
    border-radius: 50% !important;
    padding: 0 !important;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

/* --- [수강생 관리] mngteach\teachUserListStyle.css --- */

/* 누적 결제 금액 강조 */
.user-revenue { color: var(--primary); font-weight: 600; }

/* 이력 모달 (기본 480px보다 넓은 테이블 표시용) */
.history-modal-container { max-width: 700px; }

/* 이력 모달 수강생 연락처 정보 */
.user-history-tel { font-size: 13px; color: var(--text-secondary); margin-bottom: 12px; }

/* --- [레슨 강사 관리] adminLesson\lessonListStyle.css --- */
.lesson-filter-select { min-width: 120px; }

/* 상태 통계 칩 */
.lesson-status-chips { display: flex; gap: 8px; align-items: center; }
.lesson-stat-chip { padding: 4px 12px; border-radius: 20px; font-size: 13px; font-weight: 500; }
.chip-pending  { background: var(--badge-notice-bg);  color: var(--badge-notice-text); }
.chip-approved { background: var(--primary-light);    color: var(--primary); }
.chip-rejected { background: #fee2e2;                  color: var(--danger); }

/* 강사 상세 모달 */
.lesson-detail-section { margin-bottom: 20px; }
.lesson-detail-section h6 { font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border-color); }
.lesson-detail-grid { display: grid; grid-template-columns: 110px 1fr; gap: 8px 12px; font-size: 14px; }
.detail-label { color: var(--text-secondary); font-weight: 500; }
.detail-value { color: var(--text-primary); }
.lesson-desc-box { background: var(--content-bg); border-radius: 6px; padding: 10px 12px; font-size: 13px; color: var(--text-secondary); margin-top: 8px; }
.lesson-desc-box p { margin: 0; }
.lesson-refund-box p { white-space: pre-line; margin-top: 4px; }
.lesson-reject-reason-box { background: #fee2e2; border-radius: 6px; padding: 10px 14px; font-size: 13px; color: var(--danger); margin-top: 8px; }
.lesson-detail-imgs { display: flex; gap: 8px; flex-wrap: wrap; }
.lesson-detail-imgs img { width: 96px; height: 72px; object-fit: cover; border-radius: 6px; border: 1px solid var(--border-color); }
.lesson-badge-row { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; }
.lesson-badge-row .admin-form-select { width: auto; min-width: 160px; }
.lesson-product-table td { font-size: 13px; }

/* 넓은 모달 (전역 — lessonList 상세 등) */
.modal-lg { max-width: 640px; }

/* 리뷰 분포 막대 (동적 너비: CSS 변수 방식으로 인라인 스타일 제거) */
.dist-fill { height: 100%; background: var(--primary); border-radius: 2px; width: var(--dist-pct, 0%); }

/* --- [레슨 등록 신청] mngteach\teachRegisterStyle.css --- */
.register-status-card {
    text-align: center;
    padding: 48px 24px;
}

.register-status-card i {
    font-size: 48px;
    margin-bottom: 16px;
    display: block;
}

.register-status-card h3 {
    font-size: 18px;
    font-weight: 700;
    margin-bottom: 8px;
}

.register-status-card p {
    color: var(--text-secondary);
    font-size: 14px;
    margin-bottom: 6px;
}

.register-status-approved i { color: var(--success); }
.register-status-pending  i { color: var(--warning); }
.register-status-rejected i { color: var(--danger); }

.register-status-approved { border-top: 3px solid var(--success); }
.register-status-pending  { border-top: 3px solid var(--warning); }
.register-status-rejected { border-top: 3px solid var(--danger); }

.register-submitted-title {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 12px;
    color: var(--text-secondary);
}

.register-section-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--text-secondary);
    padding: 4px 0 10px;
    border-bottom: 1px solid var(--border-color);
    margin: 20px 0 16px;
}

.register-section-title:first-child { margin-top: 0; }

.register-optional-label { font-size: 12px; font-weight: 400; }

/* 신청 정보 표의 환불정책 — 강사가 쓴 줄바꿈을 그대로 보여준다 (2026-09-04) */
.register-refund-cell { white-space: pre-line; }

.cert-file-uploaded {
    display: flex;
    align-items: center;
    gap: 8px;
    color: var(--success);
    font-size: 13px;
    font-weight: 500;
    padding: 12px;
}

/* --- [강사 채팅 예약카드 상태 뱃지] mngteach\teachChatStatusBadge --- */
.booking-status               { font-size: 12px; font-weight: 600; margin-top: 6px; }
.booking-status.is-pending    { color: var(--warning); }
.booking-status.is-confirmed  { color: var(--success); }
.booking-status.is-cancelled  { color: var(--danger); }
.booking-status.is-reschedule { color: var(--warning); }

.booking-memo {
    margin-top: 4px;
    padding: 6px 8px;
    background: var(--bg-muted);
    border-radius: 6px;
    font-size: 12px;
    color: var(--text-secondary);
}

/* --- [메인 팝업] mngpopup\mngpopupStyle.css --- */
.popup-list-container .admin-table .col-id      { width: 60px; }
.popup-list-container .admin-table .col-thumb   { width: 80px; }
.popup-list-container .admin-table .col-sort    { width: 120px; }
.popup-list-container .admin-table .col-period  { width: 180px; }
.popup-list-container .admin-table .col-status  { width: 90px; }
.popup-list-container .admin-table .col-date    { width: 120px; }
.popup-list-container .admin-table .col-actions { width: 150px; }

.popup-list-container .btn-toggle-use {
    cursor: pointer;
}

.popup-list-container .popup-thumb {
    width: 60px;
    height: 45px;
    object-fit: cover;
    border-radius: 6px;
    border: 1px solid var(--border-color);
}

.popup-list-container .popup-icon-preview {
    font-size: 28px;
    line-height: 1;
}

.popup-list-container .popup-title-cell {
    font-weight: 600;
    color: var(--text-primary);
}

.popup-edit-container .popup-form-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}

.popup-edit-container .admin-form-help {
    display: block;
    margin-top: 4px;
    font-size: 12px;
    color: var(--text-muted);
}

.popup-edit-container .popup-image-row {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    flex-wrap: wrap;
}

.popup-edit-container .popup-image-preview {
    width: 160px;
    height: 120px;
    border: 1px dashed var(--border-color);
    border-radius: 8px;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--content-bg);
}

.popup-edit-container .popup-image-preview img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.popup-edit-container .icon-selector {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 4px;
}

.popup-edit-container .icon-option {
    width: 44px;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--border-color);
    border-radius: 8px;
    cursor: pointer;
    font-size: 18px;
    color: var(--text-muted);
    transition: all 0.2s ease;
    background: var(--card-bg);
}

.popup-edit-container .icon-option:hover {
    border-color: var(--primary);
    color: var(--primary);
}

.popup-edit-container .icon-option.active {
    border-color: var(--primary);
    background: var(--primary);
    color: var(--card-bg);
}

/* --- [커뮤니티 신고 처리] mngcommunity\reportListStyle.css --- */
.cmreport-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
}

/* 목록 — 내용 미리보기는 한 줄로 자른다 (제목·본문 길이가 제각각이라 행 높이가 튄다) */
.cmreport-preview {
    max-width: 360px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.cmreport-gone {
    color: var(--text-muted);
    font-style: italic;
}

.cmreport-target {
    padding-bottom: 16px;
    margin-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
}

.cmreport-target-gone {
    color: var(--text-muted);
    font-size: 13px;
}

.cmreport-target-gone i {
    color: var(--warning);
    margin-right: 6px;
}

.cmreport-target-head {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 12px;
}

.cmreport-target-date {
    margin-left: auto;
    font-size: 12px;
    color: var(--text-muted);
}

.cmreport-target-title {
    font-size: 18px;
    font-weight: 600;
    margin-bottom: 12px;
}

.cmreport-target-meta {
    display: flex;
    align-items: center;
    gap: 20px;
    font-size: 13px;
    color: var(--text-secondary);
    margin-bottom: 16px;
    flex-wrap: wrap;
}

/* 신고 대상 원문은 사용자 입력이라 개행을 살린다 (escape 는 JS 에서) */
.cmreport-target-content {
    font-size: 14px;
    line-height: 1.7;
    color: var(--text-primary);
    white-space: pre-wrap;
    max-height: 240px;
    overflow-y: auto;
}

/* 신고 내역 */
.cmreport-list-title {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 12px;
    color: var(--text-primary);
}

.cmreport-list-title i {
    color: var(--danger);
    margin-right: 6px;
}

.cmreport-item {
    background: var(--bg-muted);
    border-radius: 8px;
    padding: 14px;
    margin-bottom: 10px;
}

.cmreport-item-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
    font-size: 13px;
}

.cmreport-item-date {
    margin-left: auto;
    font-size: 12px;
    color: var(--text-muted);
}

.cmreport-item-reason {
    font-size: 14px;
    line-height: 1.6;
    color: var(--text-primary);
    white-space: pre-wrap;
}

.cmreport-noreason,
.cmreport-empty {
    color: var(--text-muted);
    font-style: italic;
    font-size: 13px;
}

/* --- [커뮤니티 게시글 관리] mngcommunity\postListStyle.css --- */
/* 게시글 상세는 표가 넓어 공용 640 보다 크다 — width 만 덮는다 */
.cmpost-detail-modal {
    width: 680px;
}

.cmpost-container .empty-state-msg {
    padding: 40px 0;
    color: var(--text-muted);
}

/* 제목이 길어도 행 높이가 튀지 않게 한 줄로 자른다 */
.cmpost-title {
    max-width: 320px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 상세 모달 */
.cmpost-detail-modal {
    width: 680px;
    max-height: 85vh;
    overflow-y: auto;
}

.cmpost-detail-head {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 12px;
}

.cmpost-detail-date {
    margin-left: auto;
    font-size: 12px;
    color: var(--text-muted);
}

.cmpost-detail-meta {
    display: flex;
    align-items: center;
    gap: 20px;
    font-size: 13px;
    color: var(--text-secondary);
    margin-bottom: 16px;
    padding-bottom: 16px;
    border-bottom: 1px solid var(--border-color);
    flex-wrap: wrap;
}

/* 본문은 사용자 입력이라 개행을 살린다 (escape 는 JS 에서) */
.cmpost-detail-content {
    font-size: 14px;
    line-height: 1.7;
    color: var(--text-primary);
    white-space: pre-wrap;
    max-height: 260px;
    overflow-y: auto;
}

/* 첨부 — 부적절한 이미지 판단이 필요해 썸네일을 깔고 원본은 새 창으로 연다 */
.cmpost-files {
    margin-top: 20px;
    padding-top: 16px;
    border-top: 1px solid var(--border-color);
}

.cmpost-files-title {
    font-size: 14px;
    font-weight: 600;
    margin-bottom: 12px;
    color: var(--text-primary);
}

.cmpost-files-title i {
    color: var(--primary);
    margin-right: 6px;
}

.cmpost-file-grid {
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
}

.cmpost-file {
    width: 96px;
    height: 96px;
    border-radius: 8px;
    overflow: hidden;
    background: var(--bg-muted);
    display: flex;
    align-items: center;
    justify-content: center;
}

.cmpost-file img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.cmpost-file-doc {
    font-size: 12px;
    color: var(--text-muted);
    text-align: center;
}

/* --- [대회·이벤트 관리] mngevent\mngeventStyle.css --- */
/* 툴바에 필터가 3개라 폭을 고정해야 검색 입력이 밀려나지 않는다 */
.mngevent-filter-select {
    width: 140px;
}

/* 제목이 길어도 행 높이가 튀지 않게 한 줄로 자른다 (게시글 관리와 같은 처리) */
.mngevent-title {
    max-width: 320px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 유형·지역, 시작일·종료일처럼 짝으로 읽는 입력은 한 줄에 둔다 */
.mngevent-form-row {
    display: flex;
    gap: 16px;
}

.mngevent-form-row > .admin-form-group {
    flex: 1;
}

.mngevent-help-text {
    display: block;
    margin-top: 4px;
    font-size: 12px;
    color: var(--text-muted);
}

/* 썸네일 — 앱 목록 카드가 8:5 로 자르므로 미리보기도 같은 비율로 본다 */
.mngevent-thumb-box {
    display: flex;
    align-items: flex-start;
    gap: 16px;
}

.mngevent-thumb-preview {
    width: 240px;
    height: 150px;
    border: 1px dashed var(--border-color);
    border-radius: 8px;
    background: var(--content-bg);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.mngevent-thumb-preview img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.mngevent-thumb-placeholder {
    text-align: center;
    color: var(--text-muted);
    font-size: 12px;
    padding: 0 12px;
}

.mngevent-thumb-placeholder i {
    display: block;
    margin-bottom: 8px;
    font-size: 24px;
}

.mngevent-thumb-actions {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

/* --- [타임딜 관리] mngscreen\screenTimedealStyle.css --- */
/* 목록·모달·배지는 전부 공통 클래스(admin-table/admin-form/admin-badge)를 쓴다 —
   여기는 툴바와 임박 자동 할인 카드뿐 */
.timedeal-toolbar {
    display: flex;
    justify-content: flex-end;
    margin-bottom: 16px;
}

.timedeal-auto-card {
    margin-bottom: 16px;
}

.timedeal-auto-controls {
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
}

.timedeal-auto-controls .admin-form-group {
    margin-bottom: 0;
    min-width: 160px;
}

.timedeal-auto-desc {
    margin: 8px 0 0;
    font-size: 12px;
    color: var(--text-muted);
}

/* --- [앱마스터 전역 예약·리뷰 조회 + 대시보드 카드 링크] --- */
/* clickable-row 는 화면별로 스코프해 정의하는 컨벤션을 따른다(정본: .screen-list-container .clickable-row). */
.dashboard-container .clickable-row,
.admin-reserve-container .clickable-row,
.admin-review-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}
.dashboard-container .clickable-row:hover,
.admin-reserve-container .clickable-row:hover,
.admin-review-container .clickable-row:hover {
    background: var(--bg-muted);
}

/* 대시보드 최근 리뷰 카드 클릭 */
.dashboard-container .clickable-review {
    cursor: pointer;
    transition: background 0.15s;
}
.dashboard-container .clickable-review:hover {
    background: var(--bg-muted);
}

/* 조회 전용 상세 모달 본문 (예약/리뷰 공용) */
.admin-detail-head {
    display: flex;
    gap: 8px;
    align-items: center;
    margin-bottom: 14px;
}
.admin-detail-row {
    display: flex;
    gap: 12px;
    padding: 9px 0;
    border-bottom: 1px solid var(--border-color);
    font-size: 14px;
}
.admin-detail-label {
    flex: 0 0 96px;
    color: var(--text-secondary);
    font-weight: 600;
}
.admin-detail-value {
    flex: 1;
    color: var(--text-primary);
    word-break: break-word;
}
.admin-detail-content {
    margin-top: 14px;
    padding: 14px;
    background: var(--bg-muted);
    border-radius: 8px;
    font-size: 14px;
    line-height: 1.6;
    color: var(--text-primary);
    white-space: pre-wrap;
    word-break: break-word;
}

/* 리뷰 상세 전용 */
.admin-review-stars .star-filled { color: var(--warning); }
.admin-review-stars .star-empty { color: var(--text-muted); }
.admin-review-images {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 12px;
}
.admin-review-image {
    width: 96px;
    height: 96px;
    object-fit: cover;
    border-radius: 8px;
    border: 1px solid var(--border-color);
}
.admin-review-reply {
    margin-top: 14px;
    padding: 12px 14px;
    background: var(--bg-muted);
    border-radius: 8px;
    border-left: 3px solid var(--primary);
}
.admin-review-reply strong {
    color: var(--text-primary);
    font-size: 13px;
}
.admin-review-reply p {
    margin: 6px 0 0;
    font-size: 14px;
    color: var(--text-primary);
    white-space: pre-wrap;
    word-break: break-word;
}
.admin-review-reply-date {
    display: block;
    margin-top: 6px;
    font-size: 12px;
    color: var(--text-muted);
}
.admin-review-noreply {
    margin-top: 14px;
    font-size: 13px;
    color: var(--text-muted);
}

/* --- [업체 대시보드 홈 카드 클릭 이동] 스크린·라운딩(.screen-dashboard-container)·레슨(.teach-dashboard-container) --- */
.screen-dashboard-container .clickable-row,
.teach-dashboard-container .clickable-row {
    cursor: pointer;
    transition: background 0.15s;
}
.screen-dashboard-container .clickable-row:hover,
.teach-dashboard-container .clickable-row:hover {
    background: var(--bg-muted);
}
.screen-dashboard-container .clickable-item,
.teach-dashboard-container .clickable-item {
    cursor: pointer;
    transition: background 0.15s, box-shadow 0.15s;
}
.screen-dashboard-container .clickable-item:hover,
.teach-dashboard-container .clickable-item:hover {
    background: var(--bg-muted);
}
