/* 통합안전보건시스템 - 공통 스타일 (모든 업무 모듈이 재사용) */
:root{
  --white:#FFFFFF; --gray:#B1B1B1; --black:#000000; --mint:#41A8AB; --red:#FF4B19;
  --bg:#FFFFFF; --surface:#FFFFFF; --surface-2:#F4F5F5;
  --line:#DADCDC; --line-strong:#B1B1B1;
  --ink:#000000; --ink-2:#565656;
  --mint-ink:#1F6D6F; --mint-tint:#EAF4F4;
  --red-ink:#C2380F; --red-tint:#FDEDE8;
  --radius:8px; --btn-h:52px; --field-h:50px;
  /* 2026-10-05: Apple-inspired 공통 디자인 토큰(awesome-design-md/apple 참고) — 머리글(css/gnb.css)·통합 홈(css/home-apple.css)이 함께 쓴다.
     강조색은 파랑 하나(--ap-blue), 글자는 --ap-ink, 바탕 교대는 흰색 ↔ --ap-parch. 모서리: 유틸 8 · 카드 18 · 알약 999. */
  --ap-blue:#0066cc; --ap-blue-focus:#0071e3; --ap-blue-dark:#2997ff;
  --ap-ink:#1d1d1f; --ap-ink-80:#333333; --ap-ink-60:#6e6e73;
  --ap-parch:#f5f5f7; --ap-hair:#d2d2d7; --ap-hair-soft:rgba(0,0,0,.08); --ap-divider:#f0f0f0;
  --ap-tile:#272729; --ap-chip:rgba(210,210,215,.64);
  --ap-r-sm:8px; --ap-r-md:12px; --ap-r-lg:18px; --ap-r-xl:22px; --ap-pill:999px;
  /* 공통 본문 폭 — 머리글 안쪽 · 주 메뉴 · 배너 · 공지/일정 · 무재해 · 업무 아이콘이 같은 세로선에 맞는다 */
  --content-max:1200px; --content-pad:24px;
  --ap-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","Apple SD Gothic Neo","Malgun Gothic","맑은 고딕",system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);color:var(--ink);
  font-family:"Malgun Gothic","맑은 고딕",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  font-size:16px;line-height:1.5;-webkit-text-size-adjust:100%;}
[hidden]{display:none !important;}

/* ── 상단 바 (공통) ── */
#appHeader{position:sticky;top:0;z-index:20;background:var(--white);border-bottom:1px solid var(--line);
  padding:8px 14px;padding-top:calc(8px + env(safe-area-inset-top));}
.hd-row1{display:flex;align-items:center;gap:8px;}
.hd-row2{display:flex;align-items:center;gap:8px;margin-top:7px;padding-top:7px;border-top:1px solid var(--line);}
@media (max-width:640px){ :root{--content-pad:16px;} }
/* 회사 로고: 가로형 워드마크. 헤더 높이가 커지지 않게 높이 고정 + 원본 비율 유지(width:auto). */
.hd-logo{height:22px;max-height:22px;width:auto;max-width:132px;object-fit:contain;display:block;flex:0 0 auto;}
/* 2026-10-05: 두 회사 로고 DaehanSteel | YKSteel — 같은 높이(동등), 원본 비율 그대로(width:auto). 직원 머리글(검정)에서는 css/gnb.css 가 흰색으로 */
.hd-logos{display:inline-flex;align-items:center;gap:9px;flex:0 0 auto;color:var(--ink);}
.hd-lg{display:block;height:15px;width:auto;flex:0 0 auto;}
.hd-lg-sep{display:block;flex:0 0 auto;width:1px;height:16px;background:currentColor;opacity:.35;}
.hd-word{font-weight:800;font-size:16px;letter-spacing:.3px;color:var(--ink);white-space:nowrap;flex:0 0 auto;}
.hd-sys{font-weight:800;font-size:15px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.hd-spacer{flex:1 1 auto;}
.hd-mode{font-size:13px;font-weight:700;color:var(--mint-ink);white-space:nowrap;}
.hd-crumb{font-size:13px;color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.hd-crumb .cbtn{background:none;border:0;color:var(--mint-ink);font:inherit;font-weight:700;cursor:pointer;padding:0;}
.hd-crumb .csep{margin:0 5px;color:var(--gray);}
.hd-crumb .ccur{font-weight:700;color:var(--ink);}
@media(max-width:560px){ .hd-sys{font-size:14px;} .hd-logo{max-width:108px;} }
/* 좁은 화면: 헤더가 넘치지 않게 모드 글자는 숨기고(모드 변경 버튼은 유지, 홈에는 '현재 모드' 줄이 따로 있음) */
@media(max-width:480px){ .hd-mode{display:none;} .hd-sys{font-size:13px;} }

/* 통합 홈: 현재 모드 표시 줄 */
.home-mode{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 14px;margin-bottom:12px;font-size:14px;}
.home-mode b{color:var(--mint-ink);}

/* ── 레이아웃 (공통) ── */
#app{max-width:960px;margin:0 auto;padding:14px;padding-bottom:calc(92px + env(safe-area-inset-bottom));}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:12px;}
.panel>h2{margin:0 0 10px;font-size:15px;font-weight:800;}
.muted{color:var(--ink-2);}
.small{font-size:12.5px;}
.empty{color:var(--ink-2);text-align:center;padding:16px 8px;}
.empty.small{padding:8px;}
.row-between{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.row-between>h2{min-width:0;}

/* ── 버튼 (공통) ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid transparent;
  border-radius:var(--radius);font-size:16px;font-weight:700;min-height:var(--btn-h);padding:10px 16px;
  cursor:pointer;font-family:inherit;background:var(--surface-2);color:var(--ink);}
.btn-block{width:100%;margin-top:10px;}
.btn-block:first-of-type{margin-top:0;}
.btn-sm{min-height:38px;font-size:13px;padding:6px 12px;white-space:nowrap;flex:0 0 auto;}
.btn-primary{background:var(--mint);color:var(--black);border-color:var(--mint);}
.btn-primary:active{background:#379093;}
.btn-secondary,.btn-ghost{background:var(--white);color:var(--ink);border-color:var(--line-strong);}
.btn-danger{background:var(--white);color:var(--red-ink);border:1.5px solid var(--red);}
.btn:disabled{background:var(--surface-2);color:var(--gray);border-color:var(--line);cursor:not-allowed;}

/* ── 통합 홈 ── */
.home-lead{font-size:15px;font-weight:700;margin:2px 0 12px;}
.home-grid{display:grid;grid-template-columns:1fr;gap:12px;}
@media(min-width:640px){.home-grid{grid-template-columns:1fr 1fr;}}
.mcard{display:flex;flex-direction:column;gap:6px;text-align:left;
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);
  padding:16px;min-height:104px;cursor:pointer;font-family:inherit;}
.mcard[disabled]{cursor:default;background:var(--surface-2);border-color:var(--line);}
.mcard .mc-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.mcard .mc-name{font-size:17px;font-weight:800;color:var(--ink);}
.mcard .mc-desc{font-size:13.5px;color:var(--ink-2);}
/* 2026-09-25: 업무 아이콘 — [원형 아이콘] 업무명/설명. 카드 크기·간격은 그대로, 아이콘 고정폭 48px */
.mcard.has-ico{flex-direction:row;align-items:center;gap:14px;transition:border-color .15s,background-color .15s;}
.mcard .mc-ico{flex:0 0 48px;width:48px;height:48px;border-radius:50%;background:#e6f4f5;display:flex;align-items:center;justify-content:center;transition:background-color .15s;}
.mcard .mc-ico svg{width:30px;height:30px;display:block;}
.mcard .mc-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:6px;}
@media (hover:hover){.mcard.has-ico:hover{border-color:var(--mint);background:#fbfefe;} .mcard.has-ico:hover .mc-ico{background:#d4eeef;}}
.mcard.has-ico:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
@media (max-width:420px){.mcard.has-ico{gap:12px;} .mcard .mc-ico{flex-basis:44px;width:44px;height:44px;} .mcard .mc-ico svg{width:28px;height:28px;}}
.mc-state{font-size:12px;font-weight:800;padding:3px 9px;border-radius:4px;border:1px solid;}
.mc-state.soon{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.home-admin{margin-top:14px;}
.home-note{text-align:center;font-size:12px;color:var(--ink-2);margin-top:16px;}

/* ── 안전다짐 보기 (2026-10-02, js/safety-pledge.js) ──
   맨 위 '현재 모드' 줄 오른쪽의 아주 작은 버튼 하나 + 누르면 열리는 안전보건경영방침 이미지 팝업. 메뉴카드·배너·헤더는 건드리지 않는다.
   줄 높이는 로그아웃 버튼(38px)이 정하므로 작은 버튼(26px)을 넣어도 달라지지 않는다 → 아래 모든 것이 그대로. */
.home-mode-act{display:inline-flex;align-items:center;gap:8px;flex:0 0 auto;}
.home-mode{flex-wrap:nowrap;}                                                   /* 버튼이 늘어도 줄이 꺾이지 않게(줄 높이가 달라지면 아래 전체가 밀린다) */
.home-mode>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* 좁은 휴대폰: '안전스태프'·'지도위원'처럼 긴 역할 이름에서도 한 줄에 들어가도록 — '현재 ' 글자와 버튼 아이콘을 줄인다(320~430px 에서 5가지 역할 모두 측정) */
@media (max-width:430px){
  .home-mode{gap:8px;}
  .home-mode .hm-pre{display:none;}
  .home-mode-act{gap:6px;}
  .home-mode-act .pledge-btn{padding:3px 9px;font-size:12px;}
  .home-mode-act .pledge-btn svg{display:none;}
}
.pledge-btn{position:relative;display:inline-flex;align-items:center;gap:5px;flex:0 0 auto;margin:0;
  min-height:26px;padding:3px 10px;border:1px solid var(--mint);border-radius:999px;background:transparent;color:var(--mint-ink);
  font:inherit;font-size:12.5px;font-weight:700;line-height:1.2;white-space:nowrap;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.pledge-btn svg{flex:0 0 14px;width:14px;height:14px;display:block;}
.pledge-btn::after{content:"";position:absolute;inset:-9px -6px;}      /* 눈에 보이는 크기는 작게, 누를 수 있는 영역은 44px 가까이 */
@media (hover:hover){ .pledge-btn:hover{background:var(--mint-tint);} }
.pledge-btn:active{background:var(--mint-tint);}
.pledge-btn:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
/* 팝업: 공통 .modal-wrap/.modal(.modal-tall) 그대로 — 폭만 넓게. 제목줄 고정, 이미지 영역만 스크롤 */
.modal.pledge-modal{max-width:1400px;}
.pledge-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:0 0 auto;padding:12px 12px 10px 18px;}
.pledge-title{margin:0;font-size:16px;font-weight:800;}
.pledge-x{flex:0 0 auto;width:40px;height:40px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--white);color:var(--ink);font-size:17px;font-weight:800;line-height:1;cursor:pointer;font-family:inherit;}
.pledge-x:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
@media (hover:hover){ .pledge-x:hover{background:var(--mint-tint);} }
.pledge-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 14px 14px;}
.pledge-fig{position:relative;margin:0;border-radius:8px;overflow:hidden;background:#f5f5f7;aspect-ratio:2800/800;}   /* 이미지가 오기 전에도 자리를 잡아 화면이 출렁이지 않게(원본 비율) */
.pledge-img{display:block;width:100%;height:auto;object-fit:contain;}
.pledge-fig.is-loading::after{content:"불러오는 중…";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#6e6e73;font-size:13px;}
.pledge-err{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:#1d1d1f;font-size:14px;font-weight:600;text-align:center;padding:8px;}
.pledge-err[hidden]{display:none;}
.pledge-hint{display:none;margin:8px 2px 0;font-size:12.5px;color:var(--ink-2);text-align:center;}
@media (max-width:900px){ .pledge-hint{display:block;} .pledge-img{cursor:zoom-in;} .pledge-img:focus-visible{outline:2px solid var(--mint);outline-offset:-2px;} }
.pledge-hint-rot{display:none;}
@media (max-width:700px) and (orientation:portrait){ .pledge-hint-rot{display:inline;} }   /* 세로 휴대폰: 확대보기가 가로로 돌려 보여 주므로 폰을 옆으로 돌리면 바로 읽힌다 */
@media (max-width:480px){ .pledge-head{padding:10px 8px 8px 14px;} .pledge-body{padding:0 8px 10px;} }
/* 확대보기(.photo-view)에서 가로로 긴 그림(opts.landscape): 세로 휴대폰 화면에서는 가로로 돌려 화면 높이만큼 크게 — 폰을 옆으로 돌려 보면 글자가 2배 넘게 커진다 */
@media (max-width:700px) and (orientation:portrait){
  .photo-view.pv-landscape .pv-wrap{position:absolute;left:50%;top:50%;max-width:none;max-height:none;width:calc(100vh - 24px);transform:translate(-50%,-50%) rotate(90deg);}
  .photo-view.pv-landscape .pv-wrap img{width:100%;max-width:none;max-height:none;height:auto;}
}
@supports (height:100dvh){ @media (max-width:700px) and (orientation:portrait){ .photo-view.pv-landscape .pv-wrap{width:calc(100dvh - 24px);} } }

/* ── SF1054 소셜 기능 (2026-10-02) — ① 프로필 사진 크게 보기 ② 반응한 사람 목록 ── */
.avatar-btn{position:relative;display:inline-flex;flex:0 0 auto;margin:0;padding:0;border:0;border-radius:50%;background:none;cursor:zoom-in;font:inherit;-webkit-tap-highlight-color:transparent;}
.avatar-btn::after{content:"";position:absolute;inset:-4px;}                 /* 눈에 보이는 크기는 그대로, 누를 수 있는 영역만 조금 넓힘 */
.avatar-btn:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.sf-cmt>.avatar-btn{align-self:flex-start;}                                   /* 댓글 줄은 stretch 정렬 — 버튼이 댓글 높이만큼 늘어나지 않게 사진 크기 그대로 */
.avatar-btn:active .avatar{opacity:.85;}
@media (hover:hover){ .avatar-btn:hover .avatar{box-shadow:0 0 0 2px var(--mint);} }
/* 큰 사진(.photo-view.pv-profile): 정사각 프로필 사진을 화면에 맞춰 크게 + 아래에 이름·소속 */
.photo-view.pv-profile .pv-wrap img{width:min(86vw,70vh,560px);height:auto;max-width:none;max-height:none;border-radius:16px;box-shadow:0 8px 30px rgba(0,0,0,.45);}
.pv-cap{position:absolute;left:12px;right:12px;bottom:calc(20px + env(safe-area-inset-bottom));text-align:center;color:#fff;font-size:15px;font-weight:700;line-height:1.4;text-shadow:0 1px 3px rgba(0,0,0,.6);pointer-events:none;}
/* 반응 요약 줄: 반응 버튼 줄 아래에 "좋아요 12명 · 굿캐치 3 ›" — 반응이 있을 때만 */
.sf-likes{order:2;flex:0 0 100%;display:flex;align-items:center;gap:6px;min-height:38px;margin-top:2px;padding:4px 10px;border:0;border-radius:8px;background:none;font:inherit;font-size:13px;color:var(--ink-2);text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.sf-likes .sum{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;}   /* 320px 에서 반응 종류가 많아도 › 표시는 남기고 글자만 줄임표로 */
.sf-likes b{color:var(--ink);font-weight:800;} .sf-likes i{font-style:normal;color:var(--line-strong);margin:0 6px;}
.sf-likes .chev{flex:0 0 auto;margin-left:auto;font-size:19px;line-height:1;color:var(--ink-2);}
@media (hover:hover){ .sf-likes:hover{background:var(--mint-tint);} }
.sf-likes:active{background:var(--mint-tint);}
.sf-likes:focus-visible{outline:2px solid var(--mint);outline-offset:-2px;}
/* 반응한 사람 모달: 공통 .modal.modal-tall — 제목줄·탭 고정, 목록만 스크롤 */
.modal.rx-modal{max-width:460px;}
.rx-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex:0 0 auto;padding:12px 12px 8px 18px;}
.rx-title{margin:0;font-size:16px;font-weight:800;}
.rx-x{flex:0 0 auto;width:40px;height:40px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--white);color:var(--ink);font-size:17px;font-weight:800;line-height:1;cursor:pointer;font-family:inherit;}
.rx-x:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.rx-tabs{display:flex;gap:6px;flex:0 0 auto;padding:4px 14px 8px;overflow-x:auto;}   /* 위 여백 4px — overflow 가 포커스 테두리 윗줄을 자르지 않게 */
.rx-tabs[hidden]{display:none;}
.rx-tab{flex:0 0 auto;min-height:36px;padding:4px 12px;border:1px solid var(--line-strong);border-radius:999px;background:var(--white);color:var(--ink);font:inherit;font-size:13px;font-weight:700;white-space:nowrap;cursor:pointer;}
.rx-tab.on{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.rx-tab:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.rx-list{flex:1 1 auto;min-height:0;list-style:none;margin:0;padding:0 14px 12px;overflow-y:auto;overscroll-behavior:contain;}
.rx-row{display:flex;align-items:center;gap:12px;padding:8px 0;border-bottom:1px solid var(--line);}
.rx-row:last-child{border-bottom:0;}
.rx-who{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;line-height:1.3;}
.rx-who b{font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rx-who span{font-size:12.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rx-me{display:inline-block;margin-left:4px;padding:0 6px;border-radius:999px;background:var(--mint-tint);color:var(--mint-ink);font-size:11px;font-style:normal;font-weight:800;vertical-align:1px;}
.rx-row time{flex:0 0 auto;font-size:12px;color:var(--ink-2);}
.rx-state{padding:30px 8px;text-align:center;color:var(--ink-2);}
@media (max-width:480px){ .rx-head{padding:10px 8px 8px 14px;} .rx-tabs{padding:4px 10px 8px;} .rx-list{padding:0 10px 10px;} }
.coming{max-width:460px;margin:24px auto;text-align:center;}
.coming h2{font-size:17px;font-weight:800;margin:0 0 8px;}
.coming p{color:var(--ink-2);}

/* ── 통합 홈: 영상 배너 (낮고 넓은 배경 루프 영상 + 전체 영상 보기)
   경로·문구·높이·표시 위치 값은 js/core.js 상단 VIDEO_BANNER_CONFIG 한 곳에서만 관리한다. ── */
.video-banner{position:relative;overflow:hidden;border-radius:var(--radius);
  background:#0b0c0d;margin-bottom:14px;height:180px;}
@media(min-width:641px){.video-banner{height:210px;}}
@media(min-width:1024px){.video-banner{height:230px;}}
.vb-media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  object-position:var(--vb-pos,50% 30%);display:block;border:0;}
@media(max-width:640px){.vb-media{--vb-pos:50% 40%;}}
.vb-scrim{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(90deg, rgba(0,0,0,.64) 0%, rgba(0,0,0,.42) 42%, rgba(0,0,0,.16) 72%, rgba(0,0,0,.04) 100%);}
.vb-text{position:absolute;left:18px;right:112px;top:50%;transform:translateY(-50%);color:#fff;}
.vb-headline{font-size:19px;font-weight:800;line-height:1.3;margin:0;text-shadow:0 1px 4px rgba(0,0,0,.55);}
.vb-sub{font-size:13px;font-weight:600;margin:6px 0 0;color:rgba(255,255,255,.94);text-shadow:0 1px 4px rgba(0,0,0,.55);}
@media(max-width:640px){.vb-text{right:74px;} .vb-headline{font-size:15px;} .vb-sub{font-size:11.5px;margin-top:4px;}}
.vb-controls{position:absolute;right:10px;bottom:10px;display:flex;gap:6px;}
.vb-btn{min-height:32px;padding:5px 11px;font-size:12px;font-weight:700;border-radius:6px;
  background:rgba(255,255,255,.92);color:#111;border:1px solid rgba(255,255,255,.92);cursor:pointer;font-family:inherit;}
.vb-btn:active{background:#fff;}
.vb-btn.vb-ghost{background:rgba(0,0,0,.4);color:#fff;border-color:rgba(255,255,255,.6);}
.vb-btn:focus-visible,.vb-modal-close:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
@media(max-width:640px){.vb-btn{min-height:36px;padding:6px 10px;}}

/* 전체 영상 보기 모달 */
.vb-modal{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.86);
  display:flex;align-items:center;justify-content:center;padding:16px;
  padding-bottom:calc(16px + env(safe-area-inset-bottom));}
.vb-modal-inner{position:relative;width:100%;max-width:1040px;}
.vb-modal video{width:100%;max-height:80vh;display:block;background:#000;border-radius:6px;}
.vb-modal-close{position:absolute;top:8px;right:8px;min-height:34px;padding:5px 13px;z-index:2;
  background:rgba(0,0,0,.62);color:#fff;border:1px solid rgba(255,255,255,.75);border-radius:6px;
  font-weight:700;cursor:pointer;font-family:inherit;}

/* ── 통합 홈: 무재해 현황 대시보드 ──
   흰색·중성색 중심, 강조색은 YK Mint(--mint). Daehan Red(--red)는 오류/주의에만. */
.nacc{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:14px;}
.nacc-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;margin-bottom:12px;}
.nacc-head h2{margin:0;font-size:15px;font-weight:800;}
.nacc-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
.nacc-today{font-size:12.5px;color:var(--ink-2);white-space:nowrap;}
.nacc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;}
@media(max-width:900px){.nacc-grid{grid-template-columns:repeat(2,1fr);}}
@media(max-width:430px){.nacc-grid{grid-template-columns:1fr;}}
.nacc-card{border:1px solid var(--line);border-radius:6px;padding:12px;background:var(--surface);
  display:flex;flex-direction:column;min-width:0;}
.nacc-name{font-size:13px;font-weight:800;color:var(--ink);}
.nacc-label{font-size:11.5px;color:var(--ink-2);margin-top:8px;}
.nacc-days{font-size:26px;font-weight:800;color:var(--mint-ink);line-height:1.12;white-space:nowrap;margin-top:1px;}
.nacc-days .u{font-size:13px;font-weight:700;color:var(--ink-2);margin-left:3px;}
.nacc-meta{margin-top:9px;display:flex;flex-direction:column;gap:2px;font-size:11.5px;color:var(--ink-2);}
.nacc-meta b{color:var(--ink);font-weight:700;}
.nacc-mult{margin-top:8px;font-size:12px;font-weight:700;color:var(--ink);}
.nacc-mult .sub{color:var(--ink-2);font-weight:400;}
.nacc-bar{margin-top:6px;height:6px;border-radius:3px;background:var(--surface-2);overflow:hidden;}
.nacc-bar>span{display:block;height:100%;background:var(--mint);border-radius:3px;}
.nacc-bar-pct{font-size:10.5px;color:var(--ink-2);margin-top:3px;text-align:right;}
.nacc-err{color:var(--red-ink);font-size:12px;font-weight:700;margin-top:6px;}
.nacc-foot{font-size:10.5px;color:var(--ink-2);margin:10px 0 0;}
.nacc-skel{padding:14px;text-align:center;color:var(--ink-2);font-size:13px;}

/* 무재해 현황 관리(관리자 전용) 모달 */
.nacc-modal .modal{max-width:560px;}
/* 2026-09-28: 카드가 modal-tall(본문만 스크롤)이 되어 본문 72vh 제한을 없앤다 — 제한을 두면 공통 카드 스크롤과 겹쳐 이중 스크롤이 된다 */
.nacc-modal .modal-body{white-space:normal;text-align:left;}
.nacc-adm-list{display:flex;flex-direction:column;gap:8px;margin:10px 0 12px;}
.nacc-adm-row{border:1px solid var(--line);border-radius:6px;padding:10px;display:flex;flex-direction:column;gap:8px;}
.nacc-adm-info{display:flex;flex-direction:column;gap:2px;}
.nacc-adm-info b{font-size:13.5px;}
.nacc-adm-info span{font-size:11.5px;color:var(--ink-2);}
.nacc-adm-act{display:flex;gap:6px;flex-wrap:wrap;}
.nacc-adm-h{font-size:14px;font-weight:800;margin:10px 0;}
.nacc-hist{display:flex;flex-direction:column;gap:8px;}
.nacc-hist-row{border:1px solid var(--line);border-radius:6px;padding:10px;}
.nacc-hist-t{font-size:12.5px;font-weight:800;}
.nacc-hist-d{font-size:11.5px;color:var(--ink);margin-top:4px;line-height:1.5;}
.nacc-hist-m{font-size:10.5px;color:var(--ink-2);margin-top:5px;}

/* ── 안전점검 모듈 스타일 ── */
.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:12px;}
@media(min-width:620px){.stats{grid-template-columns:repeat(4,1fr);}}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px;text-align:center;}
.stat .n{font-size:28px;font-weight:800;line-height:1.1;}
.stat .t{font-size:13px;margin-top:3px;font-weight:700;color:var(--ink-2);}
.stat.todo{border-color:var(--red);} .stat.todo .n{color:var(--red-ink);}
.stat.prog{border-color:var(--mint);} .stat.prog .n{color:var(--mint-ink);}
.stat.done .n{color:var(--ink);}

.chip{display:inline-block;padding:3px 9px;border-radius:4px;font-size:12.5px;font-weight:800;border:1px solid;}
.chip.todo{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.chip.prog{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.chip.done{background:var(--surface-2);color:var(--ink);border-color:var(--line-strong);}
.fac-badge{display:inline-block;padding:3px 9px;border-radius:4px;background:var(--surface-2);
  color:var(--ink);font-weight:700;font-size:12.5px;border:1px solid var(--line);}
.over-badge{display:inline-block;padding:3px 9px;border-radius:4px;background:var(--red);color:var(--black);font-weight:800;font-size:12px;}
.tag-review{display:inline-block;padding:3px 9px;border-radius:4px;background:var(--mint-tint);
  color:var(--mint-ink);border:1px solid var(--mint);font-weight:800;font-size:12px;}
/* 2026-09-27: 개선제안 등록예정(점선)·개선제안 등록완료 표시 */
.chip.plan{background:var(--white);color:var(--mint-ink);border-color:var(--mint-ink);border-style:dashed;}
.chip.linked{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
/* 2026-09-27: 안전점검 통합 목록 — 공장 → 대분류 → 공정 → 조치상태 Block 필터. 한 줄(라벨 + 버튼 자동 줄바꿈)로 낮게 유지해
   목록이 화면 아래로 밀리지 않게 한다. 선택값은 청록색(버튼 aria-pressed 로도 전달). */
.fblk{display:flex;align-items:flex-start;gap:8px;margin:0 0 8px;}
.fblk-l{flex:0 0 96px;font-size:12.5px;font-weight:800;color:var(--ink-2);padding-top:8px;white-space:nowrap;}
/* 2026-09-27: 소안전분석회의(고정 그룹) 줄 — 같은 버튼 모양, 좁은 화면에서만 라벨이 '소안전/분석회의' 두 줄 */
.fblk-grp .fblk-l{white-space:normal;word-break:keep-all;line-height:1.25;}
.fblk-b{display:flex;flex-wrap:wrap;gap:6px;flex:1 1 auto;min-width:0;}
.fbtn{border:1px solid var(--line-strong);background:var(--white);color:var(--ink);border-radius:999px;padding:5px 12px;min-height:34px;
  font:inherit;font-size:13.5px;font-weight:700;line-height:1.2;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.fbtn .n{margin-left:4px;font-weight:800;}
.fbtn.st-todo .n{color:var(--red-ink);} .fbtn.st-prog .n{color:var(--mint-ink);}
.fbtn.on{background:var(--mint);border-color:var(--mint);color:var(--black);}
.fbtn.on .n{color:var(--black);}
.fbtn:focus-visible{outline:2px solid var(--mint-ink);outline-offset:2px;}
.fblk-note{font-size:12.5px;color:var(--ink-2);padding-top:8px;}
/* 2026-09-29: 안전점검 검색칸·하단 줄은 css/insp.css(.ins-search / .ins-filter-foot)로 옮김 */
.insp-filters{padding:12px 12px 8px;}
@media(max-width:480px){ .fblk-l{flex-basis:46px;font-size:12px;} .fblk-grp .fblk-l{padding-top:3px;font-size:11px;} .fbtn{padding:4px 10px;font-size:13px;min-height:32px;} }
.insp-follow{display:flex;flex-direction:column;gap:8px;}
.insp-follow .btn{width:100%;}
/* 2026-09-27: 안전점검 상세 — 관리자 전용 개선 후 사진 등록·추가·촬영 버튼 줄 */
.insp-ap{margin:2px 0 8px;}
.insp-ap-btns{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap;}
.insp-ap .err{color:var(--red-ink);font-weight:700;}
.insp-plan-box{border:1px dashed var(--mint-ink);border-radius:var(--radius);padding:10px 12px;background:var(--white);}
.insp-plan-box .kv{margin:2px 0;}

.field{margin-bottom:12px;}
.field>label{display:block;font-weight:700;font-size:13.5px;margin-bottom:5px;}
/* 2026-09-25 근본수정: 아래 '입력창' 규칙은 원래 `.field input` 이라 .field 안의 체크박스·라디오까지
   width:100%·min-height:50px·padding:11px 를 받아 거대한 사각형이 되고, 옆 글자가 남은 폭(수 px)으로
   밀려 한 글자씩 세로로 줄바꿈되었음(개선제안·진단개선·작업허가서·TBM·SF1054 가 각자 따로 덮어쓰던 원인).
   → 체크박스·라디오를 이 규칙 대상에서 제외. :where() 는 명시성이 0 이라 기존 규칙의 명시성(클래스1+요소1)이
   그대로 유지되어, 모듈별로 입력창을 덮어쓰던 규칙(.sf-taginput input 등)의 우선순위가 바뀌지 않는다.
   select/textarea 는 :where 미지원 구형 브라우저에서도 안전하도록 별도 규칙으로 둔다. */
.field input:where(:not([type="checkbox"]):not([type="radio"])){width:100%;font-size:16px;min-height:var(--field-h);padding:11px;
  border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--white);color:var(--ink);font-family:inherit;}
.field select,.field textarea{width:100%;font-size:16px;min-height:var(--field-h);padding:11px;
  border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--white);color:var(--ink);font-family:inherit;}
.field textarea{min-height:92px;resize:vertical;}
.field input:where(:not([type="checkbox"]):not([type="radio"])):focus,.field select:focus,.field textarea:focus{outline:2px solid var(--mint);outline-offset:0;border-color:var(--mint);}
/* 체크박스·라디오 공통 기본값(명시성 0 — 모듈별 .opt/.wp-opt/.tbm-check/.sf-check 등 기존 규칙이 항상 우선).
   네이티브 모양 그대로, 시각 크기만 18px 로 통일. 포커스 표시는 지우지 않는다. */
:where(input[type="checkbox"],input[type="radio"]){width:18px;height:18px;flex:0 0 auto;vertical-align:middle;accent-color:var(--mint);cursor:pointer;}
:where(input[type="checkbox"],input[type="radio"]):focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
:where(input[type="checkbox"],input[type="radio"]):disabled{cursor:not-allowed;}
/* ---- 선택형 컨트롤(체크박스/라디오) — 개선제안·진단개선에서 시작, 정기위험성평가 대상범위도 재사용 ----
   (2026-09-25: 아래 '문제였던 부분'의 근본원인은 위 .field input 규칙에서 제거됨. 이 컴포넌트는
    '표시 20px + 라벨 전체가 터치영역'인 공통 선택행으로 계속 사용한다.)
   문제였던 부분: 위 .field input{width:100%;min-height:var(--field-h);padding:11px;...} 이
   .field 안의 체크박스·라디오에도 그대로 적용되어 선택표시가 거대해지고 가운데로 밀리며
   설명 글자와 다른 줄로 떨어졌음. 작업허가서 화면에서 이미 쓰던 .wp-opt와 동일한 기법으로
   분리한다 — 선택 표시는 20px 고정(네이티브 렌더링), 라벨 전체(표시+설명)를 하나의 클릭/터치
   영역으로 묶는다. 텍스트 입력창·드롭다운 크기는 전혀 건드리지 않는다. */
.opt-row{display:flex;flex-wrap:wrap;gap:2px 20px;}
/* .field>label{display:block} (위) 과 명시성이 같으므로(클래스1+요소1), 반드시 label.opt 처럼
   요소를 함께 지정해 소스 순서(이 규칙이 더 뒤)로 이겨야 한다 — .opt 단독이면 .opt 가 .field의
   직계 자식일 때 위 규칙에 밀려 display:block 이 되어버린다(실제 발견된 원인). */
label.opt{display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 2px;
  font-size:15px;line-height:1.4;cursor:pointer;-webkit-tap-highlight-color:transparent;flex:0 1 auto;}
.opt>input[type="checkbox"],.opt>input[type="radio"]{
  appearance:auto;-webkit-appearance:auto;flex:0 0 auto;
  width:20px;height:20px;min-width:20px;min-height:20px;max-width:20px;max-height:20px;
  margin:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;accent-color:var(--mint);}
.opt>input:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.opt-t{flex:1 1 auto;min-width:0;word-break:keep-all;}
.filters .field{margin-bottom:10px;}
.pin-show{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink-2);margin:2px 0 12px;}
.pin-show input{margin:0;} /* 크기는 공통 체크박스 기본값(18px). 예전 width:auto 덮어쓰기는 근본원인 제거로 불필요 */

.radios{display:flex;gap:8px;flex-wrap:wrap;}
.radio{flex:1;min-width:92px;display:flex;align-items:center;justify-content:center;gap:6px;
  border:1px solid var(--line-strong);border-radius:var(--radius);padding:11px 8px;font-weight:700;background:var(--white);cursor:pointer;}
.radio input{margin:0;}
.radio.on.todo{background:var(--red-tint);border-color:var(--red);color:var(--red-ink);}
.radio.on.prog{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.radio.on.done{background:var(--surface-2);border-color:var(--line-strong);color:var(--ink);}

.thumbs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.thumb{position:relative;width:92px;height:92px;border-radius:6px;overflow:hidden;border:1px solid var(--line-strong);}
.thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.thumb-del{position:absolute;top:2px;right:2px;width:26px;height:26px;border:0;border-radius:5px;
  background:rgba(0,0,0,.62);color:#fff;font-size:13px;font-weight:800;cursor:pointer;}
.photo-grid{display:flex;gap:8px;flex-wrap:wrap;margin:4px 0 10px;}
.photo-cell{width:100px;height:100px;border-radius:6px;overflow:hidden;border:1px solid var(--line-strong);cursor:pointer;position:relative;}
.photo-cell.has-box{outline:2px solid #FF0000;outline-offset:-2px;}
.photo-cell img{width:100%;height:100%;object-fit:cover;display:block;}
.photo-cell .pdel{position:absolute;top:2px;right:2px;width:24px;height:24px;border:0;border-radius:5px;background:rgba(0,0,0,.62);color:#fff;font-weight:800;cursor:pointer;font-size:12px;}
/* 2026-10-05: 자율개선 수정 — 제거 예정 사진(저장할 때 반영 · ↺ 로 되돌리기), 새로 추가할 사진 묶음 */
/* 사진 순서 변경(2026-10-20) — 칸 위 '순서 i / n' · 칸 아래 [←][→]. 삭제(✕)는 사진 모서리에 그대로라 위치·모양이 다르다. 터치 화면은 버튼 높이 44px */
.photo-item{display:flex;flex-direction:column;gap:3px;align-items:stretch;}
.photo-order{font-size:12px;font-weight:700;text-align:center;color:var(--ink-3,#666);line-height:1.2;}
.photo-mv{display:flex;gap:4px;}
.pmv{flex:1 1 0;min-width:0;min-height:32px;padding:0;border:1px solid var(--line-strong);border-radius:6px;background:var(--surface,#fff);color:var(--ink,#111);font-size:16px;font-weight:800;line-height:1;cursor:pointer;}
.pmv:hover:not(:disabled){background:var(--surface-2,#f1f3f5);}
.pmv:disabled{opacity:.3;cursor:default;}
.pmv:focus-visible{outline:2px solid var(--primary,#1d5fd6);outline-offset:1px;}
@media (pointer:coarse),(max-width:768px){.pmv{min-height:44px;font-size:20px;}.photo-order{font-size:13px;}}
@media (pointer:coarse),(max-width:768px){.sg-fact .btn.sg-mv{min-height:44px;min-width:44px;font-size:16px;}}
.photo-cell.imp-ph-off img{opacity:.35;filter:grayscale(1);}
.photo-cell.imp-ph-off .pdel{background:var(--mint-ink);}
.imp-ph-offtag{position:absolute;left:0;right:0;bottom:0;padding:2px 0;background:rgba(194,56,15,.88);color:#fff;font-size:11.5px;font-weight:700;text-align:center;pointer-events:none;}
.imp-ph-new{margin:2px 0 4px;}
/* 2026-10-06: 진단개선/자율개선 개선 전/후 사진 비교 — PC는 나란히, 모바일은 위아래로(요청 9) */
.im-photo-compare{display:flex;gap:16px;flex-wrap:wrap;}
.im-photo-compare .im-photo-col{flex:1 1 260px;min-width:0;}

.list{display:flex;flex-direction:column;gap:10px;}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px;cursor:pointer;}
.card .c-top{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:6px;}
.card .c-find{font-weight:700;margin:3px 0;}
.card .c-meta{font-size:13px;color:var(--ink-2);}
.card .c-due.over{color:var(--red-ink);font-weight:800;}
.card .c-actions{margin-top:8px;cursor:default;display:flex;flex-wrap:wrap;gap:6px;}
.card .c-actions .btn{width:auto;max-width:100%;white-space:normal;}
/* 2026-09-29: 안전점검 목록 카드(PC 2열·모바일 1열)는 css/insp.css(.ins-list / .ins-card)로 옮김 — .list/.card 공통 규칙은 위 그대로 */

.kv{display:flex;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);}
.kv:last-child{border-bottom:0;}
.kv .k{flex:0 0 96px;color:var(--ink-2);font-weight:700;font-size:13.5px;}
.kv .v{flex:1;white-space:pre-wrap;word-break:break-word;}

/* 개선제안 · 비재무_노력 작성예시 — PC는 표처럼(라벨|값 2열), 모바일은 세로 카드로 접힌다
   (2026-10-04). .effort-ex는 <details>라 네이티브 펼침/접힘을 그대로 쓴다. */
.effort-ex{margin-top:8px;border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;background:var(--surface-2);}
.effort-ex>summary{cursor:pointer;font-weight:700;font-size:13.5px;color:var(--ink-2);}
.effort-examples{display:grid;grid-template-columns:112px 1fr;gap:6px 12px;margin-top:8px;}
.effort-examples .ex-k{font-weight:700;color:var(--ink-2);font-size:13.5px;}
.effort-examples .ex-v{font-size:13.5px;}
@media (max-width:480px){
  .effort-examples{grid-template-columns:1fr;gap:2px;}
  .effort-examples .ex-k{margin-top:8px;}
  .effort-examples .ex-k:first-child{margin-top:0;}
}

.pager{display:flex;align-items:center;gap:8px;justify-content:center;margin-top:10px;}

/* 진단개선 개선율 현황 — 요약 진행막대 */
.rate-row{display:flex;align-items:center;gap:8px;margin-top:4px;}
.rate-bar{flex:0 0 120px;height:8px;border-radius:4px;background:var(--surface-2);overflow:hidden;}
.rate-bar-fill{height:100%;background:var(--mint,#2fa889);}
.rate-text{font-size:12.5px;color:var(--ink-2);}
.detail-top{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px;}
.status-btns{display:flex;gap:8px;flex-wrap:wrap;}
.status-pick{flex:1;min-width:92px;border:1px solid var(--line-strong);background:var(--white);}
.status-pick.active.todo{background:var(--red-tint);border-color:var(--red);color:var(--red-ink);}
.status-pick.active.prog{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.status-pick.active.done{background:var(--surface-2);border-color:var(--line-strong);color:var(--ink);}

.banner{border-radius:var(--radius);padding:11px 12px;margin-bottom:12px;font-weight:700;font-size:14px;}
.banner.err{background:var(--red-tint);border:1px solid var(--red);color:var(--red-ink);}
.banner.ok{background:var(--mint-tint);border:1px solid var(--mint);color:var(--mint-ink);}
.banner.review{background:var(--mint-tint);border:1px solid var(--mint);color:var(--mint-ink);}

#bottomNav{position:fixed;left:0;right:0;bottom:0;z-index:30;display:flex;background:var(--white);
  border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);}
#bottomNav button{flex:1;border:0;background:none;border-top:2px solid transparent;padding:10px 4px;min-height:58px;
  display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:700;color:var(--ink-2);cursor:pointer;font-family:inherit;}
#bottomNav button.active{color:var(--mint-ink);border-top-color:var(--mint);font-weight:800;}

/* ── 접근/설정 화면 (공통) ── */
.gate{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;
  padding:34px 16px calc(34px + env(safe-area-inset-bottom));}
.gate-card{width:100%;max-width:380px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px;}
.gate .brand{display:flex;flex-direction:column;align-items:center;gap:6px;margin-bottom:14px;text-align:center;}
.gate .brand-logo{height:40px;width:auto;}
.gate .brand-word{font-weight:800;font-size:24px;letter-spacing:.5px;}
.gate .brand-sys{font-weight:800;font-size:16px;color:var(--ink);}
.gate-lead{text-align:center;font-size:15px;font-weight:700;margin:6px 0 14px;}
.gate-title{font-size:17px;font-weight:800;margin:4px 0 6px;}
.gate-desc{font-size:13.5px;color:var(--ink-2);margin:0 0 12px;}
.gate-note{text-align:center;font-size:12px;color:var(--ink-2);margin:14px 0 0;}
/* 2026-10-02 직원 로그인 form — 비밀번호 보기 버튼(44px 터치) · 사번 저장 · 로그인 상태 유지(작은 안내) */
.login-form{margin:0;}
.pw-wrap{position:relative;}
.gate .pw-wrap input,.modal.myinfo-modal .pw-wrap input{padding-right:52px;}
.pw-toggle{position:absolute;right:3px;top:50%;transform:translateY(-50%);width:44px;height:44px;display:flex;align-items:center;justify-content:center;
  border:0;border-radius:var(--radius);background:none;color:var(--ink-2);cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent;}
.pw-toggle:hover{color:var(--ink);background:var(--surface-2);}
.pw-toggle:focus-visible{outline:2px solid var(--mint);outline-offset:0;}
.pw-toggle[aria-pressed="true"]{color:var(--mint-ink);}
.login-opts{display:flex;flex-direction:column;gap:0;margin:-2px 0 6px;}
.login-opts label.opt{min-height:44px;padding:4px 2px;font-size:15px;}
.login-opts label.login-keep{align-items:flex-start;}
.login-opts label.login-keep>input{margin-top:2px;}
.login-hint{display:block;font-size:12.5px;font-weight:400;color:var(--ink-2);margin-top:1px;word-break:keep-all;}
.gate .banner.warn{font-weight:600;}
/* 내 정보 → 로그인된 기기 */
.sess-card{border:1px solid var(--line);border-radius:12px;padding:12px;margin:12px 0;}
.sess-list{display:flex;flex-direction:column;gap:8px;margin:8px 0;}
.sess-row{border:1px solid var(--line);border-radius:var(--radius);padding:9px 10px;background:var(--surface);}
.sess-main{display:flex;flex-wrap:wrap;align-items:center;gap:4px 6px;font-size:14.5px;}
.sess-main b{font-weight:800;}
.sess-meta{font-size:12.5px;color:var(--ink-2);margin-top:3px;word-break:keep-all;}
.sess-btns{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.sess-btns .btn{min-height:44px;}

/* 공통 모달(2026-09-28 근본수정) — 예전엔 .modal-wrap 이 align-items:center 로 카드를 가운데에만 두고 자신은 스크롤되지 않았고,
   .modal 에는 최대높이·overflow 가 없었다. 그래서 카드가 화면보다 길면 위·아래가 똑같이 화면 밖으로 넘쳐 위쪽은 영영 닿을 수 없고,
   휠은 뒤 페이지만 움직였다(직원 추가·내 정보 등에서 반복). 이제
   ① 카드는 화면(100dvh, 미지원이면 100vh) 안으로 최대높이를 두고 내용이 길면 카드 안에서 스크롤,
   ② margin:auto 로 가운데 정렬(auto 여백은 음수가 되지 않으므로 넘쳐도 위가 잘리지 않고 위에서 시작),
   ③ 바깥 wrap 도 스크롤 가능(안전망) — 뒤 페이지 스크롤 잠금은 core.js 가 모든 오버레이에 자동으로 건다.
   제목·버튼을 고정하고 본문만 스크롤하려면 .modal-tall 을 함께 쓴다. */
.modal-wrap{position:fixed;inset:0;z-index:50;background:rgba(0,0,0,.42);display:flex;align-items:center;justify-content:center;
  --modal-gap:16px;
  --modal-pt:max(var(--modal-gap), env(safe-area-inset-top, 0px));
  --modal-pb:max(var(--modal-gap), env(safe-area-inset-bottom, 0px));
  padding:var(--modal-pt) max(var(--modal-gap), env(safe-area-inset-right, 0px)) var(--modal-pb) max(var(--modal-gap), env(safe-area-inset-left, 0px));
  overflow-y:auto;overscroll-behavior:contain;}
.modal{background:var(--white);border-radius:var(--radius);max-width:420px;width:100%;padding:18px;border:1px solid var(--line);
  margin:auto;max-height:calc(100vh - var(--modal-pt, 16px) - var(--modal-pb, 16px));overflow-y:auto;overscroll-behavior:contain;}
@supports (height:100dvh){ .modal{max-height:calc(100dvh - var(--modal-pt, 16px) - var(--modal-pb, 16px));} }
/* Tab·키보드로 본문이 자동 스크롤될 때 입력칸이 제목·버튼줄 경계에 딱 붙지 않게(포커스 테두리까지 보이게) 약간 여유 */
.modal input,.modal select,.modal textarea{scroll-margin-block:12px;}
/* 휴대폰: 카드가 화면 폭을 거의 다 쓰게 여백을 8px 로(최대높이도 같은 여백 기준으로 따라 커진다) */
@media (max-width:480px){ .modal-wrap{--modal-gap:8px;} }
.modal-title{font-size:16px;font-weight:800;margin-bottom:8px;}
.modal-body{font-size:14px;line-height:1.55;white-space:pre-wrap;margin-bottom:14px;}
.modal-btns{display:flex;flex-direction:column;gap:8px;}
.modal-btns .btn{width:100%;}
/* 내용 길이가 가변적인(예: 목록에서 여러 항목을 고르는) 모달 전용 — 서명 모달과 같은 방식으로
   모달 카드 자체를 뷰포트 안에 가두고 본문만 스크롤되게 해, 버튼이 화면 밖으로 밀려나지 않게 한다. */
.modal.modal-tall{
  /* 최대높이는 공통 .modal 규칙(100dvh - 위아래 여백)을 그대로 쓴다 */
  display:flex;flex-direction:column;padding:0;overflow:hidden;
}
.modal.modal-tall .modal-title{padding:18px 18px 0;margin-bottom:8px;flex:0 0 auto;}
.modal.modal-tall .modal-body{padding:0 18px;margin-bottom:0;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
/* modal-tall 안에서 목록 하나만 남은 높이를 채워 스크롤해야 하는 모달(검색칸·안내는 고정) — 본문을 세로 flex 로 두고
   .modal-flex-fill 목록만 줄어들며 스크롤한다. 화면이 아주 낮아 최소높이도 안 되면 본문 전체가 스크롤된다. */
.modal.modal-tall.modal-flexlist .modal-body{display:flex;flex-direction:column;}
.modal.modal-tall.modal-flexlist .modal-body > *{flex:0 0 auto;}
.modal.modal-tall.modal-flexlist .modal-body > .modal-flex-fill{flex:1 1 auto;min-height:140px;max-height:none;overflow-y:auto;overscroll-behavior:contain;}
/* 가로모드 휴대폰처럼 아주 낮은 화면: 목록 자체 스크롤을 끄고 본문 하나만 스크롤(이중 스크롤 방지) */
@media (max-height:520px){
  .modal.modal-tall.modal-flexlist .modal-body{display:block;}
  .modal.modal-tall.modal-flexlist .modal-body > .modal-flex-fill{min-height:0;overflow:visible;}
}
/* 안전영역(홈 인디케이터)은 바깥 .modal-wrap 여백이 이미 비켜 주므로 버튼줄에는 다시 더하지 않는다(2026-09-28) */
.modal.modal-tall .modal-btns{margin:0;padding:12px 18px 14px;flex:0 0 auto;border-top:1px solid var(--line);background:var(--white);}
/* 입력항목이 많은 폼형 모달(예: 개선사례 추가/수정) 전용 — 세로로 좁아지지 않게 폭을 넓힌다.
   modal-tall 과 함께 써서 "제목(고정) · 본문(스크롤) · 버튼(고정)" 구조를 만든다. */
.modal.modal-wide{max-width:680px;}
.modal .modal-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;}
.modal .modal-close-x{background:none;border:none;font-size:20px;line-height:1;cursor:pointer;color:var(--ink-2);padding:2px 4px;flex:0 0 auto;}
.modal.modal-tall .modal-title-row{padding:18px 18px 0;margin-bottom:8px;flex:0 0 auto;}
.modal.modal-tall .modal-title-row .modal-title{padding:0;margin-bottom:0;}
/* modal-tall + 제목/닫기 줄을 함께 쓸 때는 title 자체의 기본 padding-top 이 중복되지 않게 없앤다 */
.modal.modal-tall.modal-has-titlerow > .modal-title{display:none;} /* 2026-09-25: 제목줄(.modal-title-row) 안의 제목은 보이게 — 예전 규칙이 제목줄 안 제목까지 숨기고 있었다 */
/* 내 정보(2026-09-27) — 예전엔 기본 .modal(최대높이·내부스크롤 없음)이라 100% 배율에서 카드가 화면보다 길어
   위아래가 잘리고, 휠은 뒤 페이지만 움직였다. modal-tall(제목 고정·본문 스크롤·버튼 하단 고정) + 뒤 스크롤 잠금(core.js)으로 고치고,
   여기서는 간격만 10~15% 줄인다(글자 크기·기능은 그대로). */
.modal.myinfo-modal{max-width:460px;}
.modal.myinfo-modal .modal-title{padding:14px 16px 0;margin-bottom:6px;}
.modal.myinfo-modal .modal-body{padding:0 16px 4px;white-space:normal;overscroll-behavior:contain;}
.modal.myinfo-modal .pf-row{gap:10px;margin-bottom:8px;padding-bottom:8px;}
.modal.myinfo-modal .field{margin-bottom:8px;}
.modal.myinfo-modal .field>label{margin-bottom:2px;font-size:13px;}
.modal.myinfo-modal .field input:where(:not([type="checkbox"]):not([type="radio"])){min-height:44px;padding:9px 11px;}
.modal.myinfo-modal .push-card{margin:10px 0 4px;padding:8px 10px;}
.modal.myinfo-modal .push-h{font-size:14px;}
.modal.myinfo-modal .push-card p{margin:2px 0;}
.modal.myinfo-modal .push-st{margin:4px 0;}
.modal.myinfo-modal .push-btns .btn{min-height:34px;padding:5px 10px;}
.modal.myinfo-modal .mi-pw-h{margin:12px 0 6px;font-size:15px;}
.modal.myinfo-modal .pin-show{margin:0 0 4px;}
.modal.myinfo-modal .modal-btns{flex-direction:row;padding:10px 16px 12px;}
.modal.myinfo-modal .modal-btns .btn{flex:1 1 0;width:auto;min-height:46px;}
/* 직원 관리 추가·수정·권한·공장/Family 팝업(2026-09-28) — modal-tall(제목 고정 · 본문 스크롤 · 버튼 하단 고정)과 함께 쓰고,
   입력칸·간격만 10~15% 줄인다(글자 크기·입력항목은 그대로). 폭은 PC 에서 기존(420px)보다 조금 넓게 둬 라벨이 줄바꿈되지 않게 한다. */
.modal.staff-modal{max-width:480px;}
.modal.staff-modal .modal-title{padding:14px 16px 0;margin-bottom:8px;}
.modal.staff-modal .modal-body{padding:2px 16px 6px;white-space:normal;}
.modal.staff-modal .field{margin-bottom:9px;}
.modal.staff-modal .field>label{margin-bottom:3px;font-size:13px;}
.modal.staff-modal .field input:where(:not([type="checkbox"]):not([type="radio"])),
.modal.staff-modal .field select{min-height:44px;padding:9px 11px;}
.modal.staff-modal .banner{margin-bottom:8px;padding:9px 11px;}
.modal.staff-modal .modal-body > p{margin:4px 0 2px;}
.modal.staff-modal .modal-btns{flex-direction:row;padding:10px 16px 12px;}
.modal.staff-modal .modal-btns .btn{flex:1 1 0;width:auto;min-width:0;min-height:46px;white-space:normal;line-height:1.25;}
.modal.staff-modal .modal-btns .btn-primary{flex-grow:1.6;}
.modal-hint{background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;
  font-size:12.5px;color:var(--ink-2);margin:4px 0 10px;line-height:1.5;}
.modal-photo-stage{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0;}
.modal-photo-stage-item{display:flex;align-items:center;gap:4px;background:var(--surface-2);border:1px solid var(--line);
  border-radius:14px;padding:3px 8px 3px 10px;font-size:12px;}
.modal-photo-stage-item button{background:none;border:none;cursor:pointer;color:var(--ink-2);font-size:13px;padding:0 2px;}

/* ── 사진 크게 보기 / 사각형 표시 (공통, 재사용 구성요소) ── */
.photo-view{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.9);display:flex;align-items:center;justify-content:center;padding:12px;}
.pv-wrap{position:relative;display:inline-block;max-width:100%;max-height:100%;line-height:0;}
.pv-wrap img{max-width:100%;max-height:calc(100vh - 24px);object-fit:contain;display:block;}
.pv-boxes{position:absolute;inset:0;pointer-events:none;}
.pv-toggle{position:absolute;left:10px;top:calc(10px + env(safe-area-inset-top));}
.photo-close{position:absolute;top:calc(10px + env(safe-area-inset-top));right:10px;width:42px;height:42px;border:0;border-radius:6px;background:rgba(255,255,255,.22);color:#fff;font-size:19px;font-weight:800;cursor:pointer;}

/* 2026-09-30: 확대보기에서 같은 구분의 여러 장 넘겨 보기(showPhoto opts.items 를 준 호출에만 생김) */
.pv-nav{position:absolute;top:50%;transform:translateY(-50%);width:48px;height:64px;border:0;border-radius:10px;background:rgba(255,255,255,.2);color:#fff;font-size:34px;line-height:1;font-weight:700;cursor:pointer;}
.pv-prev{left:10px;} .pv-next{right:10px;}
.photo-view.pv-gallery{touch-action:pan-y pinch-zoom;overscroll-behavior:contain;}   /* 2026-10-01: 좌우 쓸어넘기기는 JS 가 받고(브라우저 가로 스크롤 없음), 핀치 확대는 그대로 */
/* 2026-10-24 브라우저 확대 대응(core.js showPhoto 의 fit): JS 가 사진을 '연 순간 화면에 맞춘 CSS px 크기'로 고정(.pv-fit)하므로 브라우저를 확대하면 사진이 실제로 커진다.
   화면보다 커지면 확대보기 자체가 가로·세로로 스크롤된다(작을 때는 margin:auto 로 가운데). 닫기·넘기기·표시 단추·장수·설명은 스크롤돼도 화면에 고정. 돌려 보기(.pv-landscape)·프로필(.pv-profile)은 .pv-fit 이 붙지 않아 그대로. */
.photo-view.pv-fit{display:flex;align-items:flex-start;justify-content:flex-start;overflow:auto;overscroll-behavior:contain;scrollbar-color:rgba(255,255,255,.55) rgba(255,255,255,.08);}
.photo-view.pv-fit .pv-wrap{margin:auto;flex:0 0 auto;max-width:none;max-height:none;}
.photo-view.pv-fit .pv-wrap img{max-width:none;max-height:none;}
.photo-view.pv-fit .photo-close,.photo-view.pv-fit .pv-toggle,.photo-view.pv-fit .pv-nav,.photo-view.pv-fit .pv-count,.photo-view.pv-fit .pv-cap{position:fixed;}
.photo-view.pv-gallery.pv-zoomed{touch-action:auto;}                                /* 핀치로 확대한 동안에는 한 손가락 이동도 브라우저가(확대한 사진의 옆쪽을 보려고) */
.pv-err{display:block;min-width:220px;max-width:86vw;padding:44px 20px;color:#fff;font-size:15px;font-weight:600;line-height:1.5;text-align:center;}
.pv-err[hidden]{display:none;}
.pv-nav:hover{background:rgba(255,255,255,.32);}
.pv-nav.is-off,.pv-nav.is-off:hover{background:rgba(255,255,255,.1);color:rgba(255,255,255,.4);cursor:default;}   /* 2026-11-01: 첫 사진의 ‹ · 마지막 사진의 › */
.pv-nav:focus-visible,.photo-close:focus-visible,.pv-toggle:focus-visible{outline:2px solid #fff;outline-offset:2px;}
.pv-count{position:absolute;left:50%;bottom:calc(14px + env(safe-area-inset-bottom));transform:translateX(-50%);padding:5px 12px;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;font-size:13px;font-weight:700;line-height:1.4;white-space:nowrap;}
.pbox{position:absolute;border:2px solid #FF0000;box-sizing:border-box;pointer-events:none;box-shadow:0 0 0 1px rgba(255,255,255,.55);}
.pbox-count{position:absolute;left:2px;bottom:2px;background:#FF0000;color:#fff;font-size:10px;font-weight:800;padding:0 4px;border-radius:3px;}
.photo-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:2px 0 6px;}
.photo-actions .pa-name{font-size:12px;color:var(--ink-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

.anno-wrap{position:fixed;inset:0;z-index:80;background:#0c0c0c;display:flex;flex-direction:column;}
.anno-top{flex:0 0 auto;color:#fff;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));display:flex;flex-direction:column;gap:2px;border-bottom:1px solid #333;}
.anno-title{font-weight:800;font-size:15px;}
.anno-hint{font-size:12px;color:#bbb;}
.anno-stage{flex:1 1 auto;position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:0;}
.anno-img{max-width:100%;max-height:100%;display:block;user-select:none;-webkit-user-drag:none;}
.anno-layer{position:absolute;touch-action:none;cursor:crosshair;}
.anno-box{position:absolute;border:2px solid #FF0000;box-sizing:border-box;box-shadow:0 0 0 1px rgba(255,255,255,.55);}
.anno-box.sel{border-color:#FF0000;box-shadow:0 0 0 1px #fff,0 0 0 3px rgba(255,0,0,.35);}
.anno-box.draft{border-style:dashed;}
.anno-box .ah{position:absolute;width:20px;height:20px;margin:-11px 0 0 -11px;background:#fff;border:2px solid #FF0000;border-radius:3px;touch-action:none;}
.anno-box .ah[data-h="nw"]{left:0;top:0;} .anno-box .ah[data-h="ne"]{left:100%;top:0;}
.anno-box .ah[data-h="sw"]{left:0;top:100%;} .anno-box .ah[data-h="se"]{left:100%;top:100%;}
.anno-tools{flex:0 0 auto;display:flex;gap:6px;flex-wrap:wrap;justify-content:center;padding:10px;padding-bottom:calc(10px + env(safe-area-inset-bottom));background:#161616;border-top:1px solid #333;}
.anno-tools .btn{flex:1 1 auto;min-width:120px;}

#toast{position:fixed;left:50%;transform:translateX(-50%) translateY(20px);
  bottom:calc(80px + env(safe-area-inset-bottom));z-index:70;background:var(--black);color:var(--white);
  padding:11px 15px;border-radius:var(--radius);font-weight:700;font-size:14px;max-width:90vw;text-align:center;
  opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;}
#toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
#toast.toast-err{background:#7a1d0c;} #toast.toast-ok{background:#12595b;}

/* ===================== 안전작업허가서(work-permits) ===================== */
.wp-wrap{max-width:960px;margin:0 auto;padding:12px;}
.wp-loading{padding:28px 10px;text-align:center;color:var(--ink-2);}
.wp-topbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;flex-wrap:wrap;}
.wp-login .panel{max-width:460px;margin:24px auto;}
.wp-list{display:flex;flex-direction:column;gap:10px;}
/* 2026-10-02: 서버 페이지 단위 목록 — 건수 줄 · [더 보기] 칸 */
.wp-list-count{margin:8px 2px 6px;}
.wp-more{margin-top:12px;}
.wp-more .banner{margin-bottom:8px;}
.wp-list-end{text-align:center;margin:4px 0;}
.wp-card{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;cursor:pointer;}
.wp-card:hover{border-color:var(--line-strong);}
.wp-card-cur{border-color:var(--mint-ink,#1c6b2e);box-shadow:0 0 0 1px var(--mint-ink,#1c6b2e) inset;}
.wp-tabs{display:flex;gap:8px;margin:10px 0;}
/* 작업일자 날짜검색 (2026-09-19) — 모바일에서 가로스크롤 없이 자연스럽게 줄바꿈되도록 flex-wrap */
.wp-datefilter{display:flex;flex-direction:column;gap:8px;margin:10px 0;padding:10px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);}
.wp-datefilter-quick{display:flex;flex-wrap:wrap;gap:6px;}
.wp-datefilter-range{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.wp-datefilter-range input[type=date]{width:auto;min-height:38px;padding:6px 8px;font-size:14px;flex:1 1 130px;min-width:0;}
.wp-card-h{display:flex;justify-content:space-between;align-items:center;gap:8px;}
.wp-no{font-weight:800;font-size:13px;color:var(--ink-2);}
.wp-card-t{font-weight:800;margin:4px 0 2px;font-size:15px;}
.wp-card-m{margin-top:2px;}
.wp-badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:800;border:1px solid var(--line-strong);white-space:nowrap;}
.wp-badge.s-draft{background:#eee;color:#444;}
.wp-badge.s-submitted{background:var(--mint-tint);color:var(--mint-ink);}
.wp-badge.s-revision{background:var(--red-tint);color:var(--red-ink);}
.wp-badge.s-reviewing{background:#fff5e0;color:#7a5200;border-color:#d8b25a;}
.wp-badge.s-signed_pending_field{background:#e7f0ff;color:#1a4a8a;border-color:#7aa5d8;}
.wp-badge.s-field_confirmed{background:#e5f6e8;color:#1c6b2e;border-color:#6cbf7f;}
.wp-badge.s-closed{background:var(--red-tint);color:var(--red-ink);}   /* 2026-10-16: 종료완료 = Red(작성중 .s-draft 는 그대로 Gray) — 목록에서 종료된 허가서를 바로 알아보게 */
.wp-badge.s-sent{background:#ececec;color:#555;}   /* 문자 발송이력의 '접수' 배지(예전엔 s-closed 의 회색을 빌려 썼다 — 종료완료가 Red 가 되면서 분리) */
.wp-badge.s-cancelled{background:#f3f3f3;color:#999;}
.wp-badge.as-wait{background:#fff5e0;color:#7a5200;}
.wp-badge.as-done{background:#e5f6e8;color:#1c6b2e;}
.wp-badge.as-hold{background:var(--red-tint);color:var(--red-ink);}
.wp-kv{display:flex;gap:10px;padding:6px 0;border-bottom:1px dashed var(--line);font-size:14px;}
.wp-kv span{flex:0 0 40%;color:var(--ink-2);}
.wp-kv b{flex:1 1 auto;}
.wp-doclist{margin:6px 0;padding-left:18px;} .wp-doclist li{margin:2px 0;}
.wp-actions{display:flex;flex-direction:column;gap:8px;margin-top:14px;}
.wp-sigs{display:flex;flex-wrap:wrap;gap:10px;}
.wp-sig{flex:1 1 140px;border:1px solid var(--line);border-radius:var(--radius);padding:8px;text-align:center;min-width:130px;}
.wp-sig.ok{border-color:#6cbf7f;background:#f3fbf4;}
.wp-sig.stale{border-color:#d8b25a;background:#fffaf0;}
.wp-sig-r{font-weight:800;font-size:13px;margin-bottom:4px;}
/* 2026-10-22 승인 상태 표시: 역할별 확인완료/확인대기 · 공사담당자 현장확인 N/M · 서명 막힘 이유 목록 */
.wp-sig-st{display:block;width:fit-content;margin:0 auto 4px;padding:1px 8px;border-radius:999px;font-size:12px;font-weight:800;}
.wp-sig-st.ok{background:#e6f6ec;color:#17653a;}
.wp-sig-st.wait{background:#fff4d6;color:#7a5200;}
.wp-sig-fc{font-size:12.5px;font-weight:700;color:#7a5200;margin:0 0 4px;}
.wp-sig-fc.ok{color:#17653a;}
.wp-blocklist{margin:6px 0 0;padding-left:18px;font-size:13px;line-height:1.55;}
.wp-mc-sum{margin:0 0 8px;padding:8px 10px;border:1px solid #e5c36a;border-radius:8px;background:#fff9e6;font-size:13.5px;}
.wp-mc-sum.ok{border-color:#86cda0;background:#f1faf4;}
.wp-mc-row.need{background:#fff9e6;border-radius:6px;}
.wp-mc-need{display:inline-block;margin-left:4px;padding:0 6px;border-radius:999px;background:#fde7c7;color:#7a4a00;font-size:11.5px;font-weight:800;}
.wp-sig img{max-width:100%;height:54px;object-fit:contain;background:#fff;border:1px solid var(--line);}
/* 2026-10-04: 서명 현황 카드 — 담당자/진행상태/문자발송 상태 보조표시(조회 전용) */
.wp-sig.current{border-color:var(--mint);background:var(--mint-tint);}
.wp-sig-assignee{font-size:13px;font-weight:700;margin:2px 0;word-break:break-word;}
.wp-sig-turn{display:inline-block;margin-top:4px;font-size:11px;font-weight:800;color:var(--mint-ink);background:var(--white);border:1px solid var(--mint);border-radius:999px;padding:1px 8px;}
.wp-sms-badge{display:inline-block;margin-top:4px;font-size:11px;font-weight:700;border-radius:999px;padding:1px 8px;}
.wp-sms-badge.wp-sms-ok{color:var(--mint-ink);background:var(--mint-tint);}
.wp-sms-badge.wp-sms-fail{color:var(--red-ink);background:var(--red-tint);}
.wp-sms-badge.wp-sms-wait{color:var(--ink-2);background:var(--surface-2);}
/* 2026-09-26: 업무알림(Web Push) 등록 카드(내 정보·작업허가서) + 작업허가서 알림 관리자 화면 */
.push-card{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:14px 0 6px;background:var(--white);}
.push-h{font-weight:800;font-size:15px;margin-bottom:2px;}
.push-card p{margin:4px 0;}
.push-st{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0;}
.push-chip{display:inline-block;font-size:12.5px;font-weight:800;border-radius:999px;padding:2px 10px;}
.push-chip.ok{color:var(--mint-ink);background:var(--mint-tint);} .push-chip.off{color:var(--ink-2);background:var(--surface-2);} .push-chip.warn{color:var(--red-ink);background:var(--red-tint);}
.push-btns{display:flex;gap:6px;flex-wrap:wrap;} .push-btns .btn{min-height:40px;}
/* 2026-10-01: 로그인 후 업무알림 활성화 안내 카드 — 하단 네비(30) 위·모달(50) 아래. 화면 전체를 가리지 않는 작은 카드 */
.push-ob{position:fixed;z-index:40;left:12px;right:12px;bottom:calc(58px + 12px + env(safe-area-inset-bottom,0px));max-width:420px;margin:0 auto;display:flex;gap:12px;align-items:flex-start;
  padding:14px 14px 12px;background:var(--white);border:1px solid var(--line-strong);border-left:4px solid var(--mint);border-radius:14px;box-shadow:0 10px 30px rgba(0,0,0,.18);}
.push-ob-ic{font-size:26px;line-height:1;flex:0 0 auto;margin-top:2px;}
.push-ob-body{min-width:0;flex:1 1 auto;}
.push-ob-t{display:block;font-size:15.5px;font-weight:800;color:var(--ink);word-break:keep-all;}
.push-ob-d{margin:4px 0 0;font-size:13px;line-height:1.5;color:var(--ink-2);word-break:keep-all;}
.push-ob-msg{margin:8px 0 0;padding:7px 10px;border-radius:8px;background:var(--red-tint);color:var(--red-ink);font-size:12.5px;font-weight:600;line-height:1.45;word-break:keep-all;}
.push-ob-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;} .push-ob-btns .btn{min-height:40px;}
@media (min-width:900px){ .push-ob{left:auto;right:24px;bottom:calc(58px + 18px);margin:0;width:400px;} }
@media print{ .push-ob{display:none !important;} }
.wp-np-modes{display:flex;flex-direction:column;gap:4px;margin:6px 0;}
.wp-np-stats{display:flex;gap:6px 16px;flex-wrap:wrap;font-size:14px;margin:6px 0;}
.wp-np-tbl{width:100%;font-size:13.5px;} .wp-np-tbl th,.wp-np-tbl td{padding:6px 5px;text-align:left;vertical-align:top;}
.wp-np-row{padding:7px 0;border-bottom:1px dashed var(--line);font-size:13.5px;}
.wp-np-ch{display:inline-block;font-size:12px;font-weight:800;border-radius:999px;padding:1px 8px;margin-left:4px;}
.wp-np-ch.push{color:var(--mint-ink);background:var(--mint-tint);} .wp-np-ch.sms{color:#7a4b00;background:#fff3d6;} .wp-np-ch.none{color:var(--red-ink);background:var(--red-tint);}
.wp-push-bar{margin:0 0 10px;}

/* 관련부서장 최종본 인라인 표시(2026-09-21) — printDocHtml() 결과를 그대로 심는다. .wp-doc/.wp-doc-t
   자체가 이미 고정폭이 아니라 반응형이라 새 규칙은 최소한만 필요: 표가 화면보다 넓어져도 그 표
   안에서만 가로 스크롤되게 해서 페이지 전체 레이아웃이 깨지거나 좌우로 크게 밀리지 않게 한다. */
.wp-final-view{overflow-x:auto;margin:10px 0;padding:10px;border:1px solid var(--line);border-radius:var(--radius);background:#fff;}
.wp-final-view .wp-doc{min-width:0;}

/* ---- 허가서 삭제 · 휴지통 (2026-09-11) ---- */
/* 목록: 카드와 삭제 버튼을 별도 요소로 나란히 두어(상태 표시와 안 겹침) 클릭이 상세이동과 섞이지 않게 한다 */
.wp-card-row{display:flex;align-items:stretch;gap:8px;}
.wp-card-row .wp-card{flex:1 1 auto;min-width:0;}
.wp-card-del{flex:0 0 auto;align-self:stretch;min-width:56px;min-height:44px;padding:0 12px;
  background:var(--white);color:var(--red-ink);border:1.5px solid var(--red);border-radius:var(--radius);
  font-size:13px;font-weight:800;cursor:pointer;white-space:nowrap;}
.wp-card-del:active{background:var(--red-tint);}
@media(max-width:420px){ .wp-card-del{min-width:48px;padding:0 10px;font-size:12.5px;} }
/* 상세: 삭제 버튼을 다른 주요 버튼과 뚜렷이 구분(위험 구역) */
.wp-danger{margin-top:16px;padding-top:14px;border-top:1px dashed var(--red);}
.wp-danger .btn{width:100%;}
/* 삭제 확인창 */
.wp-delq{font-weight:700;margin:12px 0 6px;line-height:1.5;}
/* 휴지통 목록 */
.wp-trash-row{border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;background:var(--surface);}
.wp-trash-sig{color:var(--red-ink);font-weight:700;}
.wp-trash-act{display:flex;gap:8px;margin-top:10px;}
.wp-trash-act .btn{flex:1 1 auto;}
/* 출력물: 삭제된 문서 안내 — no-print 아님(실제 인쇄물에도 표시) */
.wp-doc-deleted{background:#fff;border:2px solid var(--red);color:var(--red-ink);border-radius:6px;
  padding:10px 12px;margin-bottom:10px;font-weight:800;font-size:14px;text-align:center;}
.wp-doc-deleted-sub{font-weight:400;font-size:11px;color:#333;margin-top:4px;}
.wp-steps{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;}
.wp-stepbtn{flex:1 1 auto;min-width:120px;font-size:12px;padding:8px 6px;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);cursor:pointer;}
.wp-stepbtn.on{background:var(--mint);color:#000;border-color:var(--mint-ink);font-weight:800;}
.wp-wiz-btns{display:flex;gap:8px;margin-top:12px;}
.wp-wiz-btns .btn{flex:1 1 auto;}
/* 2026-09-19: 단계전환 시 포커스를 여기(#wzBody)로 옮긴다 — 키보드 tab이 아닌 스크롤 관리용
   프로그램적 포커스라서 일반 입력칸용 파란 테두리는 불필요하게 눈에 띄므로 감춘다. */
#wzBody:focus{outline:none;}
.wp-sub{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin:12px 0;background:var(--surface-2);}
.wp-sub h4{margin:2px 0 8px;} .wp-sub h5{margin:12px 0 4px;color:var(--ink-2);}
/* ---- 작성 화면 선택 컨트롤 (체크박스 / 라디오) : 작업허가서 전용 ----
   문제였던 부분: 일반 입력창용 `.field input{width:100%;min-height:50px;padding:11px;border...}` 이
   .field 안의 체크박스·라디오에도 적용돼 선택 표시가 거대해지고 항목명이 밀렸음.
   → 선택 표시는 20px 고정(네이티브), 라벨 전체(표시+항목명)를 터치 영역으로. 텍스트 입력창 크기와 분리. */
.wp-opt{display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 2px;
  font-size:15px;line-height:1.4;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.wp-opt>input[type="checkbox"],
.wp-opt>input[type="radio"]{
  appearance:auto;-webkit-appearance:auto;flex:0 0 auto;
  width:20px;height:20px;min-width:20px;min-height:20px;max-width:20px;max-height:20px;
  margin:0;padding:0;border:0;border-radius:0;background:none;box-shadow:none;
  accent-color:var(--mint);}
.wp-opt>input:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.wp-opt-t{flex:1 1 auto;min-width:0;word-break:keep-all;}
.wp-opt:has(input:checked) .wp-opt-t{color:var(--mint-ink);font-weight:700;}
/* 두 줄 이상이 될 수 있는 라벨(작업 종류·긴 동의문)은 첫 줄 기준으로 정렬 */
.wp-checks .wp-opt,.wp-signmodal .wp-opt{align-items:flex-start;}
.wp-checks .wp-opt>input,.wp-signmodal .wp-opt>input{margin-top:2px;}

/* 작업구역 / 굴착·중장비 예-아니요 : 한 줄에 나열 */
.wp-optrow{display:flex;flex-wrap:wrap;gap:2px 20px;}
.wp-optrow .wp-opt{flex:0 1 auto;}

/* 작업 종류 : 넓으면 2열, 좁거나 글자확대면 1열 (항목명이 글자 단위로 쪼개지지 않게) */
.wp-checks{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:0 14px;}

/* 안전조치 / 유·무 / 예·아니요 : 모바일=항목명 위 + 선택지 아래, 넓은 화면=한 줄 */
.wp-m,.wp-yn{padding:8px 0;border-bottom:1px solid var(--line);}
.wp-optq{font-size:15px;line-height:1.45;margin-bottom:2px;word-break:keep-all;}
.wp-opts{display:flex;flex-wrap:wrap;gap:0 18px;}
.wp-opts .wp-opt{flex:0 1 auto;min-height:40px;padding-left:0;padding-right:0;}
@media (min-width:720px){
  .wp-m,.wp-yn{display:flex;align-items:baseline;gap:16px;}
  .wp-optq{flex:1 1 auto;margin-bottom:0;}
  .wp-opts{flex:0 0 auto;}
}

/* 허가서 넓은 팝업(문자 발송이력·알림 결과·Push 등록현황 — 예전 AI 사전검토 패널에서 쓰던 이름을 그대로 둔다, AI 기능은 2026-10-06 삭제).
   wp-ai-modal 은 .modal 과 같은 요소에 붙는 클래스이므로 .wp-ai-modal.modal(공백 없이) 로 결합해야 실제로 적용된다(자손 선택자면 매칭 안 됨). */
.wp-ai-modal.modal{max-width:560px;}
/* 2026-09-28: 이 카드들은 modal-tall(본문만 스크롤)로 바뀌어 본문 66vh 제한이 필요 없다(두면 이중 스크롤) */

/* 수정이력 모달(2026-09-20) */
.wp-hist-list{max-height:60vh;overflow-y:auto;}
.wp-hist-row{padding:8px 0;border-bottom:1px dashed var(--line);}
.wp-hist-row:last-child{border-bottom:none;}

/* 항목별 현장확인 모달 */
.wp-mc-modal .modal{max-width:560px;}
.wp-mc-list{max-height:60vh;overflow-y:auto;border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin-top:6px;}
.wp-mc-h{margin:12px 0 4px;font-size:14px;color:var(--ink-2);border-left:3px solid var(--mint);padding-left:6px;}
.wp-mc-h:first-child{margin-top:2px;}
.wp-mc-row{padding:6px 0;border-bottom:1px dashed var(--line);}
.wp-mc-q{font-size:14px;line-height:1.4;margin-bottom:2px;word-break:keep-all;}
.wp-mc-row .wp-opts{gap:0 20px;}

/* 공사업체용 JSA 불러오기 모달 */
.wp-jsa-modal .modal{max-width:520px;}
.wp-ji-list{max-height:50vh;overflow-y:auto;border:1px solid var(--line);border-radius:6px;padding:4px 10px;margin-top:6px;}
.wp-ji-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0;border-bottom:1px dashed var(--line);}
.wp-ji-row:last-child{border-bottom:none;}

/* 발주담당자 직원검색 (2026-09-19) */
.ins-search-results{max-height:220px;overflow-y:auto;}
.ins-search-opt{display:block;width:100%;text-align:left;padding:8px 10px;border:1px solid var(--line);
  border-top:none;background:var(--surface);cursor:pointer;font-size:13px;}
.ins-search-results .ins-search-opt:first-child{border-top:1px solid var(--line);border-radius:6px 6px 0 0;}
.ins-search-results .ins-search-opt:last-child{border-radius:0 0 6px 6px;}
.ins-search-opt:hover{background:var(--bg,#f5f5f5);}
.wp-owner-results{max-height:200px;overflow-y:auto;}
.wp-owner-opt{display:block;width:100%;text-align:left;padding:8px 10px;border:1px solid var(--line);
  border-top:none;background:var(--white);font-family:inherit;font-size:14px;cursor:pointer;}
.wp-owner-results .wp-owner-opt:first-child{border-top:1px solid var(--line);border-radius:6px 6px 0 0;}
.wp-owner-results .wp-owner-opt:last-child{border-radius:0 0 6px 6px;}
.wp-owner-opt:hover{background:var(--bg,#f5f5f5);}

/* 공사업체 고정 포털 */
.wp-portal-wrap{max-width:420px;margin:0 auto;padding:24px 16px;}
.wp-portal-wrap .btn{margin-bottom:10px;}
/* 2026-10-16: 공사업체 포털 '최근 연 내 작업허가서'(이 기기) — 제출 이후에도 계속 보이는 목록 */
.wp-recent{margin-top:18px;border-top:1px solid var(--line);padding-top:12px;}
.wp-recent h4{margin:0 0 8px;font-size:14px;}
.wp-recent-item{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--surface);}
.wp-recent-main{font-size:14px;line-height:1.5;word-break:keep-all;overflow-wrap:anywhere;min-width:0;}
.wp-recent-tags{margin-top:4px;}
.wp-recent-btns{margin-top:8px;display:flex;gap:8px;}
.wp-recent-btns .btn{margin-bottom:0;}

/* 증빙 첨부 */
.wp-attnotice{margin:4px 0 8px;}
.wp-attup{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:6px;}
.wp-attup select{flex:0 1 200px;min-height:44px;}
.wp-attup input[type="file"]{flex:1 1 200px;min-width:0;font-size:14px;}
.wp-attup .btn{flex:0 0 auto;}
.wp-attmsg{min-height:16px;margin-bottom:4px;}
.wp-attfile{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:8px 0;border-bottom:1px dashed var(--line);}
.wp-attfile a{font-weight:700;word-break:break-all;flex:1 1 auto;min-width:120px;}
/* 관련서류 첨부(2026-10-19) — 증빙자료 첨부와 별개 구역. 모바일에서 버튼이 작아지지 않게 터치 높이 44px */
.wp-rel .wp-rel-up{display:flex;flex-direction:column;gap:8px;margin:6px 0;}
.wp-rel .wp-rel-up select{min-height:44px;width:100%;max-width:360px;}
.wp-rel-btns{display:flex;flex-wrap:wrap;gap:8px;}
.wp-rel-btns .btn{min-height:44px;flex:1 1 140px;}
.wp-rel-grp{margin:12px 0 0;}
.wp-rel-grp h4{margin:0 0 2px;font-size:14px;}
.wp-rel-list{list-style:none;margin:0;padding:0;}
.wp-rel-item{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:8px 0;border-bottom:1px solid var(--line);}
.wp-rel-no{flex:0 0 auto;min-width:48px;font-weight:700;color:var(--primary,#1d5fd6);}
.wp-rel-info{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;gap:2px;}
.wp-rel-info b{word-break:break-all;}
.wp-rel-acts{display:flex;flex-wrap:wrap;gap:6px;flex:0 0 auto;}
.wp-rel-msq{display:flex;gap:8px;margin-bottom:6px;}
.wp-rel-msq input{flex:1 1 auto;min-width:0;min-height:44px;}
.wp-rel-ms{border:1px solid var(--line);border-radius:10px;padding:10px;margin:8px 0;}
.wp-rel-msh{display:flex;flex-direction:column;gap:2px;margin-bottom:6px;}
.wp-rel-msdoc{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 10px;padding:6px 0;border-top:1px dashed var(--line);}
.wp-rel-msdoc .small{flex:1 1 200px;min-width:0;word-break:break-all;}
.wp-rel-linked{font-weight:700;color:#0a7a3d;}
.wp-rel-pg{display:flex;gap:8px;justify-content:center;margin-top:8px;}
@media (pointer:coarse),(max-width:768px){.wp-rel-acts .btn,.wp-rel-msdoc .btn,.wp-rel-pg .btn{min-height:44px;min-width:64px;}.wp-rel-item{align-items:flex-start;}}
.wp-ol{margin:4px 0;padding-left:20px;} .wp-ol li{margin:2px 0;}
.wp-pre,.wp-doc-pre{white-space:pre-wrap;font-family:inherit;font-size:13px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:8px;}
.wp-tablewrap{overflow-x:auto;}
.wp-table{width:100%;border-collapse:collapse;font-size:13px;min-width:520px;}
.wp-table th,.wp-table td{border:1px solid var(--line);padding:4px 6px;vertical-align:top;}
.wp-table th{background:var(--surface-2);}
.wp-table input,.wp-table textarea{width:100%;min-width:80px;}
.wp-inline{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px;}
.wp-inline input,.wp-inline select{flex:1 1 120px;}
.wp-attrow,.wp-attrev,.wp-linkrow,.wp-setrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px dashed var(--line);}
.wp-setinput{display:flex;gap:6px;flex:1 1 260px;} .wp-setinput input{flex:1 1 auto;}
.wp-review{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:10px;}
.wp-canvas{width:100%;max-width:600px;height:180px;border:1px solid var(--line-strong);border-radius:6px;background:#fff;touch-action:none;}
/* 모바일에서 '전자서명 제출' 버튼이 하단 브라우저 UI/홈 인디케이터에 가리지 않게(2026-09-12):
   모달 카드 자체를 뷰포트 높이 안으로 제한해 카드가 화면 밖으로 넘치지 않게 하고, 본문만 카드 안에서
   스크롤되게 하며, 서명 저장/취소 버튼은 카드 하단(항상 화면 안)에 고정한다. 안전영역은 버튼 쪽에 둔다.
   (참고: 기존 '.wp-signmodal .modal' 선택자는 모달 엘리먼트 자신에 두 클래스가 같이 붙어 있어 실제로는
    적용된 적이 없던 규칙이라, 올바른 결합 선택자로 함께 바로잡는다.) */
.wp-signmodal.modal{
  max-width:640px;
  /* 최대높이는 공통 .modal 규칙(100dvh - 위아래 여백·안전영역)을 그대로 쓴다(2026-09-28) */
  display:flex;flex-direction:column;padding:0;overflow:hidden;
}
.wp-signmodal.modal .modal-title{padding:18px 18px 0;margin-bottom:8px;flex:0 0 auto;}
.wp-signmodal.modal .modal-body{padding:0 18px;margin-bottom:0;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
.wp-signmodal.modal .modal-btns{margin:0;padding:12px 18px 14px;flex:0 0 auto;border-top:1px solid var(--line);background:var(--white);}
.wp-siglist ul{margin:4px 0;padding-left:18px;}
/* 전자서명 팝업 compact(2026-09-29): 처음 열었을 때 서명란·동의란·[서명 저장]이 한 화면에 보이게.
   동의 체크는 기본 미체크 그대로(사용자가 직접 체크). 모바일은 서명란(180px)·입력칸 크기를 유지하고
   간격·버튼 줄만 줄인다. PC(≥641px)는 입력칸·서명란·간격을 추가로 줄인다. */
.wp-signmodal .wp-sg-intro{margin:0 0 6px;line-height:1.45;}
.wp-signmodal .wp-siglist{margin-bottom:8px;font-size:13.5px;line-height:1.45;}
.wp-signmodal .wp-siglist ul{margin:2px 0 0;}
.wp-signmodal .wp-sg-who{gap:0 12px;}
.wp-sg-pad{margin-bottom:6px;border-radius:8px;max-width:600px;} /* 서명란(최대 600px)과 [지우기] 오른쪽 끝을 맞춘다 */
.wp-sg-padhead{display:flex;align-items:flex-end;justify-content:space-between;gap:8px;margin-bottom:4px;}
.wp-sg-padlabel{font-weight:700;font-size:13.5px;}
.wp-sg-padhead .btn-sm{min-height:34px;padding:4px 14px;}
.wp-sg-pad .wp-canvas{display:block;transition:border-color .2s,box-shadow .2s;}
.wp-sg-consent{border:1px solid transparent;border-radius:8px;padding:0 6px;margin:0 -6px 4px;transition:background-color .2s,border-color .2s;}
.wp-sg-consent .wp-opt{min-height:40px;padding:4px 0;}
.wp-sg-err{color:var(--red-ink);font-weight:700;font-size:13.5px;line-height:1.4;margin:4px 0 6px;}
.wp-sg-consent .wp-sg-err{margin:0 0 6px 28px;}
/* 빠진 항목 강조(약 1.8초) — 기존 경고 배너(.banner.warn)와 같은 색 */
.wp-sg-consent.wp-sg-attn{background:#fff8e6;border-color:#e0b93d;}
.wp-signmodal .field input{transition:border-color .2s,box-shadow .2s;}
.wp-signmodal .field.wp-sg-attn input{border-color:#e0b93d;box-shadow:0 0 0 3px #fff8e6;}
.wp-sg-pad.wp-sg-attn .wp-canvas{border-color:#e0b93d;box-shadow:0 0 0 3px #fff8e6;}
.wp-signmodal .wp-sg-note{margin:2px 0 6px;line-height:1.45;}
.wp-signmodal .banner{margin-bottom:6px;}
/* 버튼은 한 줄에 나란히(세로 두 줄이 하단을 139px 차지하던 것을 줄임) */
.wp-signmodal.modal .modal-btns{flex-direction:row;padding:10px 18px 12px;}
.wp-signmodal.modal .modal-btns .btn{flex:1 1 0;width:auto;min-width:0;min-height:48px;}
.wp-signmodal.modal .modal-btns .btn-primary{flex-grow:1.6;}
/* PC = 넓은 화면 + 마우스(pointer:fine). 태블릿·가로 휴대폰(손가락)은 서명란 180px·입력칸 크기를 그대로 둔다. */
@media (min-width:641px) and (pointer:fine){
  .wp-signmodal.modal .modal-title{padding-top:14px;margin-bottom:6px;}
  /* 서명 대상 서류: 항목을 한 줄씩 쌓지 않고 이어서 배치(항목은 쪼개지지 않음) — 서류가 5종이어도 2~3줄 */
  .wp-signmodal .wp-siglist ul{display:flex;flex-wrap:wrap;gap:0 16px;list-style:none;padding-left:0;}
  .wp-signmodal .field{margin-bottom:8px;}
  .wp-signmodal .field>label{margin-bottom:3px;font-size:13px;}
  .wp-signmodal .field input:where(:not([type="checkbox"]):not([type="radio"])){min-height:44px;padding:9px 11px;}
  /* 서명란 180px → 144px(-20%). 폭도 432px 로 줄여 저장 이미지(600×200)와 같은 3:1 비율 — 그린 모양 그대로 저장 */
  .wp-sg-pad{max-width:432px;}
  .wp-sg-pad .wp-canvas{height:144px;}
  .wp-signmodal.modal .modal-btns .btn{min-height:46px;}
}
.wp-pwarn{background:var(--red-tint);color:var(--red-ink);border:1px solid #e5a58c;border-radius:6px;padding:8px 10px;margin-bottom:8px;font-weight:700;}

/* 공용 서명패드(core.js openSignaturePad) — 안전작업허가서 서명 모달과 같은 모바일 안전영역 처리를 재사용 */
.sigpad-canvas{width:100%;max-width:600px;height:180px;border:1px solid var(--line-strong);border-radius:6px;background:#fff;touch-action:none;}
.sigpad-modal.modal{
  max-width:640px;
  /* 최대높이는 공통 .modal 규칙을 그대로 쓴다(2026-09-28) */
  display:flex;flex-direction:column;padding:0;overflow:hidden;
}
.sigpad-modal.modal .modal-title{padding:18px 18px 0;margin-bottom:8px;flex:0 0 auto;}
.sigpad-modal.modal .modal-body{padding:0 18px;margin-bottom:0;flex:1 1 auto;min-height:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;}
.sigpad-modal.modal .modal-btns{margin:0;padding:12px 18px 14px;flex:0 0 auto;border-top:1px solid var(--line);background:var(--white);}

/* ---- 출력 문서 ---- */
/* 인쇄 레이아웃 방침(2026-09-11):
   - 화면에서는 섹션(.wp-sec)을 A4 느낌의 카드로 보여 준다(미리보기 용도).
   - 인쇄(@media print)에서는 강제 페이지 분리를 없애고 내용이 위→아래로 이어서 흐른다.
     페이지 수는 내용량에 따라 자동으로 늘거나 줄어든다(고정 4페이지 아님).
   - 2026-10-30: 별도 서식(중량물·크레인 대여동의·밀폐공간·방사선, .wp-form-break)도 새 쪽을 강제하지 않는다 — 앞 쪽에 공간이 남으면 이어서 인쇄한다(아래 @media print 참고). 고소작업대 양식(.wpa-doc)·안내 그림 쪽(.wpa-guide)만 새 쪽에서 시작. */
.wp-doc{background:#fff;color:#000;}
.wp-sec{border:1px solid #999;padding:14mm 12mm;margin:0 auto 14px;max-width:190mm;box-sizing:border-box;}
.wp-doc-title{font-size:16px;font-weight:800;text-align:center;border-bottom:2px solid #000;padding-bottom:6px;margin-bottom:8px;}
.wp-doc-sub{font-size:12px;margin-bottom:8px;}
.wp-doc-t{width:100%;border-collapse:collapse;font-size:11.5px;margin:6px 0;}
.wp-doc-t th,.wp-doc-t td{border:1px solid #000;padding:3px 5px;vertical-align:top;}
.wp-doc-t th{background:#eee;}
/* 2026-10-06: JSA 등 여러 줄로 입력된 내용(예: 안전작업방법 1./2./3.)이 인쇄/PDF·관련부서장 최종본
   화면에서 한 줄로 뭉개지지 않도록 원본 줄바꿈을 그대로 보존한다. */
.wp-doc-t td{white-space:pre-wrap;}
.wp-doc h4{margin:12px 0 4px;font-size:13px;border-left:4px solid #000;padding-left:6px;}
.wp-doc h5{margin:10px 0 3px;font-size:12px;}
.wp-doc-ol{margin:4px 0;padding-left:20px;font-size:11.5px;}
.wp-doc-note{font-size:10.5px;color:#333;margin:4px 0;}
.wp-doc-row2{display:flex;gap:16px;font-size:11.5px;flex-wrap:wrap;margin:4px 0;}
.wp-doc-foot{margin-top:10px;padding-top:4px;border-top:1px solid #999;font-size:10px;color:#555;text-align:right;}
.wp-doc-gen{text-align:center;font-size:11px;color:var(--ink-2);margin:8px 0 20px;}
.wp-scell{min-height:60px;text-align:center;} .wp-scell img{max-height:46px;max-width:100%;}
.wp-sc-meta{font-size:10px;color:#333;}
.wp-yncell{white-space:nowrap;}
.wp-sign-blank{height:52px;} /* 현장 수기서명용 빈 칸 */
/* 연장작업 허가(2026-09-28) — 연장작업 시간 '__ : __ ~ __ : __' 수기 칸(시·분을 쓸 자리만 비워 둔다) */
.wp-doc-t td.wp-ext-time{white-space:nowrap;}
.wp-ext-hm{display:inline-block;width:34mm;text-align:center;}
.wp-ext-sep{display:inline-block;width:10mm;text-align:center;}
/* 휴대폰 화면 미리보기(관련부서장 최종본 등)에서는 칸이 좁으므로 시·분 자리만 줄인다 — 인쇄(A4)는 위 폭 그대로 */
@media screen and (max-width:560px){ .wp-ext-hm{width:13mm;} .wp-ext-sep{width:5mm;} }
/* 값이 없어도(현장에서 당일 수기로 적는 항목) 표 셀이 찌그러지지 않게 최소 높이를 유지한다.
   height 는 table cell 에서 '최소값'으로 동작하므로 값이 길어져도 안전하다(2026-09-12).
   A4 출력 기준 약 10~12mm 확보 요구에 맞춰 11mm 로 지정(내용이 길면 행 높이는 더 늘어날 수 있음). */
.wp-doc-blankcell{height:11mm;min-height:11mm;}
/* 중량물 취급계획서 '건설기계 제원' 표 전용(2026-09-12). 자동 표 레이아웃에서는 '장비능력(정격하중)' 같은
   긴 항목명 칸이 내용 길이에 따라 넓어지면서 반대쪽 작성칸(특히 빈 칸)이 눌려 좁아지는 문제가 있었다.
   이 표에만 table-layout:fixed + colgroup(20%/30%/20%/30%) 을 강제해 값의 유무·길이와 무관하게
   왼쪽·오른쪽 항목명 칸(20%)과 작성칸(30%) 너비가 항상 동일하게 유지되도록 한다. 다른 wp-doc-t 표는
   그대로 자동 레이아웃을 쓰므로 영향이 없다. */
.wp-hvmach-t{table-layout:fixed;}
.wp-hvmach-t td{overflow-wrap:anywhere;word-break:break-word;}

/* =============================================================================
   JSA 위험성평가 (jsa) 모듈 — 안전작업허가서(wp-*)와 완전히 분리된 전용 클래스만 사용한다.
   ========================================================================== */

/* ── 대분류 / 공정·작성그룹 선택 ── */
.jsa-crumb-note{font-size:12px;color:var(--ink-2);margin:-4px 0 12px;}
.jsa-cat-grid{display:grid;grid-template-columns:1fr;gap:12px;margin-bottom:16px;}
@media(min-width:640px){.jsa-cat-grid{grid-template-columns:repeat(3,1fr);}}
.jsa-cat-card{background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);
  padding:22px 16px;text-align:center;font-size:18px;font-weight:800;cursor:pointer;font-family:inherit;color:var(--ink);}
.jsa-cat-card:active{background:var(--surface-2);}
.jsa-cat-card .n{display:block;font-size:12px;font-weight:600;color:var(--ink-2);margin-top:6px;}

.jsa-search-row{display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap;}
.jsa-search-row input{flex:1 1 220px;min-width:0;height:var(--field-h);border:1px solid var(--line-strong);
  border-radius:var(--radius);padding:0 12px;font-size:15px;font-family:inherit;}
.jsa-search-scope{font-size:12.5px;color:var(--ink-2);margin:-8px 0 14px;}
.jsa-search-scope button{background:none;border:0;color:var(--mint-ink);font:inherit;font-weight:700;cursor:pointer;padding:0;}

.jsa-group-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:14px;}
@media(min-width:560px){.jsa-group-grid{grid-template-columns:repeat(2,1fr);}}
@media(min-width:900px){.jsa-group-grid{grid-template-columns:repeat(3,1fr);}}
.jsa-group-card{background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);
  padding:14px 16px;text-align:left;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:space-between;gap:10px;}
.jsa-group-card:active{background:var(--surface-2);}
.jsa-group-card .name{font-size:15px;font-weight:700;color:var(--ink);word-break:keep-all;overflow-wrap:break-word;}
.jsa-group-card .cnt{flex:0 0 auto;font-size:11.5px;font-weight:800;padding:3px 8px;border-radius:10px;
  background:var(--surface-2);color:var(--ink-2);white-space:nowrap;}
.jsa-group-card .cnt.has{background:var(--mint-tint);color:var(--mint-ink);}

.jsa-empty{text-align:center;padding:36px 12px;color:var(--ink-2);}
.jsa-empty p{margin:0 0 14px;}

/* ── 문서/검색/이력/휴지통 목록 (반응형 표: 좁은 화면에서 카드로 전환) ── */
.jsa-doctable{width:100%;border-collapse:collapse;font-size:13.5px;margin-bottom:8px;}
.jsa-doctable th{text-align:left;padding:8px 10px;border-bottom:2px solid var(--line-strong);font-size:12px;color:var(--ink-2);white-space:nowrap;}
.jsa-doctable td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle;}
.jsa-doctable tbody tr{cursor:pointer;}
.jsa-doctable tbody tr:hover{background:var(--surface-2);}
.jsa-doctable .chip{font-size:11.5px;color:var(--ink-2);}
@media(max-width:700px){
  .jsa-doctable thead{display:none;}
  .jsa-doctable, .jsa-doctable tbody, .jsa-doctable tr, .jsa-doctable td{display:block;width:100%;}
  .jsa-doctable tr{border:1px solid var(--line);border-radius:var(--radius);margin-bottom:10px;padding:8px 10px;}
  .jsa-doctable td{border:none;padding:4px 0;display:flex;justify-content:space-between;align-items:center;gap:10px;text-align:right;}
  .jsa-doctable td::before{content:attr(data-label);font-weight:700;color:var(--ink-2);font-size:11.5px;flex:0 0 auto;text-align:left;}
  .jsa-doctable td.jsa-td-plain::before{display:none;}
  .jsa-doctable td.jsa-td-plain{justify-content:flex-start;text-align:left;}
}
.jsa-badge{display:inline-block;padding:2px 9px;border-radius:10px;font-size:11.5px;font-weight:700;border:1px solid;white-space:nowrap;}
.jsa-badge.st-draft{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.jsa-badge.st-active{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.jsa-badge.st-archived{background:#f0f0f0;color:#777;border-color:#ccc;}

/* ── 문서 상세 ── */
.jsa-meta-grid{display:grid;grid-template-columns:1fr;gap:2px 18px;margin:10px 0 16px;font-size:13.5px;}
@media(min-width:640px){.jsa-meta-grid{grid-template-columns:1fr 1fr;}}
.jsa-meta-grid .r{display:flex;gap:8px;padding:5px 0;border-bottom:1px solid var(--line);}
.jsa-meta-grid .r b{flex:0 0 96px;color:var(--ink-2);font-weight:700;font-size:12.5px;}
.jsa-meta-grid .r span{white-space:pre-wrap;word-break:break-word;}
.jsa-actions{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0;}
.jsa-actions .btn{flex:0 0 auto;}
.jsa-stepview{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;}
.jsa-stepview .n{font-size:11.5px;font-weight:800;color:var(--mint-ink);margin-bottom:4px;}
.jsa-stepview .row{font-size:13px;margin:3px 0;white-space:pre-wrap;word-break:break-word;}
.jsa-stepview .row b{color:var(--ink-2);font-weight:700;margin-right:6px;font-size:11.5px;}
/* 2026-10-04: 실제 저장값에 개행이 있는(진짜 여러 줄인) 항목만 항목명을 위 줄로 분리한다
   (jsaRowHtml 참고) — 화면 폭에 따른 자동 줄바꿈은 여기 해당하지 않는다(한 줄이면 위 .row 그대로). */
.jsa-stepview .row.row-stack{margin:6px 0;}
.jsa-stepview .row.row-stack b{display:block;margin:0 0 3px;}
.jsa-stepview .row.row-stack .row-v{display:block;}

/* ── 기준 JSA 작성/수정 편집기 ── */
.jsa-steps{margin:6px 0 14px;}
.jsa-step-hd{display:none;}
@media(min-width:820px){
  .jsa-step-hd{display:flex;gap:8px;padding:0 0 4px;font-size:12px;font-weight:700;color:var(--ink-2);}
  .jsa-step-hd .jsa-step-num{width:26px;flex:0 0 auto;}
  .jsa-step-hd .jsa-step-fields{display:flex;flex:1;gap:8px;}
  .jsa-step-hd .f1{flex:1;} .jsa-step-hd .f2{flex:1;} .jsa-step-hd .f3{flex:1.7;} .jsa-step-hd .f4{flex:0.85;}
  .jsa-step-hd .jsa-step-act{width:96px;flex:0 0 auto;}
}
.jsa-step-row{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:var(--radius);
  padding:12px;margin-bottom:10px;background:var(--surface);}
.jsa-step-num{font-size:12px;font-weight:800;color:var(--mint-ink);}
.jsa-step-fields{display:flex;flex-direction:column;gap:8px;}
.jsa-step-f label{display:block;font-size:11.5px;font-weight:700;color:var(--ink-2);margin-bottom:3px;}
.jsa-step-f textarea,.jsa-step-f input{width:100%;border:1px solid var(--line-strong);border-radius:6px;
  padding:8px 9px;font-size:14.5px;font-family:inherit;resize:vertical;min-height:40px;}
.jsa-step-f input{min-height:var(--field-h);resize:none;}
.jsa-step-act{display:flex;gap:6px;flex-wrap:wrap;}
.jsa-step-act .btn{flex:1 1 auto;min-height:36px;padding:6px 8px;font-size:12.5px;}
@media(min-width:820px){
  .jsa-step-row{flex-direction:row;align-items:flex-start;padding:8px;}
  .jsa-step-num{width:26px;flex:0 0 auto;padding-top:9px;text-align:center;}
  .jsa-step-fields{flex-direction:row;flex:1;gap:8px;}
  .jsa-step-f{flex:1;} .jsa-step-f.jsa-f-method{flex:1.7;} .jsa-step-f.jsa-f-worker{flex:0.85;}
  .jsa-step-f label{display:none;}
  .jsa-step-act{width:96px;flex:0 0 auto;flex-direction:column;}
}
.jsa-step-readonly{background:var(--surface-2);white-space:pre-wrap;border:1px solid var(--line);border-radius:6px;
  padding:8px 9px;font-size:14px;min-height:40px;}

/* ── 작업일별 사용본: 기준내용(읽기전용) 안내 ── */
.jsa-usage-refnote{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 12px;font-size:12.5px;color:var(--ink-2);margin-bottom:12px;}
.jsa-today-row{display:flex;gap:8px;align-items:center;}
.jsa-today-row input{flex:1;}
.jsa-worker-row{display:flex;gap:8px;margin-bottom:6px;}
.jsa-worker-row input{flex:1;}

/* ── JSA 시스템 검사 · 검토기준 관리 (AI 검토·검증은 2026-10-06 삭제) ── */
.jsa-policy-card{border:1px solid var(--line-strong);border-radius:var(--radius);padding:12px 14px;margin-bottom:10px;background:var(--surface);}
.jsa-policy-card.jsa-policy-inactive{opacity:.55;}
.jsa-badge.sev-priority{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.jsa-badge.sev-fill{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.jsa-badge.sev-info{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.jsa-finding-src{font-size:11.5px;color:var(--ink-2);margin-left:6px;}
.jsa-finding-card{border:1px solid var(--line-strong);border-radius:var(--radius);padding:12px 14px;margin-bottom:10px;background:var(--surface);}
.jsa-finding-top{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin-bottom:8px;}
.jsa-finding-target{font-size:12px;font-weight:700;color:var(--ink);margin-left:auto;}
.jsa-finding-quote{font-size:13px;white-space:pre-wrap;word-break:break-word;background:var(--surface-2);
  border-left:3px solid var(--line-strong);padding:6px 10px;margin-bottom:8px;color:var(--ink-2);}
.jsa-finding-q{font-size:13.5px;white-space:pre-wrap;word-break:break-word;margin-bottom:6px;}
.jsa-finding-q b{display:block;font-size:11.5px;color:var(--ink-2);font-weight:700;margin-bottom:2px;}
.jsa-finding-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}
.jsa-compare-box{white-space:pre-wrap;word-break:break-word;background:var(--surface-2);border:1px solid var(--line);
  border-radius:6px;padding:8px 10px;font-size:13.5px;min-height:32px;}

/* =============================================================================
   JSA 인쇄 전용(회사 원본 양식 흑백 표) — 화면 편집·목록 스타일과 절대 겹치지 않는 jsa-print- 접두사만 사용.
   ========================================================================== */
.jsa-print{background:#fff;color:#000;font-size:11.5px;}
.jsa-print-head,.jsa-print-body{width:100%;border-collapse:collapse;table-layout:fixed;}
/* 사용자가 입력한 줄바꿈·빈 줄을 그대로 보존하면서(white-space:pre-wrap), 열 너비 안에서는
   자연스럽게 자동 줄바꿈되게 한다(overflow-wrap). 이 속성이 빠지면 textarea 에 입력한 개행이
   인쇄/PDF 에서 공백으로 뭉개져 한 문단으로 이어 붙는다(2026-09-13 확인된 실제 원인). */
.jsa-print-head td,.jsa-print-body td,.jsa-print-body th{border:1px solid #000;padding:4px 6px;
  vertical-align:middle;overflow-wrap:break-word;word-break:break-word;white-space:pre-wrap;}
.jsa-print .jsa-pnote{border:none !important;border-bottom:1px solid #000 !important;text-align:right;font-size:9.5px;padding:2px 6px;white-space:normal;}
.jsa-print .jsa-ptitle{border:2px solid #000;text-align:center;font-size:21px;font-weight:800;letter-spacing:3px;height:36px;white-space:normal;}
.jsa-print .jsa-plbl{background:#e7e6e6;font-weight:700;text-align:center;font-size:11.5px;white-space:normal;vertical-align:middle;}
/* 값 칸(작업명·부서·장소·장비/공구·보호구 등 실제 입력내용)은 내용이 길어지면 위에서부터
   자연스럽게 늘어나야 하므로 위 정렬로 바꾼다(원본 라벨 칸의 중앙정렬은 유지). */
.jsa-print .jsa-pval{text-align:left;vertical-align:top;}
.jsa-print .jsa-psigbox{height:72px;}
.jsa-print .jsa-psignlbl{font-size:10.5px;line-height:1.45;vertical-align:middle;}
.jsa-print .jsa-psignbox{height:58px;text-align:left;vertical-align:top;font-size:11px;}
.jsa-print-body thead th{background:#e7e6e6;font-weight:700;text-align:center;font-size:11.5px;white-space:normal;vertical-align:middle;}
/* 2026-09-17: 고정 height:46px 를 없애 한 줄짜리 내용은 한 줄 높이로만, 여러 줄 내용은 그만큼만
   자연스럽게 늘어나게 한다(요청사항: 행 높이를 내용에 맞게). 셀 padding(4px 6px, 위쪽 공통 규칙)은
   그대로 유지되어 너무 붙어 보이지 않는다. */
.jsa-print-body tbody td{vertical-align:top;}
.jsa-print-body .jsa-runhead td{background:#fafafa;font-weight:700;text-align:left;font-size:10px;color:#333;height:auto;padding:3px 6px;white-space:normal;vertical-align:middle;}
.jsa-print .jsa-pfoot{text-align:right;font-size:9.5px;color:#555;margin-top:4px;}
.jsa-print-topbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;}

@media print{
  #appHeader,#bottomNav,#toast,.no-print{display:none !important;}
  body{background:#fff;}
  /* 2026-09-17: 인쇄 대상 콘텐츠(.tbm-print-wrap 등)는 #app 의 직접 자식인데, #app 자체의 모바일
     하단 내비게이션용 padding-bottom(약 92px≈24mm)이 인쇄에서 리셋된 적이 없어 모든 인쇄물 맨 끝에
     빈 여백이 그대로 따라붙고 있었다 — 내용이 페이지 경계에 딱 걸리면 그 여백만으로 빈 페이지가
     하나 더 생길 수 있다(교육자료 첨부 시 실제로 확인된 원인 중 하나). 인쇄에는 이 여백이 필요
     없으므로 0으로 리셋한다. */
  #app{padding:0;max-width:none;}
  .wp-wrap{padding:0;max-width:none;}
  .wp-doc{background:#fff;}
  /* 섹션 경계에서 강제로 페이지를 넘기지 않는다 — 남는 공간에 다음 내용이 이어진다 */
  .wp-sec{border:none;margin:0;padding:0;max-width:none;break-inside:auto;}
  .wp-sec + .wp-sec{margin-top:6mm;}
  /* 2026-10-30: 별도 서식(중량물·크레인 대여동의·밀폐공간·방사선)은 새 쪽을 강제하지 않는다 — 앞 서식이 끝난 쪽에 공간이 남으면 이어서 인쇄하고, 내용이 실제로 넘칠 때만 다음 쪽으로 넘어간다.
     (예전에는 서식마다 break-before:page 를 걸어, 가스 점검표 뒤 쪽에 큰 공백을 남긴 채 크레인 대여동의서가 다음 쪽에서 시작했다.) 서식 구분은 위 6mm 간격과 서식 제목·바닥줄(관리번호·문서버전)로 한다.
     서식 제목·소제목은 뒤 내용과 붙고(break-after:avoid), 표는 한 줄 단위로만 쪼개지며, 서명·동의 블록(.wp-keep·.wp-scell)은 통째로 유지된다.
     자기 쪽 구성을 가진 고소작업대 작업계획서(.wpa-doc)와 안내 그림 쪽(.wpa-guide)만 예전처럼 새 쪽에서 시작한다. */
  .wp-form-break{break-before:auto;margin-top:6mm;}
  .wp-form-break.wpa-doc,.wp-form-break.wpa-guide{break-before:page;margin-top:0;}
  /* TBM 작업 전 안전교육 자료 첨부 페이지 — 선택한 TBM에만 존재하는 블록이라 화면에는 숨겨두고
     인쇄에서만 새 페이지로 보여준다. 원본 비율 유지(object-fit 대신 max-height로 A4 안에 맞춤,
     찌그러뜨리거나 자르지 않음).
     2026-09-17 수정: display:flex + justify-content:center + min-height:250mm 조합이 크로미움
     인쇄 페이지 분할(fragmentation)에서 flex 컨테이너 내부(캡션/이미지 사이)에 원치 않는 강제
     페이지 나누기를 일으키고, min-height 로 지정한 박스를 다 채우려다 뒤에 빈 페이지까지 하나
     더 만드는 것을 실제 인쇄 결과(1장:TBM, 2장:캡션만, 3장:이미지, 4장:공백)로 확인했다.
     원인은 이 flex/min-height 조합 자체이지 page-break-after 가 아니다(그런 규칙은 없었음) —
     일반 블록 레이아웃(text-align 중앙정렬)으로 바꾸고 min-height 를 없애 해결한다. */
  .tbm-material-page{display:block !important;text-align:center;break-before:page;break-after:auto;}
  .tbm-material-cap{break-after:avoid;}
  /* 캡션 한 줄(약 10mm) 몫을 남겨두고, 인쇄영역(277mm×190mm, @page margin:10mm 기준)보다
     여유 있게 잡아 이미지+캡션 합산 높이가 한 페이지를 넘기지 않게 한다. */
  /* !important 필요: 화면용 기본 규칙(.tbm-material-img{max-width:100%}, 파일 뒤쪽)이 이 인쇄 전용
     값과 동일한 우선순위(specificity)라 소스 순서상 나중에 오는 화면용 규칙이 그냥 두면 이겨버린다. */
  .tbm-material-img{max-height:260mm !important;max-width:188mm !important;}
  /* 긴 표(JSA·안전조치·출입인원 등)는 페이지에 걸쳐 이어질 수 있게 하되,
     한 행(tr)은 페이지 경계에서 쪼개지지 않고, 머리글(thead)은 다음 페이지에도 반복한다 */
  .wp-doc-t{break-inside:auto;}
  .wp-doc-t thead{display:table-header-group;}
  .wp-doc-t tfoot{display:table-footer-group;}
  .wp-doc-t tr{break-inside:avoid;}
  /* 작은 덩어리만 통째로 유지(서명 한 칸, 유지 표시한 블록). 큰 섹션 전체에는 걸지 않는다 */
  .wp-scell,.wp-keep,.wp-doc-deleted{break-inside:avoid;}
  /* 제목이 페이지 맨 아래에 혼자 남지 않게 다음 내용과 붙인다 */
  .wp-doc-title,.wp-doc h4,.wp-doc h5{break-after:avoid;}
  .wp-doc-foot{break-inside:avoid;}
  /* JSA(jsa-print-*) — 원본 양식 표. 정보블록은 통째로 유지, 본문표는 페이지에 걸쳐 이어지되
     행 단위로만 쪼개지고, 머리글(작업단계 등 4열 제목)이 다음 페이지에도 반복된다. */
  .jsa-print-head{break-inside:avoid;}
  .jsa-print-body{break-inside:auto;}
  .jsa-print-body thead{display:table-header-group;}
  .jsa-print-body tr{break-inside:avoid;}
  @page{size:A4 portrait;margin:10mm;}
  /* 수시위험성평가 인쇄 — 구역마다 쪽을 끊지 않는 연속 흐름(2026-11-02): 기본정보 → 전체 위험성평가표 → 개선 전후 사례가 한 문서처럼 앞 내용이 끝난 자리에서 이어진다.
     원인(실제 PDF 로 확인): ① '전체 위험성평가표' 구역만 가로 용지(이름 있는 @page radhocLandscape + .radhoc-print-landscape{page:radhocLandscape})였다. CSS 는 쪽 이름이 바뀌는 곳마다 쪽을 강제로 나누므로
     기본정보(세로) → 평가표(가로) → 개선 전후 사례(세로)가 구역마다 새 쪽에서 시작했고, 앞 쪽의 남는 공간(재현 사례: 1쪽의 86%)을 쓸 수 없었다.
     ② 개선사례 한 건 전체에 break-inside:avoid 가 걸려 있어, 사진이 여러 쌍이라 한 쪽을 넘는 사례는 다음 쪽 맨 위로 통째로 밀렸고 그 앞에 '개선 전후 사례' 제목만 남은 쪽이 생겼다.
     조치: 가로 용지를 없애 모든 구역을 같은 A4 세로 쪽 흐름에 둔다(마크업의 radhoc-print-landscape 클래스는 더는 쓰이지 않지만 그대로 둔다 — JS 는 바꾸지 않음).
     사례는 쪼갤 수 있게 하고(break-inside:auto), 더 쪼개면 안 되는 작은 덩어리 — 정보 표(.radhoc-print-head) · 평가표 한 행(.radhoc-print-body tr) · 사진 한 쌍(.radhoc-phrow, 전|후 한 줄) — 만 통째로 유지한다.
     제목·라벨(.radhoc-ptitle · .radhoc-plbl)은 다음 내용과 붙여(break-after:avoid) 쪽 맨 아래에 홀로 남지 않게 한다. 예전의 '위험요인 글을 첫 사진 줄에 붙이는' 규칙은 뺐다 — 사진 한 쌍이 남은 공간보다 크면 글까지 함께 다음 쪽으로 밀려 앞 쪽 공백만 키웠다.
     마지막 구역·마지막 사례의 아래 여백(14mm·10mm)은 없앤다 — 내용이 쪽 끝에 닿을 때 이 여백 때문에 내용 없는 쪽이 하나 더 붙는 것을 막는다.
     세로 폭(190mm)에서는 평가표 머리글('위험도'·'개선 전 위험도')이 칸 밖으로 넘치거나 한 글자만 다음 줄로 넘어가므로 인쇄에서만 열 너비를 조정한다(합계 100%, 화면은 그대로 · 글자 크기·테두리·음영 그대로).
     열 너비는 colgroup 의 인라인 style 을 이겨야 해서 !important 를 쓴다. 글자 한 줄 최소 폭: '위험도' 10.5mm(5.9% = 11.2mm), '사고/빈도' 7.4mm(4.2% = 8.0mm), '위험분류' 15.1mm(8.5% = 16.2mm). */
  .radhoc-print-body{break-inside:auto;}
  .radhoc-print-body thead{display:table-header-group;}
  .radhoc-print-body tr{break-inside:avoid;}
  .radhoc-print-head{break-inside:avoid;}
  .radhoc-print-case{break-inside:auto;margin-bottom:10mm;}
  .radhoc-ptitle,.radhoc-plbl{break-after:avoid;}
  .radhoc-print-sec:last-child,.radhoc-print-case:last-child,.radhoc-print-sec:last-child > :last-child,.radhoc-print-case:last-child > :last-child{margin-bottom:0;}
  .radhoc-eval-table col:nth-child(1){width:9% !important;}
  .radhoc-eval-table col:nth-child(2){width:8.5% !important;}
  .radhoc-eval-table col:nth-child(3){width:25.9% !important;}
  .radhoc-eval-table col:nth-child(4),.radhoc-eval-table col:nth-child(5),.radhoc-eval-table col:nth-child(8),.radhoc-eval-table col:nth-child(9){width:4.2% !important;}
  .radhoc-eval-table col:nth-child(6),.radhoc-eval-table col:nth-child(10){width:5.9% !important;}
  .radhoc-eval-table col:nth-child(7){width:28% !important;}
  /* 평가표 상단 사진(.radhoc-print-photos)에 가로로 아주 긴 사진(약 4.5:1 이상)이 있으면, 평가표가 세로 폭(190mm)에 들어오면서 사진이 쪽 폭을 넘어 Chrome 이 문서 전체를 약 9% 줄여 찍었다(가로 용지였던 수정 전에는 생기지 않음).
     사진 폭을 쪽 폭 안으로 묶어 글자 크기를 지킨다(사진 비율은 max-height 와 함께 그대로 유지). */
  .radhoc-print-photos img{max-width:100%;}
  /* 수시위험성평가 인쇄 디자인 일치(2026-11-01) — 웹 출력 미리보기에서 보이는 회색 제목 칸(#e7e6e6)·표 테두리를 인쇄·PDF 에서도 그대로.
     원인(실제 PDF 로 확인): 제목 칸 음영은 background 로 그려지는데, 브라우저 인쇄 창의 "배경 그래픽" 옵션이 꺼져 있으면(Chrome·Edge 기본값) 배경이 인쇄되지 않아
     음영이 모두 흰색이 됐다(허가서·TBM·JSA 는 2026-10-28/29 에 print-color-adjust:exact 를 받았지만 수시평가 출력 .radhoc-print-wrap 만 빠져 있었다 — 계산값 economy).
     ① print-color-adjust:exact 는 안쪽 요소로 상속되므로 맨 바깥에 한 번만 지정하면 기본정보 표·평가표 머리글·사고 정보 표 등 모든 제목 칸에 적용된다(옵션과 무관).
     ② 같은 PDF 에서 표의 오른쪽 바깥 테두리가 거의 사라져 있었다(잉크 폭 0.01~0.04mm, 왼쪽은 0.33mm — Chrome·Edge 모두): 표는 border-collapse 라 오른쪽 바깥선이 표 상자 끝(인쇄 내용 영역 오른쪽 끝, A4 세로 200mm·
        가로 289mm) 바깥쪽에 그려져 그대로 잘린다 → 문서 오른쪽만 0.3mm 안쪽으로 들여 바깥선이 온전히 찍히게 한다(실제 PDF 잉크 폭 0.26mm = 1px 로 복구). 왼쪽 바깥선은 내용 영역 안쪽에 온전히 찍히므로 건드리지 않는다
        — 허가서·TBM·JSA 의 좌우 0.3mm(총 0.6mm)보다 변경이 적어, 시험 7개 평가에서 쪽 수·본문 글·사진 위치·쪽 끝이 수정 전과 같았다(좌우 모두 들였을 때는 평가명 한 칸이 한 단어 먼저 줄바꿈되는 사례가 1건 있었다).
     위 공통 규칙(.wp-doc,.tbm-print-wrap,.jsa-print)은 건드리지 않고 수시평가 전용 규칙을 따로 둔다 — 다른 출력물에 영향 없음. 화면(웹 미리보기) 규칙은 그대로. */
  .radhoc-print-wrap{-webkit-print-color-adjust:exact;print-color-adjust:exact;box-sizing:border-box;padding-right:.3mm;}
  /* TBM 일지(.tbm-print-wrap) 쪽 나눔 — 2026-10-28 수정.
     바깥 표(.tbm-print-table)의 행 중 '위험요인·안전점검·참석자' 행은 안에 중첩 표(.tbm-print-sub)를 통째로 담은 큰 행이다.
     예전 규칙 `.tbm-print-table tr{break-inside:avoid}` 는 후손 선택자라 이 큰 바깥 행까지 '쪼개지 말라'가 되어,
     남은 공간에 들어가지 않으면 표 전체가 다음 쪽으로 넘어가고 앞 쪽(실제 확인: 1쪽의 약 75%)이 비었다.
     → 바깥 행은 자연스럽게 쪼개지게(짧은 행은 줄 수가 적어 어차피 안 쪼개짐) 하고,
       쪼개지지 않아야 하는 단위는 '안쪽 표의 행' 하나로 옮긴다(한 행이 한 쪽보다 길면 브라우저가 알아서 이어 그림 — 내용 누락 없음).
       안쪽 표의 제목 행(위험요인/대책 등)은 thead 라 쪽이 바뀌면 다시 나오고, 제목 행만 쪽 맨 아래에 홀로 남지 않게 다음 행과 붙인다. */
  .tbm-print-table > tbody > tr{break-inside:auto;}
  .tbm-print-sub tr{break-inside:avoid;}
  /* 한 행이 쪽의 큰 부분(약 60mm↑)을 차지하면(tbm.js markLongPrintRows) 통째로 넘기지 않고 남은 공간부터 이어 그린다 */
  .tbm-print-sub tr.tbm-row-long{break-inside:auto;}
  .tbm-print-sub thead{display:table-header-group;}
  .tbm-print-sub thead tr{break-after:avoid;}
  .tbm-print-head3{break-inside:avoid;}

  /* ---- 인쇄 디자인 일치(2026-10-28) — TBM 일지(.tbm-print-wrap)·안전작업허가서(.wp-doc, #printDoc)·JSA 위험성평가(.jsa-print, 2026-10-29 추가) ----
     ① 음영: 브라우저 인쇄 창의 "배경 그래픽" 옵션이 꺼져 있으면(기본값) 표 제목·구분 칸의 회색 배경이 흰색으로 찍혔다.
        print-color-adjust:exact 는 안쪽 요소로 상속되므로 문서 맨 바깥에 한 번만 지정하면 그 안의 모든 표·칸에 적용된다(옵션과 무관).
     ② 테두리: border-collapse 표의 바깥 테두리는 두께의 절반이 표 상자 밖으로 나가는데, 인쇄 내용 영역 가장자리에서 그 절반이 잘려
        오른쪽(·왼쪽) 바깥선이 가늘어지거나 사라졌다(실제 PDF 확대로 확인) → 문서 좌우를 0.3mm(≈1px) 안쪽으로 들여 바깥선이 온전히 찍히게 한다.
        표 너비·열 비율은 그대로이고 내용 폭만 0.6mm 줄어든다(0.6mm 로 들였더니 줄바꿈 위치가 바뀌어 한 행이 걸치는 경계 사례에서 쪽 끝 공백이 생겨 필요한 만큼만 줄였다).
     ③ 허가서 표의 긴 연속 글자(영문 주소·품번 등)가 칸·표를 용지 밖으로 밀지 않게 칸 안에서 줄바꿈한다(TBM 표는 이미 word-break:break-word).
     (JSA 는 열 너비가 고정(table-layout:fixed)이고 칸에 word-break 가 이미 있어 ③ 은 필요 없고, 제목 칸 음영도 처음부터 #e7e6e6 이라 ①②만 적용한다.)
     ④ 허가서 표 제목 칸 음영은 TBM 일지 제목 칸과 같은 #e7e6e6 (화면 #eee 보다 아주 조금 진해 흑백 인쇄에서도 구분된다). */
  .wp-doc,.tbm-print-wrap,.jsa-print{-webkit-print-color-adjust:exact;print-color-adjust:exact;box-sizing:border-box;padding-left:.3mm;padding-right:.3mm;}
  .wp-doc-t th{background:#e7e6e6;}
  .wp-doc-t th,.wp-doc-t td,.wp-doc-row2 > div,.wp-doc-sub,.wp-doc-note,.wp-doc-title{overflow-wrap:anywhere;}
  .wp-doc-row2 > div{min-width:0;max-width:100%;}

  /* ---- 구평공장 일일 안전점검(dinsp) 인쇄 전용, 2026-09-18 ----
     TBM에서 확인된 Chromium 버그(display:flex + min-height 조합이 빈 페이지를 만듦)를 피해
     사진 블록은 전부 plain block 레이아웃만 쓴다. 실제 내용(선택된 항목) 수만큼만 DOM을
     만들고(JS 쪽에서 처리) CSS 로는 빈 칸을 채우지 않는다. */
  .dinsp-print-table{break-inside:auto;}
  .dinsp-print-table tr{break-inside:avoid;}
  .dinsp-print-table thead{display:table-header-group;}
  .dinsp-card,.dinsp-photo-wrap{break-inside:avoid;}
  .dinsp-h2{break-after:avoid;}
  /* 2026-09-17 수정: 점검사례를 flex 카드 그리드(.dinsp-card-grid)로 나열하던 방식은 카드 하나가
     break-inside:avoid 라서 사진이 큰 카드는 통째로 다음 페이지로 밀려나며 앞 페이지에 큰 공백을
     남겼다(실제 PDF로 확인된 원인). 표(<table>) 기반으로 바꿔 행(tr) 단위로만 자연스럽게 다음
     페이지로 넘어가게 한다 — 이 파일 위쪽의 다른 표들과 동일한 3종세트 원칙. */
  .dinsp-case-table{break-inside:auto;}
  .dinsp-case-table tr{break-inside:avoid;}
}

/* ---------- 구평공장 일일 안전점검(dinsp) / 현장 의견수렴(ff) 공용 화면 보조 클래스 ---------- */
.field-row{display:flex;gap:12px;flex-wrap:wrap;}
.field-row .field{flex:1 1 220px;}
.chips{display:flex;flex-wrap:wrap;gap:6px;}
/* 진단개선/자율개선(improve) 실시자 선택 칩 */
.pchips{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0;}
.pchip{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:13px;max-width:100%;}
.pchip-lead-on{border-color:var(--mint);background:var(--mint-tint);}
.pchip-x{border:0;background:transparent;cursor:pointer;color:var(--ink-2);font-size:13px;line-height:1;padding:0;}
.pchip-x:hover{color:var(--red-ink);}
.pchip-lead{border:0;background:transparent;cursor:pointer;color:var(--mint-ink);font-size:12px;padding:0;text-decoration:underline;}
.lead-tag{display:inline-block;background:var(--mint-ink);color:#fff;border-radius:3px;padding:0 5px;font-size:11px;font-weight:800;}
.badge{display:inline-block;background:var(--surface-2);border:1px solid var(--line-strong);border-radius:4px;padding:2px 8px;font-weight:700;font-size:13px;}
.im-participants{line-height:1.6;word-break:break-word;}
/* 직원 검색형 드롭다운(콤보박스) — 진단개선/자율개선 실시자·평가자 검색 공용 */
.staff-combo{position:relative;margin-top:6px;}
.staff-combo-input{width:100%;box-sizing:border-box;}
.staff-combo-panel{position:absolute;left:0;right:0;z-index:40;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:0 6px 20px rgba(0,0,0,.12);max-height:260px;overflow-y:auto;margin-top:4px;}
/* 2026-09-25: 사람 선택 드롭다운 한 줄 표시 "이름 · 소속(반) · Family" — 좁은 화면에서는 자연스럽게 줄바꿈 */
.staff-combo-item{display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline;column-gap:6px;row-gap:2px;width:100%;box-sizing:border-box;text-align:left;background:transparent;border:0;border-bottom:1px solid var(--line);padding:8px 12px;cursor:pointer;font:inherit;}
.staff-combo-item .sci-meta{min-width:0;overflow-wrap:anywhere;}
.staff-combo-item .sci-meta::before{content:"· ";}
.staff-combo-item:last-child{border-bottom:0;}
.staff-combo-item:hover:not(.disabled),.staff-combo-item.is-active{background:var(--surface-2);}
.staff-combo.inline .staff-combo-panel{position:static;box-shadow:none;max-height:240px;}
.staff-combo-item.disabled{cursor:not-allowed;opacity:.55;}
.staff-combo-item .sci-name{font-weight:700;}
.staff-combo-item .sci-meta{font-size:12px;color:var(--ink-2);}
.staff-combo-msg{padding:10px 12px;color:var(--ink-2);font-size:13px;}
.staff-combo-msg.err{color:var(--red-ink);}
/* 개선제안(2026-09-30) — 목록 행/칩/단계표시/표/체크박스행 보조 클래스 */
.list-row{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);cursor:pointer;font:inherit;}
.list-row:hover{background:var(--surface-2);}
.lr-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.lr-sub{margin-top:4px;}
.chip-row{display:flex;flex-wrap:wrap;gap:6px;}
.chip-x{border:0;background:transparent;cursor:pointer;font-weight:700;padding:0 0 0 4px;}
.wiz-steps{font-weight:700;color:var(--ink-2);margin-bottom:10px;font-size:13px;}
.wiz-step.active{color:var(--ink);}
.tbl{width:100%;border-collapse:collapse;font-size:13px;}
.tbl th,.tbl td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;}
.section-divider{border-top:2px solid var(--line-strong);padding-top:10px;margin-top:2px;font-size:15px;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
@media (max-width:520px){.grid2{grid-template-columns:1fr;}}
.type-detail{background:var(--surface-2);border-radius:var(--radius);padding:10px;margin:8px 0;}
/* 안전보건/LNG 작성화면 3열 체크리스트 — .wp-table 은 다른 모듈도 쓰므로 그대로 두고, 이 모듈
   전용 보조 클래스로만 기타사항 병합셀 스타일을 준다. */
.di-checklist-3col .di-etc-cell{vertical-align:middle;font-size:13px;}
.di-checklist-3col .di-etc-line{margin-bottom:4px;}
.di-checklist-3col .di-etc-line:last-child{margin-bottom:0;}
.dinsp-print{max-width:190mm;margin:0 auto;color:#111;}
.dinsp-title{text-align:center;font-size:20px;margin:0 0 8px;}
.dinsp-head-table,.dinsp-print-table{width:100%;border-collapse:collapse;margin-bottom:8px;}
.dinsp-head-table th,.dinsp-head-table td,.dinsp-print-table th,.dinsp-print-table td{border:1px solid #999;padding:4px 6px;font-size:13px;text-align:left;vertical-align:top;}
.dinsp-head-table th,.dinsp-print-table th{background:#eee;white-space:nowrap;}
/* 일자/점검자 표는 한 행에 3교대를 전부 넣어야 해서 본문표보다 살짝 작은 글자를 쓴다(요청:
   PC 화면이 아니라 실제 A4 폭 기준으로 줄바꿈 없이 보이게). */
.dinsp-head-onerow th,.dinsp-head-onerow td{font-size:11px;padding:4px 5px;}
.dinsp-shift-cell{white-space:nowrap;}
.dinsp-shift-label{color:#555;}
.dinsp-h2{font-size:14px;margin:10px 0 5px;border-left:4px solid #333;padding-left:6px;}
.dinsp-orgs{font-size:13px;margin-bottom:8px;}
/* 안전보건/LNG 점검표 3열([점검항목|기타사항|점검결과]) 인쇄용 — 헤더는 일반 th 그대로 3칸
   독립이고, 기타사항 칸만 JS 에서 rowspan 으로 병합해 만든다. 폭 비율은 A4 기준(58/26/16%).
   환경점검은 이 클래스를 쓰지 않아 기존 2열 그대로 유지된다. */
.dinsp-checklist-3col{table-layout:fixed;}
.dinsp-checklist-3col th:nth-child(1),.dinsp-checklist-3col td:nth-child(1){width:58%;}
.dinsp-checklist-3col th:nth-child(2),.dinsp-checklist-3col td:nth-child(2){width:26%;}
.dinsp-checklist-3col th:nth-child(3),.dinsp-checklist-3col td:nth-child(3){width:16%;}
.dinsp-etc-cell{vertical-align:middle;font-size:12px;}
.dinsp-etc-line{margin-bottom:3px;}
.dinsp-etc-line:last-child{margin-bottom:0;}
.dinsp-card{border:1px solid #999;border-radius:4px;padding:8px;font-size:13px;margin-bottom:6px;}
.dinsp-card-h{margin-bottom:4px;}
/* 점검사례 표(2건/행) — 기존 회사 양식처럼 정보밀도를 높이고, 사진은 개선전/후를 한 셀 안에서
   나란히(flex 2열) 배치한다. */
.dinsp-case-table{width:100%;border-collapse:collapse;margin-bottom:8px;}
.dinsp-case-table td{border:1px solid #999;padding:6px;font-size:12px;vertical-align:top;width:50%;}
.dinsp-case-head{font-size:10.5px;color:#666;}
.dinsp-case-title{font-weight:700;margin-bottom:4px;}
.dinsp-case-foot{margin-top:4px;font-size:11.5px;}
.dinsp-case-photos{display:flex;gap:6px;align-items:flex-start;}
.dinsp-case-photos>.dinsp-photo-block{flex:1 1 0;min-width:0;margin-top:0;}
.dinsp-photo-placeholder{flex:1 1 0;min-width:0;font-size:11px;color:#777;font-style:italic;padding:2px 0;}
/* 사진 블록: 여러 장이면 한 줄에 나란히(flex-wrap).
   2026-09-24: 인쇄/PDF/이미지저장 전용 — 원본 방향과 무관하게 모든 사진을 같은 4:3 가로 프레임
   (폭 45mm ≈ 170px = 기존에 가로사진이 점검내용 표 한 칸의 개선 전/후 한쪽에 표시되던 폭 그대로)에
   object-fit:fill 로 꽉 채운다. 세로·정사각
   사진은 가로로 늘어나지만 잘리는 부분은 없다. 빨간 표시(boxesOverlayHtml)는 이미지 기준 0~1 비율
   좌표를 wrap 기준 %로 그리는데, fill 은 이미지 전체를 wrap 박스에 가로·세로 각각 선형으로 맞추므로
   표시가 원래 위험부위를 그대로 가리킨다. 이 클래스는 일일점검 인쇄 화면에서만 쓰인다 —
   등록/상세/확대보기(photo-grid·photo-view)의 원본 비율 표시는 그대로다. */
.dinsp-photo-block{margin-top:6px;display:flex;flex-wrap:wrap;gap:6px;align-items:flex-start;}
.dinsp-photo-label{font-size:11px;color:#555;margin-bottom:2px;flex-basis:100%;}
.dinsp-photo-wrap{position:relative;display:block;flex:0 1 45mm;min-width:0;aspect-ratio:4/3;overflow:hidden;}
.dinsp-photo-wrap img{position:absolute;left:0;top:0;width:100%;height:100%;object-fit:fill;display:block;}

.banner.warn{background:#fff8e6;border:1px solid #e0b93d;color:#7a5c00;}

/* ---------- 직원 관리(staff-admin) ---------- */
.sa-toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px;align-items:center;}
.sa-toolbar input[type="text"]{flex:1 1 200px;min-width:140px;padding:8px 10px;border:1px solid var(--line);border-radius:6px;font-size:14px;}
/* 2026-10-05 직원 관리: 사업장 필터 · 회사 → 사업장 2단 선택 */
.sa-toolbar .sa-fac-filter{flex:0 1 220px;min-width:0;max-width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;font-size:14px;background:var(--white);}
.sa-facpick{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 10px;}
@media (max-width:420px){ .sa-facpick{grid-template-columns:minmax(0,1fr);} }
.sa-fac-cell{white-space:nowrap;}
.sa-table-wrap{overflow-x:auto;margin-bottom:10px;}
.sa-table{width:100%;border-collapse:collapse;font-size:13px;white-space:nowrap;}
.sa-table th,.sa-table td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:left;}
.sa-table th{background:var(--surface-2);font-weight:700;}
.sa-actions{display:flex;flex-wrap:wrap;gap:4px;}
.sa-actions .btn{white-space:nowrap;}

/* 명부 CSV 업로드 미리보기 — .modal-tall(제목 고정 · 본문 스크롤 · 버튼 하단 고정)과 함께 쓴다.
   직원이 10명이든 300명이든 팝업 카드 자체는 뷰포트 밖으로 자라지 않고, 표만 그 안에서 스크롤된다. */
.modal-subhead{flex:0 0 auto;padding:0 18px 10px;font-size:13px;color:var(--ink-2);}
/* position:sticky 는 border-collapse:collapse 표에서 브라우저별로 행 높이가 깨지는 등
   비정상 동작을 한다(스펙상 지원 대상 밖) — 스크롤 헤더 고정이 필요한 표만 separate 로 바꾼다.
   가로선만 쓰므로(세로 border 없음) collapse→separate 로 바꿔도 겹선 문제는 생기지 않는다.
   table-layout:fixed + colgroup 로 열 너비를 고정한다 — auto 레이아웃에 맡기면 5개 열 중 조직
   열이 지나치게 좁게 배분되어(예: 42px) 짧은 조직명도 글자 단위로 줄바꿈되며 행 높이가
   3배로 부풀어 오르는 문제가 있었다(실측 확인: 34px→75px). 고정 폭이면 이 문제가 없다. */
.sa-table-sticky{border-collapse:separate;border-spacing:0;table-layout:fixed;min-width:520px;}
.sa-table-sticky thead th{position:sticky;top:0;z-index:1;}
.sa-table-sticky td,.sa-table-sticky th{overflow:hidden;text-overflow:ellipsis;}
.sa-org-cell{white-space:normal;word-break:break-word;text-overflow:clip;}
.sa-badge{display:inline-block;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:700;background:var(--surface-2);}
.sa-badge-new{background:var(--mint-tint);color:var(--mint-ink);}
.sa-badge-chg{background:#fff8e6;color:#7a5c00;}
.sa-badge-err{background:var(--red-tint);color:var(--red-ink);}
.sa-apply-progress{padding:20px 4px;}
.sa-apply-progress p{font-size:14px;margin:0 0 10px;}
.sa-progress-bar{width:100%;height:14px;border-radius:7px;background:var(--surface-2);overflow:hidden;}
.sa-progress-fill{height:100%;background:var(--mint);transition:width .25s ease;}

/* =============================================================================
   수시위험성평가(radhoc-*) / TBM(tbm-*) 공통 화면 요소.
   JSA 모듈의 명명 관례·반응형 방식(카드형 flex, min-width 820px 에서 가로 배치)을 그대로 따른다.
   ========================================================================== */
.radhoc-wrap,.tbm-wrap{max-width:960px;margin:0 auto;padding:0 2px 40px;}
.radhoc-h2{font-size:16px;margin:0 0 12px;}
.radhoc-subh{font-size:13.5px;font-weight:700;margin:14px 0 6px;color:var(--ink-2);}

.radhoc-reason-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-bottom:10px;}
@media(min-width:640px){.radhoc-reason-grid{grid-template-columns:repeat(2,1fr);}}
.radhoc-reason-card{background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);
  padding:14px;text-align:left;font-weight:800;display:flex;flex-direction:column;gap:4px;min-height:64px;}
.radhoc-reason-card:active{background:var(--surface-2);}
.radhoc-reason-card .rrc-d{font-size:12px;font-weight:600;color:var(--ink-2);}

.radhoc-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;}
/* 체크박스·라디오는 제외(2026-09-24) — 전에는 필터줄 안 '오늘만' 체크박스에도 이 규칙(flex-basis 140px,
   min-height 50px, padding)이 그대로 적용되어 선택표시가 가로 140px 이상으로 커졌다. */
.radhoc-filter select,.radhoc-filter input:not([type=checkbox]):not([type=radio]){flex:1 1 140px;min-height:var(--field-h);border:1px solid var(--line-strong);border-radius:6px;padding:0 9px;font-size:13.5px;font-family:inherit;}

.radhoc-list{display:flex;flex-direction:column;gap:8px;}
.radhoc-list-row{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:10px 12px;}
.radhoc-list-row:active{background:var(--surface-2);}
.rlr-top{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.rlr-sub{margin-top:3px;}
.radhoc-badge{display:inline-block;font-size:11.5px;font-weight:700;background:var(--mint-tint);color:var(--mint-ink);
  border:1px solid var(--mint);border-radius:20px;padding:2px 10px;white-space:nowrap;}
.radhoc-badge.radhoc-badge-pending{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.radhoc-score-preview{width:100%;border-collapse:collapse;margin:4px 0 2px;font-size:13px;}
.radhoc-score-preview th,.radhoc-score-preview td{border:1px solid var(--line);padding:5px 8px;text-align:center;}
.radhoc-score-preview th{background:var(--surface-2);font-weight:700;font-size:12px;}

.radhoc-meta-grid{display:grid;grid-template-columns:1fr;gap:0 14px;}
@media(min-width:640px){.radhoc-meta-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));}}
.radhoc-check-row{display:flex;flex-wrap:wrap;gap:14px;margin:8px 0;font-size:13.5px;}
.radhoc-inline-check{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;}
/* TBM 목록 체크박스(오늘만·전체선택·행 선택, 2026-09-24) — 선택표시 자체는 18px 고정, 글자까지 포함한
   라벨 전체를 44px 높이의 터치영역으로 쓴다. */
.tbm-check{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;min-height:44px;padding:0 6px 0 2px;
  font-size:13.5px;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-tap-highlight-color:transparent;user-select:none;}
.tbm-check input[type=checkbox],.tbm-rowsel input[type=checkbox]{appearance:auto;-webkit-appearance:auto;flex:0 0 18px;
  width:18px;height:18px;min-width:18px;min-height:18px;max-width:18px;max-height:18px;margin:0;padding:0;accent-color:var(--mint);cursor:pointer;}
.tbm-check input:focus-visible,.tbm-rowsel input:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.tbm-selbar{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;margin:-2px 0 6px;}
.tbm-count{margin-right:auto;}
.tbm-bulkdel{flex:0 0 auto;max-width:100%;}
.tbm-row{display:flex;align-items:stretch;gap:4px;}
.tbm-rowsel{display:flex;align-items:center;justify-content:center;flex:0 0 36px;min-height:44px;cursor:pointer;-webkit-tap-highlight-color:transparent;}
.tbm-row>.radhoc-list-row{flex:1 1 auto;min-width:0;}
.tbm-row.is-sel>.radhoc-list-row{border-color:var(--mint);background:var(--mint-tint);}
.radhoc-filelist{margin:4px 0 10px;padding-left:18px;font-size:13px;}

.radhoc-det-head{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;}
.radhoc-sec{border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin-bottom:14px;background:var(--surface);}
.radhoc-sec>h3{font-size:14px;margin:0 0 10px;}
/* 산업재해 관련 첨부자료(2026-10-12) */
.radhoc-accfile{margin:8px 0 10px;}
.radhoc-accfile-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px;}
.radhoc-accbox{margin:10px 0;}
.radhoc-status-row{display:flex;flex-wrap:wrap;gap:8px;}
.radhoc-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;}

.radhoc-row-hd{display:none;}
@media(min-width:900px){
  .radhoc-row-hd{display:flex;gap:8px;padding:0 0 4px;font-size:11.5px;font-weight:700;color:var(--ink-2);}
  .radhoc-row-hd .f1{flex:1;} .radhoc-row-hd .f2{flex:1.5;} .radhoc-row-hd .f3{flex:1.6;} .radhoc-row-hd .fa{width:90px;flex:0 0 auto;}
}
.radhoc-row{display:flex;flex-direction:column;gap:8px;border:1px solid var(--line);border-radius:var(--radius);
  padding:12px;margin-bottom:10px;background:var(--surface-2);}
.radhoc-row-f label{display:block;font-size:11.5px;font-weight:700;color:var(--ink-2);margin-bottom:3px;}
.radhoc-row-f input,.radhoc-row-f textarea{width:100%;border:1px solid var(--line-strong);border-radius:6px;
  padding:8px 9px;font-size:14px;font-family:inherit;resize:vertical;min-height:38px;}
/* 평가행 '실제 개선 후 확인한 값' 체크박스 — 위 .radhoc-row-f input{width:100%;min-height:38px;padding:8px 9px} 가 체크박스까지 먹어 커지던 것을 이 체크박스에만 국소 override(문구 왼쪽에 일렬 정렬) */
.radhoc-row-f .radhoc-inline-check{display:inline-flex;align-items:center;gap:6px;margin:4px 0 0;}
.radhoc-row-f .radhoc-inline-check input[type="checkbox"]{width:18px;height:18px;min-width:18px;min-height:18px;max-width:18px;padding:0;margin:0;flex:0 0 18px;}
.radhoc-fsr{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.radhoc-fsr input{width:64px;flex:0 0 auto;}
/* 개선사례 수정 모달 '개선일자' — 위 빈도/강도 숫자칸용 .radhoc-fsr input{width:64px} 가 날짜칸까지 먹어 2026-10-12 가 잘리던 것을 이 칸에만 국소 override */
.radhoc-fsr input#ceComplete{width:170px;min-width:170px;max-width:100%;}
/* 개선사례 사진 올리는 중·실패 칸(2026-11-01) — 사진 칸(.photo-cell)과 같은 격자 안에서 같은 높이로 보인다. 칸 안의 "사진 업로드 중..." 글자와 돌아가는 표시가 올리는 동안 보인다 */
.ce-phase{margin-bottom:12px;}
.ce-up-tile{width:100px;min-height:100px;box-sizing:border-box;border-radius:6px;border:1px dashed var(--line-strong);background:var(--surface-2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:6px;text-align:center;font-size:12px;line-height:1.3;}
.ce-up-tile.is-err{width:168px;border-style:solid;border-color:var(--red-ink);background:var(--red-tint);}
.ce-up-msg{display:flex;flex-direction:column;align-items:center;gap:3px;max-width:100%;}
.ce-up-msg b{font-weight:700;word-break:keep-all;}
.ce-up-err b{color:var(--red-ink);}
.ce-up-why{color:var(--ink-2);font-size:11px;overflow-wrap:anywhere;}
.ce-up-pct{color:var(--ink-2);font-size:11px;min-height:14px;}
.ce-up-btns{display:flex;gap:4px;flex-wrap:wrap;justify-content:center;margin-top:2px;}
.ce-up-btns .btn{padding:3px 8px;font-size:11px;min-height:0;height:auto;width:auto;}
.ce-up-name{color:var(--ink-2);font-size:10px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.ce-spin{display:inline-block;width:16px;height:16px;box-sizing:border-box;border:2px solid var(--line-strong);border-top-color:var(--mint-ink);border-radius:50%;animation:ce-spin .8s linear infinite;vertical-align:-3px;}
@keyframes ce-spin{to{transform:rotate(360deg);}}
@media (prefers-reduced-motion:reduce){.ce-spin{animation-duration:2.4s;}}
.ce-up-stat{min-height:18px;margin:-4px 0 6px;font-size:12px;color:var(--ink-2);}
.ce-stat-ok{color:var(--mint-ink);font-weight:600;}
.ce-stat-err{color:var(--red-ink);font-weight:600;}
.photo-cell .pdel:disabled{opacity:.35;cursor:not-allowed;}
.radhoc-risk{font-size:12.5px;font-weight:700;white-space:nowrap;}
.radhoc-row-act{display:flex;gap:6px;flex-wrap:wrap;}
.radhoc-row-act .btn{flex:1 1 auto;min-height:34px;padding:5px 8px;font-size:12px;}
@media(min-width:900px){
  .radhoc-row{flex-direction:row;align-items:flex-start;}
  .radhoc-row-f{flex:1;} .radhoc-row-f.f2,.radhoc-row-f:nth-child(3){flex:1.5;}
  .radhoc-row-act{width:90px;flex:0 0 auto;flex-direction:column;}
}

.radhoc-case-card{border:1px solid var(--line-strong);border-radius:var(--radius);padding:14px;margin-bottom:12px;background:var(--surface);}

.tbm-pledge{background:var(--mint-tint);border:1px solid var(--mint);border-radius:var(--radius);
  padding:10px 16px;margin:6px 0 14px;color:var(--mint-ink);font-weight:700;font-size:13.5px;}
.tbm-precheck-hd{display:none;}
@media(min-width:640px){.tbm-precheck-hd{display:flex;gap:8px;font-size:11.5px;font-weight:700;color:var(--ink-2);padding:0 0 4px;}
  .tbm-precheck-hd span:first-child{flex:2;} .tbm-precheck-hd span:nth-child(2){width:70px;flex:0 0 auto;} .tbm-precheck-hd span:last-child{flex:1.4;}}
.tbm-precheck-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;border-bottom:1px dashed var(--line);padding:8px 0;}
.tbm-precheck-row .tpr-label{flex:2 1 200px;font-size:13.5px;}
.tbm-precheck-row input[type=text]{flex:1.4 1 160px;min-height:var(--field-h);border:1px solid var(--line-strong);border-radius:6px;padding:0 9px;font-family:inherit;}
.tbm-att-row{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;background:var(--surface-2);}
/* 2026-09-30b: 참석자 구분·서명상태·알림상태 · 참석자 등록(사내 직원 검색·선택 chip) */
.tbm-att-list .rlr-top{justify-content:flex-start;flex-wrap:wrap;gap:6px 8px;}
.tbm-att-list .rlr-top b{font-size:15px;}
.tbm-att-type{display:inline-block;font-size:11px;font-weight:700;padding:1px 7px;border-radius:999px;border:1px solid var(--line-strong);color:var(--ink-2);background:var(--surface);}
.tbm-att-type.in{border-color:var(--mint);color:var(--mint-ink);}
.tbm-st-pending,.tbm-st-needs_reconfirm{background:var(--surface);color:var(--ink-2);border:1px solid var(--line-strong);}
.tbm-st-needs_reconfirm{color:#9a5b00;border-color:#e8c27a;}
.tbm-att-noti{font-size:12px;font-weight:600;color:var(--ink-2);margin-left:auto;}
.tbm-att-noti.ok{color:var(--mint-ink);} .tbm-att-noti.warn{color:#9a5b00;} .tbm-att-noti.err{color:var(--red-ink);}
.tbm-att-noti small{font-weight:400;color:var(--ink-2);}
.tbm-seg{display:flex;gap:0;margin:0 0 12px;border:1px solid var(--line-strong);border-radius:10px;overflow:hidden;}
.tbm-seg button{flex:1 1 0;min-height:42px;border:0;background:var(--surface);font:inherit;font-weight:700;color:var(--ink-2);cursor:pointer;}
.tbm-seg button+button{border-left:1px solid var(--line-strong);}
.tbm-seg button.on{background:var(--mint);color:#fff;}
.tbm-att-modal .staff-combo-input{min-height:44px;font:inherit;font-size:16px;padding:9px 11px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink);-webkit-appearance:none;appearance:none;}
.tbm-att-modal .staff-combo-input:focus{outline:2px solid var(--mint);outline-offset:0;border-color:var(--mint);}
.tbm-picked{margin-top:12px;}
.tbm-picked-h{font-size:13px;font-weight:700;margin-bottom:6px;}
.tbm-chips{display:flex;flex-wrap:wrap;gap:6px;}
.tbm-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 4px 4px 10px;border-radius:999px;background:var(--mint-tint);color:var(--mint-ink);font-size:13.5px;font-weight:700;max-width:100%;}
.tbm-chip small{font-weight:500;color:var(--ink-2);font-size:11.5px;max-width:9em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.tbm-chip button{width:28px;height:28px;border:0;border-radius:999px;background:transparent;color:var(--mint-ink);font-size:17px;line-height:1;cursor:pointer;}
.tbm-chip button:hover{background:rgba(0,0,0,.06);}
.tbm-picked-empty{padding:6px 0;}
/* 2026-10-03b TBM 관리감독자 선택 → 교육대상자 참석 확정 대기 후보 · 관리감독자별 교육대상자 관리(10-02f '반장' 화면을 개념 정정) */
.tbm-sup-pick{display:flex;flex-direction:column;gap:6px;}
.tbm-sup-pick input[hidden]{display:none;}
.tbm-sup{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:6px 0 12px;background:var(--surface);}
.tbm-sup:empty{display:none;}
.tbm-sup-info{margin:0 0 4px;padding:8px 10px;border-radius:8px;background:var(--mint-tint);color:var(--mint-ink);font-size:13.5px;font-weight:600;word-break:keep-all;}
.tbm-sup .tbm-picked{margin-top:8px;}
.tbm-chip.add{background:#fff4e0;color:#8a4b0a;}
.tbm-cand-more{min-height:34px;border-radius:999px;}
.tbm-cand-outline{margin:6px 0 0;word-break:keep-all;}
.tbm-cand-outline .btn{min-height:32px;margin-left:4px;}
.tbm-cand-add{margin-top:8px;}
.tbm-cand-add .staff-combo-input{min-height:44px;font-size:16px;}
.tbm-sup-total{margin:10px 0 2px;font-size:14.5px;}
.tbm-sup-total b{color:var(--mint-ink);font-size:16px;}
.tbm-sup-list .tbm-sup-item.off{opacity:.65;}
.tbm-sup-item .rlr-top{gap:6px;flex-wrap:wrap;}
.tbm-sup-warn{color:#b42318;font-weight:600;}
.tbm-sup-in{color:var(--mint-ink);font-weight:700;}
.tbm-sup-modal{max-width:680px;}
.tbm-sup-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin:4px 0;}
.tbm-sup-ul{list-style:none;margin:0 0 8px;padding:0;border:1px solid var(--line);border-radius:var(--radius);max-height:min(42vh,360px);overflow:auto;}
.tbm-sup-ul li{border-bottom:1px solid var(--line);padding:0 8px;}
.tbm-sup-ul li:last-child{border-bottom:0;}
.tbm-sup-q{width:100%;min-height:44px;font-size:16px;padding:8px 11px;border:1px solid var(--line-strong);border-radius:var(--radius);margin-bottom:6px;font-family:inherit;}
.tbm-sup-hist{margin-top:10px;}
.tbm-sup-hist summary{cursor:pointer;font-weight:700;min-height:40px;display:flex;align-items:center;}
.tbm-sup-hist-ul{margin:4px 0;padding-left:18px;}
.tbm-self-banner{margin-bottom:12px;}
.tbm-step-pick{display:block;border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin-bottom:6px;background:var(--surface-2);}

/* 인쇄(원본 회사 양식 순서 재현) */
.radhoc-print-wrap,.tbm-print-wrap{background:#fff;color:#000;font-size:11.5px;max-width:1100px;margin:0 auto;}
.radhoc-print-sec{margin-bottom:14mm;}
.radhoc-ptitle{font-size:16px;font-weight:800;border-bottom:2px solid #000;padding-bottom:4px;margin-bottom:6px;}
.radhoc-print-head,.radhoc-print-body,.tbm-print-table,.tbm-print-sub,.tbm-print-head3{width:100%;border-collapse:collapse;table-layout:fixed;}
.radhoc-print-head th,.radhoc-print-head td,.radhoc-print-body th,.radhoc-print-body td,
.tbm-print-table th,.tbm-print-table td,.tbm-print-sub th,.tbm-print-sub td,.tbm-print-head3 th,.tbm-print-head3 td{
  border:1px solid #000;padding:4px 6px;vertical-align:top;overflow-wrap:break-word;word-break:break-word;white-space:pre-wrap;}
.radhoc-print-head th{background:#e7e6e6;font-weight:700;text-align:center;white-space:normal;width:110px;}
/* TBM 표는 상단 제목/관리감독자/ARKERD LEADER 비율(colgroup)과 본문 라벨 폭(colgroup)을
   직접 지정하므로, 위 안전점검용 공통 규칙의 고정 width:110px 를 그대로 물려받지 않는다
   (모든 th 를 110px 로 강제해 제목 칸이 극도로 좁아지던 문제의 원인이었다 — 2026-09-14h 수정). */
.tbm-print-table>tbody>tr>th,.tbm-print-head3 th{background:#e7e6e6;font-weight:700;text-align:center;white-space:normal;}
.tbm-print-table>tbody>tr>th.tbm-nowrap-label,.tbm-print-head3 th.tbm-nowrap-label{white-space:nowrap;}
.tbm-print-head3 td.tbm-head3-val{text-align:center;vertical-align:middle;white-space:pre-wrap;}
.radhoc-print-body thead th{background:#e7e6e6;font-weight:700;text-align:center;white-space:normal;}
.radhoc-eval-table td,.radhoc-eval-table th{padding:4px 5px;}
.radhoc-eval-table td.radhoc-num,.radhoc-eval-table th.radhoc-num{text-align:center;vertical-align:middle;white-space:nowrap;padding:4px 2px;}
.radhoc-print-photos{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0;}
.radhoc-print-photos img{max-height:160px;border:1px solid #000;}
/* 개선 전·후 사진 프레임(2026-10-31) — 수시위험성평가 출력양식·읽기전용 상세의 개선사례 사진(risk-adhoc.js casePhotoHtml / fitPhotoFrames).
   한 줄에 '개선 전 | 개선 후' 같은 크기 프레임 2개(칸 너비 가득, 사이 간격 3mm). 프레임은 너비 기준 비율(aspect-ratio)로 높이가 정해져 화면 미리보기와 A4 PDF 가
   같은 모양이다. 사진은 프레임 안에 원본 비율 그대로 통째로 들어간다(object-fit:contain — 자르거나 찌그러뜨리지 않음; 위험 부위가 잘리지 않는 것이 우선).
   프레임 비율은 사진 방향에 맞춰 JS 가 data-ph 로 정한다(p 세로 3:4 · 기본 정사각 · l 가로 4:3). 한 줄(전·후 한 쌍)은 쪽 경계에서 쪼개지지 않고 통째로 이동한다. */
.radhoc-phset{margin:4px 0 6px;}
.radhoc-phrow{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);column-gap:3mm;margin-bottom:3mm;break-inside:avoid;}
.radhoc-phcell{min-width:0;}
.radhoc-phframe{width:100%;aspect-ratio:1/1;box-sizing:border-box;border:1px solid #000;background:#fff;}
.radhoc-phset[data-ph="p"] .radhoc-phframe{aspect-ratio:3/4;}
.radhoc-phset[data-ph="l"] .radhoc-phframe{aspect-ratio:4/3;}
.radhoc-phframe img{display:block;width:100%;height:100%;object-fit:contain;object-position:center;}
.radhoc-plbl{font-size:11px;font-weight:700;color:#333;margin:8px 0 2px;}
.radhoc-pbody{white-space:pre-wrap;word-break:break-word;margin:0 0 6px;}
.tbm-ptitle{font-size:18px;font-weight:800;text-align:center;vertical-align:middle;background:#e7e6e6;line-height:1.6;white-space:normal;}
.tbm-ptitle-sub{font-size:12px;font-weight:700;display:inline-block;margin-top:2px;}

/* 작업 전 안전교육 자료 — 첨부 출력 페이지(화면에서는 숨김, 인쇄시에만 사용) */
.tbm-material-page{display:none;}
.tbm-material-cap{font-size:10px;color:#555;margin:0 0 6mm;text-align:center;}
.tbm-material-img{display:block;margin:0 auto;max-width:100%;}

/* 검색 가능한 콤보박스(작업 전 안전교육 자료 선택 등) */
.tbm-combo{position:relative;}
.tbm-combo-input{width:100%;min-height:var(--field-h);border:1px solid var(--line-strong);border-radius:6px;padding:0 10px;font-family:inherit;}
.tbm-combo-list{position:absolute;left:0;right:0;top:100%;z-index:20;background:var(--surface);border:1px solid var(--line-strong);
  border-radius:6px;max-height:220px;overflow-y:auto;box-shadow:0 4px 14px rgba(0,0,0,.12);margin-top:2px;}
.tbm-combo-item{padding:9px 12px;font-size:13.5px;cursor:pointer;border-bottom:1px solid var(--line);}
.tbm-combo-item:last-child{border-bottom:none;}
.tbm-combo-item:hover,.tbm-combo-item:active{background:var(--surface-2);}
.tbm-combo-empty{padding:9px 12px;}
.tbm-material-selwrap{margin-top:8px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;}
.tbm-legacy-preedu{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;}
.tbm-legacy-preedu .radhoc-pbody{margin-bottom:8px;}
.tbm-print-head3{margin-bottom:0;}
.tbm-print-table{margin-top:-1px;}
.tbm-print-sub{margin:2px 0;}
.tbm-print-sub th{background:#f2f2f2;}
/* 안전점검 내부 표(점검사항 55% / 작업 전 확인 10% / 점검 결과·특이사항 35%, 2026-09-14i)
   — 체크칸은 좁게, 가로·세로 가운데 정렬만 별도로 지정한다. */
.tbm-precheck-print-table td.tbm-precheck-checkcol{text-align:center;vertical-align:middle;white-space:nowrap;}
.tbm-sig-img{max-height:60px;max-width:140px;}
.tbm-attend .radhoc-sec{background:var(--surface);}
/* 금일 작업(작업 주제 + 작업 목록 표) — 2026-11-23. No. 6% · 작업명 60% · 작업자 34% 비율, 헤더 연한 회색, 입력칸은 다른 TBM 입력칸과 같은 모양 */
.tbm-work-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:2px 0 6px;}
.tbm-work-lbl{font-weight:700;font-size:13.5px;}
.tbm-work-tbl{border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;background:var(--surface);margin-bottom:8px;}
.tbm-work-head,.tbm-work-row{display:grid;grid-template-columns:44px minmax(0,60fr) minmax(0,34fr) 56px;column-gap:6px;padding:0 8px;align-items:center;}
.tbm-work-head{background:var(--surface-2);font-size:12px;font-weight:700;color:var(--ink-2);border-bottom:1px solid var(--line-strong);}
.tbm-work-head span{padding:8px 2px;}
.tbm-work-head span:first-child,.tbm-work-no{text-align:center;}
.tbm-work-row{border-bottom:1px solid var(--line);}
.tbm-work-row:last-child{border-bottom:none;}
.tbm-work-no{font-size:13px;color:var(--ink-2);}
.tbm-work-in{min-width:0;width:100%;min-height:var(--field-h);margin:5px 0;border:1px solid var(--line-strong);border-radius:6px;padding:0 9px;font-family:inherit;font-size:16px;background:var(--white);color:var(--ink);}
.tbm-work-in:focus{outline:2px solid var(--mint);outline-offset:0;border-color:var(--mint);}
.tbm-work-del{min-height:34px;padding:0 8px;border:1px solid var(--line-strong);border-radius:6px;background:var(--white);color:var(--red-ink);font-family:inherit;font-size:12.5px;cursor:pointer;}
.tbm-work-legacy{margin-top:10px;}
/* 저장하기(2026-11-04) — 화면 맨 아래 하나뿐인 저장 단추와 저장 상태 줄. 상태는 색만이 아니라 글자(●/✓)로도 구분한다 */
.tbm-savebar{margin:16px 0 4px;}
.tbm-savenote{margin:0 0 2px;}
.tbm-savestate{margin:0 0 4px;font-size:13.5px;font-weight:700;min-height:20px;}
.tbm-savestate.is-dirty{color:var(--red-ink);}
.tbm-savestate.is-clean{color:var(--mint-ink);}
.tbm-savestate.is-saving{color:var(--ink-2);}
.tbm-actions #tSaveAll{min-width:150px;}
@media (max-width:640px){ .tbm-actions #tSaveAll{flex:1 1 100%;min-height:48px;font-size:16px;} }
@media (max-width:640px){
  /* 좁은 휴대폰: 한 작업 = 한 묶음(번호·삭제는 옆, 작업명과 작업자는 위아래) */
  .tbm-work-head{display:none;}
  .tbm-work-row{grid-template-columns:30px minmax(0,1fr) 52px;grid-template-areas:"no name del" "no workers del";padding:6px 8px;}
  .tbm-work-no{grid-area:no;}
  .tbm-work-in[data-wf="name"]{grid-area:name;margin:3px 0;}
  .tbm-work-in[data-wf="workers"]{grid-area:workers;margin:3px 0;}
  .tbm-work-del{grid-area:del;}
}
/* 인쇄·인쇄 미리보기: 작업명/작업자 표(다른 안쪽 표와 같은 .tbm-print-sub 규칙을 그대로 받는다 — 쪽 나눔·제목행 반복·음영) */
.tbm-work-print-table td:first-child{text-align:center;}
.tbm-work-print-legacy{margin-bottom:4px;}
.tbm-work-print-eval{margin-top:4px;}
/* 참석자 서명 화면 */
.tbm-work-attend{border:1px solid var(--line);border-radius:8px;background:var(--surface);margin-bottom:6px;}
.tbm-work-attend-row{display:flex;gap:10px;padding:9px 12px;border-bottom:1px solid var(--line);}
.tbm-work-attend-row:last-child{border-bottom:none;}
.tbm-work-attend-no{flex:0 0 22px;color:var(--ink-2);font-weight:700;}

/* 개선제안 개선 전/후 자료(사진·영상·파일) — 2026-10-09 */
.sg-media .photo-grid{margin-bottom:6px;}
.sg-files{display:flex;flex-direction:column;gap:6px;margin:0 0 8px;}
.sg-file{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:6px;padding:8px 10px;background:var(--surface);min-width:0;}
.sg-ficon{flex:0 0 auto;min-width:42px;padding:4px 6px;border-radius:5px;background:var(--surface-2);border:1px solid var(--line-strong);
  font-size:11px;font-weight:800;text-align:center;color:var(--ink);}
.sg-ficon.vid{background:#000;color:#fff;border-color:#000;}
.sg-finfo{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;}
.sg-fname{font-size:13.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sg-fsize{font-size:11.5px;color:var(--ink-2);}
.sg-fact{flex:0 0 auto;display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;}
.sg-fact .btn{min-height:34px;padding:4px 10px;font-size:12.5px;}
@media(max-width:560px){.sg-file{flex-wrap:wrap;} .sg-finfo{flex-basis:calc(100% - 60px);} .sg-fact{flex-basis:100%;}}
.sg-add{position:relative;overflow:hidden;}
.sg-file-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;font-size:0;}
.sg-hint{font-size:12px;color:var(--ink-2);margin-top:4px;line-height:1.5;}
.sg-upstat{font-size:12.5px;font-weight:700;margin-top:6px;}
.sg-sublabel{font-weight:700;font-size:13.5px;margin:4px 0 6px;}
.sg-ba{display:grid;grid-template-columns:1fr;gap:4px;}
@media(min-width:768px){.sg-ba{grid-template-columns:1fr 1fr;gap:16px;} .sg-ba>div{min-width:0;}}
.sg-legacy{background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:8px 10px;margin-top:6px;font-size:13px;white-space:pre-wrap;word-break:break-word;}
.sg-video-view video{max-width:100%;max-height:calc(100vh - 80px);background:#000;}

/* ---------- 알림메일(개선제안 발송현황·설정, 직원관리 이메일) — 2026-10-10 ---------- */
.sg-mail-list{display:flex;flex-direction:column;gap:8px;}
.sg-mail-row{display:flex;flex-wrap:wrap;align-items:flex-start;gap:4px 10px;border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;background:var(--surface);}
.sg-mail-main{flex:1 1 220px;min-width:0;font-size:13.5px;line-height:1.5;word-break:break-all;}
.sg-mail-state{flex:0 0 auto;text-align:right;}
.sg-mail-err{flex-basis:100%;color:var(--red-ink);word-break:break-all;}
.sg-mail-act{flex-basis:100%;}
.sg-mail-badge{display:inline-block;font-size:12px;font-weight:700;border-radius:20px;padding:2px 9px;border:1px solid var(--line-strong);background:var(--surface-2);color:var(--ink-2);white-space:nowrap;}
.sg-mail-badge.ok{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.sg-mail-badge.err{background:#fdecec;color:#a61b1b;border-color:#e5a3a3;}
.sg-mail-badge.warn{background:#fff8e6;color:#7a5c00;border-color:#e0b93d;}
.sg-mail-test{display:flex;flex-wrap:wrap;gap:6px;}
.sg-mail-test input{flex:1 1 220px;min-width:0;min-height:var(--field-h);border:1px solid var(--line-strong);border-radius:6px;padding:0 10px;font-size:15px;font-family:inherit;}
.sg-table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
.sg-table-scroll .tbl td{word-break:break-all;}
.sci-warn{color:#a15c00;font-weight:700;}
.sa-email-cell{word-break:break-all;min-width:140px;}
/* 2026-10-07 일반제안 안전/비안전 구분(필수) */
.sg-gk{margin-top:12px;}
.sg-gk-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px;}
.sg-gk>label:first-child{display:block;margin-bottom:2px;}
.sg-req{display:inline-block;margin-left:6px;padding:0 7px;border-radius:999px;background:#fdecec;color:#a61b1b;font-size:11.5px;font-weight:700;vertical-align:1px;}

/* ── 2026-10-11 조직·개선활동 업무기준: 평가자 설정 · 재무계산기 · 중복검토 · 마일리지/시상 · 일일점검 출처 ── */
.sg-evc-table td{vertical-align:top;}
.sg-evc-table .staff-combo{max-width:360px;margin-top:4px;}
.sg-evc-chip{flex-wrap:wrap;}
.sg-fin-r1{width:100%;}
.sg-fin-r1 td{padding:4px 6px;vertical-align:top;}
.sg-fc-item{padding:10px 12px;margin-top:8px;}
.sg-fc-item .field-row{margin-top:6px;}
.sg-dup-cand{padding:10px 12px;margin-top:8px;}
.sg-dup-cand .small{margin-top:2px;overflow-wrap:anywhere;}
.sg-dup-photos{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:6px;}
.ia-ml-table td,.ia-ml-table th{white-space:nowrap;}
.ia-ml-table td.small{white-space:normal;min-width:120px;}
.ia-award{padding:10px 12px;margin-top:8px;}
/* 마일리지·시상 평가기준 기간 줄 + [평가기간 설정] 모달(2026-09-28) */
.ml-range{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:2px;font-size:14px;}
.ml-range-l{font-size:13px;font-weight:700;color:var(--ink-2);}
.ml-range .btn{margin:0;}
.ml-range-lock{flex-basis:100%;}
.ml-period-modal .field-row .field{flex:1 1 150px;}
/* 4분기 평가방식(연도별): 두 선택지를 바로 보이게(라디오 카드) — 좁은 화면은 한 줄에 하나 */
.ml-q4{display:flex;flex-direction:column;gap:6px;margin:6px 0 8px;}
.ml-q4-modes{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.ml-q4-o{display:flex;flex-direction:column;gap:2px;padding:10px 12px 10px 40px;position:relative;border:1.5px solid var(--line-strong);border-radius:10px;background:var(--white);cursor:pointer;min-height:56px;}
.ml-q4-o input{position:absolute;left:12px;top:13px;width:20px;height:20px;margin:0;accent-color:var(--mint-ink);}
.ml-q4-o b{font-size:15px;} .ml-q4-o span{font-size:12.5px;color:var(--ink-2);}
.ml-q4-o.on{border-color:var(--mint);background:var(--mint-tint);}
.ml-q4-modes.locked .ml-q4-o{cursor:default;opacity:.75;}
.ml-q4-o:focus-within{outline:2px solid var(--mint-ink);outline-offset:2px;}
@media(max-width:560px){ .ml-q4-modes{grid-template-columns:1fr;} }
.ml-q4-off .btn{margin-top:4px;}
.ml-period-hist{margin-top:6px;font-size:12.5px;} .ml-period-hist ul{margin:6px 0;padding-left:18px;} .ml-period-hist li{margin-bottom:3px;overflow-wrap:anywhere;}
.ia-award .opt{display:flex;margin:4px 0;}
.ia-fb-table input{width:110px;min-height:36px;}
.ia-fb-table td{vertical-align:top;}
.ia-saved{border-color:var(--mint) !important;background:var(--mint-tint);}
.di-src-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.dinsp-case-org{font-weight:400;color:var(--ink-2);}
.im-uploading{opacity:.55;margin-bottom:6px;}
/* 2026-10-02: 진단개선 관리자 수정 모달 · 수정 이력 */
.imp-ae .imp-ae-sec{font-size:14.5px;margin:14px 0 4px;padding-top:10px;border-top:1px solid var(--line);}
.imp-ae .imp-ae-sec:first-of-type{border-top:0;padding-top:0;}
.imp-ae .staff-combo-input{min-height:44px;font:inherit;font-size:16px;padding:9px 11px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink);-webkit-appearance:none;appearance:none;}
.imp-ae .im-photo-compare{gap:10px;}
.imp-ae .im-photo-col{flex:1 1 220px;min-width:0;}
.imp-ae .im-photo-col input[type=file]{margin-top:6px;max-width:100%;}
.imp-ae textarea{min-height:84px;}
.imp-ae-list{list-style:none;margin:0;padding:0;}
.imp-ae-list li{padding:8px 0;border-bottom:1px dashed var(--line);overflow-wrap:anywhere;}
.imp-ae-list li:last-child{border-bottom:0;}
.imp-ae-h{font-size:13.5px;margin-bottom:2px;}
.imp-ae-h .chip{margin-left:4px;}
.imp-ae-vals{margin-top:4px;font-size:13px;}
.imp-ae-vals .tbl{margin-top:4px;}
.imp-ae-vals td{vertical-align:top;white-space:pre-wrap;}
@media(max-width:560px){
  .sg-evc-table .staff-combo{max-width:100%;}
  .sg-dup-photos{grid-template-columns:repeat(2,minmax(0,1fr));}
  .ia-fb-table input{width:90px;}
}
/* 2026-10-02: 2차 = 공통 + 제강·압연·품질 전담 칸 · Family 심사그룹 관리 */
.sg-r2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;}
.sg-r2-grp{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--white);min-width:0;}
.sg-r2-grp.is-common{border-color:var(--mint);background:var(--mint-tint);}
.sg-r2-h{font-weight:700;font-size:13.5px;margin-bottom:4px;}
.sg-r2-grp .staff-combo{max-width:100%;}
.sg-fg-filters{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0;}
.sg-fg-filters .btn{margin:0;}
.sg-fg-rec{margin:4px 0 8px;}
.sg-fg-table td{vertical-align:middle;}
.sg-fg-table select{min-height:38px;min-width:110px;}
.sg-fg-cur{display:inline-block;font-weight:700;border-radius:20px;padding:2px 10px;font-size:13px;background:var(--surface-2);border:1px solid var(--line-strong);}
.sg-fg-cur.g-steel{background:#e8f1fd;border-color:#9cc0ef;color:#1d4f91;}
.sg-fg-cur.g-rolling{background:#eef8ee;border-color:#9fd0a3;color:#1f6a2a;}
.sg-fg-cur.g-quality{background:#f6eefc;border-color:#c9a7e6;color:#5b2a86;}
.sg-fg-cur.g-none{background:#fff8e6;border-color:#e0b93d;color:#7a5c00;}
@media(max-width:900px){ .sg-r2{grid-template-columns:1fr;} }
@media(max-width:560px){
  .sg-fg-table,.sg-fg-table tbody,.sg-fg-table tr,.sg-fg-table td{display:block;width:100%;}
  .sg-fg-table thead{display:none;}
  .sg-fg-table tr{border-bottom:1px solid var(--line);padding:6px 0;}
  .sg-fg-table td{border:0;padding:3px 0;}
  .sg-fg-table td[data-l="변경"] select{width:100%;}
}
@media(max-width:560px){
  .sg-evc-table,.sg-evc-table > tbody,.sg-evc-table > tbody > tr,.sg-evc-table > tbody > tr > td{display:block;width:100%;}
  .sg-evc-table > thead{display:none;}
  .sg-evc-table > tbody > tr{border-bottom:1px solid var(--line);padding:6px 0;}
  .sg-evc-table > tbody > tr > td{border:0;padding:3px 0;}
  .sg-evc-table > tbody > tr > td[rowspan]{background:var(--surface-2);padding:6px 8px;border-radius:6px;margin-top:6px;}
  .sg-evc-table > tbody > tr > td:nth-last-child(2):not([rowspan]){font-weight:700;font-size:14px;}
  .sg-fin-r1,.sg-fin-r1 tbody,.sg-fin-r1 tr,.sg-fin-r1 td{display:block;width:100%;}
  .sg-fin-r1 tr{border-bottom:1px dashed var(--line);padding:4px 0;}
  .sg-fin-r1 td:first-child{font-weight:700;}
}

/* =============================================================================
   SF1054 사내 안전 Feed (2026-09-25) — 모바일 우선 SNS 카드 Feed
   ========================================================================== */
.avatar{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;width:40px;height:40px;border-radius:50%;overflow:hidden;background:var(--mint-tint);color:var(--mint-ink);font-weight:800;border:1px solid var(--line);}
.avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;}
.avatar .avatar-ini{font-size:16px;}
.avatar.avatar-sm{width:32px;height:32px;} .avatar.avatar-sm .avatar-ini{font-size:13px;}
.avatar.avatar-lg{width:56px;height:56px;} .avatar.avatar-lg .avatar-ini{font-size:22px;}
.avatar.avatar-xl{width:128px;height:128px;} .avatar.avatar-xl .avatar-ini{font-size:44px;}
.pf-row{display:flex;align-items:center;gap:12px;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--line);}
.pf-row .btn{margin-top:4px;}
.pf-preview{display:flex;justify-content:center;margin:8px 0;}
.pf-btns{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;}
.pf-btns .btn{cursor:pointer;}

.sf-wrap{max-width:680px;margin:0 auto;}
/* ── SF1054 안전문화 배너 — 피드 맨 위, 전 사용자 공통(sf1054.js cultureBannerHtml).
   2026-10-05: 사용자 최종 승인 이미지를 모든 화면폭에서 그대로 — 원본 비율(2400:631) 유지 · 자르지 않음 · 글자 HTML 재구성 없음.
   PC ≥1100 은 #app 내용폭(932)보다 넓게 1040(히어로), 휴대폰 ≤560 은 피드 카드(.sf-card)처럼 화면 가로 끝까지(글자를 조금이라도 크게).
   세로 휴대폰(≤700·세로)은 눌러서 확대보기(가로로 돌려 약 2배 — .photo-view.pv-landscape 와 같은 조건). */
.sf-culture{margin:2px 0 14px;box-sizing:border-box;}
@media(min-width:1100px){ .sf-culture{margin-left:-54px;margin-right:-54px;} }
.sf-culture-img{display:block;width:100%;max-width:none;height:auto;aspect-ratio:2400/631;object-fit:contain;border-radius:18px;background:#f5f5f7;box-shadow:0 0 0 1px rgba(0,0,0,.06),0 6px 20px rgba(0,0,0,.06);}
.sf-culture-hint{display:none;margin:6px 4px 0;font-size:12.5px;color:var(--ink-2);text-align:center;}
@media(max-width:700px) and (orientation:portrait){ .sf-culture-img{cursor:zoom-in;} .sf-culture-img:focus-visible{outline:2px solid var(--mint);outline-offset:2px;} .sf-culture-hint{display:block;} }
@media(max-width:560px){ .sf-culture{margin:0 -14px 12px;} .sf-culture-img{border-radius:0;box-shadow:0 1px 0 rgba(0,0,0,.06),0 -1px 0 rgba(0,0,0,.06);} }
.sf-wrap.wide{max-width:960px;}
.sf-loading,.sf-end{text-align:center;color:var(--ink-2);font-size:13px;padding:18px 0;}
.sf-sentinel{height:1px;}
.sf-profile-nudge{display:flex;align-items:center;gap:10px;background:var(--mint-tint);border:1px solid var(--mint);border-radius:12px;padding:10px 12px;margin-bottom:12px;}
.sf-profile-nudge div{flex:1;display:flex;flex-direction:column;font-size:13px;} .sf-profile-nudge span{color:var(--ink-2);font-size:12.5px;}
.sf-bar{display:flex;gap:8px;align-items:center;margin-bottom:10px;flex-wrap:wrap;}
.sf-seg{display:inline-flex;border:1px solid var(--line-strong);border-radius:999px;overflow:hidden;flex:0 0 auto;}
.sf-seg button{border:0;background:var(--white);padding:8px 14px;font:inherit;font-size:14px;font-weight:700;color:var(--ink-2);cursor:pointer;min-height:40px;}
.sf-seg button.on{background:var(--mint);color:#fff;}
.sf-search{flex:1 1 90px;min-width:0;}
.sf-search input{width:100%;min-height:40px;border:1px solid var(--line-strong);border-radius:999px;padding:8px 14px;font:inherit;font-size:15px;}
.sf-fbtn{min-height:40px;border-radius:999px !important;}
.sf-fbtn b{display:inline-block;background:var(--mint);color:#fff;border-radius:999px;padding:0 7px;font-size:12px;margin-left:4px;}
.sf-fpanel{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 10px;background:var(--surface-2);border-radius:12px;padding:12px;margin-bottom:10px;}
.sf-fpanel .field{margin-bottom:8px;} .sf-fpanel .sf-check,.sf-fpanel .sf-factions{grid-column:1/-1;}
.sf-factions{display:flex;gap:8px;}
/* 2026-09-30: 회의그룹 한 줄(예: 소안전분석회의 [전체][제강][압연]) — 피드 디자인에 맞춘 작은 선택 버튼, 좁은 화면은 자연스럽게 줄바꿈 */
.sf-grp{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap;margin:-2px 0 10px;}
.sf-grp-l{font-size:12.5px;font-weight:800;color:var(--ink-2);white-space:nowrap;}
.sf-grp-b{display:flex;gap:6px;flex-wrap:wrap;}
.sf-gchip{min-height:32px;padding:4px 12px;border:1px solid var(--line-strong);border-radius:999px;background:var(--white);font:inherit;font-size:13px;font-weight:700;color:var(--ink-2);cursor:pointer;}
.sf-gchip.on{background:var(--mint);border-color:var(--mint);color:#fff;}
.sf-gchip:focus-visible{outline:2px solid var(--mint-ink);outline-offset:2px;}
.sf-orgcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin:10px 0 14px;}
.sf-orgcard{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:var(--white);font:inherit;cursor:pointer;}
.sf-orgcard b{font-size:15.5px;color:var(--ink);} .sf-orgcard span{font-size:13px;color:var(--ink-2);} .sf-orgcard small{font-size:12px;color:var(--mint-ink);font-weight:700;}
.sf-orgcard:hover{border-color:var(--mint);}
.sf-sub{font-size:15px;font-weight:800;color:var(--ink);margin:4px 0 8px;}.sf-orgrp{border:1px solid var(--line);border-radius:12px;padding:10px 14px;margin-bottom:8px;}
.sf-orgrp-h{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.sf-orgrp ul{margin:6px 0 0;padding-left:18px;font-size:13.5px;line-height:1.6;}
.sf-modtag{display:inline-block;font-size:11.5px;font-weight:700;color:var(--mint-ink);background:var(--mint-tint);border-radius:999px;padding:1px 8px;}
.sf-fchips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
.sf-fchip{display:inline-flex;align-items:center;gap:4px;background:var(--mint-tint);color:var(--mint-ink);border-radius:999px;padding:4px 10px;font-weight:700;font-size:13px;}
.sf-fchip button{border:0;background:none;color:inherit;cursor:pointer;font-size:13px;padding:0 2px;}
.sf-check{display:flex;align-items:center;gap:8px;min-height:44px;font-size:14.5px;cursor:pointer;}
.sf-check input{width:18px;height:18px;margin:0;flex:0 0 auto;accent-color:var(--mint);}
.sf-empty{text-align:center;padding:48px 16px;color:var(--ink-2);display:flex;flex-direction:column;gap:4px;align-items:center;}
.sf-empty .ic{font-size:40px;} .sf-empty b{color:var(--ink);}
.sf-empty.small{padding:20px;}

.sf-card{background:var(--white);border:1px solid var(--line);border-radius:14px;margin-bottom:14px;overflow:hidden;cursor:pointer;}
.sf-card.fresh{box-shadow:0 0 0 3px var(--mint);}
.sf-card.sf-detail{cursor:default;}
.sf-hd{display:flex;align-items:center;gap:10px;padding:12px 14px 8px;}
.sf-who{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.3;}
.sf-who b{font-size:15px;} .sf-who span{font-size:12.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sf-time{font-size:12.5px;color:var(--ink-2);flex:0 0 auto;}
.sf-kebab{flex:0 0 auto;width:36px;height:36px;margin:-6px -8px -6px -4px;border:0;border-radius:999px;background:none;font:inherit;font-size:20px;font-weight:800;line-height:1;color:var(--ink-2);cursor:pointer;}
.sf-kebab:hover{background:var(--surface-2);color:var(--ink);}
.sf-kebab:focus-visible{outline:2px solid var(--mint-ink);outline-offset:1px;}
.sf-badges{display:flex;flex-wrap:wrap;gap:6px;padding:0 14px 8px;}
.sf-badge{display:inline-flex;align-items:center;gap:3px;font-size:12.5px;font-weight:800;border-radius:999px;padding:3px 9px;border:1px solid var(--line);background:var(--surface-2);}
.sf-badge small{font-weight:600;opacity:.8;}
.sf-badge.stop{background:#FDEDE8;color:#B42318;border-color:#F04438;font-size:13px;}
.sf-badge.pin{background:#FFF7E0;color:#8A5A00;border-color:#F0B429;}
.sf-badge.excel{background:#FFF4CC;color:#7A5B00;border-color:#E3B900;}
.sf-badge.catch{background:#EEF2FF;color:#3538CD;border-color:#8098F9;}
.sf-badge.done{background:#ECFDF3;color:#067647;border-color:#47CD89;}
.sf-badge.req{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.sf-badge.rej,.sf-badge.dup{background:#F2F4F7;color:#475467;border-color:#98A2B3;}
/* 2026-10-02: 관리형 배지(Badge Master) — 색은 theme 키(data-theme) 하나로만 정한다. preset 은 여기 한 곳(--mb-bg/-fg/-bd)에서만 정의 */
.sf-mb{background:var(--mb-bg,#F2F4F7);color:var(--mb-fg,#344054);border-color:var(--mb-bd,#D0D5DD);white-space:normal;line-height:1.25;max-width:100%;overflow-wrap:anywhere;}
.sf-mb .sf-mb-ic{font-size:13px;line-height:1;}
.sf-mb.is-off{opacity:.75;}
/* 관리자·안전스태프 처리 영역의 배지 토글 — 미선택=테두리만, 선택=실제 theme 색 채움 + ✓ */
.sf-mbpick-wrap{margin:12px 0 8px;}
.sf-mbpick-h{font-weight:700;font-size:13px;margin-bottom:6px;}
.sf-mbpick-row{display:flex;flex-wrap:wrap;gap:8px;}
.sf-mbpick{font:inherit;font-size:14px;font-weight:700;min-height:40px;padding:6px 14px;cursor:pointer;border:1.5px solid var(--mb-bd,#D0D5DD);}
.sf-mbpick:not(.on){background:transparent;color:var(--mb-fg,#344054);}
.sf-mbpick.on{box-shadow:inset 0 0 0 1px var(--mb-fg,#344054);}
.sf-mbpick:disabled{opacity:.5;cursor:default;}
.sf-mbpick:focus-visible{outline:2px solid var(--mb-fg,#344054);outline-offset:2px;}
.sf-mb[data-theme="blue"]{--mb-bg:#EFF8FF;--mb-fg:#175CD3;--mb-bd:#84CAFF;}
.sf-mb[data-theme="indigo"]{--mb-bg:#EBEEFB;--mb-fg:#2B3A8C;--mb-bd:#9AA8E8;}
.sf-mb[data-theme="teal"]{--mb-bg:#E6F6F4;--mb-fg:#0E6B63;--mb-bd:#7FD0C6;}
.sf-mb[data-theme="green"]{--mb-bg:#ECFDF3;--mb-fg:#067647;--mb-bd:#6CE9A6;}
.sf-mb[data-theme="amber"]{--mb-bg:#FFF4E0;--mb-fg:#8A4B0A;--mb-bd:#F5B85A;}
.sf-mb[data-theme="orange"]{--mb-bg:#FFF1E8;--mb-fg:#B54708;--mb-bd:#FDA16B;}
.sf-mb[data-theme="red"]{--mb-bg:#FEF3F2;--mb-fg:#B42318;--mb-bd:#FDA29B;}
.sf-mb[data-theme="purple"]{--mb-bg:#F4EBFF;--mb-fg:#6941C6;--mb-bd:#C3A6F5;}
.sf-mb[data-theme="gray"]{--mb-bg:#F2F4F7;--mb-fg:#344054;--mb-bd:#D0D5DD;}
/* 관리자 배지 관리 */
.sf-badm-bar{margin:10px 0;}
.sf-badm{display:flex;flex-direction:column;gap:8px;}
.sf-badm-row{display:flex;gap:10px;align-items:flex-start;justify-content:space-between;padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--white);}
.sf-badm-row.is-off{background:var(--surface-2);}
.sf-badm-main{min-width:0;flex:1;}
.sf-badm-main .sf-badge{margin-right:6px;}
.sf-badm-st{display:inline-block;font-size:12px;font-weight:800;padding:2px 8px;border-radius:999px;}
.sf-badm-st.on{background:var(--mint-tint);color:var(--mint-ink);} .sf-badm-st.off{background:#F2F4F7;color:#475467;}
.sf-badm-desc{margin-top:6px;font-size:13.5px;color:var(--ink-2);overflow-wrap:anywhere;}
.sf-badm-meta{margin-top:3px;}
.sf-badm-act{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end;max-width:260px;}
.sf-badm-act .btn{margin:0;min-height:36px;}
@media(max-width:640px){ .sf-badm-row{flex-direction:column;} .sf-badm-act{max-width:none;width:100%;justify-content:flex-start;} }
.sf-badform-themes{display:flex;flex-wrap:wrap;gap:8px;}
.sf-badform-th{display:inline-flex;align-items:center;gap:4px;cursor:pointer;padding:4px;border-radius:999px;border:2px solid transparent;}
.sf-badform-th input{position:absolute;opacity:0;width:1px;height:1px;}
.sf-badform-th input:checked + .sf-badge{box-shadow:0 0 0 2px var(--white),0 0 0 4px var(--mint-ink);}
.sf-badform-th:has(input:checked){border-color:var(--mint-ink);}
.sf-badform-th:has(input:focus-visible){outline:2px solid var(--mint-ink);outline-offset:2px;}

.sf-car{position:relative;background:#111;}
.sf-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
.sf-track::-webkit-scrollbar{display:none;}
.sf-slide{flex:0 0 100%;scroll-snap-align:center;aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;}
.sf-car.detail .sf-slide{aspect-ratio:auto;max-height:78vh;min-height:220px;}
.sf-slide img{width:100%;height:100%;object-fit:contain;display:block;}
.sf-car.detail .sf-slide img{height:auto;max-height:78vh;cursor:zoom-in;}
.sf-slide video{width:100%;height:100%;max-height:78vh;background:#000;}
.sf-noposter{font-size:48px;color:#fff;opacity:.7;}
.sf-play{position:absolute;inset:0;margin:auto;width:64px;height:64px;border-radius:50%;border:0;background:rgba(0,0,0,.55);color:#fff;font-size:26px;cursor:pointer;}
.sf-dur{position:absolute;right:10px;bottom:10px;background:rgba(0,0,0,.6);color:#fff;font-size:12px;padding:2px 7px;border-radius:999px;}
.sf-count{position:absolute;top:10px;right:10px;background:rgba(0,0,0,.6);color:#fff;font-size:12px;font-weight:700;padding:2px 8px;border-radius:999px;}
.sf-arrow{position:absolute;top:50%;transform:translateY(-50%);width:36px;height:36px;border-radius:50%;border:0;background:rgba(255,255,255,.85);font-size:22px;line-height:1;cursor:pointer;display:none;}
.sf-arrow.l{left:8px;} .sf-arrow.r{right:8px;}
@media (hover:hover){.sf-car:hover .sf-arrow{display:block;}}
.sf-dots{position:absolute;left:0;right:0;bottom:8px;display:flex;justify-content:center;gap:5px;pointer-events:none;}
.sf-dots i{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.5);} .sf-dots i.on{background:#fff;}

.sf-body{padding:10px 14px 4px;}
.sf-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px;}
.sf-cat{font-size:12.5px;font-weight:800;border-radius:6px;padding:2px 8px;background:var(--surface-2);}
.sf-cat.act{background:#FEF0C7;color:#93370D;} .sf-cat.cond{background:#FDEDE8;color:#B42318;} .sf-cat.good{background:#ECFDF3;color:#067647;}
.sf-sgr{font-size:12.5px;font-weight:700;color:var(--mint-ink);background:var(--mint-tint);border-radius:6px;padding:2px 8px;}
.sf-title{font-weight:800;font-size:16px;line-height:1.4;margin-bottom:3px;word-break:keep-all;overflow-wrap:anywhere;}
.sf-text{font-size:14.5px;white-space:pre-wrap;overflow-wrap:anywhere;color:#222;}
.sf-text.clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.sf-full{font-size:15px;white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 4px;}
.sf-where{font-size:13px;color:var(--ink-2);margin-top:6px;}
.sf-tags{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:6px;}
.sf-tag{border:0;background:none;color:#1D5FD1;font:inherit;font-size:14px;font-weight:700;padding:2px 0;cursor:pointer;}
.sf-tag small{color:var(--ink-2);font-weight:600;}
.sf-react{display:flex;gap:2px;padding:6px 8px 8px;border-top:1px solid var(--line);margin-top:8px;flex-wrap:wrap;}   /* 2026-10-02: wrap — 아래쪽 '반응 요약 줄'(.sf-likes, 100% 폭)이 버튼 줄 밑으로 내려가게. 버튼은 flex-basis 0 이라 한 줄 그대로 */
.sf-rbtn{flex:1 1 0;min-width:0;min-height:48px;border:0;border-radius:10px;background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;padding:4px 2px;font:inherit;color:var(--ink-2);}
.sf-rbtn .ic{font-size:19px;line-height:1.1;}
.sf-rbtn .n{font-size:13px;font-weight:800;color:var(--ink);}
.sf-rbtn .lb{font-size:10.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.sf-rbtn.on{background:var(--mint-tint);color:var(--mint-ink);} .sf-rbtn.on .n{color:var(--mint-ink);}
.sf-rbtn:active{transform:scale(.96);}
.sf-rbtn.sh .n{display:none;}
.sf-fab{position:fixed;right:18px;bottom:calc(76px + env(safe-area-inset-bottom));z-index:31;border:0;border-radius:999px;background:var(--mint);color:#fff;font:inherit;font-size:22px;font-weight:800;height:56px;padding:0 20px;display:flex;align-items:center;gap:6px;box-shadow:0 6px 18px rgba(0,0,0,.22);cursor:pointer;}
.sf-fab span{font-size:15px;}
@media (min-width:1100px){.sf-fab{right:calc(50% - 470px);}}

.sf-back{margin-bottom:10px;}
.sf-orig{padding:6px 14px;}
.sf-kvs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px;padding:10px 14px;border-top:1px solid var(--line);margin-top:8px;}
.sf-kv{display:flex;flex-direction:column;font-size:13px;} .sf-kv span{color:var(--ink-2);font-size:12px;} .sf-kv b{font-weight:700;overflow-wrap:anywhere;}
.sf-insp{margin:4px 14px 8px;border-radius:10px;padding:10px 12px;font-size:14px;display:flex;flex-direction:column;gap:4px;align-items:flex-start;}
.sf-insp.done{background:#ECFDF3;border:1px solid #47CD89;} .sf-insp.req{background:var(--mint-tint);border:1px solid var(--mint);}
.sf-owner{margin:-6px 0 12px;}
.sf-mod{border:1px dashed var(--line-strong);border-radius:12px;padding:12px;margin-bottom:14px;background:var(--surface-2);}
.sf-mod h3{margin:0 0 8px;font-size:15px;}
.sf-mod-btns{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
.sf-transfer{margin-top:4px;}
.sf-modlog{margin-top:8px;font-size:12.5px;color:var(--ink-2);} .sf-modlog div{padding:2px 0;}
.sf-comments{margin-bottom:24px;}
.sf-comments h3{font-size:15px;margin:4px 0 8px;}
.sf-cmt{display:flex;gap:10px;padding:8px 0;border-bottom:1px solid var(--line);}
.sf-cmt.deleted{padding:8px 4px;}
.sf-cmt-b{flex:1;min-width:0;}
.sf-cmt-h{font-size:13px;display:flex;flex-wrap:wrap;gap:0 4px;align-items:baseline;} .sf-cmt-h span{color:var(--ink-2);font-size:12.5px;} .sf-cmt-h time{color:var(--ink-2);font-size:12px;margin-left:auto;}
.sf-cmt-t{font-size:14.5px;white-space:pre-wrap;overflow-wrap:anywhere;}
.sf-cmt-t textarea{width:100%;font:inherit;font-size:16px;border:1px solid var(--line-strong);border-radius:8px;padding:8px;}
.sf-cmt-a{display:flex;gap:10px;margin-top:2px;} .sf-cmt-a button{border:0;background:none;color:var(--ink-2);font:inherit;font-size:12.5px;cursor:pointer;padding:4px 0;}
.sf-cmt-form{display:flex;gap:8px;align-items:flex-end;margin-top:10px;position:sticky;bottom:calc(64px + env(safe-area-inset-bottom));background:var(--white);padding:8px 0;}
.sf-cmt-form textarea{flex:1;min-width:0;font:inherit;font-size:16px;border:1px solid var(--line-strong);border-radius:18px;padding:9px 14px;resize:none;min-height:42px;max-height:160px;}
.sf-cmt-form .btn{min-height:42px;}

.sf-viewer{position:fixed;inset:0;z-index:60;background:#000;display:flex;flex-direction:column;}
.sf-vtop{display:flex;align-items:center;gap:10px;color:#fff;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top));font-size:14px;}
.sf-vtop button{margin-left:auto;background:none;border:0;color:#fff;font-size:24px;cursor:pointer;}
.sf-vtrack{flex:1;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;}
.sf-vtrack::-webkit-scrollbar{display:none;}
.sf-vslide{flex:0 0 100%;scroll-snap-align:center;display:flex;align-items:center;justify-content:center;}
.sf-vslide img,.sf-vslide video{max-width:100%;max-height:100%;object-fit:contain;}
/* 2026-10-24 브라우저 확대 대응(sf1054.js openViewer): 사진을 연 순간 맞춘 CSS 크기로 고정(.is-fit)하므로 확대하면 사진이 실제로 커지고, 화면보다 크면 그 장 안에서 가로·세로 스크롤 */
.sf-vslide.is-fit{overflow:auto;align-items:flex-start;justify-content:flex-start;overscroll-behavior:auto contain;scrollbar-color:rgba(255,255,255,.55) rgba(255,255,255,.08);}
.sf-vslide.is-fit img{margin:auto;flex:0 0 auto;max-width:none;max-height:none;}
.sf-varrow{position:absolute;top:50%;width:44px;height:44px;border-radius:50%;border:0;background:rgba(255,255,255,.25);color:#fff;font-size:26px;cursor:pointer;}
.sf-varrow.l{left:10px;} .sf-varrow.r{right:10px;}
.sf-varrow.is-off{background:rgba(255,255,255,.1);color:rgba(255,255,255,.4);cursor:default;}   /* 2026-11-01: 첫 장의 ‹ · 마지막 장의 › */

/* 등록 */
.sf-compose{padding-bottom:84px;}
.sf-media-add{border:2px dashed var(--mint);border-radius:16px;padding:16px;margin-bottom:14px;background:var(--mint-tint);}
.sf-media-add.has{border-style:solid;background:var(--white);padding:12px;}
.sf-media-hero{display:flex;flex-direction:column;align-items:center;text-align:center;gap:2px;padding:10px 0 14px;}
.sf-media-hero .ic{font-size:44px;} .sf-media-hero b{font-size:17px;} .sf-media-hero span{font-size:13px;color:var(--ink-2);}
.sf-media-btns{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;}
.sf-mbtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:72px;border-radius:12px;background:var(--white);border:1px solid var(--line-strong);font-size:24px;cursor:pointer;text-align:center;}
.sf-mbtn span{font-size:13px;font-weight:700;}
.sf-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:10px;}
.sf-tile{position:relative;aspect-ratio:1/1;border-radius:10px;overflow:hidden;background:#111;}
.sf-tile img{width:100%;height:100%;object-fit:cover;display:block;}
.sf-tile .rm{position:absolute;top:4px;right:4px;width:28px;height:28px;border-radius:50%;border:0;background:rgba(0,0,0,.6);color:#fff;cursor:pointer;font-size:14px;}
.sf-tile .ed{position:absolute;left:4px;bottom:4px;border:0;border-radius:999px;background:rgba(255,255,255,.92);font:inherit;font-size:12px;font-weight:800;padding:4px 9px;cursor:pointer;}
.sf-tile .mk{position:absolute;left:4px;top:4px;background:#ff1f1f;color:#fff;font-size:11px;font-weight:800;border-radius:999px;padding:1px 7px;}
.sf-tile .vd{position:absolute;left:4px;top:4px;background:rgba(0,0,0,.6);color:#fff;font-size:11px;border-radius:999px;padding:1px 7px;}
.sf-tile .st{position:absolute;right:4px;bottom:4px;}
.sf-tile .st.ok{width:22px;height:22px;border-radius:50%;background:#12B76A;color:#fff;font-size:13px;display:flex;align-items:center;justify-content:center;}
.sf-tile .st.up{left:6px;right:6px;bottom:6px;height:6px;border-radius:3px;background:rgba(255,255,255,.35);overflow:hidden;}
.sf-tile .st.up i{display:block;height:100%;background:var(--mint);}
.sf-tile .st.err{border:0;border-radius:999px;background:#F04438;color:#fff;font:inherit;font-size:12px;font-weight:800;padding:4px 8px;cursor:pointer;}
/* 2026-10-01: 게시물 수정 화면 — 기존 사진·영상 칸(기존 표시 · ✕ = 삭제 예정 · 되돌리기). 모바일은 2열로 크게(375/390/430px) */
.sf-edit-h{margin:2px 0 4px;font-size:19px;font-weight:800;} .sf-edit-h small{font-size:14px;font-weight:700;color:var(--ink-2);}
.sf-edit-note{margin:0 0 12px;line-height:1.5;}
.sf-readonly{padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);font-size:14.5px;font-weight:600;}
.sf-tile .sf-oldtag{position:absolute;left:4px;bottom:4px;background:rgba(0,0,0,.62);color:#fff;font-size:11px;font-weight:700;border-radius:999px;padding:1px 8px;}
.sf-tile.is-removed img{opacity:.28;filter:grayscale(1);}
.sf-tile .sf-rmmask{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:6px;background:rgba(255,255,255,.72);text-align:center;color:var(--ink);}
.sf-tile .sf-rmmask b{font-size:14px;font-weight:800;color:var(--red-ink);}
@media (max-width:520px){ .sf-tiles.is-edit{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;} .sf-tiles.is-edit .sf-tile .rm{width:36px;height:36px;font-size:17px;top:6px;right:6px;} .sf-tiles.is-edit .sf-tile .ed{font-size:13px;padding:6px 11px;} }
.sf-owner .btn{min-height:46px;font-size:15px;font-weight:800;}
.sf-owner .btn small{font-weight:600;color:var(--ink-2);}
.sf-form{background:var(--white);}
.sf-org{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 8px;}
.sf-pills{display:flex;gap:6px;flex-wrap:wrap;}
.sf-pill{position:relative;overflow:hidden;flex:1 1 auto;display:flex;align-items:center;justify-content:center;min-height:44px;border:1px solid var(--line-strong);border-radius:999px;padding:6px 12px;font-weight:700;font-size:14.5px;cursor:pointer;background:var(--white);}
.sf-pill input,.field .sf-pill input{position:absolute;left:0;top:0;width:1px;height:1px;min-height:0;padding:0;margin:0;opacity:0;pointer-events:none;}
.sf-pill.on{border-color:var(--mint);background:var(--mint-tint);color:var(--mint-ink);}
.sf-pill.on.act{border-color:#DC6803;background:#FEF0C7;color:#93370D;} .sf-pill.on.cond{border-color:#F04438;background:#FDEDE8;color:#B42318;} .sf-pill.on.good{border-color:#12B76A;background:#ECFDF3;color:#067647;}
.sf-stop{font-weight:800;}
.sf-taginput{display:flex;flex-wrap:wrap;gap:6px;align-items:center;border:1px solid var(--line-strong);border-radius:var(--radius);padding:6px 8px;min-height:var(--field-h);}
.sf-taginput input{flex:1 1 120px;min-width:100px;border:0;outline:0;font:inherit;font-size:16px;min-height:36px;padding:0 4px;}
.sf-tagchip{display:inline-flex;align-items:center;gap:2px;background:#EEF4FF;color:#1D5FD1;font-weight:700;border-radius:999px;padding:3px 4px 3px 10px;font-size:14px;}
.sf-tagchip button{border:0;background:none;color:inherit;cursor:pointer;padding:0 6px;font-size:13px;}
.sf-tagsugg{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;}
.sf-tagsugg button{border:1px solid var(--line);background:var(--white);border-radius:999px;padding:4px 10px;font:inherit;font-size:13px;color:#1D5FD1;cursor:pointer;}
.sf-req{align-items:flex-start;padding-top:10px;} .sf-req input{margin-top:3px;}
.sf-simhint{margin:-4px 0 12px;background:#FFFAEB;border:1px solid #FEC84B;border-radius:10px;padding:8px 12px;font-size:13.5px;}
.sf-simhint summary{cursor:pointer;}
.sf-simlist{display:flex;flex-direction:column;gap:8px;margin-top:8px;}
.sf-sim{display:flex;gap:10px;align-items:center;text-decoration:none;color:inherit;border:1px solid var(--line);border-radius:10px;padding:6px;background:var(--white);font-size:13.5px;}
.sf-sim img,.sf-sim .noimg,.sf-reqrow img,.sf-reqrow .noimg{width:64px;height:64px;border-radius:8px;object-fit:cover;flex:0 0 auto;background:var(--surface-2);display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--ink-2);}
.sf-sim .lv{font-size:12px;border-radius:999px;padding:1px 7px;} .sf-sim .lv.high{background:#FDEDE8;color:#B42318;} .sf-sim .lv.medium{background:#FFFAEB;color:#93370D;}
.sf-submitbar{position:fixed;left:0;right:0;bottom:calc(58px + env(safe-area-inset-bottom));z-index:29;display:flex;gap:8px;padding:10px 14px;background:rgba(255,255,255,.96);border-top:1px solid var(--line);max-width:680px;margin:0 auto;}
.sf-submitbar .btn{flex:1;} .sf-submitbar .btn-primary{flex:2;}

/* 사진 표시 편집기 */
body.sfe-open{overflow:hidden;}
.sfe{position:fixed;inset:0;z-index:70;background:#111;color:#fff;display:flex;flex-direction:column;touch-action:none;}
.sfe-top{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;padding-top:calc(10px + env(safe-area-inset-top));}
.sfe-top button{border:0;background:none;color:#fff;font:inherit;font-size:16px;font-weight:700;padding:8px 10px;cursor:pointer;min-height:44px;}
.sfe-top .done{background:var(--mint);border-radius:999px;padding:8px 18px;}
.sfe-stage{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;padding:6px;}
.sfe-stage canvas{touch-action:none;cursor:crosshair;max-width:100%;max-height:100%;}
.sfe-textbar{display:flex;gap:6px;padding:8px 12px;background:#222;}
.sfe-textbar input{flex:1;min-width:0;font:inherit;font-size:16px;border-radius:8px;border:0;padding:10px;}
.sfe-textbar button{border:0;border-radius:8px;padding:0 14px;font:inherit;font-weight:700;cursor:pointer;min-height:44px;}
.sfe-tools{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;padding:8px 8px 4px;}
.sfe-tools button{border:0;border-radius:10px;background:#2a2a2a;color:#fff;font:inherit;font-size:12px;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:56px;justify-content:center;cursor:pointer;}
.sfe-tools button span{font-size:20px;line-height:1;}
.sfe-tools button.on{background:#ff1f1f;}
.sfe-tools button[data-tool="blur"].on{background:#1e90ff;}
.sfe-hint{font-size:12.5px;color:#bbb;text-align:center;margin:2px 12px calc(10px + env(safe-area-inset-bottom));}

/* 관리자 */
.sf-atabs{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--line);margin-bottom:12px;}
.sf-atabs button{border:0;background:none;padding:10px 12px;font:inherit;font-weight:700;color:var(--ink-2);border-bottom:2px solid transparent;cursor:pointer;white-space:nowrap;}
.sf-atabs button.on{color:var(--mint-ink);border-bottom-color:var(--mint);}
.sf-period,.sf-porg{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;}
.sf-period .field,.sf-porg .field{flex:1 1 150px;margin-bottom:8px;}
.sf-period .btn{margin-bottom:8px;}
.sf-kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin:6px 0 14px;}
.sf-kpi{border:1px solid var(--line);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;}
.sf-kpi span{font-size:12.5px;color:var(--ink-2);} .sf-kpi b{font-size:22px;} .sf-kpi small{font-size:11.5px;color:var(--ink-2);}
.sf-agrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}
.sf-agrid .panel{margin:0;} .sf-agrid h3{font-size:15px;margin:0 0 8px;}
.sf-bars{display:flex;flex-direction:column;gap:6px;}
.sf-barrow{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) 34px;gap:8px;align-items:center;font-size:13px;}
.sf-barrow .l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} .sf-barrow .b{height:10px;background:var(--surface-2);border-radius:5px;overflow:hidden;} .sf-barrow .b i{display:block;height:100%;background:var(--mint);}
.sf-barrow b{text-align:right;}
.sf-brief{display:flex;flex-direction:column;gap:4px;}
.sf-brief button{text-align:left;border:0;border-bottom:1px solid var(--line);background:none;padding:6px 0;font:inherit;font-size:13.5px;cursor:pointer;}
.sf-brief small{color:var(--ink-2);}
.sf-reqrow{display:flex;gap:10px;align-items:center;border:1px solid var(--line);border-radius:12px;padding:8px;margin-bottom:8px;}
.sf-reqrow>div:not(.act){flex:1;min-width:0;display:flex;flex-direction:column;font-size:14px;} .sf-reqrow small{color:var(--ink-2);}
.sf-reqrow .act{display:flex;flex-direction:column;gap:6px;flex:0 0 auto;}
.sf-pcards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:12px;}
.sf-pcard{text-align:left;border:1px solid var(--line);border-radius:12px;padding:12px;background:var(--white);font:inherit;cursor:pointer;display:flex;flex-direction:column;gap:2px;}
.sf-pcard.on{border-color:var(--mint);box-shadow:0 0 0 2px var(--mint-tint);}
.sf-pcard>span{font-weight:800;} .sf-pcard>small{color:var(--ink-2);font-size:12px;}
.sf-pcard .nums{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;margin-top:6px;}
.sf-pcard .nums div{display:flex;flex-direction:column;} .sf-pcard .nums small{font-size:11.5px;color:var(--ink-2);} .sf-pcard .nums b{font-size:17px;}
.sf-pcard .ok{color:#067647;} .sf-pcard .bad{color:#B42318;}
.sf-plist{display:flex;flex-direction:column;}
.sf-prow{display:flex;align-items:center;gap:10px;padding:8px 4px;border-bottom:1px solid var(--line);}
.sf-prow>div{flex:1;min-width:0;display:flex;flex-direction:column;font-size:14px;} .sf-prow small{color:var(--ink-2);font-size:12.5px;}
.sf-prow .cnt{font-weight:800;} .sf-prow .st{font-size:12.5px;font-weight:800;border-radius:999px;padding:2px 8px;}
.sf-prow.ok .st{background:#ECFDF3;color:#067647;} .sf-prow.bad .st{background:#FDEDE8;color:#B42318;}
.sf-polbar,.sf-polset{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px;}
.sf-polbar input{flex:1 1 200px;min-height:40px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 10px;font:inherit;font-size:15px;}
.sf-polset select,.sf-polset input{min-height:40px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 8px;font:inherit;}
.sf-poltbl td,.sf-poltbl th{vertical-align:middle;}

@media (max-width:560px){
  .sf-card{margin-left:-14px;margin-right:-14px;border-radius:0;border-left:0;border-right:0;}
  .sf-org{grid-template-columns:1fr;}
  .sf-fpanel{grid-template-columns:1fr;}
  .sf-kvs{grid-template-columns:1fr 1fr;}
  .sf-agrid,.sf-pcards{grid-template-columns:1fr;}
  .sf-rbtn .lb{font-size:9.5px;}
  .sf-reqrow{flex-wrap:wrap;} .sf-reqrow .act{flex-direction:row;width:100%;} .sf-reqrow .act .btn{flex:1;}
}

/* ---- SF1054 대시보드(전 직원 공개, 2026-09-25) — 기존 테마 유지, 본문만 시각화 중심 ---- */
.sfd{display:flex;flex-direction:column;gap:14px;}
.sfd-hero{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;flex-wrap:wrap;background:linear-gradient(135deg,#123c3d,#1f6d6f);color:#fff;border-radius:16px;padding:18px 20px;}
.sfd-hero h2{margin:0;font-size:20px;} .sfd-hero p{margin:4px 0 0;font-size:13.5px;opacity:.9;}
.sfd-month{font-size:13px;font-weight:700;background:rgba(255,255,255,.16);border-radius:999px;padding:4px 12px;}
.sfd-card{position:relative;background:var(--white);border:1px solid var(--line);border-radius:14px;padding:14px 16px;}
.sfd-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;}
.sfd-head h3{margin:0;font-size:16px;}
.sfd-sub{font-size:12.5px;color:var(--ink-2);margin:4px 0 8px;}
.sfd-note{font-size:12px;font-weight:700;color:#8A5A00;background:#FFF7E0;border-radius:999px;padding:2px 8px;}
.sf-seg.sm button{min-height:34px;padding:5px 12px;font-size:13px;}
.sfd-legend{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0 6px;}
.sfd-lg{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:999px;background:var(--white);padding:5px 12px;font:inherit;font-size:13px;cursor:pointer;min-height:36px;}
.sfd-lg i,.sfd-rrow i,.sfd-tip i{display:inline-block;width:10px;height:10px;border-radius:50%;flex:0 0 auto;}
.sfd-lg span{color:var(--ink-2);}
.sfd-chart{width:100%;min-height:230px;touch-action:pan-y;}
.sfd-chart svg{display:block;max-width:100%;}
.sfd-grid{stroke:var(--line);stroke-width:1;}
.sfd-ax{fill:var(--ink-2);font-size:11px;}
.sfd-end{fill:var(--ink);font-size:11.5px;font-weight:700;} .sfd-end .nm{font-weight:600;fill:var(--ink-2);}
.sfd-cross{stroke:var(--ink-2);stroke-width:1;stroke-dasharray:3 3;}
.sfd-tip{position:absolute;z-index:5;background:var(--white);border:1px solid var(--line-strong);border-radius:10px;padding:8px 10px;font-size:12.5px;box-shadow:0 4px 14px rgba(0,0,0,.14);pointer-events:none;min-width:130px;}
.sfd-tip div{display:flex;align-items:center;gap:6px;margin-top:2px;} .sfd-tip div b{margin-left:auto;}
.sfd-table{margin-top:6px;font-size:13px;} .sfd-table summary{cursor:pointer;color:var(--ink-2);}
.sfd-tbl td,.sfd-tbl th{text-align:center;white-space:nowrap;} .sfd-tbl td:first-child,.sfd-tbl th:first-child{text-align:left;}
.sfd-tbl tr.sum td{border-top:2px solid var(--line-strong);background:var(--surface-2);}
.sfd-rank{display:flex;flex-direction:column;gap:6px;margin-top:8px;}
.sfd-rrow{display:grid;grid-template-columns:40px minmax(64px,auto) 1fr 70px;align-items:center;gap:8px;border:0;background:var(--surface-2);border-radius:10px;padding:10px 12px;font:inherit;cursor:pointer;text-align:left;min-height:48px;}
.sfd-rrow .no{font-weight:800;color:var(--mint-ink);} .sfd-rrow .nm{display:flex;align-items:center;gap:6px;font-weight:700;}
.sfd-rrow .bar{height:12px;background:var(--white);border-radius:6px;overflow:hidden;} .sfd-rrow .bar i{display:block;height:100%;border-radius:6px;width:0;}
.sfd-rrow b{text-align:right;font-size:16px;}
.sfd-filters{display:flex;gap:6px;flex-wrap:wrap;}
.sfd-filters select{min-height:36px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 8px;font:inherit;font-size:14px;background:var(--white);}
.sfd-empty{display:flex;flex-direction:column;gap:2px;background:var(--surface-2);border-radius:12px;padding:14px;font-size:14px;} .sfd-empty span{font-size:13px;color:var(--ink-2);}
.sfd-att{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.sfd-atc{display:flex;flex-direction:column;gap:3px;text-align:left;border:1px solid var(--line);border-left:5px solid var(--line-strong);border-radius:12px;padding:12px;background:var(--white);font:inherit;cursor:pointer;}
.sfd-atc.alert{border-left-color:#d03b3b;background:#FEF3F2;} .sfd-atc.watch{border-left-color:#fab219;background:#FFFAEB;}
.sfd-atc .lv{font-size:12.5px;font-weight:800;} .sfd-atc b{font-size:15px;} .sfd-atc .big{font-size:18px;font-weight:800;} .sfd-atc .small{font-size:12.5px;color:var(--ink-2);}
.sfd-counttop{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:10px;}
.sfd-chip{border:1px solid var(--line);background:var(--white);border-radius:999px;padding:4px 10px;font:inherit;font-size:12.5px;cursor:pointer;}
.sfd-legend-lv{display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--ink-2);}
.sfd-sgrgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px;}
.sfd-etc{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-strong);}
.sfd-sgr{display:flex;flex-direction:column;gap:4px;text-align:left;border:1px solid var(--line);border-radius:12px;padding:10px;background:var(--white);font:inherit;cursor:pointer;min-height:132px;}
.sfd-sgr.alert{border-color:#d03b3b;box-shadow:inset 0 0 0 1px #d03b3b;} .sfd-sgr.watch{border-color:#fab219;box-shadow:inset 0 0 0 1px #fab219;} .sfd-sgr.none{opacity:.85;}
.sfd-sgr.etc{background:var(--surface-2);}
.sfd-sgr .hd{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-2);font-weight:700;}
.sfd-sgr>b{font-size:13.5px;line-height:1.3;word-break:keep-all;min-height:2.6em;}
.sfd-pair{display:flex;flex-direction:column;gap:3px;}
.sfd-pair div{display:grid;grid-template-columns:28px 1fr 42px;align-items:center;gap:4px;font-size:11.5px;}
.sfd-pair span{color:var(--ink-2);} .sfd-pair b{text-align:right;font-size:12px;}
.sfd-pair i{display:block;height:8px;border-radius:4px;min-width:2px;} .sfd-pair i.cur{background:#1f6d6f;} .sfd-pair i.base{background:#B1B1B1;}
.sfd-sgr .chg{font-size:12px;font-weight:700;} .sfd-sgr .cnt{font-size:11.5px;color:var(--ink-2);}
.sfd-sum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;}
.sfd-st{display:flex;flex-direction:column;align-items:flex-start;border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:var(--white);font:inherit;cursor:pointer;}
.sfd-st span{font-size:12.5px;color:var(--ink-2);} .sfd-st b{font-size:24px;} .sfd-st small{font-size:11.5px;color:var(--ink-2);}
.sf-ah{font-size:15px;margin:14px 0 6px;}
.sf-setgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;}
.sf-adv{margin:8px 0 12px;} .sf-adv summary{cursor:pointer;font-weight:700;margin-bottom:8px;}
@media (max-width:760px){.sfd-att{grid-template-columns:1fr;} .sfd-sgrgrid,.sfd-etc{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:560px){.sfd-card{padding:12px;} .sfd-hero{padding:14px;} .sfd-hero h2{font-size:17px;} .sfd-sum{grid-template-columns:1fr 1fr 1fr;} .sfd-st b{font-size:20px;} .sf-setgrid{grid-template-columns:1fr;} .sfd-rrow{grid-template-columns:34px minmax(52px,auto) 1fr 62px;padding:10px;}}
.sfd-rrow b .muted{white-space:nowrap;font-size:11.5px;font-weight:600;}
.sfd-rrow{grid-template-columns:40px minmax(64px,auto) 1fr minmax(62px,auto);}
@media (max-width:560px){.sfd-rrow{grid-template-columns:34px minmax(52px,auto) 1fr minmax(56px,auto);}}
.sf-polsum{display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:var(--surface-2);border-radius:10px;padding:10px 12px;margin-bottom:10px;font-size:14px;}
.sf-polsum .btn{margin-left:auto;}
/* 참여기준 필터 칩 — .sf-gchip 모양 재사용. PC 한 줄, 모바일은 줄바꿈(가로 넘침 없음) */
.sf-polf{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;margin-bottom:10px;}
.sf-polf-l{font-size:13px;font-weight:700;color:var(--ink-2);margin-right:2px;}
.sf-polf-b{min-height:36px;padding:4px 14px;}
.sf-polf-n{font-variant-numeric:tabular-nums;font-weight:800;}
.sf-polempty td{text-align:center;padding:22px 10px;}
@media (max-width:520px){.sf-polf-l{flex:0 0 100%;}.sf-polf-b{flex:1 1 calc(50% - 8px);justify-content:center;}}
.sf-polset #sfPolSelN{font-size:14px;}

/* SF1054 참여율 관리(2026-09-25 2차) — 공장/참여기준/연도·월/주차 한 줄 폼 + 4개 카드 + 명단 */
.sf-pform{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:flex-end;max-width:980px;}
.sf-pform .field{margin-bottom:0;flex:0 1 150px;min-width:0;}
.sf-pform .field select{width:100%;}
.sf-pform .sf-pym{display:flex;gap:8px;flex:0 1 230px;min-width:0;} .sf-pform .sf-pym .field{flex:1 1 0;}
.sf-pform #sfPWeekF{flex:1 1 220px;max-width:260px;min-width:0;} .sf-pform #sfPWeekF .field{flex:none;}
.sf-pform #sfPWeekF[hidden]{display:none;}
.sf-pform #sfPGo{min-height:42px;}
.sf-pper{margin:12px 0 8px;font-size:14px;color:var(--ink-2);} .sf-pper b{color:var(--ink);}
.sf-pcards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;max-width:980px;margin-bottom:8px;}
.sf-pcard{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border:1.5px solid var(--line);border-radius:12px;padding:12px 14px;background:var(--white);font:inherit;color:var(--ink);text-align:left;min-height:88px;}
button.sf-pcard{cursor:pointer;} button.sf-pcard:hover{border-color:var(--mint);}
.sf-pcard span{font-size:13px;color:var(--ink-2);font-weight:700;} .sf-pcard b{font-size:26px;line-height:1.15;} .sf-pcard b em{font-style:normal;font-size:15px;color:var(--ink-2);}
.sf-pcard small{font-size:11.5px;color:var(--ink-2);}
.sf-pcard.non b{color:var(--red-ink);}
.sf-pcard.on{border-color:var(--mint);background:var(--mint-tint);box-shadow:0 0 0 1px var(--mint) inset;}
.sf-pcard.static{background:var(--surface-2);}
.sf-plhead{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;max-width:980px;margin-top:10px;} .sf-plhead .sf-ah{margin:0;flex:1 1 auto;}
.sf-plhead input{flex:0 1 240px;min-width:0;}
#sfPList .sf-plist{max-width:980px;}
@media (max-width:640px){
  .sf-pform{flex-direction:column;align-items:stretch;} .sf-pform .field,.sf-pform .sf-pym,.sf-pform #sfPWeekF{flex:none;max-width:none;width:100%;}
  .sf-pcards{grid-template-columns:repeat(2,minmax(0,1fr));} .sf-pcard{min-height:76px;padding:10px 12px;} .sf-pcard b{font-size:22px;}
  .sf-plhead input{flex:1 1 100%;}
}
/* =====================================================================
   정기 위험성평가(rr) — 2026-09-25
   ===================================================================== */
.rr-wrap{max-width:1320px;margin:0 auto;}
/* 정기평가는 평가자 3단 화면·결과표 때문에 이 모듈이 열려 있을 때만 본문 폭을 넓힌다(다른 모듈 영향 없음) */
#app:has(.rr-wrap){max-width:1340px;}
.rr-loading{padding:24px;text-align:center;color:var(--ink-2);}
.rr-tabs{display:flex;gap:2px;overflow-x:auto;border-bottom:1px solid var(--line);margin-bottom:12px;scrollbar-width:thin;}
.rr-tabs button{border:0;background:none;padding:10px 12px;font:inherit;font-weight:700;color:var(--ink-2);border-bottom:2px solid transparent;cursor:pointer;white-space:nowrap;}
.rr-tabs button.on{color:var(--mint-ink);border-bottom-color:var(--mint);}
.rr-hero{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;background:var(--mint-tint);border:1px solid var(--mint);border-radius:var(--radius);padding:14px 16px;margin-bottom:12px;}
.rr-hero h2{margin:0 0 4px;font-size:19px;} .rr-hero p{margin:0;color:var(--ink-2);font-size:14px;} .rr-hero h3{margin:8px 0 0;font-size:16px;}
.rr-hero.sm{display:block;padding:12px 14px;}
.rr-hero-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.rr-head{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px;} .rr-head h3{margin:0;font-size:16px;}
.panel>.rr-head:last-child{margin-bottom:0;} /* 제목 줄만 있는 칸(예: 관리자 홈 '진행 중인 정기평가가 없습니다') 아래 여백 */
.rr-h4{font-size:14.5px;margin:14px 0 6px;}
.rr-steps{margin:6px 0 0;padding-left:0;list-style:none;display:flex;flex-direction:column;gap:6px;}
.rr-steps li{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,2fr) auto;gap:8px;align-items:center;border:1px solid var(--line);border-radius:10px;padding:8px 10px;}
.rr-steps li.ok{background:var(--surface-2);} .rr-steps li span{font-size:13px;color:var(--ink-2);}
.rr-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:7px 0;border-bottom:1px solid var(--line);} .rr-row:last-child{border-bottom:0;}
.rr-kv{display:flex;gap:10px;padding:5px 0;font-size:14px;} .rr-kv>span{flex:0 0 118px;color:var(--ink-2);font-weight:700;font-size:13px;} .rr-kv>b{flex:1;font-weight:500;min-width:0;word-break:break-word;}
.rr-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;}
.rr-campsel{max-width:320px;min-height:38px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 8px;font:inherit;background:var(--white);color:var(--ink);}
.rr-must .rr-todo{display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-top:8px;background:var(--white);color:var(--ink);font:inherit;cursor:pointer;}
.rr-todo .ic{font-size:20px;text-align:center;} .rr-todo .lb{font-weight:700;} .rr-todo .lb small{display:block;font-weight:500;color:var(--ink-2);font-size:12.5px;} .rr-todo b{font-size:16px;white-space:nowrap;}
.rr-todo.warn{border-color:var(--red);background:var(--red-tint);} .rr-todo.warn b{color:var(--red-ink);}
.rr-bar{height:8px;background:var(--surface-2);border-radius:999px;overflow:hidden;flex:1;} .rr-bar i{display:block;height:100%;background:var(--mint);border-radius:999px;transition:width .3s;} .rr-bar.big{height:12px;margin:4px 0 6px;}
.rr-new{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;}
.rr-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;}
.rr-prog{display:grid;grid-template-columns:90px minmax(0,1fr) 52px;gap:8px;align-items:center;margin:7px 0;font-size:14px;} .rr-prog b{text-align:right;}
.rr-2col{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;} .rr-3col{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px;}
/* 대상범위·공정선택 패널: 선택행은 공통 label.opt(표시 20px, 라벨 전체 클릭) 재사용.
   체크박스 크기는 계층과 무관하게 동일, 하위는 들여쓰기만. 조직명은 한글 단어단위 줄바꿈(keep-all). */
.rr-scope{max-height:340px;overflow:auto;overscroll-behavior:contain;border:1px solid var(--line);border-radius:8px;padding:4px 8px;display:flex;flex-direction:column;background:var(--white);}
.rr-scope label{display:flex;gap:8px;align-items:center;font-size:14.5px;min-height:38px;word-break:keep-all;overflow-wrap:anywhere;cursor:pointer;} .rr-scope label.sub{padding-left:28px;}
.rr-scope label.opt{min-height:40px;padding:4px 2px;flex:1 1 auto;min-width:0;}
.rr-scope-div{padding:2px 0;border-bottom:1px dashed var(--line);} .rr-scope-div:last-child{border-bottom:0;}
.rr-scope-top{display:flex;align-items:center;gap:2px;}
.rr-scope-tg{flex:0 0 auto;width:34px;min-height:40px;border:0;background:none;color:var(--ink-2);font:inherit;font-size:13px;cursor:pointer;border-radius:6px;}
.rr-scope-tg:hover{background:var(--surface-2);} .rr-scope-tg:focus-visible{outline:2px solid var(--mint);outline-offset:0;}
.rr-scope-tg[aria-expanded="false"] .ar{display:inline-block;transform:rotate(-90deg);}
.rr-scope-subs{padding-left:60px;} .rr-scope-subs[hidden]{display:none;} /* 펼침버튼 34 + 간격 2 + 들여쓰기 24 */
.rr-scope-n{color:var(--ink-2);font-size:12.5px;font-weight:400;margin-left:4px;}
.rr-scope-fs{border:0;padding:0;margin:0 0 12px;min-width:0;}
.rr-scope-fs>legend{padding:0;font-weight:700;font-size:13.5px;margin-bottom:2px;display:flex;gap:8px;align-items:baseline;width:100%;}
.rr-scope-fs>legend .rr-scope-cnt{font-weight:700;color:var(--mint-ink);font-size:12.5px;}
.rr-scope-fs .rr-scope-help{margin:0 0 6px;}
.rr-pick{display:flex;flex-direction:column;gap:4px;max-height:320px;overflow:auto;margin:6px 0;}
.rr-pickrow{display:flex;gap:6px;align-items:flex-start;text-align:left;border:1px solid var(--line);border-radius:8px;padding:7px 9px;background:var(--white);color:var(--ink);font:inherit;font-size:14px;cursor:pointer;}
.rr-picked{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0;align-items:center;}
.rr-x{border:0;background:none;color:var(--ink-2);font-size:16px;cursor:pointer;padding:0 4px;}
.rr-subhead{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;} .rr-subhead h3{margin:0;}
.rr-subtabs{display:inline-flex;border:1px solid var(--line-strong);border-radius:999px;overflow:hidden;flex-wrap:wrap;}
.rr-subtabs button{border:0;background:var(--white);padding:7px 13px;font:inherit;font-size:14px;font-weight:700;color:var(--ink-2);cursor:pointer;min-height:38px;}
.rr-subtabs button.on{background:var(--mint);color:#000;}
.rr-filters{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px;}
.rr-filters select,.rr-filters input:where(:not([type="checkbox"]):not([type="radio"])){min-height:38px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 8px;font:inherit;font-size:14px;background:var(--white);color:var(--ink);max-width:100%;}
.rr-filters input[type=search],.rr-filters input:not([type]){min-width:180px;}
.rr-cands,.rr-list{display:flex;flex-direction:column;gap:8px;}
.rr-cand{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--white);color:var(--ink);font:inherit;cursor:pointer;}
.rr-cand:hover{border-color:var(--mint);} .rr-cand.done{opacity:.72;} .rr-cand.hot{border-left:4px solid var(--red);}
.rr-cand .t{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;} .rr-cand .t b{font-size:15px;}
.rr-cand .p{font-size:12.5px;color:var(--ink-2);margin:2px 0 4px;} .rr-cand .c{display:flex;flex-wrap:wrap;gap:4px;} .rr-cand .s{font-size:13px;margin-top:5px;color:var(--mint-ink);}
/* 2026-09-26: 검토후보 카드 — 원본 미리보기 + [평가하기] (카드는 div, 버튼만 클릭) */
div.rr-cand{cursor:default;} div.rr-cand.done{opacity:1;background:var(--surface-2);}
.rr-cpv{display:flex;gap:10px;align-items:flex-start;border-top:1px dashed var(--line);margin-top:7px;padding-top:7px;min-width:0;}
.rr-cpv-th{flex:0 0 auto;} .rr-cpv-th .rr-thumb{width:64px;height:64px;object-fit:cover;border-radius:6px;margin:0;}
.rr-cpv-b{flex:1 1 auto;min-width:0;font-size:13.5px;display:flex;flex-direction:column;gap:2px;}
.rr-cpv-sm{white-space:pre-wrap;overflow-wrap:anywhere;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.rr-cand-act{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px;}
/* [평가하기] 화면 — 기존 YK 위험성평가 양식 */
.rr-as{max-width:1100px;}
.rr-as-top{display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap;margin-bottom:10px;} .rr-as-top h3{margin:0;font-size:18px;}
.rr-as-sec{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:12px 14px;margin-bottom:12px;}
.rr-as-sec>h4{margin:0 0 8px;font-size:15.5px;display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;}
.rr-as-g2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;} .rr-as-g3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px;}
.rr-as-f label{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.rr-as-tag{display:inline-block;font-size:11.5px;font-weight:700;padding:1px 7px;border-radius:999px;background:var(--mint-tint);color:var(--mint-ink);} .rr-as-tag.ed{background:var(--surface-2);color:var(--ink-2);}
.rr-req{color:var(--red);}
.rr-as-score{min-height:44px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:15px;}
.rr-as-state{margin:0 0 6px;font-size:14px;}
.rr-as-srcard{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;display:flex;flex-direction:column;gap:6px;}
.rr-as-srh{display:flex;align-items:center;gap:6px;flex-wrap:wrap;} .rr-as-srh b{font-size:15px;}
.rr-as-kvs{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:13.5px;} .rr-as-kvs em{font-style:normal;color:var(--ink-2);font-weight:700;margin-right:3px;}
.rr-as-txt{font-size:14px;white-space:pre-wrap;overflow-wrap:anywhere;} .rr-as-txt em{display:block;font-style:normal;font-size:12.5px;font-weight:700;color:var(--ink-2);}
.rr-as-ppls{display:flex;flex-direction:column;gap:2px;font-size:13.5px;} .rr-as-ppl span{display:inline-block;min-width:74px;font-weight:700;color:var(--ink-2);margin-right:6px;}
.rr-as-ba{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;} .rr-as-ba em{display:block;font-style:normal;font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:3px;}
.rr-as-ba .rr-thumb{width:84px;height:84px;object-fit:cover;}
.rr-as-linkbox{border-color:var(--mint);background:var(--mint-tint);}
.rr-as-more summary{cursor:pointer;min-height:36px;display:flex;align-items:center;color:var(--ink-2);}
.rr-as-act{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 6px;} .rr-as-act2{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto;}
@media (max-width:760px){
  .rr-as-g2,.rr-as-g3,.rr-as-ba{grid-template-columns:1fr;} .rr-as-sec{padding:10px;}
  .rr-as-act>.btn{flex:1 1 100%;min-height:46px;} .rr-as-act2{margin-left:0;width:100%;} .rr-as-act2 .btn{flex:1 1 auto;}
  .rr-cand-act .btn{flex:1 1 auto;min-height:40px;}
}
.rr-pager{display:flex;gap:4px;justify-content:center;flex-wrap:wrap;margin:12px 0;} .rr-pager button{min-width:36px;min-height:36px;border:1px solid var(--line-strong);border-radius:8px;background:var(--white);color:var(--ink);font:inherit;cursor:pointer;} .rr-pager button.on{background:var(--mint);border-color:var(--mint);}
.rr-chip{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:700;border:1px solid var(--line-strong);background:var(--surface-2);color:var(--ink);white-space:nowrap;vertical-align:middle;}
.rr-chip.todo{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);} .rr-chip.done{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.rr-chip.prog{background:#eef4ff;color:#1f4db8;border-color:#9ab4ea;} .rr-chip.warn{background:#fff8e6;color:#7a5c00;border-color:#e0b93d;}
.rr-chip.danger{background:var(--red);color:#fff;border-color:var(--red);} .rr-chip.on{background:var(--mint-tint);border-color:var(--mint);} .rr-chip.ai{background:#f3edff;color:#5b2fb3;border-color:#b69cf0;}
.rr-chip.cat-incident{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);} .rr-chip.cat-external{background:#fff8e6;color:#7a5c00;border-color:#e0b93d;} .rr-chip.cat-opinion{background:#eef4ff;color:#1f4db8;border-color:#9ab4ea;}
.rr-chip.cat-change,.rr-chip.cat-profile{background:#f3edff;color:#5b2fb3;border-color:#b69cf0;}
.rr-modal-wide{max-width:920px !important;}
.rr-cand-head{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:8px;color:var(--ink-2);font-size:13.5px;}
.rr-ext h4{margin:0 0 6px;} .rr-ext p{margin:6px 0;font-size:14px;}
.rr-sigs{display:flex;flex-direction:column;gap:6px;}
.rr-sig{display:flex;gap:8px;border:1px solid var(--line);border-radius:10px;padding:9px 10px;background:var(--white);margin-bottom:6px;} .rr-sig.hot{border-left:4px solid var(--red);}
.rr-sig .b{flex:1;min-width:0;} .rr-sig .t{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-sig .sm{font-size:13.5px;white-space:pre-wrap;word-break:break-word;margin:4px 0;color:var(--ink);}
.rr-atts{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0;} .rr-thumb{width:74px;height:74px;object-fit:cover;border-radius:6px;border:1px solid var(--line);cursor:zoom-in;}
.rr-thumb-na{display:inline-flex;align-items:center;justify-content:center;min-width:74px;min-height:40px;padding:4px 8px;border-radius:6px;border:1px dashed var(--line-strong);font-size:11.5px;color:var(--ink-2);background:var(--bg);}
.rr-vid{max-width:240px;max-height:160px;border-radius:6px;} .rr-aud{max-width:260px;} .rr-file{font-size:13px;}
.rr-sug{border:1px dashed var(--line-strong);border-radius:8px;padding:7px 9px;margin-bottom:6px;font-size:14px;}
.rr-decided{margin-top:12px;}
.rr-mini{padding:8px 10px;font-size:13.5px;}
.rr-score{padding:8px 10px;background:var(--surface-2);border-radius:8px;margin-bottom:10px;font-size:14px;} .rr-band{display:inline-block;padding:1px 8px;border-radius:6px;font-weight:800;}
.rr-3p{display:grid;grid-template-columns:240px minmax(0,1fr) 300px;gap:12px;align-items:start;}
.rr-tree{border:1px solid var(--line);border-radius:var(--radius);padding:8px;max-height:calc(100vh - 180px);overflow:auto;position:sticky;top:8px;background:var(--surface);}
.rr-tsec{margin-bottom:8px;} .rr-tsec-h{font-size:12.5px;font-weight:800;color:var(--ink-2);padding:4px 2px;}
.rr-tunit{display:flex;justify-content:space-between;gap:6px;width:100%;text-align:left;border:0;border-radius:6px;background:none;color:var(--ink);padding:7px 8px;font:inherit;font-size:14px;cursor:pointer;}
.rr-tunit.sub{padding-left:22px;font-size:13.5px;} .rr-tunit.on{background:var(--mint-tint);font-weight:800;} .rr-tunit.dim{opacity:.55;cursor:pointer;} .rr-tunit small{color:var(--ink-2);}
/* 2026-09-26 정기위험성평가 조회 전용(일반 직원): 지금 보는 평가 표시 · 조회 전용 안내 */
.rr-campline{margin:-2px 0 10px;font-size:14px;color:var(--ink-2);overflow-wrap:anywhere;}
.rr-campline b{color:var(--ink);}
.rr-ro-tag{display:inline-block;padding:0 8px;border-radius:9px;border:1px solid var(--line-strong);background:var(--surface-2);font-size:12px;font-weight:700;color:var(--ink-2);}
.rr-ro-note{margin-bottom:10px;}
.rr-side{border:1px solid var(--line);border-radius:var(--radius);padding:10px;background:var(--surface);max-height:calc(100vh - 180px);overflow:auto;position:sticky;top:8px;} .rr-side h4{margin:0 0 8px;}
.rr-unit-h{display:flex;justify-content:space-between;align-items:center;gap:8px;} .rr-unit-h h3{margin:0;font-size:16px;}
.rr-sum{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0;} .rr-sum span{border:1px solid var(--line);border-radius:8px;padding:4px 9px;font-size:13px;} .rr-sum span.todo{border-color:var(--red);color:var(--red-ink);}
.rr-sum2{margin-bottom:8px;font-size:13.5px;}
.rr-risk{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--white);} .rr-risk.pending{border-left:4px solid var(--red);}
.rr-risk-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-hz{font-weight:700;margin:6px 0;font-size:15px;}
.rr-risk-ev{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:6px 0;font-size:13px;}
.rr-link{border:0;background:none;color:var(--mint-ink);font:inherit;font-size:13px;cursor:pointer;text-decoration:underline;padding:0;}
.rr-imp{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:6px 0;font-size:13.5px;}
.rr-risk-act{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}
.rr-ck{display:flex;flex-direction:column;gap:6px;} .rr-ck-row{display:flex;gap:10px;align-items:center;border:1px solid var(--line);border-radius:8px;padding:9px 10px;font-size:14.5px;}
.rr-ck-row.block{border-color:var(--red);background:var(--red-tint);} .rr-ck-row.warn{border-color:#e0b93d;background:#fff8e6;} .rr-ck-row.ok{background:var(--surface-2);}
.rr-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin:8px 0 12px;}
.rr-stats>div{border:1px solid var(--line);border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;} .rr-stats span{font-size:12.5px;color:var(--ink-2);} .rr-stats b{font-size:18px;}
.rr-op{border:1px solid var(--line);border-radius:10px;padding:9px 11px;margin-bottom:8px;background:var(--white);} .rr-op .t{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-op p{margin:5px 0;font-size:14px;white-space:pre-wrap;word-break:break-word;}
.rr-media{margin-top:4px;} .rr-media-btns{display:flex;gap:6px;flex-wrap:wrap;} .rr-media-list{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0;}
.rr-mitem{display:inline-flex;gap:4px;align-items:center;border:1px solid var(--line);border-radius:999px;padding:3px 8px;font-size:12.5px;} .rr-mitem.err{border-color:var(--red);color:var(--red-ink);} .rr-mitem button{border:0;background:none;cursor:pointer;color:var(--ink-2);}
.rr-rec{display:flex;align-items:center;gap:8px;font-size:16px;} .rr-rec-dot{width:12px;height:12px;border-radius:50%;background:var(--red);animation:rrblink 1s infinite;}
@keyframes rrblink{50%{opacity:.2;}}
.rr-sec{border-top:1px solid var(--line);padding:8px 0;} .rr-sec-h{margin-bottom:4px;}
.rr-wrow{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:5px 0;} .rr-wrow .n{font-weight:700;min-width:150px;} .rr-wrow.sub .n{padding-left:14px;font-weight:600;} .rr-wrow.off{opacity:.5;} .rr-wrow .a{margin-left:auto;display:flex;gap:6px;}
.rr-rev{border-bottom:1px solid var(--line);padding:6px 0;} .rr-rev ul{margin:4px 0 0 18px;}
.rr-edtbl input:where(:not([type="checkbox"]):not([type="radio"])){width:100%;min-width:52px;border:1px solid var(--line);border-radius:6px;padding:5px;font:inherit;font-size:14px;background:var(--white);color:var(--ink);} .rr-edtbl td{padding:3px 4px;}
.rr-matrix td,.rr-matrix th{text-align:center;padding:6px;border:1px solid var(--line);font-size:13px;} .rr-matrix td small{font-size:11px;}
.rr-tblwrap{overflow-x:auto;-webkit-overflow-scrolling:touch;} .rr-tbl{min-width:760px;}
/* 평가 결과 — 관리자 전용 '관리' 열(삭제). 표가 가로로 길어도 오른쪽에 붙어 있어 모바일에서 바로 보인다 */
.rr-tbl .rr-col-mgmt{position:sticky;right:0;background:var(--surface);text-align:center;white-space:nowrap;box-shadow:inset 1px 0 0 var(--line);}
.rr-del-head{display:flex;flex-direction:column;gap:2px;margin-bottom:10px;} .rr-del-head b{font-size:16px;overflow-wrap:anywhere;}
.rr-del-tbl{margin:8px 0 10px;} .rr-del-tbl td.num{white-space:nowrap;text-align:right;} .rr-tbl tr[data-rep],.rr-tbl tr[data-risk]{cursor:pointer;} .rr-tbl tr.err td{background:var(--red-tint);} .rr-tbl tr.retired td{color:var(--ink-2);text-decoration:line-through;}
.rr-report h2{margin:0 0 4px;} .rr-appx{margin-top:16px;} .rr-appx h4{margin:10px 0 4px;font-size:14px;}
.rr-timeline{display:flex;flex-direction:column;gap:10px;border-left:3px solid var(--mint);padding-left:14px;margin-left:6px;}
.rr-tl{position:relative;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--white);} .rr-tl::before{content:'';position:absolute;left:-22px;top:14px;width:12px;height:12px;border-radius:50%;background:var(--mint);border:2px solid var(--white);}
.rr-tl.draft{border-style:dashed;} .rr-tl-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:4px;}
.rr-wizard{max-width:1100px;} .rr-wsteps{display:flex;gap:4px;list-style:none;padding:0;margin:0 0 12px;flex-wrap:wrap;} .rr-wsteps li{border:1px solid var(--line);border-radius:999px;padding:5px 11px;font-size:13px;color:var(--ink-2);}
.rr-wsteps li.on{background:var(--mint);border-color:var(--mint);color:#000;font-weight:800;} .rr-wsteps li.done{background:var(--mint-tint);color:var(--mint-ink);}
.rr-drop{border:2px dashed var(--line-strong);border-radius:var(--radius);padding:26px 16px;text-align:center;} .rr-drop.over{border-color:var(--mint);background:var(--mint-tint);}
.rr-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:6px 12px;margin:8px 0;} .rr-map label{display:grid;grid-template-columns:130px minmax(0,1fr);gap:6px;align-items:center;font-size:14px;}
.rr-map select{min-height:36px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 6px;font:inherit;font-size:14px;background:var(--white);color:var(--ink);min-width:0;}
.rr-catbar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px;} .rr-catbar button{border:1px solid var(--line-strong);border-radius:999px;background:var(--white);color:var(--ink);padding:5px 11px;font:inherit;font-size:13px;cursor:pointer;} .rr-catbar button.on{background:var(--mint-tint);border-color:var(--mint);}
.mc-badge{display:inline-block;min-width:20px;padding:0 6px;border-radius:999px;background:var(--red);color:#fff;font-size:12px;font-weight:800;text-align:center;vertical-align:middle;}
/* ---- 정기평가 기준정보(Reference Center) — 공장 선택 · 5개 분류 탭 · 자료카드/파일목록/Matrix ---- */
.rr-ref-top{display:flex;align-items:center;gap:10px 14px;flex-wrap:wrap;margin-bottom:8px;} .rr-ref-top p{margin:0;flex:1 1 260px;}
.rr-ref-fac{display:inline-flex;align-items:center;gap:8px;font-weight:800;}
.rr-ref-fac select{min-height:44px;min-width:130px;border:2px solid var(--mint);border-radius:10px;padding:6px 10px;font:inherit;font-weight:800;font-size:16px;background:var(--white);color:var(--ink);}
.rr-ref-adv{margin-left:auto;}
.rr-ref-tabs{position:relative;display:flex;gap:2px;overflow-x:auto;-webkit-overflow-scrolling:touch;border-bottom:1px solid var(--line);margin-bottom:14px;scrollbar-width:thin;}
.rr-ref-tabs button{flex:0 0 auto;border:0;background:none;padding:10px 14px;min-height:44px;font:inherit;font-weight:700;color:var(--ink-2);border-bottom:3px solid transparent;cursor:pointer;white-space:nowrap;}
.rr-ref-tabs button.on{color:var(--mint-ink);border-bottom-color:var(--mint);}
.rr-ref-tabs button:focus-visible,.rr-ref-sum:focus-visible,.rr-ref-thumb:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}
.rr-ref-h{margin:4px 0 10px;font-size:17px;}
.rr-ref-sums{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;}
.rr-ref-sum{display:flex;flex-direction:column;gap:5px;text-align:left;border:1px solid var(--line);border-radius:12px;background:var(--white);color:var(--ink);padding:12px 14px;font:inherit;cursor:pointer;}
.rr-ref-sum:hover{border-color:var(--mint);} .rr-ref-sum b{font-size:15px;margin-bottom:2px;} .rr-ref-sum span{font-size:13.5px;} .rr-ref-sum .ok{color:var(--mint-ink);} .rr-ref-sum .no{color:var(--ink-2);}
.rr-ref-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin-bottom:14px;}
.rr-ref-card{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:14px 16px;margin-bottom:12px;} .rr-ref-cards .rr-ref-card{margin-bottom:0;display:flex;flex-direction:column;}
.rr-ref-card h4{margin:0 0 6px;font-size:15px;} .rr-ref-card p{margin:0 0 8px;font-size:14px;} .rr-ref-card .btn{align-self:flex-start;margin-top:auto;}
.rr-ref-lib{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:12px 14px;margin-bottom:14px;}
.rr-ref-libh{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:4px;} .rr-ref-libh h3{margin:0;font-size:16px;}
.rr-ref-btns{display:flex;gap:6px;flex-wrap:wrap;}
.rr-ref-search{width:100%;max-width:340px;min-height:40px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 10px;font:inherit;font-size:15px;margin:4px 0 8px;background:var(--white);color:var(--ink);}
.rr-ref-period{border-top:1px solid var(--line);padding:8px 0;} .rr-ref-plabel{font-weight:800;margin-bottom:4px;}
.rr-ref-doc{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;padding:6px 0;border-bottom:1px dashed var(--line);} .rr-ref-doc:last-child{border-bottom:0;}
.rr-ref-doc.old{opacity:.8;} .rr-ref-doc.eff{background:var(--mint-tint);border-radius:8px;padding:8px;}
.rr-ref-dmain{flex:1 1 260px;min-width:0;display:flex;flex-direction:column;gap:2px;}
.rr-ref-dact{display:flex;gap:4px;flex-wrap:wrap;} .rr-ref-dact:empty{display:none;} /* 비관리자: 관리버튼이 없는 칸은 자리도 남기지 않음 */ .rr-ref-dact .btn{min-height:36px;}
.rr-ref-fname{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;color:var(--mint-ink);text-decoration:none;} .rr-ref-fname:hover{text-decoration:underline;}
.rr-ref-hist{margin-top:4px;font-size:13.5px;} .rr-ref-hist summary{cursor:pointer;color:var(--ink-2);min-height:32px;display:flex;align-items:center;}
.rr-ref-lays{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;margin-top:6px;}
.rr-ref-lay{border:1px solid var(--line);border-radius:10px;overflow:hidden;display:flex;flex-direction:column;min-width:0;}
.rr-ref-thumb{display:flex;align-items:center;justify-content:center;height:150px;border:0;border-bottom:1px solid var(--line);background:var(--surface-2);cursor:zoom-in;padding:0;width:100%;}
.rr-ref-thumb:disabled{cursor:default;} .rr-ref-thumb img{width:100%;height:100%;object-fit:cover;}
.rr-ref-ico{display:flex;flex-direction:column;align-items:center;font-size:34px;color:var(--ink-2);} .rr-ref-ico small{font-size:12px;font-weight:800;} .rr-ref-ico.none{font-size:14px;font-weight:700;}
.rr-ref-layb{padding:8px 10px;display:flex;flex-direction:column;gap:4px;min-width:0;} .rr-ref-layb>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rr-ref-lname{font-size:12.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.rr-ref-viewer{max-height:72vh;overflow:auto;text-align:center;background:var(--surface-2);border-radius:8px;} .rr-ref-viewer img{max-width:100%;cursor:zoom-in;display:inline-block;}
.rr-ref-viewer.zoom img{max-width:none;cursor:zoom-out;}
.rr-ref-pdf{width:100%;height:70vh;border:1px solid var(--line);border-radius:8px;background:#fff;}
.rr-ref-modal.modal-wide{max-width:1100px;}
.rr-ref-chtbl{min-width:760px;} .rr-ref-chtbl td,.rr-ref-chtbl th{vertical-align:top;font-size:14px;} .rr-ref-chtbl .nw{white-space:nowrap;} .rr-ref-chc{min-width:220px;white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere;}
.rr-ref-acc{width:100%;table-layout:fixed;} .rr-ref-acc th,.rr-ref-acc td{text-align:center;font-size:14px;padding:8px 6px;} /* 2026-09-25: 비고 제거 — 4열(관리자는 관리 포함 5열) 균등 */
.rr-ref-acc.mng th:last-child,.rr-ref-acc.mng td:last-child{width:18%;} .rr-ref-accm .btn{min-height:32px;padding:4px 12px;}
@media (max-width:420px){.rr-ref-acc th,.rr-ref-acc td{font-size:13px;padding:7px 3px;} .rr-ref-accm .btn{padding:3px 8px;font-size:12.5px;min-height:30px;}}
.rr-ref-accbtn{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0;}
.rr-ref-mxwrap{margin-top:6px;} .rr-ref-mx{border-collapse:collapse;min-width:640px;} .rr-ref-mx th,.rr-ref-mx td{border:1px solid var(--line);padding:6px;text-align:center;font-size:14px;}
.rr-ref-mx th[scope=row]{text-align:left;white-space:nowrap;position:sticky;left:0;background:var(--white);z-index:1;} .rr-ref-mx thead th{background:var(--surface-2);white-space:nowrap;}
.rr-ref-mx td.tot,.rr-ref-mx th.tot{background:var(--mint-tint);font-weight:800;} .rr-ref-mx tfoot th,.rr-ref-mx tfoot td{background:var(--surface-2);font-weight:800;}
.rr-ref-mx input{width:72px;min-height:38px;text-align:right;border:1px solid var(--line-strong);border-radius:6px;padding:4px 6px;font:inherit;font-size:15px;background:var(--white);color:var(--ink);}
.rr-ref-mx input.bad{border-color:var(--red);background:var(--red-tint);}
.rr-ref-mxfoot{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:8px;}
/* 2026-09-26: 보유현황 '크레인(호이스트 포함)' 행 → 크레인 관리대장(텍스트 옆 작은 '관리대장 ›', hover 시 링크처럼) */
.rr-ref-mxlink{display:inline-flex;align-items:center;gap:8px;border:0;background:none;padding:0;min-height:32px;font:inherit;font-weight:inherit;color:var(--ink);text-align:left;cursor:pointer;}
.rr-ref-mxgo{font-size:12.5px;font-weight:700;color:var(--mint-ink);white-space:nowrap;}
.rr-ref-mxlink:hover{color:var(--mint-ink);} .rr-ref-mxlink:hover .rr-ref-mxgo{text-decoration:underline;}
.rr-ref-mxlink:focus-visible{outline:2px solid var(--mint);outline-offset:2px;border-radius:4px;}
.rr-ref-mxalone{margin:8px 0 0;}
/* 크레인 관리대장 · 중량물취급작업계획서 작성 */
.rr-crane-hd{display:flex;align-items:center;gap:6px 12px;flex-wrap:wrap;}
.rr-crane-fac{display:inline-block;padding:2px 10px;border-radius:999px;background:var(--mint-tint);color:var(--mint-ink);font-weight:800;font-size:14px;}
.rr-crane-link{display:flex;gap:4px 16px;flex-wrap:wrap;align-items:baseline;margin:8px 0 2px;font-size:14px;}
.rr-crane-tbl{width:100%;min-width:780px;} .rr-crane-tbl th,.rr-crane-tbl td{font-size:14px;vertical-align:middle;word-break:keep-all;overflow-wrap:anywhere;}
.rr-crane-tbl .num{text-align:right;white-space:nowrap;} .rr-crane-tbl td.no,.rr-crane-tbl td.plan,.rr-crane-tbl td.mng{white-space:nowrap;} .rr-crane-tbl th.mng{width:1%;}
.rr-crane-tbl tr.off td{color:var(--ink-2);}
.rr-crane-sub{display:block;font-size:12.5px;color:var(--ink-2);}
.rr-crane-no{border:0;background:none;padding:0;min-height:32px;font:inherit;font-weight:800;color:var(--mint-ink);cursor:pointer;} .rr-crane-no:hover{text-decoration:underline;}
.rr-crane-load{display:flex;gap:6px;} .rr-crane-load input{flex:1 1 auto;min-width:0;} .rr-crane-load select{flex:0 0 84px;}
.rr-crane-title{font-size:19px;}
.rr-crane-info{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:4px 16px;margin:8px 0 2px;}
.rr-crane-info div{border-bottom:1px dashed var(--line);padding:5px 0;} .rr-crane-info dt{font-size:12.5px;color:var(--ink-2);font-weight:700;} .rr-crane-info dd{margin:2px 0 0;font-size:15px;font-weight:700;overflow-wrap:anywhere;}
.rr-liftplan-todo{text-align:center;color:var(--ink-2);padding:28px 14px;} .rr-liftplan-todo p{margin:0;font-weight:700;}
@media (max-width:760px){
  /* 모바일: 표 대신 설비별 카드(항목명은 왼쪽 작은 글씨) — 가로 스크롤 없음 */
  .rr-crane-tbl{min-width:0;} .rr-crane-tbl thead{display:none;}
  .rr-crane-tbl,.rr-crane-tbl tbody,.rr-crane-tbl tr,.rr-crane-tbl td{display:block;width:100%;}
  .rr-crane-tbl tr{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:10px;background:var(--white);}
  .rr-crane-tbl td{position:relative;border:0;padding:4px 0 4px 88px;min-height:26px;text-align:left;white-space:normal;}
  .rr-crane-tbl td::before{content:attr(data-l);position:absolute;left:0;top:6px;width:80px;font-size:12.5px;font-weight:700;color:var(--ink-2);}
  .rr-crane-tbl td.num,.rr-crane-tbl td.no{text-align:left;white-space:normal;}
  .rr-crane-tbl td.plan,.rr-crane-tbl td.mng{padding-left:0;} .rr-crane-tbl td.plan::before,.rr-crane-tbl td.mng::before{content:none;}
  .rr-crane-tbl td.plan .btn,.rr-crane-tbl td.mng .btn{width:100%;min-height:44px;margin-top:4px;}
  .rr-crane-info{grid-template-columns:1fr;}
}
.rr-refpanel .rr-refrow{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;padding:7px 0;border-bottom:1px dashed var(--line);} .rr-refpanel .rr-refrow .t{flex:1 1 280px;min-width:0;overflow-wrap:anywhere;} .rr-refpanel .rr-refrow .a{display:flex;gap:4px;flex-wrap:wrap;}
@media (max-width:1100px){.rr-3p{grid-template-columns:220px minmax(0,1fr);} .rr-side{grid-column:1 / -1;position:static;max-height:none;}}
@media (max-width:760px){
  .rr-3p{grid-template-columns:1fr;} .rr-tree{position:static;max-height:260px;} .rr-grid2{grid-template-columns:1fr;} .rr-2col,.rr-3col{grid-template-columns:1fr;}
  .rr-steps li{grid-template-columns:1fr;} .rr-kv>span{flex-basis:92px;} .rr-map label{grid-template-columns:1fr;}
  .rr-filters select,.rr-filters input:where(:not([type="checkbox"]):not([type="radio"])){flex:1 1 140px;min-width:0;} .rr-subtabs button{padding:7px 10px;font-size:13px;}
  /* 모바일: 모달 전체 스크롤과 패널 내부 스크롤이 겹치지 않도록 패널은 늘어나게 두고 모달만 스크롤 */
  .rr-scope{max-height:none;overflow:visible;} .rr-scope label.opt{min-height:44px;} .rr-scope-subs{padding-left:54px;}
  .rr-ref-fac{flex:1 1 auto;} .rr-ref-fac select{flex:1 1 auto;} .rr-ref-adv{margin-left:0;} .rr-ref-tabs button{padding:10px 11px;}
  .rr-ref-lib{padding:10px;} .rr-ref-search{max-width:none;} .rr-ref-lays{grid-template-columns:1fr;} .rr-ref-pdf{height:60vh;}
  .rr-ref-dact .btn{flex:1 1 auto;}
  .rr-must .rr-todo{grid-template-columns:28px minmax(0,1fr);} .rr-todo b{grid-column:2;font-size:15px;}
  .rr-hero h2{font-size:17px;} .rr-campsel{max-width:100%;width:100%;}
}
@media print{
  body.rr-printing #appHeader, body.rr-printing .rr-tabs, body.rr-printing .no-print, body.rr-printing #bottomNav{display:none !important;}
  body.rr-printing .rr-tbl{min-width:0;font-size:10px;} body.rr-printing .rr-tblwrap{overflow:visible;}
  /* 2026-09-26: 이름 없는 @page 는 body 클래스로 범위를 좁힐 수 없어, 예전 '@page{size:A4 landscape}' 가 정기평가 인쇄뿐 아니라
     JSA 현장 수기용 출력·수시평가·작업허가서 등 모든 인쇄를 가로로 바꾸고 있었다. 정기평가 인쇄(body.rr-printing)만
     이름 붙은 가로 페이지(rrLandscape)를 쓰게 하고, 나머지는 원래 기본값(A4 세로)으로 되돌린다. */
  body.rr-printing{page:rrLandscape;}
  @page rrLandscape{size:A4 landscape;margin:10mm;}
}
/* ---- 정기평가 공정별 위험성평가표(Risk Register) · Risk 상세(PPT 양식) · 기존자료 가져오기 (2026-09-25) ---- */
.banner.info{background:var(--mint-tint);border:1px solid var(--mint);color:var(--mint-ink);font-weight:600;}
.print-only{display:none;}
.rr-center{min-width:0;}
.rr-reg-top{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;margin-bottom:10px;}
.rr-reg-acts{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto;}
.rr-reg-psel{display:none;}
.rr-reg-body{display:grid;grid-template-columns:230px minmax(0,1fr);gap:12px;align-items:start;}
.rr-reg-tree{border:1px solid var(--line);border-radius:var(--radius);padding:8px;max-height:calc(100vh - 170px);overflow:auto;position:sticky;top:8px;background:var(--surface);}
.rr-regm{margin-bottom:8px;} .rr-regm-h{font-size:12.5px;font-weight:800;color:var(--ink-2);padding:4px 2px;}
.rr-regp{display:flex;justify-content:space-between;align-items:center;gap:6px;width:100%;text-align:left;border:0;border-radius:6px;background:none;color:var(--ink);padding:7px 8px 7px 14px;font:inherit;font-size:14px;cursor:pointer;min-height:36px;}
.rr-regp:hover{background:var(--surface-2);} .rr-regp.on{background:var(--mint-tint);font-weight:800;} .rr-regp.off{opacity:.55;}
.rr-regp small{color:var(--ink-2);font-size:12px;flex:0 0 auto;} .rr-regp span{min-width:0;overflow-wrap:anywhere;}
.rr-regp:focus-visible{outline:2px solid var(--mint);outline-offset:0;}
.rr-reg-main{min-width:0;}
.rr-regh{display:flex;justify-content:space-between;align-items:flex-start;gap:8px 12px;flex-wrap:wrap;margin-bottom:6px;} .rr-regh h3{margin:0 0 4px;font-size:16px;}
.rr-regh-a{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-regh-a select{min-height:38px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 8px;font:inherit;font-size:14px;background:var(--white);color:var(--ink);max-width:220px;}
.rr-reg-ret{min-height:38px;}
.rr-reg-stats{display:flex;gap:6px;flex-wrap:wrap;} .rr-reg-stats span{border:1px solid var(--line);border-radius:8px;padding:2px 9px;font-size:13px;}
/* 2026-09-25: 열 폭 재배분 — table-layout:fixed + colgroup. 짧은 값·숫자 열은 고정폭, 남는 폭은 작업명/원인·위험성 감소대책이 반씩(글자크기 유지) */
.rr-reg-tbl{table-layout:fixed;width:100%;min-width:1000px;border:1px solid var(--line-strong);} .rr-reg-tbl th,.rr-reg-tbl td{border:1px solid var(--line);vertical-align:top;font-size:13px;padding:6px 5px;line-height:1.45;}
/* 2026-09-26(재조정·균형형) 열 폭: 짧은 값 열(ID·작업형태·분류·유해위험요인·빈도/강도·상태)은 좁은 고정폭,
   위험도(개선전·후)는 원래 42px → 72px 로 '소폭'만(숫자·등급·📷사진 수를 세로로), 글 열은 비율폭 —
   작업명/원인 15% · 현재의 안전조치 17% · 위험성 감소대책 = 나머지. 글은 줄임 없이 셀 안에서 여러 줄로(높이 자동). */
.rr-reg-tbl col.c-id{width:100px;} .rr-reg-tbl col.c-wf{width:40px;} .rr-reg-tbl col.c-cat{width:56px;} .rr-reg-tbl col.c-ht{width:54px;} .rr-reg-tbl col.c-n{width:26px;}
.rr-reg-tbl col.c-r{width:72px;} .rr-reg-tbl col.c-st{width:66px;} .rr-reg-tbl col.c-wc{width:15%;} .rr-reg-tbl col.c-cm{width:17%;}
@media (max-width:1365px){ .rr-reg-tbl{min-width:980px;} .rr-reg-tbl col.c-wc{width:13%;} .rr-reg-tbl col.c-cm{width:15%;} } /* 노트북(1280 등)에서 가로 스크롤이 생기지 않게 */
/* 위험도 칸: 1줄 숫자 · 2줄 등급(구분선) · 아래 📷 사진 수 — 칸을 넓히지 않도록 약간 작게 */
.rr-reg-tbl .rr-reg-r{padding-left:2px;padding-right:2px;}
.rr-reg-tbl .rr-reg-r .rr-rcol{display:flex;width:100%;min-width:0;box-sizing:border-box;padding:2px 3px;gap:1px;}
.rr-reg-tbl .rr-reg-r .rr-rcol b{font-size:14px;line-height:1.1;}
.rr-reg-tbl .rr-reg-r .rr-rcol small{display:block;width:100%;font-size:10.5px;line-height:1.2;border-top:1px solid rgba(0,0,0,.14);padding-top:1px;white-space:normal;word-break:keep-all;overflow-wrap:anywhere;}
.rr-reg-ico{display:flex;align-items:center;justify-content:center;gap:1px;margin-top:3px;font-size:11px;font-weight:700;color:var(--ink-2);white-space:nowrap;} .rr-reg-ico b{font-size:11.5px;color:var(--ink);}
/* 상태(좁게): 배지를 세로로 쌓고, 긴 배지(개선후 미평가 등)는 배지 안에서 줄바꿈 */
.rr-reg-st{display:flex;flex-direction:column;align-items:center;gap:3px;}
.rr-reg-st2{max-width:100%;}
.rr-reg-st .rr-chip{display:inline-block;max-width:100%;box-sizing:border-box;font-size:11px;line-height:1.25;padding:1px 5px;border-radius:8px;white-space:normal;word-break:keep-all;overflow-wrap:anywhere;text-align:center;}
.rr-reg-tbl td.c{padding-left:2px;padding-right:2px;} .rr-reg-tbl thead tr:nth-child(2) th{padding-left:2px;padding-right:2px;}
.rr-reg-tbl td{overflow-wrap:anywhere;word-break:keep-all;}
.rr-reg-tbl thead th{background:var(--surface-2);text-align:center;vertical-align:middle;white-space:nowrap;font-weight:800;}
.rr-reg-tbl td.c{text-align:center;} .rr-reg-tbl td.nw{white-space:nowrap;} .rr-reg-tbl td.nw small{white-space:normal;overflow-wrap:anywhere;} /* 긴 평가기간 표기도 칸 안에서 줄바꿈 */
.rr-reg-tbl .rr-reg-wc{white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere;}
.rr-reg-tbl .rr-reg-m{white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere;}
/* 공정별 위험성평가표 화면만: 넓은 PC 에서 1340px 상한을 넓혀 표 끝(상태)까지 한 화면에 — 좁은 화면은 그대로 */
#app:has(.rr-reg){max-width:1760px;} .rr-wrap:has(.rr-reg){max-width:none;}
.rr-reg-tbl .rr-reg-r{font-weight:800;}
.rr-reg-tbl tbody tr{cursor:pointer;} .rr-reg-tbl tbody tr:hover td{background:#f7fbfb;} .rr-reg-tbl tbody tr:focus-visible{outline:2px solid var(--mint);outline-offset:-2px;}
.rr-reg-tbl tr.retired td{color:var(--ink-2);background:var(--surface-2);}
.rr-reg-cards{display:none;flex-direction:column;gap:8px;}
.rr-reg-card{display:block;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--white);color:var(--ink);font:inherit;cursor:pointer;}
.rr-reg-card.retired{background:var(--surface-2);color:var(--ink-2);}
.rr-reg-card .t{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-reg-card .h{margin:6px 0;font-size:14.5px;font-weight:700;overflow-wrap:anywhere;white-space:pre-wrap;}
.rr-reg-card .s{display:flex;gap:4px 12px;flex-wrap:wrap;font-size:13px;color:var(--ink-2);} .rr-reg-card .s b{color:var(--ink);}
/* Risk 상세 — 기존 PPT 상세양식 */
.rr-rd{max-width:1080px;}
.rr-rd-top{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;}
.rr-rd-acts{display:flex;gap:6px 10px;align-items:center;flex-wrap:wrap;} .rr-rd-apx{min-height:38px;font-size:14px;}
.rr-rd-sheet{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--white);padding:12px;margin-bottom:12px;}
.rr-rd-title{display:flex;align-items:center;gap:6px 8px;flex-wrap:wrap;margin-bottom:10px;} .rr-rd-title span{font-size:13px;color:var(--ink-2);font-weight:700;} .rr-rd-title b{font-size:18px;}
.rr-rd-tbl{width:100%;border-collapse:collapse;table-layout:fixed;font-size:14px;}
.rr-rd-tbl th,.rr-rd-tbl td{border:1px solid var(--line-strong);padding:7px 8px;vertical-align:middle;overflow-wrap:anywhere;white-space:pre-wrap;}
.rr-rd-tbl th{background:var(--surface-2);font-weight:800;text-align:center;word-break:keep-all;}
.rr-rd-tbl td.c{text-align:center;} .rr-rd-sc{font-weight:800;font-size:15px;}
.rr-rd-kind{text-align:center;font-weight:700;}
.rr-rd-hz{font-weight:700;font-size:15px;}
.rr-rd-phh th{background:var(--mint-tint);color:var(--mint-ink);}
.rr-rd-phr td{vertical-align:top;padding:8px;}
.rr-rd-ph{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px;}
.rr-rd-ph .rr-thumb{width:100%;height:auto;aspect-ratio:4/3;}
.rr-rd-noph{display:flex;align-items:center;justify-content:center;min-height:120px;background:var(--surface-2);border-radius:6px;color:var(--ink-2);font-size:13px;}
.rr-rd-sec h3{margin:0 0 8px;font-size:16px;}
.rr-rd-hist{display:flex;flex-direction:column;gap:6px;}
.rr-rd-hrow{display:flex;align-items:center;gap:6px 10px;flex-wrap:wrap;width:100%;text-align:left;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--white);color:var(--ink);font:inherit;font-size:14px;cursor:pointer;min-height:44px;}
.rr-rd-hrow:hover{border-color:var(--mint);} .rr-rd-hrow.on{border-color:var(--mint);background:var(--mint-tint);}
.rr-rd-hs{font-weight:700;margin-left:auto;}
.rr-rd-part,.rr-rd-ev{border:1px solid var(--line);border-radius:10px;padding:9px 11px;margin-bottom:8px;background:var(--white);}
.rr-rd-ev.old{background:var(--surface-2);opacity:.85;}
.rr-rd-ev .t{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:4px;}
.rr-rd-role{display:flex;gap:4px 8px;flex-wrap:wrap;font-size:14px;margin:3px 0;} .rr-rd-role>span:first-child{flex:0 0 auto;font-weight:800;color:var(--mint-ink);min-width:76px;}
.rr-rd-pa{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px;}
.rr-rd-gone{color:var(--red-ink);font-size:13.5px;font-weight:700;}
.rr-rd-imp{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:6px 0;border-bottom:1px dashed var(--line);}
.rr-rd-apxrow{border-bottom:1px solid #ccc;padding:6px 0;font-size:12px;} .rr-rd-apxrow p{margin:3px 0;white-space:pre-wrap;}
/* 평가 화면 — 개선 전/후 위험성 · 사진 · 참여자 */
.rr-ls2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;} .rr-ls2 h5{margin:6px 0;font-size:14px;}
.rr-phpick .rr-phl{display:flex;gap:6px;flex-wrap:wrap;margin:4px 0 6px;min-height:8px;}
.rr-phi{position:relative;display:inline-flex;align-items:center;justify-content:center;width:84px;height:84px;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--surface-2);}
.rr-phi img{width:100%;height:100%;object-fit:cover;}
.rr-phi button{position:absolute;top:2px;right:2px;width:26px;height:26px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:15px;line-height:1;cursor:pointer;}
.rr-risk-ph{display:flex;gap:4px;flex-wrap:wrap;margin:6px 0;} .rr-risk-ph .rr-thumb{width:58px;height:58px;} .rr-risk-ph .rr-thumb.aft{border:2px solid var(--mint);}
.rr-sig-ppl{margin-top:4px;font-size:13px;}
.rr-ppl{display:inline-flex;gap:4px;flex-wrap:wrap;align-items:baseline;margin-right:10px;} .rr-ppl em{font-style:normal;font-weight:800;color:var(--mint-ink);}
.rr-sugs{display:flex;flex-direction:column;gap:6px;}
/* 기존 위험성평가 가져오기(관리자) */
.rr-lg{max-width:1180px;}
.rr-lg-steps{display:flex;gap:4px;list-style:none;padding:0;margin:8px 0 0;flex-wrap:wrap;}
.rr-lg-steps li{border:1px solid var(--line);border-radius:999px;padding:5px 11px;font-size:13px;color:var(--ink-2);}
.rr-lg-steps li.on{background:var(--mint);border-color:var(--mint);color:#000;font-weight:800;} .rr-lg-steps li.done{background:var(--mint-tint);color:var(--mint-ink);}
.rr-lg-map{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px 12px;margin:8px 0;}
.rr-lg-map label{display:grid;grid-template-columns:120px minmax(0,1fr);gap:6px;align-items:center;font-size:14px;}
.rr-lg-map select,.rr-lg-proc select,.rr-lg-proc input,.rr-lg-act select{min-height:36px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 6px;font:inherit;font-size:14px;background:var(--white);color:var(--ink);min-width:0;max-width:100%;}
.rr-lg-prev{min-width:900px;} .rr-lg-prev td{vertical-align:top;font-size:12.5px;white-space:pre-wrap;}
.rr-lg-proc{min-width:720px;} .rr-lg-proc td{vertical-align:middle;} .rr-lg-proc select,.rr-lg-proc input{width:100%;}
.rr-lg-stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px;margin:8px 0 12px;}
.rr-lg-stats>div{border:1px solid var(--line);border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;} .rr-lg-stats span{font-size:12.5px;color:var(--ink-2);} .rr-lg-stats b{font-size:18px;}
.rr-lg-chk{border:1px solid #e0b93d;background:#fffcf2;border-radius:10px;padding:10px;margin-bottom:8px;} .rr-lg-chk.ok{border-color:var(--mint);background:var(--mint-tint);}
.rr-lg-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;} .rr-lg-pair>div{min-width:0;border:1px solid var(--line);border-radius:8px;padding:8px;background:var(--white);}
.rr-lg-pair b{display:block;font-size:14px;} .rr-lg-pair p{margin:4px 0;font-size:13.5px;white-space:pre-wrap;overflow-wrap:anywhere;}
.rr-lg-act{display:flex;gap:6px 10px;align-items:center;flex-wrap:wrap;margin-top:8px;} .rr-lg-act select{flex:1 1 260px;}
.rr-pm{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:8px;}
.rr-pm-h{display:flex;gap:6px;align-items:center;flex-wrap:wrap;} .rr-pm-h b{flex:1 1 auto;}
.rr-pm-r{display:flex;gap:6px 10px;align-items:center;flex-wrap:wrap;padding:6px 0 6px 14px;border-top:1px dashed var(--line);} .rr-pm-r>span:first-child{flex:1 1 160px;font-weight:700;} .rr-pm-r.off{opacity:.55;}
@media (max-width:760px){
  .rr-reg-body{grid-template-columns:1fr;} .rr-reg-tree{display:none;}
  .rr-reg-psel{display:block;width:100%;min-height:46px;border:2px solid var(--mint);border-radius:10px;padding:6px 10px;font:inherit;font-size:15px;font-weight:700;background:var(--white);color:var(--ink);margin-bottom:10px;}
  .rr-reg-acts{margin-left:0;}
  .rr-reg-tblwrap{display:none;} .rr-reg-cards{display:flex;}
  .rr-regh-a{width:100%;} .rr-regh-a select{flex:1 1 160px;max-width:none;}
  .rr-rd-sheet{padding:8px;} .rr-rd-tbl{font-size:13px;} .rr-rd-tbl th,.rr-rd-tbl td{padding:5px;} .rr-rd-tbl th{font-size:12px;}
  .rr-rd-ph{grid-template-columns:1fr;} .rr-rd-hs{margin-left:0;width:100%;}
  .rr-ls2,.rr-lg-pair{grid-template-columns:1fr;} .rr-lg-map label{grid-template-columns:1fr;}
}
@media print{
  body.rr-printing .print-only{display:block !important;}
  body.rr-printing .rr-reg-tree, body.rr-printing .rr-reg-psel, body.rr-printing .rr-reg-top, body.rr-printing .rr-regh-a, body.rr-printing .rr-reg-cards, body.rr-printing .banner.info{display:none !important;}
  body.rr-printing .rr-reg-body{display:block;} body.rr-printing .rr-reg-tblwrap{display:block !important;overflow:visible;}
  body.rr-printing .rr-reg-tbl{min-width:0;width:100%;font-size:9px;table-layout:auto;} body.rr-printing .rr-reg-tbl col{width:auto;} body.rr-printing .rr-reg-tbl .rr-reg-wc{min-width:220px;} body.rr-printing .rr-reg-tbl .rr-reg-m{min-width:200px;max-width:320px;} /* 인쇄는 기존 자동 폭 그대로(화면 고정폭 미적용) */ body.rr-printing .rr-reg-tbl th, body.rr-printing .rr-reg-tbl td{font-size:9px;padding:3px;}
  body.rr-printing .rr-reg-tbl tr{break-inside:avoid;}  body.rr-printing .rr-rd{max-width:none;} body.rr-printing .rr-rd-sheet{border:0;padding:0;break-after:auto;}
  body.rr-printing .rr-rd-tbl{font-size:11px;} body.rr-printing .rr-rd-ph{grid-template-columns:repeat(2,1fr);} body.rr-printing .rr-rd-sec{break-inside:avoid;border:0;padding:0;}
  body.rr-printing .rr-rd-sec .btn, body.rr-printing .rr-rd-pa .btn{display:none !important;}
  body.rr-printing .rr-rd-apx{break-before:page;}
  body.rr-printing .rr-print-tbl{min-width:0;font-size:10px;}
}

/* ── MSDS: 기존 PDF 일괄 가져오기 + 현장 라벨/형태 사진 (2026-09-26) ── */
.ms-tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap;}
.ms-tabs button{flex:1 1 180px;min-height:44px;border:1px solid var(--line-strong);background:var(--white);border-radius:var(--radius);font:inherit;font-size:14px;font-weight:700;color:var(--ink-2);cursor:pointer;padding:6px 10px;}
.ms-tabs button.on{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.ms-note{background:var(--mint-tint);border:1px solid var(--mint);color:var(--mint-ink);border-radius:var(--radius);padding:9px 12px;font-size:13.5px;margin:8px 0 12px;}
.ms-pick-row{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap;}
.ms-pick-row .btn{flex:1 1 160px;}
.ms-filter{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 10px;}
.ms-filter button{min-height:36px;border:1px solid var(--line-strong);background:var(--white);border-radius:18px;padding:4px 12px;font:inherit;font-size:13px;font-weight:700;color:var(--ink-2);cursor:pointer;}
.ms-filter button.on{background:var(--ink);border-color:var(--ink);color:var(--white);}
.ms-sum{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:14px;margin-bottom:8px;}
.ms-opt{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;margin:6px 0;}
.ms-opt-l{font-size:14px;font-weight:700;}
.ms-scroll{max-height:62vh;overflow:auto;border:1px solid var(--line);border-radius:6px;}
.ms-imp-table{min-width:980px;}
.ms-imp-table thead th{position:sticky;top:0;z-index:1;}
.ms-imp-table td{vertical-align:top;}
.ms-imp-table .ms-fn{max-width:220px;white-space:normal;word-break:break-all;}
.ms-imp-table .ms-fn a{color:var(--mint-ink);}
.ms-wrap{white-space:normal !important;min-width:160px;max-width:300px;word-break:keep-all;overflow-wrap:anywhere;}
.ms-in{width:100%;min-width:170px;height:34px;border:1px solid var(--line-strong);border-radius:5px;padding:4px 7px;font:inherit;font-size:13px;}
.ms-in-s{min-width:120px;}
.ms-in:disabled{background:var(--surface-2);color:var(--ink-2);}
.ms-alt{white-space:normal;margin-top:2px;}
.ms-alt a{color:var(--mint-ink);}
input.ms-chk{width:18px;height:18px;}
.ms-imp-foot{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px;}
.ms-imp-foot .btn{flex:1 1 180px;}
.ms-prog{font-size:14px;margin:8px 0;line-height:1.7;}
.ms-bar{height:8px;background:var(--surface-2);border:1px solid var(--line);border-radius:5px;overflow:hidden;}
.ms-bar i{display:block;height:100%;background:var(--mint);}
.ms-bar.big{height:14px;margin:10px 0 4px;}
.ms-stat{margin:8px 0;}
.ms-stat-top{display:flex;justify-content:space-between;font-size:14px;margin-bottom:3px;}
.ms-done-big{font-size:22px;font-weight:800;margin:4px 0;}
.ms-h3{font-size:15px;margin:14px 0 6px;}
.ms-hist{margin-bottom:8px;}
.ms-skipped{margin-bottom:8px;}
/* 2026-09-28: 가져오기 이력 상세 — 최대높이는 공통 .modal 규칙(화면 높이 기준)을 쓰고, 제목·필터·안내·버튼은 고정,
   표(.ms-scroll)만 남은 높이를 채워 스크롤한다(예전 88vh 카드 + 56vh 표는 낮은 화면에서 카드·표가 이중으로 스크롤됐다). */
.modal.ms-wide{max-width:760px;display:flex;flex-direction:column;} /* 카드 overflow 는 공통(auto) — 가로모드 휴대폰처럼 아주 낮으면 카드째 스크롤 */
.modal.ms-wide > *{flex:0 0 auto;}
.modal.ms-wide > .ms-scroll{flex:1 1 auto;min-height:120px;max-height:none;}
/* 검색카드: MSDS / 라벨사진 / 형태사진 O/X */
.ms-status{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:13px;margin:4px 0;color:var(--ink-2);}
.ms-o{color:var(--mint-ink);}
.ms-x{color:var(--red-ink);font-weight:700;}
/* 현장사진 */
.ms-thumbs{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 10px;}
.ms-thumb{position:relative;width:96px;height:96px;padding:0;border:1px solid var(--line-strong);border-radius:6px;overflow:hidden;background:var(--surface-2);cursor:pointer;}
.ms-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.ms-primary{position:absolute;left:3px;top:3px;background:var(--ink);color:var(--white);font-size:11px;font-weight:800;border-radius:4px;padding:1px 5px;}
.ms-imgerr{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:11px;color:var(--ink-2);text-align:center;padding:4px;}
.ms-nophoto{border:1px dashed var(--line-strong);border-radius:6px;padding:14px;text-align:center;color:var(--ink-2);font-size:14px;margin:4px 0 10px;background:var(--surface-2);}
.ms-cap-row{display:flex;gap:8px;}
.ms-cap-row .btn{flex:1 1 0;min-width:0;}
.ms-cap{max-width:460px;} /* 최대높이·카드 스크롤은 공통 .modal 규칙(2026-09-28, 예전 92vh 는 휴대폰에서 화면보다 커질 수 있었다) */
.ms-cap-target{font-size:12.5px;color:var(--ink-2);font-weight:700;}
.ms-cap-name{font-size:19px;font-weight:800;line-height:1.3;word-break:break-word;}
.ms-cap-type{display:inline-block;margin:6px 0 8px;background:var(--mint-tint);color:var(--mint-ink);border:1px solid var(--mint);border-radius:4px;padding:2px 8px;font-size:13px;font-weight:800;}
.ms-cap-previews{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px;}
.ms-cap-previews img{max-width:100%;max-height:46vh;border:1px solid var(--line);border-radius:6px;object-fit:contain;flex:1 1 140px;min-width:0;}
.ms-viewer{max-width:720px;} /* 최대높이·카드 스크롤은 공통 .modal 규칙(2026-09-28, 예전 94vh) */
.ms-viewer img{display:block;max-width:100%;max-height:62vh;margin:0 auto 6px;object-fit:contain;}
.ms-field h2{margin-bottom:6px;}
.ms-bigsearch{width:100%;height:52px;border:2px solid var(--ink);border-radius:var(--radius);padding:8px 12px;font:inherit;font-size:17px;margin-top:4px;}
.ms-fcard{display:block;width:100%;text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:12px;margin-top:8px;cursor:pointer;font:inherit;color:inherit;}
.ms-fcard:active{background:var(--surface-2);}
.ms-fname{font-weight:800;font-size:16px;word-break:break-word;}
.ms-target{border:2px solid var(--ink);}
.ms-target-name{font-size:22px;font-weight:800;line-height:1.25;margin:2px 0 4px;word-break:break-word;}
.ms-saved{position:sticky;top:64px;z-index:5;}
.ms-next .btn + .btn{margin-top:8px;}
.ms-fcard .c-meta,.ms-target .c-meta{font-size:13px;color:var(--ink-2);}
/* MSDS 비관리자: 하단 탭바가 없으므로 탭바용 아래 여백을 줄인다 */
#app.ms-no-nav{padding-bottom:calc(24px + env(safe-area-inset-bottom));}
/* ── MSDS 사진으로 찾기(2026-10-06, 외부 AI 없음) — 등급·근거·사진 비교 ── */
.ms-fneed{position:absolute;left:0;right:0;bottom:0;background:rgba(194,56,15,.88);color:#fff;font-size:10.5px;font-weight:800;text-align:center;padding:1px 2px;line-height:1.35;}
.ms-vcap{font-size:14px;font-weight:700;margin:2px 0 4px;word-break:break-word;}
.ms-ps-preview{margin:10px 0;}
.ms-ps-img{display:block;max-width:100%;max-height:46vh;margin:0 auto 6px;border:1px solid var(--line);border-radius:6px;object-fit:contain;}
.ms-ps-preview .ms-cap-row{margin-top:6px;}
.ms-tips{margin:10px 0 6px;padding-left:18px;font-size:13.5px;color:var(--ink-2);line-height:1.6;}
.ms-ps-read{display:flex;gap:10px;align-items:flex-start;}
.ms-ps-read .ms-thumb{flex:0 0 auto;width:84px;height:84px;}
.ms-ps-lines{flex:1 1 auto;min-width:0;}
.ms-ocr{margin:0;padding-left:16px;font-size:13.5px;line-height:1.55;word-break:break-all;}
.ms-cand .c-top{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.ms-tier{display:inline-block;border-radius:4px;padding:2px 8px;font-size:13px;font-weight:800;border:1px solid var(--line-strong);background:var(--surface-2);color:var(--ink-2);}
.ms-tier.t-very_high{background:var(--mint);border-color:var(--mint);color:#fff;}
.ms-tier.t-high{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.ms-tier.t-medium{background:#fff8e6;border-color:#e0b93d;color:#7a5c00;}
.ms-reasons{margin:6px 0;padding-left:18px;font-size:13.5px;line-height:1.55;}
.ms-cand-ph{margin:6px 0 4px;}
.ms-cand-ph .ms-thumb{width:84px;height:84px;}
.ms-cand-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px;}
.ms-cand-btns .btn{flex:1 1 140px;min-height:40px;}
.msp-crop{max-width:640px;}
.msp-stage{position:relative;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none;text-align:center;margin:6px 0;}
.msp-stage img{display:inline-block;max-width:100%;max-height:58vh;object-fit:contain;pointer-events:none;-webkit-user-drag:none;}
.msp-box{position:absolute;border:3px solid var(--mint);background:rgba(31,109,111,.14);box-shadow:0 0 0 9999px rgba(0,0,0,.35);pointer-events:none;}

/* ── 정기위험성평가: 회사 고정 평가기준(빈도×강도) 표시 (2026-09-26) — 색 + 숫자 + 위험수준 이름 ── */
.rr-lv{display:inline-block;padding:1px 7px;border-radius:4px;font-size:12.5px;font-weight:800;line-height:1.5;border:1px solid rgba(0,0,0,.12);white-space:nowrap;}
.rr-lv-none{background:var(--surface-2);color:var(--ink-2);font-weight:700;}
.rr-rcol{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;min-width:44px;padding:2px 4px;border-radius:4px;line-height:1.15;border:1px solid rgba(0,0,0,.12);}
.rr-rcol b{font-size:14px;}
.rr-rcol small{font-size:10.5px;font-weight:700;white-space:normal;word-break:keep-all;text-align:center;}
.rr-calc{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.rr-calc-f{font-size:15px;}
.rr-calc-rule{font-size:13px;color:var(--ink-2);margin-top:4px;line-height:1.5;}
.rr-fs-hint{font-size:12.5px;color:var(--ink-2);margin-top:3px;min-height:1em;}
.rr-fs-sel{width:100%;}
.rr-cmp{margin:6px 0 2px;display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:13px;}
.rr-cmp:empty{display:none;}
.rr-cmp-arrow{font-weight:800;color:var(--ink-2);}
.rr-std-box summary{cursor:pointer;padding:8px 0;}
.rr-std-ref{margin-top:6px;}
.rr-std-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin:8px 0;}
.rr-std-t,.rr-std-mx{border-collapse:collapse;width:100%;font-size:13px;}
.rr-std-t caption,.rr-std-cap{text-align:left;font-weight:800;padding:4px 0;font-size:13.5px;}
.rr-std-t th,.rr-std-t td,.rr-std-mx th,.rr-std-mx td{border:1px solid var(--line);padding:5px 6px;vertical-align:middle;}
.rr-std-t th,.rr-std-mx th{background:var(--surface-2);}
.rr-std-t td.c{text-align:center;}
.rr-std-mx td{text-align:center;min-width:56px;}
.rr-std-mx td small{font-size:10.5px;font-weight:700;}
.rr-lg-bad{margin:6px 0 0 18px;padding:0;font-weight:500;font-size:12.5px;}
.rr-rd-rulerow td{font-size:12.5px;line-height:1.5;}
@media print{ .rr-lv,.rr-rcol,.rr-std-mx td{-webkit-print-color-adjust:exact;print-color-adjust:exact;} }

/* ── 정기위험성평가 기준정보: 중대재해 사이렌 Library (2026-09-26) ── */
.rr-siren-f{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0;}
.rr-siren-f .rr-ref-search{flex:1 1 220px;min-width:0;}
.rr-siren-f select{flex:0 1 180px;min-width:0;}
.rr-siren-card{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;background:var(--surface);}
.rr-siren-card .t{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.rr-siren-sum{margin:6px 0;font-size:14px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
.rr-siren-act{display:flex;gap:6px;margin-top:8px;flex-wrap:wrap;}
.rr-siren-det p{white-space:pre-wrap;word-break:break-word;margin:4px 0 8px;}
.rr-siren-file{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 0;border-bottom:1px solid var(--line);}
.rr-siren-file span{flex:1 1 180px;min-width:0;word-break:break-all;font-size:14px;}

/* ── 권한·수정 Workflow 정리 (2026-09-26) ── */
/* 수시위험성평가: 작성자 표시·타인 작성건 읽기전용(출력양식) */
.radhoc-own{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:10px;font-size:11.5px;font-weight:700;border:1px solid;white-space:nowrap;}
.radhoc-own.mine{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.radhoc-own.ro{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.radhoc-ro-bar{margin-bottom:12px;}
.radhoc-ro-bar .banner{margin-bottom:8px;}
/* 좁은 휴대폰 화면에서만 출력양식 표를 가로로 밀어 본다(인쇄에는 적용하지 않음) */
@media screen and (max-width:760px){
  .radhoc-eval-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .radhoc-eval-scroll > .radhoc-eval-table{min-width:760px;}
  .jsa-doc-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;}
  .jsa-doc-scroll > .jsa-print{min-width:640px;}
}
@media print{
  .radhoc-eval-scroll,.jsa-doc-scroll{overflow:visible !important;}
  .radhoc-eval-scroll > .radhoc-eval-table,.jsa-doc-scroll > .jsa-print{min-width:0 !important;}
}
/* JSA 수정본(개정 Draft)·승인요청·Version History */
.jsa-badge.st-pending{background:#FFF6E0;color:#8A5A00;border-color:#E0B24A;}
.jsa-badge.st-rejected{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.jsa-badge.st-approved{background:#f0f0f0;color:#555;border-color:#ccc;}
.jsa-pre{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;}
.jsa-rev-req{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;margin:8px 0;background:var(--surface-2);display:grid;gap:6px;}
.jsa-rev-req b{display:block;font-size:13px;color:var(--ink-2);}
.jsa-diff-sum{font-size:14px;margin:4px 0 8px;}
.jsa-diff-h4{font-size:14px;margin:12px 0 6px;}
.jsa-diff-list{display:grid;gap:8px;}
.jsa-diff-item{border:1px solid var(--line);border-radius:var(--radius);padding:8px 10px;background:var(--surface);min-width:0;}
.jsa-diff-h{font-size:14px;font-weight:700;margin-bottom:6px;}
.jsa-diff-cols{display:grid;grid-template-columns:1fr;gap:6px;}
@media (min-width:700px){ .jsa-diff-cols{grid-template-columns:1fr 1fr;} }
.jsa-diff-old,.jsa-diff-new{border-radius:6px;padding:6px 8px;min-width:0;font-size:14px;}
.jsa-diff-old{background:#FBF1EE;border:1px solid #F1C9BD;}
.jsa-diff-new{background:var(--mint-tint);border:1px solid #BFE0E1;}
.jsa-diff-lbl{font-size:12px;font-weight:700;color:var(--ink-2);margin-bottom:2px;}
.jsa-diff-f{margin-bottom:4px;}
.jsa-diff-f b{display:block;font-size:12px;color:var(--ink-2);}
.jsa-diff-f.hl{outline:2px solid #E0B24A;outline-offset:1px;border-radius:4px;}
.jsa-diff-empty{color:var(--ink-2);font-size:13px;}
.jsa-dtag{display:inline-block;padding:0 7px;border-radius:9px;font-size:11.5px;font-weight:700;border:1px solid;}
.jsa-dtag.added{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.jsa-dtag.removed{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.jsa-dtag.changed{background:#FFF6E0;color:#8A5A00;border-color:#E0B24A;}
.jsa-dtag.moved{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.jsa-rev-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
.jsa-rev-card{display:block;width:100%;text-align:left;font:inherit;color:inherit;border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;background:var(--surface);cursor:pointer;}
.jsa-rev-card .t{display:flex;justify-content:space-between;gap:8px;align-items:center;}
.jsa-rev-card .t b{min-width:0;overflow-wrap:anywhere;}
.jsa-rev-reason{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.jsa-rstat{display:inline-block;padding:1px 9px;border-radius:10px;font-size:12px;font-weight:700;border:1px solid;white-space:nowrap;}
.jsa-rstat.pending{background:#FFF6E0;color:#8A5A00;border-color:#E0B24A;}
.jsa-rstat.approved{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.jsa-rstat.rejected{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.jsa-rstat.withdrawn{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.jsa-rev-info{width:100%;border-collapse:collapse;margin:6px 0 10px;font-size:14px;table-layout:fixed;}
.jsa-rev-info th,.jsa-rev-info td{border:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top;}
.jsa-rev-info th{width:92px;background:var(--surface-2);font-weight:700;color:var(--ink-2);}
.jsa-rev-info td{overflow-wrap:anywhere;}
.jsa-rev-decide{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);}
.jsa-ver-card{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;margin-bottom:8px;background:var(--surface);}
.jsa-ver-card .t{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center;margin-bottom:4px;}
.jsa-ver-card .btn{margin-top:6px;}

/* =============================================================================
   중량물 취급 작업계획서(YKC) — risk-regular-liftplans.js (2026-09-26)
   · .lp-doc = 회사 양식(A4 세로). 화면에서는 종이처럼 보여 주고(모바일은 zoom 으로 축소), 인쇄는 #lpPrintRoot 에만 그려
     body.lp-printing 일 때 나머지를 숨긴다(다른 인쇄 — rr-printing 가로 페이지 등 — 과 섞이지 않게 접두사 lp- 만 사용).
   ========================================================================== */
.lp-wrap .rr-ref-top{flex-wrap:wrap;gap:8px;}
.lp-meta{font-size:13.5px;color:var(--ink-2);}
.lp-tools{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;}
.lp-tools .rr-ref-search{flex:1 1 280px;}
.lp-sub2{display:block;font-size:12.5px;color:var(--ink-2);}
.lp-list{width:100%;min-width:860px;} .lp-list th,.lp-list td{font-size:14px;vertical-align:middle;word-break:keep-all;overflow-wrap:anywhere;}
.lp-list tr[data-row]{cursor:pointer;} .lp-list tr.off td{color:var(--ink-2);}
.lp-list td.mng{white-space:nowrap;} .lp-list td.mng .btn{margin:2px 4px 2px 0;}
.lp-actions{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0 10px;}
.lp-warn{border:1px solid #e8c36a;background:#fff8e6;border-radius:10px;padding:8px 12px;margin:0 0 10px;font-size:14px;} .lp-warn summary{cursor:pointer;font-weight:700;} .lp-warn ul{margin:6px 0 0;padding-left:18px;}
.lp-side{margin-top:14px;} .lp-src{padding:6px 0;border-bottom:1px dashed var(--line);overflow-wrap:anywhere;} .lp-src .btn{margin-left:4px;}
.lp-vers{margin:4px 0 0;padding-left:18px;font-size:14px;} .lp-vers li{margin:3px 0;}
.lp-entry{border-left:4px solid var(--mint);}
/* 종이 미리보기 */
.lp-docwrap{background:#e9ecec;border-radius:10px;padding:12px;overflow-x:auto;overflow-y:hidden;}
.lp-docwrap-md{padding:6px;}
.lp-doc{width:210mm;margin:0 auto;color:#000;font-size:12.5px;line-height:1.4;}
.lp-page{background:#fff;width:210mm;box-sizing:border-box;padding:10mm;margin:0 auto 12px;box-shadow:0 1px 4px rgba(0,0,0,.18);}
.lp-page:last-child{margin-bottom:0;}
.lp-t{width:100%;border-collapse:collapse;table-layout:fixed;margin:0 0 2px;}
.lp-t th,.lp-t td{border:1px solid #000;padding:3px 5px;vertical-align:middle;word-break:keep-all;overflow-wrap:anywhere;}
.lp-t th{background:#e4e4e4;font-weight:700;text-align:center;white-space:pre-line;}
.lp-t td.c{text-align:center;} .lp-t td.n{text-align:right;}
.lp-head td{border:1px solid #000;padding:6px;} .lp-head .co{text-align:center;font-weight:700;font-size:13px;}
.lp-head .ti{text-align:center;} .lp-head .t1{font-size:23px;font-weight:800;letter-spacing:1px;} .lp-head .t2{font-size:12px;margin-top:2px;}
.lp-head{margin-bottom:8px;}
.lp-basic td{white-space:pre-wrap;}
.lp-h{font-size:13.5px;font-weight:800;margin:9px 0 3px;}
.lp-box{border:1px solid #000;padding:5px 8px;}
.lp-pre{white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere;}
.lp-path{text-align:center;} .lp-path img{display:block;max-width:100%;max-height:92mm;margin:0 auto 4px;object-fit:contain;} .lp-path .lp-pre{text-align:left;}
.lp-pathblank{height:60mm;}
/* 이동경로 그림 여러 장 — 칸 안 격자(화면·인쇄 같은 높이 상한) */
.lp-pimgs{display:grid;grid-template-columns:repeat(var(--lp-cols,2),minmax(0,1fr));gap:2mm;align-items:center;justify-items:center;margin-bottom:4px;}
.lp-path .lp-pimgs img{margin:0;max-height:var(--lp-img-h,60mm);}
.lp-items tr.blank td{height:8mm;}
.lp-two > tbody > tr > td.lp-cell,.lp-two td.lp-cell{vertical-align:top;padding:0;}
.lp-sub{background:#e4e4e4;font-weight:700;text-align:center;border-bottom:1px solid #000;padding:3px;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
.lp-proc{padding:5px 6px;font-size:12px;}
.lp-chk{margin:0;} .lp-chk th,.lp-chk td{font-size:11.5px;padding:2px 3px;} .lp-chk tr > :first-child{border-left:0;} .lp-chk tr > :last-child{border-right:0;} .lp-chk tbody tr:last-child td{border-bottom:0;}
.lp-chk td.box{font-size:15px;line-height:1;}
.lp-meas th{text-align:left;padding-left:8px;}
.lp-edu{margin:2px 0 4px;}
/* 09 근로자 안전교육 확인 — 전자서명 목록(지정된 서명 대상자만. 빈 수기서명 칸·관리감독자 검토의견 없음, 2026-09-27) */
.lp-esum{margin:4px 0 3px;font-size:12px;}
.lp-esign td{height:12mm;} .lp-esign td.lp-sigc{padding:1px 4px;} .lp-esign td.lp-sigc img{display:block;margin:0 auto;max-width:100%;max-height:11mm;object-fit:contain;}
.lp-unsigned{color:#8a1c1c;font-weight:700;}
/* 전자서명 현황 패널(문서 보기·웹 수정) */
.lp-esignp .rr-ref-libh{align-items:baseline;gap:8px;flex-wrap:wrap;}
.lp-sgcount{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:4px 0 8px;}
.lp-sgcount > div{border:1px solid var(--line);border-radius:10px;padding:6px 8px;text-align:center;background:var(--surface);}
.lp-sgcount b{display:block;font-size:22px;line-height:1.2;} .lp-sgcount span{font-size:12.5px;color:var(--ink-2);}
.lp-sgcount .ok b{color:var(--mint-ink);} .lp-sgcount .no b{color:var(--red-ink);}
.lp-sgbtns{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0;} .lp-sgbtns .btn{min-height:40px;}
.lp-sgf{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0 4px;}
.lp-sgf button{border:1px solid var(--line-strong);background:var(--white);color:var(--ink);border-radius:16px;padding:4px 12px;font:inherit;font-size:13.5px;min-height:34px;cursor:pointer;}
.lp-sgf button.on{background:var(--mint);border-color:var(--mint);color:#fff;font-weight:700;}
.lp-sglist{list-style:none;margin:0;padding:0;}
.lp-sglist li{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr) auto;gap:6px 10px;align-items:center;padding:7px 0;border-bottom:1px dashed var(--line);}
.lp-sgw b{display:block;} .lp-sgs{display:flex;align-items:center;gap:8px;font-size:13.5px;} .lp-sgs img{height:34px;max-width:110px;object-fit:contain;border:1px solid var(--line);border-radius:4px;background:#fff;}
.lp-sglist li.ok .lp-sgs span{color:var(--mint-ink);font-weight:700;} .lp-sgs small{font-weight:400;color:var(--ink-2);}
.lp-sgrev{margin-top:8px;font-size:13px;} .lp-sgrev summary{cursor:pointer;}
.lp-sgme{font-weight:700;margin:6px 0 0;}
/* 서명요청 Push 상태(서명 상태와 별개) */
.lp-push{display:inline-block;font-size:11.5px;border:1px solid var(--line-strong);border-radius:10px;padding:0 6px;color:var(--ink-2);white-space:nowrap;}
.lp-push-sent{border-color:var(--mint);color:var(--mint-ink);}
.lp-push-failed,.lp-push-expired{border-color:#e0a0a0;color:var(--red-ink);}
.lp-sga{display:flex;flex-wrap:wrap;gap:4px;}
.lp-hint{background:#fff8e6;border:1px solid #e8c36a;border-radius:8px;padding:6px 8px;margin:6px 0;}
.lp-chip.new{border-style:dashed;} .lp-chip small{font-size:11px;opacity:.8;}
.lp-pushbar{margin-bottom:8px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;}
.lp-bad{color:var(--red-ink);font-weight:700;} .lp-hash{font-family:ui-monospace,Consolas,monospace;font-size:11.5px;color:var(--ink-2);}
/* 서명 대상자 지정 */
.lp-tpq{width:100%;min-height:44px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 10px;font:inherit;font-size:15px;box-sizing:border-box;}
.lp-tpbar{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:8px 0;}
.lp-tpres{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:4px 8px;}
.lp-tplist{list-style:none;margin:0;padding:0;} .lp-tplist li{border-bottom:1px dashed var(--line);} .lp-tplist .opt{margin:0;padding:6px 0;min-height:40px;}
.lp-tpchips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px;} .lp-chip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--mint);background:var(--mint-tint);color:var(--mint-ink);border-radius:14px;padding:2px 4px 2px 10px;font-size:13px;}
.lp-chip button{border:0;background:transparent;font-size:16px;line-height:1;cursor:pointer;min-width:28px;min-height:28px;color:inherit;}
/* 서명 링크·QR */
.lp-qr{text-align:center;margin:8px 0;} .lp-qr img{width:min(320px,80vw);height:auto;image-rendering:pixelated;border:1px solid var(--line);}
.lp-linkrow{display:flex;flex-wrap:wrap;gap:6px;align-items:center;} .lp-linkrow input{flex:1 1 260px;min-height:40px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 8px;font:inherit;font-size:13px;box-sizing:border-box;}
.lp-reissue{margin-top:10px;font-size:13.5px;} .lp-reissue summary{cursor:pointer;}
.lp-qrfull{position:fixed;inset:0;z-index:4000;background:rgba(0,0,0,.82);display:flex;align-items:center;justify-content:center;padding:16px;}
.lp-qrfull-in{background:#fff;border-radius:14px;padding:18px;text-align:center;max-width:94vw;max-height:94vh;overflow:auto;}
.lp-qrfull-in img{width:min(78vh,86vw,640px);height:auto;image-rendering:pixelated;}
.lp-qrfull-t{font-weight:800;font-size:18px;margin-bottom:8px;} .lp-qrfull-s{margin:8px 0;font-size:16px;}
/* Version 이력 */
.lp-vers{list-style:none;padding-left:0;} .lp-vers li{border-bottom:1px dashed var(--line);padding:6px 0;margin:0;} .lp-vers li.on{background:var(--mint-tint);border-radius:8px;padding:6px 8px;}
.lp-vh{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;}
.lp-diff{margin-top:4px;font-size:13px;} .lp-diff summary{cursor:pointer;} .lp-diff table{width:100%;border-collapse:collapse;table-layout:fixed;margin-top:4px;}
.lp-diff th,.lp-diff td{border:1px solid var(--line);padding:3px 5px;vertical-align:top;overflow-wrap:anywhere;font-size:12.5px;} .lp-diff th{background:var(--surface-2);}
/* 근로자 서명 화면(휴대폰 우선) */
.lp-signpage{max-width:640px;margin:0 auto;padding:4px 0 24px;}
.lp-sph{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:12px 14px;margin-bottom:10px;}
.lp-spk{font-size:13px;color:var(--ink-2);} .lp-spno{font-size:22px;font-weight:800;} .lp-spv{display:inline-block;margin-top:2px;font-weight:800;color:var(--mint-ink);border:1px solid var(--mint);border-radius:10px;padding:0 8px;}
.lp-splink{display:inline-block;margin-left:8px;font-size:14px;}
.lp-spbody,.lp-spform,.lp-spdone{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:12px 14px;margin-bottom:10px;}
.lp-spbody h3{margin:2px 0 8px;font-size:18px;} .lp-spbody p{margin:0;font-size:15px;line-height:1.55;}
.lp-spl{font-size:12.5px;font-weight:700;color:var(--ink-2);margin-top:4px;}
.lp-spck{display:flex;align-items:center;gap:8px;font-weight:700;font-size:16px;padding:8px 0;min-height:44px;}
.lp-spwho{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 12px;margin:6px 0 10px;font-size:15px;} .lp-spwho dt{font-weight:700;color:var(--ink-2);} .lp-spwho dd{margin:0;overflow-wrap:anywhere;}
.lp-padbox{position:relative;width:100%;aspect-ratio:2/1;border:2px dashed var(--line-strong);border-radius:10px;background:#fff;margin:4px 0 10px;touch-action:none;}
.lp-padbox canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;cursor:crosshair;border-radius:8px;}
.lp-padhint{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#b8bcbc;font-size:18px;pointer-events:none;}
.lp-spbtns{display:grid;grid-template-columns:1fr 2fr;gap:8px;} .lp-spbtns .btn{min-height:52px;font-size:16px;}
.lp-spdone{text-align:center;} .lp-spok{font-size:44px;line-height:1;color:var(--mint-ink);margin:4px 0;} .lp-spdone .lp-spwho{text-align:left;max-width:340px;margin:8px auto 0;}
/* 편집기 */
.lp-ed{border:1px solid var(--line);border-radius:12px;background:var(--white);padding:12px 14px;margin-bottom:12px;}
.lp-edh{display:flex;align-items:center;gap:8px;margin:0 0 8px;font-size:16px;} .lp-edh span{display:inline-flex;align-items:center;justify-content:center;min-width:30px;height:24px;border-radius:12px;background:var(--mint-tint);color:var(--mint-ink);font-size:13px;font-weight:800;}
.lp-new{font-style:normal;font-size:12px;font-weight:800;color:#fff;background:var(--red);border-radius:10px;padding:1px 8px;}
.lp-ed textarea{width:100%;font:inherit;font-size:14px;line-height:1.45;border:1px solid var(--line-strong);border-radius:8px;padding:6px 8px;resize:vertical;background:var(--white);color:var(--ink);box-sizing:border-box;}
.lp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;} .lp-grid3{grid-template-columns:repeat(3,minmax(0,1fr));}
.lp-ed-items{border-color:var(--red);}
.lp-items-ed{display:flex;flex-direction:column;gap:6px;margin-bottom:8px;}
.lp-ir{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,2fr) minmax(0,.9fr) minmax(0,.8fr) minmax(0,1fr) 150px;gap:6px;align-items:end;}
.lp-ir-h{font-size:12.5px;font-weight:700;color:var(--ink-2);align-items:center;}
.lp-ir label{display:block;margin:0;} .lp-ir label > span{display:none;font-size:12.5px;font-weight:700;color:var(--ink-2);}
.lp-ir input{width:100%;min-height:40px;border:1px solid var(--line-strong);border-radius:8px;padding:6px 8px;font:inherit;font-size:15px;box-sizing:border-box;background:var(--white);color:var(--ink);}
.lp-ir input[inputmode=decimal]{text-align:right;}
.lp-irn{display:none;} .lp-irb{display:flex;gap:4px;} .lp-irb .btn{min-height:40px;}
.lp-irerr{grid-column:1/-1;color:var(--red-ink);font-size:12.5px;} .lp-irerr:empty{display:none;}
.lp-auto{font-style:normal;font-size:11px;color:var(--mint-ink);border:1px solid var(--mint);border-radius:8px;padding:0 5px;}
.lp-reauto{border:1px solid var(--line-strong);background:var(--surface-2);border-radius:8px;font-size:11px;padding:0 5px;cursor:pointer;}
.lp-crow{display:grid;grid-template-columns:56px minmax(0,1fr) auto minmax(0,170px) auto;gap:6px;align-items:center;padding:6px 0;border-bottom:1px dashed var(--line);}
.lp-crow input[data-cf]{min-height:38px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 6px;font:inherit;font-size:14px;box-sizing:border-box;width:100%;background:var(--white);color:var(--ink);}
.lp-cres{display:flex;flex-wrap:wrap;gap:2px 8px;} .lp-cres .opt{margin:0;}
.lp-mrow{display:grid;grid-template-columns:minmax(0,230px) minmax(0,1fr) auto;gap:6px;align-items:start;padding:6px 0;border-bottom:1px dashed var(--line);}
.lp-mrow input{min-height:38px;border:1px solid var(--line-strong);border-radius:8px;padding:4px 8px;font:inherit;font-size:14px;box-sizing:border-box;width:100%;background:var(--white);color:var(--ink);}
.lp-imgs{display:flex;flex-wrap:wrap;gap:10px;margin:6px 0;} .lp-imgs figure{margin:0;max-width:100%;} .lp-imgs img{display:block;max-width:100%;max-height:240px;border:1px solid var(--line);border-radius:6px;} .lp-imgs figcaption{font-size:12.5px;margin-top:4px;}
.lp-savebar{border-top:2px solid var(--line);padding-top:10px;margin-top:6px;} .lp-savebtns{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;}
.lp-wzfoot{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:10px;}
.lp-steps{display:flex;flex-wrap:wrap;gap:6px 14px;list-style:none;padding:0;margin:4px 0 12px;font-size:14px;color:var(--ink-2);}
.lp-steps li{display:flex;align-items:center;gap:6px;} .lp-steps li span{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:12px;border:1px solid var(--line-strong);font-weight:800;font-size:12.5px;}
.lp-steps li.on{color:var(--ink);font-weight:800;} .lp-steps li.on span{background:var(--mint);border-color:var(--mint);color:#fff;} .lp-steps li.done span{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.lp-found{list-style:none;padding:0;margin:6px 0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2px 16px;font-size:14px;}
.lp-found li{overflow-wrap:anywhere;} .lp-found li.ok b{color:var(--mint-ink);} .lp-found li.no b{color:var(--red-ink);}
.lp-pvmodal .modal-body{padding:6px;}
#lpPrintRoot{display:none;}
.lp-saving{opacity:.6;transition:opacity .15s;} /* 웹 수정 저장 중 — 편집 잠금(inert) 표시 */
/* 서명요청 알림 상태 배지(서명완료 > 알림발송 > 미발송) · 수정 권한 관리 모달 · 목록 머리줄 버튼 (2026-10-20) */
.lp-hdbtns{display:inline-flex;flex-wrap:wrap;align-items:center;gap:6px;}
.lp-sglist .lp-sgs{flex-wrap:wrap;gap:2px 8px;}
.lp-nb{display:inline-block;font-size:11.5px;font-weight:700;line-height:1.7;border:1px solid var(--line-strong);border-radius:10px;padding:0 7px;color:var(--ink-2);white-space:nowrap;}
.lp-nb-ok,.lp-nb-signed{border-color:var(--mint);background:var(--mint-tint);color:var(--mint-ink);}
.lp-nb-no{border-color:#e0a0a0;background:var(--red-tint);color:var(--red-ink);}
.lp-nbr{flex:1 1 100%;display:block;font-size:12px;font-weight:400;color:var(--ink-2);overflow-wrap:anywhere;}
.lp-esdone{font-weight:700;}
.lp-pm-fac{margin:0 0 8px;font-size:13.5px;color:var(--ink-2);}
.lp-pm-add{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:8px 0 12px;background:var(--surface);}
.lp-pm-add h4,.lp-pm-h{margin:0 0 6px;font-size:14px;font-weight:800;}
.lp-pm-list{list-style:none;margin:0;padding:0;}
.lp-pm-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;padding:8px 0;border-bottom:1px dashed var(--line);}
.lp-pm-main{flex:1 1 220px;min-width:0;overflow-wrap:anywhere;}
.lp-pm-badge{display:inline-block;font-size:11.5px;font-weight:700;line-height:1.7;border:1px solid #e0a0a0;background:var(--red-tint);color:var(--red-ink);border-radius:10px;padding:0 7px;}
@media (max-width:760px){
  .lp-hdbtns .btn,.lp-pm-add .btn,.lp-pm-row .btn{min-height:44px;} /* 휴대폰: 터치 44px */
  .lp-pm-row .btn{width:100%;}
}
@media (max-width:760px){
  .lp-grid,.lp-grid3,.lp-found{grid-template-columns:1fr;}
  .lp-list{min-width:0;} .lp-list thead{display:none;}
  .lp-list,.lp-list tbody,.lp-list tr,.lp-list td{display:block;width:100%;}
  .lp-list tr{border:1px solid var(--line);border-radius:10px;padding:8px 10px;margin-bottom:10px;background:var(--white);}
  .lp-list td{position:relative;border:0;padding:4px 0 4px 88px;min-height:26px;white-space:normal;}
  .lp-list td::before{content:attr(data-l);position:absolute;left:0;top:6px;width:80px;font-size:12.5px;font-weight:700;color:var(--ink-2);}
  .lp-list td.mng{padding-left:0;display:flex;gap:6px;} .lp-list td.mng::before{content:none;} .lp-list td.mng .btn{flex:1 1 0;min-height:44px;margin:4px 0 0;}
  /* 중량물 제원: 5열 표 대신 중량물별 카드 */
  .lp-ir-h{display:none;}
  .lp-ir{display:block;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--surface);}
  .lp-ir.lp-ir-h{display:none;}
  .lp-ir label{margin-bottom:6px;} .lp-ir label > span{display:block;margin-bottom:2px;}
  .lp-irn{display:block;font-weight:800;margin-bottom:4px;}
  .lp-irb .btn{flex:1 1 0;min-height:44px;}
  .lp-crow{grid-template-columns:48px minmax(0,1fr);} .lp-crow .lp-cres,.lp-crow input[data-cf="remark"],.lp-crow [data-crm]{grid-column:1/-1;}
  .lp-mrow{grid-template-columns:1fr;}
  .lp-docwrap{padding:6px;}
  .lp-sglist li{grid-template-columns:minmax(0,1fr) auto;} .lp-sglist .lp-sga{grid-column:1/-1;} .lp-sglist .lp-sga .btn{width:100%;min-height:44px;}
  .lp-sgbtns .btn{flex:1 1 calc(50% - 6px);min-height:44px;}
}
@media print{
  body.lp-printing > *:not(#lpPrintRoot){display:none !important;}
  body.lp-printing #lpPrintRoot{display:block !important;}
  body.lp-printing{background:#fff !important;}
  #lpPrintRoot .lp-doc{width:auto;font-size:9pt;line-height:1.3;}
  #lpPrintRoot .lp-t th,#lpPrintRoot .lp-t td{padding:2px 4px;}
  #lpPrintRoot .lp-h{margin:6px 0 2px;font-size:10pt;}
  #lpPrintRoot .lp-path img{max-height:var(--lp-img-h,80mm);}
  #lpPrintRoot .lp-esign td{height:8.5mm;padding:1px 4px;} #lpPrintRoot .lp-esign td.lp-sigc img{max-height:7.8mm;}
  #lpPrintRoot .lp-esum{font-size:8.5pt;margin:2px 0;}
  #lpPrintRoot .lp-items tr.blank td{height:7mm;}
  #lpPrintRoot .lp-page{width:auto;padding:0;margin:0;box-shadow:none;}
  #lpPrintRoot .lp-p2{break-before:page;page-break-before:always;}
  #lpPrintRoot .lp-t th,#lpPrintRoot .lp-sub{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  #lpPrintRoot .lp-sec{break-inside:avoid;page-break-inside:avoid;}
  /* 전자서명 목록은 대상자 수만큼 길어질 수 있어 표 안에서 쪽이 넘어갈 수 있게(한 사람 줄은 나누지 않고, 머리행은 다음 쪽에도 반복) */
  #lpPrintRoot .lp-edusec{break-inside:auto;page-break-inside:auto;}
  #lpPrintRoot .lp-h{break-after:avoid;page-break-after:avoid;}
  #lpPrintRoot .lp-t tr{break-inside:avoid;page-break-inside:avoid;}
  #lpPrintRoot .lp-t thead{display:table-header-group;}
  #lpPrintRoot .lp-head .t1{font-size:19pt;}
  #lpPrintRoot .lp-chk th,#lpPrintRoot .lp-chk td{font-size:8.5pt;}
  #lpPrintRoot .lp-proc{font-size:9pt;}
}

/* ── 현장의견수렴 및 모니터링: [현장의견] 공개범위 · [의견수렴 의제] 자유의견/객관식 ── */
.ffa-seg{display:flex;gap:0;margin:0 0 12px;border:1px solid var(--line-strong);border-radius:10px;overflow:hidden;background:var(--white);}
.ffa-seg-b{flex:1 1 0;min-height:46px;border:0;background:var(--white);color:var(--ink);font:inherit;font-weight:800;font-size:15px;cursor:pointer;}
.ffa-seg-b + .ffa-seg-b{border-left:1px solid var(--line-strong);}
.ffa-seg-b.on{background:var(--mint);color:var(--black);}
.ffa-seg-b:focus-visible{outline:2px solid var(--mint-ink);outline-offset:-3px;}
.ffa-top{padding:12px;} .ffa-top .btn{margin:0;} .ffa-top-n{margin:8px 0 0;}
.ffa-search{display:flex;gap:6px;margin:4px 0 8px;} .ffa-search input{flex:1 1 auto;min-width:0;height:44px;}
.ffa-search .btn{margin:0;min-height:44px;flex:0 0 auto;}
.ffa-fnote{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);flex-wrap:wrap;}
.ffa-fnote .btn{margin:0;}
.ffa-list .card{cursor:pointer;}
.chip.ffa-private{background:var(--ink);color:var(--white);border-color:var(--ink);}
.chip.ffa-open{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.chip.ffa-closed{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.chip.ffa-mode{background:var(--white);color:var(--ink);border-color:var(--line-strong);}
.ffa-card .c-top{flex-wrap:wrap;gap:6px;}
.ffa-card .c-find{font-weight:800;font-size:16.5px;margin:6px 0 2px;overflow-wrap:anywhere;}
.ffa-sum{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.ffa-card-f{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;}
.ffa-cnt{font-size:13.5px;font-weight:700;color:var(--mint-ink);}
.ffa-cta{pointer-events:none;margin:0;}
/* 공개범위 · 선택 방식 라디오(큰 터치 영역) */
.ffa-vis{display:flex;gap:8px;flex-wrap:wrap;}
.ffa-vis-o{display:flex;align-items:center;gap:8px;min-height:48px;padding:0 16px;border:1.5px solid var(--line-strong);border-radius:10px;background:var(--white);font-weight:700;cursor:pointer;flex:1 1 120px;}
.ffa-vis-o.on{border-color:var(--mint);background:var(--mint-tint);color:var(--mint-ink);}
.ffa-vis-o input{width:20px;height:20px;margin:0;accent-color:var(--mint-ink);}
.ffa-note{margin-top:8px;padding:10px 12px;border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--line-strong);font-size:14px;font-weight:700;color:var(--ink);}
/* 비공개 등록 완료 */
.ffa-done{text-align:center;padding:24px 16px;}
.ffa-done-i{width:56px;height:56px;margin:0 auto 10px;border-radius:50%;background:var(--mint);color:var(--black);font-size:30px;font-weight:800;line-height:56px;}
.ffa-done h2{margin:0 0 6px;font-size:19px;} .ffa-done p{margin:0 0 10px;}
/* 의제 등록 */
.ffa-modes{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.ffa-mode-o{display:flex;flex-direction:column;gap:2px;padding:12px 14px 12px 42px;position:relative;border:1.5px solid var(--line-strong);border-radius:10px;background:var(--white);cursor:pointer;min-height:64px;}
.ffa-mode-o input{position:absolute;left:14px;top:15px;width:20px;height:20px;margin:0;accent-color:var(--mint-ink);}
.ffa-mode-o b{font-size:15.5px;} .ffa-mode-o span{font-size:13px;color:var(--ink-2);}
.ffa-mode-o.on{border-color:var(--mint);background:var(--mint-tint);}
.ffa-modes.locked .ffa-mode-o{cursor:default;opacity:.75;}
.ffa-optbox{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--surface-2);}
.ffa-optin{display:flex;align-items:center;gap:6px;margin-bottom:6px;}
.ffa-optn{flex:0 0 26px;height:26px;border-radius:50%;background:var(--white);border:1px solid var(--line-strong);text-align:center;line-height:24px;font-size:13px;font-weight:800;}
.ffa-optin input{flex:1 1 auto;min-width:0;height:44px;}
.ffa-optin .btn{margin:0;min-height:44px;flex:0 0 44px;padding:0;}
.ffa-sub{margin-top:10px;display:flex;flex-direction:column;gap:8px;}
.ffa-chk{display:flex;align-items:center;gap:10px;min-height:44px;font-weight:700;cursor:pointer;}
.ffa-chk input{width:20px;height:20px;margin:0;accent-color:var(--mint-ink);}
.ffa-dl{display:flex;gap:6px;align-items:center;} .ffa-dl input{flex:1 1 auto;min-width:0;} .ffa-dl .btn{margin:0;flex:0 0 auto;}
.ffa-dledit{margin-top:10px;}
/* 의제 상세 */
.ffa-dh .c-top{display:flex;flex-wrap:wrap;gap:6px;}
.ffa-title{font-size:20px;margin:10px 0 4px;line-height:1.35;overflow-wrap:anywhere;}
.ffa-meta{font-size:13.5px;color:var(--ink-2);}
.ffa-closedline{font-size:13.5px;font-weight:700;color:var(--ink-2);margin-top:2px;}
.ffa-content{white-space:pre-wrap;overflow-wrap:anywhere;margin:12px 0 4px;font-size:15.5px;}
.ffa-att{margin-top:10px;}
.ffa-sumline{margin-top:10px;padding-top:10px;border-top:1px solid var(--line);font-weight:800;color:var(--mint-ink);font-size:14.5px;}
.ffa-opts{display:flex;flex-direction:column;gap:8px;margin-bottom:10px;}
.ffa-opt{display:flex;align-items:center;gap:12px;min-height:54px;padding:10px 14px;border:1.5px solid var(--line-strong);border-radius:10px;background:var(--white);cursor:pointer;font-size:16px;font-weight:700;}
.ffa-opt input{flex:0 0 24px;width:24px;height:24px;margin:0;accent-color:var(--mint-ink);}
.ffa-opt span{overflow-wrap:anywhere;min-width:0;}
.ffa-opt.on{border-color:var(--mint);background:var(--mint-tint);}
.ffa-opt:focus-within{outline:2px solid var(--mint-ink);outline-offset:1px;}
.ffa-res{display:flex;flex-direction:column;gap:10px;}
.ffa-bar-h{display:flex;justify-content:space-between;gap:10px;font-size:14.5px;margin-bottom:4px;}
.ffa-bar-l{overflow-wrap:anywhere;min-width:0;font-weight:700;}
.ffa-bar-n{flex:0 0 auto;white-space:nowrap;color:var(--ink-2);} .ffa-bar-n b{color:var(--ink);}
.ffa-bar-t{height:14px;border-radius:4px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden;}
.ffa-bar-f{height:100%;background:var(--gray);border-radius:0 4px 4px 0;}
.ffa-bar.mine .ffa-bar-f{background:var(--mint);}
.ffa-bar.mine .ffa-bar-l{color:var(--mint-ink);}
.ffa-cmt{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--white);}
.ffa-cmt.mine{border-color:var(--mint);}
.ffa-ch{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:14px;}
.ffa-who{min-width:0;overflow-wrap:anywhere;}
.ffa-ct{font-size:12.5px;color:var(--ink-2);white-space:nowrap;}
.ffa-cbody{white-space:pre-wrap;overflow-wrap:anywhere;margin-top:4px;font-size:15px;}
.ffa-hid{color:var(--red-ink);font-weight:700;margin-top:4px;}
.ffa-cact{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;} .ffa-cact .btn{margin:0;}
.ffa-cedit{width:100%;margin-top:6px;}
.ffa-cbox{display:flex;gap:8px;align-items:stretch;margin-top:10px;}
.ffa-cbox textarea{flex:1 1 auto;min-width:0;min-height:76px;}
.ffa-cbox .btn{margin:0;flex:0 0 auto;min-width:76px;}
.ffa-mbtns{display:flex;gap:8px;flex-wrap:wrap;} .ffa-mbtns .btn{margin:0;flex:1 1 140px;}
.ffa-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px;}
.ffa-stats > div{border:1px solid var(--line);border-radius:10px;padding:8px;text-align:center;background:var(--surface-2);}
.ffa-stats b{display:block;font-size:20px;} .ffa-stats span{font-size:12.5px;color:var(--ink-2);}
.ffa-h3{font-size:15px;margin:6px 0 8px;}
.ffa-tblwrap{overflow-x:auto;}
.ffa-tbl{width:100%;border-collapse:collapse;font-size:13.5px;}
.ffa-tbl th,.ffa-tbl td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top;}
.ffa-tbl th{background:var(--surface-2);font-weight:800;white-space:nowrap;}
.ffa-audit{margin-top:12px;font-size:13.5px;} .ffa-audit summary{cursor:pointer;font-weight:800;padding:8px 0;}
.ffa-audit ul{margin:6px 0 0;padding-left:18px;} .ffa-audit li{margin-bottom:4px;overflow-wrap:anywhere;}
@media (max-width:560px){
  .ffa-modes{grid-template-columns:1fr;}
  .ffa-stats{grid-template-columns:repeat(2,minmax(0,1fr));}
  .ffa-cbox{flex-direction:column;} .ffa-cbox .btn{min-height:48px;width:100%;}
  .ffa-tbl thead{display:none;}
  .ffa-tbl,.ffa-tbl tbody,.ffa-tbl tr,.ffa-tbl td{display:block;width:100%;}
  .ffa-tbl tr{border:1px solid var(--line);border-radius:8px;margin-bottom:8px;padding:4px 8px;}
  .ffa-tbl td{border:0;padding:2px 0;}
  .ffa-title{font-size:18px;}
}
/* 의견수렴 결과 인쇄: body.ffa-printing 일 때 #ffaPrint 만 출력 */
#ffaPrint{display:none;}
@media print{
  body.ffa-printing > *:not(#ffaPrint){display:none;}
  body.ffa-printing #ffaPrint{display:block;}
  #ffaPrint .ffp{font-size:10pt;line-height:1.45;color:#000;}
  #ffaPrint h1{font-size:16pt;margin:0 0 8px;text-align:center;}
  #ffaPrint h2{font-size:11.5pt;margin:12px 0 4px;break-after:avoid;page-break-after:avoid;}
  #ffaPrint .ffp-t{width:100%;border-collapse:collapse;}
  #ffaPrint .ffp-t th,#ffaPrint .ffp-t td{border:1px solid #666;padding:3px 6px;text-align:left;vertical-align:top;}
  #ffaPrint .ffp-t th{background:#eee;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  #ffaPrint .ffp-kv th{width:26mm;white-space:nowrap;}
  #ffaPrint .ffp-t tr,#ffaPrint .ffp-c li{break-inside:avoid;page-break-inside:avoid;}
  #ffaPrint .ffp-c{margin:0;padding-left:18px;} #ffaPrint .ffp-c li{margin-bottom:6px;}
  #ffaPrint .ffp-ch{font-size:8.5pt;color:#444;}
  #ffaPrint .pre{white-space:pre-wrap;overflow-wrap:anywhere;}
  #ffaPrint .ffp-foot{margin-top:14px;font-size:8pt;color:#555;border-top:1px solid #999;padding-top:4px;}
}
/* 2026-10-05 조직·Family 관리: 현재 사업장 안내(이 화면은 현재 사업장의 Family 만 다룬다) */
.fa-scope{display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;margin:0 0 12px;padding:10px 14px;border:1px solid #b9dcdd;border-radius:12px;background:var(--mint-tint);font-size:14px;}
.fa-scope.is-none{background:#fdf3e7;border-color:#ecc89a;}
.fa-scope-l{font-size:12.5px;font-weight:800;color:var(--ink-2);}
.fa-scope b{font-size:15px;color:var(--mint-ink);}
.fa-scope.is-none b{color:#8f4b0e;}
.fa-scope-t{flex:1 1 100%;font-size:13px;color:var(--ink-2);line-height:1.5;}

/* ── 개선제안 점수형 평가(SCORE_BASED_V1, 2026-10-13) — 평가표 · 진행 · 최종 결과 ── */
.sc-panel .sc-item{border:1px solid var(--line);border-radius:var(--radius);margin:0 0 10px;padding:10px 12px 12px;background:var(--surface);min-width:0;}
.sc-panel .sc-item legend{font-weight:800;font-size:15px;padding:0 6px;}
.sc-n{display:inline-block;min-width:20px;text-align:center;color:var(--mint-ink);}
.sc-max{font-weight:700;font-size:12.5px;color:var(--ink-2);margin-left:4px;}
.sc-desc{margin:2px 0 8px;}
.sc-lv{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;}
.sc-opt{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:56px;padding:6px 4px;border:1px solid var(--line-strong);border-radius:var(--radius);cursor:pointer;text-align:center;background:var(--white);line-height:1.2;}
.sc-opt input{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px;}
.sc-opt .sc-opt-l{font-size:12.5px;font-weight:700;color:var(--ink-2);word-break:keep-all;}
.sc-opt .sc-opt-s{font-size:15px;color:var(--ink);}
.sc-opt.is-on{background:var(--mint-tint);border-color:var(--mint);box-shadow:inset 0 0 0 1px var(--mint);}
.sc-opt.is-on .sc-opt-l,.sc-opt.is-on .sc-opt-s{color:var(--mint-ink);}
.sc-opt:focus-within{outline:2px solid var(--mint);outline-offset:1px;}
@media (max-width:420px){ .sc-lv{grid-template-columns:1fr;} .sc-opt{flex-direction:row;justify-content:space-between;min-height:44px;padding:8px 12px;} }
.sc-total{position:sticky;bottom:calc(62px + env(safe-area-inset-bottom));z-index:2;display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center;padding:10px 12px;margin:6px 0 12px;border:1px solid var(--mint);border-radius:var(--radius);background:var(--mint-tint);}
.sc-total-n{font-size:15px;font-weight:700;} .sc-total-n b{font-size:22px;color:var(--mint-ink);}
.sc-total-g{font-size:14px;font-weight:700;}
.sc-bands{flex:1 1 100%;}
.sc-grade{display:inline-block;min-width:44px;padding:1px 9px;border-radius:999px;font-size:13px;font-weight:800;text-align:center;background:var(--surface-2);color:var(--ink);border:1px solid var(--line-strong);}
.sc-g-A{background:#e6f3ea;border-color:#58a672;color:#17673a;} .sc-g-B{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);}
.sc-g-C{background:#eef2fb;border-color:#8da2d6;color:#2a4586;} .sc-g-D{background:#fdf3e7;border-color:#ecc89a;color:#8f4b0e;} .sc-g-E{background:var(--red-tint);border-color:var(--red);color:var(--red-ink);}
.sc-prev{margin:0 0 10px;font-weight:800;}
.sc-prereq{border:1px dashed var(--line-strong);border-radius:var(--radius);padding:8px 12px;margin:0 0 10px;font-size:13.5px;}
.sc-prereq ul{margin:4px 0 0;padding-left:18px;list-style:none;} .sc-prereq li{margin:2px 0;}
.sc-prereq.is-ok{border-color:var(--mint);background:var(--mint-tint);}
.sc-ok{color:var(--mint-ink);font-weight:700;} .sc-todo{color:var(--ink-2);} .sc-bad{color:var(--red-ink);}
.sc-fref{margin:0 0 10px;padding:8px 12px;border-left:3px solid var(--mint);background:var(--surface-2);border-radius:4px;}
.sc-bar{display:inline-block;vertical-align:middle;width:90px;height:8px;margin:0 6px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);overflow:hidden;}
.sc-bar i{display:block;height:100%;background:var(--mint);}
.sc-big{display:flex;gap:28px;flex-wrap:wrap;margin:6px 0 10px;}
.sc-big i{display:block;font-style:normal;font-size:12.5px;color:var(--ink-2);font-weight:700;}
.sc-big b{font-size:34px;line-height:1.15;color:var(--mint-ink);} .sc-big small{font-size:16px;margin-left:2px;}
.sc-chain{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin:0 0 10px;}
.sc-chain-i i{font-style:normal;font-size:12px;color:var(--ink-2);margin-right:4px;} .sc-chain-a{color:var(--ink-2);}
.sc-detail{margin-top:10px;} .sc-stage{margin:12px 0 18px;} .sc-stage h3,.sc-cycle{font-size:15px;margin:8px 0 6px;}
.sc-stage-r{margin:0 0 6px;} .sc-formula{margin-top:2px;}
.sc-tbl td,.sc-tbl th{vertical-align:top;} .sc-tbl tr.is-ex td{background:var(--surface-2);color:var(--ink-2);}
.sc-items-row td{padding-top:0;} .sc-items{margin:6px 0 4px;padding-left:18px;font-size:13.5px;}
.sc-pending{margin-top:6px;font-size:13.5px;} .sc-audit{margin-top:10px;font-size:13px;} .sc-audit ul{margin:6px 0 0;padding-left:16px;}
.sc-legacy{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:999px;font-size:11.5px;font-weight:700;background:var(--surface-2);border:1px solid var(--line-strong);color:var(--ink-2);vertical-align:middle;}
