/* 한봇 마법학교 확장 기능 — 공용 CSS 한 곳 (2026-10-26). 새 클래스는 mx- 접두만, 기능 조각은 scratchpad/magic-ext/css/<key>.css를 코어 담당이 이 파일 아래에 합친다.
 * 먼저 본체 클래스(.panel .row-card .mini-btn .reward-box .q-row .side-note .section-label .badge-dot …)를 재사용하고, 색은 토큰만. */

/* ── 코어: 본체 창 안 칸·할 일·결과 상자·관리 목록 ── */
.mx-slot { margin: 0 0 12px; min-width: 0; }
.mx-slot:empty { display: none; }
.mx-pane { min-width: 0; }
.mx-todo { display: flex; flex-direction: column; gap: 6px; }
.mx-todo-row { background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; }
.mx-todo-txt { flex: 1; min-width: 160px; display: flex; flex-direction: column; gap: 2px; font-size: 0.82rem; color: var(--text-main); }
.mx-todo-txt .q-meta { font-size: 0.74rem; color: var(--text-dim); }

.mx-ext-wrap { margin-top: 6px; }
.mx-ext-head { font-size: 0.74rem; font-weight: 700; color: var(--text-dim); margin: 6px 0 2px; }
.mx-ext-box { margin-top: 4px; }
.mx-ext-items { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.mx-ext-item { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-elev); color: var(--text-main); font-size: 0.76rem; }
.mx-ext-next { margin-top: 6px; }

.mx-admin { margin-top: 12px; }
.mx-admin-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(150px, 100%), 1fr)); gap: 6px 12px; margin: 4px 0 8px; }
.mx-admin-item { display: flex; align-items: center; gap: 6px; font-size: 0.8rem; color: var(--text-sub); cursor: pointer; min-width: 0; }
.mx-admin-item input { accent-color: var(--brand); }

.mx-map-btn .badge-dot { margin-left: 4px; }

/* 전리품 아이콘 — 몬스터 그림을 작게 + 테두리(흔함 기본 · 귀함 금빛 · 이야기 속 물건 은빛 이중) — MagicExt.lootIcon */
.mx-loot-ico { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 2em; height: 2em; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-elev); overflow: hidden; vertical-align: middle; flex: none; }
.mx-loot-ico .mx-loot-img { width: 100%; height: 100%; object-fit: contain; font-size: 1.1em; line-height: 2em; text-align: center; }
.mx-loot-ico.rare { border-color: var(--warn); box-shadow: inset 0 0 0 1px var(--warn); }
.mx-loot-ico.rare::after { content: ""; position: absolute; top: 2px; right: 2px; width: 5px; height: 5px; border-radius: 50%; background: var(--warn); }
.mx-loot-ico.story { border: 3px double var(--text-sub); }

/* 반응형 — 휴대폰 */
@media (max-width: 480px) {
    .mx-todo-row { padding: 8px 10px; }
    .mx-todo-row .mini-btn { width: 100%; }
}
/* 움직임 줄이기 — 기능 조각의 움직임도 이 블록에 모은다 */
@media (prefers-reduced-motion: reduce) {
    .mx-slot *, .mx-pane * { animation: none !important; transition: none !important; }
}

/* ══════════ 기능 조각 (css/<key>.css — 코어 담당이 KEYS 순서로 아래에 붙인다) ══════════ */

/* ── loot (out/css-parts/loot.css) ── */
/* 21 몬스터 전리품 (A) — 카드 격자는 본체 .codex-grid/.codex-card 재사용 */
.mx-loot-tabs { margin-bottom: 8px; }
.mx-loot-filter { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 6px 0 10px; }
.mx-loot-sellall { display: inline-flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
.mx-loot-card { cursor: default; display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; }
.mx-loot-card .mx-loot-ico { width: 46px; height: 46px; }
.mx-loot-card.locked { border-color: var(--warn); }
.mx-loot-uses { display: flex; flex-wrap: wrap; gap: 3px; justify-content: center; margin-top: 2px; }
.mx-loot-acts { display: flex; flex-wrap: wrap; gap: 4px; justify-content: center; margin-top: 4px; }
.mx-loot-acts .mini-btn { font-size: 0.68rem; padding: 3px 7px; }
.mx-loot-slot .rc-main { min-width: 0; }
@media (max-width: 480px) { .mx-loot-sellall { margin-left: 0; width: 100%; } .mx-loot-sellall .mini-btn { flex: 1 1 auto; } }

/* ── attend (out/css-parts/attend.css) ── */
/* 확장 1 출석 도장 — 도장판(7열 달력). 찍은 날은 붉은 인주 도장 모양(이 칸의 시그니처), 오늘은 테두리 */
.mx-att-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; margin: 8px 0; max-width: 420px; }
.mx-att-wd { text-align: center; font-size: 0.68rem; color: var(--text-dim); font-weight: 700; }
.mx-att-day { position: relative; aspect-ratio: 1; display: flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--bg-elev); border: 1px solid var(--border); font-size: 0.72rem; color: var(--text-sub); min-width: 0; }
.mx-att-day.empty { background: transparent; border-color: transparent; }
.mx-att-day.today { border-color: var(--brand); color: var(--text-main); }
.mx-att-day.on i { position: relative; z-index: 1; font-style: normal; color: #fff; font-weight: 800; }
.mx-att-day.on::before { content: ""; position: absolute; inset: 14%; border-radius: 50%; background: rgba(var(--danger-rgb), 0.78); box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.28); transform: rotate(-12deg); }
.mx-att-day.pop::before { animation: mx-att-press 0.45s ease-out; }
@keyframes mx-att-press { 0% { transform: scale(1.6) rotate(-12deg); opacity: 0; } 60% { transform: scale(0.92) rotate(-12deg); opacity: 1; } 100% { transform: scale(1) rotate(-12deg); } }
.mx-att-foot { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; }
.mx-att-foot .side-note { flex: 1; min-width: 180px; margin: 0; }
@media (max-width: 480px) { .mx-att-foot .mini-btn { width: 100%; } }
@media (prefers-reduced-motion: reduce) { .mx-att-day.pop::before { animation: none; } }

/* ── questplus (out/css-parts/questplus.css) ── */
/* 확장 2 과제 다시 뽑기·연속 달성 — 게시판 '오늘의 과제' 아래 두 줄 */
.mx-qp { margin-top: 12px; }
.mx-qp-row { display: flex; align-items: center; gap: 6px 10px; flex-wrap: wrap; padding: 4px 0; }
.mx-qp-k { font-size: 0.78rem; font-weight: 700; color: var(--text-main); min-width: 7em; }
.mx-qp-btns { display: flex; gap: 6px; flex-wrap: wrap; }
.mx-qp .side-note { margin: 4px 0 0; }
@media (max-width: 480px) { .mx-qp-btns { width: 100%; } .mx-qp-btns .mini-btn { flex: 1; } }

/* ── notebook (out/css-parts/notebook.css) ── */
/* 확장 3 별빛 수첩 — 30칸 별 이음 줄(이 창의 시그니처): 별 사이를 가는 선으로 잇고, 찬 별은 금빛, 받을 별은 버튼 */
.mx-nb-chain { list-style: none; margin: 10px 0 6px; padding: 0; display: grid; grid-template-columns: repeat(10, minmax(0, 1fr)); row-gap: 10px; }
.mx-nb-star { position: relative; display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; }
.mx-nb-star::before { content: ""; position: absolute; top: 15px; right: 50%; width: 100%; height: 2px; background: var(--border); z-index: 0; }
.mx-nb-star:nth-child(10n + 1)::before { display: none; }
.mx-nb-star.lit::before { background: var(--rank-gold); opacity: 0.7; }
.mx-nb-btn { position: relative; z-index: 1; width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; font-size: 1rem; line-height: 1; background: var(--bg-elev); border: 1px solid var(--border); color: var(--text-dim); padding: 0; }
.mx-nb-star.lit .mx-nb-btn { color: var(--rank-gold); border-color: var(--rank-gold); }
.mx-nb-star.got .mx-nb-btn { background: var(--rank-gold); color: var(--bg-deep); }
.mx-nb-star.ready .mx-nb-btn { cursor: pointer; background: var(--bg-card); box-shadow: 0 0 0 3px rgba(var(--warn-rgb), 0.35); animation: mx-nb-glow 1.6s ease-in-out 2; }
.mx-nb-star.ready .mx-nb-btn:hover { background: var(--rank-gold); color: var(--bg-deep); }
.mx-nb-star.ready .mx-nb-btn:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
.mx-nb-star small { font-size: 0.6rem; color: var(--text-dim); }
@keyframes mx-nb-glow { 50% { box-shadow: 0 0 0 6px rgba(var(--warn-rgb), 0.15); } }
.mx-nb-foot { display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap; }
.mx-nb-foot .side-note { flex: 1; min-width: 180px; margin: 0; }
.mx-nb + .mx-nb { margin-top: 12px; }
.mx-nb-mini { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; font-size: 0.82rem; color: var(--text-sub); }
.mx-nb-mini b { color: var(--text-main); }
.mx-nb-new { color: var(--rank-gold); font-weight: 700; }
@media (max-width: 420px) {
    .mx-nb-chain { grid-template-columns: repeat(6, minmax(0, 1fr)); }
    .mx-nb-star:nth-child(10n + 1)::before { display: block; }
    .mx-nb-star:nth-child(6n + 1)::before { display: none; }
}
@media (prefers-reduced-motion: reduce) { .mx-nb-star.ready .mx-nb-btn { animation: none; } }

/* ── villager (out/css-parts/villager.css) ── */
/* ── 4 마을 사람 부탁 (villager, 담당 C) ── */
.mx-vl-facebox { width: 48px; height: 48px; flex: none; border-radius: 50%; overflow: hidden; background: var(--bg-elev); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; }
.mx-vl-face { width: 100%; height: 100%; object-fit: cover; font-size: 1.5rem; line-height: 48px; text-align: center; }
.mx-vl-card .rc-right { flex-wrap: wrap; justify-content: flex-end; }
.mx-vl-focus { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); }
.mx-vl-slot { margin: 8px 0 0; }
@media (max-width: 480px) {
    .mx-vl-card .rc-right { width: 100%; margin-left: 0; justify-content: stretch; }
    .mx-vl-card .rc-right .mini-btn { flex: 1 1 auto; }
}

/* ── favor (out/css-parts/favor.css) ── */
/* ── 5 동료의 부탁 (favor, 담당 C) ── */
.mx-fv-facebox { width: 48px; height: 48px; flex: none; border-radius: 50%; overflow: hidden; background: var(--bg-elev); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; }
.mx-fv-face { width: 100%; height: 100%; object-fit: cover; font-size: 1.5rem; line-height: 48px; text-align: center; }
.mx-fv-card .rc-right { flex-wrap: wrap; justify-content: flex-end; }
.mx-fv-focus { border-color: var(--brand); box-shadow: inset 0 0 0 1px var(--brand); }
.mx-fv-done { display: flex; flex-wrap: wrap; gap: 6px; }
.mx-fv-done .mini-btn { max-width: 100%; white-space: normal; text-align: left; }
@media (max-width: 480px) {
    .mx-fv-card .rc-right { width: 100%; margin-left: 0; }
    .mx-fv-card .rc-right .mini-btn { flex: 1 1 auto; }
}

/* ── lecture (out/css-parts/lecture.css) ── */
/* 확장 6 수업 시간 — 마법 교실 창 위 칸: 지금 수업 줄 · 문제 카드 · 함께 들은 보상 */
.mx-lec-now { font-size: 0.84rem; color: var(--text-sub); margin: 4px 0 8px; }
.mx-lec-now b { color: var(--text-main); }
.mx-lec-qs { display: flex; flex-direction: column; gap: 8px; margin: 8px 0; }
.mx-lec-q { background: var(--bg-elev); border: 1px solid var(--border); border-radius: 10px; padding: 8px 10px; }
.mx-lec-q.right { border-color: rgba(var(--ok-rgb), 0.55); }
.mx-lec-q.wrong { border-color: rgba(var(--warn-rgb), 0.55); }
.mx-lec-qt { font-size: 0.84rem; color: var(--text-main); margin-bottom: 6px; }
.mx-lec-opts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(140px, 100%), 1fr)); gap: 6px; margin-bottom: 4px; }
.mx-lec-opt { white-space: normal; text-align: left; }
.mx-lec-opt.ok { border-color: var(--ok); color: var(--ok); }
.mx-lec-opt.no { border-color: var(--warn); color: var(--warn); }
.mx-lec-opt.ok:disabled, .mx-lec-opt.no:disabled { opacity: 1; }
.mx-lec-bonus { margin-top: 6px; }
.mx-lec-bonus .q-main { font-size: 0.8rem; color: var(--text-sub); }

/* ── weekday (css/weekday.css) ── */
/* 7 요일 시련 (기능 담당 D) — 시련의 탑 창 맨 위 칸. 본체 .row-card·.elem-chip 재사용 */
.mx-wd .rc-title { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.mx-wd-label { font-weight: 700; color: var(--text-main); }
.mx-wd .rc-right { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; }
@media (max-width: 480px) {
    .mx-wd .row-card { flex-wrap: wrap; }
    .mx-wd .rc-right { width: 100%; justify-content: stretch; }
    .mx-wd .rc-right .mini-btn { flex: 1 1 auto; }
}

/* ── raid (css/raid.css) ── */
/* 8 주간 공동 보스 (기능 담당 D) — 게시판 칸 + 창 x_raid. 체력 막대는 본체 .bar(span은 display:block) 재사용 */
.mx-rd-bar { height: 9px; }
.mx-rd-bar > span { background: var(--warn); }
.mx-rd-head { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; min-width: 0; }
.mx-rd-art { flex: none; width: clamp(56px, 14vw, 88px); aspect-ratio: 1 / 1; border-radius: 14px; border: 1px solid var(--border); background: var(--bg-elev); display: flex; align-items: center; justify-content: center; overflow: hidden; }
.mx-rd-art .mx-rd-img { width: 100%; height: 100%; object-fit: contain; font-size: 2rem; text-align: center; line-height: 1; }
.mx-rd-info { flex: 1; min-width: 0; }
.mx-rd-name { font-weight: 700; font-size: 1rem; color: var(--text-main); display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.mx-rd .big-btn { width: 100%; margin-top: 8px; }
.mx-rd-card .rc-main { min-width: 0; }
@media (max-width: 480px) {
    .mx-rd-card { flex-wrap: wrap; }
    .mx-rd-card .rc-right, .mx-rd-card .rc-right .mini-btn { width: 100%; }
}

/* ── wander (css/wander.css) ── */
/* 9 떠돌이 사건 (기능 담당 D) — 창 x_wander. 지도 표식은 본체 지도 물체 그리기 그대로(이모지) */
.mx-wn-row .rc-img .emoji-glyph { font-size: 1.6rem; line-height: 1; }
.mx-wn-items { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.mx-wn-items .q-row { background: var(--bg-elev); border: 1px solid var(--border); border-radius: 10px; padding: 6px 10px; }
.mx-wn-items s { color: var(--text-dim); }
@media (max-width: 480px) {
    .mx-wn-row { flex-wrap: wrap; }
    .mx-wn-items .q-row .mini-btn { width: 100%; }
}

/* ── maze (css/maze.css) ── */
/* 10 끝없는 미궁 (기능 담당 D) — 시련의 탑 칸 + 창 x_maze. 갈림길·축복·보기는 같은 문 모양 버튼 */
.mx-mz-stat { flex-wrap: wrap; }
.mx-mz-bless { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin: 6px 0; font-size: 0.8rem; color: var(--text-sub); }
.mx-mz-doors { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr)); gap: 8px; margin: 6px 0 10px; }
.mx-mz-door { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; padding: 12px 14px; min-height: 64px; text-align: left; border-radius: 14px 14px 6px 6px;
    border: 1px solid var(--border); background: var(--bg-elev); color: var(--text-main); cursor: pointer; font: inherit; }
.mx-mz-door b { font-size: 0.92rem; }
.mx-mz-door span { font-size: 0.76rem; color: var(--text-dim); }
.mx-mz-door:hover { border-color: var(--brand); }
.mx-mz-door:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; }
.mx-mz-strong, .mx-mz-boss { border-color: var(--warn); }
.mx-mz-boss b { color: var(--warn); }
.mx-mz-rest b, .mx-mz-bless-btn b { color: var(--ok); }
.mx-mz-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 6px; }
.mx-mz-entry .rc-right { display: flex; align-items: center; }
@media (max-width: 480px) {
    .mx-mz-entry { flex-wrap: wrap; }
    .mx-mz-entry .rc-right, .mx-mz-entry .rc-right .mini-btn, .mx-mz-foot .big-btn { width: 100%; }
}

/* ── party (css/party.css) ── */
/* 11 파티 원정 + 12 실시간 대련 공용 방 화면 (기능 담당 E) — mx-room-*. 대련장 칸·창 x_party·x_arena, 본체 전투 창 아래 '남은 시간·빠지기' 줄.
 * 본체 .panel .row-card .mini-btn .state-chip .side-note .empty-state .q-meta 재사용, 색은 토큰만 */
.mx-room-slot { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.mx-room-slot .mx-room-txt { flex: 1; }
.mx-room-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; font-size: 0.84rem; color: var(--text-main); }
.mx-room-txt .q-meta { font-size: 0.74rem; color: var(--text-dim); overflow-wrap: anywhere; }
.mx-room-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
.mx-room-list { display: flex; flex-direction: column; }
.mx-room-row { margin-bottom: 6px; }
.mx-room-members { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(160px, 100%), 1fr)); gap: 6px; margin: 4px 0 10px; }
.mx-room-member { background: var(--bg-elev); border: 1px solid var(--border); border-radius: 10px; padding: 6px 10px; font-size: 0.8rem; color: var(--text-sub); min-width: 0; overflow-wrap: anywhere; }
.mx-room-member.me { border-color: var(--brand); }
.mx-room-member b { color: var(--text-main); }
.mx-room-acts { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
/* 본체 전투 창 행동 칸 아래 — 남은 시간 + 빠지기 */
.mx-room-bar { display: flex; align-items: center; justify-content: space-between; gap: 8px; flex-wrap: wrap; margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border); font-size: 0.74rem; color: var(--text-dim); }
.mx-room-bar .mx-room-time { flex: 1; min-width: 0; }
@media (max-width: 480px) {
    .mx-room-slot .mini-btn, .mx-room-row .mini-btn { width: 100%; }
    .mx-room-acts .mini-btn { flex: 1; }
}

/* ── arena (css/arena.css) ── */
/* 12 실시간 대련 (기능 담당 E) — 창 x_arena. 방·목록 모양은 css/party.css의 mx-room-* 공용 */
.mx-arena-invite { border-color: var(--warn); }
.mx-arena-left { font-variant-numeric: tabular-nums; color: var(--text-main); font-weight: 700; }
.mx-arena-me td { color: var(--text-main); font-weight: 700; }

/* ── research (out/css-parts/research.css) ── */
/* 15 몬스터 연구 노트 (A) — 단계 막대(5·20·50 눈금) */
.mx-rs .mini-btn.gold { margin: 4px 0 8px; }
.mx-rs-list { display: flex; flex-direction: column; gap: 6px; }
.mx-rs-row.on { border-color: var(--brand); }
.mx-rs-bar { position: relative; display: inline-block; width: min(160px, 40vw); height: 8px; border-radius: 999px; background: var(--bg-elev); border: 1px solid var(--border); vertical-align: middle; overflow: hidden; }
.mx-rs-fill { position: absolute; left: 0; top: 0; bottom: 0; display: block; background: var(--brand); }
.mx-rs-tick { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--text-dim); display: block; }
.mx-rs-detail { display: flex; flex-direction: column; gap: 3px; margin-top: 6px; color: var(--text-sub); }

/* ── pet (out/css-parts/pet.css) ── */
/* 13 마법 생물 (A) */
.mx-pet-card.on { border-color: var(--ok); }
.mx-pet-rename { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 6px; }
.mx-pet-rename input { flex: 1 1 140px; min-width: 0; padding: 5px 8px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-elev); color: var(--text-main); }

/* ── stars (css/stars.css) ── */
/* 14 별자리 판 (기능 담당 D) — 건강센터 내 정보 아래. 시그니처: 별 30개를 잇는 세 별자리(SVG, 색은 토큰만) */
.mx-st-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr)); gap: 10px; margin-top: 8px; }
.mx-st-card { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-elev); min-width: 0; }
.mx-st-svg { width: 100%; max-width: 160px; aspect-ratio: 1 / 1; height: auto; display: block; }
.mx-st-ghost { fill: none; stroke: var(--border); stroke-width: 0.8; stroke-dasharray: 2 2; }
.mx-st-line { fill: none; stroke: var(--brand); stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
.mx-st-off { fill: var(--text-dim); opacity: 0.55; }
.mx-st-on { fill: var(--brand); stroke: var(--text-main); stroke-width: 0.6; }
.mx-st-svg circle[data-next] { fill: none; stroke: var(--brand); stroke-width: 1; }
.mx-st-name { font-weight: 700; font-size: 0.86rem; color: var(--text-main); text-align: center; }
.mx-st-name .q-meta { font-weight: 400; margin-left: 4px; }
.mx-st-count { font-size: 0.78rem; color: var(--text-sub); }
.mx-st-card .mini-btn { width: 100%; }
.mx-st-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 10px; }

/* ── fishing (out/css-parts/fishing.css) ── */
/* 16 별빛 연못 낚시 (A) — 찌 흔들림 한 번 + 당김 막대 */
.mx-fish-spots { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.mx-fish-stage { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 18px 8px; min-height: 140px; justify-content: center; }
.mx-fish-btn { min-width: min(220px, 100%); }
.mx-fish-btn.gold { box-shadow: 0 0 0 3px var(--warn); }
.mx-fish-float { font-size: 0.86rem; color: var(--text-sub); text-align: center; }
.mx-fish-float.bite { color: var(--warn); font-weight: 800; animation: mx-fish-bob 0.35s ease-in-out 3; }
@keyframes mx-fish-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
.mx-fish-bar { position: relative; width: min(320px, 100%); height: 22px; border-radius: 999px; background: var(--bg-elev); border: 1px solid var(--border); overflow: hidden; }
.mx-fish-zone { position: absolute; top: 0; bottom: 0; display: block; background: var(--ok); opacity: 0.55; }
.mx-fish-mark { position: absolute; top: -2px; bottom: -2px; width: 4px; margin-left: -2px; display: block; background: var(--text-main); border-radius: 2px; }
.mx-fish-shadow img { filter: brightness(0) opacity(0.45); }
@media (prefers-reduced-motion: reduce) { .mx-fish-float.bite { animation: none; text-decoration: underline; } }

/* ── wardrobe (out/css-parts/wardrobe.css) ── */
/* ── 17 옷장 (wardrobe, 담당 C) — 색 값은 화면 표(MagicExt.lookColor)에서 --mx-wd-c로만 들어온다 ── */
.mx-wd-sum { margin-bottom: 0; }
.mx-wd-robe { width: 44px; height: 44px; flex: none; display: flex; align-items: center; justify-content: center; border-radius: 10px; background: var(--bg-elev); border: 1px solid var(--border); overflow: hidden; }
.mx-wd-robe-img { width: 100%; height: 100%; object-fit: contain; font-size: 1.4rem; line-height: 44px; text-align: center; }
.mx-wd-dot { display: inline-block; width: 0.8em; height: 0.8em; border-radius: 50%; background: var(--mx-wd-c, transparent); border: 1px solid var(--border); vertical-align: -1px; flex: none; }
.mx-wd-dot.base { background: transparent; border-style: dashed; }
.mx-wd-swatches { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(150px, 100%), 1fr)); gap: 8px; margin-top: 6px; }
.mx-wd-swatch { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); min-width: 0; flex-wrap: wrap; }
.mx-wd-swatch .mx-wd-dot { width: 1.2em; height: 1.2em; }
.mx-wd-sw-name { flex: 1; min-width: 3em; font-size: 0.8rem; color: var(--text-main); }
.mx-wd-pick { display: flex; gap: 8px 12px; align-items: flex-start; flex-wrap: wrap; padding: 6px 0; border-bottom: 1px solid var(--border); }
.mx-wd-pick:last-child { border-bottom: 0; }
.mx-wd-pick-l { flex: 0 0 6.5em; font-size: 0.78rem; font-weight: 700; color: var(--text-sub); padding-top: 4px; }
.mx-wd-pick-r { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px; }
.mx-wd-opt.on { border-color: var(--brand); color: var(--brand); }
.mx-wd-robes { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(96px, 100%), 1fr)); gap: 8px; margin-top: 6px; }
.mx-wd-robe-btn { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 8px 6px; border-radius: 10px; background: var(--bg-card); border: 1px solid var(--border); color: var(--text-sub); font-size: 0.72rem; cursor: pointer; min-width: 0; text-align: center; }
.mx-wd-robe-btn .mx-wd-robe-img { width: 48px; height: 48px; line-height: 48px; }
.mx-wd-robe-btn.on { border-color: var(--brand); color: var(--text-main); box-shadow: inset 0 0 0 1px var(--brand); }
.mx-wd-robe-btn span { overflow-wrap: anywhere; }
.mx-wd-prev { display: flex; align-items: center; gap: 14px; padding: 6px 0 8px; flex-wrap: wrap; }
.mx-wd-prev-ring { width: clamp(56px, 14vw, 72px); height: clamp(56px, 14vw, 72px); border-radius: 50%; border: 3px solid var(--mx-wd-c, var(--border)); background: var(--bg-elev); display: flex; align-items: center; justify-content: center; overflow: hidden; flex: none; }
.mx-wd-prev-img { width: 80%; height: 80%; object-fit: contain; font-size: 1.8rem; text-align: center; }
.mx-wd-prev-name { font-size: 0.95rem; font-weight: 800; color: var(--text-main); margin-bottom: 4px; overflow-wrap: anywhere; }
.title-chip.mx-wd-tc { border-color: var(--mx-wd-c); box-shadow: inset 0 0 0 1px var(--mx-wd-c); }
@media (max-width: 480px) {
    .mx-wd-pick-l { flex-basis: 100%; padding-top: 0; }
}

/* ── house (out/css-parts/house.css) ── */
/* 확장 18 기숙사 반 대항전 — 반 색 4개(토큰만: 샛별 --brand · 초승달 --info · 별무리 --purple · 은하수 --ok). 이 칸의 시그니처는 반 색 배지와 반 점수 막대 */
.mx-house-chip { display: inline-block; font-size: 0.72rem; font-weight: 800; border-radius: 999px; padding: 1px 9px; border: 1px solid currentColor; vertical-align: middle; white-space: nowrap; }
.mx-house-chip.mx-house-1, .mx-house-opt.mx-house-1 { color: var(--brand); }
.mx-house-chip.mx-house-2, .mx-house-opt.mx-house-2 { color: var(--info); }
.mx-house-chip.mx-house-3, .mx-house-opt.mx-house-3 { color: var(--purple); }
.mx-house-chip.mx-house-4, .mx-house-opt.mx-house-4 { color: var(--ok); }
.mx-house-bar.mx-house-1 > span { background: var(--brand); }
.mx-house-bar.mx-house-2 > span { background: var(--info); }
.mx-house-bar.mx-house-3 > span { background: var(--purple); }
.mx-house-bar.mx-house-4 > span { background: var(--ok); }
.mx-house-stand { display: flex; flex-direction: column; gap: 6px; margin: 4px 0 6px; }
.mx-house-row { display: grid; grid-template-columns: 2.6em max-content minmax(60px, 1fr) max-content; align-items: center; gap: 8px; font-size: 0.78rem; color: var(--text-sub); min-width: 0; }
.mx-house-row .mx-house-bar { margin-top: 0; }
.mx-house-rank { font-weight: 800; color: var(--text-main); }
.mx-house-score { font-weight: 700; color: var(--text-main); white-space: nowrap; }
.mx-house-pick { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(140px, 100%), 1fr)); gap: 8px; margin: 8px 0; }
.mx-house-opt { display: flex; flex-direction: column; align-items: flex-start; gap: 2px; text-align: left; background: var(--bg-elev); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; cursor: pointer; font: inherit; min-width: 0; }
.mx-house-opt b { font-size: 0.86rem; }
.mx-house-opt .q-meta { color: var(--text-dim); margin-top: 0; }
.mx-house-opt.on { border-color: currentColor; box-shadow: inset 0 0 0 1px currentColor; background: var(--bg-card); }
.mx-house-opt:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
.mx-house-pickbox { margin-bottom: 12px; }
.mx-house-line .mx-house-chip { margin: 0 4px; }
.mx-house-tops { margin-top: 4px; }
.mx-house-top { padding: 10px 12px; min-width: 0; }
.mx-house-ol { margin: 6px 0 0; padding-left: 1.3em; font-size: 0.78rem; color: var(--text-main); line-height: 1.8; }
.mx-house-how summary { cursor: pointer; }
.mx-house-weights { display: flex; flex-wrap: wrap; gap: 6px; }
#join-area .mx-slot { margin: 12px 0; text-align: left; }
@media (max-width: 480px) {
    .mx-house-row { grid-template-columns: 2.4em max-content minmax(40px, 1fr); }
    .mx-house-row .mx-house-score { grid-column: 2 / -1; }
    .mx-house-tops { grid-template-columns: 1fr; }
}

/* ── mentor (out/css-parts/mentor.css) ── */
/* 확장 19 선후배 맺기 — 본체 .row-card·.state-chip을 그대로 쓰고 이정표 칩 줄·한마디 입력만 */
.mx-mentor-ms { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
.mx-mentor-ms .state-chip { font-size: 0.66rem; }
.mx-mentor-memo { width: 100%; box-sizing: border-box; margin: 6px 0 8px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-input); color: var(--text-main); font: inherit; font-size: 0.82rem; }
.mx-mentor-memo:focus-visible { outline: 2px solid var(--brand); outline-offset: 1px; }
.mx-mentor-line .q-meta { margin-left: 4px; }
@media (max-width: 480px) { .mx-mentor-line .mini-btn { width: 100%; } }

/* ── news (out/css-parts/news.css) ── */
/* 확장 20 주간 학교 소식지 — 신문형(가는 선·각진 칸) 대신 게시판에 붙은 종이 카드 하나 + 굵은 제목 */
.mx-news-paper { padding: 16px 18px; }
.mx-news-title { font-size: clamp(0.95rem, 2.6vw, 1.1rem); font-weight: 800; color: var(--text-main); margin-bottom: 4px; }
.mx-news-sec { margin-top: 14px; }
.mx-news-head { font-size: 0.86rem; font-weight: 800; color: var(--brand); margin: 0 0 4px; }
.mx-news-sub { margin: 6px 0 2px; }
.mx-news-list { margin: 0; padding-left: 1.2em; font-size: 0.8rem; color: var(--text-sub); line-height: 1.8; }
.mx-news-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.mx-news-tabs .mini-btn { margin-top: 0; }
.mx-news-board .q-meta { overflow-wrap: anywhere; }
@media (max-width: 480px) { .mx-news-board .mini-btn { width: 100%; } .mx-news-paper { padding: 12px 14px; } }
