/* =============================================================================
   화재예방시스템 > 자위소방대 조직도 > 비상연락망 (2026-10-06) — js/fire-contacts.js
   - 우선: 빠른 확인 · 큰 글씨 · 분명한 순번 · 쉬운 전화. 이미지·그림자 없이 가볍게(수백 명도 한 번에 그림).
   - 모바일(375 · 390 · 430): 순번 | 이름·소속·번호 | [전화하기] — 가로 넘침 없음 · 누르는 곳 44px 이상.
   - PC: 순번 | 이름·소속 | 번호(크게) | [번호 복사]. 관리 화면은 PC 표 → 모바일 카드.
   - 색·모양은 app.css 변수(--line · --ink · --mint · --ap-*)와 화재예방 공통(.fire-seg · .fire-search · .fire-badge · .fire-empty)을 그대로 쓴다.
   ========================================================================== */
/* 조직도 구분 세 개(제강 · 압연 · 비상연락망) — 좁은 화면은 화면 폭을 셋이 나눠 쓰고 글자는 단어 단위로 줄바꿈 */
.fire-seg-org button{line-height:1.25;word-break:keep-all;}
@media (max-width:600px){
  .fire-seg-org{display:flex;width:100%;}
  .fire-seg-org button{flex:1 1 0;min-width:0;padding:6px 8px;}
}

.fec{min-width:0;}
.fec-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;}

/* ── 머리: 비상연락망 · 연락반 · 에스텍시스템 ── */
.fec-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;margin:6px 0 16px;}
.fec-ttl{min-width:0;}
.fec-ttl h3{margin:0;font-size:24px;font-weight:700;letter-spacing:-.015em;line-height:1.25;}
.fec-team{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin:8px 0 0;font-size:18px;line-height:1.3;}
.fec-team-k{display:inline-flex;align-items:center;min-height:28px;padding:2px 12px;border-radius:var(--ap-pill);background:var(--red-tint);color:var(--red-ink);font-size:15px;font-weight:700;}
.fec-team b{font-weight:700;color:var(--ink);}
.fec-dot{color:var(--ink-2);}
.fec-lead{margin:8px 0 0;font-size:16px;color:var(--ink-2);}
.fec-acts{display:flex;gap:8px;flex-wrap:wrap;}
.fec-head .btn{text-decoration:none;}

/* ── 검색 · 건수 ── */
.fec-tools,.fec-mtools{display:flex;align-items:center;gap:8px 14px;flex-wrap:wrap;margin-bottom:12px;}
.fec-search{flex:1 1 280px;max-width:520px;}
.fire-wrap .fec .fec-search input{width:100%;min-height:48px;padding:8px 12px 8px 40px;border:1px solid var(--ap-hair);border-radius:var(--ap-r-md);font:inherit;font-size:16px;background:#fff;color:var(--ink);}
.fire-wrap .fec .fec-search input:focus{outline:none;border-color:var(--ap-blue-focus);box-shadow:0 0 0 3px rgba(0,113,227,.18);}
.fec .fec-search .fire-ico{left:13px;}
.fec-st select{min-height:48px;padding:6px 32px 6px 12px;border:1px solid var(--ap-hair);border-radius:var(--ap-r-md);font:inherit;font-size:16px;background-color:#fff;color:var(--ink);}
.fec-count{margin:0;font-size:15px;color:var(--ink-2);}
.fec-count b{color:var(--ink);font-size:17px;font-weight:700;}
.fec-adm .fec-count{margin:0 0 10px;}

/* ── 조회 목록: 연락순번 오름차순으로 위에서 아래로 ── */
.fec-list{list-style:none;margin:0;padding:0;border:1px solid var(--line);border-radius:var(--ap-r-lg);background:var(--surface);overflow:hidden;}
.fec-item{display:grid;grid-template-columns:64px minmax(0,1.3fr) minmax(0,1fr) auto;grid-template-areas:"no who tel act";align-items:center;gap:6px 16px;padding:14px 18px;border-top:1px solid var(--ap-divider);}
.fec-item:first-child{border-top:0;}
.fec-item[hidden]{display:none;}
.fec-no{grid-area:no;font-size:26px;font-weight:700;line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--red-ink);white-space:nowrap;}
.fec-who{grid-area:who;min-width:0;display:flex;flex-direction:column;gap:2px;}
.fec-name{font-size:20px;font-weight:700;line-height:1.3;overflow-wrap:anywhere;word-break:keep-all;}
.fec-org{font-size:15px;line-height:1.35;color:var(--ink-2);overflow-wrap:anywhere;}
.fec-tel{grid-area:tel;min-width:0;font-size:21px;font-weight:600;letter-spacing:.01em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;}
.fec-act{grid-area:act;justify-self:end;}
.fec .fec-call,.fec .fec-copy{min-height:48px;padding:8px 18px;font-size:16px;white-space:nowrap;text-decoration:none;}
/* [전화하기](모바일) / [번호 복사](PC) — 한 줄에 둘 다 있고 화면 기준으로 하나만 보인다(기기 판별 코드·User-Agent 없음).
   모바일 = 터치가 주 입력인 기기(휴대폰·태블릿: hover:none·pointer:coarse) 또는 이 화면의 모바일 폭(700px 이하)이면서 터치 입력이 있는 기기
   (주 입력을 잘못 알리는 휴대폰 대비). 마우스뿐인 PC 는 창을 좁혀도·확대해도 [번호 복사](tel: 를 PC 에서 억지로 열지 않는다).
   번호 글자: 모바일은 같은 tel 링크(.fec-tel-a), PC 는 보통 글자(.fec-tel-t — 끌어서 선택·복사). 숨긴 쪽은 display:none 이라 화면읽기에도 한 번만 읽힌다. */
.fec .fec-call,.fec-tel-a{display:none;}
.fec-tel-a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,.08);}
@media (hover:none) and (pointer:coarse), (max-width:700px) and (any-pointer:coarse){
  .fec .fec-call{display:inline-flex;}
  .fec .fec-copy,.fec-tel-t{display:none;}
  .fec-tel-a{display:inline;}
}
.fec-nophone{display:inline-flex;align-items:center;min-height:48px;padding:0 4px;font-size:14px;color:var(--ink-2);}
.fec-none{margin-top:12px;}

/* ── 관리 표(관리자) ── */
.fec-tbl-wrap{border:1px solid var(--line);border-radius:var(--ap-r-lg);overflow:hidden;background:var(--surface);}
.fec-tbl{width:100%;border-collapse:collapse;font-size:15px;}
.fec-tbl th{padding:10px 12px;text-align:left;font-size:13px;font-weight:600;color:var(--ap-ink-60);background:var(--ap-parch);border-bottom:1px solid var(--line);white-space:nowrap;}
.fec-tbl td{padding:10px 12px;border-top:1px solid var(--ap-divider);vertical-align:middle;overflow-wrap:anywhere;}
.fec-tbl tbody tr:first-child td{border-top:0;}
.fec-tbl tr.is-off td{background:#fafafa;color:var(--ink-2);}
.fec-c-no{width:64px;white-space:nowrap;font-variant-numeric:tabular-nums;}
td.fec-c-no b{font-size:18px;font-weight:700;color:var(--red-ink);}
tr.is-off td.fec-c-no b{color:var(--ink-2);}
.fec-c-name b{font-size:16px;font-weight:700;}
.fec-c-st{width:92px;white-space:nowrap;}
.fec-c-act{width:1%;white-space:nowrap;text-align:right;}
.fec-c-act .btn + .btn{margin-left:6px;}
.fec-tag{display:inline-block;margin-left:2px;padding:1px 8px;border-radius:var(--ap-pill);background:var(--ap-parch);color:var(--ap-ink-60);font-size:12px;font-weight:600;vertical-align:1px;white-space:nowrap;}
.fec-tag.ext{background:var(--mint-tint);color:var(--mint-ink);}
.fec-warn{display:block;margin-top:2px;font-size:13px;font-weight:600;color:var(--red-ink);}
.fec-tel-v{font-weight:600;font-variant-numeric:tabular-nums;}
.fec-src{display:block;font-size:12.5px;color:var(--mint-ink);}
.fec-src.is-warn{color:var(--red-ink);}
.fire-badge.fec-on{background:var(--mint-tint);color:var(--mint-ink);}
.fec-tip{margin:12px 2px 0;font-size:13.5px;line-height:1.6;color:var(--ink-2);}

/* ── 등록/수정 팝업 ── */
.fec-modal .fec-mode{display:flex;width:100%;margin-bottom:14px;}
.fec-modal .fec-mode button{flex:1 1 0;min-width:0;}
.fec-picked{margin-bottom:8px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--ap-r-md);background:var(--ap-parch);}
.fec-pick-name{font-size:18px;font-weight:700;}
.fec-pick-meta{font-size:14px;color:var(--ink-2);}
.fec-repick{margin:0 0 12px;}
.fec-hint{margin:4px 0 0;font-size:13.5px;line-height:1.5;color:var(--ink-2);}
.fec-hint:empty{display:none;}
.fec-hint.is-err{color:var(--red-ink);font-weight:600;}
.fec-hint.is-ok{color:var(--mint-ink);}
.fec-link{padding:0;border:0;background:none;font:inherit;font-weight:600;color:var(--mint-ink);text-decoration:underline;cursor:pointer;}
.fec-err .btn{margin-left:6px;}
.fec-emp-panel{max-height:300px;}
.staff-combo-item.fec-emp-item{flex-direction:column;align-items:flex-start;row-gap:1px;padding:10px 12px;}
.staff-combo-item.fec-emp-item .sci-meta::before{content:none;}
.staff-combo-item.fec-emp-item .sci-name{font-size:16px;}
.staff-combo-item.fec-emp-item .sci-meta{font-size:13.5px;}
.staff-combo-item.fec-emp-item .fec-emp-tel{color:var(--ink);font-variant-numeric:tabular-nums;}
.fec-modal .modal-btns{flex-direction:row;flex-wrap:wrap;}
.fec-modal .modal-btns .btn{flex:1 1 0;width:auto;min-width:0;min-height:46px;}
.fec-modal .modal-btns .fec-side{flex:0 1 auto;margin-right:auto;}

@media (max-width:820px){
  .fec-tbl-wrap{border:0;border-radius:0;background:none;overflow:visible;}
  .fec-tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);}
  .fec-tbl,.fec-tbl tbody{display:block;}
  .fec-tbl tr{display:grid;grid-template-columns:48px minmax(0,1fr) auto;grid-template-areas:"no name st" "no org org" "no tel tel" "act act act";gap:2px 10px;margin-bottom:10px;padding:12px;border:1px solid var(--line);border-radius:var(--ap-r-md);background:var(--surface);}
  .fec-tbl td{display:block;padding:0;border:0;}
  .fec-tbl tr.is-off{background:#fafafa;}
  .fec-tbl tr.is-off td{background:none;}
  td.fec-c-no{grid-area:no;width:auto;}
  td.fec-c-name{grid-area:name;}
  td.fec-c-org{grid-area:org;color:var(--ink-2);}
  td.fec-c-tel{grid-area:tel;}
  td.fec-c-st{grid-area:st;width:auto;text-align:right;}
  td.fec-c-act{grid-area:act;width:auto;display:flex;gap:6px;margin-top:8px;text-align:left;}
  td.fec-c-act .btn{flex:1 1 0;min-height:44px;}
  .fec-c-act .btn + .btn{margin-left:0;}
}
@media (max-width:700px){
  .fec-item{grid-template-columns:46px minmax(0,1fr) auto;grid-template-areas:"no who act" "no tel act";gap:3px 12px;padding:13px 14px;}
  .fec-no{align-self:start;padding-top:3px;font-size:22px;}
  .fec-name{font-size:19px;}
  .fec-tel{font-size:18px;}
  .fec .fec-call{min-height:52px;padding:8px 14px;}
  .fec-ttl h3{font-size:22px;}
  .fec-head .fec-mng,.fec-acts{width:100%;}
  .fec-acts .btn{flex:1 1 0;}
  .fec-search{flex-basis:100%;max-width:none;}
  .fec-st{flex:1 1 100%;}
  .fec-st select{width:100%;}
}
@media (max-width:359.98px){
  .fec-item{grid-template-columns:40px minmax(0,1fr);grid-template-areas:"no who" "no tel" "no act";}
  .fec-act{justify-self:stretch;margin-top:6px;}
  .fec .fec-call,.fec .fec-copy{width:100%;}
}
@media print{
  .fec-act,.fec-tools,.fec-mng,.fec-acts,.fec-mtools,.fec-tip{display:none!important;}
  .fec-item{break-inside:avoid;grid-template-columns:48px minmax(0,1.3fr) minmax(0,1fr);grid-template-areas:"no who tel";}
}

/* =============================================================================
   전체 비상문자 발송(관리자 전용, 2026-10-06) — js/fire-broadcast.js (.fbc-*)
   빨간색은 발송 버튼 하나에만(화면 전체를 빨갛게 하지 않는다). 전화하기(파란 알약)와 모양·색이 분명히 다르다.
   ========================================================================== */
.fbc-bar{display:flex;align-items:center;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;margin:0 0 14px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--ap-r-lg);background:var(--ap-parch);}
.fbc-bar-t{display:flex;flex-direction:column;gap:2px;min-width:0;}
.fbc-bar-t b{font-size:16px;font-weight:700;}
.fbc-bar-t span{font-size:13.5px;color:var(--ink-2);}
.fbc-bar-acts{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.btn.fbc-go{background:var(--red-ink);border-color:var(--red-ink);color:#fff;font-weight:700;}
.btn.fbc-go:active:not(:disabled){background:#a32e0b;border-color:#a32e0b;}
@media (hover:hover){ .btn.fbc-go:not(:disabled):hover{background:#ad320d;border-color:#ad320d;} }
.btn.fbc-go:disabled{background:var(--ap-parch);border-color:var(--ap-hair-soft);color:#aeaeb2;}
.btn.fbc-open{min-height:44px;padding:8px 18px;font-size:15px;}
.fbc-modal{max-width:520px;}
.fbc-modal .modal-body{font-size:14.5px;white-space:normal;}
.fbc-modal .modal-btns{flex-direction:row;flex-wrap:wrap;}
.fbc-modal .modal-btns .btn{flex:1 1 0;width:auto;min-width:0;min-height:48px;white-space:normal;line-height:1.25;}
.fbc-modal .modal-btns .fbc-go{flex-grow:1.8;}
.fbc-mode,.fbc-recent{margin:0 0 10px;}
.fbc-sum{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin:0 0 10px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--ap-r-md);background:var(--surface);}
.fbc-sum div{display:flex;justify-content:space-between;gap:8px;align-items:baseline;min-width:0;}
.fbc-sum dt{font-size:13.5px;color:var(--ink-2);}
.fbc-sum dd{margin:0;font-size:15px;text-align:right;overflow-wrap:anywhere;}
.fbc-sum div:first-child{grid-column:1 / -1;}
.fbc-sum .is-warn dd{color:var(--red-ink);}
.fbc-sum .fbc-sum-main{grid-column:1 / -1;padding-top:6px;border-top:1px solid var(--ap-divider);}
.fbc-sum .fbc-sum-main dt{font-weight:700;color:var(--ink);font-size:15px;}
.fbc-target{font-size:24px;font-weight:800;color:var(--red-ink);font-variant-numeric:tabular-nums;}
.fbc-ex{margin:0 0 12px;font-size:13.5px;}
.fbc-ex summary{cursor:pointer;color:var(--mint-ink);font-weight:600;}
.fbc-ex ul{margin:6px 0 0;padding:0;list-style:none;max-height:180px;overflow-y:auto;}
.fbc-ex li{padding:5px 0;border-top:1px solid var(--ap-divider);}
.fbc-ex li span{display:block;color:var(--ink-2);font-size:12.5px;}
.fbc-in{display:grid;grid-template-columns:1fr 1fr;gap:0 12px;}
.fbc-in .field{margin-bottom:10px;}
.fbc-pv-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin:2px 0 6px;font-size:13.5px;font-weight:600;color:var(--ink-2);}
.fbc-pv{margin:0;padding:12px 14px;border:1px solid var(--line);border-radius:var(--ap-r-md);background:var(--ap-parch);font:inherit;font-size:14.5px;line-height:1.55;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--ink);}
.fbc-txt{width:100%;box-sizing:border-box;padding:10px 12px;border:1px solid var(--ap-hair);border-radius:var(--ap-r-md);font:inherit;font-size:16px;line-height:1.5;resize:vertical;}
.fbc-meta{display:flex;justify-content:space-between;gap:6px 12px;flex-wrap:wrap;margin:6px 0 0;font-size:13px;color:var(--ink-2);}
.fbc-meta .is-err{color:var(--red-ink);font-weight:700;}
.fbc-test{margin:8px 0 0;font-size:13.5px;}
.fbc-warn{margin:10px 0 2px;font-size:14px;font-weight:700;color:var(--red-ink);}
.fbc-counts{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px;margin:2px 0 10px;}
.fbc-c{display:flex;flex-direction:column;align-items:center;padding:10px 6px;border:1px solid var(--line);border-radius:var(--ap-r-md);background:var(--surface);}
.fbc-c span{font-size:13px;color:var(--ink-2);}
.fbc-c b{font-size:26px;font-weight:800;line-height:1.2;font-variant-numeric:tabular-nums;}
.fbc-c small{font-size:12px;color:var(--ink-2);}
.fbc-c.is-ok b{color:var(--mint-ink);}
.fbc-c.is-err b{color:var(--red-ink);}
.fbc-c.is-warn b{color:#b25000;}
.fbc-note{margin:4px 0;font-size:13px;line-height:1.5;color:var(--ink-2);}
.fbc-note.is-warn{color:#b25000;}
.fbc-fails{margin:8px 0;}
.fbc-fails summary{cursor:pointer;font-weight:700;color:var(--red-ink);}
.fbc-fails ul,.fbc-rl{margin:6px 0 0;padding:0;list-style:none;}
.fbc-fails li,.fbc-rl li{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;padding:7px 0;border-top:1px solid var(--ap-divider);font-size:14px;}
.fbc-ph{font-variant-numeric:tabular-nums;font-weight:600;}
.fbc-why{flex:1 1 100%;font-size:12.5px;color:var(--red-ink);}
.fbc-rl-n{flex:1 1 140px;min-width:0;overflow-wrap:anywhere;}
.fbc-st{padding:1px 8px;border-radius:var(--ap-pill);font-size:12px;font-weight:700;background:var(--ap-parch);color:var(--ap-ink-60);}
.fbc-st-sent,.fbc-st-dev_mock{background:var(--mint-tint);color:var(--mint-ink);}
.fbc-st-failed{background:var(--red-tint);color:var(--red-ink);}
.fbc-st-unknown{background:#fff4e5;color:#b25000;}
.fbc-rl.only-bad li.is-good{display:none;}
.fbc-rf{margin:10px 0 0;font-size:13.5px;}
.fbc-d-meta{margin:0 0 8px;font-size:13.5px;color:var(--ink-2);}
.fbc-hl{margin:0;padding:0;list-style:none;border:1px solid var(--line);border-radius:var(--ap-r-lg);background:var(--surface);overflow:hidden;}
.fbc-hi{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"t btn" "title btn" "m btn";gap:3px 14px;align-items:center;padding:12px 16px;border-top:1px solid var(--ap-divider);}
.fbc-hi:first-child{border-top:0;}
.fbc-hi.is-test{background:#fafafa;}
.fbc-hi-t{grid-area:t;display:flex;align-items:center;gap:6px;font-size:13.5px;color:var(--ink-2);font-variant-numeric:tabular-nums;}
.fbc-hi-title{grid-area:title;font-size:15.5px;font-weight:700;overflow-wrap:anywhere;}
.fbc-hi-m{grid-area:m;display:flex;flex-wrap:wrap;gap:2px 12px;font-size:13.5px;color:var(--ink-2);}
.fbc-hi-m .is-ok{color:var(--mint-ink);font-weight:600;}
.fbc-hi-m .is-err{color:var(--red-ink);font-weight:600;}
.fbc-hi-m .is-warn{color:#b25000;font-weight:600;}
.fbc-hi .btn{grid-area:btn;}
.fec-tag.fbc-tag-main{background:var(--red-tint);color:var(--red-ink);}
@media (max-width:700px){
  .fbc-bar{flex-direction:column;align-items:stretch;}
  .fbc-bar-acts{width:100%;}
  .fbc-bar-acts .btn{flex:1 1 auto;}
  .fbc-bar-acts .fbc-open{flex:2 1 auto;}
  .fbc-in{grid-template-columns:1fr;}
  .fbc-sum{grid-template-columns:1fr;}
  .fbc-hi{grid-template-columns:minmax(0,1fr);grid-template-areas:"t" "title" "m" "btn";}
  .fbc-hi .btn{justify-self:stretch;margin-top:6px;}
}
@media print{ .fbc-bar{display:none!important;} }
