@charset "utf-8";
/* ============================================================================
   20260810 ohy todo 26-0810-0049  탭브라우저(tab_browse) 리뉴얼
   CSSPATH='tab3' 인 도메인에서만 로드된다(IBCHeader.append_css_tab3).

   [적용 범위] 최상위 탭바(#topTab) + 좌측메뉴(aside > .lnb) + 실콘텐츠화면(.sContents)
              + iframe 안 업무화면의 '큰틀'(제목/경로/본문 래퍼) → 맨 아래 6번 섹션.

   [이름] 이 파일에서 부르는 이름을 통일한다(20260811 ohy).
            좌측메뉴     = <aside> + 그 안의 .lnb (메뉴/즐겨찾기 트리, 챗봇 밴드)
            실콘텐츠화면 = .sContents (탭바 #topTab + 본문 #tCon1/.tabContents + iframe)
          두 영역이 .subContents 안에서 나란히 놓인 flex row 다.

   [스코프] 이 파일은 tab3 도메인의 '모든' 페이지에서 로드된다. 업무화면은
           iframe 안에서 역시 IBCHeader 를 타므로 여기 규칙이 같이 실린다.
           그래서 1~5 섹션(껍데기)은 모든 선택자를 .tab3ui (탭브라우저 페이지 body 에만
           붙는 클래스) 아래로 가둔다. 이 접두어를 빼면 업무화면 안쪽까지 오염된다.
           반대로 6번 섹션은 업무화면을 노린 것이므로 `body:not(.tab3ui)` 로
           '껍데기만' 제외한다. 둘은 정확히 상보 관계다 — 새 규칙을 쓸 때
           둘 중 어느 쪽인지 먼저 정하고 접두어를 붙일 것.

   [선택자 길이] 기존 css/ibc/tab_browse.css 가
           `.subContents .lnb .tabCont .subMenu > li.on h3 a` 처럼 매우 긴
           선택자를 쓰고 일부는 !important 까지 건다. 상속이 아니라 '명시도'로
           이겨야 하므로 여기서도 같은 길이 + .tab3ui 한 겹을 더 얹는다.
           짧게 줄이면 조용히 안 먹는다.

   [로드 순서 — 중요] 이 파일은 css/ibc/tab_browse.css 보다 **먼저** 로드된다.
           MyJSP.getIBCHeader() 가
             getHeader()            ← 여기서 이 파일이 나간다
             + getStyle()
             + get_css_link()       ← tab_browse_basic.jsp 의 myJSP.css_link() 들
           순서로 이어붙이기 때문이다.
           즉 '나중에 쓴 쪽이 이긴다'가 통하지 않는다. 명시도가 같으면 저쪽이 이긴다.
           → 모든 규칙에 .tab3ui 를 붙여 항상 한 겹 높게 유지할 것.

   [인라인 style] 폭 계산(JS)과 body 배경은 인라인 style 이라 !important 로만 이긴다.
           아래 '0. 레이아웃' 참고.
   ========================================================================== */

/* ── 토큰 ────────────────────────────────────────────────────────────────
   :root 가 아니라 .tab3ui 에 둔다. iframe 업무화면까지 토큰이 새면
   나중에 누가 var() 를 참조했을 때 예상 못 한 곳이 따라 바뀐다. */
.tab3ui {
	--t3-font: var(--ibc-font-sans, 'Pretendard', 'Malgun Gothic', sans-serif);

	--t3-accent: #1f5fd0;			/* 상단바(header.css)의 --tab3-accent 와 같은 값 */
	--t3-accent-weak: #eaf0fc;
	--t3-page-bg: #eaedf2;

	--t3-surface: #ffffff;
	--t3-line: #dfe3ea;
	--t3-line-soft: #eef1f5;

	/* 좌측메뉴 스크롤 영역 배경. 20260811 ohy todo 26-0810-0049 */
	--t3-lnb-bg: #e9edf3;
	--t3-card-line: #e4e8ef;		/* 카드 테두리 — 본문 --t3-line 보다 한 톤 옅게 */

	/* ── 탭 색 (크롬식). 20260811 ohy todo 26-0810-0049 ────────────────── */
	--t3-tabbar-bg: #dde3ec;		/* 탭바 바닥 */
	--t3-tab-bg: transparent;		/* 비활성 탭 = 바닥이 비친다 */
	--t3-tab-bg-hover: rgba(255,255,255,.45);
	--t3-tab-line: #c6cede;			/* 비활성 탭 사이 세로 구분선 */
	--t3-tab-fg: #5a6577;
	--t3-tab-fg-on: #16233a;
	/* 활성 탭. 면은 흰색(아래 본문 흰 면과 이어져 크롬 탭처럼 읽힌다),
	   포인트는 글자 색이 맡는다. 옅은 하늘색 면(#e9f0fd)은 대봤다가 뺐다.
	   ※ --t3-tab-on-bg 의 !important 는 값이 흰색이라도 유지할 것 —
	     원본 tab_browse.css:187 이 #fff !important 라 빼면 우리 값이 조용히 무시된다. */
	--t3-tab-on-bg: #ffffff;
	--t3-tab-on-fg: #1a4fb0;

	--t3-fg: #2b3648;
	--t3-fg-dim: #6b7686;
	/* 활성 탭 위 모서리. 20260811 ohy todo 26-0810-0049
	   0 → 10px 로 되돌렸다. 예전 10px 라운드가 별로였던 건 위만 둥글고 아래는
	   그냥 끊겨서였고, 아래 --t3-tab-curl 이 붙으면서 해결됨. 둘은 세트다. */
	--t3-tab-radius: 10px;
	/* 활성 탭 '아래 바깥' 곡선(크롬 특유의 이음). --t3-tab-radius 와 같은 값 권장. */
	--t3-tab-curl: 10px;

	--t3-tab-h: 44px;

	/* 챗봇 카드 캐릭터 '높이'. 20260811 ohy todo 26-0810-0049 */
	--t3-aibot-h: 44px;

	/* 좌측메뉴 폭. */
	--t3-lnb-w: 240px;
}

/* 본문 배경. tab_browse_basic.jsp 가 <body style="background:#ededed"> 로
   인라인 지정하므로 인라인을 이기려면 !important 가 불가피하다. */
body.tab3ui { background: var(--t3-page-bg) !important; }

/* 상단바 리뉴얼(header.css)과 같은 폰트. base.css 가 button/strong/b/input 등
   '요소 선택자'에 font-family 를 직접 걸어두어(직접 지정 > 상속) 자식까지 명시해야 한다. */
.tab3ui .subContents,
.tab3ui .subContents * { font-family: var(--t3-font); }


/* ══════════════════════════════════════════════════════════════════════════
   0. 레이아웃 — 화면을 꽉 채운다 (여백 제거)
   ────────────────────────────────────────────────────────────────────────
   기존 구조는 폭을 JS 가 픽셀로 계산해 인라인 style 로 박는다.

       .subContents  width = wWidth - 70,  margin:0 auto   → 좌우 35px 씩 빈 공간
         aside > .lnb   210px  float:left
         .sContents    width = wWidth - 290, float:right   → lnb 와 사이 10px 틈

   같은 계산이 네 군데에 흩어져 있다.
     · tab_browse_basic.jsp   $(document).ready  (wWidth-70 / wWidth-290)
     · js/ibc_slider.js       browser_resize_adjust() / leftmenu_close() / leftmenu_open()

   그 값을 하나씩 고치는 대신 tab3 에서는 픽셀 계산 자체를 빼고 flex 로 채운다.
   CSS 의 !important 는 (important 아닌) 인라인 style 을 이기므로 위 네 곳이
   무슨 값을 넣든 전부 무력화된다. → JS 는 손대지 않아도 되고 다른 스킨도 무영향.
   ════════════════════════════════════════════════════════════════════════ */
/* ── 세로: 한 화면 고정(앱셸) ──────────────────────────────────────────
   기존은 "iframe 을 6000px 로 키우고 바깥(#tCon1)이 스크롤" 하는 구조라
   페이지 전체가 스크롤되고, .tabContents 는 min-height(670px)를 JS 가
   height 로 박아(tab_browse_basic.jsp:1162) 화면이 크면 아래가 회색으로 남았다.

   신규는 뷰포트를 넘지 않는 앱셸이다.
       body.tab3ui          100vh + overflow:hidden   (페이지 스크롤 없음)
       .wrap    flex column
         #ibctop            고정 66px
         section  flex:1    → .container → .subContents 가 남은 높이를 전부 차지
           aside            자체 스크롤
           .sContents flex column
             .topTab        고정
             .tabContents flex:1 → iframe height:100% (업무화면 안에서만 스크롤)

   min-height/height/overflow 는 JS 가 인라인으로 박으므로 !important 로 이긴다.
   ※ .tabContents 의 height 를 !important 로 고정하면서
     ToggleTopMenu22 의 .uptab/.downtab(621/714px 하드코딩) 어긋남도 같이 사라진다.
   ※ html 에는 절대 규칙을 걸지 말 것. 이 파일은 업무화면(iframe 안)에서도 로드되므로
     html{height:100%} 같은 건 그쪽까지 번진다. body.tab3ui + 100vh 로 가둔다. */
body.tab3ui { height: 100vh; overflow: hidden; }

/* ★ 높이 체인이 끊기는 지점 ★
   마크업이 body > form#myform > .wrap 이다. form 은 높이가 auto 라서
   .wrap 에 height:100% 를 줘도 "부모 높이가 확정 안 됨"으로 해석돼 auto 로 폴백한다.
   그러면 아래 flex 사슬 전체가 내용 높이로 주저앉는데, 이때 .subContents 가
   align-items:stretch 인 flex row 라서 '가장 키 큰 자식 = 좌측메뉴' 가 전체 높이를
   정해버린다(좌측메뉴 챗봇 이미지 때문에 약 410px). 화면 아래는 그대로 빈다.

   여기서 %가 아니라 vh 를 쓰는 이유 : % 는 또 부모(body) 높이에 의존한다.
   vh 는 뷰포트 기준이라 위쪽 사슬이 어떻든 항상 확정값이다.
   → 이 블록이 빠지면 앱셸이 통째로 무효가 된다. */
.tab3ui > form {
	height: 100vh;
	display: flex;
	flex-direction: column;
	min-height: 0;
}

/* overflow:hidden 금지 — 상단바의 알림/퀵메뉴/계정 드롭다운(.tab3-pop)이
   66px 헤더 밖으로 흘러내리는 구조라 조상에 overflow:hidden 이 있으면 잘린다.
   페이지 스크롤은 body 쪽 overflow:hidden 으로 이미 막았으므로 여기선 불필요. */
.tab3ui .wrap {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	height: auto;
	min-height: 0;
}
.tab3ui #ibctop { flex: 0 0 auto; }
.tab3ui .wrap > section {
	flex: 1 1 auto;
	min-height: 0;					/* 이게 없으면 flex 자식이 안 줄어들어 넘친다 */
	min-width: 0;
	display: flex;
}

/* 좌측메뉴 원본을 담아두는 보관함. JS 가 ready 에서 hide() 하지만 그 전 한 프레임 동안
   flex 아이템으로 폭을 먹는다. 처음부터 숨긴다(innerHTML 읽기는 display:none 이어도 된다). */
.tab3ui #leftmenuHolder { display: none !important; }

.tab3ui .container {
	flex: 1 1 auto;
	min-height: 0;
	min-width: 0;					/* 위 section 과 같은 이유 */
	display: flex;
	background: var(--t3-page-bg);
}

.tab3ui .subContents {
	flex: 1 1 auto;
	min-height: 0;
	min-width: 0;					/* 위 section 과 같은 이유 */
	display: flex;
	align-items: stretch;
	height: auto;
	width: auto !important;			/* JS 인라인 width(wWidth-70) 무력화 */
	margin: 0 !important;			/* 좌우 auto 여백(35px) 제거 */
	padding: 0;
}
/* 폭은 .lnb 가 --t3-lnb-w 로 정하고 aside 는 거기에 맞춰 따라간다(flex:0 0 auto).
   흰 배경과 경계선은 .lnb 가 아니라 aside 가 들고 있어야
   메뉴가 짧아도 패널이 화면 아래까지 이어진다(flex stretch).

   20260811 ohy todo 26-0810-0049
   스크롤 주체를 aside 에서 .tabCont(메뉴 목록)로 내렸다.
   #chabot 이 .lnb 안 '맨 끝'에 있어서, aside 가 스크롤하면 메뉴가 길 때
   챗봇도 같이 흘러 내려가 화면에서 사라진다. 아래처럼 층을 나눠야
   .lnbTab / #chabot 은 고정 밴드로 남고 가운데 목록만 스크롤한다.

       aside            flex column (스크롤 없음)
         .lnb           flex column, flex:1
           .lnbTab              고정
           .invt-search-menu    고정
           .tabCont     flex:1 + overflow-y:auto   ← 여기서만 스크롤
           #chabot              고정(바닥)

   ※ aside 에 overflow 를 걸면 안 된다 — INVT 검색 드롭다운(absolute)이 잘린다.
     한 축만 hidden 으로 둬도 CSS 규칙상 다른 축의 visible 이 auto 로 승격되므로
     (overflow-x:hidden + overflow-y:visible → auto) 통째로 뺀다. */
/* ── 좌측메뉴 ↔ 실콘텐츠화면 경계 : 선이 아니라 '층' ──────────────────────
   20260811 ohy todo 26-0810-0049

   [고치기 전] aside 에 border-right 1px 이 있었는데, 그 왼쪽 8px 안에
     · 메뉴 카드(li)의 오른쪽 테두리(--t3-card-line)
     · .tabCont 의 scrollbar-gutter:stable 이 비워둔 8px 띠
   가 나란히 서서 "가는 선 + 빈 띠 + 또 가는 선" 이 한 덩어리로 보였다.
   좌측메뉴 바닥도 실콘텐츠(흰색)와 거의 같은 밝기라 선에만 경계를 의존했다.

   [고친 방식] 경계선을 지우고 '바닥 색 단차' 하나만 남긴다.
     · 좌측메뉴(aside)         = 회색 바닥(--t3-lnb-bg #eef1f6). 선 없음
     · 실콘텐츠화면(.sContents) = 흰 본문. 선도 그림자도 없음
   간격(빈 여백)은 1px 도 늘지 않으면서 이중선이 사라진다.

   [폐기] 중간에 .sContents 왼쪽에 옅은 그림자를 드리워 "메뉴 위에 화면이
     올라와 있다" 로 읽히게 하는 안(C)을 넣어봤으나 빼기로 했다.
     되살릴 때는 --t3-panel-shadow 토큰과 아래 .sContents 의 주석 블록 둘 다 해제.
     ※ 되살린다면 조상에 overflow:hidden 이 없어야 한다 —
       .wrap / section / .container / .subContents 전부 없음(위 0. 레이아웃 참고). */
.tab3ui .subContents aside {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	min-height: 0;
	background: var(--t3-lnb-bg);	/* 카드가 떠 보이도록 한 단 내린 바닥 */
}

/* 남는 폭을 전부 본문이 가져간다. 좌측메뉴를 접으면(aside hide) 자동으로 100%. */
.tab3ui .subContents .sContents {
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	width: auto !important;			/* JS 인라인 width(wWidth-290 / w1200) 무력화 */
	min-width: 0;					/* flex 자식이 안 줄어드는 문제 방지 */
	min-height: 0;
	float: none !important;
}


/* ══════════════════════════════════════════════════════════════════════════
   1. 탭바 (#topTab)
   ════════════════════════════════════════════════════════════════════════ */

/* 기존: overflow:hidden + li 고정폭 170px + float:left.
   신규: flex + 가로 스크롤. 탭이 넘치면 잘리는 대신 스크롤된다.
   (개수 제한 alert 은 tab_browse.js 쪽에서 tab3 일 때만 해제) */
.tab3ui .sContents .topTab {
	/* 탭 폭 기준. 여기 숫자만 바꾸면 "몇 개까지 기본 크기로 보일지"가 정해진다.
	   20260811 ohy todo 26-0810-0049 */
	--t3-tab-per-view: 9;			/* 이 개수까지는 기본 크기, 넘으면 줄어든다 */
	--t3-tab-gap: 0px;
	--t3-tab-min: 56px;				/* 더는 못 줄어드는 하한. 여기 닿으면 가로 스크롤 */
	--t3-tab-max: 240px;			/* 초광폭 모니터에서 탭이 과하게 넓어지는 것 방지 */

	display: flex;
	align-items: flex-end;
	gap: var(--t3-tab-gap);
	width: 100%;
	background: var(--t3-tabbar-bg);
	/* 위 여백 0 — 탭이 상단바에 그대로 붙는다(브라우저 탭 방식).
	   오른쪽 38px 은 .allClose(상단바 접기) 자리.
	   왼쪽은 첫 탭의 하단 곡선이 li 밖 --t3-tab-curl 만큼 나가므로 그 자리를 비운다.
	   안 비우면 overflow-x 에 잘려 첫 탭만 곡선이 없다(왼쪽 오버플로는 스크롤도 안 된다).
	   20260811 ohy todo 26-0810-0049 */
	padding: 0 38px 0 var(--t3-tab-curl);
	box-sizing: border-box;
	overflow-x: auto;
	overflow-y: hidden;
	scrollbar-width: none;			/* Firefox */
	-ms-overflow-style: none;		/* IE */
	scroll-behavior: smooth;
}
.tab3ui .sContents .topTab::-webkit-scrollbar { height: 0; }

/* 좌측메뉴가 접힌 상태(.w1200)에선 왼쪽 .lnbOpen 버튼 자리를 비워준다.
   기존 규칙은 first-child 에 margin-left:40px 를 걸었는데 flex + 스크롤에선
   첫 탭만 밀려 스크롤 계산이 어긋난다 → 컨테이너 padding 으로 처리. */
.tab3ui .sContents.w1200 .topTab { padding-left: 38px; }
.tab3ui .sContents.w1200 .topTab li:first-child { margin-left: 0; }

.tab3ui .sContents .topTab li {
	position: relative;
	float: none;					/* 기존 float:left 무력화 */
	display: flex;
	/* 크롬식 축소. 20260811 ohy todo 26-0810-0049
	   `flex: 1 1 0` = 탭바 폭을 탭 개수로 균등분할. 고정 basis(구 188px)와 달리
	   탭바의 '내용 폭'이 개수에 비례해 커지지 않으므로, 조상 flex 계산에 휘둘리지 않고
	   항상 컨테이너 안에서 나눠 갖는다. 개수↑ = 폭↓ 이 그대로 성립.
	   max-width 로 상한을 (탭바폭 ÷ 9) 로 잡아서 9개까지는 기본 크기로 꽉 차고,
	   10개째부터 상한 아래로 내려가며 줄어든다.
	   min-width 하한(56px)에 닿으면 그때부터 가로 스크롤. */
	flex: 1 1 0;
	min-width: var(--t3-tab-min);
	max-width: var(--t3-tab-max);	/* min() 미지원 구형 브라우저 폴백 */
	max-width: min(var(--t3-tab-max),
		calc((100% - var(--t3-tab-gap) * (var(--t3-tab-per-view) - 1))
			/ var(--t3-tab-per-view)));
	margin: 0;
	cursor: pointer;
	-webkit-user-select: none;
	user-select: none;				/* 탭 드래그 재정렬 중 글자 선택 방지 */
}

/* 탭 본체. 배경·라운드는 예나 지금이나 a 가 들고 있다(.on 도 a 에 붙는다). */
.tab3ui .sContents .topTab li a {
	position: relative;
	flex: 1 1 auto;
	min-width: 0;					/* ellipsis 가 동작하려면 필수 */
	display: flex;
	align-items: center;
	height: var(--t3-tab-h);
	padding: 0 27px 0 13px;			/* 오른쪽 = 닫기 버튼 자리 */
	box-sizing: border-box;
	border-radius: var(--t3-tab-radius) var(--t3-tab-radius) 0 0;
	background: var(--t3-tab-bg);
	color: var(--t3-tab-fg);
	font-size: 12.5px;
	font-weight: 500;
	line-height: 1;
	letter-spacing: -0.01em;
	text-decoration: none;
	/* 기존엔 없어서 긴 제목이 탭 밖으로 흘러넘쳤다 */
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	transition: background .14s ease, color .14s ease;
}
.tab3ui .sContents .topTab li a:hover { background: var(--t3-tab-bg-hover); color: var(--t3-tab-fg-on); }

/* ── 탭 사이 세로 구분선 (크롬식) ────────────────────────────────────────
   20260811 ohy todo 26-0810-0049
   간격(gap)을 0 으로 없앤 대신, 비활성 탭끼리 한 덩어리 회색으로 뭉치지 않도록
   각 탭의 오른쪽 끝에 짧은 세로선을 하나 둔다.
   ※ li::after 는 드래그 재정렬 표시(li.t3-drop-before/after)가 이미 쓰고 있어
     겹치면 안 된다. a::before 는 파란 포인트 라인을 걷어내면서 비었으므로 여기 쓴다.
   ※ a 는 overflow:hidden 이지만 선이 박스 안(right:0)이라 잘리지 않는다. */
.tab3ui .sContents .topTab li a::before {
	content: "";
	position: absolute;
	right: 0;
	top: 50%;
	transform: translateY(-50%);
	width: 1px;
	height: 46%;
	background: var(--t3-tab-line);
	transition: opacity .12s ease;
}
/* 자기 자신이 활성/호버면 선을 지운다(크롬과 같은 동작).
   맨 오른쪽 탭은 그 뒤에 나눌 게 없으므로 항상 지운다. */
.tab3ui .sContents .topTab li:last-child a::before,
.tab3ui .sContents .topTab li:hover a::before,
.tab3ui .sContents .topTab li a.on::before { opacity: 0; }
/* 오른쪽 이웃이 활성/호버여도 지운다 — 선은 '앞 탭' 이 들고 있기 때문.
   ※ :has() 미지원 브라우저에서 위 규칙까지 통째로 무효가 되지 않도록 반드시 분리할 것.
     선택자 목록 중 하나라도 파싱 못 하면 규칙 전체가 버려진다. */
.tab3ui .sContents .topTab li:has(+ li:hover) a::before,
.tab3ui .sContents .topTab li:has(+ li a.on) a::before { opacity: 0; }

/* ── 활성 탭 ─────────────────────────────────────────────────────────────
   ★ 파란 상단 포인트 라인은 제거했다. 20260811 ohy todo 26-0810-0049
     상단바(header.css)의 GNB 활성 표시가 이미 '밑줄' 이다 —
     그라데이션 버전은 흰 줄, 흰배경 버전은 파란 줄. 탭에도 파란 줄을 그으면
     세로로 20px 사이에 강조선이 두 번 겹쳐 지저분해진다.
     → 구분은 선이 아니라 '면' 이 맡는다. 비활성은 바닥이 비치고,
       활성만 색 있는 면으로 떠오른다.

   ★ 원본 css/ibc/tab_browse.css:187 이 `background:#fff !important` 를 건다.
     예전엔 못 이긴다고 봤지만 그건 !important 없이 명시도만 올렸을 때 얘기다.
     !important 끼리는 명시도로 겨루므로, .tab3ui 한 겹이 더 있는 우리 쪽이
     (0,4,2) vs (0,3,2) 로 이긴다. → 활성 탭 색을 토큰으로 자유롭게 바꿀 수 있다. */
.tab3ui .sContents .topTab li a.on {
	background: var(--t3-tab-on-bg) !important;
	color: var(--t3-tab-on-fg);
	font-weight: 700;
}

/* ── 활성 탭 아래 바깥 곡선 (크롬 특유의 '본문으로 이어지는' 이음) ─────────
   20260811 ohy todo 26-0810-0049

   탭이 본문에서 솟아오른 것처럼 보이는 정체는 위쪽 라운드가 아니라
   '아래 바깥에 붙은 역(逆)라운드' 다. 탭 좌우 바닥에서 흰색이 오목한 곡선으로
   흘러나와 본문 면과 한 덩어리가 된다. 위 라운드만 있고 이게 없으면
   각진 상자가 그냥 끊긴 것처럼 보인다 — 둘은 세트다.

   [왜 이렇게 그리나]
     · clip-path: path() 는 픽셀 고정이라 가변폭 탭에 못 쓴다.
     · 가상요소 자리가 없다 : li::after = 드래그 재정렬 표시,
       a::before = 탭 구분선, .tabClose::before/::after = ✕ 두 획.
       a::after 는 a 가 overflow:hidden 이라 바깥으로 못 나간다.
       → 비어 있는 li::before 하나에 좌우 곡선을 '한꺼번에' 그린다.
         li 폭 + 좌우 --t3-tab-curl 만큼 넓은 띠를 깔고, 양 끝에만
         radial-gradient 타일을 놓는다(가운데는 투명 — 어차피 활성 탭의 흰 면).

   [원리] 10x10 타일 안에서 모서리를 중심으로 반지름 10px 원을 그리고
     원 '안'을 투명, '밖'을 흰색으로 둔다 → 딱 오목한 1/4 곡선이 남는다.
     투명 stop 을 0.5px 앞당겨 계단현상을 없앤다.
     투명색을 `transparent`(= rgba(0,0,0,0)) 로 쓰면 보간 중 회색 테가 생기므로
     반드시 흰색 알파 0(#ffffff00)을 쓴다.
     ※ --t3-tab-on-bg 를 흰색 아닌 값으로 바꾸면 이 0.5px 구간 색도 같이 바꿀 것.

   [겹침] 곡선이 양옆 탭 영역까지 넘어가므로 활성 li 를 형제보다 위로 올린다.
   [폴백] :has() 미지원이면 이 규칙만 통째로 무시되고 위 라운드는 그대로 남는다. */
.tab3ui .sContents .topTab li:has(a.on) { z-index: 2; }
.tab3ui .sContents .topTab li:has(a.on)::before {
	content: "";
	position: absolute;
	bottom: 0;
	left: calc(var(--t3-tab-curl) * -1);
	right: calc(var(--t3-tab-curl) * -1);
	height: var(--t3-tab-curl);
	pointer-events: none;			/* 옆 탭 클릭을 가로채지 않게 */
	background:
		radial-gradient(circle var(--t3-tab-curl) at 0 0,
			#ffffff00 calc(var(--t3-tab-curl) - 0.5px),
			var(--t3-tab-on-bg) var(--t3-tab-curl))
			left bottom / var(--t3-tab-curl) var(--t3-tab-curl) no-repeat,
		radial-gradient(circle var(--t3-tab-curl) at 100% 0,
			#ffffff00 calc(var(--t3-tab-curl) - 0.5px),
			var(--t3-tab-on-bg) var(--t3-tab-curl))
			right bottom / var(--t3-tab-curl) var(--t3-tab-curl) no-repeat;
}

/* ── 닫기 버튼 ────────────────────────────────────────────────────────── */
.tab3ui .sContents .topTab li .tabClose {
	position: absolute;
	right: 6px;
	top: 50%;
	transform: translateY(-50%);
	width: 18px;
	height: 18px;
	margin: 0;
	background: none;				/* GIF 제거 */
	border-radius: 5px;
	text-indent: 0;					/* 기존 -9999em 해제 */
	font-size: 0;					/* "닫기" 글자 숨김 */
	opacity: 0;
	transition: opacity .14s ease, background .14s ease;
	cursor: pointer;
}
/* 기존 `a.on + .tabClose` 가 배경 GIF 를 다시 깔기 때문에 별도로 죽인다. */
.tab3ui .sContents .topTab li a.on + .tabClose { background-image: none; }

/* ✕ 두 획 */
.tab3ui .sContents .topTab li .tabClose::before,
.tab3ui .sContents .topTab li .tabClose::after {
	content: "";
	position: absolute;
	left: 50%; top: 50%;
	width: 9px;
	height: 1.5px;
	margin: -0.75px 0 0 -4.5px;
	border-radius: 1px;
	background: currentColor;
}
.tab3ui .sContents .topTab li .tabClose::before { transform: rotate(45deg); }
.tab3ui .sContents .topTab li .tabClose::after  { transform: rotate(-45deg); }

/* 활성 탭이거나 마우스를 올린 탭에서만 닫기 버튼을 보인다.
   ✕ 획은 currentColor 라 여기 color 가 그대로 획 색이 된다. */
.tab3ui .sContents .topTab li:hover .tabClose { opacity: .55; color: var(--t3-tab-fg); }
/* 활성 탭은 바탕이 옅은 파랑이라 회색 ✕ 가 탁해 보인다 → 글자와 같은 계열로.
   20260811 ohy todo 26-0810-0049 */
.tab3ui .sContents .topTab li a.on + .tabClose { opacity: .6; color: var(--t3-tab-on-fg); }
/* .tab3ui 를 한 번 더 붙여 명시도를 (0,6,1)로 올린다. 20260811 ohy todo 26-0810-0049
   바로 위 `li a.on + .tabClose` 가 (0,5,2)라 이걸 안 하면 (0,5,1)인 이 규칙이 져서
   '활성 탭의 ✕ 만' 호버해도 빨개지지 않는다(예전부터 그랬다). */
.tab3ui.tab3ui .sContents .topTab li .tabClose:hover {
	opacity: 1;
	background: rgba(20,35,60,.10);
	color: #d43b30;
}

/* tab_browse_basic.jsp 인라인 <style> 의 무한회전(rotatecross) 제거.
   명시도 (0,4,0) 로 (0,2,0) 인 `.tabClose:hover` 를 이긴다. */
.tab3ui .sContents .topTab li .tabClose:hover { animation: none; }

/* ── 좁아진 탭 (.t3-narrow 는 tab_browse_tab3.js 가 실측 후 #topTab 에 부여) ── */
.tab3ui .sContents .topTab.t3-narrow li a { padding: 0 9px; }
.tab3ui .sContents .topTab.t3-narrow li:hover a,
.tab3ui .sContents .topTab.t3-narrow li a.on { padding-right: 23px; }
.tab3ui .sContents .topTab.t3-narrow li .tabClose { right: 3px; }

/* 드래그 재정렬 중 상태 (tab_browse_tab3.js 가 부여) */
.tab3ui .sContents .topTab li.t3-dragging { opacity: .45; }
.tab3ui .sContents .topTab li.t3-drop-before::after,
.tab3ui .sContents .topTab li.t3-drop-after::after {
	content: "";
	position: absolute;
	top: 4px; bottom: 0;
	width: 2px;
	border-radius: 1px;
	background: var(--t3-accent);
}
/* 간격이 3px 이던 때는 -2px 로 그 틈 가운데에 걸쳤다. 간격 0 이 되면서
   -2px 는 옆 탭을 덮으므로 경계선 위에 정확히 올린다. 20260811 ohy todo 26-0810-0049 */
.tab3ui .sContents .topTab li.t3-drop-before::after { left: 0; }
.tab3ui .sContents .topTab li.t3-drop-after::after  { right: 0; }


/* ══════════════════════════════════════════════════════════════════════════
   2. 탭 우클릭 메뉴 (tab_browse_tab3.js 가 body 직하에 생성)
   ════════════════════════════════════════════════════════════════════════ */
.t3-ctx {
	position: fixed;
	z-index: 100000;
	min-width: 176px;
	padding: 6px;
	border: 1px solid var(--t3-line, #dfe3ea);
	border-radius: 10px;
	background: #fff;
	box-shadow: 0 12px 32px rgba(10,25,60,.20);
	font-family: var(--ibc-font-sans, 'Malgun Gothic', sans-serif);
	font-size: 13px;
	color: #2b3648;
}
.t3-ctx button {
	display: block;
	width: 100%;
	padding: 9px 12px;
	border: 0;
	border-radius: 7px;
	background: transparent;
	color: inherit;
	font: inherit;
	text-align: left;
	cursor: pointer;
}
.t3-ctx button:hover { background: #f2f5fa; color: #1f5fd0; }
.t3-ctx button[disabled] { opacity: .38; cursor: default; }
.t3-ctx button[disabled]:hover { background: transparent; color: inherit; }
.t3-ctx hr { margin: 5px 6px; border: 0; border-top: 1px solid #eef1f5; }


/* ══════════════════════════════════════════════════════════════════════════
   3. 실콘텐츠화면 본문 (.tabContents / iframe) — 탭과 이어지는 '면'
   ════════════════════════════════════════════════════════════════════════ */
/* 탭바는 고정, 본문 패널이 남은 높이를 전부 차지한다. */
.tab3ui .sContents .topTab { flex: 0 0 auto; }

/* 기존 padding 은 20px 0 50px 30px — 이게 탭바~프레임 사이(위 20px)와
   프레임 왼쪽(30px)의 빈 공간이었다. iframe 을 컨테이너에 딱 맞춘다. */
.tab3ui .sContents .tabContents {
	flex: 1 1 auto;
	height: auto !important;
	min-height: 0 !important;
	padding: 0;
	border-radius: 0;
	box-shadow: none;
	overflow: hidden !important;	/* 스크롤은 iframe 안에서 */
}

/* 업무화면이 패널을 꽉 채운다. doResize() 가 인라인으로 박는 6000px/계산값을 무력화.
   ※ display 는 절대 건드리지 말 것 — select_tab() 이 $('#myiframe'+i).show()/.hide() 로
     탭을 전환한다. display:block !important 를 걸면 hide() 가 안 먹어 iframe 이 전부 겹친다.
   ※ absolute 를 쓰는 이유 : inline 요소의 baseline 여백(아래 몇 px)이 안 생기고,
     height:100% 가 부모 높이에 확실히 걸린다. .tabContents 는 이미 position:relative. */
.tab3ui .sContents .tabContents > iframe {
	position: absolute;
	left: 0;
	top: 0;
	width: 100% !important;
	height: 100% !important;
	border: 0;
}

/* 바깥 스크롤용 ▲▼ 버튼 — 바깥이 더 이상 스크롤되지 않으므로 감춘다 */
.tab3ui #Top_tCon1,
.tab3ui #Bottom_tCon1 { display: none !important; }

/* 상단바 접기 토글(ToggleTopMenu22) 버튼.
   ※ top:50% 로 가운데를 잡으면 안 된다 — 이 버튼의 기준(position:relative)은
     탭바가 아니라 실콘텐츠화면(.sContents) 전체라서 화면 한복판으로 간다.
     탭바 높이에서 계산해 px 로 넣는다. 20260811 ohy todo 26-0810-0049 */
.tab3ui .sContents .allClose {
	right: 4px;
	top: calc((var(--t3-tab-h) - 28px) / 2);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 28px;
	height: 28px;
	border-radius: 8px;
	background: rgba(20,35,60,.06);
	transition: background .14s ease;
}
.tab3ui .sContents .allClose:hover { background: rgba(31,95,208,.14); }
.tab3ui .sContents .allClose img { width: 15px; height: auto; opacity: .65; }
.tab3ui .sContents .allClose:hover img { opacity: 1; }

/* 좌측메뉴 열기 버튼(접힌 상태에서만 노출) */
.tab3ui .sContents .lnbOpen {
	left: 2px;
	top: calc((var(--t3-tab-h) - 28px) / 2);	/* .allClose 와 같은 이유 */
	width: 28px;
	height: 28px;
	border-radius: 8px;
	background: rgba(20,35,60,.06);
	text-align: center;
	line-height: 28px;
}
.tab3ui .sContents .lnbOpen:hover { background: rgba(31,95,208,.14); }
.tab3ui .sContents .lnbOpen img { vertical-align: middle; opacity: .65; }


/* ══════════════════════════════════════════════════════════════════════════
   4. 좌측메뉴 (.lnb)
   ────────────────────────────────────────────────────────────────────────
   폭은 --t3-lnb-w 토큰(맨 위)으로 뺐다. 원본 스킨과 달리 tab3 는 JS 의 픽셀
   폭 계산을 flex 로 무력화했으므로 토큰만 바꾸면 본문 폭이 알아서 따라온다.
   ════════════════════════════════════════════════════════════════════════ */
.tab3ui .subContents .lnb {
	width: var(--t3-lnb-w);
	float: none;					/* 기존 float:left 무력화 — 부모 aside 가 flex 아이템 */
	padding-bottom: 0;
	border-bottom: 0;			
	border-radius: 0;
	background: transparent;
	box-shadow: none;
	display: flex;
	flex-direction: column;
	flex: 1 1 auto;
	min-height: 0;
	height: 100%;
}

/* 고정 밴드 — 스크롤과 무관하게 항상 제자리 */
.tab3ui .subContents .lnb .lnbTab,
.tab3ui .subContents .lnb .invt-search-menu { flex: 0 0 auto; }
.tab3ui .subContents .lnb .tabCont {
	flex: 1 1 auto;
	min-height: 0;
	overflow-y: auto;
	overflow-x: hidden;
	overscroll-behavior: contain;	/* 메뉴 끝에서 본문까지 스크롤이 번지지 않게 */
	/* 스크롤바 자리를 항상 확보한다. 20260811 ohy todo 26-0810-0049
	   없으면 메뉴를 펼쳐 스크롤이 생기는 순간 내용 폭이 8px 줄어 카드가 움찔한다
	   (사용자 확인). 자리를 늘 잡아두면 스크롤 유무와 상관없이 카드 폭이 고정된다.
	   ※ 대신 카드의 오른쪽 margin 을 0 으로 두고 이 자리를 오른쪽 여백으로 쓴다.
	     둘 다 두면 8px + 8px = 16px 짜리 빈 띠가 생긴다(그게 '길게 남던' 정체). */
	scrollbar-gutter: stable;
}
/* ── 스크롤바 ────────────────────────────────────────────────────────────*/
.tab3ui .subContents .lnb .tabCont {
	scrollbar-width: thin;
	scrollbar-color: #ccd4e0 transparent;	/* Firefox */
}
.tab3ui .subContents .lnb .tabCont::-webkit-scrollbar { width: 8px; }
.tab3ui .subContents .lnb .tabCont::-webkit-scrollbar-track { background: transparent; }
.tab3ui .subContents .lnb .tabCont::-webkit-scrollbar-thumb {
	border: 2px solid transparent;	/* 좌우 2px 를 비워 실제 두께를 4px 로 */
	border-radius: 8px;
	background: #ccd4e0;
	background-clip: content-box;	/* 이게 없으면 border 영역까지 칠해져 8px 통짜가 된다 */
}
.tab3ui .subContents .lnb .tabCont::-webkit-scrollbar-thumb:hover {
	background: #a9b4c5;
	background-clip: content-box;
}

/* ── lnb 상단 탭 (메뉴 / 즐겨찾기) ──────────────────────────────────────
   마크업의 GIF 2장은 tab_browse_basic.jsp:1076-1081 의 스크립트가
   src 를 _on/_off 로 바꿔가며 쓰고 있어 지우면 그 스크립트가 죽는다.
   → img 는 DOM 에 남기되 감추고, 라벨은 JSP 가 넣어준 .t3-lnbtab-txt 로 그린다.
     활성 표시는 tab_browse_tab3.js 가 li 에 .is-on 을 달아준다.

   ★ 세그먼트 컨트롤 (20260811 수정) ★
     처음엔 '글자 색 + 글자 밑 2px 밑줄' 로 활성 탭을 표시했는데
     "메뉴를 보는 중인지 즐겨찾기를 보는 중인지 구분이 안 된다" 는 피드백.
     밑줄이 글자 폭만큼만 그려지는 데다 색 변화도 약했다.
     → 회색 트랙 위에 흰 알약이 얹힌 토글 형태로 바꾼다. 색이 아니라
       '형태와 높이' 로 구분되므로 곁눈질로도 어느 쪽인지 보인다. */
/* ★ 높이는 탭바(--t3-tab-h)와 '정확히' 같아야 한다. 20260811 ohy todo 26-0810-0049
     어긋난 아랫변이 좌측메뉴 ↔ 실콘텐츠화면 경계를 계단처럼 보이게 하기 때문.
     이쪽이 기준(50px)이고 탭바가 따라온다 — 토큰 주석 참고.
     border-box 라 border-bottom 1px 포함, 안쪽 여유 49px.
     트랙(3 + 알약 27 + 3 = 33px)이 align-items:center 로 가운데 앉아
     위아래 8px 씩 = 예전 padding:8px 과 같은 자리다.
     ※ 트랙/알약 높이를 바꾸면 (--t3-tab-h - 1) 안에 드는지 다시 확인할 것.
       넘치면 밴드가 아니라 트랙이 위아래 같이 잘려 눈치채기 어렵다. */
.tab3ui .subContents .lnb .lnbTab {
	position: relative;
	display: flex;
	align-items: center;
	height: var(--t3-tab-h);
	box-sizing: border-box;
	padding: 0 8px;
	/* 스크롤 영역은 회색 바닥이므로 위아래 고정 밴드는 흰색으로 남겨 층을 만든다 */
	background: var(--t3-surface);
	border-bottom: 1px solid var(--t3-line);
}
/* 트랙. 오른쪽은 .lnbClose(접기 버튼) 자리라 padding 이 아니라 margin 으로 비운다
   — padding 으로 비우면 트랙 배경이 버튼 밑까지 깔린다. */
.tab3ui .subContents .lnb .lnbTab ul {
	display: flex;
	flex: 1 1 auto;					/* .lnbTab 이 flex 라 이게 없으면 트랙이 글자 폭으로 쪼그라든다 */
	gap: 3px;
	width: auto;
	margin-right: 36px;				/* 접기 버튼(26px) 자리 + 2px 틈 */
	padding: 3px;
	border-radius: 9px;
	background: #eaeef4;
	overflow: visible;
}
.tab3ui .subContents .lnb .lnbTab ul li {
	float: none;
	flex: 1 1 0;
	width: auto;
}
.tab3ui .subContents .lnb .lnbTab ul li a {
	display: block;
	/* 알약 높이는 밴드 높이 계산의 입력값이라 폰트 메트릭에 맡기지 않고 고정한다
	   (구 padding:6px 0 은 글꼴에 따라 26~28px 로 흔들렸다. 27px = 그 실측값). */
	height: 27px;
	line-height: 27px;
	padding: 0;
	border-radius: 7px;
	background: transparent;
	color: var(--t3-fg-dim);
	font-size: 12.5px;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
	transition: color .14s ease, background .14s ease, box-shadow .14s ease;
}
.tab3ui .subContents .lnb .lnbTab ul li a:hover { color: var(--t3-fg); }
/* 원래 아이콘 GIF 는 숨긴다(엘리먼트는 유지 — JSP 스크립트가 src 를 바꿔 쓴다) */
.tab3ui .subContents .lnb .lnbTab ul li a img { display: none; }
/* 활성 = 트랙 위로 떠오른 흰 알약. .is-on 은 tab_browse_tab3.js bindLnbTab() 이 붙인다 */
.tab3ui .subContents .lnb .lnbTab ul li.is-on a {
	background: var(--t3-surface);
	color: var(--t3-accent);
	font-weight: 700;
	box-shadow: 0 1px 3px rgba(16,32,64,.16);
}
.tab3ui .subContents .lnb .lnbTab ul li a .t3-lnbtab-txt { position: relative; }

/* 좌측메뉴 접기 버튼 */
.tab3ui .subContents .lnb .lnbClose {
	right: 8px;
	/* 트랙 높이에 맞춰 세로 중앙. px 로 박으면 탭 글자 크기를 바꿀 때마다 어긋난다 */
	top: 50%;
	transform: translateY(-50%);
	display: flex;
	align-items: center;
	justify-content: center;
	width: 26px;
	height: 26px;
	border-radius: 7px;
	background: rgba(20,35,60,.05);
	transition: background .14s ease;
}
.tab3ui .subContents .lnb .lnbClose:hover { background: rgba(31,95,208,.13); }
.tab3ui .subContents .lnb .lnbClose img { opacity: .6; }
.tab3ui .subContents .lnb .lnbClose:hover img { opacity: 1; }

/* ── 메뉴 제목 (h2) — '섹션 구분 라벨'로 강등 ───────────────────────────
   20260811 ohy todo 26-0810-0049
   아이콘을 쓰지 않기로 했으므로 위계는 글자 크기·굵기·색만으로 만든다.
   그런데 실제 탐색 단위는 h2("회계관리")가 아니라 h3("기초정보","회계전표")다.
   h2 가 크면 h3 와 시선을 다투므로, h2 는 작고 흐린 구분 라벨로 내리고
   h3 를 가장 강하게 둔다. (원본은 22px #584122 로 h2 가 제일 컸다)

   ※ 한 화면에 h2 가 여러 개인 메뉴가 있다(FI_LeftMenu 는 회계관리/펀드관리…).
     두 번째 h2 부터 위에 구분선을 넣어 섹션 경계를 만든다. */
.tab3ui .subContents .lnb .tabCont h2 {
	padding: 14px 14px 5px;
	color: var(--t3-fg-dim);
	font-size: 11.5px;
	font-weight: 700;
	letter-spacing: 0.045em;
}
.tab3ui .subContents .lnb .tabCont .subMenu + h2 {
	margin-top: 8px;
	padding-top: 15px;
	/* 회색 바닥 위에서는 line-soft 가 거의 안 보인다 → 한 톤 진한 선 */
	border-top: 1px solid var(--t3-line);
}

/* ── depth2 : 아코디언 헤더 (h3) ────────────────────────────────────────
   기존엔 li:nth-child(1~10) 마다 배경 GIF/PNG 아이콘을 따로 지정했다.
   모듈별(account/hrpay/sales/…)로 같은 규칙이 반복돼 tab_browse.css 220줄 중
   160줄을 차지했고, 메뉴가 하나 늘 때마다 nth-child 를 추가해 왔다
   (nth-child(8) 이 2025-11-28 에 추가됨).
   → 아이콘을 전부 걷어내고 nth-child 의존을 끊는다. 메뉴가 늘어도 손댈 곳이 없다. */
/* 오른쪽 margin 이 0 인 이유 : .tabCont 의 scrollbar-gutter 가 잡아둔 8px 를
   그대로 오른쪽 여백으로 쓴다. 여기에 margin 을 또 주면 16px 짜리 빈 띠가 된다. */
.tab3ui .subContents .lnb .tabCont .subMenu {
	margin: 6px 0 0 8px;
	font-size: 13px;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 {
	border-top: 0;
	border-radius: 8px;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li:first-child h3 { border-top: 0; }

/* ── 그룹 = 카드 ────────────────────────────────────────────────────────
   20260811 ohy todo 26-0810-0049
   아이콘과 점 마커를 걷어내니 "항목 구분이 잘 안 된다"는 피드백이 있었다.
   처음엔 얇은 구분선으로 갈랐는데, 선 하나로는 '헤더와 그 하위 메뉴가
   한 묶음' 이라는 것까지는 못 보여준다 → 1depth 그룹 자체를 카드로 띄운다.

   카드를 li 에 거는 게 핵심이다. h3(헤더 한 줄)에 걸면 펼쳤을 때 헤더만
   떠 있고 하위 메뉴는 바닥에 흩어진 것처럼 보인다. li 는 .depth3 까지
   감싸므로 펼친 묶음 전체가 하나의 카드로 읽힌다.

   ※ overflow:hidden 을 걸지 말 것 — 현재 화면 표시(.t3-current)의 왼쪽 바가
     카드 안쪽 모서리에서 잘린다. 라운드는 각 요소가 알아서 처리한다. */
.tab3ui .subContents .lnb .tabCont .subMenu > li {
	margin-bottom: 6px;
	border: 1px solid var(--t3-card-line);
	border-radius: 10px;
	background: var(--t3-surface);
	box-shadow: 0 1px 2px rgba(16,32,64,.04);
	transition: border-color .14s ease, box-shadow .14s ease;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li:hover { border-color: #d3dbe6; }

/* 펼쳐진 카드 — 액센트 테두리 + 살짝 들어올린 그림자.
   배경을 칠하지 않는 이유 : 안쪽 항목의 hover/현재화면 표시도 옅은 배경을 쓰므로
   카드까지 칠하면 셋이 뭉개진다. 경계와 높이로만 구분한다. */
.tab3ui .subContents .lnb .tabCont .subMenu > li.on {
	border-color: #c2d5f4;
	box-shadow: 0 2px 10px rgba(31,95,208,.10);
}

/* 배경 이미지 일괄 제거 + 여백 재조정.
   기존 규칙들이 `.subMenu.account > li:nth-child(3).on h3 a` 처럼 길고
   일부는 !important 라 background 를 통째로 덮어써야 확실히 지워진다. */
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 a,
.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a,
.tab3ui .subContents .lnb .tabCont .subMenu > li:first-child h3 a,
.tab3ui .subContents .lnb .tabCont .subMenu > li:first-child.on h3 a {
	position: relative;
	display: block;
	/* 20260811 ohy todo 26-0810-0049
	   점 마커를 없앤 만큼 왼쪽 들여쓰기를 26px → 14px 로 당긴다.
	   210px 밖에 안 되는 폭에서 26px 은 긴 메뉴명을 두 줄로 접히게 만들었다. */
	padding: 9px 28px 9px 14px;
	border: 0;
	border-radius: 9px;				/* 카드(10px) 안쪽에 1px 테두리를 뺀 값 — 모서리가 맞는다 */
	background: transparent !important;	/* 기존 아이콘 GIF + #807060 갈색 배경 제거 */
	color: var(--t3-fg) !important;		/* 기존 .on 의 color:#fff !important 대응 */
	/* 아이콘이 없으므로 '크기+굵기'가 위계의 전부다. h2(11.5px)·h4(12.5px)보다
	   확실히 크고 굵어야 목록을 훑을 때 h3 가 먼저 잡힌다. */
	font-size: 13.5px;
	font-weight: 700;
	line-height: 1.35;
	letter-spacing: -0.015em;
	text-decoration: none;
	transition: background .14s ease, color .14s ease;
}
/* 좌측 액센트 바 — 펼쳐진 그룹 표시.
   구 버전의 회색 점(항상 보임)과 달리 평소엔 투명이고 .on 일 때만 켜진다.
   점은 '모든 줄'에 찍혀 오히려 시선을 분산시켰다. */
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 a::before {
	content: "";
	position: absolute;
	left: 0;
	top: 7px;
	bottom: 7px;
	width: 3px;
	border-radius: 3px;
	background: transparent;
	transition: background .14s ease;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 a:hover { background: #f4f6fa !important; }

/* ★ 펼침 상태 — 명시도 함정 (2026-08-11 실제로 겪음) ★
   배경은 채우지 않는다(accent-weak 로 채우면 아래 depth3 묶음과 한 덩어리로 보인다).
   색 + 좌측 바 + 화살표 회전으로 충분하다.

   문제는 '색' 이었다. 원본 tab_browse.css 에 모듈마다 이런 규칙이 있다.
     .subContents .lnb .tabCont .subMenu.account > li:first-child.on h3 a{color:#fff !important}
     (account / hrpay / sales / purchase / product / contract / general / email …)
   명시도가 (0,7,3) 인데 우리 `.tab3ui … .subMenu > li:first-child.on h3 a` 도 (0,7,3) 로
   동점이고, 원본이 myJSP.css_link() 로 '나중에' 실리므로 원본이 이긴다.
   → 첫 번째 카드를 펼치면 흰 카드 위에 흰 글씨가 되어 제목이 사라졌다.
     (두 번째 카드부터 멀쩡했던 건 저 규칙이 :first-child 에만 걸려서다)

   막는 방법 두 겹 :
     1) .tab3ui 를 한 번 더 붙여 (0,8,3) 으로 확실히 올린다
     2) 글자를 감싼 <strong> 에도 색을 직접 건다 — 원본에는 strong 을 잡는 규칙이
        아예 없으므로 이쪽은 명시도 싸움 자체가 없다
   ※ background 는 원본에 !important 가 없어 여기서 그냥 이긴다. color 만 문제였다. */
.tab3ui.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a,
.tab3ui.tab3ui .subContents .lnb .tabCont .subMenu > li:first-child.on h3 a {
	background: transparent !important;
	color: var(--t3-accent) !important;
}
.tab3ui.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a strong,
.tab3ui.tab3ui .subContents .lnb .tabCont .subMenu > li:first-child.on h3 a strong {
	color: var(--t3-accent) !important;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a::before { background: var(--t3-accent); }
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 a strong { font-weight: inherit; }

/* 펼침 화살표 — GIF 를 CSS 셰브론으로 교체.
   기존이 닫힘 8x12 / 열림 12x8 로 크기까지 바꾸므로 둘 다 덮어쓴다. */
.tab3ui .subContents .lnb .tabCont .subMenu > li h3 span.arr,
.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a + span.arr {
	right: 12px;
	top: 50%;
	width: 6px;
	height: 6px;
	margin-top: -4px;
	border: 0;
	border-right: 1.6px solid #a7b0be;
	border-bottom: 1.6px solid #a7b0be;
	background: none;
	/* ★★ text-indent 를 절대 되살리지 말 것 ★★  20260811 ohy todo 26-0810-0049
	   원본은 "더보기" 글자를 `text-indent:-9999em` 으로 화면 밖에 밀어 숨기고
	   화살표는 배경 GIF 로 그렸다. GIF 를 CSS 셰브론(transform:rotate)으로 바꾸면서
	   저 text-indent 를 남겨두면 스크롤 범위가 9만 px 로 폭발한다.

	     -9999em × 13px = 약 -130,000px  ← 글자가 왼쪽으로 밀린 '가로' 오버플로
	     회전이 없으면 무해하지만, 펼친 화살표는 rotate(-135deg) 라
	     그 가로 오버플로가 '세로'로 투영된다.
	       130,000 × sin(135°) ≈ 91,924px  (아래쪽)
	     → #tabCont01 의 scrollHeight 가 실제 메뉴 1,341px 대신 92,069px 가 되어
	       좌측메뉴 스크롤바가 끝없이 길어졌다(2026-08-11 실제로 겪음).
	     접힌 화살표(rotate(45deg))는 위/왼쪽 음수 방향이라 스크롤에 안 잡힌다
	     → "펼쳤을 때만" 증상이 나타나 원인을 찾기 어려웠다.

	   글자는 text-indent 대신 font-size:0 으로 지운다(.tabClose 와 같은 방식).
	   회전 요소에 큰 text-indent/음수 margin 을 두면 같은 함정이 반복된다. */
	text-indent: 0;
	font-size: 0;
	line-height: 0;
	overflow: hidden;
	transform: rotate(45deg);
	transition: transform .18s ease, border-color .14s ease;
	/* 화살표는 h3 안에서 <a> 위에 absolute 로 얹혀 있다. 여기를 누르면 판정이
	   span.arr 로 잡혀 아코디언이 안 열린다(핸들러는 `.subMenu h3 a`).
	   클릭이 밑의 <a>(display:block 이라 화살표 자리까지 덮는다)로 통과하게 한다. */
	pointer-events: none;
}
.tab3ui .subContents .lnb .tabCont .subMenu > li.on h3 a + span.arr {
	margin-top: -1px;
	border-color: var(--t3-accent);
	transform: rotate(-135deg);
}

/* ── depth3 : 펼쳐진 하위 메뉴 ──────────────────────────────────────────
   들여쓰기를 26px → 12px 로 당긴다. h3 본문이 14px 에서 시작하므로
   h4 의 자체 padding(10px)까지 더해도 h3 대비 8px 만 안쪽으로 들어간다.
   210px 폭에서는 이 정도가 "한 단계 안" 으로 읽히는 최소치이고,
   그 이상 밀면 메뉴명이 두 줄로 접힌다. 20260811 ohy todo 26-0810-0049 */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 {
	margin: 0;
	padding: 1px 8px 8px 12px;		/* 카드 안쪽이므로 오른쪽에도 여백이 필요하다 */
}
/* 잎 항목(=실제 화면 링크). 실제 클릭 대상이므로 depth4 보다 진하게 둔다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth {
	margin: 1px 0 0;
	padding: 6px 8px 6px 10px;
	border-radius: 6px;
	background: none;				/* bullet GIF 제거 */
	color: var(--t3-fg);
	font-size: 12.5px;
	font-weight: 500;
	line-height: 1.35;
	letter-spacing: -0.01em;
}
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4 a { color: inherit; text-decoration: none; }
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4:hover { background: #f4f6fa; color: var(--t3-accent); }
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth { color: var(--t3-accent); }

/* ── 행 전체를 클릭 대상으로 ────────────────────────────────────────────
   20260811 ohy todo 26-0810-0049
   원본은 여백을 h4 에 주고 <a>/<span> 은 인라인으로 뒀다. 그래서 실제 클릭
   판정 영역이 '글자 폭' 뿐이라, 항목 오른쪽 빈 자리를 눌러도 아무 일이 없었다
   (그룹 라벨은 안 열리고, 잎 항목은 화면이 안 뜬다).

   h4 의 padding 을 음수 margin 으로 상쇄해 자식이 h4 박스를 정확히 덮게 한다.
   배경·hover·현재화면 표시(.t3-current)는 그대로 h4 가 담당하므로(자식은 투명)
   기존 스타일과 충돌하지 않는다. JS 는 손대지 않는다 —
   클릭 핸들러가 이미 `.depth3 h4 a` 에 걸려 있어 영역만 넓히면 된다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4 > a,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4 > span {
	display: block;
	margin: -6px -8px -6px -10px;	/* 위 h4 padding: 6px 8px 6px 10px 상쇄 */
	padding: 6px 8px 6px 10px;
	cursor: pointer;
}

/* ── 그룹 라벨 h4 (뒤에 <ul> 이 따라오는 것) ────────────────────────────
   depth3 안에는 두 종류의 h4 가 섞여 있다.
     <h4><span class=tabmenu>환경설정</span></h4>          ← 화면으로 가는 잎
     <h4><a href="#none">회계전표</a></h4><ul>…</ul>        ← 하위 묶음을 여는 라벨
   생성 Java(50개 클래스)가 둘을 구분해 주지 않으므로 마크업 형태로 가른다.
   :has(+ ul) 미지원 브라우저에서는 위의 잎 스타일 그대로 보일 뿐 깨지지 않는다.
   (Chrome 105+ / 2022.08 부터 지원)

   ※ 이 라벨도 '클릭하면 열리는' 토글이다(원본 CSS 의 `h4 + ul{display:none}`).
     그래서 cursor 는 pointer 로 남기고, 열림 여부를 알 수 있게
     오른쪽에 셰브론을 붙인다.

   ★ 크기로 구분하지 말 것 (20260811 수정) ★
     처음엔 캡션처럼 보이려고 11px 로 줄였는데 두 가지가 어긋났다.
       1) 옆의 잎 항목(12.5px)보다 혼자 작아 "글씨가 이상하다" 는 인상
       2) 펼치면 JS 가 .sDepth 를 붙이는데
            `.depth3 h4.sDepth`      (0,7,1)  ← 잎 규칙, 12.5px
            `.depth3 h4:has(+ ul)`   (0,6,2)  ← 이 규칙, 11px
          클래스 수가 7 대 6 이라 .sDepth 가 이겨서 **열면 12.5px, 닫으면 11px** 로 튀었다
     → 크기는 잎과 같게 두고 굵기(700)와 색으로만 구분한다.
       그리고 아래 선택자에 `.sDepth` 변형을 같이 적어 (0,7,2) 로 올려
       열림/닫힘에서 크기가 변하지 않게 고정한다.

   ★ 굵기만으로는 구분이 약하다 (20260811 2차 수정) ★
     12.5px/700 로 맞추고 나니 잎 항목(12.5px/500)과 굵기 차이뿐이라
     "차별점을 못 느끼겠다" 는 피드백. → **옅은 밴드 배경**을 깔아
     '이 줄은 헤더' 라는 걸 형태로 보여준다. 잎 항목은 민무늬 한 줄이라 확실히 갈린다.
     펼치면 밴드가 액센트 톤으로 바뀌고 셰브론이 위를 향한다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4:has(+ ul),
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul) {
	position: relative;
	margin: 9px 0 2px;
	padding: 6px 24px 6px 10px;
	border-radius: 7px;
	background: #eaeef4;			/* 헤더 밴드 */
	color: var(--t3-fg);
	font-size: 12.5px;				/* 잎 항목과 동일 — 크기로 구분하지 않는다 */
	font-weight: 700;
	letter-spacing: -0.01em;
	line-height: 1.35;
}
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4:has(+ ul):hover,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul):hover {
	background: #dfe5ef;
	color: var(--t3-fg);
}
/* 펼친 상태 — 위 규칙과 명시도가 같으므로 반드시 뒤에 와야 적용된다 */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul) {
	background: var(--t3-accent-weak);
	color: var(--t3-accent);
}
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul):hover { background: #dde8fb; }

/* 그룹 라벨은 padding 이 다르므로(오른쪽 24px = 셰브론 자리) 상쇄값도 따로 준다 */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4:has(+ ul) > a,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul) > a {
	margin: -6px -24px -6px -10px;
	padding: 6px 24px 6px 10px;
}

/* 셰브론. content:"" 라 글자가 없으므로 text-indent 함정(span.arr 참고)과 무관하다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4:has(+ ul)::after {
	content: "";
	position: absolute;
	right: 9px;
	top: 50%;
	width: 5px;
	height: 5px;
	margin-top: -4px;
	border-right: 1.5px solid #b9c2d0;
	border-bottom: 1.5px solid #b9c2d0;
	transform: rotate(45deg);
	transition: transform .18s ease, border-color .14s ease;
	/* 이 셰브론은 h4 의 가상요소라 여기를 클릭하면 판정이 h4 로 잡혀 토글이 안 된다
	   (핸들러는 `.depth3 h4 a` 에 걸려 있다). 클릭이 밑의 <a> 로 통과하게 한다. */
	pointer-events: none;
}
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.sDepth:has(+ ul)::after {
	margin-top: -1px;
	border-color: var(--t3-accent);
	transform: rotate(-135deg);		/* 열리면 위를 향하게 */
}

/* depth4 목록 — 회색 박스 대신 좌측 가이드라인.
   왼쪽 margin 을 h4 의 padding-left(10px)에 맞춰 가이드라인이 라벨 시작점과 정렬된다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4 + ul {
	margin: 1px 0 5px 10px;
	padding: 2px 0 2px 9px;
	border-left: 1.5px solid var(--t3-line-soft);
	border-radius: 0;
	background: none;				/* 기존 #f3f3f3 박스 제거 */
}
/* ※ `.depth3 ul > a` 가 선택자에 들어간 이유 :
     생성 Java 일부가 <ul> 안에 <li> 없이 <a> 를 바로 넣는다.
       FI_LeftMenu.java:231  sb.append("<ul>"); sb.append("<a href=…>매출 등록</a>");
     파서가 그대로 ul 의 자식으로 두므로 `ul li a` 로는 안 잡혀 그 항목들만
     스타일이 빠진 채 남는다(원본 tab_browse.css 도 동일한 누락).
     Java 를 고치는 대신 선택자에 한 줄 더해 흡수한다. */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li a,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > a,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > li > ul > li a,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > li > ul > li span {
	display: block;
	padding: 5px 8px;
	border-radius: 6px;
	background: none;				/* bullet GIF 제거 */
	color: var(--t3-fg-dim);
	font-size: 12.5px;
	font-weight: 400;
	line-height: 1.35;
	letter-spacing: -0.01em;
	text-decoration: none;
	transition: background .12s ease, color .12s ease;
}
/* 기존 hover/on 이 밑줄 + 주황(#e07241) + bullet 재지정이라 통째로 덮어쓴다 */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li a:hover,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li a.on,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span:hover,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span.on,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > a:hover,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > li > ul > li a:hover {
	background: var(--t3-accent-weak);
	color: var(--t3-accent);
	font-weight: 600;
	text-decoration: none;
}
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span { cursor: pointer; }

/* ── 현재 보고 있는 화면 ────────────────────────────────────────────────
   20260811 ohy todo 26-0810-0049
   tab_browse_tab3.js 의 applyCurrent() 가 .t3-current 를 붙인다.
   원본의 .on 을 안 쓰는 이유 : 그것을 붙이는 코드가
   tab_browse_basic.jsp:1097 에서 주석 처리돼 있어 영영 걸리지 않는다.

   ※ 위 :hover 규칙들과 명시도가 같으므로 반드시 '뒤에' 있어야 이긴다.
     앞으로 옮기면 마우스를 올렸을 때 현재 표시가 사라진다.
   ※ depth3 잎은 h4 에, depth4 항목은 a/span 자신에게 붙는다(markTargetOf 참고). */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.t3-current,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li a.t3-current,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span.t3-current,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > a.t3-current {
	position: relative;
	background: var(--t3-accent-weak);
	color: var(--t3-accent);
	font-weight: 700;
}
/* 왼쪽 액센트 바 — 배경만으로는 hover 와 구별이 안 된다(hover 도 옅게 깔리므로) */
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 h4.t3-current::before,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li a.t3-current::before,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul li span.t3-current::before,
.tab3ui .subContents .lnb .tabCont .subMenu .depth3 ul > a.t3-current::before {
	content: "";
	position: absolute;
	left: 0;
	top: 5px;
	bottom: 5px;
	width: 3px;
	border-radius: 0 3px 3px 0;
	background: var(--t3-accent);
}


/* ══════════════════════════════════════════════════════════════════════════
   5. INVT 자동완성 검색박스 — 신규 좌측메뉴 톤에 맞춤
   ────────────────────────────────────────────────────────────────────────
   20260812 ohy todo 26-0810-0049

   ★ 이 블록은 반드시 !important 여야 한다.
     tab_browse_basic.jsp 가 이 세 요소를 전부 인라인 style= 로 그린다
     (박스 background:#f4f5f7 / 입력칸 border-radius:16px / 드롭다운 box-shadow …).
     인라인 style 은 선택자 명시도와 무관하게 외부 CSS 를 항상 이기므로
     `.tab3ui …` 를 아무리 겹쳐도 옛 회색 톤이 그대로 남는다.
     껍데기에서 .subContents/.sContents 폭을 죽일 때 쓴 것과 같은 수법.
     ※ 인라인 style 을 JSP 에서 걷어내지 않는 이유 = 그 마크업은 tab3 아닌
       도메인(창투사 전반)도 그대로 쓰므로 건드리면 회귀 범위가 넓어진다.
   ════════════════════════════════════════════════════════════════════════ */
.tab3ui .subContents .lnb .invt-search-menu {
	padding: 10px 10px 9px !important;
	border-bottom: 1px solid var(--t3-line) !important;
	background: var(--t3-lnb-bg) !important;
}
.tab3ui .subContents .lnb .invt-search-menu #invt_search_word {
	padding: 8px 30px 8px 12px !important;
	border: 1px solid var(--t3-line) !important;
	border-radius: 8px !important;
	background: #f7f9fc !important;
	font-size: 12px !important;
	transition: border-color .14s ease, background .14s ease;
}
.tab3ui .subContents .lnb .invt-search-menu #invt_search_word:focus {
	border-color: var(--t3-accent) !important;
	background: #fff !important;
}
.tab3ui .subContents .lnb .invt-search-menu #invt_search_dropdown {
	border: 1px solid var(--t3-line) !important;
	border-radius: 10px !important;
	box-shadow: 0 10px 28px rgba(10,25,60,.16) !important;
}


/* ══════════════════════════════════════════════════════════════════════════
   6. AI 챗봇 — 좌측메뉴 하단 고정 버튼
   ────────────────────────────────────────────────────────────────────────
   20260811 ohy todo 26-0810-0049

   기존 마크업은 200x200 정사각 이미지(/images/logo/ai_07.png) 한 장이었다.
   좌측메뉴가 210px 인데 세로로 200px 을 먹어 메뉴 6~7줄 분량의 자리를 차지하면서도,
   .lnb 안 맨 끝에 있어 스크롤하면 화면 밖으로 사라졌다.

   → 위 '3층 구조'(aside 주석 참고)로 .lnb 바닥에 고정하고,
     tab3 에서만 '로봇 이미지 + HTML 문구' 카드로 바꾼다(tab_browse_basic.jsp 가 bTab3UI 분기).

   [왜 문구를 이미지에 굽지 않는가]
     좌측메뉴 표시 폭 = 210 - 좌우 padding 8 x 2 = 194px.
     가로형 배너를 194px 로 줄이면 그 안의 "IB AI Assistant" 는 약 6px,
     한글 부제는 약 4.5px 가 된다 — 읽을 수 있는 크기가 아니다.
     게다가 이미지 텍스트는 고DPI 에서 뭉개지고, 오타가 나면 이미지를 다시 뽑아야 한다
     (AI 생성 배너에 '얻무를'/'대학하기' 오타가 실제로 있었다).
     문구를 마크업에 두면 JSP 한 줄로 고치고, 어느 배율에서도 선명하다.

   [이미지] /images/aichat/aichatbot_chara.png — 512x341(가로 3:2), 배경 투명 PNG, 텍스트 없음.
     표시 폭 44px 의 약 12배라 고DPI 에서도 선명하다.
     높이를 auto 로 두어 원본 비율대로 앉힌다(정사각이 아니므로 40x40 박스에
     object-fit:contain 으로 넣으면 위아래가 비어 캐릭터만 작아진다).
     이미지를 교체할 때 가로세로비가 달라져도 CSS 는 손댈 필요가 없다.

   ※ text-align / margin-top 은 인라인 style 이라 !important 로 눌러야 한다.
   ※ DOM 구조는 유지 — goto_chatbot() onclick 이 그대로 살아 있어야 한다. */
.tab3ui .subContents .lnb #chabot {
	flex: 0 0 auto;
	margin-top: 0 !important;		/* 인라인 margin-top:5px */
	padding: 8px;
	border-top: 1px solid var(--t3-line-soft);
	/* background: var(--t3-surface); 20260918 ohy 배경삭제*/
	text-align: left !important;	/* 인라인 text-align:center */
}
/* 카드 — 흰 좌측메뉴 바닥에 놓이는 진남색 패널. 배경·라운드를 CSS 가 그리므로
   이미지에서 여백을 잘라낼 일도, 비율을 맞출 일도 없다. */
.tab3ui .subContents .lnb #chabot a.t3-aibot {
	display: flex;
	align-items: center;
	gap: 9px;
	padding: 9px 10px;
	border-radius: 10px;
	background: linear-gradient(135deg, #17325c 0%, #0d1b30 100%);
	box-shadow: inset 0 1px 0 rgba(255,255,255,.09);
	text-decoration: none;
	transition: box-shadow .16s ease, filter .16s ease;
}
.tab3ui .subContents .lnb #chabot a.t3-aibot:hover {
	box-shadow: inset 0 1px 0 rgba(255,255,255,.14), 0 5px 16px rgba(10,25,60,.28);
	filter: brightness(1.12);
}
.tab3ui .subContents .lnb #chabot a.t3-aibot img {
	flex: 0 0 auto;
	height: var(--t3-aibot-h);
	width: auto;					/* ← 원본 비율 유지(높이 기준). 512x341 이면 높이x1.5 */
}
/* 문구 두 줄. 글자 자리 =
     --t3-lnb-w(240) - #chabot padding(8x2) - 카드 padding(10x2) - 캐릭터(44x1.5=66) - gap(9) = 129px
   부제("업무를 빠르고 스마트하게")가 10.5px 에서 약 121px 라 여기에 들어간다.
   ※ --t3-aibot-h 를 키우거나 --t3-lnb-w 를 줄이면 여기가 먼저 좁아진다.
     넘치면 줄바꿈 대신 말줄임으로 흘려 카드 높이가 들쭉날쭉해지지 않게 했다.
   min-width:0 이 없으면 flex 아이템이 안 줄어들어 ellipsis 가 동작하지 않는다. */
.tab3ui .subContents .lnb #chabot a.t3-aibot .t3-aibot-txt {
	display: flex;
	flex-direction: column;
	gap: 2px;
	min-width: 0;
	text-align: left;
}
.tab3ui .subContents .lnb #chabot a.t3-aibot .t3-aibot-txt b,
.tab3ui .subContents .lnb #chabot a.t3-aibot .t3-aibot-txt em {
	display: block;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
	line-height: 1.3;
	letter-spacing: -0.01em;
}
.tab3ui .subContents .lnb #chabot a.t3-aibot .t3-aibot-txt b {
	color: #fff;
	font-size: 12px;
	font-weight: 700;
}
.tab3ui .subContents .lnb #chabot a.t3-aibot .t3-aibot-txt em {
	color: rgba(255,255,255,.70);
	font-size: 10.5px;
	font-style: normal;				/* em 기본 이탤릭 해제 */
	font-weight: 400;
}


/* ══════════════════════════════════════════════════════════════════════════
   7. 즐겨찾기 탭 (#tabCont02)          20260811 ohy todo 26-0810-0049
   ────────────────────────────────────────────────────────────────────────
   메뉴 탭만 리뉴얼돼 있어서 좌측메뉴 상단에서 '즐겨찾기' 로 넘어가면
   구 디자인(갈색 글자 + bullet GIF + 주황 버튼)이 그대로 나왔다.

   [내용은 ajax 로 갈아끼워진다]
     /common/ajah/ajah_get_favorite_menu.jsp 가 통째로 그린 HTML 을
     fill_favorite_menu() 가 .favoriteWrap 안에 넣는다(tab_browse_basic.jsp:854).
     세 패널이 한 마크업에 다 들어 있고 JS 가 show/hide 로 전환한다.
       #favorite_list          기본 목록 (+ .btnBox 의 해제/순서변경 버튼)
       #div_favoriteList_remove 해제 모드 (별 아이콘 토글)
       #div_favoriteList_sorting 순서변경 모드 (라디오 + ▲▼)
     → display 는 절대 건드리지 말 것. JS 의 show()/hide() 와 싸운다.

   [명시도] /css/ibc/favorite.css 는 myJSP.css_link() 로 실려 이 파일보다
     '나중에' 로드된다(tab_browse.css 와 같은 상황). 게다가 목록 li 의
     border-top, .favoriteWrap 의 min-height 등은 JSP 가 인라인으로도 박는다.
     → .tab3ui 한 겹 + 인라인을 이겨야 하는 곳은 !important.
   ════════════════════════════════════════════════════════════════════════ */

/* 550px 고정 최소높이 제거. .tabCont 가 스크롤 주체가 된 지금은
   즐겨찾기가 두세 개뿐이어도 항상 스크롤바가 생긴다. */
.tab3ui .subContents .lnb #tabCont02 .favoriteWrap { min-height: 0 !important; }

/* ── 해제 / 순서변경 버튼 ────────────────────────────────────────────────
   원본은 img_btn_clear.gif / img_btn_change.gif 두 장이다.
   외부 이미지 의존을 끊고 텍스트 버튼으로 바꾼다(라벨은 ::after 로 넣는다).
   .cl = 해제 모드, .ch = 순서변경 모드 (tab_browse_basic.jsp:865/884 확인). */
.tab3ui .subContents .lnb .favoriteWrap .btnBox {
	display: flex;
	gap: 6px;
	margin: 10px 0 2px 8px !important;	/* 인라인 margin:25px 0 0 15px. 오른쪽은 gutter */
}
.tab3ui .subContents .lnb .favoriteWrap .btnBox a {
	flex: 1 1 0;
	display: block;
	margin: 0 !important;
	padding: 7px 0;
	border: 1px solid var(--t3-line);
	border-radius: 8px;
	background: #fff;
	color: var(--t3-fg-dim);
	font-size: 11.5px;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
	transition: background .14s ease, color .14s ease, border-color .14s ease;
}
.tab3ui .subContents .lnb .favoriteWrap .btnBox a:hover {
	border-color: #c6d6f2;
	background: var(--t3-accent-weak);
	color: var(--t3-accent);
}
.tab3ui .subContents .lnb .favoriteWrap .btnBox a img { display: none; }
.tab3ui .subContents .lnb .favoriteWrap .btnBox a.cl::after { content: "해제"; }
.tab3ui .subContents .lnb .favoriteWrap .btnBox a.ch::after { content: "순서변경"; }

/* ── 즐겨찾기 목록 — 메뉴 탭 depth4 와 같은 톤 ───────────────────────── */
/* 메뉴 탭의 그룹 카드와 같은 판. 바닥이 회색이라 목록도 흰 카드 위에 놓아야
   같은 화면으로 읽힌다(border 를 통째로 지정해 인라인 border-bottom 까지 덮는다). */
.tab3ui .subContents .lnb .favoriteWrap .favoriteList,
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 {
	margin: 6px 0 0 8px !important;		/* 인라인 margin-top:10px. 오른쪽은 scrollbar-gutter */
	padding: 4px !important;
	border: 1px solid var(--t3-card-line) !important;	/* 인라인 border-bottom */
	border-radius: 10px;
	background: var(--t3-surface);
	box-shadow: 0 1px 2px rgba(16,32,64,.04);
	line-height: normal !important;
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList li,
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li {
	position: relative;
	border-top: 0 !important;			/* 인라인 border-top:solid 1px #e0e0e0 */
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList li a {
	display: block;
	padding: 8px 10px !important;		/* 원본 6px 0 4px 26px (bullet 자리) */
	border-radius: 8px;
	background: none !important;		/* bullet GIF 제거 */
	color: var(--t3-fg) !important;		/* 원본 #7b674c */
	font-size: 12.5px !important;
	text-decoration: none;
	transition: background .12s ease, color .12s ease;
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList li a strong { font-weight: 500; }
.tab3ui .subContents .lnb .favoriteWrap .favoriteList li a:hover {
	background: var(--t3-accent-weak);
	color: var(--t3-accent) !important;
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList li a:hover strong { font-weight: 600; }

/* 즐겨찾기가 하나도 없을 때 — 원본은 빈 화면이라 고장난 것처럼 보인다 */
.tab3ui .subContents .lnb .favoriteWrap .favoriteList:empty::after {
	content: "즐겨찾기가 없습니다.";
	display: block;
	padding: 18px 10px;
	color: var(--t3-fg-dim);
	font-size: 12px;
	text-align: center;
}

/* ── 해제 / 순서변경 모드 목록 ───────────────────────────────────────── */
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li strong {
	display: block;
	padding: 8px 34px 8px 10px !important;	/* 오른쪽 = 별/라디오 자리 */
	border-radius: 8px;
	color: var(--t3-fg) !important;
	font-size: 12.5px !important;
	font-weight: 500;
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li:hover strong { background: #f4f6fa; }
/* 별 아이콘(remove_off/remove_on)은 JS 가 show/hide 로 토글하는 기능 요소라 남긴다 */
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li a {
	right: 9px !important;
	top: 50% !important;
	margin-top: -9px;
	line-height: 0;
}
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li a img { width: 18px; height: 18px; }
.tab3ui .subContents .lnb .favoriteWrap .favoriteList2 li .check {
	right: 11px !important;
	top: 50% !important;
	margin-top: -7px;
	cursor: pointer;
}
/* 해제 대상으로 고른 항목(.selected 는 tab_browse_basic.jsp:879 가 붙인다) */
.tab3ui .subContents .lnb .favoriteWrap .remove_favorite_menu.selected strong {
	background: #fdecea;
	color: #c0392b !important;
}

/* ── 안내 문구 ──────────────────────────────────────────────────────── */
.tab3ui .subContents .lnb .favoriteWrap .fClear {
	margin: 10px 0 0 8px !important;	/* 오른쪽은 scrollbar-gutter */
	padding: 9px 10px !important;
	border: 1px solid var(--t3-card-line);
	border-radius: 10px;
	/* 원본은 별 PNG 를 배경으로 깔았다. 바닥이 회색이 된 지금은 흰 카드로 둬야 보인다 */
	background: var(--t3-surface) !important;
	color: var(--t3-fg-dim) !important;
	font-size: 11.5px !important;
	line-height: 1.45 !important;
}
.tab3ui .subContents .lnb .favoriteWrap .updown {
	margin: 10px 0 0 !important;
	padding: 0 0 0 8px !important;
}
.tab3ui .subContents .lnb .favoriteWrap .updown p {
	float: none !important;
	width: auto !important;
	color: var(--t3-fg-dim);
	font-size: 11.5px;
	line-height: 1.45;
}
.tab3ui .subContents .lnb .favoriteWrap .updown .udBtn {
	float: none !important;
	width: auto !important;
	display: flex;
	gap: 6px;
	margin-top: 7px;
}
.tab3ui .subContents .lnb .favoriteWrap .updown .udBtn a {
	flex: 1 1 0;
	padding: 5px 0;
	border: 1px solid var(--t3-line);
	border-radius: 7px;
	background: #fff;
	text-align: center;
	line-height: 0;
}
.tab3ui .subContents .lnb .favoriteWrap .updown .udBtn a:hover { background: var(--t3-accent-weak); }

/* ── 확인 / 취소 버튼 ───────────────────────────────────────────────── */
.tab3ui .subContents .lnb .favoriteWrap .setBtn {
	display: flex;
	gap: 6px;
	margin: 12px 0 10px !important;
	padding: 0 0 0 8px !important;
	text-align: left !important;
}
.tab3ui .subContents .lnb .favoriteWrap .setBtn a {
	flex: 1 1 0;
	padding: 8px 0 !important;
	border: 1px solid var(--t3-line) !important;
	border-radius: 8px !important;
	background: #fff !important;		/* 원본 #767676 회색 */
	color: var(--t3-fg) !important;
	font-size: 12px;
	font-weight: 600;
	text-align: center;
	text-decoration: none;
}
.tab3ui .subContents .lnb .favoriteWrap .setBtn a:hover { background: #f4f6fa !important; }
.tab3ui .subContents .lnb .favoriteWrap .setBtn a.active {
	border-color: var(--t3-accent) !important;
	background: var(--t3-accent) !important;	/* 원본 #e6ac1d 주황 */
	color: #fff !important;
}
.tab3ui .subContents .lnb .favoriteWrap .setBtn a.active:hover { background: #1a53b8 !important; }


/* ══════════════════════════════════════════════════════════════════════════
   6. iframe 업무화면 '큰틀' — 화면마다 기본으로 붙는 제목/경로/본문 래퍼
   ────────────────────────────────────────────────────────────────────────
   20260811 ohy todo 26-0810-0049

   [여기부터는 탭 '안쪽'이다] 위 1~5 는 탭브라우저 껍데기(.tab3ui) 얘기고,
   이 섹션은 iframe 안에서 열리는 업무화면 얘기다.

   [어떻게 iframe 안까지 닿나]
     이 파일은 IBCHeader.append_css_tab3() 가 링크하는데, 그게
     getHeader() / getPageHead2 양쪽에서 불리므로 업무화면에서도 로드된다.
     그리고 csspath=="tab3" 일 때만 링크되므로 타 도메인은 애초에 안 받는다.
     → 별도 스위치가 필요 없다. 파일 자체가 스코프다.
     ※ 엑셀 산출물은 안전 : getXLSHeader() 는 일부러 이 링크를 안 붙인다.

   [스코프 = body:not(.tab3ui)]
     껍데기 페이지(tab_browse_basic.jsp)도 같은 파일을 받는다. 거기 body 에는
     .tab3ui 가 붙으므로 :not() 으로 걸러 껍데기에는 절대 안 먹게 한다.
     ※ body 에 훅 클래스를 새로 붙이는 건 불가능하다 — <BODY> 는 프레임워크가
       아니라 각 JSP 가 직접 찍는다(26,000장). 그래서 :not() 으로 뺀다.

   [마크업] BasePageConfig.getPageHead() 가 만드는 고정 3종 세트.
     <form name=myform>
       <span class="tit03"><a …>화면제목</a></span>&nbsp;&nbsp;   ← 제목(인라인)
       <p class="path">경로 &gt; 경로</p>                          ← 경로(절대배치)
       <a class="favorite"><img …></a>                            ← 즐겨찾기 별(선택)
       <h4 class="tit04">부제</h4>                                 ← 선택
       <div id="ibccontent"> …본문… </div>
     ※ 제목 뒤 `&nbsp;&nbsp;`(twoSpaces) 때문에 .tit03 을 display:block 으로
       바꾸면 안 된다 — 그 공백이 익명 블록 한 줄이 되어 빈 줄이 생긴다.
       (상단바~본문 사이가 벌어지던 것과 같은 원리. 위 0. 레이아웃 주석 참고)
       그래서 inline-block 으로 두고 padding 으로 자리를 잡는다.

   [고치는 것] 앱셸 전환으로 .tabContents 의 `padding:20px 0 50px 30px` 을
     걷어내면서 iframe 이 패널에 딱 붙었다. 그런데 업무화면 쪽은 그 여백을
     전제로 만들어져 있어서 제목이 왼쪽 위 모서리에 그대로 박힌다.
       · #ibccontent  = 왼쪽·위 여백 0, 오른쪽만 30px  (좌우 비대칭)
       · .path        = right:58px  ← 옛 바깥 크롬 폭. 지금은 맞는 게 없다
     → 제목 / 경로 / 본문의 좌우 기준선을 --t3c-pad 하나로 통일한다.
   ════════════════════════════════════════════════════════════════════════ */

/* 업무화면용 토큰. 껍데기 토큰(--t3-*)은 .tab3ui 에 선언돼 있어 iframe 안에서는
   상속되지 않는다(문서가 다르다). 그래서 여기 따로 둔다 — 접두어도 --t3c- 로 구분. */
body:not(.tab3ui) {
	--t3c-pad: 24px;				/* 제목·경로·본문이 공유하는 좌우 기준선 */
	--t3c-fg: #16233a;
	--t3c-fg-dim: #7b8698;
	--t3c-line: #e5e9f0;
}

/* ── 화면 제목 ─────────────────────────────────────────────────────────── */
body:not(.tab3ui) .tit03 {
	display: inline-block;			/* block 금지 — 위 주석의 &nbsp; 문제 */
	margin: 0;
	padding: 16px 0 0 var(--t3c-pad);
	font-size: 17px;				/* 원본 19px — 탭 제목(12.5px)과의 위계상 한 단 내림 */
	font-weight: 700;
	line-height: 1.35;
	letter-spacing: -0.02em;
	color: var(--t3c-fg);
}
/* ibdomain3/test 도메인은 제목을 <a>(메뉴검색 복사용)로 감싼다 — 링크 티가 나면 안 된다.
   BasePageConfig.getPageHead():2151 */
body:not(.tab3ui) .tit03 a {
	color: inherit;
	text-decoration: none;
}

/* ── 경로(브레드크럼) ──────────────────────────────────────────────────
   position:absolute 는 그대로 둔다. #ibccontent 가 position:static 이고
   조상에 positioned 가 없어서 기준은 iframe 뷰포트다 — 오른쪽 위에 붙는다.
   기존 right:58px 는 옛 바깥 크롬 자리라 지금은 근거가 없다 → 본문과 같은 기준선으로. */
body:not(.tab3ui) .path {
	top: 22px;
	right: var(--t3c-pad);
	max-width: 46%;
	font-size: 11.5px;
	line-height: 1.4;
	text-align: right;
	color: var(--t3c-fg-dim);
}
body:not(.tab3ui) .path a { font-size: inherit; color: inherit; }

/* 즐겨찾기 별 — .path 가 절대배치라 흐름상 제목과 같은 줄에 남는다 */
body:not(.tab3ui) a.favorite {
	display: inline-block;
	margin-left: 6px;
	vertical-align: baseline;
}

/* ── 부제(SecondPageCaption) ───────────────────────────────────────────── */
body:not(.tab3ui) .tit04 {
	margin: 6px 0 0;
	padding: 0 var(--t3c-pad);
	font-size: 13px;
	color: var(--t3c-fg-dim);
}
/* 원본 25px. 아래 #ibccontent 가 이미 margin-top 을 갖게 되어 이중이 된다. */
body:not(.tab3ui) .tit04 + #ibccontent { margin-top: 10px; }

/* ── 본문 래퍼 ─────────────────────────────────────────────────────────
   원본 : float:left; overflow:hidden; padding-right:30px; height:100%
     · float:left  → shrink-to-fit 이라 폭이 내용에 휘둘린다. 제목 줄 다음에
       '어쩌다' 내려가 있을 뿐 보장된 배치가 아니다 → float 를 풀어 블록으로.
     · height:100% → 부모(form/body)가 auto 라 어차피 auto 로 계산된다.
       명시해 두어 나중에 body 에 높이가 생겨도 안 흔들리게 한다.
     · overflow:hidden 은 건드리지 않는다 — 안쪽 float 를 가두는 BFC 역할이라
       풀면 레이아웃이 무너지는 화면이 나온다(10,815장 중 확인 불가).
   ※ InsideFrame=on 인 중첩 iframe 페이지는 제목이 안 나오고 #ibccontent 만
     있어서 위 여백이 살짝 남는다. 서버 값이라 DOM 으로는 구분할 수 없다. */
body:not(.tab3ui) #ibccontent {
	float: none;
	/* !important 인 이유 : 이 요소의 폭을 JS 가 인라인으로 박는 코드가 곳곳에 있다.
	   대표가 js/common_except_kbi.js 의 `$("#ibccontent").css("width", $(window).width()-50)`
	   — 남는 50px 이 전부 오른쪽으로 몰려서 좌우 여백이 어긋나 보이는 원인이 된다.
	   (그 파일 자체는 현재 어디서도 로드되지 않는 사문이지만, 같은 패턴이 또 있을 수 있어
	   껍데기에서 .subContents/.sContents 에 쓴 것과 같은 방식으로 계산을 무력화한다.)
	   20260811 ohy todo 26-0810-0049 */
	width: auto !important;
	/* 내용이 가용폭보다 넓으면 상자도 따라 넓어져 문서가 가로 스크롤한다.
	   tab3 이전 float:left(shrink-to-fit)의 동작을 되살림. overflow:hidden 은 유지 */
	/* min-width: -webkit-min-content; */
	/* min-width: min-content; */
	/* ★ 20261001 ohy todo 26-1001-0075 min-width 넣지 말 것 — 안쪽 스크롤 화면(넓은 그리드·차트)이 그 폭만큼 늘어나 디자인이 깨진다.
	   리뉴얼 중인 디자인이라 이 파일은 최대한 건드리지 말 것. */
	height: auto;
	box-sizing: border-box;
	/* 폭이 auto 면 auto 마진은 아무 효과가 없고, 혹시 폭이 고정되는 경우에만
	   가운데로 잡아준다. 두는 쪽이 항상 안전하다. */
	margin: 12px auto 0;
	/* 축약형(`padding: 0 24px 28px`)으로 쓰면 세 번째 값이 '오른쪽'으로 오독된다.
	   실제로는 위/좌우/아래 순서라 좌우는 같은 값인데도 어긋난 것처럼 보인다.
	   이 파일은 여럿이 읽으므로 네 방향을 각각 쓴다. 20260811 ohy todo 26-0810-0049 */
	padding-top: 0;					/* 위 여백은 margin-top 이 담당 */
	padding-right: var(--t3c-pad);	/* 원본은 여기만 30px 이라 좌우가 비대칭이었다 */
	padding-bottom: var(--t3c-pad);
	padding-left: var(--t3c-pad);
}


/* ══════════════════════════════════════════════════════════════════════════
   7. 화면 머리말 .ibc-head — 업무화면 제목/부제/경로/즐겨찾기/돌아가기
   ────────────────────────────────────────────────────────────────────────
   20260818 ohy todo 26-0818-0045

   [무엇이 바뀌었나] 6번 섹션은 옛 마크업(.tit03 + .path)에 CSS 만 덧댄 것이라
     제목·경로가 한 덩어리로 안 묶였다(제목 inline-block / 경로 absolute).
     BasePageConfig.getPageHead3() 가 마크업 자체를 새로 찍는다 —
     CSSPATH=='tab3' 일 때만. 6번 섹션 규칙은 .tit03 을 직접 쓰는 JSP 26장이
     아직 있으므로 지우지 않는다.

   [디자인 정본] css/ibcenter/workflow/wfline.css 의 .wfl-head 를 표준으로 승격.
     전자결재 리뉴얼에서 만든 머리말(좌: 제목+설명 / 우: 액션)이 그대로 전 화면 기본이 된다.
     값이 겹치므로 한쪽을 고치면 다른 쪽도 같이 볼 것.

   [마크업] 경로와 제목이 '한 줄'이다 — 연한 회색 경로 > 굵고 진한 제목.
     <div class="ibc-head">
       <div class="ibc-headrow">
         <div class="ibc-headrow-left">  <span class="ibc-head-path">코드</span>
                                         <span class="ibc-head-sep">&gt;</span>
                                         <h1 class="ibc-head-title">계정과목</h1>
                                         <span class="ibc-head-desc">부제</span> </div>
         <div class="ibc-headrow-right"> <a class="ibc-head-fav">★</a>
                                         <button class="ibc-head-back">↰</button> </div>
       </div>
       <script>…</script>          ← display:none 이라 flex 아이템이 안 된다
     </div>
     <div id="ibccontent"> …본문… </div>
   ════════════════════════════════════════════════════════════════════════ */

body:not(.tab3ui) .ibc-head {
	/* 스크롤해도 제목이 남는다 — 전자결재 .wfl-head 와 동일.
	   iframe 문서의 스크롤 주체가 body 하나라 sticky 가 그대로 먹는다.
	   조상(form)에 overflow 가 없어야 하는데 #ibccontent 는 머리말 '바깥'이라 무관. */
	position: sticky;
	top: 0;
	z-index: 40;
	background: #fff;			/* sticky 라 바탕색이 없으면 본문이 비쳐 보인다 */
	padding-top: 14px;
	padding-right: var(--t3c-pad);
	padding-bottom: 12px;
	padding-left: var(--t3c-pad);
	transition: box-shadow .16s;
}
/* css/tabbrowse/base.css 가 html,body 와 button 에 font-family 를 직접 걸어둔다.
   직접 지정이 상속보다 세므로 자식까지 명시해야 한다(상단바에서 겪은 것과 같은 함정).
   --ibc-font-sans 는 css/topmenu/header.css(MenuDesign 스위치) 선언이라
   MenuDesign=0 + CSSPATH=tab3 조합에서는 없을 수 있어 폴백을 둔다. */
body:not(.tab3ui) .ibc-head,
body:not(.tab3ui) .ibc-head * {
	font-family: var(--ibc-font-sans, 'Malgun Gothic', sans-serif);
}

body:not(.tab3ui) .ibc-headrow {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
}
/* baseline 정렬 — 경로·제목·부제의 글자 밑선을 맞춘다(크기가 달라서 center 면 뜬다) */
body:not(.tab3ui) .ibc-headrow-left {
	display: flex;
	align-items: baseline;
	gap: 8px;
	min-width: 0;			/* flex 자식의 기본 min-width:auto 가 말줄임을 막는다 */
}
body:not(.tab3ui) .ibc-headrow-right {
	display: flex;
	align-items: center;
	gap: 6px;
	flex-shrink: 0;
}

body:not(.tab3ui) .ibc-head-title {
	margin: 0;
	font-size: 17px;			/* 6번 섹션 .tit03 과 같은 위계 */
	font-weight: 700;
	line-height: 1.35;
	letter-spacing: -0.02em;
	color: var(--t3c-fg);
	white-space: nowrap;
	flex-shrink: 0;				/* 줄이 좁아지면 경로가 먼저 줄고 제목은 끝까지 남는다 */
}
/* ibdomain3/test 는 제목이 메뉴검색 복사용 <a> 다 — 링크 티가 나면 안 된다 */
body:not(.tab3ui) .ibc-head-title a {
	color: inherit;
	text-decoration: none;
}
body:not(.tab3ui) .ibc-head-desc {
	font-size: 12px;
	color: var(--t3c-fg-dim);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* ── 경로(브레드크럼) ──────────────────────────────────────────────────
   ★ 제목과 '같은 줄'에 둔다 : 경로는 작고 연한 회색, 마지막에 '>' 를 두고
     제목이 크고 진하게 이어받는다. 한 줄로 읽히므로 위계가 눈에 바로 들어오고
     머리말 높이도 한 줄만큼 줄어든다. (레거시 mira 분기가 쓰던 방식과 같은 발상)
   옛 .path 와 달리 절대배치가 아니다. 6번 섹션의 .path 규칙은 클래스가 달라 안 걸린다. */
body:not(.tab3ui) .ibc-head-path {
	min-width: 0;				/* 좁아질 때 말줄임이 되도록(부모만으로는 부족) */
	overflow: hidden;
	font-size: 12.5px;
	line-height: 1.35;
	white-space: nowrap;
	text-overflow: ellipsis;
	color: var(--t3c-fg-dim);
}
/* 경로와 제목 사이 '>' — 경로 글자보다 한 단 더 연하게.
   경로 span '밖'의 형제라서 경로가 말줄임돼도 이건 안 잘린다(shrink 금지). */
body:not(.tab3ui) .ibc-head-sep {
	flex-shrink: 0;
	font-size: 12.5px;
	color: #b6bfcc;
	font-weight: 400;
}
body:not(.tab3ui) .ibc-head-path a {
	color: inherit;
	text-decoration: none;
}
body:not(.tab3ui) .ibc-head-path a:hover { text-decoration: underline; }

/* ── 돌아가기 ──────────────────────────────────────────────────────────
   기존 `.backbtn` 은 27x28 아이콘 버튼(img_btn_backBtn1.gif, 좌상향 굽은 화살표)이었다.
   사용자가 그 모양에 익숙하므로 글자가 아니라 아이콘으로 유지한다 — 대신 GIF 가 아니라
   인라인 SVG(BasePageConfig.getBackButton3). 테두리·높이는 wfl-btn 과 같은 값, 폭만 정사각. */
body:not(.tab3ui) .ibc-head-back {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;
	height: 32px;
	padding: 0;
	border: 1px solid #cdd5e0;
	border-radius: 6px;
	background: #fff;
	color: #5b6779;
	cursor: pointer;
	transition: background-color .12s, border-color .12s, color .12s;
}
/* 획 굵기는 SVG 안이 아니라 여기서 준다 — currentColor 라 호버 색이 그대로 따라온다 */
body:not(.tab3ui) .ibc-head-back svg {
	fill: none;
	stroke: currentColor;
	stroke-width: 1.6px;
	stroke-linecap: round;
	stroke-linejoin: round;
}
body:not(.tab3ui) .ibc-head-back:hover {
	background: #f4f6fa;
	border-color: #b9c3d2;
	color: var(--t3c-fg);
}
body:not(.tab3ui) .ibc-head-back:active { background: #eceff5; }

/* ── 맨 위 / 맨 아래 이동 ───────────────────────────────────────────────
   20260819 ohy. 돌아가기 바로 왼쪽에 붙는 두 칸짜리 세그먼트 버튼(^ v).

   ★ 기본이 display:none 이다 — 스크롤바가 있는 화면에서만 /js/ibc/pagehead3.js 가
     .is-on 을 붙인다. 짧은 화면에 아무 일도 안 하는 버튼이 남지 않게 하려는 것이고,
     JS 가 못 실려도 '없는' 상태라 머리말이 깨지지 않는다.
   테두리를 1px 겹쳐 한 덩어리로 만든다 — 낱개 사각형인 돌아가기와 구분되고,
   두 버튼이 '한 가지 일(스크롤)'이라는 게 모양으로 읽힌다.
   높이는 돌아가기와 같은 32px(다르면 줄이 어긋난다), 폭만 30px 로 조금 좁힌다. */
body:not(.tab3ui) .ibc-head-scrollgrp { display: none; }
body:not(.tab3ui) .ibc-head-scrollgrp.is-on {
	display: inline-flex;
	align-items: center;
}

body:not(.tab3ui) .ibc-head-scroll {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 30px;
	height: 32px;
	padding: 0;
	border: 1px solid #cdd5e0;
	border-radius: 0;
	background: #fff;
	color: #5b6779;
	cursor: pointer;
	transition: background-color .12s, border-color .12s, color .12s;
}
body:not(.tab3ui) .ibc-head-scrollgrp .ibc-head-scroll:first-child { border-radius: 6px 0 0 6px; }
body:not(.tab3ui) .ibc-head-scrollgrp .ibc-head-scroll:last-child {
	border-radius: 0 6px 6px 0;
	margin-left: -1px;			/* 가운데 테두리를 겹쳐 한 줄로 만든다 */
}
/* 획 굵기는 SVG 안이 아니라 여기서 — currentColor 라 호버 색이 따라온다(돌아가기와 동일) */
body:not(.tab3ui) .ibc-head-scroll svg {
	fill: none;
	stroke: currentColor;
	stroke-width: 1.6px;
	stroke-linecap: round;
	stroke-linejoin: round;
}
body:not(.tab3ui) .ibc-head-scroll:hover {
	position: relative;			/* 겹쳐둔 테두리 위로 올라와야 호버 테두리가 안 잘린다 */
	z-index: 1;
	background: #f4f6fa;
	border-color: #b9c3d2;
	color: var(--t3c-fg);
}
body:not(.tab3ui) .ibc-head-scroll:active { background: #eceff5; }

/* ★ 옛 돌아가기(.backbtn)는 숨긴다 — 머리말로 올라왔으므로 화면당 두 개가 된다.
   .backbtn 은 BasePageConfig.getReturnPageButton2() 한 곳에서만 나오므로
   이 선택자로 전부 잡힌다(3,705개 JSP + IBCButtonBar/V2 가 그 메서드를 부른다).
   ※ '.ibc-head 뒤' 로 한정한 것이 핵심 : InsideFrame=on 인 중첩 iframe 화면은
     머리말 자체가 없어서, 무조건 숨기면 돌아갈 방법이 사라진다. */
body:not(.tab3ui) .ibc-head ~ .backbtn,
body:not(.tab3ui) .ibc-head ~ * .backbtn { display: none !important; }

/* ── 즐겨찾기 별 ───────────────────────────────────────────────────────── */
body:not(.tab3ui) .ibc-head-fav {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 32px;			/* 옆 돌아가기 버튼과 같은 크기 — 다르면 줄이 어긋나 보인다 */
	height: 32px;
	border-radius: 6px;
	color: #b6bfcc;
	text-decoration: none;
}
body:not(.tab3ui) .ibc-head-fav:hover { background: #f2f5fa; color: #8b95a5; }
body:not(.tab3ui) .ibc-head-fav svg { fill: none; stroke: currentColor; stroke-width: 1.5px; }
/* 등록된 상태 = 채운 별 */
body:not(.tab3ui) .ibc-head-fav.is-on { color: #e8a13a; }
body:not(.tab3ui) .ibc-head-fav.is-on svg { fill: currentColor; stroke: currentColor; }

/* ── 본문과의 간격 ─────────────────────────────────────────────────────
   머리말이 아래쪽 여백을 이미 갖고 있어서 6번 섹션의 margin-top:12px 이 이중이 된다.
   getInputHidden() 의 hidden input 들이 사이에 끼므로 인접(+)이 아니라 일반형제(~). */
body:not(.tab3ui) .ibc-head ~ #ibccontent { margin-top: 0; }
