        :root {
            --primary: #2563eb;
            --primary-hover: #1d4ed8;
            --danger: #dc2626;
            --danger-hover: #b91c1c;
            --success: #16a34a;
            --warning: #f59e0b;
            --bg: #f8fafc;
            --card: #ffffff;
            --border: #e2e8f0;
            --text: #1e293b;
            --text-muted: #64748b;
            --radius: 8px;
        }
        
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
            background: var(--bg);
            color: var(--text);
            font-size: 14px;
        }
        
        /* Login */
        .login-wrap {
            display: flex;
            align-items: center;
            justify-content: center;
            min-height: 100vh;
            background: linear-gradient(135deg, #fce4ec 0%, #e8d5f5 25%, #d4e4fc 50%, #c8f0e8 75%, #fce4ec 100%);
        }
        
        .login-box {
            background: rgba(255, 255, 255, 0.85);
            backdrop-filter: blur(12px);
            padding: 40px;
            border-radius: 16px;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
            width: 380px;
            border: 1px solid rgba(255, 255, 255, 0.6);
        }
        
        .login-box h1 {
            font-size: 26px;
            margin-bottom: 8px;
            text-align: center;
            background: linear-gradient(135deg, #ec4899, #8b5cf6, #3b82f6);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-weight: 700;
        }
        
        .login-box p {
            color: var(--text-muted);
            text-align: center;
            margin-bottom: 24px;
            font-size: 13px;
        }
        
        .login-box label {
            display: block;
            font-weight: 600;
            margin-bottom: 4px;
            font-size: 13px;
        }
        
        .login-box input {
            width: 100%;
            padding: 10px 12px;
            border: 1px solid #cbd5e1;
            border-radius: var(--radius);
            margin-bottom: 16px;
            font-size: 14px;
        }
        
        .pw-wrap {
            position: relative;
            margin-bottom: 16px;
        }
        
        .pw-wrap input {
            margin-bottom: 0;
            padding-right: 44px;
            width: 100%;
            box-sizing: border-box;
        }
        
        .pw-toggle {
            position: absolute;
            right: 10px;
            top: 50%;
            transform: translateY(-50%);
            background: none;
            border: none;
            cursor: pointer;
            color: var(--text-muted);
            font-size: 18px;
            padding: 2px 4px;
            line-height: 1;
        }
        
        .remember-row {
            display: flex;
            flex-direction: row;
            align-items: center;
            gap: 8px;
            margin-bottom: 20px;
            font-size: 13px;
            color: var(--text-muted);
        }
        
        .remember-row input[type="checkbox"] {
            width: 14px;
            height: 14px;
            margin: 0;
            cursor: pointer;
            flex-shrink: 0;
        }
        
        .remember-row label {
            margin: 0;
            cursor: pointer;
        }
        
        .login-box .btn-row {
            display: flex;
            gap: 8px;
            justify-content: center;
        }
        
        .login-box .btn-row button {
            flex: 1;
            max-width: 160px;
            text-align: center;
            justify-content: center;
        }
        
        .login-error {
            color: var(--danger);
            font-size: 13px;
            margin-bottom: 12px;
            display: none;
        }
        
        /* App */
        .app-wrap {
            display: none;
        }
        
        .top-bar {
            background: var(--card);
            border-bottom: 1px solid var(--border);
            padding: 12px 24px;
            display: flex;
            align-items: center;
            justify-content: space-between;
            position: sticky;
            top: 0;
            z-index: 100;
        }
        
        .top-bar h2 {
            font-size: 18px;
            background: linear-gradient(135deg, #ec4899, #8b5cf6, #3b82f6);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-weight: 700;
        }
        
        .top-bar-right {
            display: flex;
            align-items: center;
            gap: 12px;
        }
        
        .top-bar-right select {
            padding: 6px 10px;
            border: 1px solid #cbd5e1;
            border-radius: var(--radius);
            font-size: 14px;
        }
        
        .top-bar-right .user-email {
            color: var(--text-muted);
            font-size: 13px;
        }
        
        /* Tabs */
        .tabs {
            display: flex;
            /* 창을 좁히면 버튼이 눌려 한글이 글자 단위로 쪼개졌다 → 줄바꿈으로 쌓는다 (캡틴 id 10378) */
            flex-wrap: wrap;
            background: var(--card);
            border-bottom: 2px solid var(--border);
            padding: 0 24px;
            /* 스크롤해도 제목 줄 아래 붙어 있게 (캡틴 id 15110 1안). 높이는 bo-core.js measureHeader()가 실측해
               --topbar-h·--hdr-h로 넣는다 — 메뉴 줄이 좁은 창에서 두 줄로 접히므로 고정값을 못 쓴다.
               1px 겹침은 소수점 배율에서 줄 사이 이음새로 본문이 비치는 것을 막는다(위 줄이 z-index로 덮음) */
            position: sticky;
            top: calc(var(--topbar-h, 53px) - 1px);
            z-index: 99;
        }

        .tab-btn {
            padding: 12px 20px;
            border: none;
            background: none;
            font-size: 14px;
            font-weight: 500;
            color: var(--text-muted);
            cursor: pointer;
            border-bottom: 2px solid transparent;
            margin-bottom: -2px;
            transition: 0.2s;
            white-space: nowrap;
            flex-shrink: 0;
        }
        
        .tab-btn:hover {
            color: var(--text);
        }
        
        .tab-btn.active {
            color: var(--primary);
            border-bottom-color: var(--primary);
        }
        
        .tab-content {
            display: none;
            padding: 24px;
            max-width: 1400px;
            margin: 0 auto;
        }
        /* 12개월 가로 표가 있는 화면은 1400px 제한 때문에 넓은 모니터에서도 5달만 보였다 → 화면 폭을 그대로 쓴다 (캡틴 id 9010) */
        #tab-projects, #tab-salary, #tab-insurance {
            max-width: none;
        }
        
        .tab-content.active {
            display: block;
        }
        
        /* Sub Tabs */
        .sub-tabs {
            display: flex;
            flex-wrap: wrap;
            background: var(--bg);
            border-bottom: 1px solid var(--border);
            padding: 0 4px;
            margin-bottom: 20px;
            /* 작은 메뉴 줄도 메뉴 줄 아래 고정 (캡틴 id 15110 1안) — 탭 내용(.tab-content) 안에 있어서 그 탭이 보이는 동안만 붙는다 */
            position: sticky;
            top: calc(var(--hdr-h, 96px) - 2px);
            z-index: 98;
        }
        /* 탭 내용 위 여백(24px)+겹침 2px를 바 안으로 끌어올려 처음부터 메뉴 줄에 붙은 자리(top과 같은 자리)에 둔다.
           여백만큼(26px) 스크롤해야 붙던 탓에, 화면이 창보다 19px만 긴 창(캡틴 100% 배율 모니터)에선
           붙는 지점까지 못 가고 작은 메뉴 줄만 오르내렸다 (캡틴 영상 id 15168). 버튼 위치는 그대로(padding으로 되돌림) */
        .tab-content > .sub-tabs {
            margin-top: -26px;
            padding-top: 26px;
        }

        .sub-tab-btn {
            padding: 9px 16px;
            border: none;
            background: none;
            font-size: 13px;
            font-weight: 500;
            color: var(--text-muted);
            cursor: pointer;
            border-bottom: 2px solid transparent;
            margin-bottom: -1px;
            transition: 0.2s;
            white-space: nowrap;
            flex-shrink: 0;
        }
        
        .sub-tab-btn:hover {
            color: var(--text);
        }
        
        .sub-tab-btn.active {
            color: var(--primary);
            border-bottom-color: var(--primary);
        }
        
        .sub-tab-content {
            display: none;
        }
        
        .sub-tab-content.active {
            display: block;
        }
        
        /* Cards */
        .card {
            background: var(--card);
            border: 1px solid var(--border);
            border-radius: var(--radius);
            padding: 20px;
            margin-bottom: 20px;
        }
        
        .card h3 {
            font-size: 16px;
            margin-bottom: 16px;
            padding-bottom: 8px;
            border-bottom: 1px solid var(--border);
        }
        
        /* Form */
        .form-grid { display:grid; grid-template-columns:repeat(12,1fr); gap:12px; margin-bottom:12px; align-items:end; }
        .form-grid .fg { display:flex; flex-direction:column; }
        .form-grid .fg label { font-size:12px; font-weight:600; color:var(--text-muted); margin-bottom:4px; }
        .form-grid .fg input, .form-grid .fg select { padding:8px 10px; border:1px solid #cbd5e1; border-radius:var(--radius); font-size:14px; font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif; height:34px; box-sizing:border-box; width:100%; }
        .col-sm   { grid-column:span 3; }
        .col-md   { grid-column:span 4; }
        .col-lg   { grid-column:span 6; }
        .col-full { grid-column:span 12; }

        /* 창을 좁히면 한 행이 끝까지 안 접혀서 마지막 칸(주소 등)이 0px까지 눌렸다
           → 칸마다 최소 폭을 주고, 안 들어가면 다음 줄로 접는다 (캡틴 id 10388) */
        .form-row {
            display: flex;
            gap: 12px;
            flex-wrap: wrap;
            align-items: flex-end;
            margin-bottom: 12px;
        }

        .form-group {
            display: flex;
            flex-direction: column;
            flex: 1 1 0;
            min-width: 150px;
        }

        /* 짧은 값(주민번호·연락처 등) 전용 좁은 필드 — 남는 폭은 같은 행의 넓은 필드가 가져감 */
        .form-group.fg-sm {
            flex: 0 1 220px;
        }

        /* 5칸 행의 1칸 폭 고정 필드 — 위 행(5칸)과 칸 경계를 맞춤 */
        .form-group.fg-col5 {
            flex: 0 0 calc((100% - 48px) / 5);
        }
        
        .form-group label {
            font-size: 12px;
            font-weight: 600;
            color: var(--text-muted);
            margin-bottom: 4px;
        }
        
        .form-group input,
        /* 폼 밖(제목 줄 등)에 단독으로 놓이는 셀렉트·인풋도 같은 모양으로 — 표준 컨트롤 (2026-07-28) */
        .form-group select, select.ctl, input.ctl {
            /* 상하 6px: 34px 높이에서 8px이면 글자 영역 16px뿐이라 14px 글자 아랫부분이 잘림 (2026-08-03 정산 드랍박스) */
            padding: 6px 10px;
            border: 1px solid #cbd5e1;
            border-radius: var(--radius);
            font-size: 14px;
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
            min-width: 120px;
            height: 34px;
            box-sizing: border-box;
            background: #fff;
            color: #1e293b;
        }
        select.ctl {
            appearance: none; -webkit-appearance: none;
            padding-right: 30px;
            background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-position: right 10px center;
            cursor: pointer;
        }
        select.ctl:focus { outline: none; border-color: var(--primary); }

        .form-group input[type="date"] {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
            width: 100%;
            max-width: 140px;
            height: 34px;
            box-sizing: border-box;
        }
        #coBasicForm input:disabled, #coBasicForm select:disabled, #coBasicForm textarea:disabled {
            background: #f8fafc;
            border-color: var(--border);
            color: var(--text-main);
            cursor: default;
            -webkit-text-fill-color: var(--text-main);
        }
        #coBasicForm.view-mode .form-row { margin-bottom: 2px; }
        #coBasicForm.view-mode .form-group { margin-bottom: 6px; }

        /* Company info view card (coi-*) */
        .coi-header { display:flex; justify-content:space-between; align-items:flex-start; padding-bottom:16px; margin-bottom:20px; border-bottom:0.5px solid #E5E7EB; gap:12px; }
        .coi-header-text { flex:1; min-width:0; }
        .coi-company-name { font-size:18px; font-weight:500; margin-bottom:4px; line-height:1.3; color:#111827; }
        .coi-company-meta { font-size:13px; color:#6B7280; line-height:1.4; }
        .coi-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:16px 24px; width:100%; }
        .coi-item { display:flex; flex-direction:column; gap:4px; min-width:0; }
        .coi-label { font-size:12px; line-height:1.4; color:#6B7280; }
        .coi-value { font-size:14px; line-height:1.4; color:#111827; word-break:break-all; }
        .coi-multiline { word-break:break-word; white-space:pre-wrap; }
        .coi-full-item { display:flex; flex-direction:column; gap:4px; }
        .coi-biz-group { margin-top:20px; padding:14px 16px; background:#F9FAFB; border-radius:8px; }
        .coi-group-label { font-size:11px; color:#9CA3AF; margin-bottom:10px; line-height:1.4; }
        .coi-biz-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px 20px; }
        .coi-biz-item { display:flex; justify-content:space-between; align-items:center; gap:8px; min-width:0; }
        .coi-biz-info { flex:1; min-width:0; }
        .coi-biz-sublabel { font-size:11px; color:#9CA3AF; line-height:1.4; }
        .coi-biz-value { font-size:14px; color:#111827; line-height:1.4; word-break:break-all; }
        .biz-view-link { flex-shrink:0; font-size:11px; color:#2563EB; cursor:pointer; text-decoration:none; line-height:1.4; }
        .biz-view-link:hover { text-decoration:underline; }
        .coi-addr-group { margin-top:20px; }
        .coi-addr-item { display:flex; align-items:flex-start; gap:16px; padding:6px 0; }
        .coi-addr-item .coi-label { flex-shrink:0; width:80px; }
        .coi-addr-item .coi-value { flex:1; min-width:0; word-break:break-all; }
        @media (max-width:640px) { .coi-grid, .coi-biz-grid { grid-template-columns:1fr; gap:12px; } }
        
        .form-group input[type="number"] {
            text-align: right;
        }
        #employList input[type="number"] {
            text-align: center;
            -moz-appearance: textfield;
        }
        #employList input[type="number"]::-webkit-outer-spin-button,
        #employList input[type="number"]::-webkit-inner-spin-button {
            -webkit-appearance: none;
            margin: 0;
        }
        
        /* Read-only mode for non-admin users */
        body.readonly-user .card .form-row { display: none !important; }
        body.readonly-user .admin-only { display: none !important; }

        /* Insurance table inputs */
        #insTable input {
            width: 100%; font-size: 12px; font-family: inherit; color: inherit;
            text-align: right; padding: 0 4px; border: none; line-height: 1.35;
            background: transparent; outline: none; cursor: default;
            pointer-events: none;
            /* .card input[type=text]의 34px 고정 높이를 무력화 — 이것 때문에 행이 43px까지 커졌다 */
            height: auto;
        }
        /* 칸이 많은 표라 행 높이를 낮춤 (캡틴 id 8977) */
        #insTable th, #insTable td { padding: 4px 8px; }
        #insTable.edit-mode input {
            border: 1px solid #cbd5e1; border-radius: 3px;
            background: #fff; cursor: text; pointer-events: auto;
        }
        #insTable td.ins-modified { background: #fef9c3 !important; }

        /* Per-tab edit restrictions (JSON permissions) */
        body.no-edit-employee [data-perm-edit="employee"],
        body.no-edit-projects [data-perm-edit="projects"],
        body.no-edit-salary [data-perm-edit="salary"],
        body.no-edit-insurance [data-perm-edit="insurance"],
        body.no-edit-usermgmt [data-perm-edit="usermgmt"],
        /* 자금관리는 서브탭마다 따로 잠근다 — 탭 하나가 곧 기능 하나다 (캡틴 id 12510) */
        body.no-edit-funds_upload [data-perm-edit="funds_upload"],
        body.no-edit-funds_ledger [data-perm-edit="funds_ledger"],
        body.no-edit-funds_uncls [data-perm-edit="funds_uncls"],
        body.no-edit-funds_transfer [data-perm-edit="funds_transfer"],
        body.no-edit-funds_report [data-perm-edit="funds_report"],
        body.no-edit-funds_check [data-perm-edit="funds_check"],
        body.no-edit-funds_accounts [data-perm-edit="funds_accounts"] { display: none !important; }

        /* Buttons — 표준 크기 체계 (2026-07-28 캡틴 확정: 높이 34 / 글자 14 / 테두리 A안)
           .btn 기본이 입력칸·셀렉트(34px)와 같은 높이라 툴바에서 인라인 height가 필요 없음.
           투명 테두리를 기본으로 둬서 색 버튼(border 없음)과 흰 버튼(border 1px)의 폭·높이가 같아짐. */
        .btn {
            height: 34px;
            padding: 0 16px;
            border: 1px solid transparent;
            border-radius: var(--radius);
            font-size: 14px;
            font-weight: 500;
            line-height: 1;
            cursor: pointer;
            transition: 0.2s;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 4px;
            box-sizing: border-box;
            white-space: nowrap;
        }

        .btn:disabled { opacity: 0.45; cursor: not-allowed; }

        /* 저장·취소처럼 짝으로 놓이는 버튼은 최소 폭을 같게 (착시로 한쪽이 커 보이는 것 방지) */
        .btn-pair { min-width: 76px; }
        /* .btn-tool: 이제 .btn 기본이 34px이라 불필요 — 기존 마크업 호환용으로만 남김 */
        .btn-tool { height: 34px; }

        .btn-primary {
            background: linear-gradient(135deg, #ec4899, #8b5cf6, #3b82f6);
            color: #fff;
            border: none;
        }
        
        .btn-primary:hover {
            background: linear-gradient(135deg, #db2777, #7c3aed, #2563eb);
        }
        
        .btn-danger {
            background: var(--danger);
            color: #fff;
        }
        
        .btn-danger:hover {
            background: var(--danger-hover);
        }
        
        .btn-outline {
            background: #fff;
            border: 1px solid #cbd5e1; /* A안: 한 톤 진하게 — 경계가 흐려 색 버튼보다 작아 보이던 문제 해소 */
            color: var(--text);
        }
        
        .btn-outline:hover {
            background: #f1f5f9;
        }
        
        .btn-success {
            background: var(--success);
            color: #fff;
        }
        
        .btn-success:hover {
            background: #15803d;
        }

        /* 입금·지출 예정 입력 버튼 — 초록/빨강 점선 테두리 + 연한 바탕 (캡틴 확정 2026-08-27 id 13317, 대시보드 전용 변형) */
        .btn-in  { background: #f0fdf4; border: 1px dashed #16a34a; color: #15803d; }
        .btn-in:hover  { background: #dcfce7; }
        .btn-out { background: #fef2f2; border: 1px dashed #dc2626; color: #b91c1c; }
        .btn-out:hover { background: #fee2e2; }
        /* 대시보드 [오늘로] — 아주 연한 보라 바탕 + 보라 글자. 저장(그라데이션)과 같은 계열이되 구분되게 (캡틴 확정 2026-08-27 id 13330 보라 1) */
        .btn-lilac { background: #f5f3ff; border: 1px solid #ddd6fe; color: #6d28d9; }
        .btn-lilac:hover { background: #ede9fe; }

        /* 표 안 액션 버튼 — 행 높이를 키우지 않도록 작게 유지 */
        .btn-sm {
            height: 28px;
            padding: 0 10px;
            font-size: 12px;
        }

        .btn-lg {
            height: 42px;
            padding: 0 24px;
            font-size: 15px;
        }

        .btn-icon {
            width: 30px;
            height: 30px;
            padding: 0;
            font-size: 16px;
            flex: none;
        }
        
        /* 폼 밖 툴바의 select·input도 표준 높이 34px (2026-07-28 캡틴 확정)
           표 안(table) 편집칸은 행 높이를 키우지 않도록 제외 */
        .card select, .card input[type="text"], .card input[type="date"], .card input[type="month"], .card input[type="email"], .card input[type="number"] {
            height: 34px; box-sizing: border-box; font-size: 14px;
        }
        .card table select, .card table input { height: auto; font-size: inherit; }

        /* Tables */
        .table-wrap {
            overflow: auto;
        }
        /* 계상률 없는 달 = 회색칸 + 빗금 한 가지로 통일 (캡틴 id 8986). 방향 "/"·간격은 A안 유지(id 8957)
           회색은 기존 상태색 #e2e8f0, 빗금선은 한 단계 진한 #cbd5e1이어야 회색 위에서 보인다 */
        /* 계상률 현황 고정열: 가로 스크롤 시 NO.~사업기간까지 따라오게 (캡틴 id 8992)
           separate 모드라 sticky 셀 배경이 뒤 내용을 가려준다(7/28 교훈) */
        #prTable .pr-fx {
            position: sticky;
            z-index: 2;
            background: #fff;
            /* 고정열 왼쪽 선은 칸 안쪽 그림자로 (캡틴 id 13085 "일부 칸 테두리가 없어").
               sticky 칸의 left는 실측 px라 소수점 배율에서 앞 칸의 border-right를 덮어 세로선이 사라진다
               (실측: 100%에서도 전문기관→사업명 경계, 125%·150%에선 고정열 경계 전부). 정산표 first-child(id 10089)와 같은 방식 */
            box-shadow: inset 1px 0 0 var(--border);
        }
        #prTable thead .pr-fx {
            z-index: 5; /* 세로+가로 겸용 코너 — 일반 th보다 위 */
            background: #f1f5f9;
        }
        #prTable tbody tr .pr-fx { background: #fff; }
        /* 과제목록 고정열: 가로 스크롤 시 사업명·코드명까지 따라오게 (캡틴 id 10167)
           계상률 현황(.pr-fx)과 같은 방식 — left는 pjStickyCols()가 실측해 넣는다 */
        #projectTable .pj-fx {
            position: sticky;
            z-index: 2;
            background: #fff;
        }
        #projectTable thead .pj-fx {
            z-index: 5; /* 세로+가로 겸용 코너 — 일반 th보다 위 */
            background: #f1f5f9;
        }
        .pr-hatch,
        .table-wrap.tw-fit > table td.pr-hatch {
            background-color: #e2e8f0;
            background-image: repeating-linear-gradient(135deg, #cbd5e1 0 1.5px, transparent 1.5px 7px);
            /* 회색 칸끼리 붙으면 기본 테두리색(#e2e8f0)이 배경에 묻혀 한 덩어리로 보임 → 한 단계 진하게 (7/28 교훈) */
            border-color: #cbd5e1;
        }
        /* 긴 표 자체 스크롤 — max-height는 fitWraps()가 화면 높이에 맞춰 지정 (캡틴 2026-07-29) */
        .table-wrap.tw-fit {
            min-height: 280px;
            /* 상단 테두리는 박스에: sticky th의 border-top은 배율에 따라 스크롤포트 가장자리에서 잘려 안 보임 (캡틴 id 8895) */
            border-top: 1px solid var(--border);
        }
        /* sticky 헤더 표는 collapse 금지 — 스크롤 시 셀 배경·테두리가 헤더를 뚫고 비침(7/28 교훈).
           st-sep와 동일한 우/하단 테두리 방식으로 통일 */
        .table-wrap.tw-fit > table {
            border-collapse: separate;
            border-spacing: 0;
        }
        /* 한도액보다 적게 등록된 달 표시 (캡틴 id 10043·10047·10060) — 1만원 이상 차이날 때만.
           아이콘은 셀 모서리로 빼고 숫자와 겹치지 않게 오른쪽 여백을 준다. */
        td.st-under { position: relative; padding-right: 20px !important; }
        td.st-under > .st-under-ico { position: absolute; top: 2px; right: 2px; line-height: 0; cursor: help; }
        .table-wrap.tw-fit > table th,
        .table-wrap.tw-fit > table td {
            border: 0;
            border-right: 1px solid var(--border);
            border-bottom: 1px solid var(--border);
        }
        /* 왼쪽 바깥선 (캡틴 id 10089): 셀은 우/하만 그려서 첫 열 왼쪽에 선이 없다.
           컨테이너 border-left는 sticky 셀 배경에 가려지므로, 각 행 첫 셀 안쪽에 그림자로 그린다.
           헤더·본문·합계행 모두 first-child가 화면 최좌측 셀이라 한 규칙으로 덮인다. */
        .table-wrap.tw-fit > table tr > th:first-child,
        .table-wrap.tw-fit > table tr > td:first-child {
            box-shadow: inset 1px 0 0 var(--border);
        }
        .table-wrap.tw-fit > table thead tr:first-child th,
        .table-wrap.tw-fit > table.st-sep thead th {
            border-top: 0; /* 상단 선은 박스가 담당 — 셀 border-top은 이중선·클리핑 원인 */
            top: -1px; /* 소수점 배율에서 박스 테두리와 헤더 사이 1px 틈으로 본문이 비치는 것 차단 */
        }
        .table-wrap.tw-fit > table th:first-child,
        .table-wrap.tw-fit > table td:first-child {
            border-left: 1px solid var(--border);
        }

        /* Sticky columns */
        .sc-check, .sc-name {
            position: sticky;
            transform: translateZ(0);
        }
        .sc-check {
            left: 0;
            width: 36px;
        }
        .sc-name {
            left: 36px;
        }
        th.sc-check, th.sc-name {
            z-index: 4; /* 세로+가로 겸용 코너 — 일반 th(z3)보다 위 */
            background: #f1f5f9;
        }
        td.sc-check, td.sc-name {
            z-index: 2;
            background: #fff;
        }
        tr:hover td.sc-check, tr:hover td.sc-name {
            background: #f8fafc;
        }
        /* border-collapse: separate로 sticky 배경이 제대로 덮이게 */
        #empTable {
            border-collapse: separate;
            border-spacing: 0;
        }
        /* 모든 셀: 오른쪽·아래만 border */
        #empTable th,
        #empTable td {
            border-top: 0;
            border-left: 0;
            border-right: 1px solid var(--border);
            border-bottom: 1px solid var(--border);
        }
        /* 첫 번째 열: 왼쪽 border 추가 */
        #empTable th:first-child,
        #empTable td:first-child {
            border-left: 1px solid var(--border);
        }
        /* thead 첫 행: 위쪽 border 추가 */
        #empTable thead tr:first-child th {
            border-top: 1px solid var(--border);
        }
        /* 헤더 행 상단 고정 */
        #empTable thead th {
            position: sticky;
            top: 0;
            z-index: 2;
            background: #f1f5f9;
        }
        /* 헤더 + sticky열 교차 셀: 최상위 */
        #empTable thead th.sc-check,
        #empTable thead th.sc-name {
            z-index: 4;
        }
        /* 2줄 헤더 표(4대보험·과제목록·근태 요약) 테두리 (캡틴 id 13773·13775·13810)
           둘째 줄 sticky top은 fitWraps()가 첫 줄 높이 실측(acc-2)으로 이미 잡아준다. 남은 문제 둘:
           ① 스크롤로 붙으면 둘째 줄(1px 겹침)이 첫 줄 border-bottom을 덮는데 자기 border-top이 없어
              가운데 줄이 사라짐 → 가운데 줄을 둘째 줄 border-top으로 옮기고 첫 줄 그룹칸 bottom은 끔
           ② 둘째 줄 첫 th는 화면 최좌측이 아닌데(왼쪽은 rowspan 칸) first-child 왼쪽선 규칙에 걸려
              rowspan 칸 오른선+border-left+inset 그림자 3겹 → 왼쪽선·그림자 해제 */
        #insTable thead tr:first-child th[colspan],
        #projectTable thead tr:first-child th[colspan],
        #attAdminTable thead tr:first-child th[colspan] { border-bottom: 0; }
        #insTable thead tr:nth-child(2) th,
        #projectTable thead tr:nth-child(2) th,
        #attAdminTable thead tr:nth-child(2) th { border-top: 1px solid var(--border); }
        #insTable thead tr:nth-child(2) th:first-child,
        #projectTable thead tr:nth-child(2) th:first-child,
        #attAdminTable thead tr:nth-child(2) th:first-child { border-left: 0; box-shadow: none; }
        table {
            width: 100%;
            border-collapse: collapse;
            font-size: 13px;
        }
        
        /* 표 안 입력칸도 본문과 같은 글꼴로 — 지정이 없으면 브라우저 기본 monospace가 뜬다 (캡틴 id 10489) */
        th input, td input, th select, td select { font-family: inherit; }

        th, td {
            padding: 8px 10px;
            border: 1px solid var(--border);
            text-align: center;
            white-space: nowrap;
        }
        /* 반화면 등 좁은 창에서 급여대장·세무사표 컴팩트 전환 (캡틴 id 9450·9452)
           셀 스타일이 전부 인라인(15px)이라 !important로만 덮을 수 있음.
           그래도 안 들어가는 폭은 min-width 밑에서 열 압축 대신 가로 스크롤. */
        @media (max-width: 1600px) {
            #salTable th, #salTable td,
            #taxSalTable th, #taxSalTable td {
                font-size: 12px !important;
                padding: 3px 3px !important;
            }
            /* 1270px: 실측상 12px 컴팩트에서 합계(10자리)까지 잘림 0이 되는 최소 폭 */
            #salTable { min-width: 1270px; }
            /* 세무사표는 JS가 인라인 min-width:1480px(15px 글자 기준, 6632)을 걸어 컴팩트에서도 안 줄어듦
               → !important로 급여대장과 같은 폭으로 통일 (캡틴 id 9458) */
            #taxSalTable { min-width: 1270px !important; }
        }

        /* 정산표 고정열: collapse 모드는 셀 사이 테두리 줄이 어느 셀 배경에도 안 덮여
           가로 스크롤 시 뒤 글자가 비침 → separate 모드(배경이 자기 테두리 영역까지 커버)로 원천 차단 */
        table.st-sep { border-collapse: separate; border-spacing: 0; }
        table.st-sep th, table.st-sep td { border: 0; border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); }
        table.st-sep thead th { border-top: 1px solid var(--border); }
        table.st-sep th:first-child, table.st-sep td:first-child { border-left: 1px solid var(--border); }
        
        th {
            background: #f1f5f9;
            font-weight: 600;
            font-size: 12px;
            position: sticky;
            top: 0;
            z-index: 3; /* 세로 스크롤 시 본문 고정열(z2)이 헤더를 덮지 않게 */
        }
        
        td input {
            width: 100%;
            border: 1px solid transparent;
            text-align: right;
            padding: 4px 6px;
            font-size: 13px;
            background: transparent;
            border-radius: 4px;
        }
        
        td input:focus {
            border-color: var(--primary);
            background: #fff;
            outline: none;
        }

        /* 계약 회차 창 — 편집 표라 여백을 줄여 날짜가 안 잘리게 하고, 글자 입력칸은 왼쪽 정렬,
           상태 셀렉트는 본문과 같은 13px (캡틴 id 14103: 가운데정렬·셀렉트 폰트·날짜 잘림) */
        #ctInvBody th, #ctInvBody td { padding: 6px 4px; }
        #ctInvBody td input { text-align: left; }
        #ctInvBody td input[type="date"] { text-align: center; }  /* 날짜 칸 가운데 (캡틴 id 14270) */
        
        td.text-right {
            text-align: right;
        }
        
        td.text-left {
            text-align: left;
        }

        td.text-center {
            text-align: center;
        }
        
        tr:hover {
            background: #f8fafc;
        }
        
        /* Month chips */
        .month-chips {
            display: flex;
            gap: 6px;
            flex-wrap: wrap;
            margin-bottom: 16px;
        }
        
        .month-chip {
            padding: 6px 14px;
            border: 1px solid var(--border);
            border-radius: 20px;
            font-size: 13px;
            cursor: pointer;
            transition: 0.2s;
            background: #fff;
        }
        
        .month-chip:hover {
            border-color: var(--primary);
            color: var(--primary);
        }
        
        .month-chip.active {
            background: var(--primary);
            color: #fff;
            border-color: var(--primary);
        }
        
        /* Save indicator */
        .save-indicator {
            font-size: 12px;
            color: var(--success);
            opacity: 0;
            transition: opacity 0.3s;
            margin-left: 8px;
            white-space: nowrap;
            flex-shrink: 0;
        }
        
        .save-indicator.show {
            opacity: 1;
        }
        
        /* Spinner */
        .spinner-overlay {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(255, 255, 255, 0.7);
            z-index: 9999;
            align-items: center;
            justify-content: center;
        }
        
        .spinner-overlay.show {
            display: flex;
        }
        
        .spinner {
            width: 40px;
            height: 40px;
            border: 4px solid var(--border);
            border-top-color: var(--primary);
            border-radius: 50%;
            animation: spin 0.8s linear infinite;
        }
        
        @keyframes spin {
            to {
                transform: rotate(360deg);
            }
        }
        
        /* Warning */
        .warning-text {
            color: var(--danger);
            font-weight: 600;
        }
        
        .warning-row {
            background: #fff5f5 !important;
        }
        
        /* Upload area */
        .upload-section {
            display: flex;
            gap: 12px;
            flex-wrap: wrap;
            margin-bottom: 16px;
        }
        
        .upload-box {
            border: 2px dashed var(--border);
            border-radius: var(--radius);
            padding: 16px;
            text-align: center;
            min-width: 200px;
            flex: 1;
            cursor: pointer;
            transition: 0.2s;
            position: relative;
        }
        
        .upload-box:hover {
            border-color: var(--primary);
            background: #f0f7ff;
        }
        
        .upload-box input[type="file"] {
            position: absolute;
            inset: 0;
            opacity: 0;
            cursor: pointer;
        }
        
        .upload-box .upload-label {
            font-weight: 600;
            font-size: 13px;
            margin-bottom: 4px;
        }
        
        .upload-box .upload-status {
            font-size: 12px;
            color: var(--text-muted);
        }
        
        .upload-box.uploaded {
            border-color: var(--success);
            background: #f0fdf4;
        }

        .upload-box.dragover {
            border-color: var(--primary);
            background: #dbeafe;
            transform: scale(1.02);
        }
        
        /* Misc */
        .section-controls {
            display: flex;
            align-items: center;
            gap: 12px;
            margin-bottom: 16px;
            flex-wrap: wrap;
        }
        
        .empty-msg {
            text-align: center;
            padding: 40px;
            color: var(--text-muted);
        }
        
        .inline-flex {
            display: inline-flex;
            align-items: center;
            gap: 8px;
        }

        /* 반복되던 인라인 style을 옮긴 것 (2026-08-11). 규칙 하나가 여러 곳에 쓰이므로
           값을 고칠 때 화면 전체에 같이 반영된다. 뒤에 정의해 같은 특이도에서 앞 규칙을 덮는다. */
        .fg-shrink.fg-shrink.fg-shrink { min-width:0; }
        .fld-lbl-c.fld-lbl-c.fld-lbl-c { font-size:12px; color:#64748b; display:block; margin-bottom:4px; text-align:center; }
        .ctl-inline.ctl-inline.ctl-inline { font-size:14px; font-weight:400; min-width:unset; width:auto; padding:4px 8px; border:1px solid #cbd5e1; border-radius:var(--radius); }
        .mon-opt.mon-opt.mon-opt { padding:6px 0; text-align:center; cursor:pointer; font-size:14px; }
        .fld-lbl.fld-lbl.fld-lbl { font-size:12px; color:#64748b; display:block; margin-bottom:4px; }
        .fg-fixed.fg-fixed.fg-fixed { flex:0 0 auto; }
        .inp-num.inp-num.inp-num { width:100%; padding:0 8px; border:1px solid #cbd5e1; border-radius:8px; font-size:13px; box-sizing:border-box; text-align:right; }
        .row-head.row-head.row-head { display:flex; align-items:center; gap:8px; border-bottom:none; margin-bottom:0; }
        .btn-w72.btn-w72.btn-w72 { min-width:72px; }
        .nowrap.nowrap.nowrap { white-space:nowrap; }
        .mt-16.mt-16.mt-16 { margin-top:16px; }
        .tac.tac.tac { text-align:center; }
        .bb-line.bb-line.bb-line { border-bottom:1px solid var(--border); }
        .note-muted.note-muted.note-muted { color:var(--text-muted); font-size:13px; }
        .th-c.th-c.th-c { padding:6px 8px; text-align:center; }
        .row-gap8.row-gap8.row-gap8 { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
        .m0.m0.m0 { margin:0; }
        .w-full.w-full.w-full { width:100%; }
        .fg-3.fg-3.fg-3 { flex:3; }
        .sel-inline.sel-inline.sel-inline { width:auto; min-width:unset; font-size:14px; padding:4px 24px 4px 8px; border:1px solid #cbd5e1; border-radius:var(--radius); }
        .w-80.w-80.w-80 { width:80px; }
        .h-plain.h-plain.h-plain { border-bottom:none; margin-bottom:16px; }
        .btn-bare.btn-bare.btn-bare { background:none; border:none; cursor:pointer; color:#64748b; }
        /* 팝업 닫기 X — 22px도 작다고 해서 28px로 (캡틴 id 14286→14303) */
        .btn-icon.btn-bare, .btn-icon.btn-bare-w { font-size:28px; line-height:1; }
        .mb-14.mb-14.mb-14 { margin-bottom:14px; }
        .btn-bare-w.btn-bare-w.btn-bare-w { background:none; border:none; color:#fff; cursor:pointer; }
        .fld-lbl-b.fld-lbl-b.fld-lbl-b { font-size:12px; font-weight:600; color:var(--text-muted); display:block; margin-bottom:4px; }
        .mt-12.mt-12.mt-12 { margin-top:12px; }
        .w-75.w-75.w-75 { width:75px; }
        .vam.vam.vam { vertical-align:middle; }
        .modal-sm.modal-sm.modal-sm { background:#fff; border-radius:12px; padding:28px 24px; max-width:380px; width:90%; box-shadow:0 8px 32px rgba(0,0,0,0.2); }
        .row-end.row-end.row-end { display:flex; gap:8px; justify-content:flex-end; }
        .note-sm.note-sm.note-sm { font-size:12px; color:var(--text-muted); }
        .h-16.h-16.h-16 { font-size:16px; font-weight:700; margin:0; }
        .modal-head.modal-head.modal-head { background:linear-gradient(135deg,#ec4899,#8b5cf6,#3b82f6); padding:14px 20px; color:#fff; font-weight:700; font-size:15px; border-radius:14px 14px 0 0; display:flex; justify-content:space-between; align-items:center; }
        .bg-soft.bg-soft.bg-soft { background:#f8fafc; }
        .fs-12.fs-12.fs-12 { font-size:12px; }
        .val-box.val-box.val-box { padding:8px 10px; background:#f1f5f9; border-radius:6px; font-size:13px; color:#374151; min-height:36px; }

        /* 스크립트가 표를 그리며 붙이던 인라인 style을 옮긴 것 (2026-08-11 2단계) */
        .td-c5.td-c5.td-c5 { text-align:center; padding:5px 4px; }
        .td-c7.td-c7.td-c7 { padding:7px 10px; text-align:center; }
        .th-c-soft.th-c-soft.th-c-soft { text-align:center; padding:6px 8px; background:#f8fafc; }
        .td-c8.td-c8.td-c8 { padding:8px; text-align:center; }
        .td-r5.td-r5.td-r5 { text-align:right; padding:5px 4px; }
        .th-head.th-head.th-head { text-align:center; padding:10px 12px; background:#f8fafc; border-bottom:1px solid #e5e7eb; white-space:nowrap; }
        .tbl-fixed12.tbl-fixed12.tbl-fixed12 { width:100%; border-collapse:collapse; font-size:12px; table-layout:fixed; }
        .fw6.fw6.fw6 { font-weight:600; }
        .td-c78.td-c78.td-c78 { padding:7px 8px; text-align:center; }
        .td-c7-line.td-c7-line.td-c7-line { padding:7px 10px; text-align:center; border-bottom:1px solid #f1f5f9; }
        .row-between.row-between.row-between { display:flex; justify-content:space-between; align-items:center; }
        .th-c10.th-c10.th-c10 { text-align:center; padding:10px 12px; white-space:nowrap; }
        .fs-11.fs-11.fs-11 { font-size:11px; }
        .c-red.c-red.c-red { color:#ef4444; }
        .bb-soft.bb-soft.bb-soft { border-bottom:1px solid #f1f5f9; }
        .td-r-head.td-r-head.td-r-head { padding:7px 8px; text-align:right; border-bottom:2px solid #e2e8f0; }
        .tar.tar.tar { text-align:right; }
        .c-gray.c-gray.c-gray { color:#6b7280; }
        .fs-10.fs-10.fs-10 { font-size:10px; }

        /* 자금관리 (캡틴 id 10879) — 거래원장·업로드 표 */
        .tal.tal.tal { text-align:left; }
        /* 적요·기재내용은 길이가 제각각이라 폭을 고정하고 넘치면 …으로 줄인다(전체 내용은 title로) */
        .fund-tbl td { overflow:hidden; text-overflow:ellipsis; }
        .fund-drop {
            border:2px dashed #cbd5e1; border-radius:12px; padding:36px 20px;
            text-align:center; cursor:pointer; transition:border-color .2s, background .2s;
        }
        /* 매일 쓰는 화면이라 드롭존은 얇게 — 자리는 계좌 현황판이 차지한다 */
        .fund-drop-thin { padding:16px 20px; }
        /* 숫자(18px)와 설명 글자(12~13px)가 섞여 있어 baseline에 두면 세로가 어긋난다 → 가운데로 세운다 (캡틴 id 11015) */
        .fund-stat { display:flex; align-items:center; gap:5px; height:40px; box-sizing:border-box;
                     border:1px solid var(--border); border-radius:10px; padding:0 14px; background:#fff; font-size:13px; }
        .fund-stat b { font-size:18px; line-height:1; }
        .fund-stat .note-sm { line-height:1; }
        .fund-sec-head { display:flex; align-items:center; gap:10px; margin:18px 0 8px; font-weight:600; font-size:14px; }
        /* 합계 줄은 본문과 같은 회색이면 눈에 안 걸린다 (feedback_disabled_state_contrast 참고) */
        .fund-tbl tr.fund-sum > td { background:#e2e8f0; border-top:1px solid #cbd5e1; }
        /* 입력칸·드랍박스 테두리는 버튼(.btn-outline)과 같은 #cbd5e1 (캡틴 확정 2026-08-21 id 12247).
           연한 --border(#e2e8f0)는 카드·표 등 컨테이너 전용 — 폼 컨트롤에 쓰면 버튼 옆에서 한 톤 연해 어긋나 보인다. */
        /* 일보·월보 머리줄의 날짜·월 칸 — 옆 버튼과 같은 테두리(#cbd5e1)·모서리·높이로 맞춘다 (캡틴 id 12213).
           --border(#e2e8f0)를 쓰면 버튼보다 한 톤 연해서 어긋나 보인다. */
        #fundRepDay, #fundRepMon, #fundDashDate { height:34px; padding:0 12px; border:1px solid #cbd5e1; border-radius:8px;
            font-size:14px; font-family:inherit; box-sizing:border-box; background:#fff; color:var(--text); }
        #fundRepSeg .btn-pair { min-width:88px; }
        .fund-badge-late { font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;color:#e11d48;background:#fff1f2;border:1px solid #fda4af; }
        .fund-badge-ok   { font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;background:#f1f5f9;color:#94a3b8; }
        .fund-badge-new  { font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;background:#ecfdf5;color:#059669;border:1px solid #6ee7b7; }
        tr.fund-late td { background:#fffbfb; }
        tr.fund-reverted td { color:#94a3b8; text-decoration:line-through; }

        /* 자금관리 상위 5탭(대시보드·거래관리·자금계획·자금보고·설정) 안쪽 구역 버튼과 판 (캡틴 id 13276).
           옛 서브탭 8개가 거래관리·설정 안의 구역으로 들어갔다. 구역 판은 서브탭 판과 같은 켜고 끄기. */
        .fund-seg { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:14px; }
        .fund-seg .btn-pair { min-width:88px; }
        .fund-seg-panel { display:none; }
        .fund-seg-panel.active { display:block; }
        .fund-seg-n { display:inline-block; min-width:18px; padding:0 5px; height:18px; line-height:18px; border-radius:9px;
            font-size:11px; font-weight:700; text-align:center; background:#e2e8f0; color:#475569; margin-left:4px; }
        .fund-seg-n:empty { display:none; }
        .btn-primary .fund-seg-n { background:rgba(255,255,255,.28); color:#fff; }
        .fund-seg-n.warn { background:#fef3c7; color:#b45309; }
        /* 대시보드 숫자 칸 — 현재 잔액 → 입금 예정 → 지출 예정 → 예상 잔액 (+ 이력 볼 땐 실제 마감) (캡틴 id 13268·13276) */
        .fund-kpi { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:14px; }
        .fund-kpi.five { grid-template-columns:repeat(5,1fr); }
        .fund-kpi > div { border:1px solid var(--border); border-radius:10px; padding:12px 14px; background:#fff; min-width:0; }
        .fund-kpi .l { font-size:12px; color:var(--text-muted); margin-bottom:6px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
        .fund-kpi .v { font-size:20px; font-weight:700; letter-spacing:-.3px; font-variant-numeric:tabular-nums; }
        .fund-kpi .v.plus { color:#16a34a; }
        .fund-kpi .v.minus { color:#dc2626; }
        .fund-kpi > div.hl { background:#eff6ff; border-color:#bfdbfe; }
        .fund-kpi .d { font-size:11px; margin-top:4px; }
        .fund-chips { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin:12px 0 4px; }   /* 안내 글자를 칩 버튼과 같은 높이로 (캡틴 id 15212) */
        .fund-dash-tied td { cursor:pointer; }
        .fund-dash-tied:hover td { background:#f8fafc; }
        .fund-dash-in.fund-dash-in { height:28px; font-size:13px; padding:0 8px; width:100%; }

        /* 모달 닫기 X — 16px은 헤더 그라데이션 위에서 너무 작다 (캡틴 id 10987) */
        .modal-head .btn-icon { font-size:28px; line-height:1; }  /* 팝업 X 통일 (캡틴 id 14303) */
        /* 라벨 없이 툴바에 놓인 select는 글자를 가운데로 (캡틴 id 10995) */
        .ctl-center.ctl-center.ctl-center { text-align:center; text-align-last:center; }
        .ctl-center option { text-align:center; }

        /* 직접 만든 드롭 목록 — 네이티브 select는 펼친 목록 정렬을 CSS로 못 바꾼다 (캡틴 id 11009) */
        .fund-drop-list {
            position:absolute; top:38px; left:0; background:#fff; border:1px solid var(--border);
            border-radius:8px; box-shadow:0 4px 16px rgba(0,0,0,0.12); z-index:30; overflow:hidden;
        }
        .fund-drop-item { padding:8px 10px; font-size:14px; text-align:center; cursor:pointer; white-space:nowrap; }
        .fund-drop-item:hover { background:#f1f5f9; }
        .fund-drop-item.on { background:#eef2ff; font-weight:700; }
        .fund-drop-group { padding:6px 10px; font-size:12px; font-weight:700; color:#94a3b8; background:#f8fafc; text-align:center; }
        /* 쪽 나누기 (캡틴 id 11043) */
        .fund-pager { display:flex; align-items:center; gap:4px; flex-wrap:wrap; margin:8px 0 4px; }
        .fund-pager .note-sm { margin-left:8px; }
        .fund-page-cur { display:inline-flex; align-items:center; justify-content:center; min-width:28px; height:28px;
            padding:0 8px; border-radius:var(--radius); font-size:12px; font-weight:700; color:#fff;
            background:linear-gradient(135deg,#ec4899,#8b5cf6,#3b82f6); }
        /* 숫자칸 증감 화살표 자리 때문에 가운데 정렬한 값이 왼쪽으로 밀린다 (캡틴 id 11085) */
        .no-spin::-webkit-outer-spin-button,
        .no-spin::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
        .no-spin { -moz-appearance: textfield; appearance: textfield; }

        /* 자금이동 검토 표 — 머리글은 위에, 날짜~입금 여섯 칸은 왼쪽에 붙여둔다 (캡틴 id 11180).
           고정칸은 배경이 있어야 뒤 내용이 비치지 않는다. tw-fit 이 separate 모드라 테두리도 셀이 그린다. */
        .fund-xfer-tbl tr > :nth-child(1) { position:sticky; left:0;     z-index:2; background:#fff; }
        .fund-xfer-tbl tr > :nth-child(2) { position:sticky; left:100px; z-index:2; background:#fff; }
        .fund-xfer-tbl tr > :nth-child(3) { position:sticky; left:162px; z-index:2; background:#fff; }
        .fund-xfer-tbl tr > :nth-child(4) { position:sticky; left:292px; z-index:2; background:#fff; }
        .fund-xfer-tbl tr > :nth-child(5) { position:sticky; left:402px; z-index:2; background:#fff; }
        .fund-xfer-tbl tr > :nth-child(6) { position:sticky; left:532px; z-index:2; background:#fff;
            box-shadow: 1px 0 0 var(--border); }   /* 고정 구간 끝을 선으로 표시 */
        .fund-xfer-tbl thead tr > :nth-child(-n+6) { z-index:5; background:#f1f5f9; }

/* 출장 등록 창 동반자 목록 — 여러 명 고르는 목록 상자는 한 줄 드롭박스(34px)와 달리 여러 줄이 보여야 한다 (캡틴 id 14892) */
.form-grid .fg select[multiple] { height: auto; min-height: 118px; padding: 4px 6px; }
