/* ═══════════════════════════════════════════════════════════════
   patches-extracted.css
   patches.js / org-views.js / wbs-modal.js에서 추출한 정적 CSS
   (CSS-in-JS → 외부 CSS 전환 — style-src unsafe-inline 축소)
   ═══════════════════════════════════════════════════════════════ */

/* ── 0. 로그인 애니메이션 (index.html <style> 태그에서 추출) ── */
@keyframes loginFadeIn { from { opacity:0; transform:translateY(20px); } to { opacity:1; transform:translateY(0); } }
@keyframes loginFloat { 0%,100% { transform:translateY(0); } 50% { transform:translateY(-8px); } }
.login-card { animation: loginFadeIn 0.6s ease-out; }
.login-logo { animation: loginFloat 3s ease-in-out infinite; }
.login-bg-dot { position:absolute; border-radius:50%; background:rgba(59,130,246,.08); }

/* ── 1. workspaceHubPolishStyle (patches.js ensureWorkspacePolishStyle) ── */
#workspaceHubDebug{display:none !important; visibility:hidden !important; height:0 !important; overflow:hidden !important;}
.workspace-hub-card{position:relative; border:1px solid #e2e8f0; border-radius:1.25rem; background:#fff; box-shadow:var(--shadow-sm); transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease;}
.workspace-hub-card:hover{transform:translateY(-2px); box-shadow:0 12px 28px rgba(15,23,42,.08); border-color:#cbd5e1;}
.workspace-hub-card::before{content:''; position:absolute; inset:0 auto 0 0; width:4px; border-radius:1.25rem 0 0 1.25rem; background:var(--hub-accent,#3b82f6); opacity:.95;}
.workspace-ops-meta{display:flex; flex-wrap:wrap; gap:.5rem; margin-top:.875rem;}
.workspace-ops-meta .meta-chip{display:inline-flex; align-items:center; padding:.35rem .65rem; border-radius:999px; background:#f8fafc; border:1px solid #e2e8f0; color:#475569; font-size:11px; font-weight:800; line-height:1;}
.workspace-ops-actions{display:flex; flex-wrap:wrap; gap:.5rem; margin-top:1rem; padding-top:1rem; border-top:1px solid #f1f5f9;}
.workspace-ops-actions button{appearance:none; border:1px solid #e2e8f0; background:#fff; color:#334155; border-radius:.75rem; padding:.55rem .8rem; font-size:11px; font-weight:900; line-height:1; transition:all .16s ease;}
.workspace-ops-actions button:hover{border-color:#60a5fa; color:#2563eb; background:#eff6ff;}
.workspace-ops-actions button.primary{background:#0f172a; border-color:#0f172a; color:#fff;}
.workspace-ops-actions button.primary:hover{background:#2563eb; border-color:#2563eb; color:#fff;}
.workspace-ops-empty{border:1px dashed #cbd5e1; border-radius:1.5rem; background:linear-gradient(180deg,#fff,#f8fafc); padding:2.75rem 1.5rem; text-align:center;}
.workspace-ops-empty .empty-icon{font-size:2.25rem; margin-bottom:.75rem;}
.workspace-ops-empty .empty-title{font-size:1rem; font-weight:900; color:#0f172a;}
.workspace-ops-empty .empty-desc{font-size:.875rem; color:#64748b; margin-top:.45rem;}
.workspace-ops-empty .empty-actions{display:flex; gap:.5rem; justify-content:center; flex-wrap:wrap; margin-top:1rem;}
.workspace-ops-empty .empty-actions button{border-radius:.9rem; padding:.7rem 1rem; font-size:.8125rem; font-weight:900; border:1px solid #cbd5e1; background:#fff; color:#334155;}
.workspace-ops-empty .empty-actions button.primary{background:#0f172a; border-color:#0f172a; color:#fff;}
@media (max-width: 640px){
  .workspace-ops-actions{gap:.4rem;}
  .workspace-ops-actions button{flex:1 1 calc(50% - .4rem); justify-content:center;}
}

/* ── 2. workspaceHubSummaryStyle (patches.js ensureStyle) ── */
.workspace-hub-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 20px;}
.workspace-hub-summary-card{background:#fff;border:1px solid #e2e8f0;border-radius:var(--radius-lg);padding:18px 18px 16px;box-shadow:var(--shadow-sm)}
.workspace-hub-summary-card .label{font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;margin-bottom:6px}
.workspace-hub-summary-card .value{font-size:clamp(1.1rem,2vw,1.65rem);font-weight:900;color:#0f172a;line-height:1.1}
.workspace-hub-summary-card .sub{font-size:12px;color:#64748b;margin-top:6px;font-weight:700}
.workspace-hub-quickbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;padding:14px 16px;margin:0 0 20px;border:1px solid #e2e8f0;border-radius:var(--radius-lg);background:linear-gradient(180deg,#fff,#f8fafc);box-shadow:var(--shadow-xs)}
.workspace-hub-quickbar .quick-title{font-size:13px;font-weight:900;color:#0f172a}
.workspace-hub-quickbar .quick-sub{font-size:12px;color:#64748b;font-weight:700;margin-top:3px}
.workspace-hub-quickbar .quick-actions{display:flex;flex-wrap:wrap;gap:8px}
.workspace-hub-quickbar .quick-actions button{appearance:none;border:1px solid #dbeafe;background:#eff6ff;color:#1d4ed8;border-radius:12px;padding:10px 12px;font-size:12px;font-weight:900;line-height:1;transition:all .15s ease}
.workspace-hub-quickbar .quick-actions button:hover{background:#dbeafe;border-color:#93c5fd}
.workspace-hub-quickbar .quick-actions button.primary{background:#0f172a;border-color:#0f172a;color:#fff}
.workspace-hub-quickbar .quick-actions button.primary:hover{background:#2563eb;border-color:#2563eb}
.workspace-hub-quickbar .quick-actions button.ghost{background:#fff;border-color:#e2e8f0;color:#334155}
.workspace-hub-quickbar .quick-actions button[disabled]{opacity:.45;cursor:not-allowed}
.workspace-hub-current-badge{display:inline-flex;align-items:center;padding:.3rem .6rem;border-radius:999px;background:#dbeafe;border:1px solid #93c5fd;color:#1d4ed8;font-size:11px;font-weight:900;margin-left:8px}
@media (max-width:1024px){.workspace-hub-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:640px){.workspace-hub-summary-grid{grid-template-columns:1fr;}.workspace-hub-quickbar{padding:14px}.workspace-hub-quickbar .quick-actions{width:100%}.workspace-hub-quickbar .quick-actions button{flex:1 1 calc(50% - 8px);justify-content:center}}

/* ── 3. opsConsistencyV2710Style (patches.js ops consistency) ── */
.ops-summary-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0 0 18px}
.ops-summary-card{background:linear-gradient(180deg,#ffffff,#f8fafc);border:1px solid #e2e8f0;border-radius:var(--radius-lg);padding:16px 18px 14px;box-shadow:var(--shadow-sm)}
.ops-summary-card .label{font-size:11px;font-weight:900;letter-spacing:.08em;text-transform:uppercase;color:#94a3b8;margin-bottom:6px}
.ops-summary-card .value{font-size:clamp(1rem,2vw,1.5rem);font-weight:900;color:#0f172a;line-height:1.12}
.ops-summary-card .sub{font-size:12px;color:#64748b;margin-top:6px;font-weight:700}
.ops-currentbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;margin:0 0 18px;border:1px solid #e2e8f0;border-radius:var(--radius-lg);background:linear-gradient(180deg,#fff,#f8fafc);box-shadow:var(--shadow-xs)}
.ops-currentbar .title{font-size:13px;font-weight:900;color:#0f172a}
.ops-currentbar .sub{font-size:12px;color:#64748b;font-weight:700;margin-top:3px}
.ops-currentbar .actions{display:flex;flex-wrap:wrap;gap:8px}
.ops-currentbar .actions button{appearance:none;border:1px solid #dbeafe;background:#eff6ff;color:#1d4ed8;border-radius:12px;padding:10px 12px;font-size:12px;font-weight:900;line-height:1;transition:all .15s ease}
.ops-currentbar .actions button:hover{background:#dbeafe;border-color:#93c5fd}
.ops-currentbar .actions button.primary{background:#0f172a;border-color:#0f172a;color:#fff}
.ops-currentbar .actions button.primary:hover{background:#2563eb;border-color:#2563eb}
.ops-currentbar .actions button.ghost{background:#fff;border-color:#e2e8f0;color:#334155}
.ops-currentbar .actions button[disabled]{opacity:.45;cursor:not-allowed}
.ops-badge{display:inline-flex;align-items:center;padding:.32rem .62rem;border-radius:999px;background:#dbeafe;border:1px solid #93c5fd;color:#1d4ed8;font-size:11px;font-weight:900;margin-left:8px}
@media (max-width:1024px){.ops-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:640px){.ops-summary-grid{grid-template-columns:1fr}.ops-currentbar{padding:14px}.ops-currentbar .actions{width:100%}.ops-currentbar .actions button{flex:1 1 calc(50% - 8px);justify-content:center}}

/* ── 4. removeCurrentProjectQuickbarsStyle (patches.js quickbar hide) ── */
#workspaceHubQuickbar,.workspace-hub-quickbar,#homeOpsQuickbar,#dashOpsQuickbar,.ops-currentbar{display:none !important;}

/* ── 5. workspaceRebuildV4SafeStyle (patches.js project selectors hide) ── */
#projectSelect,#mobProjectSelect,#btnRenameWs{display:none !important;}

/* ── 6. workspaceBoardFlowV8Style (patches.js board mode) ── */
body.workspace-board-mode-v8 #ctxnav-dashboard, body.workspace-board-mode-v8 #ctxnav-wbs, body.workspace-board-mode-v8 #ctxnav-issues, body.workspace-board-mode-v8 #ctxnav-runningorder, body.workspace-board-mode-v8 #ctxnav-dailylog, body.workspace-board-mode-v8 #ctxnav-estimate, body.workspace-board-mode-v8 #ctxnav-quote, body.workspace-board-mode-v8 #ctxnav-expense, body.workspace-board-mode-v8 #ctxnav-finance, body.workspace-board-mode-v8 #ctxnav-portal, body.workspace-board-mode-v8 #ctxnav-extcrew, body.workspace-board-mode-v8 #currentWorkspaceBox, body.workspace-board-mode-v8 #currentDeleteBtn { display:none !important; }

/* ── 7. workspaceSidebarSafeV27Style (patches.js detail mode) ── */
body.workspace-detail-mode-v27 #ctx-project{display:block !important;}
body.workspace-detail-mode-v27 #ctx-project.hidden{display:block !important;}
body.workspace-detail-mode-v27 #ctx-project .ctx-section-header{display:block !important;}
body.workspace-detail-mode-v27 #ctx-project .ctx-divider{display:block !important;}
body.workspace-detail-mode-v27 #ctxnav-dashboard,
body.workspace-detail-mode-v27 #ctxnav-wbs,
body.workspace-detail-mode-v27 #ctxnav-issues,
body.workspace-detail-mode-v27 #ctxnav-runningorder,
body.workspace-detail-mode-v27 #ctxnav-dailylog,
body.workspace-detail-mode-v27 #ctxnav-estimate,
body.workspace-detail-mode-v27 #ctxnav-quote,
body.workspace-detail-mode-v27 #ctxnav-expense,
body.workspace-detail-mode-v27 #ctxnav-finance,
body.workspace-detail-mode-v27 #ctxnav-portal,
body.workspace-detail-mode-v27 #ctxnav-extcrew{display:flex !important;}
body.workspace-detail-mode-v27 #currentWorkspaceBox,
body.workspace-detail-mode-v27 #currentDeleteBtn{display:block !important;}

/* ── 8. projectContextStripStyle (patches.js project context strip) ── */
#projectContextStrip{display:none;margin:-2px 0 14px 0;padding:12px 14px;border:1px solid #dbeafe;background:linear-gradient(180deg,#f8fbff 0%,#eef6ff 100%);border-radius:var(--radius-lg);box-shadow:0 4px 14px rgba(15,23,42,.05)}
#projectContextStrip.pcs-show{display:block}
#projectContextStrip .pcs-row{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap}
#projectContextStrip .pcs-title{font-size:16px;font-weight:900;color:#0f172a;line-height:1.2}
#projectContextStrip .pcs-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
#projectContextStrip .pcs-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;background:#fff;border:1px solid #dbeafe;font-size:11px;font-weight:800;color:#334155}
#projectContextStrip .pcs-chip.pcs-status{background:#eff6ff;color:#1d4ed8;border-color:#bfdbfe}
#projectContextStrip .pcs-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
#projectContextStrip .pcs-btn{appearance:none;border:1px solid #cbd5e1;background:#fff;color:#0f172a;padding:8px 12px;border-radius:12px;font-size:12px;font-weight:900;cursor:pointer}
#projectContextStrip .pcs-btn:hover{border-color:#60a5fa;color:#1d4ed8;background:#eff6ff}
@media (max-width: 768px){
  #projectContextStrip{padding:10px 12px;border-radius:16px}
  #projectContextStrip .pcs-title{font-size:14px}
  #projectContextStrip .pcs-chip{font-size:10px;padding:5px 8px}
}

/* ── 9. v47DetailHeaderCleanupStyle (patches.js save chip) ── */
#projectContextStrip .pcs-chip#pcsSaveChip{background:#f8fafc;border-color:#cbd5e1;color:#475569}
#projectContextStrip .pcs-chip#pcsSaveChip.pcs-saving{background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}

/* ── 10. wbsPanelCSS (wbs-modal.js + org-views.js slide panel) ── */
.wbs-panel-overlay{position:fixed;inset:0;z-index:997;background:rgba(0,0,0,0);transition:background .3s ease}
.wbs-panel-overlay.open{background:rgba(0,0,0,.3)}
.wbs-panel{position:fixed;top:0;right:0;bottom:0;height:100vh;z-index:998;width:min(560px,90vw);background:#f8fafc;box-shadow:-4px 0 25px rgba(0,0,0,.1);transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);overflow-y:auto;-webkit-overflow-scrolling:touch}
.wbs-panel.open{transform:translateX(0)}

/* ── 11. CSP inline-style 제거 유틸리티 ── */

/* 모달 사이징 */
.os-modal-lg { width:560px; max-width:95vw; max-height:85vh; }
.os-modal-md { width:520px; max-width:95vw; max-height:85vh; }
.os-modal-sm { width:480px; max-width:95vw; max-height:85vh; }
.os-modal-xl { width:600px; max-width:95vw; max-height:85vh; }

/* 홈 섹션 아이콘 서클 — 각 색상별 */
.section-icon { border-radius:12px; width:42px; height:42px; display:flex; align-items:center; justify-content:center; font-size:20px; flex-shrink:0; }
.section-icon-amber { background:linear-gradient(135deg,#f59e0b,#d97706); box-shadow:0 4px 12px rgba(217,119,6,0.35); }
.section-icon-green { background:linear-gradient(135deg,#059669,#047857); box-shadow:0 4px 12px rgba(5,150,105,0.35); }
.section-icon-purple { background:linear-gradient(135deg,#7c3aed,#6d28d9); box-shadow:0 4px 12px rgba(124,58,237,0.35); }
.section-icon-sky { background:linear-gradient(135deg,#0284c7,#0369a1); box-shadow:0 4px 12px rgba(2,132,199,0.35); }
.section-icon-rose { background:linear-gradient(135deg,#be185d,#9d174d); box-shadow:0 4px 12px rgba(190,24,93,0.35); }
.section-icon-indigo { background:linear-gradient(135deg,#4338ca,#3730a3); box-shadow:0 4px 12px rgba(67,56,202,0.35); }
.section-icon-blue { background:linear-gradient(135deg,#2563eb,#1d4ed8); box-shadow:0 4px 12px rgba(37,99,235,0.35); }
.section-icon-teal { background:linear-gradient(135deg,#0f766e,#0d9488); box-shadow:0 4px 12px rgba(15,118,110,0.35); }

/* 그래디언트 헤더 */
.grad-header-dark { background:linear-gradient(135deg,#1e293b,#334155); }
.grad-header-blue { background:linear-gradient(135deg,#1e3a8a,#3b82f6); }
.grad-header-navy { background:linear-gradient(135deg,#0f172a,#1e3a5f); }
.grad-header-violet { background:linear-gradient(135deg,#7c3aed,#a78bfa); }

/* 커스텀 색상 피커 배경 */
.color-picker-conic { background:conic-gradient(from 0deg, #ef4444, #f59e0b, #eab308, #10b981, #06b6d4, #3b82f6, #8b5cf6, #ec4899, #ef4444); }

/* patchLogModal overlay — display:none(hidden)과 충돌하므로 기본은 none, JS에서 열 때 grid 적용 */
.patch-log-overlay { display:none; place-content:center; align-items:safe center; justify-items:center; background:rgba(0,0,0,0.95); overflow:auto; }

/* 로그인 오버레이 */
.login-overlay-bg { background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 40%,#1a365d 70%,#0f172a 100%); }

/* 포탈 헤더 */
.portal-header-bg { background:linear-gradient(135deg,#0f172a,#1e3a5f); }

/* 재무 clamp 폰트 */
.fin-card-amount { font-size:clamp(.85rem,2.5vw,1.3rem); }

/* cmdPalette 오버레이 */
.cmd-palette-overlay { background:rgba(15,23,42,0.6); backdrop-filter:blur(4px); }

/* projQuickModal 오버레이 */
.proj-quick-overlay { background:rgba(15,23,42,0.5); backdrop-filter:blur(4px); }

/* 출근 모달 헤더 */
.mand-clock-header { background:linear-gradient(135deg,#1e293b,#334155); padding:32px 28px; text-align:center; color:white; }
.mand-clock-body { padding:24px 28px; }
.mand-clock-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-bottom:16px; }
.mand-clock-bypass { width:100%; padding:10px; border-radius:10px; border:1px solid #e2e8f0; background:#f8fafc; cursor:pointer; font-size:12px; font-weight:700; color:#94a3b8; }

/* 퇴근 모달 */
.eod-header { background:linear-gradient(135deg,#7c3aed,#a78bfa); padding:28px 24px; text-align:center; color:white; }
.eod-body { padding:20px 24px; display:flex; flex-direction:column; gap:12px; }
.eod-btn-primary { padding:14px; border-radius:12px; border:none; background:#10b981; color:white; cursor:pointer; font-size:15px; font-weight:800; }
.eod-btn-secondary { padding:14px; border-radius:12px; border:2px solid #7c3aed; background:white; color:#7c3aed; cursor:pointer; font-size:15px; font-weight:800; }

/* 프로젝트 컬러 닷 */
.proj-color-dot { width:14px; height:14px; border-radius:50%; background:#3B82F6; flex-shrink:0; cursor:pointer; border:2px solid rgba(0,0,0,0.1); }

/* TODO 배지 */
.todo-badge-style { background:#dc2626; color:white; min-width:18px; text-align:center; }

/* 프로젝트 목록 네비 */
.ctx-projlist-btn { color:#3b82f6; font-weight:700; margin-bottom:4px; }

/* 런닝오더 헤더 셀 패딩 */
.ro-hdr-cell { padding:8px 6px; }
.ro-hdr-time { color:#93c5fd; padding:8px 10px; }

/* 견적서 공급자 테이블 */
.quote-supplier-tbl { table-layout:fixed; width:100%; flex:1; }
.quote-th-vertical { writing-mode:vertical-rl; letter-spacing:6px; width:26px; border-bottom:1px solid #000; }
.quote-th-label { font-size:9px; }
.quote-input-sm { font-size:11px; }
.quote-input-xs { font-size:10px; }

/* 견적서 합계 행 */
.quote-grand-row { display:flex; align-items:baseline; gap:8px; flex-wrap:nowrap; overflow:hidden; }
.quote-grand-label { font-size:13px; font-weight:700; white-space:nowrap; flex-shrink:0; }
.quote-grand-word { font-weight:900; letter-spacing:0.5px; color:#1d4ed8; white-space:nowrap; font-size:12px; flex-shrink:1; overflow:hidden; text-overflow:ellipsis; }
.quote-grand-num { font-weight:900; margin-left:auto; white-space:nowrap; font-size:17px; flex-shrink:0; }

/* 직인/인감 이미지 */
.seal-img { width:65px; height:65px; object-fit:contain; opacity:0.85; mix-blend-mode:multiply; }
.seal-text-fallback { position:absolute; right:8px; top:8px; font-size:10px; color:#94a3b8; z-index:5; }
.seal-btn-pos { right:4px; top:4px; z-index:30; }

/* 설정 doc-table-wrap 오버라이드 */
.dtw-flat { overflow:visible; box-shadow:none; border-radius:0; }
.dtw-flat-scroll { overflow-x:auto; box-shadow:none; border-radius:0; }

/* 재무 원장 테이블 */
.ldg-table-income { min-width:800px; border-collapse:collapse; table-layout:fixed; }
.ldg-table-expense { min-width:850px; border-collapse:collapse; table-layout:fixed; }

/* 제안서 AI 뷰 */
.proposal-wrap { display:flex; flex-direction:column; height:calc(100vh - 60px); gap:8px; }
.proposal-toolbar { display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:4px 0; }
.proposal-badge { background:linear-gradient(135deg,#1a365d,#2b6cb0); color:#fff; padding:5px 12px; border-radius:8px; font-size:11px; font-weight:800; }
.proposal-btn-green { margin-left:auto; padding:5px 10px; background:#059669; border:none; border-radius:6px; font-size:10px; font-weight:700; color:white; cursor:pointer; }
.proposal-btn-purple { padding:5px 10px; background:#7c3aed; border:none; border-radius:6px; font-size:10px; font-weight:700; color:white; cursor:pointer; }
.proposal-btn-red { padding:5px 10px; background:#dc2626; border:none; border-radius:6px; font-size:10px; font-weight:700; color:white; cursor:pointer; }
.proposal-btn-ghost { padding:5px 10px; background:#f1f5f9; border:1px solid #e2e8f0; border-radius:6px; font-size:10px; font-weight:700; color:#475569; cursor:pointer; }
.proposal-frame { flex:1; border:1px solid #e2e8f0; border-radius:8px; background:#fff; min-height:0; }

/* 모바일 서브네비 */
.mobile-sub-nav-inner { display:flex; width:100%; justify-content:center; gap:4px; flex-wrap:wrap; }

/* TODO 토글 버튼 기본 상태 */
.todo-toggle-default { border-color:#cbd5e1; background:white; color:#64748b; }

/* 재무 profit 색상 */
.fin-profit-color { color:#7c3aed; }

/* 파이프라인 그리드 */
.pipeline-grid-7 { grid-template-columns:repeat(7,1fr); }

/* ──────────────────────────────────────────────────────────
   급여관리 모바일 반응형 테이블 (data-label 패턴, 640px 이하)
   데스크톱: 기존 테이블 그대로, 모바일: 각 행이 세로 카드로 변환
   2026-04-18 추가 (fin-payroll.js _renderFinPayroll)
   ──────────────────────────────────────────────────────────*/
@media (max-width: 640px) {
  .fin-payroll-table { min-width: 0 !important; font-size: 13px !important; }
  .fin-payroll-table thead { position: absolute; left: -9999px; top: -9999px; }
  .fin-payroll-table tbody, .fin-payroll-table tr, .fin-payroll-table td { display: block; width: 100%; box-sizing: border-box; }
  .fin-payroll-table tr { background: #ffffff !important; border: 1px solid #e2e8f0 !important; border-radius: 12px; margin-bottom: 12px; padding: 6px 2px; }
  .fin-payroll-table td { display: flex !important; justify-content: space-between !important; align-items: center !important; gap: 12px !important; padding: 8px 12px !important; border-bottom: 1px dashed #f1f5f9 !important; text-align: right !important; }
  .fin-payroll-table td:last-child { border-bottom: none !important; }
  .fin-payroll-table td::before { content: attr(data-label); font-weight: 700; color: #64748b; font-size: 11px; white-space: nowrap; flex-shrink: 0; }
  .fin-payroll-table td input, .fin-payroll-table td select { width: auto !important; min-width: 120px; max-width: 60%; }
  .fin-payroll-table td.fin-payroll-del { justify-content: flex-end !important; }
  .fin-payroll-table td.fin-payroll-del::before { content: ""; }
  .fin-payroll-wrap { border: none !important; background: transparent !important; overflow-x: visible !important; }
}

/*──────────────────────────────────────────────────────────
   모바일 데이터 테이블 → 카드 변환 (통합 스타일)
   2026-04-18 추가 — 재무/자금/근태/조직/리포트 전체 테이블
   data-label 속성 기반 ::before 라벨 표시
   ──────────────────────────────────────────────────────────*/
@media (max-width: 640px) {
  .fin-ec-table,
  .fin-trs-table,
  .fin-vendor-table,
  .fin-cashflow-table,
  .fin-vat-table,
  .fin-daily-table,
  .fin-card-table,
  .fin-budget-table,
  .fin-rep-pnl-table,
  .fin-rep-proj-table,
  .fin-rep-recv-table,
  .fin-overview-proj-table,
  .fin-quote-list-table,
  .fin-expenses-list-table,
  .fin-att-table,
  .fin-vendor-db-table,
  .fin-client-db-table,
  .fin-crew-table {
    min-width: 0 !important;
    font-size: 13px !important;
    display: block !important;
    width: 100% !important;
  }

  .fin-ec-table thead,
  .fin-trs-table thead,
  .fin-vendor-table thead,
  .fin-cashflow-table thead,
  .fin-vat-table thead,
  .fin-daily-table thead,
  .fin-card-table thead,
  .fin-budget-table thead,
  .fin-rep-pnl-table thead,
  .fin-rep-proj-table thead,
  .fin-rep-recv-table thead,
  .fin-overview-proj-table thead,
  .fin-quote-list-table thead,
  .fin-expenses-list-table thead,
  .fin-att-table thead,
  .fin-vendor-db-table thead,
  .fin-client-db-table thead,
  .fin-crew-table thead {
    position: absolute;
    left: -9999px;
    top: -9999px;
  }

  .fin-ec-table tbody, .fin-ec-table tr, .fin-ec-table td,
  .fin-trs-table tbody, .fin-trs-table tr, .fin-trs-table td,
  .fin-vendor-table tbody, .fin-vendor-table tr, .fin-vendor-table td,
  .fin-cashflow-table tbody, .fin-cashflow-table tr, .fin-cashflow-table td,
  .fin-vat-table tbody, .fin-vat-table tr, .fin-vat-table td,
  .fin-daily-table tbody, .fin-daily-table tr, .fin-daily-table td,
  .fin-card-table tbody, .fin-card-table tr, .fin-card-table td,
  .fin-budget-table tbody, .fin-budget-table tr, .fin-budget-table td,
  .fin-rep-pnl-table tbody, .fin-rep-pnl-table tr, .fin-rep-pnl-table td,
  .fin-rep-proj-table tbody, .fin-rep-proj-table tr, .fin-rep-proj-table td,
  .fin-rep-recv-table tbody, .fin-rep-recv-table tr, .fin-rep-recv-table td,
  .fin-overview-proj-table tbody, .fin-overview-proj-table tr, .fin-overview-proj-table td,
  .fin-quote-list-table tbody, .fin-quote-list-table tr, .fin-quote-list-table td,
  .fin-expenses-list-table tbody, .fin-expenses-list-table tr, .fin-expenses-list-table td,
  .fin-att-table tbody, .fin-att-table tr, .fin-att-table td,
  .fin-vendor-db-table tbody, .fin-vendor-db-table tr, .fin-vendor-db-table td,
  .fin-client-db-table tbody, .fin-client-db-table tr, .fin-client-db-table td,
  .fin-crew-table tbody, .fin-crew-table tr, .fin-crew-table td {
    display: block !important;
    width: 100% !important;
    box-sizing: border-box;
  }

  .fin-ec-table tr,
  .fin-trs-table tr,
  .fin-vendor-table tr,
  .fin-cashflow-table tr,
  .fin-vat-table tr,
  .fin-daily-table tr,
  .fin-card-table tr,
  .fin-budget-table tr,
  .fin-rep-pnl-table tr,
  .fin-rep-proj-table tr,
  .fin-rep-recv-table tr,
  .fin-overview-proj-table tr,
  .fin-quote-list-table tr,
  .fin-expenses-list-table tr,
  .fin-att-table tr,
  .fin-vendor-db-table tr,
  .fin-client-db-table tr,
  .fin-crew-table tr {
    background: #ffffff !important;
    border: 1px solid #e2e8f0 !important;
    border-radius: 12px;
    margin-bottom: 12px;
    padding: 6px 2px;
  }

  .fin-ec-table td,
  .fin-trs-table td,
  .fin-vendor-table td,
  .fin-cashflow-table td,
  .fin-vat-table td,
  .fin-daily-table td,
  .fin-card-table td,
  .fin-budget-table td,
  .fin-rep-pnl-table td,
  .fin-rep-proj-table td,
  .fin-rep-recv-table td,
  .fin-overview-proj-table td,
  .fin-quote-list-table td,
  .fin-expenses-list-table td,
  .fin-att-table td,
  .fin-vendor-db-table td,
  .fin-client-db-table td,
  .fin-crew-table td {
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
    gap: 12px !important;
    padding: 8px 12px !important;
    border-bottom: 1px dashed #f1f5f9 !important;
    text-align: right !important;
    min-height: 36px;
  }

  .fin-ec-table td:last-child,
  .fin-trs-table td:last-child,
  .fin-vendor-table td:last-child,
  .fin-cashflow-table td:last-child,
  .fin-vat-table td:last-child,
  .fin-daily-table td:last-child,
  .fin-card-table td:last-child,
  .fin-budget-table td:last-child,
  .fin-rep-pnl-table td:last-child,
  .fin-rep-proj-table td:last-child,
  .fin-rep-recv-table td:last-child,
  .fin-overview-proj-table td:last-child,
  .fin-quote-list-table td:last-child,
  .fin-expenses-list-table td:last-child,
  .fin-att-table td:last-child,
  .fin-vendor-db-table td:last-child,
  .fin-client-db-table td:last-child,
  .fin-crew-table td:last-child {
    border-bottom: none !important;
  }

  .fin-ec-table td::before,
  .fin-trs-table td::before,
  .fin-vendor-table td::before,
  .fin-cashflow-table td::before,
  .fin-vat-table td::before,
  .fin-daily-table td::before,
  .fin-card-table td::before,
  .fin-budget-table td::before,
  .fin-rep-pnl-table td::before,
  .fin-rep-proj-table td::before,
  .fin-rep-recv-table td::before,
  .fin-overview-proj-table td::before,
  .fin-quote-list-table td::before,
  .fin-expenses-list-table td::before,
  .fin-att-table td::before,
  .fin-vendor-db-table td::before,
  .fin-client-db-table td::before,
  .fin-crew-table td::before {
    content: attr(data-label);
    font-weight: 700;
    color: #64748b;
    font-size: 11px;
    white-space: nowrap;
    flex-shrink: 0;
    text-align: left;
  }

  /* 입력/선택자 폭 제한 (카드에서 우측 정렬) */
  .fin-ec-table td input,
  .fin-ec-table td select,
  .fin-trs-table td input,
  .fin-trs-table td select,
  .fin-vendor-db-table td input,
  .fin-vendor-db-table td select,
  .fin-client-db-table td input,
  .fin-client-db-table td select,
  .fin-crew-table td input,
  .fin-crew-table td select {
    width: auto !important;
    min-width: 120px;
    max-width: 60%;
    text-align: right;
  }

  /* 삭제/액션 셀: 라벨 숨김 + 우측 정렬 */
  .fin-ec-act,
  .fin-trs-del,
  .fin-att-act,
  .fin-vendor-del,
  .fin-crew-del,
  .fin-ec-check,
  .fin-trs-check {
    justify-content: flex-end !important;
  }

  .fin-ec-act::before,
  .fin-trs-del::before,
  .fin-att-act::before,
  .fin-vendor-del::before,
  .fin-crew-del::before,
  .fin-ec-check::before,
  .fin-trs-check::before {
    content: "" !important;
  }

  /* 긴 설명/사유 셀: 세로 스택 (라벨 위, 내용 아래) */
  .fin-ec-desc,
  .fin-trs-num {
    flex-direction: column !important;
    align-items: flex-start !important;
    text-align: left !important;
    gap: 4px !important;
  }

  .fin-ec-desc::before,
  .fin-trs-num::before {
    text-align: left;
  }

  /* 랩퍼 박스 (외부 테두리/스크롤 제거) */
  .fin-ec-wrap,
  .fin-trs-wrap,
  .fin-att-wrap,
  .fin-vendor-wrap,
  .fin-client-wrap,
  .fin-crew-wrap {
    border: none !important;
    background: transparent !important;
    overflow-x: visible !important;
    box-shadow: none !important;
  }
}

/*──────────────────────────────────────────────────────────
   비재무 영역 모바일 반응형 테이블 (홈/파이프라인/산출·지출/손익)
   2026-04-18 추가 — home-widgets, pipeline-views, treasury,
   est-exp-views, project-pnl, treasury-pnl, quote, dashboard-charts
   ──────────────────────────────────────────────────────────*/
@media (max-width: 640px) {
  .fin-home-proj-table,
  .fin-pipeline-quote-table,
  .fin-trs-recent-table,
  .fin-trs-vendor-table,
  .fin-est-list-table,
  .fin-exp-list-table,
  .fin-pnl-cat-table,
  .fin-pnl-inc-table,
  .fin-trs-pnl-month-table,
  .fin-trs-pnl-proj-table,
  .fin-dashboard-bva-table {
    min-width: 0 !important;
    font-size: 13px !important;
    display: block !important;
    width: 100% !important;
  }

  .fin-home-proj-table thead,
  .fin-pipeline-quote-table thead,
  .fin-trs-recent-table thead,
  .fin-trs-vendor-table thead,
  .fin-est-list-table thead,
  .fin-exp-list-table thead,
  .fin-pnl-cat-table thead,
  .fin-pnl-inc-table thead,
  .fin-trs-pnl-month-table thead,
  .fin-trs-pnl-proj-table thead,
  .fin-dashboard-bva-table thead {
    position: absolute;
    left: -9999px;
    top: -9999px;
  }

  .fin-home-proj-table tbody, .fin-home-proj-table tr, .fin-home-proj-table td,
  .fin-pipeline-quote-table tbody, .fin-pipeline-quote-table tr, .fin-pipeline-quote-table td,
  .fin-pipeline-quote-table tfoot, .fin-pipeline-quote-table tfoot tr, .fin-pipeline-quote-table tfoot td,
  .fin-trs-recent-table tbody, .fin-trs-recent-table tr, .fin-trs-recent-table td,
  .fin-trs-vendor-table tbody, .fin-trs-vendor-table tr, .fin-trs-vendor-table td,
  .fin-est-list-table tbody, .fin-est-list-table tr, .fin-est-list-table td,
  .fin-exp-list-table tbody, .fin-exp-list-table tr, .fin-exp-list-table td,
  .fin-pnl-cat-table tbody, .fin-pnl-cat-table tr, .fin-pnl-cat-table td,
  .fin-pnl-inc-table tbody, .fin-pnl-inc-table tr, .fin-pnl-inc-table td,
  .fin-trs-pnl-month-table tbody, .fin-trs-pnl-month-table tr, .fin-trs-pnl-month-table td,
  .fin-trs-pnl-proj-table tbody, .fin-trs-pnl-proj-table tr, .fin-trs-pnl-proj-table td,
  .fin-dashboard-bva-table tbody, .fin-dashboard-bva-table tr, .fin-dashboard-bva-table td,
  .fin-dashboard-bva-table tfoot, .fin-dashboard-bva-table tfoot tr, .fin-dashboard-bva-table tfoot td {
    display: block !important;
    width: 100% !important;
    box-sizing: border-box;
  }

  .fin-home-proj-table tr,
  .fin-pipeline-quote-table tbody tr,
  .fin-pipeline-quote-table tfoot tr,
  .fin-trs-recent-table tr,
  .fin-trs-vendor-table tr,
  .fin-est-list-table tr,
  .fin-exp-list-table tr,
  .fin-pnl-cat-table tr,
  .fin-pnl-inc-table tr,
  .fin-trs-pnl-month-table tr,
  .fin-trs-pnl-proj-table tr,
  .fin-dashboard-bva-table tbody tr,
  .fin-dashboard-bva-table tfoot tr {
    background: #ffffff !important;
    border: 1px solid #e2e8f0 !important;
    border-radius: 12px;
    margin-bottom: 12px;
    padding: 6px 2px;
  }

  .fin-home-proj-table td,
  .fin-pipeline-quote-table td,
  .fin-trs-recent-table td,
  .fin-trs-vendor-table td,
  .fin-est-list-table td,
  .fin-exp-list-table td,
  .fin-pnl-cat-table td,
  .fin-pnl-inc-table td,
  .fin-trs-pnl-month-table td,
  .fin-trs-pnl-proj-table td,
  .fin-dashboard-bva-table td {
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
    gap: 12px !important;
    padding: 8px 12px !important;
    border-bottom: 1px dashed #f1f5f9 !important;
    text-align: right !important;
    min-height: 36px;
    width: 100% !important;
    max-width: 100% !important;
  }

  .fin-home-proj-table td:last-child,
  .fin-pipeline-quote-table td:last-child,
  .fin-trs-recent-table td:last-child,
  .fin-trs-vendor-table td:last-child,
  .fin-est-list-table td:last-child,
  .fin-exp-list-table td:last-child,
  .fin-pnl-cat-table td:last-child,
  .fin-pnl-inc-table td:last-child,
  .fin-trs-pnl-month-table td:last-child,
  .fin-trs-pnl-proj-table td:last-child,
  .fin-dashboard-bva-table td:last-child {
    border-bottom: none !important;
  }

  .fin-home-proj-table td::before,
  .fin-pipeline-quote-table td::before,
  .fin-trs-recent-table td::before,
  .fin-trs-vendor-table td::before,
  .fin-est-list-table td::before,
  .fin-exp-list-table td::before,
  .fin-pnl-cat-table td::before,
  .fin-pnl-inc-table td::before,
  .fin-trs-pnl-month-table td::before,
  .fin-trs-pnl-proj-table td::before,
  .fin-dashboard-bva-table td::before {
    content: attr(data-label);
    font-weight: 700;
    color: #64748b;
    font-size: 11px;
    white-space: nowrap;
    flex-shrink: 0;
    text-align: left;
  }

  /* 액션 셀: 라벨 숨김 + 우측 정렬 */
  .fin-home-proj-act,
  .fin-pipeline-quote-open,
  .fin-est-list-act,
  .fin-exp-list-act,
  .fin-quote-list-act {
    justify-content: flex-end !important;
  }

  .fin-home-proj-act::before,
  .fin-pipeline-quote-open::before,
  .fin-est-list-act::before,
  .fin-exp-list-act::before,
  .fin-quote-list-act::before {
    content: "" !important;
  }

  /* 랩퍼 박스 (외부 테두리/스크롤 제거) */
  .fin-home-proj-wrap {
    border: none !important;
    background: transparent !important;
    overflow-x: visible !important;
    box-shadow: none !important;
  }
}

