/* muhan.css — muhanwms 웹 화면 스타일. 무한상사 CI 2차 시안 S2 「딥네이비 사이드바 (Navy Rail)」(2026-10-15)
 * Design Ref: docs/02-design/features/2026-10-15-CI디자인개편.design.md v0.6 §5 — 토큰 표(§5.0)가 정본, 값은 :root 한 곳에서만 바꾼다.
 * 로드 순서: js/mktlist/mktlist.css(원본) → lib/material-symbols/v377/material-symbols.css(아이콘) → 이 파일(뒤에서 덮어쓴다, §J2.2) → 화면별 css(muhanMaster · Order · Inbound).
 * 알림 창 스타일은 js/alertDialog.js 가 첫 알림 때 head 끝에 싣는다(.ad-*) → §9 는 :root 를 붙여 특이도로 이긴다(!important 금지).
 * 화면별 css 가 뒤에 실려 같은 특이도면 그쪽이 이긴다 → 공통 모양을 꼭 입혀야 하는 곳(코드 칸 · 칸 카드)은 :root 나 부모 클래스로 한 단계 높인다.
 * 외부 CDN 없음(CSP default-src 'self') — 글꼴은 css/fonts 의 Pretendard(OFL) · 아이콘은 lib/material-symbols 의 Google Material Symbols(Apache 2.0, §0 · §5 아이콘).
 * CI 색: 남색 = 주색 계열, 노랑 = 레일 활성(진남색 위 10.9:1), 하늘 · 민트 = 로고 · 레일 포커스 · 무늬. 흰 바탕 글자로는 쓰지 않는다.
 * 구획: 0 글꼴 · 1 원시 토큰 · 2 의미 토큰 · 3 기존 이름 · 4 기본 · 5 컴포넌트 · 6 틀(Index — 레일 · 펼침 패널 · 상단 바) · 7 SubPage(카드) ·
 *       8 mktlist · 9 alertDialog · 10 로그인 · 11 인쇄 · 12 모션 · 13 반응형
 */

/* ── 0 글꼴 ───────────────────────────────────────────────────────── */
@font-face { font-family: "Pretendard"; font-weight: 400; font-display: swap; src: url(fonts/Pretendard-Regular.woff2) format("woff2"); }
@font-face { font-family: "Pretendard"; font-weight: 600; font-display: swap; src: url(fonts/Pretendard-SemiBold.woff2) format("woff2"); }
@font-face { font-family: "Pretendard"; font-weight: 700; font-display: swap; src: url(fonts/Pretendard-Bold.woff2) format("woff2"); }
/* 아이콘 글꼴(Material Symbols)은 lib/material-symbols/v377/material-symbols.css 가 싣는다 — 화면 틀이 이 파일보다 먼저 부른다(§5 아이콘) */

:root {
	/* ── 1 원시 토큰(램프 — 전문가2 02-color S2) — 화면 규칙은 아래 의미 토큰을 쓴다 ── */
	--mh-ci-navy: #223776;       /* CI 실측(워드마크 · 점) */
	--mh-ci-yellow: #FFE33A;
	--mh-ci-sky: #83C1EA;
	--mh-ci-mint: #73C6BE;
	--mh-ci-pink: #FFD7E2;       /* 가치 VARIOUS — 로그인 표어에만 */
	--mh-navy-50: #EEF2FC;  --mh-navy-100: #E8EEFB; --mh-navy-200: #C5D2F1; --mh-navy-300: #97ACE3; --mh-navy-400: #6383D3;
	--mh-navy-500: #3F66C8; --mh-navy-600: #2A4190; --mh-navy-700: var(--mh-ci-navy); --mh-navy-800: #1A2858; --mh-navy-900: #131C3D;
	--mh-gray-0: #FFFFFF;   --mh-gray-50: #F3F5F9;  --mh-gray-100: #E9ECF2; --mh-gray-200: #E1E5EC; --mh-gray-300: #C8CFDA;
	--mh-gray-400: #A4ADBC; --mh-gray-500: #8A93A3; --mh-gray-600: #4E5869; --mh-gray-700: #353E4E; --mh-gray-800: #18202F; --mh-gray-900: #0F1522;
	--mh-yellow-50: #FDFBEB; --mh-yellow-100: #FBF5CD; --mh-yellow-700: #926600; --mh-yellow-800: #754D00;

	/* ── 2 의미 토큰 ── */
	--mh-bg: var(--mh-gray-50);                   /* 화면 바탕(틀 · SubPage) */
	--mh-panel: #FFFFFF;                          /* 카드 · 상단 바 · 입력 */
	--mh-text: var(--mh-gray-800);                /* 흰 위 16.5 */
	--mh-text-2: var(--mh-gray-600);              /* 7.4 */
	--mh-text-3: #636C7D;                         /* placeholder 5.3 */
	--mh-border: #C9D0DA;                         /* 카드 테두리(그림자만으로 경계를 만들지 않는다) */
	--mh-border-soft: var(--mh-gray-100);         /* 카드 안 구분선 */
	--mh-line-input: var(--mh-gray-500);          /* 입력 · 보조 버튼 테두리 — 흰 위 3.2(1.4.11) */
	--mh-primary: var(--mh-navy-600);             /* 주 버튼 · 세그먼트 선택 · 선택 행 막대 · 링크 — 흰 글자 9.8 */
	--mh-primary-hover: var(--mh-navy-700);
	--mh-primary-active: var(--mh-navy-800);
	--mh-focus: var(--mh-navy-500);               /* 포커스 링(밝은 바탕) 5.4 */
	--mh-check: var(--mh-navy-500);               /* 체크박스 · 라디오 채움 — 주 버튼(navy-600)보다 한 단계 밝게(2026-10-16 사용자 「권한 체크박스 색이 너무 진함」) · 흰 바탕 5.4 */
	--mh-success: #0B7A55;  --mh-success-bg: #E6F6EF; --mh-success-line: #9FD8C0;
	--mh-warning: #8A5300;  --mh-warning-bg: #FFF4D6; --mh-warning-line: #EFCF7E;
	--mh-danger: #B4232F;   --mh-danger-bg: #FDECEE;  --mh-danger-line: #F2B9BF; --mh-danger-hover: #951C27;
	--mh-info: #245FA8;     --mh-info-bg: #E9F2FD;    --mh-info-line: #ADCDF2;
	--mh-row-hover: var(--mh-gray-50);
	--mh-row-selected: var(--mh-navy-100);
	--mh-row-checked: var(--mh-navy-50);
	--mh-row-dirty: var(--mh-yellow-50);
	--mh-row-dirty-selected: var(--mh-yellow-100);
	--mh-dirty-mark: var(--mh-yellow-700);
	/* 그리드(mktlist) 색 = LFMS 반출마감 대시보드(CY_CutDsh — js/cy/cyCommon.css, 배차닷컴 jqxGrid 실측) 와 같게(2026-10-16 사용자 지시 U10) */
	--mh-grid-head: #F7F7F7;                      /* 그리드 머리 바탕 · 폼 라벨 바탕(옛 #F7F8FA) */
	--mh-grid-head-text: #000000;                 /* 머리 글자 · 집계 줄 글자 */
	--mh-grid-head-line: #C5C5C5;                 /* 머리 아래 선 */
	--mh-grid-vline: #D9D9D9;                     /* 머리 칸 사이 세로선(D15 · U9 — 옛 #BCC4D0) */
	--mh-grid-band: #E5E5E5;                      /* 검색칸 줄 · 집계 줄 바탕 */
	--mh-grid-band-line: #CFCFCF;                 /* 검색칸 줄 세로선 · 아래 선 · 집계 줄 위 선 */
	--mh-grid-fin: #FFFFFF;                       /* 검색칸 테두리 — 회색 줄 위 흰 칸(옛 #7C8DA0 3.2:1) */
	--mh-grid-row-line: #E0E0E0;                  /* 행 사이 선 · 마지막 행 아래 선 */
	--mh-grid-border: #EFEFEF;                    /* 목록 바깥 테두리 */
	/* 레일(진남색) */
	--mh-rail-bg: var(--mh-navy-900);
	--mh-rail-text: #C3CBE0;                      /* 레일 위 9.6 */
	--mh-rail-icon: #8D98B8;                      /* 5.8 */
	--mh-rail-label: #8A95B8;
	--mh-rail-hover: rgba(255, 255, 255, .06);
	--mh-rail-act-bg: #24346E;
	--mh-rail-act: var(--mh-ci-yellow);           /* 활성 아이콘 · 막대 10.9 */
	--mh-rail-line: rgba(255, 255, 255, .08);
	--mh-rail-focus: var(--mh-ci-sky);
	--mh-tab-tray: var(--mh-gray-50);
	--mh-tab-act: #FFFFFF;
	--mh-on-dark: #FFFFFF;
	--mh-scrim: rgba(14, 26, 60, .45);            /* 모달 · 알림 · 서랍 막 */
	--mh-scrim-light: rgba(15, 21, 34, .06);      /* 펼침 패널 막(본문은 그대로 보인다) */
	--mh-busy-scrim: rgba(246, 247, 251, .7);
	--mh-auth-shade: rgba(19, 28, 61, .92);       /* 로그인 배경 그림 아래쪽 그늘(= navy-900) — 왼쪽 아래 문구가 컨베이어 위에서도 읽히게 */
	--mh-auth-divider: rgba(255, 255, 255, .28);  /* 로그인 왼쪽 위 「무한상사 │ 창고관리시스템」 구분선 */
	--mh-auth-glow: 0 2px 14px rgba(8, 14, 36, .6);   /* 그림 위 표어 글자 그늘 */
	--mh-toast-bg: var(--mh-navy-900);
	--mh-toast-ok: #5BD69A;
	--mh-toast-err: #FF8A80;
	--mh-shadow-xs: 0 1px 2px rgba(15, 21, 34, .06);
	--mh-shadow-pop: 0 8px 24px rgba(14, 26, 60, .16);
	--mh-shadow-raised: 0 1px 2px rgba(14, 26, 60, .06), 0 16px 40px rgba(14, 26, 60, .18);
	/* 크기 */
	--mh-rail-w: 72px;
	--mh-flyout-w: 260px;
	--mh-top-h: 52px;     /* 상단 바(탭 줄 포함) */
	--mh-ctl-h: 32px;
	--mh-row-h: 36px;
	--mh-radius: 6px;
	--mh-radius-card: 8px;
	--mh-gap: 10px;       /* 화면 바깥 여백 · 카드 사이 */
	--mh-font: "Pretendard", "Malgun Gothic", "맑은 고딕", -apple-system, system-ui, sans-serif;

	/* ── 3 기존 이름(화면 · 화면별 css 가 쓰는 이름 — 값만 새 토큰) ── */
	--mh-navy: var(--mh-navy-700);
	--mh-blue: var(--mh-primary);
	--mh-blue-soft: var(--mh-navy-100);
	--mh-red: var(--mh-danger);
	--mh-green: var(--mh-success);
	--mh-muted: var(--mh-text-2);
	--mh-label-bg: var(--mh-grid-head);
	--mh-sky-50: var(--mh-info-bg);
	--mh-sky-200: var(--mh-info-line);
	--mh-sky-700: var(--mh-info);
	--mh-chip-ok-bg: var(--mh-success-bg);   --mh-chip-ok-fg: var(--mh-success);   --mh-chip-ok-line: var(--mh-success-line);
	--mh-chip-bad-bg: var(--mh-danger-bg);   --mh-chip-bad-fg: var(--mh-danger);   --mh-chip-bad-line: var(--mh-danger-line);
	--mh-chip-warn-bg: var(--mh-warning-bg); --mh-chip-warn-fg: var(--mh-warning); --mh-chip-warn-line: var(--mh-warning-line);
	--mh-shadow-sm: var(--mh-shadow-xs);
	--mh-shadow-md: var(--mh-shadow-pop);
	--mh-shadow-lg: var(--mh-shadow-raised);
}
/* 촘촘 보기(선택) — <html data-density="compact"> */
:root[data-density="compact"] { --mh-row-h: 32px; --mh-ctl-h: 28px; }

/* ── 4 기본 ───────────────────────────────────────────────────────── */
* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; height: 100%; }
body { font-family: var(--mh-font); font-size: 13px; color: var(--mh-text); background: var(--mh-bg); }
[hidden] { display: none !important; }
button, input, select, textarea { font-family: inherit; font-size: 13px; color: inherit; }
::placeholder { color: var(--mh-text-3); opacity: 1; }

/* =====================================================================
   5 컴포넌트 — 아이콘 · 버튼 · 아이콘 버튼 · 입력 · 처리 중 · 모달 · 토스트 · 상태 칩
   ===================================================================== */
/* 아이콘 — Google Material Symbols Outlined · 400 · FILL 0 · GRAD 0 · 24(공통 규칙 §4.4). 글꼴 · 기본 모양 · .ms-20 · .ms-18 은
   lib/material-symbols/v377/material-symbols.css(규칙 샘플 그대로 — 고치지 않는다). html <span class="material-symbols-outlined" aria-hidden="true">search</span>,
   JS 는 common.js msIcon('search'). 크기는 기본 24 · 버튼 · 입력칸 안 20 · 표 · 작은 버튼 18 — 자리마다 아래 각 구획에서 정한다.
   아이콘이 <span> 이라 「> span」 으로 이름 글자를 고르는 규칙은 :not(.material-symbols-outlined) 를 붙인다 */
.material-symbols-outlined { flex: 0 0 auto; }
/* CSS 로 붙이는 아이콘(::before — 칩 · 알림 버튼 · 로그인 상태)의 글꼴. letter-spacing 이 0 이 아니면 브라우저가 합자를 끄므로 늘 normal */
.mh-chip::before, :root .ad-btn::before, .mh-auth-state::before, .mh-auth-confirm p::before,
.mh-auth-rule li.is-ok::before, .mh-auth-hint.is-ok::before, .mh-auth-hint.is-err::before {
	font-family: "Material Symbols Outlined"; font-weight: normal; font-style: normal; line-height: 1; letter-spacing: normal; text-transform: none;
	white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; }
.mh-spin { animation: mh-spin 1s linear infinite; }                        /* 처리 중 아이콘(progress_activity) 회전 */
@keyframes mh-spin { to { transform: rotate(360deg); } }

.mh-btn {
	display: inline-flex; align-items: center; justify-content: center; gap: 6px;
	height: var(--mh-ctl-h); padding: 0 12px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius);
	background: var(--mh-panel); color: var(--mh-text); cursor: pointer; white-space: nowrap; font-weight: 600;
}
.mh-btn:hover { background: var(--mh-gray-50); border-color: var(--mh-gray-600); }
.mh-btn:active { background: var(--mh-gray-100); }
.mh-btn:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 2px; }
.mh-btn:disabled { background: var(--mh-gray-100); border-color: var(--mh-gray-200); color: var(--mh-gray-500); cursor: not-allowed; }
.mh-btn--primary { background: var(--mh-primary); border-color: var(--mh-primary); color: var(--mh-on-dark); }
.mh-btn--primary:hover { background: var(--mh-primary-hover); border-color: var(--mh-primary-hover); }
.mh-btn--primary:active { background: var(--mh-primary-active); border-color: var(--mh-primary-active); }
.mh-btn--danger { border-color: var(--mh-danger-line); color: var(--mh-danger); }
.mh-btn--danger:hover { background: var(--mh-danger-bg); border-color: var(--mh-danger); }
.mh-btn--sm { height: 28px; padding: 0 10px; gap: 5px; font-size: 12.5px; }
.mh-btn--link { height: auto; border: none; background: none; color: var(--mh-primary); padding: 0 4px; }   /* 글자 높이만 — 목록 칸에서 행을 키우지 않는다(§8) */
.mh-btn--link:hover { background: none; text-decoration: underline; }
.mh-btn .material-symbols-outlined { font-size: 20px; }
.mh-btn--sm .material-symbols-outlined { font-size: 18px; }
/* 아이콘 버튼(상단 바 · 패널 머리 — 글자 없음, title · aria-label 필수: D10) */
.mh-ibtn { position: relative; flex: 0 0 auto; width: 34px; height: 34px; display: inline-grid; place-items: center; padding: 0; border: 0; border-radius: 8px;
	background: transparent; color: var(--mh-text-2); cursor: pointer; }
.mh-ibtn .material-symbols-outlined { font-size: 20px; }
.mh-ibtn:hover { background: var(--mh-gray-100); color: var(--mh-text); }
.mh-ibtn:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 2px; }
.mh-ibtn[aria-pressed="true"] { background: var(--mh-navy-50); color: var(--mh-primary); }

/* 입력 */
.mh-input, :is(.mh-page, .mh-modal) input[type="text"], :is(.mh-page, .mh-modal) input[type="password"], :is(.mh-page, .mh-modal) input[type="date"],
:is(.mh-page, .mh-modal) input[type="number"], :is(.mh-page, .mh-modal) input[type="search"], :is(.mh-page, .mh-modal) select, :is(.mh-page, .mh-modal) textarea {
	height: var(--mh-ctl-h); padding: 0 10px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius); background: var(--mh-panel);
	color: var(--mh-text); min-width: 0; font-variant-numeric: tabular-nums;
}
:is(.mh-page, .mh-modal) input[type="date"] { padding-right: 6px; }
:is(.mh-page, .mh-modal) textarea { height: auto; padding: 6px 10px; line-height: 1.5; }
.mh-input:focus, :is(.mh-page, .mh-modal) input:focus, :is(.mh-page, .mh-modal) select:focus, :is(.mh-page, .mh-modal) textarea:focus {
	outline: 2px solid var(--mh-focus); outline-offset: 1px; border-color: var(--mh-focus); }
:is(.mh-page, .mh-modal) input[readonly] { background: var(--mh-gray-50); color: var(--mh-text-2); }
:is(.mh-page, .mh-modal) :is(input, select, textarea):disabled { background: var(--mh-gray-100); color: var(--mh-gray-500); }
:is(.mh-page, .mh-modal) [aria-invalid="true"] { border-color: var(--mh-danger); box-shadow: inset 0 0 0 1px var(--mh-danger); background: var(--mh-danger-bg); }
:is(.mh-page, .mh-modal) input[type="checkbox"], :is(.mh-page, .mh-modal) input[type="radio"] { width: 16px; height: 16px; margin: 0; accent-color: var(--mh-check); vertical-align: middle; }

/* 코드 칸 [명칭 | 🔍 | ×] 한 덩어리(D14 · 공통 규칙 §4.3 — 명칭 칸을 누르면 검색 모달, js/muhanMaster.js mhPicker).
   배치 · 폭은 muhanMaster.css(뒤에 실림) — 모양만 :root 로 한 단계 높여 덮는다 */
:root .mh-picker { gap: 0; height: var(--mh-ctl-h); border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius); background: var(--mh-panel); overflow: hidden; }
:root .mh-picker:focus-within { outline: 2px solid var(--mh-focus); outline-offset: 1px; border-color: var(--mh-focus); }
:root :is(.mh-page, .mh-modal) .mh-picker input[type="text"] { height: 100%; border: 0; border-radius: 0; outline: none; background: transparent; }
:root :is(.mh-page, .mh-modal) .mh-picker input.mh-picker-off { background: var(--mh-gray-100); }
:root :is(.mh-page, .mh-modal) .mh-picker .mh-btn { height: 100%; padding: 0 9px; border: 0; border-left: 1px solid var(--mh-border-soft); border-radius: 0; background: transparent; color: var(--mh-text-2); }
:root :is(.mh-page, .mh-modal) .mh-picker .mh-btn:hover { background: var(--mh-gray-100); color: var(--mh-text); }
:root :is(.mh-page, .mh-modal) .mh-picker .mh-btn:disabled { background: var(--mh-gray-50); color: var(--mh-gray-400); }

/* 처리 중(common.js muhanBusy — 공통 규칙 §4.8) — 요청마다 바로 보이고 클릭 · 키를 막는다. 빨리 끝나도 막과 상자를 함께 최소 0.4초(MUHAN_BUSY_MIN_MS, 2026-10-21 사용자 지적
   「조회되었는지 구분이 안됨」 · 「… 같이 사라지게」) 두었다가 한 번에 걷는다. z-index: 모달 1050 < 처리 중 2000 < 토스트 2100, 알림 창(<dialog>)은 top layer 라 늘 위 */
.mh-busy { position: fixed; inset: 0; z-index: 2000; background: var(--mh-busy-scrim); display: flex; align-items: center; justify-content: center; outline: none; cursor: progress;
	animation: mh-fade-in .12s ease-out both; }
.mh-busy-box { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; min-width: 168px; min-height: 96px; padding: 16px 22px;
	background: var(--mh-panel); border-radius: 12px; box-shadow: var(--mh-shadow-raised); color: var(--mh-text-2); font-weight: 600; }
.mh-busy-box .material-symbols-outlined { color: var(--mh-primary); }
@keyframes mh-fade-in { from { opacity: 0; } to { opacity: 1; } }

/* 모달(js/muhanModal.js · html/Modal_{이름}.html)
   z-index: 모달 1050 < 처리 중(2000) < 토스트(2100). 알림 창(<dialog>.showModal)은 top layer 라 늘 맨 위 */
.mh-modal { position: fixed; inset: 0; z-index: 1050; display: flex; align-items: flex-start; justify-content: center; padding: 8vh 16px 16px;
	background: var(--mh-scrim); overflow: auto; }
.mh-modal-dlg { display: flex; flex-direction: column; width: 100%; max-width: 640px; max-height: 84vh; background: var(--mh-panel); border-radius: 12px;
	box-shadow: var(--mh-shadow-raised); outline: none; }
.mh-modal-dlg--sm { max-width: 420px; }
.mh-modal-dlg--lg { max-width: 960px; }
/* 높이 고정 모달(.mh-modal-dlg--fill — 탭 · 목록이 있는 모달, 2026-10-27 「각 탭별로 모달높이를 고정하고 그리드는 모달사이즈에 맞게」):
   높이 = 최대 높이라 탭을 바꿔도 모달 크기가 그대로다. 본문은 세로 flex — 탭 칸(또는 본문에 바로 놓인 목록)이 남은 높이를 채우고,
   그 안 목록(.mkl)은 칸을 끝까지 채워 본문만 스크롤한다(합계 · 건수 줄 = 모달 바닥 쪽). 입력칸이 넘치는 탭(좁은 창)은 그 탭 칸 안에서 스크롤 */
.mh-modal-dlg--fill { height: 84vh; }
.mh-modal-dlg--fill > .mh-modal-body { display: flex; flex-direction: column; gap: 8px; overflow: hidden; }
.mh-modal-dlg--fill > .mh-modal-body > * { flex: 0 0 auto; }
.mh-modal-dlg--fill > .mh-modal-body > .mh-tabpane { flex: 1 1 auto; min-height: 0; overflow: auto; gap: 8px; }
.mh-modal-dlg--fill :is(.mh-modal-body, .mh-tabpane) > .mkl { flex: 1 1 auto; min-height: 160px; }
.mh-modal-dlg--fill :is(.mh-modal-body, .mh-tabpane) > .mkl:not(.mkl--mobile) .mkl-body { flex: 1 1 auto; max-height: none; }
/* 모든 모달 = 머리 오른쪽 위 X + 발 [닫기](2026-10-19 사용자 지시 — L0 R5-MODAL 이 html 마다 검사). X 는 제목 뒤 · margin-left auto 로 오른쪽 끝 */
.mh-modal-head { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; min-height: 52px; padding: 8px 12px 8px 20px; border-bottom: 1px solid var(--mh-border-soft); }
.mh-modal-title { margin: 0; font-size: 16px; font-weight: 600; color: var(--mh-text); }
.mh-modal-x { margin-left: auto; flex: 0 0 auto; width: 32px; height: 32px; border: none; border-radius: 8px; background: none; color: var(--mh-text-2); font-size: 16px; line-height: 1; cursor: pointer; }
.mh-modal-x:hover { background: var(--mh-gray-100); color: var(--mh-text); }
.mh-modal-x:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 1px; }
.mh-modal-body { flex: 1 1 auto; min-height: 0; overflow: auto; padding: 16px 20px; }
.mh-modal-desc { margin: 0 0 12px; color: var(--mh-text-2); line-height: 1.6; }
.mh-modal-msg { min-height: 18px; margin: 10px 0 0; color: var(--mh-danger); font-size: 13px; line-height: 1.5; }
.mh-modal-msg:empty { min-height: 0; margin: 0; }
.mh-modal-foot { flex: 0 0 auto; display: flex; justify-content: flex-end; gap: 8px; padding: 12px 20px; border-top: 1px solid var(--mh-border-soft);
	background: var(--mh-grid-head); border-radius: 0 0 12px 12px; }
/* 모달 입력 목록(mktlist + 셀 입력칸 — muhanList.js mklCellIn, 2026-10-19 가상화). 목록 본문만 스크롤해야 보이는 행만 그린다 —
   원본 변수 --mkl-body-max-height 로 본문 높이를 묶는다(모달은 .mh-page 밖이라 그 규칙의 max-height: none 이 안 걸린다). 영역 CSS 없이도 같게 공통에.
   new MktList('#X') 는 그 상자에 .mkl 을 붙인다 → .mh-ilist 와 .mkl 은 같은 요소(.mh-ilist.mkl — 자손 선택자로 쓰면 안 걸린다) */
.mh-ilist.mkl { --mkl-body-max-height: min(40vh, 360px); }
.mh-ilist.mkl:not(.mkl--mobile) .mkl-td:has(> input, > .mh-ilist-cell, > .mh-btn) { padding: 3px 4px; }
.mh-ilist .mkl-td > input[type="text"], .mh-ilist .mkl-td > input[type="number"] { width: 100%; min-width: 0; height: 28px; }
.mh-ilist .mkl-td > input[type="number"] { text-align: right; }
.mh-ilist .mh-ilist-cell { display: flex; align-items: center; gap: 4px; min-width: 0; }
.mh-ilist .mh-ilist-cell > span { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-size: 12px; color: var(--mh-text-2); }
.mh-fgrid.mh-fgrid--1 { grid-template-columns: minmax(0, 1fr); }   /* .mh-fgrid(2열)가 뒤에 있어 두 클래스로 */
@media (max-width: 600px) {
	.mh-modal { padding: 12px; }
	.mh-modal-dlg { max-height: calc(100vh - 24px); }
	.mh-modal-dlg--fill { height: calc(100vh - 24px); }
}

/* 토스트(js/common.js muhanToast — 저장 성공 등 클릭이 필요 없는 알림) — 어두운 카드 */
.mh-toasts { position: fixed; right: 16px; bottom: 16px; z-index: 2100; display: flex; flex-direction: column; align-items: flex-end; gap: 8px; pointer-events: none; }
.mh-toast { pointer-events: auto; display: flex; align-items: center; gap: 10px; min-width: 220px; max-width: 420px; padding: 10px 16px 10px 14px;
	background: var(--mh-toast-bg); color: var(--mh-on-dark); border-radius: 10px; box-shadow: var(--mh-shadow-raised);
	font-weight: 600; line-height: 1.45; white-space: pre-line; animation: mh-toast-in .18s ease-out; }
.mh-toast .material-symbols-outlined { font-size: 20px; color: var(--mh-toast-ok); }
.mh-toast--info .material-symbols-outlined { color: var(--mh-ci-sky); }
.mh-toast--warning .material-symbols-outlined { color: var(--mh-ci-yellow); }
.mh-toast--error .material-symbols-outlined { color: var(--mh-toast-err); }
@keyframes mh-toast-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* 상태 칩(js/muhanList.js muhanChipClass — mh-chip--{코드}). 알약 · 색 + 아이콘(::before) + 글자. .mh-tgl(토글 칩)과 다른 것 */
.mh-chip { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 9px; border: 1px solid transparent; border-radius: 11px;
	font-size: 12px; font-weight: 600; line-height: 1; background: var(--mh-gray-100); color: var(--mh-text-2); white-space: nowrap; vertical-align: middle; }
.mh-chip::before { font-size: 18px; }                                    /* 표 안 18(공통 §4.4) — 글꼴은 §5 첫머리 공통 규칙 */
.mh-chip--Y { background: var(--mh-chip-ok-bg); color: var(--mh-chip-ok-fg); border-color: var(--mh-chip-ok-line); }
.mh-chip--Y::before { content: "check"; }
.mh-chip--N { background: var(--mh-panel); color: var(--mh-text-2); border-color: var(--mh-gray-300); }
.mh-chip--N::before { content: "pause"; }
.mh-chip--LCK { background: var(--mh-chip-bad-bg); color: var(--mh-chip-bad-fg); border-color: var(--mh-chip-bad-line); }
.mh-chip--LCK::before { content: "lock"; }
.mh-chip--PWD, .mh-chip--UPD, .mh-chip--UPL { background: var(--mh-chip-warn-bg); color: var(--mh-chip-warn-fg); border-color: var(--mh-chip-warn-line); }
.mh-chip--PWD::before { content: "key"; }
.mh-chip--UPD::before { content: "edit"; }
.mh-chip--UPL::before { content: "upload_file"; }
.mh-chip--VEW, .mh-chip--LST { background: var(--mh-navy-50); color: var(--mh-primary); border-color: var(--mh-navy-200); }
.mh-chip--VEW::before { content: "visibility"; }
.mh-chip--LST::before { content: "list"; }
.mh-chip--XLS, .mh-chip--PRT { background: var(--mh-info-bg); color: var(--mh-info); border-color: var(--mh-info-line); }
.mh-chip--XLS::before { content: "download"; }
.mh-chip--PRT::before { content: "print"; }

/* =====================================================================
   6 틀(Index) — 왼쪽 레일 72 + 펼침 패널 260(inc_left) · 상단 바 52(탭 줄 index + inc_top) · 화면(iframe)   Design Ref: §5.1
   ===================================================================== */
.mh-index { display: flex; height: 100vh; overflow: hidden; background: var(--mh-bg); }

/* 레일 + 펼침 패널 — 패널은 본문 위로 겹친다(.mh-left--fly). 📌 고정(.mh-left--pin)이면 본문을 민다 */
.mh-left { position: relative; z-index: 1150; flex: 0 0 auto; display: flex; height: 100%; }
.mh-rail { flex: 0 0 var(--mh-rail-w); width: var(--mh-rail-w); height: 100%; display: flex; flex-direction: column; align-items: center; padding: 0 0 10px;
	background: var(--mh-rail-bg); color: var(--mh-rail-text); overflow-x: hidden; overflow-y: auto; scrollbar-width: none; -webkit-font-smoothing: antialiased; }
.mh-rail::-webkit-scrollbar { display: none; }
.mh-rail-logo { flex: 0 0 60px; width: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; margin-bottom: 6px;
	border-bottom: 1px solid var(--mh-rail-line); color: var(--mh-on-dark); font-size: 12px; font-weight: 600; letter-spacing: -.01em;
	border-width: 0 0 1px; background: none; padding: 0; font-family: inherit; cursor: pointer; }   /* 버튼(홈으로 — 2026-10-20 대시보드) */
.mh-rail-logo:hover { background: var(--mh-rail-hover); }
.mh-rail-logo:focus-visible { outline: 2px solid var(--mh-rail-focus); outline-offset: -2px; }
.mh-rail-logo img { display: block; width: 32px; height: 22px; }
.mh-rail-list { display: flex; flex-direction: column; gap: 2px; }
.mh-rail-btn { position: relative; flex: 0 0 auto; width: 64px; min-height: 52px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px;
	padding: 6px 2px; border: 0; border-radius: 8px; background: transparent; color: var(--mh-rail-text); font: 500 12px/1.15 var(--mh-font); text-align: center;
	word-break: keep-all; cursor: pointer; }
.mh-rail-btn .material-symbols-outlined { color: var(--mh-rail-icon); }
.mh-rail-btn > span:not(.material-symbols-outlined) { max-width: 100%; overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }   /* 긴 이름은 두 줄까지(짧은 이름 — inc_left muhanRailName) */
.mh-rail-btn:hover, .mh-rail-btn[aria-expanded="true"] { background: var(--mh-rail-hover); color: var(--mh-on-dark); }
.mh-rail-btn:hover .material-symbols-outlined, .mh-rail-btn[aria-expanded="true"] .material-symbols-outlined { color: var(--mh-ci-sky); }
.mh-rail-btn.on { background: var(--mh-rail-act-bg); color: var(--mh-on-dark); font-weight: 600; }                        /* 지금 탭의 대분류 */
.mh-rail-btn.on .material-symbols-outlined { color: var(--mh-rail-act); }
.mh-rail-btn.on::before { content: ""; position: absolute; left: -4px; top: 14px; bottom: 14px; width: 3px; border-radius: 0 2px 2px 0; background: var(--mh-rail-act); }
.mh-rail-btn:focus-visible { outline: 2px solid var(--mh-rail-focus); outline-offset: -2px; }
.mh-rail-ver { margin-top: auto; padding-top: 10px; display: flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 500; letter-spacing: .08em; color: var(--mh-rail-label); }
.mh-rail-ver::before { content: ""; width: 5px; height: 5px; background: currentColor; }
@media (max-height: 699px) {   /* 1366×768 의 실제 창 높이(≈640) — 칸을 줄이고 버전을 숨긴다. 그래도 넘치면 레일만 세로 스크롤 */
	.mh-rail-logo { flex-basis: 56px; gap: 4px; }
	.mh-rail-btn { min-height: 48px; gap: 4px; }
	.mh-rail-ver { display: none; }
}

.mh-flyout { position: absolute; top: 0; bottom: 0; left: var(--mh-rail-w); width: var(--mh-flyout-w); display: none; flex-direction: column;
	background: var(--mh-panel); border-right: 1px solid var(--mh-border); box-shadow: var(--mh-shadow-pop); }
.mh-left--fly .mh-flyout, .mh-left--pin .mh-flyout { display: flex; }
.mh-left--pin .mh-flyout { position: static; box-shadow: none; }
.mh-flyout-head { flex: 0 0 var(--mh-top-h); display: flex; align-items: center; gap: 2px; padding: 0 8px 0 16px; border-bottom: 1px solid var(--mh-border-soft); }
.mh-flyout-title { flex: 1 1 auto; min-width: 0; margin: 0; font-size: 15px; font-weight: 600; color: var(--mh-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mh-flyout-head .mh-ibtn { width: 30px; height: 30px; }
.mh-flyout-head .mh-ibtn .material-symbols-outlined { font-size: 20px; }
.mh-menu { flex: 1 1 auto; min-height: 0; overflow-y: auto; padding: 6px 8px; }
.mh-menu-items { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 1px; }
.mh-menu-item { position: relative; width: 100%; height: 36px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border: none; border-radius: 6px;
	background: none; color: var(--mh-text); font: inherit; text-align: left; cursor: pointer; }
.mh-menu-item .material-symbols-outlined { font-size: 20px; color: var(--mh-text-2); }
.mh-menu-label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mh-menu-item:hover { background: var(--mh-gray-50); }
.mh-menu-item.on { background: var(--mh-navy-50); color: var(--mh-navy); font-weight: 600; }
.mh-menu-item.on .material-symbols-outlined { color: var(--mh-primary); }
.mh-menu-item.on::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 0 2px 2px 0; background: var(--mh-primary); }
.mh-menu-item.open::after { content: ""; flex: 0 0 6px; height: 6px; border-radius: 50%; background: var(--mh-primary); }   /* 열려 있는 화면 */
.mh-menu-item:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: -2px; }
.mh-menu-empty { padding: 14px; color: var(--mh-text-2); line-height: 1.6; }
.mh-flyout-tip { flex: 0 0 auto; margin: 0; padding: 10px 16px 14px; border-top: 1px solid var(--mh-border-soft); font-size: 12px; line-height: 1.6; color: var(--mh-text-2); }
.mh-flyout-tip .is-pin, .mh-left--pin .mh-flyout-tip .is-fly { display: none; }
.mh-left--pin .mh-flyout-tip .is-pin { display: inline; }

/* 막 — 좁은 화면 서랍(진한 막) · 펼침 패널(옅은 막, 레일 오른쪽만). index.html muhanScrimSync */
.mh-drawer-scrim { position: fixed; inset: 0; z-index: 1140; background: var(--mh-scrim); }
.mh-drawer-scrim.is-light { left: var(--mh-rail-w); background: var(--mh-scrim-light); }

/* 가운데 — 상단 바(탭 줄 + inc_top) · 화면 */
.mh-center { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }
.mh-top { position: relative; z-index: 1100; flex: 0 0 var(--mh-top-h); display: flex; align-items: center; gap: 10px; padding: 0 14px 0 12px;
	background: var(--mh-panel); border-bottom: 1px solid var(--mh-gray-200); }
.mh-top #mh_menuFold { display: none; order: -1; }   /* ☰ 은 좁은 화면(서랍)에서만 — §13 */
/* 열린 화면 탭 줄(반응형 — 2026-10-15): 탭 이름은 줄이지도 「…」로 자르지도 않는다(2026-10-15 사용자 지시). 넘치면 탭 줄을 가로로 굴린다
   (스크롤바는 숨김 — 휠 · 손가락 · 고른 탭 보이기 · [열린 화면 N ▾] 목록으로 옮긴다). 동작은 index.html muhanTabsFit · muhanTabMenu */
.mh-tabsrow { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 8px; }
.mh-tabs { flex: 0 1 auto; min-width: 0; display: flex; gap: 2px; padding: 3px; background: var(--mh-tab-tray); border-radius: 10px;
	overflow-x: auto; overflow-y: hidden; scrollbar-width: none; }
.mh-tabs::-webkit-scrollbar { display: none; }
.mh-tabs.is-drag, .mh-tabs.is-drag .mh-tab { cursor: grabbing; }   /* 끌어서 좌우 이동 중(index.html) */
.mh-tabs:empty { display: none; }
.mh-tab { position: relative; flex: 0 0 auto; height: 32px; display: inline-flex; align-items: center; gap: 6px;
	padding: 0 4px 0 10px; border: 1px solid transparent; border-radius: 8px; color: var(--mh-text-2); white-space: nowrap; cursor: pointer; user-select: none; }
.mh-tab.on { background: var(--mh-tab-act); border-color: var(--mh-gray-300); color: var(--mh-text); font-weight: 600; box-shadow: var(--mh-shadow-xs); }
.mh-tab > .material-symbols-outlined { font-size: 18px; color: var(--mh-gray-500); }
.mh-tab.on > .material-symbols-outlined { color: var(--mh-primary); }
.mh-tab > span:not(.material-symbols-outlined) { flex: 0 0 auto; }
.mh-tab:hover { background: var(--mh-gray-100); color: var(--mh-text); }
.mh-tab.on:hover { background: var(--mh-tab-act); }
.mh-tab-x { flex: 0 0 auto; width: 20px; height: 20px; display: inline-grid; place-items: center; padding: 0; border: none; border-radius: 5px; background: none;
	color: var(--mh-text-2); cursor: pointer; line-height: 1; font-size: 11px; }
.mh-tab-x .material-symbols-outlined { font-size: 18px; }
.mh-tab-x:hover { background: var(--mh-gray-200); color: var(--mh-text); }
.mh-tab-x:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 0; }
.mh-tab:not(.on):not(:hover):not(:focus-within) > .mh-tab-x { visibility: hidden; }   /* 고르지 않은 탭은 올리면 × (자리는 그대로 — 폭이 흔들리지 않게) */
/* [열린 화면 N ▾] — 넘치거나 휴대폰일 때만(index.html). 목록은 단추 오른쪽 끝에 맞춰 아래로 */
.mh-tabmore-wrap { position: relative; flex: 0 0 auto; display: flex; }
.mh-tabmore { flex: 0 0 auto; height: 34px; display: inline-flex; align-items: center; gap: 6px; padding: 0 8px 0 10px; border: 1px solid var(--mh-gray-300); border-radius: 8px;
	background: var(--mh-panel); color: var(--mh-text); font: inherit; font-weight: 500; cursor: pointer; white-space: nowrap; }
.mh-tabmore[hidden] { display: none; }
.mh-tabmore:hover { background: var(--mh-gray-50); }
.mh-tabmore[aria-expanded="true"] { background: var(--mh-navy-50); border-color: var(--mh-navy-300); color: var(--mh-navy); }
.mh-tabmore:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 1px; }
.mh-tabmore > .material-symbols-outlined { font-size: 18px; color: var(--mh-text-2); }
.mh-tabmore b { min-width: 22px; height: 20px; padding: 0 6px; border-radius: 10px; background: var(--mh-primary); color: var(--mh-on-dark); font-size: 12px; font-weight: 600;
	line-height: 20px; text-align: center; font-variant-numeric: tabular-nums; }
.mh-tabmenu { position: absolute; z-index: 1300; top: calc(100% + 8px); right: 0; width: min(300px, calc(100vw - 16px)); max-height: min(60vh, 420px); overflow: auto; padding: 4px 0;
	background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: 8px; box-shadow: var(--mh-shadow-pop); }
.mh-tabmenu[hidden] { display: none; }
.mh-tabmenu-row { display: flex; align-items: center; padding-right: 6px; }
.mh-tabmenu-row.on { background: var(--mh-navy-50); box-shadow: inset 3px 0 0 var(--mh-primary); }
.mh-tabmenu-go { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 10px; height: 36px; padding: 0 12px 0 14px; border: none; background: none;
	color: var(--mh-text); font: inherit; text-align: left; cursor: pointer; }
.mh-tabmenu-go > .material-symbols-outlined { font-size: 18px; color: var(--mh-text-2); }
.mh-tabmenu-go > span:not(.material-symbols-outlined) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mh-tabmenu-row.on .mh-tabmenu-go { color: var(--mh-navy); font-weight: 600; }
.mh-tabmenu-row.on .mh-tabmenu-go > .material-symbols-outlined { color: var(--mh-primary); }
.mh-tabmenu-go:hover, .mh-tabmenu-go:focus-visible { background: var(--mh-gray-50); outline: none; }
.mh-tabmenu-go:focus-visible { box-shadow: inset 0 0 0 2px var(--mh-focus); }
.mh-tabmenu-foot { display: grid; gap: 6px; margin-top: 4px; padding: 6px 8px 2px; border-top: 1px solid var(--mh-border-soft); }
.mh-tabmenu-foot button { width: 100%; height: 32px; border: 1px solid var(--mh-danger-line); border-radius: 6px; background: var(--mh-panel); color: var(--mh-danger); font: inherit; font-size: 12.5px; font-weight: 600; cursor: pointer; }
.mh-tabmenu-foot button:hover { background: var(--mh-danger-bg); border-color: var(--mh-danger); }
.mh-tabmenu-foot button:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 1px; }

/* 상단 바 오른쪽(inc_top) — 화면 찾기 · 사용자 · 🔑 · ⎋(아이콘만, D10) */
.mh-top-sep { flex: 0 0 1px; height: 24px; background: var(--mh-gray-200); }
.mh-user { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.mh-avatar { flex: 0 0 30px; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; background: var(--mh-navy-100); color: var(--mh-navy);
	font-size: 13px; font-weight: 600; }
.mh-user-txt { display: flex; flex-direction: column; line-height: 1.25; }
.mh-user-name { font-size: 13px; font-weight: 600; color: var(--mh-text); }
.mh-fra { font-size: 12px; color: var(--mh-text-2); }
.mh-fra:empty { display: none; }
.mh-tbtns { flex: 0 0 auto; display: flex; gap: 2px; }
/* 화면 찾기 팝업(inc_top muhanFindOpen — 🔍 · Ctrl+K) */
.mh-findbox { position: fixed; z-index: 1350; top: calc(var(--mh-top-h) + 6px); right: 14px; width: min(380px, calc(100vw - 24px)); max-height: min(70vh, 460px);
	display: flex; flex-direction: column; background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: 10px; box-shadow: var(--mh-shadow-raised); }
.mh-findbox[hidden] { display: none; }
.mh-findbox-in { flex: 0 0 auto; display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-bottom: 1px solid var(--mh-border-soft); color: var(--mh-text-2); }
.mh-findbox-in input { flex: 1 1 auto; min-width: 0; height: 34px; padding: 0 10px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius); background: var(--mh-panel); color: var(--mh-text); }
.mh-findbox-in input:focus { outline: 2px solid var(--mh-focus); outline-offset: 1px; border-color: var(--mh-focus); }
.mh-findlist { flex: 1 1 auto; min-height: 0; overflow-y: auto; list-style: none; margin: 0; padding: 4px; }
.mh-find-row { width: 100%; height: 38px; display: flex; align-items: center; gap: 10px; padding: 0 10px; border: 0; border-radius: 6px; background: none; color: var(--mh-text);
	font: inherit; text-align: left; cursor: pointer; }
.mh-find-row .material-symbols-outlined { font-size: 18px; color: var(--mh-text-2); }
.mh-find-row > span:not(.material-symbols-outlined) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mh-find-row small { flex: 0 0 auto; margin-left: auto; color: var(--mh-text-2); font-size: 12px; }
.mh-find-row:hover, .mh-find-row.is-cur { background: var(--mh-navy-50); }
.mh-find-row.is-cur { box-shadow: inset 3px 0 0 var(--mh-primary); }
.mh-find-empty { padding: 14px; color: var(--mh-text-2); }

.mh-panes { flex: 1 1 auto; position: relative; min-height: 0; background: var(--mh-bg); }
.mh-pane { position: absolute; inset: 0; }
.mh-pane iframe { width: 100%; height: 100%; border: 0; display: block; }
.mh-welcome { position: absolute; inset: 0; }   /* 홈(열린 탭을 고르지 않았을 때) — 대시보드 #mh_home · 안내 #mh_welcomeEmpty 는 css/muhanHome.css */
.mh-welcome[hidden] { display: none; }

/* =====================================================================
   7 SubPage — 회색 바탕 위 칸마다 흰 카드(D13): 제목줄 + 조회조건 = 한 카드 · 목록 칸 · 상세 카드   Design Ref: §5.2
   ===================================================================== */
.mh-sub { background: var(--mh-bg); }
.mh-page { display: flex; flex-direction: column; height: 100vh; min-height: 0; overflow: hidden; padding: var(--mh-gap); }
.mh-titlebar { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; min-height: 52px; padding: 5px 10px 5px 14px;
	background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: var(--mh-radius-card); box-shadow: var(--mh-shadow-xs); }
.mh-page:has(> .mh-content > .mh-search) > .mh-titlebar { border-bottom-color: var(--mh-border-soft); border-radius: var(--mh-radius-card) var(--mh-radius-card) 0 0; box-shadow: none; }
.mh-title { margin: 0; display: flex; align-items: center; gap: 10px; min-width: 0; font-size: 18px; font-weight: 700; letter-spacing: -.01em; color: var(--mh-text); white-space: nowrap; }
.mh-title > .material-symbols-outlined { flex: 0 0 30px; width: 30px; height: 30px; display: grid; place-items: center; border-radius: 8px; background: var(--mh-navy-50); color: var(--mh-primary); font-size: 20px; }
.mh-title-grp { display: flex; align-items: center; height: 14px; padding-left: 10px; border-left: 1px solid var(--mh-gray-300); font-size: 13px; color: var(--mh-text-2); white-space: nowrap; }
/* 상단 버튼(D16 — LFMS Btn_back 방식: 아이콘 위 · 글자 아래). 마크업은 서버 SubPage.buttonHtml(button.Btn_back > span.material-symbols-outlined + span.Btn_text) */
.mh-btns { margin-left: auto; display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 2px; }
.mh-btns button { position: relative; display: inline-flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-width: 44px; height: 40px;
	padding: 0 6px; border: 0; border-radius: 6px; background: transparent; color: var(--mh-text); font: 600 11.5px/1 var(--mh-font); white-space: nowrap; cursor: pointer; }
.mh-btns button .material-symbols-outlined { font-size: 20px; color: var(--mh-primary); }
.mh-btns button:hover { background: var(--mh-gray-100); }
.mh-btns button:active { background: var(--mh-gray-200); }
.mh-btns button:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 2px; }
/* 조회도 다른 버튼과 같은 모양 — 바탕색을 칠하지 않는다(2026-10-16 사용자 지시 「조회 버튼 배경이 항상 파란색 — 없애줘」) */
.mh-btns #deleteBtn, .mh-btns #deleteBtn .material-symbols-outlined { color: var(--mh-danger); }
.mh-btns #deleteBtn:hover { background: var(--mh-danger-bg); }
.mh-btns #closeBtn { margin-left: 7px; }
.mh-btns #closeBtn::before { content: ""; position: absolute; left: -5px; top: 8px; bottom: 8px; width: 1px; background: var(--mh-gray-200); }
.mh-btns button:disabled, .mh-btns button:disabled .material-symbols-outlined { background: transparent; color: var(--mh-gray-500); cursor: not-allowed; }
.mh-content { flex: 1 1 auto; display: flex; flex-direction: column; gap: var(--mh-gap); min-height: 0; }
.mh-page:not(:has(> .mh-content > .mh-search)) > .mh-content { margin-top: var(--mh-gap); }
.mh-screen-title { display: none; }

/* 조회조건 — 맨 위는 제목줄과 한 카드(아랫부분), 탭 안은 따로 카드, 칸 · 카드 안은 평평하게 */
.mh-search { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 18px; padding: 9px 14px;
	background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: var(--mh-radius-card); box-shadow: var(--mh-shadow-xs); }
.mh-content > .mh-search { border-top: 0; border-radius: 0 0 var(--mh-radius-card) var(--mh-radius-card); }
:is(.mh-col, .mo-part, .mh-card) .mh-search { margin: 0 0 10px; padding: 0; border: 0; border-radius: 0; box-shadow: none; background: none; }
:is(.mh-search, .mo-assign) .mh-s { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; color: var(--mh-text-2); }   /* label · span(라디오 묶음) 둘 다 · 작업지시관리 지정 줄(.mo-assign)도 글자 옆에 칸 */
.mh-search .mh-s input[type="text"] { width: 150px; }
.mh-search .mh-s input[type="date"] { width: 136px; }
.mh-search .mh-s select { min-width: 110px; }
.mh-search .mh-sp { margin-left: auto; display: flex; gap: 4px; }
.mh-note { color: var(--mh-text-2); font-size: 12px; }
.mh-warn { color: var(--mh-warning); font-size: 12px; font-weight: 600; }

/* 좌우 분할 · 위아래 쌓기 — 칸마다 흰 카드. 칸 안에 상세 카드(.mh-card)가 바로 있으면 그 카드가 카드(이중 테두리 금지) */
.mh-split { flex: 1 1 auto; display: flex; gap: var(--mh-gap); min-height: 0; }
.mh-split > .mh-col, .mh-content > .mh-col { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.mh-content > .mh-col { flex: 1 1 auto; }   /* 분할 없이 칸 하나(로케이션 화면 등) — 남은 높이를 채우고 목록 본문만 스크롤(공통 규칙 §4.5) */
:is(.mh-split, .mh-content) > .mh-col:not(:has(> .mh-card)), :is(.mo-stack, .mo-row2, .mi-row, .mu-split, .mu-right) > .mo-part, .mh-tabcard > .mh-tabpane {
	padding: 8px 10px 10px; background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: var(--mh-radius-card); box-shadow: var(--mh-shadow-xs); }
:is(.mh-content, .mh-tabpane) > .mo-stack { padding: 0; gap: var(--mh-gap); }   /* muhanOrder.css 의 바깥 여백은 .mh-page 가 맡는다 */
.mo-part > .mi-form { padding: 0; border: 0; border-radius: 0; background: none; }   /* 칸 카드 안의 입력 상자(muhanInbound.css)는 테두리 없이 — 이중 테두리 금지 */
.mh-split > .mh-col:has(> .mh-card) > .mkl { border-color: var(--mh-border); border-radius: var(--mh-radius-card); box-shadow: var(--mh-shadow-xs); }   /* 상세 카드 아래 목록(기본코드관리)도 카드처럼 */
.mh-col--list { flex: 1 1 58%; }
.mh-col--form { flex: 0 1 42%; overflow: auto; }
.mh-col--narrow { flex: 0 0 34%; }
.mh-col--wide { flex: 1 1 66%; }
.mh-col--side { flex: 0 0 300px; }                 /* LFMS 식 왼쪽 목록(대표코드내역 등) — 고정 300px */
.mh-col--main { flex: 1 1 auto; }
.mh-cq { container-type: inline-size; }            /* 안쪽 입력칸(.mh-fgrid--wide)이 이 칸(카드) 폭에 따라 열 수를 바꾼다(창 폭이 아니라) */
.mh-col-head { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; min-height: 28px; margin-bottom: 6px; }
.mh-col-head .mh-sec { font-size: 14px; font-weight: 600; color: var(--mh-text); }
.mh-col-head .mh-tools { margin-left: auto; display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
:is(.mh-col-head, .mh-card-head) .mh-subject { color: var(--mh-text-2); }
:is(.mh-col-head, .mh-card-head) .mh-subject b { color: var(--mh-navy); }

/* 권한 체크 셀 · 머리 전체 선택(js/muhanList.js muhanPermHeadSync — 체크박스 15px + 사이 4px = MUHAN_PERM_HEAD_CB) */
.mh-ack { display: inline-flex; align-items: center; justify-content: center; width: 100%; }
.mh-ack input[type="checkbox"] { width: 16px; height: 16px; cursor: pointer; }
.mkl-th .mh-ack-all { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; vertical-align: top; }   /* top — middle 이면 줄 상자가 커져 머리가 0.7 높아진다 */
.mkl-th .mh-ack-all input[type="checkbox"] { cursor: inherit; }
.mkl-th .mh-ack-all:has(input:disabled) { cursor: default; opacity: .6; }
.mh-yes { color: var(--mh-primary); font-size: 18px; }   /* 표 안 아이콘(공통 §4.4) */
.mh-dirty-dot { color: var(--mh-dirty-mark); font-size: 11px; }
.mh-ack--na { color: var(--mh-gray-400); font-size: 12px; user-select: none; }

/* 상세 카드(E_UsrMst · A_JepMst …) — 묶음(섹션)별로, 라벨은 칸 위, 짧은 칸은 2열 */
.mh-card { background: var(--mh-panel); border: 1px solid var(--mh-border); border-radius: var(--mh-radius-card); box-shadow: var(--mh-shadow-xs); }
.mh-card-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 52px; padding: 8px 16px; border-bottom: 1px solid var(--mh-border-soft); }
.mh-card-title { font-size: 15px; font-weight: 600; color: var(--mh-text); }
.mh-card-meta { margin-left: auto; color: var(--mh-text-2); font-size: 12px; white-space: nowrap; }
.mh-card-meta b { font-weight: 600; }
.mh-card .mh-form-mode { margin-left: 0; }
.mh-fs { padding: 14px 16px 16px; }
.mh-fs + .mh-fs { border-top: 1px solid var(--mh-border-soft); }
.mh-fs-title { display: flex; align-items: baseline; gap: 8px; margin: 0 0 10px; font-size: 13px; font-weight: 600; color: var(--mh-text); }
.mh-fs-note { font-weight: 400; color: var(--mh-text-2); }
.mh-fgrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 14px; }
.mh-fld { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.mh-fld[hidden] { display: none; }
.mh-fld--full { grid-column: 1 / -1; }
.mh-fl { font-size: 12px; font-weight: 600; color: var(--mh-text-2); }
.mh-fl.mh-req::before { content: "*"; color: var(--mh-danger); margin-right: 3px; }
:is(.mh-page, .mh-modal) .mh-fld > input, :is(.mh-page, .mh-modal) .mh-fld > select { width: 100%; height: var(--mh-ctl-h); }
.mh-range { display: flex; align-items: center; gap: 6px; }
:is(.mh-page, .mh-modal) .mh-range input { flex: 1 1 0; min-width: 0; height: var(--mh-ctl-h); }
.mh-range-sep { color: var(--mh-text-2); }
.mh-ro { color: var(--mh-text-2); }

/* 라디오 묶음 = 세그먼트(공통 규칙 §4.1 형태 · 색은 S2 주색 — 설계 §5.7): 흰 묶음 + 테두리, 고른 칸 = 주색 채움 + 흰 글자, 사이 가는 세로줄.
   조회조건 .mh-radios(라벨 = 글자) · 입력폼 .mh-seg(라벨 = span). 동그라미는 숨기되 키보드 · 화면낭독기로는 그대로 라디오 */
.mh-seg, .mh-radios { display: inline-flex; align-items: center; align-self: flex-start; flex-wrap: wrap; padding: 2px; border: 1px solid var(--mh-line-input);
	border-radius: var(--mh-radius); background: var(--mh-panel); }
.mh-seg label, .mh-radios label { position: relative; display: inline-flex; align-items: center; height: calc(var(--mh-ctl-h) - 6px); padding: 0 12px; border-radius: 4px;
	color: var(--mh-text-2); font-weight: 500; white-space: nowrap; cursor: pointer; }
.mh-fld .mh-seg label { padding: 0 14px; }
:is(.mh-seg, .mh-radios) label + label::before { content: ""; position: absolute; left: 0; top: 7px; bottom: 7px; width: 1px; background: var(--mh-gray-300); }
:is(.mh-seg, .mh-radios) label:has(input:checked)::before, :is(.mh-seg, .mh-radios) label:has(input:checked) + label::before { display: none; }
:is(.mh-page, .mh-modal) :is(.mh-seg, .mh-radios) input[type="radio"] { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: inherit; }
:is(.mh-seg, .mh-radios) label:hover { color: var(--mh-text); }
:is(.mh-seg, .mh-radios) label:has(input:checked) { background: var(--mh-primary); color: var(--mh-on-dark); font-weight: 600; }
:is(.mh-seg, .mh-radios) label:has(input:focus-visible) { outline: 2px solid var(--mh-focus); outline-offset: 2px; }
:is(.mh-seg, .mh-radios) label:has(input:disabled) { opacity: .5; cursor: not-allowed; }

/* 토글 칩(체크박스 여러 개) — 켜진 칩은 주색 테두리 · 옅은 남색 바탕. .mh-chip(상태 배지)과 다른 것 */
.mh-tgls { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.mh-tgl { position: relative; display: flex; cursor: pointer; }
:is(.mh-page, .mh-modal) .mh-tgl input[type="checkbox"] { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); }
.mh-tgl span { flex: 1 1 auto; display: flex; align-items: center; height: 32px; padding: 0 8px 0 32px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius);
	background: var(--mh-panel); color: var(--mh-text-2); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mh-tgl:hover span { border-color: var(--mh-gray-600); }
.mh-tgl input:checked + span { border-color: var(--mh-primary); background: var(--mh-navy-50); color: var(--mh-navy); }
.mh-tgl input:focus-visible + span { outline: 2px solid var(--mh-focus); outline-offset: 1px; }
.mh-tgl input:disabled + span { opacity: .55; }
.mh-tgl:has(input:disabled) { cursor: not-allowed; }

/* 읽기 전용 정보(계정 상태) */
.mh-fs--info { background: var(--mh-grid-head); border-radius: 0 0 var(--mh-radius-card) var(--mh-radius-card); }
.mh-kv { display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 8px 12px; margin: 0; }
.mh-kv dt { align-self: center; color: var(--mh-text-2); font-size: 12px; font-weight: 600; }
.mh-kv dd { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-height: 22px; margin: 0; }
.mh-fs--info .mh-form-foot { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--mh-border-soft); }

/* 좁은 화면 — 한 줄에 한 칸 */
@media (max-width: 900px) {
	.mh-fgrid { grid-template-columns: minmax(0, 1fr); }
	.mh-tgls { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.mh-checks { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.mh-checks label { display: inline-flex; align-items: center; gap: 4px; cursor: pointer; }
.mh-form-mode { display: inline-flex; align-items: center; height: 22px; margin-left: 6px; padding: 0 9px; border-radius: 11px; font-size: 12px; font-weight: 600;
	background: var(--mh-gray-100); color: var(--mh-text-2); }
.mh-form-mode.new { background: var(--mh-success-bg); color: var(--mh-success); }
.mh-form-foot { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.mh-form-help { margin: 10px 0 0; padding: 10px 12px 10px 28px; background: var(--mh-info-bg); border: 1px solid var(--mh-info-line); border-radius: var(--mh-radius);
	color: var(--mh-text-2); font-size: 12px; line-height: 1.65; }

/* 넓은 상세 카드(A_CodMst — 2026-10-15 사용자 지시 「입력폼은 제품정보 상세화면 디자인처럼」): 카드가 넓으면 한 줄에 여러 칸.
   열 수는 창 폭이 아니라 카드 폭으로 정한다(카드에 .mh-cq): 1100px 이상 6열 · 700~1099px 4열 · 420~699px 2열 · 그 아래 1열.
   두 클래스(.mh-fgrid.mh-fgrid--wide)라 위 「좁은 화면 — 한 줄에 한 칸」 미디어 규칙보다 우선 — 접기는 아래 컨테이너 쿼리가 맡는다 */
.mh-fgrid.mh-fgrid--wide { grid-template-columns: repeat(6, minmax(0, 1fr)); }
@container (max-width: 1099px) { .mh-fgrid.mh-fgrid--wide { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
@container (max-width: 699px) { .mh-fgrid.mh-fgrid--wide { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@container (max-width: 419px) { .mh-fgrid.mh-fgrid--wide { grid-template-columns: minmax(0, 1fr); } }
/* 코드 + 이름 한 칸(.mh-fld 안) — 코드는 76px, 이름이 나머지 */
.mh-fpair { display: flex; gap: 6px; min-width: 0; }
:is(.mh-page, .mh-modal) .mh-fpair > input { flex: 1 1 0; width: 100%; min-width: 0; height: var(--mh-ctl-h); }
:is(.mh-page, .mh-modal) .mh-fpair > input.mh-fpair-code { flex: 0 0 76px; width: 76px; }   /* 위 규칙보다 우선 */
/* 화면 안내 — LFMS 의 빨간 안내문(등록 방법 등). 카드 안이면 카드 머리 아래 */
.mh-guide { flex: 0 0 auto; margin: 0 0 8px; color: var(--mh-danger); font-size: 12px; line-height: 1.6; }
.mh-card > .mh-guide { margin: 0; padding: 10px 16px 0; }
.mh-guide-sys { font-weight: 700; }

/* 화면 안 탭 — 폴더 탭형: 바닥 선 위에 탭이 서고, 고른 탭은 흰 바탕 + 위 주색 줄 + 바닥 선을 끊어 아래 카드와 이어진다.
   바닥 선은 배경으로 그린다(좁은 화면의 overflow-x: auto 가 음수 여백을 자르므로 margin-bottom: -1px 을 쓰지 않는다) */
.mh-tabbar { flex: 0 0 auto; display: flex; align-items: flex-end; gap: 4px; margin: 0;
	background: linear-gradient(to top, var(--mh-border) 1px, transparent 1px); }
.mh-tabbar button { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 18px;
	border: 1px solid var(--mh-border); border-radius: 8px 8px 0 0; background: var(--mh-gray-100);
	color: var(--mh-text-2); cursor: pointer; font-size: 14px; font-weight: 500; white-space: nowrap; }
.mh-tabbar button .material-symbols-outlined { font-size: 20px; color: var(--mh-gray-500); }
.mh-tabbar button:hover { background: var(--mh-gray-50); color: var(--mh-text); }
.mh-tabbar button.on { height: 42px; border-color: var(--mh-primary) var(--mh-border) var(--mh-panel); box-shadow: inset 0 2px 0 var(--mh-primary);
	background: var(--mh-panel); color: var(--mh-primary); font-weight: 600; }
.mh-tabbar button.on .material-symbols-outlined { color: var(--mh-primary); }
.mh-tabbar button:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: -2px; }
/* 화면 맨 위 탭 — 탭 칸 첫 카드가 조회조건이면 붙인다(카드 윗선 = 탭 바닥 선 · 고른 탭이 카드 머리가 된다). 아니면 보통 간격 */
.mh-content > .mh-tabbar { margin-bottom: calc(-1 * var(--mh-gap)); }
.mh-content > .mh-tabpane > .mh-search:first-child { border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; }
.mh-content > .mh-tabpane:not(:has(> .mh-search:first-child)) { margin-top: var(--mh-gap); }
.mh-tabpane { flex: 1 1 auto; display: flex; flex-direction: column; gap: var(--mh-gap); min-height: 0; }
/* 칸 안 탭 + 카드(.mh-tabcard — 출고피킹관리 아래 · 반품/오출고 등록 오른쪽, 2026-10-20): 회색 바탕 위 폴더 탭, 고른 탭 칸 = 흰 카드(칸 카드 규칙 — 윗선은 탭 바닥 선) */
.mh-tabcard { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.mh-tabcard > .mh-tabpane { gap: 6px; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; }
.mh-tabcard > .mh-tabpane > div:last-child { flex: 1 1 auto; min-height: 0; }   /* 칸의 목록이 남은 높이를 채운다 */
.mh-tabbar .mh-tabcnt { min-width: 20px; padding: 0 7px; border-radius: 10px; background: var(--mh-gray-200); color: var(--mh-text-2);
	font-size: 12px; font-weight: 600; line-height: 18px; text-align: center; font-variant-numeric: tabular-nums; }   /* 탭 글자 뒤 건수 */
.mh-tabbar button.on .mh-tabcnt { background: var(--mh-navy-100); color: var(--mh-primary); }

/* jqxGrid 셀(jqxCols) */
.mh-jqx-cell { margin: 4px 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* =====================================================================
   8 목록(mktlist) — 원본 1.3.x 는 고치지 않고 변수 대입 위주로 덮는다. 높이는 flex 체인(§J8)   Design Ref: §5.8
   ===================================================================== */
:is(.mh-page, .mh-modal) .mkl {
	--mkl-accent: var(--mh-primary); --mkl-accent-soft: rgba(42, 65, 144, .18);
	--mkl-text: var(--mh-text); --mkl-text-2: var(--mh-text-2); --mkl-muted: var(--mh-text-2); --mkl-faint: var(--mh-text-3); --mkl-dash: var(--mh-text-3);   /* 빈 값 「—」 — 흰 바탕 대비 5.3(2026-10-20 가독성 — gray-400 은 2.3) */
	--mkl-bg: var(--mh-panel); --mkl-head-bg: var(--mh-grid-head); --mkl-hover-bg: var(--mh-row-hover);
	--mkl-checked-bg: var(--mh-row-checked); --mkl-selected-bg: var(--mh-row-selected);
	--mkl-border: var(--mh-grid-border); --mkl-row-border: var(--mh-grid-row-line); --mkl-card-border: var(--mh-border); --mkl-input-border: var(--mh-grid-fin);
	--mkl-radius: var(--mh-radius); --mkl-font-size: 13px; --mkl-head-font-size: 12.5px; --mkl-row-min-height: var(--mh-row-h);
	--mkl-head-lh: 16px;   /* 머리 칸 줄 높이 = 체크박스(16) — 글자 · 전체 선택 칸 모두 8 + 16 + 8. 없으면 글자 칸 31.3 · 체크 칸 32 · 권한 칸 32.7 로 목록마다 머리 높이가 달랐다(2026-10-21) */
	font-variant-numeric: tabular-nums;   /* 수량 · 일시 · 번호 자릿수 정렬 */
}
.mh-page .mkl { flex: 1 1 auto; min-height: 0; }
.mh-page .mkl:not(.mkl--mobile) .mkl-body { flex: 1 1 auto; min-height: 0; max-height: none; }
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-th { padding: 8px 10px; font-weight: 600; color: var(--mh-grid-head-text); text-align: center !important; }   /* 머리 글자는 늘 가운데(세로선 — 전역 §G.3) — 원본이 칸마다 style 로 넣는 정렬을 이긴다. 셀 정렬은 muhanList.js mklCols */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-th.mkl-th--flt { padding-right: 36px; }   /* 깔때기 = 칸 오른쪽 끝(원본 .mkl-flt) — 위 padding 이 원본 여백 36 을 덮지 않게(글자가 아이콘과 겹치지 않게) */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-td { padding: 6px 10px; }
/* 셀 안 버튼 · 입력칸이 행을 키우지 않게 — 행 높이는 늘 --mh-row-h(36, 테두리 포함). 작은 버튼(28) · 입력칸(≤ 28)은 위아래 여백 3(3 + 28 + 3), 링크 버튼(.mh-btn--link)은 글자 높이만.
   2026-10-21: 출고현황 배송 롯데 송장 행 44.7 · 직송송장 [지정] · 닷컴 [다시 받기] 행 40.7 · 재고실사관리 실사 수량 입력 행 38.7 이었다. 입력 표(.mh-ilist)는 위 자체 여백 */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile):not(.mh-ilist) .mkl-td:has(> .mh-btn--sm, > input[type="text"], > input[type="number"]) { padding-top: 3px; padding-bottom: 3px; }
/* 상태 칩이 든 칸 — 칩은 한 덩어리라 말줄임이면 칩 전체가 「…」 가 된다. 폭은 muhanList.js mklContentFit 이 칩에 맞추고, 끌어서 더 좁히면 「…」 대신 잘라 보인다 */
:is(.mh-page, .mh-modal) .mkl .mkl-td:has(> .mh-chip) { text-overflow: clip; }
/* 세로선(D15) — 제목줄 + 검색칸 줄의 칸 사이만, 마지막 칸 없음, 본문은 가로선만. 색은 LFMS 반출마감 대시보드(U10): 머리 #D9D9D9 · 검색칸 줄 #CFCFCF */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-th:not(:last-child) { box-shadow: inset -1px 0 0 var(--mh-grid-vline); }
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-fcell:not(:last-child) { box-shadow: inset -1px 0 0 var(--mh-grid-band-line); }
/* 머리 바탕은 변수가 아니라 속성으로 — muhanMaster.css 의 모달 목록 변수(--mkl-head-bg)보다 앞서게(모달도 같은 색) */
:is(.mh-page, .mh-modal) .mkl .mkl-head { background: var(--mh-grid-head); border-bottom-color: var(--mh-grid-head-line); }
:is(.mh-page, .mh-modal) .mkl .mkl-frow { background: var(--mh-grid-band); border-bottom: 1px solid var(--mh-grid-band-line); }
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-row:last-child { border-bottom: 1px solid var(--mkl-row-border); }   /* 마지막 행 아래에도 선(LFMS 와 같게 — 사본은 none) */
:is(.mh-page, .mh-modal) .mkl .mkl-fcell { align-self: stretch; display: flex; align-items: center; padding: 4px 6px; }   /* 빈 칸(No · 체크)도 줄 높이만큼 — 세로선이 끊기지 않게 */
:is(.mh-page, .mh-modal) .mkl .mkl-fin { height: 26px; border-radius: var(--mh-radius); font-size: 12.5px; }
:is(.mh-page, .mh-modal) .mkl .mkl-fin:not(.on) { border-color: var(--mkl-input-border); }   /* §1 입력 공통 테두리(--mh-line-input)보다 앞서게 — 회색 줄 위 흰 칸(U10). 거르는 중(.on)은 원본 파란 테두리 */
:is(.mh-page, .mh-modal) .mkl .mkl-fin:focus { outline: 2px solid var(--mh-focus); outline-offset: 0; box-shadow: none; }
:is(.mh-page, .mh-modal) .mkl .mkl-foot { padding: 6px 12px; font-size: 12.5px; color: var(--mh-grid-head-text); background: var(--mh-grid-band); border-top-color: var(--mh-grid-band-line); }
/* 하단 합계 줄(원본 1.3.0 작업본 .mkl-sum — 규칙 §G.8 · muhanList.js mklSumCol) — 칸 여백을 셀과 같게(합계가 제 칸 숫자 바로 아래 · 폭 재기와 같은 여백). 바탕은 머리 색(원본 기본) · 위 선은 머리 아래 선 색 */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-sc { padding: 6px 10px; }
:is(.mh-page, .mh-modal) .mkl .mkl-sum { border-top-color: var(--mh-grid-head-line); }
/* 목록 본문 포커스(방향키 이동 — 원본 selectable 이 본문에 tabindex 0). 마우스로 행을 누를 때는 테두리 없이(원본), Tab 으로 들어오면 안쪽 테두리 */
:is(.mh-page, .mh-modal) .mkl .mkl-body[tabindex]:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: -2px; }
/* 빈 목록도 표 폭만큼 — 컬럼이 넓으면 빈 목록에서도 가로 스크롤이 생겨 머리를 끝까지 볼 수 있다(컬럼은 숨기지 않는다 — muhanList.js mklCols) */
:is(.mh-page, .mh-modal) .mkl:not(.mkl--mobile) .mkl-empty { min-width: var(--mkl-min-table-width); }
/* 수정 행(muhanList.js mh-dirty) — 오른쪽 막대. 선택(.selected — 원본 1.3.0, 왼쪽 막대)과 겹쳐도 구분된다 */
.mh-page .mkl-row.mh-dirty { background: var(--mh-row-dirty); box-shadow: inset -3px 0 0 var(--mh-dirty-mark); }
.mh-page .mkl-row.mh-dirty.selected { background: var(--mh-row-dirty-selected); box-shadow: inset 3px 0 0 var(--mkl-accent), inset -3px 0 0 var(--mh-dirty-mark); }

/* =====================================================================
   9 알림(js/alertDialog.js — 첫 알림 때 head 끝에 스타일을 싣는다 → :root 로 특이도 +1)
   ===================================================================== */
:root .ad-dlg { font-family: var(--mh-font); color: var(--mh-text); border-radius: 12px; padding: 24px 24px 18px; box-shadow: var(--mh-shadow-raised); }
:root .ad-dlg::backdrop { background: var(--mh-scrim); }
:root .ad-icon { width: 44px; height: 44px; margin-bottom: 12px; border-width: 2px; }
:root .ad-icon .material-symbols-outlined { font-size: 24px; }   /* 엔진이 원 안에 그리는 Material Symbols(check · info_i · question_mark · priority_high · close — 규칙 §7.15 샘플) */
:root .ad-success .ad-icon { color: var(--mh-success); }
:root .ad-info .ad-icon { color: var(--mh-info); }
:root .ad-question .ad-icon { color: var(--mh-primary); }
:root .ad-warning .ad-icon { color: var(--mh-warning); }
:root .ad-error .ad-icon { color: var(--mh-danger); }
:root .ad-title { font-size: 17px; font-weight: 700; color: var(--mh-text); }
:root .ad-text { color: var(--mh-text-2); line-height: 1.6; }
:root .ad-field { height: 34px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius); }
:root .ad-field:focus { outline: 2px solid var(--mh-focus); outline-offset: 1px; }
:root .ad-err { color: var(--mh-danger); }
:root .ad-btns { gap: 8px; }
:root .ad-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-width: 88px; height: 34px; padding: 0 14px; border-radius: var(--mh-radius);
	border: 1px solid var(--mh-line-input); background: var(--mh-panel); color: var(--mh-text); font-weight: 600; }
:root .ad-btn::before { font-size: 20px; content: "close"; }                                                         /* 보조(취소) */
:root .ad-btn:hover { background: var(--mh-gray-50); border-color: var(--mh-gray-600); }
:root .ad-btn.ad-primary { background: var(--mh-primary); border-color: var(--mh-primary); color: var(--mh-on-dark); }
:root .ad-btn.ad-primary::before { content: "check"; }                                                               /* 주 */
:root .ad-btn.ad-primary:hover { background: var(--mh-primary-hover); border-color: var(--mh-primary-hover); }
:root .ad-btn:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 2px; }
/* 위험 확인(common.js muhanConfirm — okText 「삭제」 · 「초기화」면 kind warning): 버튼이 두 개인 경고 창의 주 버튼 = 빨강 · 휴지통 */
:root .ad-warning .ad-btns:has(.ad-btn + .ad-btn) .ad-btn.ad-primary { background: var(--mh-danger); border-color: var(--mh-danger); }
:root .ad-warning .ad-btns:has(.ad-btn + .ad-btn) .ad-btn.ad-primary::before { content: "delete"; }
:root .ad-warning .ad-btns:has(.ad-btn + .ad-btn) .ad-btn.ad-primary:hover { background: var(--mh-danger-hover); border-color: var(--mh-danger-hover); }
:root .ad-x { color: var(--mh-text-2); }
:root .ad-x .material-symbols-outlined { font-size: 20px; }
:root .ad-spin { border-color: var(--mh-navy-100); border-top-color: var(--mh-primary); }

/* =====================================================================
   10 로그인 · 비밀번호 변경(정적 화면 — login.html · pwchange.html) — 배경 그림 무대 + 가운데 흰 카드   Design Ref: §5.3
   ===================================================================== */
/* 높이 = 보이는 창(dvh — 휴대폰 주소창 제외, 못 읽으면 앞 줄 vh). 칸 하나 minmax(0, 1fr) — 「이미 접속 중」 두 버튼 같은 줄바꿈 없는 글자가 칸을 창보다 넓히지 않게(320px 에서 카드가 오른쪽으로 잘렸다) */
.mh-auth { position: relative; min-height: 100vh; min-height: 100dvh; display: grid; grid-template-columns: minmax(0, 1fr); place-items: center; padding: 64px 20px 48px; overflow: hidden;
	background-color: var(--mh-rail-bg); -webkit-font-smoothing: antialiased;
	/* 배경 그림(2026-10-15 사용자 지정 — 무한 물류 궤도. 원본 docs/01-plan/features/2026-10-15-CI디자인개편.자료/로그인배경-시안/generated-20261015-v2/login-bg-v2-05-…png 를 웹용으로 줄임).
	   그림 가운데가 비어 있어 카드가 그 위에 올라간다. 아래쪽 그늘은 왼쪽 아래 문구용. WebP 를 못 읽는 브라우저는 앞 줄의 JPEG */
	background-image: linear-gradient(to top, var(--mh-auth-shade), transparent 140px), url(../img/login/login-bg.jpg);
	background-image: linear-gradient(to top, var(--mh-auth-shade), transparent 140px),
		image-set(url(../img/login/login-bg.webp) type("image/webp"), url(../img/login/login-bg.jpg) type("image/jpeg"));
	background-size: auto, cover; background-position: 0 0, center; background-repeat: no-repeat;
	align-content: center; row-gap: 20px; }   /* 표어(login) + 카드를 한 덩어리로 가운데 */
.mh-auth-brand { position: absolute; inset: 0; pointer-events: none; color: var(--mh-on-dark); }
.mh-auth-top { position: absolute; left: 28px; top: 24px; display: flex; align-items: center; gap: 10px; margin: 0; font-size: 15px; font-weight: 700; }
.mh-auth-top img { display: block; width: 35px; height: 24px; }
.mh-auth-top span { padding-left: 10px; border-left: 1px solid var(--mh-auth-divider); color: var(--mh-rail-text); font-weight: 600; }
.mh-auth-bottom { position: absolute; left: 28px; right: 28px; bottom: 22px; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 18px; font-size: 12px; }
.mh-auth-vals { margin: 0; padding: 0; list-style: none; display: flex; flex-wrap: wrap; gap: 4px 16px; letter-spacing: .08em; color: var(--mh-rail-text); }
.mh-auth-vals li::before { content: ""; display: inline-block; width: 7px; height: 7px; margin-right: 6px; vertical-align: 1px; }
.mh-auth-vals li:nth-child(1)::before { background: var(--mh-ci-sky); }
.mh-auth-vals li:nth-child(2)::before { background: var(--mh-ci-yellow); }
.mh-auth-vals li:nth-child(3)::before { background: var(--mh-ci-pink); }
.mh-auth-copy { margin: 0 0 0 auto; color: var(--mh-rail-text); letter-spacing: .02em; }
/* 카드 위 표어(login 만) — CI 가치 CONNECT(무한한 연결)를 「끊김 없이」로, 그 말만 CI 노랑 */
.mh-auth-hero { position: relative; text-align: center; color: var(--mh-on-dark); text-shadow: var(--mh-auth-glow); }
.mh-auth-hero-title { margin: 0; font-size: 28px; font-weight: 700; line-height: 1.3; letter-spacing: -.02em; }
.mh-auth-hero-title em { font-style: normal; color: var(--mh-ci-yellow); }
.mh-auth-hero-sub { margin: 6px 0 0; font-size: 14.5px; color: var(--mh-rail-text); }
@media (max-height: 699px) {   /* 1366×768 의 실제 창 높이(≈640) — 표어를 한 줄로 줄여 카드가 화면 안에 들어오게 */
	.mh-auth { row-gap: 14px; }
	.mh-auth-hero-title { font-size: 21px; }
	.mh-auth-hero-sub { display: none; }
}
.mh-auth-form { position: relative; width: 100%; display: flex; justify-content: center; }
.mh-auth-card { width: 100%; max-width: 400px; display: flex; flex-direction: column; padding: 28px 32px 26px; background: var(--mh-panel); border-radius: 12px;
	box-shadow: 0 12px 32px rgba(0, 0, 0, .28); }
.mh-auth-card--wide { max-width: 460px; }
.mh-auth-card h1 { margin: 0; display: flex; align-items: center; gap: 10px; font-size: 26px; font-weight: 700; letter-spacing: -.02em; color: var(--mh-text); }
.mh-auth-card h1 .material-symbols-outlined { color: var(--mh-primary); }
.mh-auth-sub { margin: 6px 0 14px; color: var(--mh-text-2); font-size: 14px; line-height: 1.55; }
.mh-auth-card label { display: flex; align-items: center; gap: 7px; margin: 14px 0 6px; font-weight: 600; color: var(--mh-text); }
.mh-auth-card label .material-symbols-outlined { font-size: 20px; color: var(--mh-text-2); }
.mh-pw-eye .material-symbols-outlined { font-size: 20px; }
.mh-auth-caps .material-symbols-outlined { font-size: 18px; }
.mh-auth-card input { width: 100%; height: 44px; padding: 0 12px; border: 1px solid var(--mh-line-input); border-radius: var(--mh-radius); background: var(--mh-panel); font-size: 15px; }
.mh-auth-card input:focus { outline: 2px solid var(--mh-focus); outline-offset: 1px; border-color: var(--mh-focus); }
.mh-auth-card input[readonly] { background: var(--mh-gray-50); }
.mh-pw { position: relative; }
.mh-pw input { padding-right: 46px; }
.mh-pw-eye { position: absolute; top: 4px; right: 4px; width: 36px; height: 36px; display: grid; place-items: center; border: none; border-radius: var(--mh-radius); background: none;
	color: var(--mh-text-2); cursor: pointer; }
.mh-pw-eye:hover { background: var(--mh-gray-100); color: var(--mh-text); }
.mh-pw-eye:focus-visible { outline: 2px solid var(--mh-focus); outline-offset: 0; }
.mh-auth-caps { align-self: flex-start; display: flex; align-items: center; gap: 6px; margin: 6px 0 0; padding: 3px 9px; border-radius: 4px;
	background: var(--mh-warning-bg); color: var(--mh-warning); font-size: 12px; font-weight: 600; }
.mh-auth-card > .mh-btn { width: 100%; height: 46px; margin-top: 20px; font-size: 15px; gap: 8px; }
.mh-auth-card .mh-btn .material-symbols-outlined { font-size: 20px; }
.mh-auth-btns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }   /* 한 줄에 안 들어가면(좁은 휴대폰) 둘째 버튼이 아래 줄 전체 폭으로 */
.mh-auth-btns .mh-btn { flex: 1 1 0; height: 44px; font-size: 14px; }
.mh-auth-btns .mh-btn--primary { flex-grow: 1.6; }
/* 상태 영역 — 바탕 + 아이콘(빈 문장이면 숨김) */
.mh-auth-state { display: flex; align-items: flex-start; gap: 8px; margin: 14px 0 0; padding: 10px 12px; border: 1px solid var(--mh-danger-line); border-radius: var(--mh-radius);
	background: var(--mh-danger-bg); color: var(--mh-danger); font-size: 13px; line-height: 1.55; white-space: pre-line; }
.mh-auth-state::before { font-size: 20px; content: "error"; }   /* 글꼴은 §5 공통 규칙 · 20 ≈ 첫 줄 높이 13 × 1.55 */
.mh-auth-state:empty { display: none; }
.mh-auth-state.is-info { border-color: var(--mh-info-line); background: var(--mh-info-bg); color: var(--mh-info); }
.mh-auth-state.is-info::before { content: "info"; }
.mh-auth-state.is-ok { border-color: var(--mh-success-line); background: var(--mh-success-bg); color: var(--mh-success); }
.mh-auth-state.is-ok::before { content: "check_circle"; }
.mh-auth-note { margin: 0 0 16px; }   /* 비밀번호 변경 맨 위 안내(항상 보이는 정보 띠) */
/* 이미 접속 중(login.html, errcod IN_USE) — 주의 띠 */
.mh-auth-confirm { margin-top: 14px; padding: 12px 14px; border: 1px solid var(--mh-warning-line); border-radius: var(--mh-radius); background: var(--mh-warning-bg); }
.mh-auth-confirm p { display: flex; gap: 8px; margin: 0; color: var(--mh-text); font-size: 13px; line-height: 1.6; }
.mh-auth-confirm p::before { content: "warning"; color: var(--mh-warning); font-size: 20px; line-height: 1.04; }   /* 20 × 1.04 ≈ 13 × 1.6 */
.mh-auth-confirm .mh-auth-btns { margin-top: 10px; }
.mh-auth-confirm .mh-auth-btns .mh-btn { height: 38px; font-size: 13px; }
.mh-auth-rule { margin: 12px 0 0; padding: 10px 12px; list-style: none; background: var(--mh-gray-50); border: 1px solid var(--mh-border-soft); border-radius: var(--mh-radius);
	color: var(--mh-text-2); font-size: 13px; line-height: 1.8; }
.mh-auth-rule li { display: flex; align-items: center; gap: 7px; }
.mh-auth-rule li::before { content: "\2022"; width: 12px; text-align: center; color: var(--mh-gray-500); }
.mh-auth-rule li.is-ok { color: var(--mh-success); }
.mh-auth-rule li.is-ok::before { content: "check"; font-size: 18px; color: var(--mh-success); }
.mh-auth-hint { margin: 6px 0 0; font-size: 12px; font-weight: 600; }
.mh-auth-hint:empty { display: none; }
.mh-auth-hint.is-ok { color: var(--mh-success); }
.mh-auth-hint.is-err { color: var(--mh-danger); }
.mh-auth-hint.is-ok::before, .mh-auth-hint.is-err::before { display: inline-block; font-size: 18px; margin-right: 4px; vertical-align: middle; }
.mh-auth-hint.is-ok::before { content: "check"; }
.mh-auth-hint.is-err::before { content: "close"; }   /* 색만으로 구분하지 않게 */
.mh-auth-foot { margin: 20px 0 0; padding-top: 12px; border-top: 1px solid var(--mh-border-soft); color: var(--mh-text-2); font-size: 12px; line-height: 1.75; }
.mh-auth-foot.is-alert { color: var(--mh-text); }
.mh-auth-foot.is-alert b { color: var(--mh-danger); }
.mh-auth-foot b { font-weight: 700; }
@media (max-width: 900px) {
	/* 여백만 줄이고 넓은 화면처럼 세로 가운데(2026-10-28 사용자 지적 「로그인화면의 반응형이 이상함」 — 위에 붙이면 창 폭이 900 을 넘나들 때 카드가 위로 튀고 아래 절반이 빈다).
	   카드가 창보다 길면 무대가 늘어나 위부터 보인다(키보드가 올라오면 브라우저가 칸을 보이는 곳으로 옮긴다) */
	.mh-auth { padding: 72px 14px 52px; row-gap: 16px; }
	.mh-auth-vals { display: none; }                    /* 휴대폰은 저작권 한 줄만 아래 가운데 */
	.mh-auth-bottom { left: 16px; right: 16px; bottom: 18px; justify-content: center; }
	.mh-auth-copy { margin: 0; text-align: center; font-size: 11px; }
	.mh-auth-top { left: 16px; top: 20px; }
	.mh-auth-hero-title { font-size: 21px; }
	.mh-auth-hero-sub { font-size: 13px; }
	.mh-auth-card { padding: 24px 20px 22px; }
}

/* =====================================================================
   11 인쇄 — 메뉴 · 버튼 빼고 표만
   ===================================================================== */
@media print {
	body, .mh-sub { background: #fff; }
	.mh-left, .mh-top, .mh-drawer-scrim, .mh-findbox, .mh-btns, .mh-busy, .mh-toasts, .mh-search .mh-sp, .mh-col-head .mh-tools { display: none; }
	.mh-index, .mh-page { height: auto; overflow: visible; }
	.mh-page { padding: 0; }
	.mh-titlebar, .mh-search, .mh-split > .mh-col, .mo-part, .mh-card { box-shadow: none; }
	.mh-page .mkl:not(.mkl--mobile) .mkl-body { max-height: none; overflow: visible; }
	.mkl-row { break-inside: avoid; }
	.mkl-frow { display: none; }
	.mh-chip { print-color-adjust: exact; -webkit-print-color-adjust: exact; }
	a { color: #000; }
}

/* =====================================================================
   12 모션 줄이기
   ===================================================================== */
@media (prefers-reduced-motion: reduce) {
	.mh-toast, .mh-busy { animation-duration: .01ms; }
	.mh-spin { animation: none; }                   /* 처리 중 아이콘은 멈춘다(글자 「처리 중입니다…」가 함께 있다) */
}

/* =====================================================================
   13 반응형(2026-10-15 사용자 지시) — 폭 기준은 index.html MUHAN_NARROW(1023) · MUHAN_PHONE(768) 과 같다. 인쇄에는 걸지 않는다(screen)   Design Ref: §5.9
   태블릿(≤1023px): 레일 숨김 · ☰ = 서랍(레일 + 패널) · 화면 안 좌우 분할 → 위아래 · 화면 전체 스크롤(제목줄은 위에 붙음)
   휴대폰(≤768px — mktlist 원본 카드 전환 mobileBreakpoint 768 과 같은 폭): 버튼 글자 · 이름 숨김(아이콘만 — 화면낭독기 이름은 남김) · 조회조건 한 줄에 하나 · 라디오 묶음 전체 폭 · 목록은 카드(JS 가 .mkl--mobile)
   ===================================================================== */
@media screen and (max-width: 1023px) {
	/* 틀 — 서랍 = 레일 + 패널(패널은 늘 펼친 채) */
	.mh-index { height: 100vh; height: 100dvh; }
	.mh-left { position: fixed; z-index: 1200; top: 0; bottom: 0; left: 0; max-width: 92vw; transform: translateX(-102%); visibility: hidden;
		transition: transform .2s ease-out, visibility .2s; box-shadow: var(--mh-shadow-raised); }
	.mh-left.mh-left--open { transform: none; visibility: visible; }
	.mh-left .mh-flyout { position: static; display: flex; width: min(var(--mh-flyout-w), calc(92vw - var(--mh-rail-w))); box-shadow: none; }
	.mh-flyout-head #mh_menuPin, .mh-flyout-tip { display: none; }
	.mh-drawer-scrim.is-light { left: 0; background: var(--mh-scrim); }
	.mh-top #mh_menuFold { display: inline-grid; }
	.mh-top .mh-user-txt { display: none; }
	.mh-menu-item { height: 40px; }    /* 손가락으로 누르는 크기 */
	/* SubPage */
	.mh-page { height: auto; min-height: 100vh; overflow: visible; }
	.mh-content, .mh-tabpane { flex: 0 0 auto; }
	.mh-titlebar { position: sticky; top: 0; z-index: 30; flex-wrap: wrap; }
	.mh-page .mh-split { flex: 0 0 auto; flex-direction: column; }
	.mh-page :is(.mh-split, .mh-content) > .mh-col { flex: 0 0 auto; width: 100%; max-height: none; }
	.mh-page .mh-col--form { overflow: visible; }
	.mh-page :is(.mh-split, .mh-content > .mh-col) .mkl:not(.mkl--mobile):not(.mh-sublist) { flex: 0 0 auto; height: max(320px, 60vh); }   /* 표는 제 안에서 스크롤(가상 렌더링) */
}
@media screen and (max-width: 768px) {
	/* 틀 */
	.mh-top { gap: 6px; padding-left: 8px; padding-right: 8px; }
	.mh-top-sep { display: none; }
	.mh-tab:not(.on) { padding: 0 9px; }                                         /* 고르지 않은 탭 = 아이콘만(이름은 title · aria-label · [열린 화면 ▾]) */
	.mh-tab:not(.on) > span:not(.material-symbols-outlined), .mh-tab:not(.on) > .mh-tab-x { display: none; }
	.mh-tabmore-label { display: none; }                                            /* [▣ N ▾] */
	.mh-btns .Btn_text { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
	/* SubPage */
	.mh-page { padding: 8px; }
	.mh-titlebar { gap: 6px; min-height: 0; padding: 6px 8px 6px 12px; }
	.mh-title { font-size: 16px; }
	.mh-btns { width: 100%; margin-left: 0; justify-content: flex-start; }
	.mh-btns button { min-width: 38px; height: 36px; padding: 0 8px; }
	.mh-btns button .material-symbols-outlined { font-size: 20px; }
	.mh-search { gap: 8px; padding: 10px 12px; }
	.mh-search .mh-s { width: 100%; flex-wrap: wrap; }
	.mh-search .mh-s > input, .mh-search .mh-s > select, .mh-search .mh-s > .mh-picker { flex: 1 1 160px; min-width: 0; }
	.mh-search .mh-sp { margin-left: 0; flex-wrap: wrap; max-width: 100%; }
	.mh-search .mh-radios { display: flex; flex: 1 1 100%; flex-wrap: nowrap; }             /* 라디오 묶음 = 한 줄 전체 폭, 칸은 같은 폭(공통 규칙 §4.1-5) */
	.mh-search .mh-radios label { flex: 1 1 0; justify-content: center; min-width: 0; padding: 0 6px; }
	.mh-content, .mh-tabpane, .mh-page .mh-split, :is(.mh-content, .mh-tabpane) > .mo-stack { gap: 8px; }
	.mh-page:not(:has(> .mh-content > .mh-search)) > .mh-content { margin-top: 8px; }
	.mh-tabbar { overflow-x: auto; scrollbar-width: none; }
	.mh-content > .mh-tabbar { margin-bottom: -8px; }                              /* 위 gap: 8px 과 같은 값 — 탭 칸 첫 조회조건 카드를 탭에 붙인다 */
	.mh-content > .mh-tabpane:not(:has(> .mh-search:first-child)) { margin-top: 8px; }
	.mh-tabbar button { padding: 0 12px; }
	.mh-tgls { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.mh-kv { grid-template-columns: 90px minmax(0, 1fr); }
}
@media screen and (max-width: 1023px) and (prefers-reduced-motion: reduce) { .mh-left { transition: none; } }
@media (pointer: coarse) {   /* 손가락으로 누르는 닫기 단추 — 늘 보인다 */
	.mh-tab-x { width: 28px; height: 28px; }
	.mh-tab:not(.on) > .mh-tab-x { visibility: visible; }
}
