/* ===================================================================================================
    Base — reset·타이포 기초의 "차이분"만 담는다 (tokens.css 다음, layout.css 이전 로드)
    - 화면 종속 규칙 금지. 컴포넌트 규칙 금지.
    - BS reboot이 이미 하는 일(box-sizing, margin reset 등)은 중복 선언하지 않는다.
    - 현재는 시각 결과를 바꾸지 않는 선언만 담는다(D8: 기존 CSS 무삭제 병행 단계).
      BS 5.3 전환(PR0) 시 이 파일이 흡수할 항목:
      · adminlte.min.css(BS4 번들) 제거로 생기는 reset 공백
      · style.css prelude(1-111)의 base 성격 규칙 이관
      · 전역 a{color:#495057!important} → --bs-link-color 체계로 전환
=================================================================================================== */

/* ── PR0-A. BS4 → BS5.3 파리티 (reboot 차이로 인한 의도치 않은 시각 변화 방지) ─────────
   BS 5.3 reboot이 BS4와 다르게 잡는 기본값을 기존 렌더링 값으로 되돌린다. */

/* BS5는 링크에 기본 밑줄 — 기존(BS4) 동작 유지 */
a {
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}

/* BS5는 label 하단 마진 제거 — 기존(BS4 reboot .5rem) 유지 */
label {
    margin-bottom: 0.5rem;
}

/* BS5.3은 무변형 .btn의 active/disabled 상태도 변수로 칠하는데, base .btn에는
   active·disabled 계열 상태 변수가 정의돼 있지 않아 border-color가 currentColor(검정)로
   떨어진다(실서버 회귀: 목록 화면 보기전환 토글). BS 원본과 동일 셀렉터로 fallback만 추가 —
   변수를 정의하는 변형(.btn-…)은 var()가 그 값을 집으므로 영향 없다.
   [주의] 주석 안에 별표+슬래시가 들어가면 주석이 조기 종료돼 뒤 규칙이 드롭된다. */
.btn-check:checked + .btn,
.btn.active,
.btn.show,
.btn:first-child:active,
:not(.btn-check) + .btn:active {
    color: var(--bs-btn-active-color, var(--bs-btn-color));
    background-color: var(--bs-btn-active-bg, var(--bs-btn-bg));
    border-color: var(--bs-btn-active-border-color, var(--bs-btn-border-color));
}
.btn:disabled,
.btn.disabled,
fieldset:disabled .btn {
    color: var(--bs-btn-disabled-color, var(--bs-btn-color));
    background-color: var(--bs-btn-disabled-bg, var(--bs-btn-bg));
    border-color: var(--bs-btn-disabled-border-color, var(--bs-btn-border-color));
}

/* AdminLTE가 주던 규칙 복원(adminlte.min.css 원문 그대로) — 노트 에디터의 높이 체인이
   이 규칙에 의존한다: #main-body-right(fixed, 정해진 높이) > .content-wrapper(100%)
   > #webeditor-container(100%) > .workspace(flex:1, overflow-y:auto).
   없으면 content-wrapper가 콘텐츠 높이로 자라 에디터 본문 스크롤이 사라진다(실서버 회귀 확인). */
.content-wrapper {
    height: 100%;
}

/* body 폰트: tokens 의 --bs-body-font-family(Noto Sans) — 구 'Open Sans'(미로드 유령 폰트) 파리티 규칙은 2026-10-14 테마 개편에서 제거 */

/* (참고) .row 거터·.btn-xs·.btn-default는 심을 두지 않는다 — 구 체인에서도 이 규칙들은
   뒤에 로드되던 BS5.0의 .btn/.row>* 에 이미 덮여 무력화된 상태였음을 픽셀 diff로 확인
   (심을 넣으면 죽어 있던 스타일이 부활해 오히려 시각이 변한다). */

/* ── PR0-B. BS4/AdminLTE 호환 심 — BS5.3에 없는 클래스 중 main/note 셸 템플릿이 실사용하는 것.
   사용량 실측(2026-08): text-left 215 · btn-xs 56 · input-group-prepend 20 · form-group 12 ·
   float-right 12 · mr-2 5 · text-muted 3 · btn-default 3 · badge-info 2 · mr-4 2 · pr-2 2 ·
   text-right 6 · float-left 1 · ml-2 1.
   제외 범위(performance 등)도 main 셸에서 렌더되므로 템플릿 치환 대신 심으로 보전한다.
   PR3(유틸 해체)에서 템플릿을 BS5 문법으로 치환하며 축차 삭제한다. */

.text-left {
    text-align: left !important;
}
.text-right {
    text-align: right !important;
}
.float-left {
    float: left !important;
}
.float-right {
    float: right !important;
}
.text-muted {
    color: #6c757d !important; /* BS4 고정색 — BS5.3은 rgba 변수라 미세하게 다름 */
}
.ml-2 {
    margin-left: 0.5rem !important;
}
.mr-2 {
    margin-right: 0.5rem !important;
}
.mr-4 {
    margin-right: 1.5rem !important;
}
.pr-2 {
    padding-right: 0.5rem !important;
}
.form-group {
    margin-bottom: 1rem;
}
.input-group-prepend,
.input-group-append {
    display: flex;
}
.input-group-prepend {
    margin-right: -1px;
}
.input-group-append {
    margin-left: -1px;
}
.badge-info {
    color: #fff;
    background-color: #17a2b8;
}

/* 접근성: OS가 모션 최소화를 요청하면 장식성 전환을 무효화한다 (토큰 §8 Motion 대응) */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        transition-duration: 0.01ms !important;
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        scroll-behavior: auto !important;
    }
}

/* ── PR0-C. style.css prelude(3~70행) 전역 규칙 이관 — 재선언 묶음 ⑤ (2026-10-12), 삭제 후보 L65(패치 b5) ───────
   값은 동일, 단위 rem·토큰. 전역 a{color !important}(7~13행)는 여기로 옮기지 않는다 — 삭제 시 링크색이 tokens 의
   --bs-link-color(accent) 로 바뀌므로 사용자 결정 항목(V4). 원본의 !important 는 경쟁 선언이 없어 모두 제거:
   label 글꼴 굵기는 :not() 3개로 특이도(0,3,1)가 .btn/.form-label 보다 높고, select:disabled opacity 는 BS5 체인에 상대가 없다. */
html {
    background: var(--gn-color-bg-body);
}
input::placeholder,
textarea::placeholder {
    color: var(--gn-gray-500);
}
input:disabled,
select:disabled,
textarea[readonly] {
    pointer-events: none;
    border: var(--gn-border-hairline) solid var(--gn-gray-200);
    background: var(--gn-gray-200);
    color: var(--gn-gray-500);
}
select:disabled {
    opacity: 1;
}
input[readonly] {
    border: var(--gn-border-hairline) solid var(--gn-color-bg-subtle);
    background: var(--gn-color-bg-subtle);
}
ul,
ol,
li {
    margin: 0;
    padding: 0;
    list-style: none;
}
.ui-sortable-handle {
    touch-action: auto;                 /* jQuery UI sortable 이 런타임에 붙이는 클래스(grep 0건이지만 살아 있음) */
}
label:not(.form-check-label):not(.form-check-label2):not(.custom-file-label) {
    font-weight: var(--gn-font-weight-medium);
}
label.form-check-label2 {
    font-weight: var(--gn-font-weight-regular);
}


/* 검색 입력(type="search") — 화면마다 다르던 브라우저 기본 모양(둥근 칸 · 회색 ×)을 걷고, 지우기(×)만 토큰 색의 작은 원으로 통일한다.
   지운 뒤 목록을 다시 부르는 화면은 'search' 이벤트를 받는다. 자체 지우기 버튼이 있는 .gn-search 는 gn-controls.css 에서 숨긴다. */
input[type='search'] {
    -webkit-appearance: none;
    appearance: none;
}
input[type='search']::-webkit-search-decoration { -webkit-appearance: none; }
input[type='search']::-webkit-search-cancel-button {
    -webkit-appearance: none;
    width: 1rem;
    height: 1rem;
    margin-left: var(--gn-space-2);
    background-color: var(--gn-gray-400);
    /* bootstrap-icons x-circle-fill 글리프를 가면으로 — 색은 위 배경색(토큰)이 칠한다 */
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293z'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293z'/%3E%3C/svg%3E") center / contain no-repeat;
    cursor: pointer;
}
input[type='search']::-webkit-search-cancel-button:hover { background-color: var(--gn-gray-600); }
