/*
 * components.css — 공통 컴포넌트/접근성 토대 (비파괴적 추가 레이어)
 *
 * 목적: 기존 common/style/dashboard.css 의 정상 상태 외형은 그대로 두고,
 *       상태(disabled/loading)·접근성(focus-visible/reduced-motion)만 일관화한다.
 *       모든 base 템플릿(공개·운영)에서 마지막에 로드한다.
 */

/* 1) 비활성 버튼 — 어느 스타일 체계(Tailwind/Bootstrap/커스텀)든 일관 처리 */
button:disabled,
button[aria-disabled="true"],
.btn:disabled,
.btn.disabled,
[role="button"][aria-disabled="true"] {
    opacity: 0.55;
    cursor: not-allowed;
    pointer-events: none;
}

/* 2) 처리 중(로딩) 상태 — JS 에서 .is-loading 토글로 사용 */
.is-loading {
    position: relative;
    color: transparent !important;
    pointer-events: none;
}
.is-loading::after {
    content: "";
    position: absolute;
    inset: 0;
    margin: auto;
    width: 1rem;
    height: 1rem;
    border: 2px solid currentColor;
    border-top-color: transparent;
    border-radius: 50%;
    color: #64748b; /* secondary */
    animation: jmk-spin 0.6s linear infinite;
}
@keyframes jmk-spin {
    to { transform: rotate(360deg); }
}

/* 3) 키보드 포커스 접근성 — 마우스 클릭에는 영향 없이 키보드 탐색만 강조 */
a:focus-visible,
button:focus-visible,
[role="button"]:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible {
    outline: 2px solid #2563eb; /* primary */
    outline-offset: 2px;
    border-radius: 4px;
}

/* 4) 시각 스크린리더 전용 텍스트 (아이콘 버튼 보조 라벨 용도) */
.sr-only {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* 5) 모션 민감 사용자 배려 — 애니메이션/전환 최소화 */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        scroll-behavior: auto !important;
    }
}

/* Board search input - ensure icon (in absolute sibling) never overlaps placeholder text */
.board-search-input {
    padding-left: 3.5rem !important; /* 56px - generous space for fa-search icon */
}
