/* DHTMLX Grid 커스텀 스타일 (공통) */


/* ----- 캘린더 커스텀 ----- */
.dhx_calendar-week-number, .dhx_calendar-weekday {}
.dhx_calendar__wrapper .dhx_calendar__weekdays .dhx_calendar-weekday:first-child {color:#369fd5 !important;}
.dhx_calendar__wrapper .dhx_calendar__weekdays .dhx_calendar-weekday:last-child {color:#369fd5 !important;}

/* ----- Grid 사이즈 ----- */
.admin-grid {position:relative;width:100%;}
.admin-grid::before {content:'';display:block;position:absolute;top:0;left:0;z-index:30;width:100%;height:1px;background:#9e9e9e;font-size:0;line-height:0;}

/* ----- Grid 툴팁 숨김 ----- */
.dhx_tooltip {display:none !important;}


/* ----- Grid 폰트 크기 13px, 색상 #121212 (어드민 기준) ----- */
.admin-grid .dhx_grid {font-size:13px;color:#121212;}
.admin-grid .dhx_grid-header-cell {font-size:13px;color:#121212;min-width:40px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}
.admin-grid .dhx_grid-cell {font-size:13px;color:#121212;min-width:40px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}


/* ----- Grid border 보조 ----- */
.admin-grid .dhx_grid::after {content:'';display:block;position:absolute;bottom:0px;left:0;width:100%;height:1px;background:#dfdfdf;}


/* ----- 고정 컬럼 보더 중복 제거 ----- */
/* 고정 컬럼 보더 라인 제거 (중복 방지) */
.admin-grid .dhx_grid__cols-border--frozen {display:none;}

/* 고정 컬럼 헤더 마지막 셀 오른쪽 보더 제거 (중복 방지) */
.admin-grid .dhx_header-fixed-cols.dhx_grid__cols_left--fixed .dhx_last-column-cell {border-right:none;}

/* 고정 컬럼 데이터 마지막 셀 오른쪽 보더 제거 (중복 방지) */
.admin-grid .dhx_grid-fixed-cols.dhx_grid__cols_left--fixed .dhx_last-column-cell {border-right:none;}


/* ----- 행 선택/hover 오버레이 숨김 (JavaScript로 직접 처리) ----- */
.admin-grid .dhx_grid-selected-row {display:none !important;}


/* ----- 행 선택 시 왼쪽 파란 띠 제거 ----- */
.admin-grid .dhx_grid-cell::before {display:none !important;}
.admin-grid .dhx_grid-row--selected .dhx_grid-cell::before {display:none !important;}


/* ----- Grid 체크박스 커스텀 스타일 (SVG 배경) ----- */
.admin-grid .grid-checkbox,
.admin-grid .grid-header-checkbox {-webkit-appearance:none;appearance:none;width:15px !important;height:15px !important;border:none !important;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18' fill='none'%3E%3Cpath d='M16 2V16H2V2H16ZM16 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H16C17.1 18 18 17.1 18 16V2C18 0.9 17.1 0 16 0Z' fill='black' fill-opacity='0.56'/%3E%3C/svg%3E") no-repeat center center / 15px 15px;cursor:pointer !important;}

/* 체크박스 체크 시 SVG 배경 변경 */
.admin-grid .grid-checkbox:checked,
.admin-grid .grid-header-checkbox:checked {background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18' fill='none'%3E%3Cpath d='M16 0H2C0.89 0 0 0.9 0 2V16C0 17.1 0.89 18 2 18H16C17.11 18 18 17.1 18 16V2C18 0.9 17.11 0 16 0ZM7 14L2 9L3.41 7.59L7 11.17L14.59 3.58L16 5L7 14Z' fill='%230C27C1'/%3E%3C/svg%3E") no-repeat center center / 15px 15px;}

/* 헤더 체크박스 indeterminate 상태 (일부 선택) */
.admin-grid .grid-header-checkbox:indeterminate {background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18' fill='none'%3E%3Cpath d='M16 0H2C0.89 0 0 0.9 0 2V16C0 17.1 0.89 18 2 18H16C17.11 18 18 17.1 18 16V2C18 0.9 17.11 0 16 0Z' fill='%230C27C1'/%3E%3Crect x='4' y='8' width='10' height='2' fill='white'/%3E%3C/svg%3E") no-repeat center center / 15px 15px;}


/* ----- Grid 셀 리스트 ----- */
.admin-grid .dhx_data-wrap {margin-top:-1px;}
.admin-grid .dhx_grid_data {top:0;}


/* ----- Grid Body 최대 높이 제한 (20행 = 553px) ----- */
.admin-grid .dhx_grid-body {max-height:553px;}

/* ----- 표 내부 가로 스크롤 금지 (전 화면 공통 규약) -----
 * 컬럼은 40px 하한이 있어(adjustGridColumnsWidth) 아주 좁은 창에서는 컬럼 합이 컨테이너를
 * 넘을 수밖에 없다. 그때 DHTMLX 가 자체 가로 스크롤바를 만드는데, 가로 스크롤바는 다시 세로
 * 스크롤을 유발하고 헤더/본문 정렬을 흔든다. 규약은 "내용이 잘려도 표 내부 스크롤 금지" 이므로
 * 본문에서 잘라낸다.
 * ⚠ DHTMLX 가 overflow-x 를 인라인 스타일로 쓰므로 !important 가 필요하다(실측 확인).
 * 세로(height:auto / max-height:none)는 화면별 판단이라 여기서 건드리지 않는다 — 행이 많을 때
 * 페이지를 스크롤시킬지 표를 펼칠지는 화면마다 다르다. */
.admin-grid .dhx_grid-body {overflow-x:hidden !important;}


/* ----- Inline Calendar 스타일 ----- */
.date-input {position:relative;}
.date-input .dhx_calendar {box-shadow:0 2px 8px rgba(0,0,0,0.15);background:#fff;border:1px solid #dfdfdf;border-radius:4px;}


/* ----- Grid 빈 데이터 메시지 스타일 ----- */
.grid-empty {position:relative;overflow:hidden;}
/* ----- 조회 결과 0건 안내 (setGridEmptyMessage 가 토글) -----
   그리드 헤더는 남기고 본문 영역에만 오버레이한다. top 은 실제 헤더 높이로 JS 가 지정.
   has-grid-empty 는 문구가 떠 있을 때만 붙으므로 다른 화면의 .admin-grid 레이아웃에 영향이 없다. */
.admin-grid.has-grid-empty {position:relative;min-height:59px;}
.grid-empty-message {position:absolute;left:0;right:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;background:#fff;border:1px solid #dfdfdf;border-top:0;color:#888;font-size:13px;}
.grid-empty-message[hidden] {display:none;}

/* ----- 조회 진행 오버레이 (setGridLoading 이 토글) -----
   그리드 영역 전체를 반투명하게 덮고 중앙에 스피너 + 문구. 빈 그리드는 높이가 1행 이하라
   has-grid-loading 으로 박스가 들어갈 최소 높이를 확보한다. */
.admin-grid.has-grid-loading {position:relative;min-height:120px;}
.grid-loading-overlay {position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,0.6);}
.grid-loading-overlay[hidden] {display:none;}
.grid-loading-box {display:flex;align-items:center;gap:10px;padding:12px 20px;background:#fff;border:1px solid #d0d4dc;border-radius:6px;box-shadow:0 2px 8px rgba(0,0,0,0.12);font-size:14px;color:#333;}
.grid-spinner {width:18px;height:18px;border:3px solid #d6dbe4;border-top-color:#4f6b96;border-radius:50%;animation:grid-spin 0.8s linear infinite;}
@keyframes grid-spin {to {transform:rotate(360deg);}}
/* 모션 최소화 설정을 존중 — 회전을 멈추고 정적 링으로 남긴다(진행 중 표시는 유지). */
@media (prefers-reduced-motion: reduce) { .grid-spinner {animation:none;} }


/* ----- 교환권등록: 상·하 그리드 사이 ▼ 이동 버튼 (가운데, 너비 2배) ----- */
.ticket-exchange-register-grid-transfer-wrap {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  margin-top: 8px;
  margin-bottom: 2px;
}
.ticket-exchange-register-grid-transfer-wrap .btn.ticket-exchange-register-하단으로이동,
.ticket-exchange-register-grid-transfer-wrap .btn.ticket-exchange-register-cancel-하단으로이동 {
  min-width: 180px;
  width: 180px;
}

