/* 관문·전공을 고르는 공용 UI (260909)
 *
 * 🔴 **KMLE 를 포함한 모든 화면에 실린다**(head 계열 4곳에서 조건 없이 싣는다).
 *    `line.css` 와 다른 점이 이것이다. 여기 있는 두 장치는 KMLE 에서도 쓰이기 때문이다 —
 *      관문 탭   목록 화면 전부(커뮤니티·QnA·공지·내서재). KMLE 화면에도 붙는다
 *      전공 고르기  구매 화면은 **통합**이라 KMLE 에서 열어도 전문의 상품이 보인다
 *
 * 🔴🔴 **변수(`var(--gold)` 등)를 쓰지 마라. 값을 직접 적는다.**
 *    그 변수들은 `line.css` 가 정의하는데 그 파일은 **KMLE 에 안 실린다.** 변수를 쓰면
 *    KMLE 에서 색이 통째로 빠진다.
 * 🔴🔴 **치수를 `rem` 으로 쓰지 마라. `px` 로 쓴다.**
 *    부트스트랩 3 이 `html{font-size:10px}` 을 건다. 그것을 되돌리는 `html{font-size:16px}` 는
 *    `line.css` 안에 있어 KMLE 에는 없다. rem 을 쓰면 **KMLE 에서만 62.5% 로 쪼그라든다.**
 *
 * 어휘를 한 벌로 두는 이유 — 같은 것을 고르는 화면이 여럿이다.
 *   전공 고르기  학습이력(⑦) · 셀프모의고사(⑤) · 구매(⑨)
 *   관문 고르기  내서재(⑦) · 커뮤니티·QnA·공지(⑥)
 * **어휘가 다르면 사용자가 화면마다 새로 배운다.**
 */

/* ══ 관문 고르기 탭 ═══════════════════════════════════════════════════
 * 조각 — views/common/element/lineTabs.ejs
 * 🔴 기본값이 **지금 있는 관문**이라 처음 보는 화면은 언제나 내용이 있는 탭이다.
 *    그래서 "빈 탭이 고장처럼 보인다" 는 문제가 없다(260909 대표님 재확정).
 * ⚠️ 준비 중인 관문도 **탭에 남긴다.** 지우면 "언젠가 열린다" 는 것을 알 방법이 없다.
 *    대신 흐리게 두고 건수로 알린다. */
.lineTabs {
    display: flex; flex-wrap: wrap; gap: 6px;
    margin: 0 0 16px; padding: 0;
}
.lineTab {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 7px 14px; border-radius: 99px;
    border: 1px solid #ddd; background: #fff; color: #666;
    font-size: 13px; font-weight: 500; line-height: 1.2;
    text-decoration: none; white-space: nowrap;
    transition: border-color .15s, color .15s, background .15s;
}
.lineTab:hover, .lineTab:focus { text-decoration: none; color: #222; border-color: #bbb; }
.lineTab > b {
    font-weight: 600; font-size: 11px; color: #8a8f9c;
    background: #f1f2f5; border-radius: 99px; padding: 1px 7px;
    font-variant-numeric: tabular-nums;
}
/* 지금 보고 있는 관문 — **한 눈에 보여야 한다.** 어디를 보고 있는지가 이 장치의 전부다. */
.lineTab.on {
    background: #2b2823; border-color: #2b2823; color: #fff; font-weight: 600;
}
.lineTab.on > b { background: rgba(255,255,255,.18); color: #fff; }
/* 준비 중 — 눌러는 볼 수 있다. 들어가면 '준비 중' 안내가 뜬다. */
.lineTab.soon { border-style: dashed; color: #999; }
.lineTab.soon > b { background: #f6f6f8; }
/* 0건 — 눌러도 빈 목록이라 흐리게. ⚠️ 감추지는 않는다. 없다는 것도 정보다. */
.lineTab.empty { opacity: .5; }
.lineTab.empty.on { opacity: 1; }

@media (max-width: 619px) {
    .lineTabs { gap: 5px; margin-bottom: 12px; }
    .lineTab  { padding: 6px 11px; font-size: 12px; }
}

/* ══════════════════════════════════════════════════════════════════════
 * 전공 고르기 — 셀프모의고사(⑤) · 학습이력(⑦) · 구매(⑨) 가 함께 쓴다
 * 시안 — docs/mockup/line-design-all-v1.html 의 `#selftest` 화면
 *
 * 🔴 **왜 이 장치인가** — 전공의 전공이 **26개**까지 간다. 알약 탭으로는 한 줄에 못 넣고,
 *    가로 스크롤 띠는 **5~7개가 한계**라 26개를 옆으로 밀어 놓으면 지금 무엇이 있는지
 *    보이지 않아 고를 수가 없다. 그래서 **접힌 줄 하나 + 펼치면 카드 그리드**로 간다.
 *    이것은 **문제 목록의 '과목 선택' 과 같은 장치**다. 새 어휘를 만들지 않았다.
 * ⚠️ 라벨은 **'전공'** 이다(260908 대표님 지시). 의사의 전공이 가정의학과·내과이고
 *    **그 아래가 과목**(순환기·소화기…)이다. 앞서 두 단이 다 '과목' 이라 뜻이 뭉개졌다.
 * ⚠️ **KMLE 은 지금의 `All / Basic / Essential` 알약 그대로 둔다.** 셋뿐이라 문제가 없다.
 *
 * ── ⑤ 에게: 마크업 계약 ────────────────────────────────────────────
 *   래퍼 `.lineSel` 이 **반드시** 있어야 한다. 여기에 CSS 변수가 걸려 있어서,
 *   없으면 `#c9a227` 가 안 풀려 **색이 전부 빠진다.**
 *   라인일 때만 씌운다 — `line && line !== 'kmle'`.
 *
 *   <div class="lineSel">
 *     <div class="st-sec">
 *       <div class="pickhead" data-lsel="sp">전공 <b>가정의학과</b> <i>▼</i>
 *         <span class="st-hint">26개 중 1개 · 눌러서 바꾸기</span></div>
 *       <div class="cards st-sp" id="spGrid" hidden>
 *         <a class="cardx on">            <!-- 지금 고른 것 -->
 *           <span class="nm">가정의학과</span>
 *           <span class="ic"><span>가</span></span>
 *           <span class="cnt">문제 2,458</span></a>
 *         <a class="cardx soon">          <!-- 준비 중 -->
 *           <span class="nm">내과</span>
 *           <span class="ic"><span>내</span></span>
 *           <span class="cnt">준비 중</span></a>
 *       </div>
 *     </div>
 *   </div>
 *
 *   여닫기 —
 *     var g = document.getElementById('spGrid');
 *     g.hidden = !g.hidden;
 *     pickhead 안의 <i> 를 ▼ / ▲ 로 바꾼다.
 *
 * 🔴 **`[hidden]` 만으로는 안 접힌다.** `.cards{display:grid}` 가 브라우저 기본
 *    `[hidden]{display:none}` 을 이긴다. 그래서 `.cards[hidden]` 규칙을 따로 뒀다.
 *    목업을 만들 때 이걸로 두 번 헛돌았다. 지우지 마라.
 * ══════════════════════════════════════════════════════════════════════ */
.lineSel .st-sec { margin-bottom: 27px; }

/* 접힌 줄 — 눌러서 여는 손잡이다 */
.lineSel .pickhead {
    display: flex; align-items: center; gap: 6px;
    font-weight: 600; font-size: 15px; color: #2b2823;
    margin-bottom: 14px; cursor: pointer;
}
.lineSel .pickhead b { color: #8a6d0f; font-weight: 700; }
.lineSel .pickhead i { font-style: normal; color: #a9a08a; font-size: 12px; }
/* 접혀 있을 때 "뒤에 더 있다" 를 알려 주는 **유일한 단서**다. 빼지 마라. */
.lineSel .st-hint { margin-left: auto; font-size: 12px; color: #6f6a5e; font-weight: 400; }

.lineSel .cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(174px, 1fr)); gap: 14px; }
.lineSel .cards[hidden] { display: none; }
.lineSel .cardx {
    border: 1px solid #e5dfd0; background: #fffdf8; border-radius: 6px;
    padding: 12px 11px 16px; text-align: center; cursor: pointer;
    text-decoration: none; color: inherit; display: block;
    transition: border-color .2s, transform .2s;
}
.lineSel .cardx:hover { border-color: #c9a227; transform: translateY(-2px); }
.lineSel .cardx .nm {
    display: block; font-size: 14px; font-weight: 500;
    background: #eef1f7; color: #3b4664; border-radius: 99px;
    padding: 5px 8px; margin-bottom: 14px;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.lineSel .cardx .ic { height: 74px; display: grid; place-items: center; margin-bottom: 11px; }
.lineSel .cardx .ic span {
    width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
    border: 1px solid #e3d9bd; background: #fbf7ec;
    font-family: Cinzel, "Nanum Myeongjo", serif; font-weight: 700; font-size: 16px; color: #b08d12;
}
.lineSel .cardx .cnt { display: block; font-size: 12px; color: #6f6a5e; font-variant-numeric: tabular-nums; }
/* 지금 고른 것 — 테두리 안쪽에 한 겹 더 둘러 **선택**을 분명히 한다 */
.lineSel .cardx.on { border-color: #c9a227; background: #fdf8ea; box-shadow: 0 0 0 1px #c9a227 inset; }
/* 준비 중 — 점선 + 흐리게. ⚠️ 현관의 밀랍 인장·꺼진 횃불은 쓰지 않는다(현관 전용이다). */
.lineSel .cardx.soon { opacity: .55; border-style: dashed; }
/* '전체' — 구매 화면만 쓴다(specialtyAll · 260911 대표님 — "전공 기본값을 전체로").
 * 🔑 **같은 크기의 카드**라 줄은 그대로 맞고, 세 곳만 달라 "전부" 로 읽힌다 —
 *    이름 알약이 금빛(다른 카드는 파란 회색) · 원 안이 글자 대신 네 칸 격자 · 아래 줄 "전공 N개 모두".
 * ⚠️ `.all` 에만 건다. 학습이력(⑦)·셀프모의고사(⑤)는 '전체' 카드를 안 그리므로 한 픽셀도 안 바뀐다.
 * ⚠️ 색은 이 파일의 금 계열을 그대로 쓴다(#8a6d0f 접힌 줄 이름 · #b08d12 원 글자 · #fdf8ea 고른 카드).
 *    이 파일은 KMLE 에도 실려 변수를 못 쓴다(위 머리말). */
.lineSel .cardx.all .nm { background: #f6eed6; color: #8a6d0f; font-weight: 600; }
.lineSel .cardx.all .ic span { background: #fdf8ea; border-color: #d9c68e; }
.lineSel .cardx.all .ic svg { display: block; width: 22px; height: 22px; fill: #b08d12; }

@media (max-width: 619px) {
    .lineSel .cards { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}

/* ── 관리자 회원 [구독 수정] 창 — 전공(레벨0)과 그 안의 과목(레벨1)을 구별한다 (260914) ──
 * 대표님 — "현재 이게 가정의학과 내과 전공을 선택한 건지, 가정의학과 전공 안에서 카테고리를
 *          선택한 건지 확인이 전혀 안 되는 디자인이다. 문제등록/수정 페이지에서 구별 디자인을
 *          확인해서 활용해서 구별되게 변경해 줘."
 *
 * 🔑 **모양은 문제·리뷰 등록/수정 화면의 그것과 같다**(public/css/line.css 의
 *    `.categories .category_span[data-level="0"]` · 260911 에 같은 지적으로 만든 것).
 *    남색 #1b2438 · 금 #c9a227 · 밝은 금 #f0d478 — 값이 같아야 두 화면이 같은 얼굴이다.
 *
 * ⚠️ **왜 여기(lineUI.css)에 또 적는가 — line.css 를 못 쓰기 때문이다.**
 *    line.css 는 `line !== 'kmle'` 일 때만 실린다(views/common/head.ejs). 관리자 회원관리는
 *    KMLE 호스트(lvh.me:3000/admin/user)라 **그 파일이 안 온다.** 그렇다고 거기서 line.css 를
 *    실으면 그 파일의 `html{font-size:16px}` 이 문서 전체에 걸려 **KMLE 관리자 화면이 1.6배**가 된다.
 *    이 파일은 조건 없이 실려서(head.ejs) KMLE 호스트에서도 온다.
 * 🔴 **값이 세 곳이다**(260914 추가) — 색을 바꾸면 line.css:886 과 아래
 *    `#medicCashCouponGroup`·`#medicCashCouponSerial` 도 같이 바꿔라(세 자리 모두 이 주석을 걸어 뒀다).
 * ⚠️ 선택자를 `#subscribe_set_user` 안으로 **가둔다** — 밖으로 나가면 문제등록 화면의 칩과
 *    두 규칙이 겹친다. 이 창 말고는 한 픽셀도 바뀌지 않는다. */
#subscribe_set_user .specialtyChip {
    display: inline-flex; align-items: center; gap: 6px; vertical-align: middle;
    padding: 2px 10px 2px 3px; border-radius: 99px;
    background: #1b2438; color: #f0d478; font-weight: 600; line-height: 1.5;
}
#subscribe_set_user .specialtyChip::before {
    content: "전공"; font-size: 11px; font-weight: 700; line-height: 1;
    padding: 4px 7px; border-radius: 99px; background: #c9a227; color: #1b2438;
}
/* 과목(레벨1) — `가정의학과 › 감염`. 앞의 전공 이름을 흐리게 둬 **뒤가 고른 것**임을 보인다. */
#subscribe_set_user .parentName { color: #8a8f9c; font-weight: 500; }
#subscribe_set_user .parentName::after { content: " › "; color: #b6bac4; }

/* ── 관리자 쿠폰(그룹·시리얼) 목록 — 위와 같은 이유로 같은 모양을 쓴다 (260914) ──
 * 대표님 — "board 쿠폰인데도 E 아이콘 가정의학과로 나오는 문제가 있다" 이어서
 * "전공표시일 때랑 해당 전공 안의 가정의학과일 경우 구별이 안되어서 구별하고자해서
 *  전공과목은 디자인을 처리해달라는거다."
 * 🔑 값은 위 `#subscribe_set_user` 와 **글자까지 같다**(남색 #1b2438 · 금 #c9a227 · 밝은 금 #f0d478).
 * ⚠️ **왜 line.css 를 못 쓰는가 — 여기도 위와 같다.** 이 쿠폰 화면은 세 관문 호스트 어디서나 열리고
 *    목록 자체가 `CouponGroup.getAll({}, …)` 으로 **관문을 안 가리고** 다 보여 준다(관리자 목록의
 *    관문 열 참고). 관리자가 KMLE 호스트에서 열어도 표 안의 Board·Resident 카드는 항상 이 모양이어야
 *    하므로, `line !== 'kmle'` 일 때만 오는 line.css 에 기대면 KMLE 호스트에서 그 카드들이 깨진다.
 * ⚠️ 선택자를 두 화면의 wrapper id 안으로 가둔다 — 문제등록 화면의 칩과 규칙이 안 겹치게. */
#medicCashCouponGroup .specialtyChip, #medicCashCouponSerial .specialtyChip {
    display: inline-flex; align-items: center; gap: 6px; vertical-align: middle;
    padding: 2px 10px 2px 3px; border-radius: 99px;
    background: #1b2438; color: #f0d478; font-weight: 600; line-height: 1.5;
}
#medicCashCouponGroup .specialtyChip::before, #medicCashCouponSerial .specialtyChip::before {
    content: "전공"; font-size: 11px; font-weight: 700; line-height: 1;
    padding: 4px 7px; border-radius: 99px; background: #c9a227; color: #1b2438;
}
#medicCashCouponGroup .parentName, #medicCashCouponSerial .parentName { color: #8a8f9c; font-weight: 500; }
#medicCashCouponGroup .parentName::after, #medicCashCouponSerial .parentName::after { content: " › "; color: #b6bac4; }
