/* =============================================================================
   화재예방시스템 (2026-10-04 신규) — js/modules/fire.js
   - 범위: body.fire-page(이 업무 화면일 때만) · .fire-* · 법정서식 인쇄 틀(@page fireSheet · .ff-sheet 인쇄 규칙 — 서식 안쪽 모양은 css/fire-form-*.css)
   - 공통 부품(.btn .panel .field label.opt .banner .modal .staff-combo)은 css/app.css 것을 그대로 쓴다. 색은 app.css 변수(--mint · --line · --ink …).
   - 모바일(375 · 390 · 430): 가로 넘침 없음 · 누르는 곳 44px 이상 · 글자 14px 이상. 목록은 PC 표 → 모바일 카드.
   - 이 파일은 css/app.css 뒤에 불러와야 한다(같은 우선순위 규칙을 이 파일이 덮어쓴다).
   ========================================================================== */
@media (min-width:1100px){ body.fire-page #app{max-width:1240px;padding-left:20px;padding-right:20px;} }
.fire-wrap{min-width:0;}
.fire-ico{display:inline-block;flex:0 0 auto;vertical-align:-3px;}
.fire-red{color:var(--red-ink);}

/* ── 제목 · 탭 ── */
.fire-head{display:flex;align-items:center;gap:12px;margin-bottom:12px;}
.fire-head-ico{flex:0 0 50px;width:50px;height:50px;border-radius:50%;background:var(--red-tint);color:var(--red-ink);display:flex;align-items:center;justify-content:center;}
.fire-head-t{min-width:0;}
.fire-head-t h2{margin:0;font-size:22px;font-weight:800;line-height:1.3;letter-spacing:-.2px;}
.fire-head-t p{margin:2px 0 0;font-size:14px;color:var(--ink-2);}
.fire-tabs{display:flex;gap:6px;overflow-x:auto;padding:2px 0 12px;margin-bottom:14px;border-bottom:1px solid var(--line);scrollbar-width:thin;-webkit-overflow-scrolling:touch;}
.fire-tab{display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;min-height:44px;padding:6px 16px;border:1px solid var(--line-strong);border-radius:999px;background:var(--surface);
  font-size:15px;font-weight:700;color:var(--ink);white-space:nowrap;text-decoration:none;-webkit-tap-highlight-color:transparent;}
.fire-tab.on{background:var(--ink);border-color:var(--ink);color:#fff;}
@media (hover:hover){ .fire-tab:not(.on):hover{background:var(--surface-2);} }
.fire-tab:focus-visible,.fire-ib:focus-visible,.fire-seg button:focus-visible,.fire-pager button:focus-visible,.fire-ph:focus-visible,a.fire-tr:focus-visible,.fire-recent a:focus-visible,.fire-big:focus-visible{outline:2px solid var(--mint);outline-offset:2px;}

/* ── 불러오는 중 · 비어 있음 · 오류 ── */
.fire-loading{padding:34px 8px;text-align:center;color:var(--ink-2);font-size:15px;}
.fire-empty{padding:32px 12px;text-align:center;color:var(--ink-2);font-size:15px;border:1px dashed var(--line-strong);border-radius:10px;line-height:1.6;}
.fire-empty-t{margin:0 0 6px;font-size:17px;font-weight:800;color:var(--ink);}
.fire-none{margin:4px 0;font-size:14.5px;}
.fire-err{display:flex;align-items:center;justify-content:space-between;gap:10px 12px;flex-wrap:wrap;}
.fire-err span{min-width:0;overflow-wrap:anywhere;}
.fire-busy{opacity:.55;transition:opacity .12s;}

/* ── 배지 ── */
.fire-badge{display:inline-flex;align-items:center;justify-content:center;min-height:24px;padding:1px 9px;border:1px solid transparent;border-radius:5px;font-size:13px;font-weight:800;line-height:1.3;white-space:nowrap;vertical-align:middle;}
.fire-badge.is-done{background:var(--mint-tint);color:var(--mint-ink);border-color:var(--mint);}
.fire-badge.is-open,.fire-badge.is-soon{background:#FFF4D6;color:#7A5C00;border-color:#E0B93D;}
.fire-badge.is-warn{background:var(--red-tint);color:var(--red-ink);border-color:var(--red);}
.fire-badge.is-bad{background:var(--red-ink);color:#fff;border-color:var(--red-ink);}
.fire-badge.is-off{background:var(--surface-2);color:var(--ink-2);border-color:var(--line-strong);}
.fire-badge.is-type{background:var(--surface-2);color:var(--ink);border-color:var(--line-strong);}

/* ── 소방현황 카드 ── */
.fire-dash-act{display:flex;justify-content:flex-end;margin-bottom:10px;}
.fire-dash-act .btn{text-decoration:none;}
.fire-cards{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;}
@media (min-width:700px){ .fire-cards{grid-template-columns:repeat(2,minmax(0,1fr));} }
@media (min-width:1100px){ .fire-cards{grid-template-columns:repeat(3,minmax(0,1fr));} }
.fire-card{display:flex;flex-direction:column;min-width:0;border:1px solid var(--line);border-radius:12px;background:var(--surface);overflow:hidden;}
.fire-card-h{display:flex;align-items:center;gap:10px;padding:12px 14px 10px;border-bottom:1px solid var(--line);background:var(--surface-2);}
.fire-card-h h3{margin:0;font-size:16.5px;font-weight:800;min-width:0;}
.fire-card-ico{flex:0 0 34px;width:34px;height:34px;border-radius:50%;background:var(--mint-tint);color:var(--mint-ink);display:flex;align-items:center;justify-content:center;}
.fire-c-inc .fire-card-ico{background:var(--red-tint);color:var(--red-ink);}
.fire-card-b{flex:1 1 auto;min-width:0;padding:12px 14px;}
.fire-card-f{display:flex;gap:8px;flex-wrap:wrap;padding:10px 14px 14px;}
.fire-card-f .btn,.fire-card-btns .btn{text-decoration:none;}
.fire-card-btns{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px;}
.fire-grade{margin:0 0 8px;font-size:18px;font-weight:800;color:var(--mint-ink);}
.fire-person-name{margin:0 0 6px;font-size:19px;font-weight:800;}
.fire-unreg b{display:inline-block;margin-bottom:4px;font-size:17px;color:var(--red-ink);}
.fire-unreg p{margin:0;font-size:14.5px;color:var(--ink-2);line-height:1.55;}
.fire-duty-h{margin:0 0 6px;font-size:16px;font-weight:700;line-height:1.7;}
.fire-people{list-style:none;margin:0;padding:0;}
.fire-people li{display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline;padding:8px 0;border-top:1px solid var(--line);font-size:14.5px;}
.fire-people li:first-child{border-top:0;}
.fire-people b{font-size:16px;}
.fire-people span{color:var(--ink-2);}
.fire-recent{list-style:none;margin:0;padding:0;}
.fire-recent li{border-top:1px solid var(--line);}
.fire-recent li:first-child{border-top:0;}
.fire-recent a{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;align-items:center;min-height:56px;padding:8px 2px;color:var(--ink);text-decoration:none;}
.fire-recent-t{grid-column:1;font-size:15.5px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fire-recent-m{grid-column:1;font-size:13.5px;color:var(--ink-2);}
.fire-recent-s{grid-column:2;grid-row:1 / span 2;}
.fire-big{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 6px;color:var(--ink);text-decoration:none;padding:4px 0;}
.fire-big b{font-size:46px;line-height:1.1;font-weight:800;color:var(--mint-ink);font-variant-numeric:tabular-nums;}
.fire-big span{font-size:20px;font-weight:700;}
.fire-big small{flex:0 0 100%;font-size:14px;color:var(--ink-2);}
.fire-tel{color:var(--mint-ink);font-weight:700;text-decoration:underline;}
/* 키-값 목록(카드 · 상세 공통) */
.fire-dl{margin:0;display:flex;flex-direction:column;}
.fire-dl>div{display:flex;gap:10px;align-items:baseline;padding:5px 0;}
.fire-dl dt{flex:0 0 88px;font-size:14px;font-weight:700;color:var(--ink-2);}
.fire-dl dd{margin:0;min-width:0;font-size:15.5px;overflow-wrap:anywhere;}

/* ── 조직도 ── */
.fire-seg{display:inline-flex;max-width:100%;border:1px solid var(--line-strong);border-radius:var(--radius);overflow:hidden;background:var(--surface);margin-bottom:12px;}
.fire-seg button{min-height:46px;padding:6px 20px;border:0;border-left:1px solid var(--line);background:none;font:inherit;font-size:15.5px;font-weight:700;color:var(--ink-2);cursor:pointer;}
.fire-seg button:first-child{border-left:0;}
.fire-seg button.on{background:var(--mint-tint);color:var(--mint-ink);}
.fire-org-card{padding:14px;}
.fire-org-top h3{margin:0 0 4px;font-size:18px;font-weight:800;}
.fire-org-meta{margin:0 0 10px;font-size:14px;color:var(--ink-2);overflow-wrap:anywhere;}
.fire-org-btns{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px;}
.fire-org-btns .btn{text-decoration:none;}
.fire-org-view{border:1px solid var(--line);border-radius:8px;background:#fff;overflow:hidden;}
.fire-org-img{display:block;width:100%;height:auto;}
.fire-org-view.orig{overflow:auto;max-height:78vh;-webkit-overflow-scrolling:touch;}
.fire-org-view.orig .fire-org-img{width:auto;max-width:none;}
.fire-org-pdf{display:block;width:100%;height:70vh;min-height:420px;border:1px solid var(--line);border-radius:8px;background:#fff;}
.fire-org-empty{align-items:center;text-align:center;padding:30px 16px;gap:8px;}
.fire-org-empty .btn{margin-top:6px;}
label.btn.is-disabled{opacity:.5;pointer-events:none;}
.fire-filebtn{cursor:pointer;}
.field label.fire-filebtn,.panel>label.fire-filebtn{display:inline-flex;margin:4px 0 0;font-size:14px;font-weight:700;}

/* ── 목록 위 도구줄 · 조건 ── */
.fire-bar{display:flex;justify-content:flex-end;margin-bottom:10px;}
.fire-bar .btn{text-decoration:none;}
.fire-filters{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:flex-end;margin-bottom:12px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);}
.fire-f{min-width:0;}
.fire-f label{display:block;margin-bottom:3px;font-size:13.5px;font-weight:700;color:var(--ink-2);}
.fire-wrap .fire-f select,.fire-wrap .fire-f input[type="date"],.fire-wrap .fire-f input[type="search"],.fire-wrap .fire-monthnav select{min-height:44px;padding:6px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);font:inherit;font-size:16px;background-color:var(--surface);color:var(--ink);max-width:100%;}
.fire-wrap .fire-f select{padding-right:28px;min-width:120px;}
.fire-range{display:flex;align-items:center;gap:6px;}
.fire-range input{width:156px;}
.fire-f-q{flex:1 1 220px;}
.fire-search{position:relative;display:flex;align-items:center;}
.fire-search .fire-ico{position:absolute;left:12px;color:var(--ink-2);pointer-events:none;}
.fire-wrap .fire-search input,.fire-wrap .fire-f .fire-search input[type="search"]{width:100%;padding-left:36px;}
.fire-f-off{align-self:flex-end;}
.fire-f-reset{align-self:flex-end;}
.fire-count{margin:0 0 8px;font-size:14.5px;color:var(--ink-2);}
.fire-count b{color:var(--ink);font-size:16px;}
.fire-duty-top{display:flex;align-items:center;justify-content:space-between;gap:10px 14px;flex-wrap:wrap;margin-bottom:10px;}
.fire-duty-top .btn{text-decoration:none;}
.fire-duty-ttl{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.fire-duty-ttl h3{margin:0;font-size:20px;font-weight:800;}
.fire-monthnav{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
.fire-ib{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink);cursor:pointer;}

/* ── 목록 표(PC) / 카드(모바일) ── */
.fire-table{border-top:2px solid var(--ink);}
.fire-tr{display:grid;align-items:center;gap:10px;min-height:60px;padding:8px 10px;border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none;}
.fire-th{min-height:42px;background:var(--surface-2);font-size:14px;font-weight:800;color:var(--ink-2);}
a.fire-tr.is-off,.fire-tr.is-off{opacity:.7;background:#fafafa;}
@media (hover:hover){ a.fire-tr:hover{background:#f6fbfb;} a.fire-tr:hover .fire-tt{text-decoration:underline;} }
.fire-c{min-width:0;font-size:15px;overflow-wrap:anywhere;}
.fire-c small{display:block;font-size:13px;color:var(--ink-2);}
.fire-tt{font-size:15.5px;font-weight:700;margin-right:6px;}
.fire-c-thumb{width:64px;height:48px;}
.fire-c-thumb img{display:block;width:100%;height:100%;object-fit:cover;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);}
.fire-nophoto{display:flex;align-items:center;justify-content:center;width:100%;height:100%;border:1px solid var(--line);border-radius:6px;background:var(--surface-2);color:var(--gray);}
.fire-th>span{min-width:0;}
.fire-t-incidents .fire-tr{grid-template-columns:128px 86px minmax(90px,1fr) minmax(140px,1.6fr) 100px 96px 64px;}
.fire-t-alarms .fire-tr{grid-template-columns:128px 86px minmax(110px,1.3fr) minmax(110px,1fr) 120px 150px;}
.fire-t-insp .fire-tr{grid-template-columns:150px minmax(100px,1fr) 100px 86px minmax(100px,1.1fr) minmax(270px,330px);}
.fire-t-duty .fire-tr{grid-template-columns:160px minmax(120px,1fr) 130px 130px;}
.fire-c-acts{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.fire-c-acts .btn{text-decoration:none;}
.fire-pager{display:flex;justify-content:center;gap:4px;margin:16px 0 4px;flex-wrap:wrap;}
.fire-pager button{min-width:44px;min-height:44px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);font:inherit;font-size:15px;font-weight:700;cursor:pointer;color:var(--ink);}
.fire-pager button.on{background:var(--ink);border-color:var(--ink);color:#fff;}
.fire-pager button:disabled{color:var(--gray);cursor:default;}
@media (max-width:1099.98px){
  .fire-t-incidents .fire-tr{grid-template-columns:116px 78px minmax(70px,1fr) minmax(110px,1.4fr) 88px 90px 56px;gap:8px;}
  .fire-t-insp .fire-tr{grid-template-columns:130px minmax(80px,1fr) 90px 78px minmax(80px,1fr) minmax(240px,290px);}
}
@media (max-width:820px){
  .fire-table{border-top:0;display:flex;flex-direction:column;gap:10px;}
  .fire-th{display:none;}
  .fire-tr{gap:6px 10px;border:1px solid var(--line);border-radius:10px;padding:12px;min-height:0;}
  .fire-c{font-size:15px;}
  .fire-t-incidents .fire-tr{grid-template-columns:72px minmax(0,1fr) auto;grid-template-areas:"thumb title title" "thumb date fac" "thumb place place" "thumb type st";}
  .fire-t-incidents .fire-c-thumb{grid-area:thumb;width:72px;height:72px;align-self:start;}
  .fire-t-incidents .fire-c-title{grid-area:title;} .fire-t-incidents .fire-c-date{grid-area:date;} .fire-t-incidents .fire-c-fac{grid-area:fac;text-align:right;}
  .fire-t-incidents .fire-c-place{grid-area:place;color:var(--ink-2);} .fire-t-incidents .fire-c-type{grid-area:type;} .fire-t-incidents .fire-c-st{grid-area:st;text-align:right;}
  .fire-t-alarms .fire-tr{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"date fac" "place place" "dev dev" "type st";}
  .fire-t-alarms .fire-c-date{grid-area:date;} .fire-t-alarms .fire-c-fac{grid-area:fac;text-align:right;} .fire-t-alarms .fire-c-place{grid-area:place;}
  .fire-t-alarms .fire-c-dev{grid-area:dev;color:var(--ink-2);} .fire-t-alarms .fire-c-type{grid-area:type;} .fire-t-alarms .fire-c-st{grid-area:st;text-align:right;}
  .fire-t-insp .fire-tr{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"date type" "ag fac" "note note" "acts acts";}
  .fire-t-insp .fire-c-date{grid-area:date;} .fire-t-insp .fire-c-type{grid-area:type;text-align:right;} .fire-t-insp .fire-c-ag{grid-area:ag;}
  .fire-t-insp .fire-c-fac{grid-area:fac;text-align:right;color:var(--ink-2);} .fire-t-insp .fire-c-note{grid-area:note;color:var(--ink-2);} .fire-t-insp .fire-c-acts{grid-area:acts;margin-top:4px;}
  .fire-t-insp .fire-c-acts .btn{flex:1 1 calc(50% - 6px);min-width:0;}
  .fire-t-duty .fire-tr{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"date sg" "who bad";}
  .fire-t-duty .fire-c-date{grid-area:date;font-weight:700;} .fire-t-duty .fire-c-sg{grid-area:sg;text-align:right;} .fire-t-duty .fire-c-who{grid-area:who;} .fire-t-duty .fire-c-bad{grid-area:bad;text-align:right;}
  .fire-range{flex-wrap:wrap;}
  .fire-range input{width:auto;flex:1 1 124px;min-width:118px;}   /* 날짜가 잘려 읽히지 않던 문제(65~78px) — 최소 118px, 모자라면 두 줄로 */
  .fire-f-date{flex:1 1 100%;}
  .fire-f{flex:1 1 140px;}
  .fire-f select{width:100%;}
  .fire-f-q{flex:1 1 100%;}
  .fire-f-reset{flex:1 1 100%;}
}

/* ── 상세 ── */
.fire-d-top{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-bottom:12px;}
.fire-adm{display:flex;gap:6px;flex-wrap:wrap;}
.fire-d-top .btn,.fire-adm .btn{text-decoration:none;}
.fire-d{border:1px solid var(--line);border-radius:12px;padding:18px;background:var(--surface);}
.fire-d-h{padding-bottom:12px;}
.fire-d-badges{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px;}
.fire-d-title{margin:0;font-size:23px;font-weight:800;line-height:1.35;overflow-wrap:anywhere;word-break:keep-all;}
.fire-sec{padding:14px 0;border-top:1px solid var(--line);min-width:0;}
.fire-sec h3{margin:0 0 10px;font-size:17px;font-weight:800;}
.fire-sub-h{margin:12px 0 4px;font-size:14.5px;font-weight:800;color:var(--ink-2);}
.fire-text{white-space:pre-wrap;overflow-wrap:anywhere;font-size:15.5px;line-height:1.75;padding:10px 12px;border-radius:8px;background:var(--surface-2);}
.fire-d-meta{margin:12px 0 0;font-size:13.5px;color:var(--ink-2);}
.fire-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px;padding:0;list-style:none;}
.fire-chip{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:2px 4px 2px 12px;border:1px solid var(--mint);border-radius:999px;background:var(--mint-tint);color:var(--mint-ink);font-size:15px;font-weight:700;}
.fire-chip.ext{border-color:var(--line-strong);background:var(--surface-2);color:var(--ink);}
.fire-chip small{font-size:12.5px;font-weight:700;color:var(--ink-2);}
.fire-chips.view .fire-chip{padding:2px 12px;}
.fire-chip button{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border:0;border-radius:50%;background:none;font-size:22px;line-height:1;color:var(--ink-2);cursor:pointer;}
.fire-ph-grid{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 8px;}
.fire-ph{position:relative;display:block;width:108px;height:108px;padding:0;border:1px solid var(--line-strong);border-radius:8px;overflow:hidden;background:var(--surface-2);cursor:pointer;}
.fire-ph img{display:block;width:100%;height:100%;object-fit:cover;}
.fire-ph.gone img{opacity:.3;}
.fire-ph-st{position:absolute;left:0;right:0;bottom:0;padding:1px 4px;background:rgba(0,0,0,.55);color:#fff;font-size:12px;font-weight:700;text-align:center;}
.fire-ph-st:empty{display:none;}
.fire-ph-x{position:absolute;top:4px;right:4px;width:40px;height:40px;border:0;border-radius:8px;background:rgba(0,0,0,.68);color:#fff;font-size:22px;font-weight:700;line-height:1;cursor:pointer;}
.fire-ph-act{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.fire-repeat{list-style:none;margin:0;padding:0;}
.fire-repeat li{border-top:1px solid var(--line);}
.fire-repeat li:first-child{border-top:0;}
.fire-repeat a{display:flex;flex-wrap:wrap;gap:2px 10px;align-items:baseline;min-height:46px;padding:9px 2px;color:var(--ink);text-decoration:none;font-size:15px;}
.fire-repeat a span{color:var(--ink-2);}
.fire-audit{margin:12px 0 0;border:1px solid var(--line);border-radius:10px;padding:2px 12px;background:var(--surface);}
.fire-audit summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:14.5px;font-weight:700;}
.fire-audit ul{list-style:none;margin:0;padding:0 0 8px;}
.fire-audit li{display:flex;flex-wrap:wrap;gap:2px 10px;padding:6px 0;border-top:1px solid var(--line);font-size:14px;}
.fire-audit li em{flex:0 0 100%;font-style:normal;color:var(--ink-2);overflow-wrap:anywhere;}
.fire-audit time{color:var(--ink-2);}

/* ── 작성/수정 ── */
.fire-sub{max-width:860px;margin:0 auto;}
.fire-form-head h2{margin:0;font-size:21px;font-weight:800;}
.fire-form-head p{margin:4px 0 12px;font-size:14px;}
.fire-panel h3{margin:0 0 10px;font-size:16.5px;font-weight:800;}
.fire-sec-note{margin:0 0 10px;}
.fire-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;}
.fire-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px;}
@media (max-width:560px){ .fire-grid2,.fire-grid3{grid-template-columns:minmax(0,1fr);} }
.fire-rads{display:flex;gap:8px;flex-wrap:wrap;}
.fire-rad{display:inline-flex;align-items:center;cursor:pointer;}
.fire-rad input{position:absolute;opacity:0;width:1px;height:1px;}
.fire-rad span{display:inline-flex;align-items:center;justify-content:center;min-height:46px;min-width:76px;padding:6px 18px;border:1px solid var(--line-strong);border-radius:999px;font-size:15.5px;font-weight:700;background:var(--surface);}
.fire-rad input:checked+span{background:var(--mint-tint);border-color:var(--mint);color:var(--mint-ink);box-shadow:inset 0 0 0 1px var(--mint);}
.fire-rads-res .fire-rad input[value="bad"]:checked+span{background:var(--red-tint);border-color:var(--red);color:var(--red-ink);box-shadow:inset 0 0 0 1px var(--red);}
.fire-rad input:focus-visible+span{outline:2px solid var(--mint);outline-offset:2px;}
.fire-pick-search{margin-top:6px;}
.fire-pick-search .staff-combo{margin-top:2px;}
.fire-pick-st{margin:4px 0 0;min-height:1.3em;color:var(--mint-ink);font-weight:700;}
.fire-pick-st:empty{display:none;}
.fire-person{padding-top:2px;}
.fire-assist{margin:0 0 12px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);}
.fire-assist .fire-person .field input:where(:not([type="checkbox"]):not([type="radio"])){background:#fff;}
.fire-assist-h{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;font-size:15.5px;}
.fire-ext{display:flex;gap:8px;align-items:center;margin-top:8px;}
.fire-wrap .fire-ext input{flex:1 1 auto;width:auto;min-width:0;}
.fire-fileinfo{margin:0 0 6px;}
.fire-fi{margin:0 0 6px;font-size:15px;overflow-wrap:anywhere;}
.fire-fi .btn{margin-left:6px;}
.fire-fold{border:0;}
.fire-fold summary{min-height:48px;display:flex;align-items:center;gap:8px;cursor:pointer;font-size:16px;}
.fire-fold[open] summary{margin-bottom:8px;border-bottom:1px solid var(--line);}
.fire-item{margin:0 0 12px;padding:12px 12px 2px;border:1px solid var(--line);border-radius:10px;background:var(--surface);}
.fire-item h4{margin:0 0 8px;font-size:16px;font-weight:800;}
.fire-item.is-bad{border-color:var(--red);background:var(--red-tint);}
.fire-item.is-bad textarea{background:#fff;}
.fire-form-btns{display:flex;gap:8px;flex-wrap:wrap;margin:6px 0 24px;}
.fire-form-btns .btn{flex:1 1 160px;}

/* ── 업무 수행 기록표 상세(화면 요약 + 법정서식) ── */
.fire-duty-sum{display:flex;align-items:center;flex-wrap:wrap;gap:6px 18px;margin:0 0 8px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);font-size:15px;}
.fire-duty-sum b{margin-right:4px;color:var(--ink-2);}
.fire-sheet-hint{margin:0 0 8px;font-size:13.5px;color:var(--ink-2);}
.fire-sheet-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:10px;background:#eceeee;padding:12px;}

/* ── 모바일(375 · 390 · 430) ── */
@media (max-width:820px){
  body.fire-page .btn-sm{min-height:44px;font-size:14px;padding:6px 12px;}
  body.fire-page .small{font-size:14px;}
  body.fire-page .muted.small{font-size:14px;}
  .fire-head-t h2{font-size:20px;}
  .fire-head-t p{font-size:13.5px;}
  .fire-head-ico{flex-basis:44px;width:44px;height:44px;}
  .fire-d{padding:14px;}
  .fire-d-title{font-size:20px;}
  .fire-dl dt{flex-basis:80px;}
  .fire-card-f .btn{flex:1 1 calc(50% - 8px);}
  .fire-bar .btn{width:100%;}
  .fire-duty-top .btn{width:100%;}
  .fire-ph{width:calc((100% - 16px) / 3);height:auto;aspect-ratio:1/1;}
  .fire-org-btns .btn{flex:1 1 calc(50% - 8px);}
  .fire-org-pdf{height:60vh;}
}
@media (max-width:430px){
  .fire-tab{padding:6px 14px;font-size:14.5px;}
  .fire-filters{padding:10px;}
  .fire-adm{width:100%;}
  .fire-adm .btn,.fire-d-top>.btn{flex:1 1 calc(50% - 6px);}
  .fire-seg{display:flex;width:100%;}
  .fire-seg button{flex:1 1 0;padding:6px 8px;}
  .fire-form-btns .btn{flex:1 1 100%;}
  .fire-rad span{min-width:70px;padding:6px 14px;}
  .fire-ext{flex-wrap:wrap;}
  .fire-ext .btn{flex:1 1 100%;}
  .fire-ph{width:calc((100% - 8px) / 2);}
}

/* ── 2차(2026-10-04): 화재보험증권 · 소방계획서 · 실무교육 이수일 · 교육·훈련 기록부 ── */
.fire-filebtns{display:contents;}
.fire-c-mgr .fire-dl dt{flex-basis:100px;}
.fire-ins-cur .fire-dl dt,.fire-plan-cur .fire-dl dt{flex-basis:112px;}
.fire-people-q,.fire-people-edu{flex:0 0 100%;font-size:14px;color:var(--ink-2);}
.fire-people-edu{color:var(--mint-ink);font-weight:700;}
.fire-linkplain{color:var(--ink);text-decoration:none;}
.fire-train-year{margin:8px 0 0;color:var(--ink-2);}
.fire-train-year b{font-size:18px;color:var(--ink);}
.fire-plan-t{font-size:17px;line-height:1.5;overflow-wrap:anywhere;}
/* 보험증권 카드(소방현황) */
.fire-ins-row{padding:10px 0;border-top:1px solid var(--line);}
.fire-ins-row:first-child{border-top:0;padding-top:0;}
.fire-ins-h{display:flex;align-items:center;justify-content:space-between;gap:6px 10px;flex-wrap:wrap;margin-bottom:4px;}
.fire-ins-h b{min-width:0;font-size:15.5px;overflow-wrap:anywhere;}
.fire-ins-p{margin:2px 0 6px;font-size:15px;}
.fire-ins-none{margin:2px 0 0;}
.fire-ins-note{margin:10px 0 0;padding:8px 10px;border-radius:8px;background:var(--surface-2);}
/* 관리 화면(보험증권 · 소방계획서) */
.fire-ins-list{display:flex;flex-direction:column;gap:14px;}
.fire-plan-sec{margin-bottom:14px;}
.fire-ins-sec .fire-card-h .fire-badge{margin-left:auto;}
.fire-sub-h0{margin-top:0;}
.fire-ins-hist,.fire-ins-offl{margin-top:12px;border-top:1px solid var(--line);padding-top:2px;}
.fire-ins-nohist{margin:12px 0 0;}
.fire-ins-hl{list-style:none;margin:0;padding:0;}
.fire-ins-hr{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px 12px;padding:10px 0;border-top:1px solid var(--line);}
.fire-ins-hr:first-child{border-top:0;}
.fire-ins-hr.is-off{opacity:.75;}
.fire-ins-hm{flex:1 1 260px;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;}
.fire-ins-hm b{overflow-wrap:anywhere;}
.fire-ins-hs{overflow-wrap:anywhere;}
.fire-ins-hm small{flex:0 0 100%;overflow-wrap:anywhere;}
.fire-ins-hb{display:flex;flex-wrap:wrap;align-items:center;gap:6px;}
.fire-ins-hb .btn,.fire-card-btns .btn,.fire-card-f .btn{text-decoration:none;}
.fire-ins-fn{font-weight:700;overflow-wrap:anywhere;}
.fire-ins-prog{margin:0 0 8px;min-height:1.3em;}
.fire-ins-prog:empty{display:none;}
.fire-static{margin:0;font-size:16px;font-weight:700;}
.fire-fold summary b{font-size:15.5px;}
/* 교육·훈련 기록부 목록 */
.fire-t-training .fire-tr{grid-template-columns:150px minmax(180px,1.8fr) 100px 130px 130px 100px;}
.fire-lab{display:none;font-size:13px;color:var(--ink-2);}
@media (max-width:1099.98px){ .fire-t-training .fire-tr{grid-template-columns:130px minmax(140px,1.5fr) 90px 110px 110px 92px;gap:8px;} }
/* 교육·훈련 기록부 작성 */
.fire-shift{margin:0 0 10px;padding:10px 12px 2px;border:1px solid var(--line);border-radius:10px;background:var(--surface);}
.fire-shift h4{margin:0 0 6px;font-size:15.5px;font-weight:800;}
.fire-shift-g{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px;}
.fire-numgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 12px;}
.fire-warnline{margin:0 0 10px;}
.fire-prev{margin:0 0 10px;display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;}
.fire-prev .btn{white-space:normal;height:auto;min-height:44px;text-align:left;line-height:1.35;max-width:100%;}   /* 모바일에서 한 줄로 길게 늘어나 화면이 가로로 넘치던 문제 */
body.fire-page .staff-combo-item{min-height:44px;}   /* 직원 검색 결과 항목 터치 높이(공통 부품은 건드리지 않고 이 업무 화면에서만) */
.fire-mgr .field input:where(:not([type="checkbox"]):not([type="radio"])){background:#fff;}
@media (max-width:560px){
  .fire-shift-g{grid-template-columns:repeat(2,minmax(0,1fr));}
  .fire-shift-cnt{grid-column:1 / -1;}
  .fire-numgrid{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:820px){
  .fire-t-training .fire-tr{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"date sg" "place place" "who who" "sdb ir";}
  .fire-t-training .fire-c-date{grid-area:date;font-weight:700;} .fire-t-training .fire-c-sg{grid-area:sg;text-align:right;} .fire-t-training .fire-c-place{grid-area:place;}
  .fire-t-training .fire-c-who{grid-area:who;color:var(--ink-2);} .fire-t-training .fire-c-sdb{grid-area:sdb;} .fire-t-training .fire-c-ir{grid-area:ir;}
  .fire-lab{display:block;}
  .fire-ins-hb .btn,.fire-card-btns .btn{flex:1 1 calc(50% - 6px);min-width:0;}
  .fire-ins-hb{width:100%;}
  .fire-ins-hr{align-items:stretch;}
}

/* ── 인쇄: A4 세로 한 쪽, 법정서식 시트만(헤더·탭·버튼·메모는 .fire-noprint 와 아래 규칙으로 숨김) ──
   이름 없는 @page 는 다른 업무 인쇄에도 번지므로 이름 붙은 쪽(fireSheet)을 쓰고, 기록표 상세(body.fire-sheet-view)에서만 적용한다. */
@page fireSheet{size:A4 portrait;margin:0;}   /* 여백 0 — 새 법정서식(.ff-sheet)은 210×297mm 실물 크기에 서식 여백을 안쪽에 둔다(첨부 PDF 와 같은 위치) */
@media print{
  body.fire-sheet-view{page:fireSheet;}
  body.fire-page{background:#fff !important;}
  body.fire-page #appHeader,body.fire-page #bottomNav,body.fire-page #toast,body.fire-page .hd-gnb,body.fire-page .gnb-drawer,body.fire-page .push-ob,body.fire-page #overlayRoot,.fire-noprint{display:none !important;}
  body.fire-page #app{padding:0 !important;margin:0 !important;max-width:none !important;}
  body.fire-page .fire-wrap,body.fire-page .fire-sub{max-width:none;margin:0;padding:0;}
  .fire-card{break-inside:avoid;}
  .fire-sheet-scroll{overflow:visible;padding:0;border:0;border-radius:0;background:none;}
}

/* ── 새 법정서식(.ff-sheet — public/js/fire-form-*.js · css/fire-form-*.css 가 안쪽을 그린다) 공통 인쇄 규칙 ──
   루트는 서식 CSS 가 210mm 폭(+서식 여백)으로 정하고, 긴 내용이면 fire.js 가 beforeprint 에서 --fire-fit(한 쪽 맞춤 비율)을 준다. */
@media print{
  .ff-sheet{margin:0 !important;width:calc(210mm / var(--fire-fit, 1));zoom:var(--fire-fit, 1);break-inside:avoid;page-break-inside:avoid;-webkit-print-color-adjust:exact;print-color-adjust:exact;box-shadow:none !important;}
  body.fire-sheet-view .fire-sheet-scroll{overflow:visible;padding:0;border:0;border-radius:0;background:none;}
}

/* ── 2026-10-14 다사업장: 현재 사업장 고정 표시(선택 불가) · 제목 옆 사업장 칩 ── */
.fire-fixed{display:flex;align-items:center;min-height:44px;padding:8px 12px;border:1px dashed var(--line-strong);border-radius:10px;background:var(--surface);color:var(--ink);font-size:16px;font-weight:700;overflow-wrap:anywhere;}
.fire-fac-chip{display:inline-block;margin-left:6px;padding:2px 10px;border-radius:999px;background:var(--red-tint);color:var(--red-ink);font-size:13px;font-weight:700;vertical-align:3px;letter-spacing:0;white-space:nowrap;}
@media print{.fire-fac-chip{display:none;}}

/* ── 2026-10-20: 비상사태 시나리오 탭(탭 8개) · 교육·훈련 기록부의 시나리오 연결 ── */
/* 탭이 8개가 돼도 PC 폭(≥1100px)에서는 가로 스크롤 없이 한 줄에 들어가도록 안쪽 여백만 줄인다.
   좁은 화면은 기존 정책 그대로 — 밀어서 보는 가로 스크롤(wireShell 이 현재 탭을 가운데로). theme-apple-field.css 의 .fire-tab 보다 이기도록 .fire-tabs 를 붙였다. */
@media (min-width:1100px){ .fire-tabs .fire-tab{padding-left:10px;padding-right:10px;gap:5px;font-size:14.5px;} }
.fire-tscn-pick{display:flex;flex-wrap:wrap;align-items:flex-end;gap:8px 10px;margin:0 0 6px;}
.fire-tscn-pick .field{flex:1 1 260px;min-width:0;margin:0;}
.fire-tscn-pick select{width:100%;}
.fire-tscn-pick .btn{flex:0 0 auto;}
.fire-tscn-info{margin-top:8px;}
.fire-tscn-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border:1px solid var(--mint);border-radius:10px;background:var(--mint-tint);}
.fire-tscn-t{font-size:16px;overflow-wrap:anywhere;}
.fire-tscn-card .btn{margin-top:6px;}
.fire-c small.fire-tscn-tag{color:var(--mint-ink);font-weight:700;}   /* 교육·훈련 목록의 '시나리오 …' 줄 */
@media (max-width:820px){ .fire-tscn-pick .btn{flex:1 1 100%;} }
.fire-org-scn{margin:14px 2px 0;line-height:1.55;}
