/**
 * z-layers.css — z-index 층서 **단일 정본**
 *
 * ## 5대역 (2026-09-05 재설계)
 *
 *   L0  지역        0 –   99   스택 컨텍스트 내부 상대 순서.           토큰 아님
 *   L1  크롬     1000 – 1199   상주 고정 요소(nav·바·드로어).         토큰 — 관계가 화면 구조다
 *   L2  모드     1200 – 1999   배타적 화면 모드(같이풀기 A/B/C).      토큰
 *   L3  오버레이 2000 – 8999   열고 닫는 것(모달·확인창·크롭·시트).   🔴 런타임 전용 — 정적 값 금지
 *   L4  알림    10000 – 10099  토스트 · 시스템 바.                    토큰 — 항상 L3 위
 *        9000 – 9999 완충(사용 금지)  ·  ≥ 10100 금지
 *
 * 🔴 **왜 오버레이는 토큰이 아닌가** — 오버레이의 올바른 순서는 **열린 순서**(런타임 정보)라
 *    정적 숫자로 표현할 수 없다. 실측(2026-09-04): 확인창 `#pbConfirmBackdrop` 은 DOM 싱글턴 1개를
 *    8곳이 공유하는데, 카드 삭제로 열릴 땐 아무것도 없는 위에, 총평 모달 안에서 열릴 땐 두 층 위에
 *    떠야 했다. 선언 시점에 정할 수 있는 숫자가 없어서 총평 모달(1070) 뒤에 깔렸다(조작 불가).
 *    → L3 는 `common.js` 의 `layerStack` 이 열린 순서대로 슬롯을 준다. CSS 는 `var(--z-layer, 5000)`.
 *    L3 의 BASE·STEP·CAP 수치는 **`common.js` layerStack 이 정본**이다(여기 복사하지 말 것).
 *
 * 🔴 **상한을 닫는다.** 값이 20000·99999 까지 올라갔던 이유는 상한이 없어 "더 큰 수"가 항상
 *    이겼기 때문이다. 상한이 있으면 그 전략이 불가능하다. 가드 `ZIndexLayerCanonGuardTest`.
 *
 * 🔴 값을 흩어 놓지 말 것. 종전에는 CSS 5값 / fragment 인라인 6값 / JS 문자열 3값이
 *    규칙 없이 섞여, 같은 역할의 공지 패널이 1050(student)과 9999(auth)로 갈리고
 *    global-player(9999)와 auth 패널(9999)이 **동률이라 DOM 순서로 승부가 갈렸다**.
 *    2026-09-04: 카트 바 1040 리터럴이 하단 탭바(1040)와 동률 → 폰 메뉴 전면 차단.
 *
 * 🔴 **배포 경로는 `fragments/head-icons.html` 의 `<link>` 한 줄이다** (2026-09-05).
 *    그 fragment 가 전 페이지가 싣는 유일한 head 진입점이라, auth(랜딩·로그인)·admin/profile 처럼
 *    `student-nav.css`/`admin-common.css` 를 안 싣는 화면에도 토큰이 닿는다.
 *    종전엔 두 CSS 의 `@import` 로만 들어가 **auth 군 전체에 정의가 없었다**(2026-08-15 에
 *    "admin 에 토큰이 없어 토큰화를 포기했다"던 상황이 auth 에 그대로 남아 있었다).
 *    🔴 이 파일을 `@import` 하지 말 것 — 진입 경로가 둘이 되면 갈린다.
 *
 * ⚠️ Bootstrap 자체 층(참고, 이 파일이 정의하지 않는다):
 *      dropdown 1000 / sticky 1020 / fixed 1030 / modal-backdrop 1050 / modal 1055 / popover 1070 / tooltip 1080
 *    우리 L3(≥2000)는 이 전부의 위다. L1 은 의도적으로 Bootstrap 과 섞인다(실측 결함 0 — 재배치 안 함).
 */
:root {
    /* ── L1 크롬 ── */
    --z-nav-subnav: 1035;    /* admin 서브 네비 띠 — 종전 1020 리터럴(Bootstrap sticky 와 동률) [2026-09-05] */
    --z-nav-side: 1040;      /* 사이드바 · 폰 하단 탭바(대역이 배타라 같은 토큰) */
    --z-cart-bar: 1042;      /* 보관함 선택 바(pb-select-bar) — 하단 탭바(1040) 위·탐색기 드로어(1045) 아래 [2026-09-04]
                                🔴 종전 1040 리터럴이라 하단 탭바와 **동률**이었고, DOM 뒤에 있어 탭바를 이겼다.
                                   숨김이 opacity 뿐이라 투명한 채로 폰 하단 탭 전체를 가로챘다(실측 제보). */
    --z-pbx-ctx: 1045;       /* 보관함 트리 케밥 메뉴의 **바닥값** — 오버레이 밖(데스크톱 상시 사이드바)에서만 쓰인다.
                                오버레이 안(폴더 시트 등)에서는 `ctxMenu` 가 앵커의 `--z-layer` 에서 파생해 인라인으로 덮는다.
                                🔴 [2026-09-20] 구 이름 `--z-pbx-drawer`. 폴더 드로어가 **바텀 시트(L3 런타임)** 가 되면서
                                   이 토큰의 소유자는 케밥만 남았다 — 이름이 원주인을 가리키면 다음 사람이 시트를 여기로 되돌린다. */
    --z-nav-top: 1050;       /* 상단바 · 공지 패널(상단바에 붙어 열림) */
    --z-nav-dropdown: 1100;  /* 앵커 팝오버 — 백드롭도 스크롤 잠금도 없는 것 전부: 사용자 드롭다운(상단바·레일) ·
                                문제 미리보기 팝오버 · 검토 매트릭스 썸네일. 🔴 같은 성격에 새 토큰을 만들지 말 것(같은 층의 두 번째 이름).
                                공존 시 동률이지만 문서 클릭 위임이 서로를 닫아 실제 겹침이 없다 [2026-09-05 범위 확장]
                                🔴 [2026-09-20] **잠금이 없다는 것이 "배경을 그냥 둔다"는 뜻은 아니다** — 이 부류는
                                   `popoverGate`(common.js 정본)에 등록해 **배경 스크롤에 닫히고**, 자체 스크롤 영역에는
                                   `overscroll-behavior: contain` 이 짝이다(운영 제보 — frontend_guide §3.9-PG).
                                📎 종전 목록의 "음악/테마 팝업" 은 **둘 다 실체가 없다**: 테마 팝업은 2026-08-14 에,
                                   음악 팝업은 2026-09-20 에 제거됐다(여는 버튼 마크업 0건). 목록이 낡으면 다음 사람이
                                   없는 것을 근거로 판단한다. */

    /* ── L2 모드 (같이풀기 화면 전용 — 이 관계는 종전에 어디에도 적혀 있지 않았다) [2026-09-05] ── */
    --z-ws-pane-popup: 1310; /* B모드 조교 팝업 — 일반 콘텐츠 위, 전체화면 아래 (종전 1010) */
    --z-ws-fullscreen: 1500; /* 연습장 전체화면 "경계" (종전 2000) */
    --z-ws-pane-over: 1510;  /* C모드 조교 팝업 — 전체화면 위 (종전 JS 인라인 2010) */
    --z-ws-exam-bar: 1900;   /* 시험 상태 바 — 모드 전부 위, 오버레이 아래 (종전 JS 인라인 2100) */
    --z-ws-flyout: 1950;     /* 툴바 플라이아웃 그룹 — 모드 층 전부 위, 오버레이(L3) 아래 (종전 20000 !important —
                                🔴 그 값이 토스트(10000)까지 덮어 "알림은 가려지면 안 된다" 원칙과 충돌했다) */

    /* ── L3 오버레이: 토큰 없음. common.js layerStack 이 --z-layer 를 요소에 싣는다 ── */

    /* ── L4 알림 — 권유 < 알림 < 결정 요구. 종전엔 전부 10000 한 값에 뭉쳐 DOM 순서로 갈렸다 [2026-09-05 Z4] ── */
    --z-banner: 10000;       /* 권유 — PWA 설치 배너 · 푸시 권유(종전 9990/9991) */
    --z-toast: 10010;        /* 알림 — 글로벌 토스트 · 조교/같이풀기 notice · common.js 폴백 컨테이너(종전 10000·9999).
                                L3 오버레이(≤8999)보다 위 — "알림은 가려지면 안 된다"를 대역이 보장한다 */
    --z-system-bar: 10030;   /* 결정 요구 — SW 업데이트 바 · iOS 설치 시트(종전 10000) */
    /* (폐기) --z-popup 9999 — 라이트박스는 오버레이(L3)라 layerStack 이 층을 준다. 완충 대역 값을 남기지 않는다. */
}
