:root{--green:#1d9e75;--green2:#0f8a64;--bg:#f6f7f4;--ink:#172033;--muted:#697386;--line:#e2e8f0;--card:#ffffff;--accent:#6d5dfc;--danger:#dc2626;--warn:#f59e0b;--ok:#059669;--side-w:320px}
*{box-sizing:border-box} html,body,#app{height:100%} body{margin:0;font-family:Pretendard,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased} a{color:inherit;text-decoration:none} button{font-family:inherit} button:active,.navBtn:active,a.ghost:active,.processStep:active{filter:brightness(.82);transform:scale(.98);transition:filter .05s,transform .05s} button,.navBtn,a.ghost,.processStep{transition:filter .12s ease,transform .12s ease}.app-shell{height:100vh;display:grid;grid-template-columns:var(--side-w) 1fr;overflow:hidden}.side{background:#fff;border-right:1px solid var(--line);display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden}.brand{padding:14px 18px 12px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;align-items:flex-start;gap:6px}.logo{width:44px;height:44px;border-radius:14px;display:block;object-fit:contain;box-shadow:0 8px 20px rgba(20,168,160,.22)}.brandLogo{height:44px;display:flex;align-items:center}.brandLogo img{height:44px;max-width:190px;object-fit:contain;display:block;border-radius:8px}.brand h1{font-size:18px;line-height:1.1;margin:0}.brand p{margin:4px 0 0;color:var(--muted);font-size:12px;line-height:1.35}.modeSwitch{padding:14px 14px 6px;display:grid;grid-template-columns:1fr 1fr;gap:8px}.modeSwitch a{border:1px solid var(--line);border-radius:12px;padding:10px 8px;text-align:center;font-size:13px;background:#f8fafc}.modeSwitch a.active{background:#e8fbf3;border-color:#a7f3d0;color:#047857;font-weight:800}.langSwitch{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:6px 14px 2px}.langSwitch button{border:1px solid var(--line);border-radius:12px;background:#fff;padding:8px 6px;font-size:12px;font-weight:850;color:#475569;cursor:pointer}.langSwitch button.active{background:#15805e;color:#fff;border-color:#15805e}.sidebarHint{color:#94a3b8;font-size:11px;padding:8px 16px 2px;line-height:1.35}.nav{padding:10px 10px 28px;overflow-y:auto;overflow-x:visible;flex:1 1 auto;min-height:0;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;scrollbar-width:thin}.group{margin:8px 0 12px}.groupTitle{font-size:12px;font-weight:900;color:#475569;padding:10px 10px 6px;display:flex;align-items:center;justify-content:space-between}.navBtn{width:100%;border:0;background:transparent;border-radius:14px;padding:10px 10px;display:flex;gap:12px;align-items:center;text-align:left;cursor:pointer;color:#1f2937;position:relative;min-height:44px}.navBtn:hover,.navBtn:focus-visible{background:#f1f5f9;outline:none}.navBtn.active{background:#e8fbf3;color:#047857;font-weight:850}.ico{width:26px;height:26px;display:grid;place-items:center;flex:0 0 26px;color:#2563eb;border-radius:9px;background:#eff6ff}.navBtn.active .ico{background:#d1fae5;color:#047857}.ico svg{width:18px;height:18px;display:block}.ico path{fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.navText{min-width:0}.navText b{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.navText span{display:none}.navBtn::after{content:attr(data-tooltip);position:absolute;left:calc(100% + 12px);top:50%;transform:translateY(-50%);width:max-content;max-width:320px;background:#0f172a;color:#fff;border-radius:12px;padding:9px 11px;font-size:12px;font-weight:700;line-height:1.35;box-shadow:0 12px 30px rgba(15,23,42,.22);opacity:0;pointer-events:none;z-index:1000;white-space:normal}.navBtn::before{content:"";position:absolute;left:calc(100% + 4px);top:50%;transform:translateY(-50%);border:6px solid transparent;border-right-color:#0f172a;opacity:0;pointer-events:none;z-index:1001}/* tooltip ::after 검은박스 제거됨 (브라우저 기본 title 사용) */.main{display:grid;grid-template-rows:64px 1fr;background:#f8fafc;min-width:0}.top{height:64px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:space-between;padding:0 18px;gap:12px}.topLeft{display:flex;align-items:center;gap:8px;min-width:0}.crumb{min-width:0}.crumb b{display:block;font-size:15px}.crumb span{display:block;color:var(--muted);font-size:12px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.pill{border:1px solid var(--line);background:white;border-radius:999px;padding:8px 12px;font-size:13px;max-width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.primary{border:0;background:var(--green);color:white;border-radius:12px;padding:9px 14px;font-weight:800;cursor:pointer}.ghost{border:1px solid var(--line);background:white;border-radius:12px;padding:9px 12px;cursor:pointer}.ghost:hover,.primary:hover{filter:brightness(.98)}.frameWrap{padding:14px;overflow:hidden}.panel{height:100%;background:white;border:1px solid var(--line);border-radius:18px;overflow:hidden;box-shadow:0 10px 28px rgba(15,23,42,.06)}iframe{width:100%;height:100%;border:0;background:white}.collapsed .app-shell{grid-template-columns:84px 1fr}.collapsed .brand h1,.collapsed .brand p,.collapsed .modeSwitch,.collapsed .groupTitle,.collapsed .navText,.collapsed .sidebarHint{display:none}.collapsed .brand{justify-content:center}.collapsed .langSwitch{grid-template-columns:1fr;padding:8px 12px}.collapsed .langSwitch button{font-size:11px;padding:7px 2px}.collapsed .navBtn{justify-content:center;padding:11px}.collapsed .ico{width:32px;height:32px;flex-basis:32px}.collapsed .navBtn::after{left:76px}.collapsed .navBtn::before{left:68px}.loginNotice{position:fixed;right:18px;bottom:18px;z-index:999999;background:#fff7ed;color:#7c2d12;border:1px solid #fed7aa;border-radius:14px;padding:14px 16px;box-shadow:0 14px 34px rgba(15,23,42,.16);display:grid;gap:4px;max-width:360px}.loginNotice b{font-size:14px}.loginNotice span{font-size:12px;color:#9a3412}.loginNotice a{margin-top:4px;display:inline-flex;width:max-content;background:#ea580c;color:#fff;border-radius:10px;padding:8px 10px;font-weight:900;font-size:12px}.loginNotice.tenantMismatch{background:#fef2f2;color:#7f1d1d;border-color:#fecaca}.loginNotice.tenantMismatch span{color:#991b1b}.loginNotice.tenantMismatch a{background:#dc2626}
@media(max-width:980px){.app-shell{grid-template-columns:1fr}.side{position:fixed;z-index:5;left:0;top:0;bottom:0;width:320px;max-width:88vw;transform:translateX(-102%);transition:.2s;box-shadow:12px 0 30px rgba(15,23,42,.16)}.side.open{transform:none}.nav{overflow-x:hidden}.navBtn::after,.navBtn::before{display:none}.main{height:100vh}.top{padding:0 10px}.frameWrap{padding:8px}.actions .pill{display:none}.actions .ghost#homeLink,.actions .ghost#openNew{display:none}}
@media(max-width:560px){.top{padding:0 6px;gap:4px}.topLeft{min-width:0;flex:0 0 auto}.crumb{display:none}.actions{gap:4px;flex-wrap:nowrap;flex:1 1 auto;min-width:0}.actions .ghost#helpBtn,.actions .ghost#modeLink,.actions .ghost#mapBtn{display:none}.actions #langSelect{min-width:0;max-width:124px;padding:7px 19px 7px 7px;font-size:11.5px}.actions .ghost,.actions .primary{padding:6px 7px;font-size:12px}.actions .themeToggle{padding:6px 6px}}
@media print{.side,.top,.no-print{display:none!important}.app-shell{display:block}.frameWrap{padding:0}.panel{border:0;box-shadow:none;border-radius:0}}

/* Step33 Fix43: prevent tenant/admin theme from making labels invisible on white pill buttons */
button.ghost,a.ghost,.actions .ghost,.modeSwitch a,.langSwitch{padding:6px 10px 8px}
.langSwitch select#langSelect{
  width:100%;
  border:1px solid var(--line,#e3e7ec);
  border-radius:7px;
  padding:6px 28px 6px 10px;
  font-size:12px;
  font-weight:600;
  background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2364748b'/%3E%3C/svg%3E") no-repeat right 10px center;
  background-size:10px;
  -webkit-appearance:none;
  appearance:none;
  cursor:pointer;
  color:var(--ink,#1a2230);
  transition:.15s;
  box-shadow:0 1px 3px rgba(0,0,0,.06);
}
.langSwitch select#langSelect:hover{border-color:#94a3b8;box-shadow:0 1px 4px rgba(0,0,0,.1)}
.langSwitch select#langSelect:focus{outline:none;border-color:var(--accent,#2c5fb3);box-shadow:0 0 0 2px rgba(44,95,179,.15)}
.langSwitch button,.navBtn,.pill{color:var(--ink)!important}
.primary,#logoutBtn.primary{color:#fff!important}
.langSwitch button.active{color:#fff!important}
.navBtn.active{color:#047857!important}
/* step36-fix2-patch19: 언어 선택을 헤더(회사명 왼쪽)로 이동 + 액션 영역 글자크기 통일(홈/운영모드/새창 = 새로고침/로그아웃 = 13px) */
.actions #langSelect{border:1px solid var(--line);border-radius:12px;padding:9px 30px 9px 12px;font-size:13px;font-weight:600;color:var(--ink);background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2364748b'/%3E%3C/svg%3E") no-repeat right 10px center;background-size:10px;-webkit-appearance:none;appearance:none;cursor:pointer;transition:.15s}
.actions #langSelect:hover{border-color:#94a3b8}
.actions #langSelect:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px rgba(109,93,252,.15)}
.actions .ghost,.actions .primary{font-size:13px}

/* Step33 Fix47: tree menu navigation, search, and favorites */
.menuTools{padding:8px 14px 4px;border-bottom:1px solid #f1f5f9}.menuTools label{display:block;color:#64748b;font-size:11px;font-weight:900;margin:0 0 5px}.menuSearchBox{display:flex;align-items:center;gap:6px;background:#f8fafc;border:1px solid var(--line);border-radius:12px;padding:5px 7px}.menuSearchBox input{min-width:0;flex:1;border:0;background:transparent;outline:0;font:inherit;font-size:13px;color:var(--ink);padding:5px 2px}.menuSearchBox button{width:24px;height:24px;border:0;border-radius:8px;background:#e2e8f0;color:#334155;font-weight:900;cursor:pointer;line-height:1}.treeNav{padding-top:8px}.treeGroup{margin:6px 0 8px}.groupHeader{width:100%;border:0;background:transparent;color:#334155;display:grid;grid-template-columns:20px 1fr auto;align-items:center;gap:6px;text-align:left;border-radius:12px;padding:9px 10px;font-weight:950;cursor:pointer}.groupHeader:hover,.groupHeader:focus-visible{background:#f1f5f9;outline:none}.chev{transition:transform .16s ease;color:#64748b;font-size:13px}.treeGroup.open .chev{transform:rotate(90deg)}.groupName{font-size:12px;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.groupCount{font-size:11px;color:#64748b;background:#f1f5f9;border-radius:999px;padding:2px 7px}.groupItems{display:none;margin:2px 0 4px}.treeGroup.open .groupItems{display:block}.navRow{display:grid;grid-template-columns:1fr;align-items:center;gap:3px;margin:2px 0}.navRow .navBtn{min-height:40px;padding:8px 8px}.navRow .navText b{font-size:13px}.navRow .navText small{display:none}/* tk-m: 즐겨찾기(별표) 기능 제거 — .favBtn/.favoriteGroup 규칙 삭제, navRow 단일 컬럼 */.navEmpty{margin:14px 8px;padding:14px;border:1px dashed #cbd5e1;border-radius:12px;color:#64748b;text-align:center;font-size:13px;background:#f8fafc}.collapsed .menuTools{padding:8px 10px}.collapsed .menuTools label,.collapsed .menuSearchBox input,.collapsed .menuSearchBox button,.collapsed .groupCount,.collapsed .groupName{display:none}.collapsed .menuSearchBox{justify-content:center;min-height:12px;padding:0;border:0;background:transparent}.collapsed .groupHeader{display:none}.collapsed .groupItems{display:block}.collapsed .navRow{display:block}.collapsed .navRow .navBtn{width:100%}@media(max-width:980px){.menuTools{padding:8px 14px}.navRow .navBtn::after,.navRow .navBtn::before{display:none}}
/* Step33 Fix48 — nested ISO 17025 document tree labels */
.navBranchRow .branchOnly{cursor:default;color:#334155;background:#f8fafc;font-weight:950;min-height:34px;}
.navBranchRow .branchOnly:hover{background:#f1f5f9;}
.navBranchRow .branchOnly .ico{background:#f1f5f9;color:#64748b;width:22px;height:22px;flex-basis:22px;}
.navBranchRow .branchOnly .navText b{font-size:12px;color:#334155;}
.navBranchRow .branchOnly .navText small{display:none;}
.branchSpacer{visibility:hidden;}

/* Step34 Fix3 — AI/workflow focused workspace navigation */
.main{grid-template-rows:64px auto 1fr}
/* step36-fix2-patch37: 작업순서바(processBar)가 display:none이면 grid 항목이 2개로 줄어 frameWrap이 1fr(3행) 대신 auto(2행)에 배치돼 화면이 수축하던 문제 → 행 명시 고정으로 frameWrap이 항상 남은 공간 차지 */
.main>.top{grid-row:1}.main>.processBar{grid-row:2}.main>.frameWrap{grid-row:3}
.processBar{border-bottom:1px solid var(--line);background:#000080;display:grid;grid-template-columns:210px 1fr;gap:10px;align-items:center;padding:8px 14px;min-height:58px}
.processMeta{border-right:1px solid rgba(255,255,255,.25);padding-right:12px;min-width:0}.processMeta b{display:block;font-size:12px;color:#fff;font-weight:950}.processMeta span{display:block;margin-top:2px;color:#fff;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.processTabs{display:flex;gap:8px;overflow-x:auto;scrollbar-width:thin;padding-bottom:2px;align-items:center}
.stepArrow{flex:0 0 auto;color:#cbd5e1;font-size:15px;font-weight:700;user-select:none}.processStep{display:flex;align-items:center;gap:8px;min-width:148px;max-width:210px;border:1px solid #dbe2ea;background:#f8fafc;border-radius:10px;padding:7px 9px;text-align:left;cursor:pointer;color:#334155}.processStep:hover{background:#eef6ff;border-color:#bfdbfe}.processStep.active{background:#15805e;color:#fff;border-color:#15805e;box-shadow:0 4px 12px rgba(15,23,42,.16)}.processStep.active small{color:#cbd5e1}.stepNo{flex:0 0 22px;width:22px;height:22px;border-radius:999px;background:#e2e8f0;color:#334155;display:grid;place-items:center;font-size:11px;font-weight:950}.processStep.active .stepNo{background:#1D9E75;color:#fff}.stepText{min-width:0}.stepText b{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stepText small{display:block;margin-top:1px;color:#64748b;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.collapsed .processBar{grid-template-columns:160px 1fr}@media(max-width:980px){.main{grid-template-rows:64px auto 1fr}.processBar{grid-template-columns:1fr;padding:8px}.processMeta{border-right:0;border-bottom:1px solid #e2e8f0;padding:0 0 6px}.processStep{min-width:140px}}

/* Step34 Fix9 — flat primary menu and tighter sidebar */
/* tk-m: 사이드바 폭 소폭 축소(280→256px, ~8.6%). 라벨 nowrap+ellipsis라 줄바꿈 없음 */
:root{--side-w:256px}
.side{overflow-x:hidden}
.nav{overflow-x:hidden;padding-left:8px;padding-right:8px}
/* tk-m: 세로 스크롤바 얇게(넘칠 때만 표시). scrollbar-gutter 제거로 상시 예약폭 없음 */
.nav::-webkit-scrollbar{width:4px}.nav::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.nav::-webkit-scrollbar-track{background:transparent}
.flatMenuTitle{font-size:11px;font-weight:950;color:#64748b;padding:8px 10px 4px;text-transform:none}
.flatNavRow{margin:3px 0;grid-template-columns:1fr}
.flatNavRow .navBtn{min-height:40px;padding:8px 8px;border-radius:10px;gap:9px}
.flatNavRow .navText b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.flatNavRow .ico{width:24px;height:24px;flex-basis:24px;border-radius:8px}
.navRow{min-width:0}.navText{min-width:0;max-width:100%}.navText small{display:none}
.menuTools{padding-left:8px;padding-right:8px}.sidebarHint{padding-left:10px;padding-right:10px}
.collapsed .app-shell{grid-template-columns:72px 1fr}.collapsed .navBtn::after{left:68px}.collapsed .navBtn::before{left:60px}
@media(max-width:980px){.side{width:280px}.flatNavRow .navBtn::after,.flatNavRow .navBtn::before{display:none}}
@media(min-width:981px){.side{position:relative}}.sideResizeHandle{position:absolute;right:-3px;top:0;bottom:0;width:6px;cursor:col-resize;background:transparent;z-index:20}.sideResizeHandle:hover,.resizingSide .sideResizeHandle{background:rgba(37,99,235,.16)}.resizingSide{user-select:none;cursor:col-resize}.collapsed .sideResizeHandle{display:none}
/* step36: 관리자 모드 상단 순서바 정리 — '순서' 라벨·단계 화살표 숨김 */
body[data-mode="admin"] .processMeta b{display:none}
body[data-mode="admin"] .stepArrow{display:none}
/* step36-fix2-patch12: 순서바 네이비(#000080)+흰 글씨를 전 모드 공통으로 통일(.processBar/.processMeta) */
/* step36-fix2-patch13: 운영모드 순서바 배경은 초록(#046307), 관리자모드는 네이비(#000080) 유지 */
body[data-mode="operation"] .processBar{background:#046307}
/* step36-fix2-patch5: 활성(현재) 단계 색을 모드별로 구분 — 운영=초록(#15805e), 관리자=파랑.
   클릭해 이동한 탭은 다른 탭으로 옮기기 전까지 active 배경이 그대로 유지된다(JS URL 매칭 수정). */
body[data-mode="admin"] .processStep.active{background:#1d4ed8;border-color:#1d4ed8;color:#fff;box-shadow:0 4px 12px rgba(29,78,216,.22)}
body[data-mode="admin"] .processStep.active small{color:#dbeafe}
body[data-mode="admin"] .processStep.active .stepNo{background:#3b82f6;color:#fff}

/* ===== Light/Dark 테마 토글 — 셸(사이드바·상단바·순서바)은 실색상 다크팔레트, 화면 내용(iframe)은 반전필터로 즉시 다크 처리 ===== */
.themeToggle{border:1px solid var(--line);background:#fff;border-radius:12px;padding:9px 11px;cursor:pointer;font-size:15px;line-height:1;display:flex;align-items:center}
.themeToggle:hover{background:#f1f5f9}
html[data-theme="dark"]{color-scheme:dark}
html[data-theme="dark"]{--bg:#0f1115;--ink:#e6e9ef;--muted:#9aa4b2;--line:#2a2f3a;--card:#171a21}
html[data-theme="dark"] body{background:var(--bg);color:var(--ink)}
html[data-theme="dark"] .side{background:#12141a;border-color:#242832}
html[data-theme="dark"] .brand{border-color:#242832}
html[data-theme="dark"] .brand p{color:#8b93a3}
html[data-theme="dark"] .modeSwitch a{background:#1b1e26;border-color:#2a2f3a;color:#c7cdda}
html[data-theme="dark"] .modeSwitch a.active{background:#0f3d2c;border-color:#166f4f;color:#6ee7b7}
html[data-theme="dark"] .menuTools{border-color:#242832}
html[data-theme="dark"] .menuSearchBox{background:#1b1e26;border-color:#2a2f3a}
html[data-theme="dark"] .menuSearchBox input{color:#e6e9ef}
html[data-theme="dark"] .sidebarHint{color:#6b7280}
html[data-theme="dark"] .groupHeader{color:#c7cdda}
html[data-theme="dark"] .groupHeader:hover{background:#1b1e26}
html[data-theme="dark"] .groupName{color:#c7cdda}
html[data-theme="dark"] .groupCount{background:#1b1e26;color:#9aa4b2}
html[data-theme="dark"] .navBtn{color:#dfe3ea}
html[data-theme="dark"] .navBtn:hover,html[data-theme="dark"] .navBtn:focus-visible{background:#1b1e26}
html[data-theme="dark"] .navBtn.active{background:#0f3d2c;color:#6ee7b7}
html[data-theme="dark"] .ico{background:#1b2432;color:#60a5fa}
html[data-theme="dark"] .navBtn.active .ico{background:#0f3d2c;color:#6ee7b7}
html[data-theme="dark"] .navBranchRow .branchOnly{background:#171a21;color:#c7cdda}
html[data-theme="dark"] .navBranchRow .branchOnly:hover{background:#1b1e26}
html[data-theme="dark"] .navBranchRow .branchOnly .ico{background:#1b1e26;color:#9aa4b2}
html[data-theme="dark"] .navBranchRow .branchOnly .navText b{color:#c7cdda}
html[data-theme="dark"] .top{background:rgba(15,17,21,.92);border-color:#242832}
html[data-theme="dark"] .crumb span{color:#8b93a3}
html[data-theme="dark"] .pill{background:#171a21;border-color:#2a2f3a;color:#dfe3ea}
html[data-theme="dark"] .ghost{background:#171a21;border-color:#2a2f3a;color:#dfe3ea}
html[data-theme="dark"] .ghost:hover{filter:brightness(1.15)}
html[data-theme="dark"] .themeToggle{background:#171a21;border-color:#2a2f3a;color:#dfe3ea}
html[data-theme="dark"] .actions #langSelect{background-color:#171a21;color:#dfe3ea;border-color:#2a2f3a}
html[data-theme="dark"] .frameWrap{background:transparent}
html[data-theme="dark"] .panel{background:#0f1115;border-color:#242832;box-shadow:none}
html[data-theme="dark"] .panel iframe{filter:invert(.94) hue-rotate(180deg)}
html[data-theme="dark"] .nav::-webkit-scrollbar-thumb{background:#2a2f3a}
html[data-theme="dark"] .navEmpty{background:#171a21;border-color:#2a2f3a;color:#8b93a3}
html[data-theme="dark"] .loginNotice{background:#241d0e;color:#fde68a;border-color:#4b3a12}
html[data-theme="dark"] .sideResizeHandle:hover{background:rgba(96,165,250,.2)}
