/* 전역 보조 스타일 — 색상은 넣지 않는다 (색상은 themes.css의 토큰만) */

[x-cloak] {
  display: none !important;
}

/* daisyUI CDN 번들 보정: .input/.select의 기본 크기 규칙이 같은 레이어에서
   -xs/-sm 모디파이어보다 뒤에 선언되어 있어 크기 클래스가 무시된다.
   레이어 밖(unlayered) 규칙은 레이어 규칙보다 항상 우선하므로 여기서 다시 선언한다. */
.input-xs { --in-size-mul: 6; --font-size-min: 0.6875rem; }
.input-sm { --in-size-mul: 8; --font-size-min: 0.75rem; }
.select-xs { --sl-size-mul: 6; --font-size-min: 0.6875rem; }
.select-sm { --sl-size-mul: 8; --font-size-min: 0.75rem; }

/* 테이블 헤더: 연한 배경 + 상단 보더로 본문 행과 구분 (테마 토큰이라 다크 모드 자동 대응) */
.table thead tr {
  background-color: color-mix(in oklab, var(--color-base-content) 5%, var(--color-base-100));
}
.table thead th {
  border-top: 1px solid var(--color-base-300);
  padding-block: 0.5rem;
  font-size: 0.75rem;
}

/* 카드 안 테이블: 카드 가장자리까지 확장(full-bleed) */
.card-body .table-flush {
  margin-inline: calc(var(--card-p, 1.5rem) * -1);
}
.card-body .table-flush .table :where(th, td):first-child {
  padding-inline-start: var(--card-p, 1.5rem);
}
.card-body .table-flush .table :where(th, td):last-child {
  padding-inline-end: var(--card-p, 1.5rem);
}

/* 아이콘 자리(1em)를 항상 확보 — 레이아웃 밀림 방지.
   :not(:defined) 만으로는 부족하다: 컴포넌트 정의 후에도 SVG 는 비동기로 그려져서
   그 사이 폭이 0 이 되어 옆 글자가 먼저 붙었다가 밀려난다. 프로젝트의 아이콘은 전부
   1em(폰트 크기 연동)이라 고정 예약이 최종 크기와 일치한다. */
iconify-icon {
  display: inline-block;
  width: 1em;
  height: 1em;
}

/* 첫 렌더 동안 전환 효과 잠금 — 새로고침 시 사이드바가 슬라이드로 열리는 것 방지.
   초기 렌더가 끝나면 app.js가 preload 클래스를 제거해 이후 애니메이션은 정상 동작 */
html.preload *,
html.preload *::before,
html.preload *::after {
  transition: none !important;
}

/* 사이드바 메뉴: 선택/호버 시 애니메이션 없이 즉시 반영 */
.drawer-side .menu li > *,
.drawer-side .menu li > *:active,
.drawer-side .menu li > *:hover {
  transition: none !important;
  animation: none !important;
}
.drawer-side .menu li > *:active {
  transform: none !important;
  scale: none !important;
  translate: none !important;
}

/* 사이드바 활성 메뉴: 은은한 primary 톤 */
.drawer-side .menu {
  --menu-active-bg: color-mix(in oklab, var(--color-primary) 12%, transparent);
  --menu-active-fg: var(--color-primary);
}
.drawer-side .menu .menu-active {
  font-weight: 600;
}
.drawer-side .menu li > *:active:not(.menu-active) {
  background-color: transparent !important;
  color: inherit !important;
}

/* 라우트 전환 로딩 인디케이터 */
.route-progress {
  position: fixed;
  inset: 0 0 auto 0;
  height: 3px;
  z-index: 100;
  overflow: hidden;
  pointer-events: none;
}
.route-progress::after {
  content: "";
  display: block;
  height: 100%;
  width: 40%;
  background: var(--color-primary);
  animation: route-progress 1s ease-in-out infinite;
}
@keyframes route-progress {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(350%); }
}

/* 키보드 사용자용 스킵 링크 */
.skip-link {
  position: fixed;
  top: -100px;
  left: 8px;
  z-index: 200;
  padding: 0.5rem 1rem;
  border-radius: var(--radius-field);
  background: var(--color-primary);
  color: var(--color-primary-content);
}
.skip-link:focus {
  top: 8px;
}
