/* #jwkim 2026-10-23 UI-03 v3 마감 레이어 — v2 위에 얹는 CSS 전용(레이아웃 DOM 불변). iPad Pro 12.9(1024x1366/1366x1024) 반응형·적응형 보정 + 디자인 정제.
   원복: 이 파일 링크만 제거. */
:root{
  --v3-s1:4px;--v3-s2:8px;--v3-s3:12px;--v3-s4:16px;--v3-s5:20px;--v3-s6:24px;--v3-s8:32px;
  --v3-fs-xs:12px;--v3-fs-sm:13px;--v3-fs-md:14px;--v3-fs-lg:16px;--v3-fs-xl:20px;--v3-fs-kpi:28px;
  --v3-line:rgba(16,24,40,.07);--v3-line-2:rgba(16,24,40,.12);
  --v3-sh-1:0 0 0 1px rgba(16,24,40,.04),0 1px 2px rgba(16,24,40,.05);
  --v3-sh-2:0 0 0 1px rgba(16,24,40,.05),0 4px 12px -2px rgba(16,24,40,.08),0 12px 32px -8px rgba(16,24,40,.10);
  --v3-focus:0 0 0 2px #fff,0 0 0 4px rgba(47,91,234,.55);
  --v3-sat:env(safe-area-inset-top,0px);--v3-sar:env(safe-area-inset-right,0px);--v3-sab:env(safe-area-inset-bottom,0px);--v3-sal:env(safe-area-inset-left,0px);
}
/* ── 타이포 스케일 ─────────────────────────────── */
html body.ledger{font-size:14px;line-height:1.55;letter-spacing:-.003em;}
body.ledger .main-wrapper .head_top .left_tit strong.tit{font-size:var(--v3-fs-lg)!important;font-weight:700!important;}
html body .dw-section .dw-head h2{font-size:17px;font-weight:700;letter-spacing:-.02em;}
html body .dw-section .dw-head p{font-size:var(--v3-fs-sm);line-height:1.5;}
html body .dw-section .dw-card h3{font-size:var(--v3-fs-md);font-weight:650;letter-spacing:-.012em;}
html body .dw-section .dw-card h3 span{font-size:var(--v3-fs-xs);font-weight:500;color:var(--v2-text-faint,#6B7486);}

/* ── 간격 리듬(8pt) ───────────────────────────── */
html body .dw-section .dw-grid{gap:var(--v3-s5);}
html body .dw-section .dw-card{padding:var(--v3-s5) var(--v3-s5) var(--v3-s4);gap:var(--v3-s3);border-color:var(--v3-line)!important;box-shadow:var(--v3-sh-1)!important;}
html body .dw-section .dw-card:hover{box-shadow:var(--v3-sh-2)!important;transform:none;}
body.ledger .main-wrapper .card_box,body.ledger .main-wrapper .search_box,body.ledger .main-wrapper .search_list{border-color:var(--v3-line)!important;box-shadow:var(--v3-sh-1)!important;}

/* ── 위젯 그리드: 컨테이너 폭 기준 1/2/3/4열 (iPad 세로 2열, 가로 3열, 1440↑ 4열) ── */
@container dw (min-width:920px){html body .dw-section .dw-grid{grid-template-columns:repeat(3,minmax(0,1fr));}}
@container dw (min-width:1240px){html body .dw-section .dw-grid{grid-template-columns:repeat(4,minmax(0,1fr));}}
@container dw (min-width:640px){html body .dw-section .dw-kpis{grid-template-columns:repeat(4,minmax(0,1fr));}}

/* ── KPI 카드 ─────────────────────────────────── */
html body .dw-section .dw-k{position:relative;padding:var(--v3-s3) var(--v3-s4);border-radius:12px;background:linear-gradient(180deg,#fff,#F8FAFD);border:1px solid var(--v3-line);}
html body .dw-section .dw-k .l{font-size:var(--v3-fs-xs);font-weight:600;color:var(--v2-text-faint,#6B7486);letter-spacing:.01em;}
html body .dw-section .dw-k .v{font-size:var(--v3-fs-kpi);font-weight:700;line-height:1.15;letter-spacing:-.03em;color:var(--v2-text,#0E1525);font-variant-numeric:tabular-nums;}
html body .dw-section .dw-k .v small{font-size:var(--v3-fs-xs);font-weight:600;}
html body .dw-section .dw-k .d{display:inline-flex;align-items:center;gap:4px;font-size:var(--v3-fs-xs);font-weight:600;}
html body .dw-section .dw-k .d.up::before{content:"▲";font-size:9px}html body .dw-section .dw-k .d.dn::before{content:"▼";font-size:9px}

/* ── 빈 상태(데이터 준비 중 / 연동 예정 / 관리자 전용) ── */
html body .dw-section .dw-state{position:relative;gap:6px;min-height:120px;padding:var(--v3-s5) var(--v3-s4);border:1px dashed var(--v3-line-2);border-radius:12px;background:repeating-linear-gradient(135deg,rgba(16,24,40,.018) 0 8px,transparent 8px 16px),#FAFBFD;color:var(--v2-text-faint,#6B7486);}
html body .dw-section .dw-state::before{content:"";width:36px;height:36px;margin-bottom:4px;border-radius:10px;background:#EEF1F6 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238A93A6' stroke-width='1.8' stroke-linecap='round'%3E%3Cpath d='M4 19V9M10 19V5M16 19v-7M22 19H2'/%3E%3C/svg%3E") center/20px no-repeat;}
html body .dw-section .dw-state b{font-size:var(--v3-fs-sm);font-weight:650;color:var(--v2-text-dim,#4A5468);}
html body .dw-section .dw-state span{font-size:var(--v3-fs-xs);max-width:30ch;line-height:1.5;}
html body .dw-section .dw-state.dw-soon{border:1px dashed rgba(47,91,234,.30);background:linear-gradient(180deg,rgba(47,91,234,.05),rgba(124,92,250,.04));color:#4A5BA8;}
html body .dw-section .dw-state.dw-soon::before{background:rgba(47,91,234,.10) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232F5BEA' stroke-width='1.8' stroke-linecap='round'%3E%3Cpath d='M10 14a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1 1M14 10a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1-1'/%3E%3C/svg%3E") center/20px no-repeat;}
html body .dw-section .dw-state.dw-soon b{color:var(--v2-accent,#2F5BEA);}

/* ── 테이블: 헤더·행 hover·카드 내부 가로 스크롤 ── */
body.ledger .main-wrapper table th{font-size:var(--v3-fs-xs)!important;font-weight:650!important;text-transform:none;letter-spacing:.02em;color:var(--v2-text-faint,#6B7486)!important;background:#F6F8FB!important;border-bottom:1px solid var(--v3-line-2)!important;height:40px;white-space:nowrap;}
body.ledger .main-wrapper table td{border-color:var(--v3-line)!important;height:44px;}
body.ledger .main-wrapper table tbody tr{transition:background-color 120ms ease-out;}
body.ledger .main-wrapper table tbody tr:hover td{background:rgba(47,91,234,.04)!important;}
@media (max-width:1366px){
  body.ledger .main-wrapper :is(.card,.card_box,.ledger-panel,.table-wrap,.table-responsive,.tbl_wrap,.grid-wrap):has(> table, > div > table){overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain;}
  html body .dw-section .dw-card :is(table){display:block;max-width:100%;overflow-x:auto;}
}

/* ── 활성 메뉴(실제 마크업: #topnav #gnb > ul > li.on > a, depth_2 li.on > a) ── */
body.ledger #topnav #gnb>ul>li>a{border-radius:10px;min-height:44px;display:flex;align-items:center;}
body.ledger #topnav #gnb>ul>li.on>a{background:rgba(47,91,234,.10)!important;color:#2F5BEA!important;font-weight:700!important;box-shadow:inset 3px 0 0 #2F5BEA;}
body.ledger #topnav #gnb>ul>li>ul.depth_2>li>a{min-height:40px;display:flex;align-items:center;}
body.ledger #topnav #gnb>ul>li>ul.depth_2>li.on>a{color:#2F5BEA!important;font-weight:650!important;background:rgba(47,91,234,.06)!important;border-radius:8px;}
body.ledger #topnav #gnb .lpi{width:18px;height:18px;flex-shrink:0;stroke-width:1.8;}

/* ── iPad Pro 12.9 세로(1024) ~ 가로(1366) : 사이드바 220px로 축소, 본문 확보 ── */
@media (min-width:1024px) and (max-width:1279px){
  body.ledger #topnav.ledger-side{width:220px!important;}
  html body.ledger .main-wrapper,html body.ledger .main-wrapper.leftcont,html body.ledger .main-wrapper:has(.ledger-dashboard){margin-left:220px!important;width:calc(100% - 220px)!important;}
  body.ledger .main-cont{padding:20px 20px 32px;}
}
/* 1024~1366 헤더 줄바꿈 방지·제목 말줄임 */
@media (min-width:1024px) and (max-width:1366px){
  body.ledger .main-wrapper .head_top{flex-wrap:wrap;row-gap:8px;height:auto!important;min-height:52px;}
  body.ledger .main-wrapper .head_top .left_tit{min-width:0;flex:1 1 240px;}
  body.ledger .main-wrapper .head_top .left_tit strong.tit{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
  body.ledger .modal-dialog.modal-lg,body.ledger .modal-dialog.modal-xl{max-width:min(920px,calc(100vw - 48px));}
}
/* 터치 기기: 44px 터치 타깃 */
@media (pointer:coarse){
  body.ledger .main-wrapper :is(.btn,button):not(.ag-root-wrapper *):not(.close){min-height:44px;}
  body.ledger .main-wrapper :is(.pagination,.paging) a{min-width:44px;min-height:44px;display:inline-flex;align-items:center;justify-content:center;}
  body.ledger .m_logo>button,body.ledger .btn_close button{min-width:44px;min-height:44px;}
  html body .dw-section .dw-links a,html body .dw-section .dw-action{min-height:56px;}
  body.ledger .lang-current{min-height:44px;}
  body.ledger #topnav #gnb>ul>li>ul.depth_2>li>a{min-height:44px;}
}
/* 모달 폭 */
@media (max-width:1023px){body.ledger .modal-dialog{max-width:calc(100vw - 24px - var(--v3-sal) - var(--v3-sar));}}

/* ── safe-area(노치·홈 인디케이터) ─────────────── */
@supports (padding:max(0px)){
  body.ledger .m_logo{padding-left:max(12px,var(--v3-sal))!important;padding-right:max(12px,var(--v3-sar))!important;padding-top:var(--v3-sat);}
  body.ledger #menu.left_menu{padding-bottom:var(--v3-sab);padding-left:var(--v3-sal);}
  body.ledger .main-cont{padding-bottom:max(32px,calc(16px + var(--v3-sab)));}
  body.ledger-login .login-block,body.ledger-public .wrap{padding-bottom:var(--v3-sab);}
}

/* ── 포커스(키보드) 일관화 ────────────────────── */
body.ledger :is(a,button,[role=button],input,select,textarea,summary):focus-visible,body.ledger-login :is(a,button,input):focus-visible,body.ledger-public :is(a,button,input):focus-visible{outline:none!important;box-shadow:var(--v3-focus)!important;border-radius:8px;}

/* ── 아이콘 일관화 ────────────────────────────── */
body.ledger svg.lpi{stroke:currentColor;fill:none;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle;}
html body .dw-section .dw-card svg{flex-shrink:0;}

/* ── 공개 여권/리졸버·로그인 미세 정리 ───────── */
body.ledger-public .search-row input{min-height:44px;font-size:16px;border-radius:10px!important;}
body.ledger-public .search-row button{min-height:44px;border-radius:10px;}
body.ledger-login .login-block .login_box input{min-height:48px;font-size:16px;}
body.ledger-login .login-block .btn-login{min-height:48px;letter-spacing:-.01em;}
/* #jwkim 2026-10-23 UI-03: 데스크톱 사이드바(>=1024)는 네이비 레일 — 활성/하위메뉴를 어두운 면 대비로 재정의(v2 흰 드롭다운 박스 제거) */
@media (min-width:1024px){
  body.ledger #topnav.ledger-side #gnb>ul>li>a{color:#AEB9D0!important;}
  body.ledger #topnav.ledger-side #gnb>ul>li>a:hover{color:#fff!important;background:rgba(255,255,255,.06)!important;}
  body.ledger #topnav.ledger-side #gnb>ul>li.on>a{background:rgba(110,139,255,.16)!important;color:#fff!important;box-shadow:inset 3px 0 0 #6E8BFF;}
  body.ledger #topnav.ledger-side #gnb>ul>li>ul.depth_2{background:transparent!important;border:0!important;box-shadow:none!important;}
  body.ledger #topnav.ledger-side #gnb>ul>li>ul.depth_2>li>a{color:#93A0BC!important;background:transparent!important;}
  body.ledger #topnav.ledger-side #gnb>ul>li>ul.depth_2>li>a:hover{color:#fff!important;}
  body.ledger #topnav.ledger-side #gnb>ul>li>ul.depth_2>li.on>a{color:#fff!important;background:rgba(255,255,255,.08)!important;}
}

/* #jwkim 2026-10-23 QA-01 전 기종 테스트 후속: 터치 기기(pointer:coarse) 헤더 아이콘·텍스트 링크 터치 타깃 44px 보정(CSS만, 레이아웃 불변) */
@media (pointer:coarse){
  body.ledger .alarm-btn,body.ledger .hdr-logout-btn{min-width:44px!important;min-height:44px!important;display:inline-flex!important;align-items:center;justify-content:center;}
  body.ledger .hdr-user-chip{min-height:44px!important;}
  body.ledger-login .login-block a[href*="findId"],body.ledger-login .login-block a[href*="join"],body.ledger-login .login-block a[href*="formMember"]{display:inline-flex;align-items:center;min-height:44px;padding:0 6px;}
}
/* #jwkim 2026-10-23 QA-01: 폰 가로(높이<=500px) 로그인 좌측 브랜드 패널 축소 — 폼이 첫 화면에 들어오도록 */
@media (orientation:landscape) and (max-height:500px){
  body.ledger-login .ledger-brand-copy h1,body.ledger-login .ledger-brand-copy p{display:none!important;}
}
/* #jwkim 2026-10-23 QA-01 긴급: 검색조건 폼 — style.css(2025-11-07) 5열 grid + li 30/70 grid 때문에 라벨이 한 글자씩 줄바꿈되고 입력칸이 붕괴되던 문제. 전 모듈 공통으로 라벨 한 줄 고정·입력칸 채움 */
body.ledger .main-wrapper .search_box>ul.search_list{display:grid!important;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))!important;gap:12px 20px!important;flex-wrap:initial!important;}
body.ledger .main-wrapper .search_box>ul.search_list>li{display:flex!important;align-items:center!important;gap:10px!important;grid-template-columns:none!important;min-width:0!important;width:auto!important;max-width:none!important;flex:initial!important;padding-bottom:0!important;}
body.ledger .main-wrapper .search_box>ul.search_list>li>label.tit,body.ledger .main-wrapper .search_box>ul.search_list>li>.tit{flex:0 0 auto!important;display:inline-flex!important;justify-content:flex-start!important;min-width:64px;margin:0!important;white-space:nowrap!important;word-break:keep-all!important;}
body.ledger .main-wrapper .search_box>ul.search_list>li>:is(input:not([type=hidden]):not([type=checkbox]):not([type=radio]),select,.select,.input-group,.form-control,div){flex:1 1 auto!important;min-width:0!important;width:auto!important;max-width:none!important;}
/* #jwkim 2026-10-23 QA-01 긴급: 사이드바 하단 gsb(프로필·플랫폼/EPCIS 바로가기) 블록이 v3 좁은 레일(1024~)에서 240px 라이트 박스로 겹쳐 깨짐 — 헤더 프로필·서비스 링크와 중복이므로 숨김 */
body.ledger .gsb{display:none!important;}
