:root{
  /* 보리수 잎초록(주색) — 로고에서 추출, 기존 물빛초록 대신 따뜻한 잎초록 */
  --green:#3c7a49; --green-d:#2a5735; --green-l:#e9f1e5;
  /* 정토회 태양 오렌지(포인트) — 주요 진입/강조에만 절제 사용 */
  --sun:#e96a24; --sun-d:#c9531a; --sun-l:#fcebdd;
  --bg:#f5f8f2; --card:#ffffff; --line:#e3e9e0; --ink:#1e2a23; --muted:#65726b;
  --blue:#2f6fb0; --red:#cf4438; --amber:#d98324; --amber-bg:#fbeddb;
  --radius:14px;
  --shadow:0 1px 2px rgba(20,44,30,.04), 0 6px 22px rgba(20,44,30,.06);
  --shadow-lg:0 18px 50px rgba(20,44,30,.14);
  --shadow-hover:0 10px 26px rgba(60,122,73,.18);
  --green-grad:linear-gradient(135deg,#4a8f5a 0%,#2f6640 100%);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;overscroll-behavior-y:none}   /* 모바일 당겨서 새로고침(pull-to-refresh) 비활성화 */
body{
  font-family:"Noto Sans KR",system-ui,-apple-system,sans-serif;
  color:var(--ink); -webkit-font-smoothing:antialiased;
  background:
    radial-gradient(900px 480px at 100% -8%, rgba(46,125,87,.09), transparent 62%),
    radial-gradient(760px 420px at -6% 108%, rgba(21,101,192,.05), transparent 58%),
    linear-gradient(180deg,#f3f7f5,#e8efec);
}
.hidden{display:none !important}
button{font-family:inherit;cursor:pointer}
a{color:var(--green);text-decoration:none}

/* ---------- 로그인 (보리수 잎초록 + 정토 오렌지 포인트 · 화이트/차분) ---------- */
.login-view{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:22px;
  background:
    radial-gradient(760px 440px at 12% -10%, rgba(60,122,73,.16), transparent 60%),
    radial-gradient(700px 440px at 110% 112%, rgba(233,106,36,.10), transparent 58%),
    linear-gradient(180deg,#f5f8f2,#e9efe7)}
.login-card{position:relative;width:100%;max-width:384px;background:#fff;
  border-radius:22px;padding:38px 30px 26px;border:1px solid var(--line);overflow:hidden;
  box-shadow:0 24px 60px rgba(20,44,30,.14), 0 2px 8px rgba(20,44,30,.05)}
.login-card::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;
  background:linear-gradient(90deg,var(--green),#6bbf85 62%,var(--sun))}
.login-brand{text-align:center;margin-bottom:24px}
.login-mark{width:76px;height:76px;object-fit:contain;display:block;margin:0 auto 8px}
.login-logo{font-size:30px;font-weight:800;color:var(--green-d);letter-spacing:3px}
.login-sub{margin:5px 0 0;color:var(--muted);font-size:13.5px}
.login-tag{margin:11px 0 0;color:var(--green);font-size:12.5px;font-weight:600;letter-spacing:.02em}
.login-find{display:block;text-align:right;font-size:12.5px;color:var(--muted);margin-top:-2px}
.login-find:hover{color:var(--green-d)}
/* 로그인 탭(전화 인증 / 아이디·비번) */
.login-tabs{display:flex;background:var(--green-l);border-radius:12px;padding:4px;gap:4px;margin-bottom:16px}
.login-tab{flex:1;border:none;background:transparent;color:var(--muted);font-family:inherit;font-weight:700;font-size:13px;padding:9px 6px;border-radius:9px;cursor:pointer;transition:.15s}
.login-tab.on{background:#fff;color:var(--green-d);box-shadow:var(--shadow)}
.login-panel{display:none;flex-direction:column;gap:14px}
.login-panel.on{display:flex}
.login-panel form{display:flex;flex-direction:column;gap:14px}
.login-row{display:flex;gap:8px}
.login-row input{flex:1;min-width:0}
.login-row .btn.line{flex:0 0 auto;white-space:nowrap;background:#fff;border:1px solid var(--line);color:var(--green-d);border-radius:10px;padding:0 14px;font-size:13px;font-weight:700}
.login-row .btn.line:hover{border-color:var(--green);color:var(--green-d)}
.login-row .btn.line:disabled{opacity:.5;cursor:default;pointer-events:none}
.login-msg{font-size:12.5px;margin:-4px 0 0;min-height:16px;color:var(--muted)}
.login-msg.err{color:#c0392b;font-weight:600}
.login-msg.ok{color:var(--green-d);font-weight:600}
#코드영역{display:flex;flex-direction:column;gap:12px}
input.otp{font-family:ui-monospace,"Consolas","Menlo",monospace;letter-spacing:8px;text-align:center;font-size:20px;font-weight:700}
.login-form{display:flex;flex-direction:column;gap:14px}
.field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}
.field input{padding:12px 14px;border:1px solid var(--line);border-radius:10px;font-size:15px;color:var(--ink)}
.field input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(46,125,87,.14)}
/* 일정등록: 제목 옆 기존일정 검색→복사 */
.lookup-btn{border:none;background:transparent;cursor:pointer;font-size:15px;padding:0 2px;line-height:1;vertical-align:middle}
.lookup-panel{margin:2px 0 10px;padding:10px;border:1px solid var(--line);border-radius:10px;background:var(--card,#fff)}
.lookup-panel input{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:14px}
.lookup-results{margin-top:8px;max-height:230px;overflow-y:auto;display:flex;flex-direction:column;gap:4px}
.lookup-row{display:block;width:100%;text-align:left;padding:9px 11px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;font-size:13px}
.lookup-row:hover{background:color-mix(in srgb,var(--green) 12%,#fff);border-color:var(--green)}
.lookup-row b{color:var(--ink)}
.lookup-empty{padding:10px;color:var(--muted);font-size:13px;text-align:center}
/* 자동채움(상위 조직명)·비활성(하위 레벨) 입력칸 — 편집불가 시각표시 */
.field input.auto-fill{background:#eef1ec;color:#6b7280}
.field input:disabled{background:#f1f2f3;color:#aab0b6}
/* 기간관리: 시작일 ~ 종료일 한 줄 나란히 */
.daterange-row{display:flex;align-items:flex-end;gap:10px}
.daterange-row .field{flex:1;min-width:0}
.daterange-row .field input{width:100%}
.daterange-row .dr-sep{padding-bottom:12px;color:var(--muted);font-weight:700}
/* 개인이 직접 수정 가능한 항목의 라벨(붉은색) — .form-grid .field span(아래) 보다 우선하도록 명시도 상향 */
.field.editable > span,
.form-grid .field.editable > span,
.mform .field.editable > span,
.info-grid .field.editable > span{color:var(--red);font-weight:700}
/* 개인정보 2열 배치: 대화면(PC·노트북·태블릿) 2열, 모바일 1열 */
.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:640px){ .info-grid{grid-template-columns:1fr} }
/* 개인정보 사진 (세로 3 x 4) */
.photo3x4{width:150px;aspect-ratio:3/4;border:1px solid var(--line);border-radius:10px;cursor:pointer;
  background:#f6faf8;display:flex;align-items:center;justify-content:center;overflow:hidden}
.photo3x4:hover{border-color:var(--green)}
.photo3x4 img{width:100%;height:100%;object-fit:cover;display:block}
.photo-btns{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}

/* 풍수해/체크리스트 점검 항목 */
.check-group{font-size:17px;font-weight:800;color:#fff;background:var(--green-grad);
  padding:9px 15px;border-radius:10px;margin:16px 0 6px;box-shadow:var(--shadow);letter-spacing:.3px}
.check-item{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:11px 2px;border-bottom:1px solid var(--line)}
.check-item:last-of-type{border-bottom:none}
.check-subgroup{display:inline-block;font-size:14px;font-weight:700;color:var(--green-d);
  background:var(--green-l);padding:5px 12px;border-radius:8px;margin:10px 0 2px}
.check-item .ci-text{flex:1 1 200px;font-size:14px;font-weight:500;color:var(--ink);line-height:1.5;white-space:pre-line}
.check-item .ci-note{display:block;font-size:12px;font-weight:400;color:var(--muted);margin-top:3px;line-height:1.4}
.check-item select{flex:0 0 auto;margin-left:auto;width:auto;min-width:120px;max-width:160px}
/* 점검 상태 드롭다운 — 값별 색상(가독성) */
.state-sel{font-weight:700;border-radius:8px;padding:7px 10px}
.state-sel[data-v="양호"]{background:#e7f5ec;color:#1b7a3d;border:1px solid #8fce9f}
.state-sel[data-v="불량"]{background:#fdeaea;color:#c0392b;border:1px solid #e6a6a0}
.state-sel[data-v="미점검"]{background:#eef1f4;color:#6b7280;border:1px solid #cfd5db}
.state-sel option[value="양호"]{color:#1b7a3d;background:#fff}
.state-sel option[value="불량"]{color:#c0392b;background:#fff}
.state-sel option[value="미점검"]{color:#6b7280;background:#fff}
.remember{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.btn-primary{background:var(--green-grad);color:#fff;border:none;padding:14px;border-radius:12px;
  font-size:16px;font-weight:700;margin-top:6px;box-shadow:0 8px 18px rgba(46,125,87,.28);
  transition:transform .18s ease, box-shadow .18s ease, filter .18s ease}
.btn-primary:hover{filter:brightness(1.06);transform:translateY(-1px);box-shadow:0 10px 24px rgba(46,125,87,.34)}
.btn-primary:active{transform:translateY(0);box-shadow:0 5px 12px rgba(46,125,87,.26)}
.login-links{text-align:center;font-size:13px;margin-top:2px}
.login-hint{margin-top:8px;font-size:12px;color:var(--muted);border-top:1px dashed var(--line);padding-top:12px}
.demo-accounts{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.demo-accounts button{border:1px solid var(--line);background:var(--green-l);color:var(--green-d);
  border-radius:20px;padding:5px 11px;font-size:12px}
.demo-accounts button:hover{background:var(--green);color:#fff}
.login-ver{text-align:center;color:var(--muted);font-size:11px;margin:18px 0 0}

/* ---------- 앱 셸 ---------- */
.app-view{min-height:100vh;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:10px;
  background:var(--card);color:var(--ink);padding:11px 14px;
  box-shadow:0 4px 14px rgba(20,44,30,.05);
  border-bottom:2px solid var(--green)}
.topbar-title{font-weight:800;font-size:17px;color:var(--ink);letter-spacing:-.01em}
.topbar-date{margin-left:auto;font-size:13px;opacity:.95;text-align:right;line-height:1.2;color:var(--muted)}
.icon-btn{background:transparent;border:none;color:var(--green);font-size:20px;width:38px;height:38px;
  border-radius:50%;display:flex;align-items:center;justify-content:center}
.icon-btn:hover{background:var(--green-l)}
#profile-btn{background:var(--green-l);color:var(--green-d);font-size:14px;font-weight:700}

.content{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:16px}
.appfoot{text-align:center;color:var(--muted);font-size:12px;padding:18px}

/* ---------- 드로어 ---------- */
.drawer{position:fixed;top:0;left:0;z-index:50;width:280px;max-width:82vw;height:100vh;height:100dvh;
  background:#fff;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;
  transform:translateX(0);animation:slideIn .18s ease}
@keyframes slideIn{from{transform:translateX(-100%)}to{transform:translateX(0)}}
.drawer-head{background:var(--green);color:#fff;padding:22px 20px}
.drawer-name{font-size:18px;font-weight:700}
.drawer-role{font-size:13px;opacity:.9;margin-top:4px}
.drawer-list{list-style:none;margin:0;padding:8px 0;flex:1;overflow:auto}
.drawer-list li{padding:13px 20px;display:flex;align-items:center;gap:12px;font-size:15px;border-bottom:1px solid var(--line)}
.drawer-list li:hover{background:var(--green-l)}
.drawer-list li .ic{font-size:18px;width:24px;text-align:center}
/* 드로어 단계별 펼치기(아코디언) 트리 */
.drawer-list.dtree{padding:6px 0}
.dtree-row{display:flex;align-items:center;gap:8px;width:100%;background:none;border:none;text-align:left;font-family:inherit;font-size:14px;color:var(--ink);padding:10px 14px;cursor:pointer}
.dtree-row:hover{background:var(--green-l)}
.dtree-parent{font-weight:600}
.dtree-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dtree-arrow{flex:0 0 auto;font-size:18px;font-weight:700;color:var(--green-d);line-height:1;display:inline-block;padding:0 3px;transition:transform .2s ease}
.dtree-parent.open .dtree-arrow{transform:rotate(90deg)}
.dtree-leaf .dtree-label{color:var(--muted)}
/* 최상위 항목: 하위 유무와 무관하게 검은색·굵게(리프도 부모와 동일 톤) */
.dtree-row.dtree-top{font-weight:600}
.dtree-row.dtree-top .dtree-label{color:var(--ink)}
/* 권한 없는 말단: 비활성(회색). 클릭은 되되 토스트만 뜸 */
.dtree-leaf.dtree-disabled{cursor:not-allowed}
.dtree-leaf.dtree-disabled .dtree-label{opacity:.45}
.dtree-leaf.dtree-disabled:hover{background:transparent}
.dtree-children{display:flex;flex-direction:column}
/* 드로어 구분선: 권한자 전용 메뉴(관리자설정/회원관리/민원접수)를 기존 메뉴와 분리 */
.dtree-divider{margin:9px 14px 3px;border-top:1px solid color-mix(in srgb,var(--green) 40%,var(--line))}
.drawer-svc{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:12px 16px 4px;border-top:1px solid var(--line)}
.drawer-logout{margin:14px 20px 24px;padding:11px;border:1px solid var(--line);background:#fff;
  border-radius:10px;color:var(--red);font-weight:500}
.drawer-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:40}

/* ---------- 주메뉴 대시보드 ---------- */
.dash-greet{font-size:15px;color:var(--muted);margin:2px 0 14px}
.dash-greet b{color:var(--ink)}
.section-title{font-size:15px;font-weight:700;margin:22px 0 10px;display:flex;align-items:center;gap:8px}
.section-title .more{margin-left:auto;font-size:12px;font-weight:400;color:var(--muted)}

.badge-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.badge-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 10px;text-align:center;box-shadow:var(--shadow);position:relative}
.badge-card .ic{font-size:24px}
.badge-card .nm{font-size:13px;margin-top:6px;font-weight:500}
.badge-card .st{font-size:11px;margin-top:4px;color:var(--green);font-weight:700}
.badge-card.pending{border-color:var(--amber);background:var(--amber-bg)}
.badge-card.pending .st{color:var(--amber)}
.badge-card.pending::after{content:"";position:absolute;top:9px;right:9px;width:9px;height:9px;
  border-radius:50%;background:var(--amber);box-shadow:0 0 0 0 rgba(239,108,0,.5);animation:pulse 1.6s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(239,108,0,.5)}70%{box-shadow:0 0 0 8px rgba(239,108,0,0)}100%{box-shadow:0 0 0 0 rgba(239,108,0,0)}}

.quick-row{display:flex;flex-wrap:wrap;gap:8px}
.quick-row button{border:1px solid var(--line);background:#fff;border-radius:22px;padding:8px 14px;font-size:13px;display:flex;gap:6px;align-items:center}
.quick-row button:hover{border-color:var(--green);color:var(--green)}

.menu-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.menu-tile{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px 8px;text-align:center;box-shadow:var(--shadow)}
.menu-tile:hover{border-color:var(--green);transform:translateY(-2px);transition:.12s}
.menu-tile .ic{font-size:26px}
.menu-tile .nm{font-size:13px;margin-top:8px;font-weight:500}

.worker-panel{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.worker-row{display:flex;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line);gap:12px}
.worker-row:last-child{border-bottom:none}
.worker-slot{font-weight:700;width:64px;font-size:14px}
.worker-count{background:var(--green-l);color:var(--green-d);border-radius:14px;padding:2px 10px;font-size:12px;font-weight:700}
.worker-names{color:var(--muted);font-size:13px}

/* ---------- 카드/리스트/표 공통 ---------- */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin-bottom:14px}
.crumb{font-size:13px;color:var(--muted);margin-bottom:6px}
.crumb a{color:var(--muted)}
.page-title{font-size:20px;font-weight:700;margin:0 0 4px}
.page-desc{color:var(--muted);font-size:13px;margin:0 0 16px}

.toolbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;align-items:center}
.toolbar select,.toolbar input{padding:7px 10px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;font-size:14px;font-family:inherit;background:#e2efe4;color:var(--ink)}
.toolbar select:disabled,.toolbar input:disabled{background:#e8ebe8;color:#586159;border-color:transparent}
.toolbar select:focus,.toolbar input:focus{outline:none;background:#fff;border-color:var(--green);box-shadow:0 0 0 2px rgba(60,122,73,.18)}
/* 필터 입력칸 폭 제한 — 이름 4글자·검색어 8글자(한글 기준) */
.toolbar #등록자,.toolbar #이름,.toolbar input[placeholder="등록자"]{width:5.5em;flex:0 0 auto}
#검색어,.toolbar input[placeholder^="검색어"],input[placeholder^="검 색 어"]{width:7.5em;max-width:7.5em;flex:0 0 auto}
/* 초기화 버튼은 항상 화면 우측 정렬 */
.toolbar #지우기버튼,.toolbar #지우기{margin-left:auto}
/* 초기화 버튼 = 지우개 아이콘만(텍스트 숨김) */
#지우기버튼,#지우기{font-size:0;line-height:0;width:38px;min-width:38px;height:34px;padding:0;background-color:#fff;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235a635e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20 20H7l-4-4a2 2 0 0 1 0-3l9-9a2 2 0 0 1 3 0l6 6a2 2 0 0 1 0 3l-7 7'/><path d='M6 11l6 6'/></svg>");background-repeat:no-repeat;background-position:center;background-size:19px}
#지우기버튼:hover,#지우기:hover{background-color:var(--green-l);border-color:var(--green)}
.toolbar .spacer{flex:1}
.btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 14px;font-size:13px;font-weight:500}
.btn:hover{border-color:var(--green);color:var(--green)}
.btn.green{background:var(--green);color:#fff;border-color:var(--green)}
.btn.green:hover{background:var(--green-d);color:#fff}
.btn.sm{padding:5px 10px;font-size:12px}
/* 액션 버튼 역할별 위계 — 삭제(파괴)=빨강, 초기화(비파괴)=중립. 아이콘은 app.js가 주입 */
.btn.danger{color:var(--red);border-color:color-mix(in srgb,var(--red) 30%,var(--line));background:#fff}
.btn.danger:hover{background:color-mix(in srgb,var(--red) 9%,transparent);border-color:var(--red);color:var(--red)}
.btn.act-reset{color:var(--muted)}
.btn.act-reset:hover{border-color:var(--green);color:var(--green-d)}
.btn .act-ic{width:15px;height:15px;vertical-align:-3px;margin-right:5px}
.btn.danger .act-ic{margin-right:5px}
/* 비활성 버튼: 흐리게 + hover/클릭 반응 차단(활성처럼 보이는 문제 방지) */
.btn:disabled,.btn[disabled]{opacity:.4;cursor:default;pointer-events:none;box-shadow:none;transform:none}

table.tbl{width:100%;border-collapse:collapse;font-size:13px}
table.tbl th,table.tbl td{padding:10px 12px;border-bottom:1px solid var(--line);text-align:left}
table.tbl th{background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px}
/* 헤더 클릭 정렬(오름차순→내림차순→초기화) */
table.tbl th.th-sort{cursor:pointer;user-select:none;white-space:nowrap}
table.tbl th.th-sort:hover{color:var(--green-d)}
table.tbl th.th-sort::after{content:"⇅";margin-left:5px;font-size:10px;opacity:.3}
table.tbl th.th-sort.asc::after{content:"▲";opacity:.85}
table.tbl th.th-sort.desc::after{content:"▼";opacity:.85}
/* 봉사실적 표(.rp-head) 클릭 정렬 표식 — 예외적으로 이 표에만 적용 */
.rp-head .th-sort{cursor:pointer;user-select:none}
.rp-head .th-sort::after{content:"⇅";margin-left:3px;font-size:9px;opacity:.35}
.rp-head .th-sort.asc::after{content:"▲";opacity:.85}
.rp-head .th-sort.desc::after{content:"▼";opacity:.85}
table.tbl tr:hover td{background:#fafdfb}
.tbl-wrap{overflow-x:auto;background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
/* 목록 높이 채움(공용): 세로 스크롤 + 하단 수평 드래그바 유지 + 헤더 고정.
   실제 높이는 js/util_fitv.js 가 기기 화면에 맞춰 인라인 max-height 로 세팅(아래는 폴백). */
.fitv{overflow:auto;max-height:72vh;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#b9c4bd #eef2ef}
.fitv thead th{position:sticky;top:0;z-index:2}
/* 헤더 고정 표(단순형): 컨테이너 자체 스크롤 + thead sticky */
.tbl-wrap.stick{max-height:calc(100vh - 210px);overflow:auto}
.tbl-wrap.stick thead th{position:sticky;top:0;z-index:2}
/* 엑셀 다운로드 버튼(로고 이미지, 초기화 버튼 높이의 정사각형) */
.excel-dl{width:34px;height:34px;padding:3px;border:1px solid var(--line);border-radius:8px;background:#fff;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center}
.excel-dl:hover{border-color:var(--green);background:var(--green-l)}
.excel-dl img{width:100%;height:100%;object-fit:contain;display:block}
.fitv::-webkit-scrollbar{height:11px;width:11px}
.fitv::-webkit-scrollbar-track{background:#eef2ef;border-radius:6px}
.fitv::-webkit-scrollbar-thumb{background:#b9c4bd;border-radius:6px;border:2px solid #eef2ef}
.fitv::-webkit-scrollbar-thumb:hover{background:#96a89d}

.pill{display:inline-block;border-radius:20px;padding:2px 10px;font-size:11px;font-weight:700}
.pill.gray{background:#eceeed;color:#5a635e}
.pill.blue{background:#e3f0fc;color:var(--blue)}
.pill.green{background:var(--green-l);color:var(--green-d)}
.pill.amber{background:var(--amber-bg);color:var(--amber)}
.pill.red{background:#fde8e8;color:var(--red)}
/* 토글형 pill(근무구분·공양신청 등) — 선택값 강조 */
button.pill,label.pill{cursor:pointer;border:1px solid var(--line);background:#fff;color:var(--muted);padding:8px 15px;font-size:13px;transition:.15s;user-select:none}
button.pill:hover,label.pill:hover{border-color:var(--green)}
.pill.on{background:var(--green);color:#fff;border-color:var(--green);box-shadow:0 2px 6px rgba(46,125,87,.28)}
button.pill:disabled,button.pill.off{opacity:.38;cursor:not-allowed;box-shadow:none}
button.pill:disabled:hover,button.pill.off:hover{border-color:var(--line)}

.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.kpi .v{font-size:24px;font-weight:700}
.kpi .l{font-size:12px;color:var(--muted);margin-top:2px}

/* 워크플로우 단계 */
.flow{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:6px 0 16px}
.flow .step{border:1px solid var(--line);border-radius:18px;padding:6px 12px;font-size:12px;background:#fff;color:var(--muted)}
.flow .step.done{background:var(--green-l);border-color:var(--green);color:var(--green-d);font-weight:700}
.flow .step.cur{background:var(--green);border-color:var(--green);color:#fff;font-weight:700}
.flow .arr{color:var(--muted)}

/* 차트(SVG) */
.chart-wrap{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;box-shadow:var(--shadow)}
.chart-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-top:8px;flex-wrap:wrap}
.chart-legend i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:5px;vertical-align:-1px}

/* 폼 */
/* 회원 카드 리스트(사진 좌측 + 이름/지부·지회·기수/소속/보조) — 내부 스크롤 */
.mlist{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);
  overflow:auto;max-height:58vh}
.mcard{display:flex;gap:12px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--line);cursor:pointer}
.mcard:last-child{border-bottom:none}
.mcard:hover{background:#fafdfb}
.mcard.sel{background:var(--green-l)}
.mcard-photo{width:52px;height:52px;border-radius:10px;flex:0 0 auto;background:#eef2f0;
  display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--muted);overflow:hidden}
.mcard-photo img{width:100%;height:100%;object-fit:cover;display:block}
.mcard-body{flex:1 1 auto;min-width:0}
.mcard-top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.mcard-name{font-weight:700;color:var(--green-d);font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mcard-sub{color:var(--muted);font-size:12px;white-space:nowrap;flex:0 0 auto}
.mcard-line{color:var(--muted);font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 다중 검색바(명단 조회/수정 등) — 필드를 내용폭에 맞춰 최소화, 넘치면 줄바꿈 */
.msearch{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin-bottom:8px}
.msearch .mf{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.msearch .mf > span{white-space:nowrap;font-weight:600}
.msearch input,.msearch select{padding:5px 8px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;font-size:13px;font-family:inherit;color:var(--ink);background:#e2efe4}
.msearch input:focus,.msearch select:focus{outline:none;background:#fff;border-color:var(--green);box-shadow:0 0 0 2px rgba(60,122,73,.18)}
.msearch input:disabled,.msearch select:disabled{background:#e8ebe8;color:#586159;border-color:transparent}
.msearch input{width:84px}
.msearch select{max-width:170px}

.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}
/* 컴팩트 줄배치 폼(보리수 조회/수정): 지정된 줄단위 배치 + 줄별 필드폭(인라인 flex).
   한 화면에 모두 보이도록 높이·간격 압축 */
.mform{display:flex;flex-direction:column;gap:7px}
.mform .mrow{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:flex-end}
.mform .field{display:flex;flex-direction:column;gap:2px;min-width:0}
.mform .field > span{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.01em;line-height:1.2}
.mform .field input,.mform .field select{width:100%;min-width:0;padding:5px 9px;border:1px solid var(--line);border-radius:7px;font-size:13px;line-height:1.3;font-family:inherit;color:var(--ink);background:#fff}
.mform .field input:not(:disabled):not([readonly]),
.mform .field select:not(:disabled):not([readonly]){background:#e2efe4;border-color:color-mix(in srgb,var(--green) 52%,var(--line))}
.mform .field input[readonly],.mform .field input:disabled,.mform .field select:disabled{background:#e8ebe8;color:#586159;-webkit-text-fill-color:#586159;border-color:transparent}
.mform .field input:focus,.mform .field select:focus{outline:none;background:#fff;border-color:var(--green);box-shadow:0 0 0 2px rgba(60,122,73,.18)}
/* 수정1 카드 전체 압축: 여백·사진 축소로 한 화면에 수용 */
.card-compact{padding:12px 14px}
.card-compact .field.editable{margin-top:7px!important}
.card-compact .field.editable > span{font-size:11px;font-weight:600}
.card-compact .photo3x4{width:104px;border-radius:8px}
.card-compact .photo-btns{gap:5px;margin-top:5px}
.card-compact .photo-btns .btn{padding:5px 9px;font-size:12px}
/* 기간  YY.MM.DD ~ YY.MM.DD 통일 행 (단일 '기간' 라벨) */
.date-range{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:2px 0 12px}
.date-range .dr-lb{font-size:13px;font-weight:700;color:var(--muted)}
.date-range .dr-sep{color:var(--muted);font-weight:700;margin:0 1px}
/* 살펴보기 현황 날짜(dash-range) — 동일 톤 */
.dash-range{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:8px}
.dash-range .dlbl{font-size:13px;font-weight:700;color:var(--muted)}
.dash-range .tl2{color:var(--muted);font-weight:700;margin:0 1px}
.dash-range .dash-date{font-family:inherit;font-size:14px;font-weight:700;padding:7px 12px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;background:#e2efe4;color:var(--ink);white-space:nowrap;cursor:pointer}
.date-range input[type=date]{padding:7px 10px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;background:#e2efe4;color:var(--ink);font-size:14px;font-family:inherit}
/* 점검폼 compact 한줄 배치(데이터 짧은 필드) */
.chk-row{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-end;margin-bottom:12px}
.field.cmpact{gap:5px}
.field.cmpact > span{color:var(--muted);font-size:12px;font-weight:600}
.field.cmpact input{padding:4px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;background:#fff;color:var(--ink)}
.field.cmpact input:not(:disabled):not([readonly]){background:#e2efe4;border-color:color-mix(in srgb,var(--green) 52%,var(--line))}
.field.cmpact input:disabled,.field.cmpact input[readonly]{background:#e8ebe8;color:#586159;-webkit-text-fill-color:#586159;border-color:transparent}
.form-grid .field span{color:var(--muted);font-size:12px;font-weight:600;letter-spacing:.01em}
.form-grid input,.form-grid select,.form-grid textarea{padding:10px 12px;border:1px solid var(--line);border-radius:8px;font-size:14px;font-family:inherit;width:100%;color:var(--ink);background:#fff}
/* 편집 가능(입력해야 할) 필드: 옅은 잎초록 배경+테두리로 '여기에 입력' 강조.
   ※ readonly는 편집불가이므로 반드시 제외(:not([readonly])) — 안 그러면 뷰전용도 초록으로 칠해짐 */
.form-grid input:not(:disabled):not([readonly]),
.form-grid select:not(:disabled):not([readonly]),
.form-grid textarea:not(:disabled):not([readonly]),
.field textarea.autogrow:not(:disabled):not([readonly]){background:#e2efe4;border-color:color-mix(in srgb,var(--green) 52%,var(--line))}
/* 편집 가능 필드: 포커스 강조 */
.form-grid input:focus,.form-grid select:focus,.form-grid textarea:focus,
.field textarea.autogrow:focus{outline:none;background:#fff;border-color:var(--green);box-shadow:0 0 0 2px rgba(60,122,73,.18)}
/* 편집 가능한 라디오 영역(구분 등): 입력 구역임을 알 수 있게 초록 틴트 박스 */
.radio-line{display:flex;flex-wrap:wrap;gap:16px;align-items:center;
  background:var(--green-l);border:1px solid color-mix(in srgb,var(--green) 34%,var(--line));
  border-radius:8px;padding:10px 12px}
/* 뷰전용 라디오 영역(바로등록 등 전달값 잠금): 평면 회색 */
.radio-line.locked{background:#e8ebe8;border-color:transparent;color:#586159}
/* 뷰전용(readonly/비활성) 필드: 평평한 읽기전용 룩 → 편집 필드와 구분 */
.form-grid input:disabled,.form-grid input[readonly],
.form-grid select:disabled,
.form-grid textarea:disabled,.form-grid textarea[readonly],
.field input:disabled,.field input[readonly],
.field select:disabled,
.field textarea:disabled,.field textarea[readonly]{background:#e8ebe8;color:#586159;-webkit-text-fill-color:#586159;border-color:transparent;box-shadow:none;opacity:1;cursor:default}
.form-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}

.empty{color:var(--muted);text-align:center;padding:30px;font-size:14px}
.notice{background:#fff7e6;border:1px solid #ffe1a8;color:#8a5a00;border-radius:10px;padding:10px 12px;font-size:13px;margin-bottom:12px}

/* 모달 */
.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:80;display:flex;align-items:center;justify-content:center;padding:18px}
.modal{background:#fff;border-radius:16px;width:100%;max-width:460px;max-height:86vh;overflow:auto;box-shadow:var(--shadow-lg)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--line);font-weight:700}
.modal-head .icon-btn{color:var(--ink)}
.modal-body{padding:18px}

/* 토스트 */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:#1f2a24;color:#fff;
  padding:11px 18px;border-radius:24px;font-size:13px;z-index:9999;box-shadow:var(--shadow-lg)}

/* 신분증 */
.idcard{max-width:340px;margin:10px auto;background:linear-gradient(135deg,#2e7d57,#1d4f38);color:#fff;border-radius:18px;padding:24px;box-shadow:var(--shadow-lg)}
.idcard h3{margin:0 0 16px;font-size:14px;opacity:.85;letter-spacing:1px}
.idcard .photo{width:84px;height:84px;border-radius:12px;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:34px;margin-bottom:14px}
.idcard .nm{font-size:24px;font-weight:700}
.idcard dl{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin-top:14px;font-size:13px}
.idcard dt{opacity:.8}

/* 반응형 */
@media(max-width:760px){
  .menu-grid{grid-template-columns:repeat(3,1fr)}
  .kpi-row{grid-template-columns:repeat(2,1fr)}
  .form-grid{grid-template-columns:1fr}
  .topbar-title{font-size:16px}
}
@media(max-width:480px){
  .badge-grid{grid-template-columns:repeat(2,1fr)}
  .menu-grid{grid-template-columns:repeat(2,1fr)}
  .content{padding:12px}
}

/* ===================================================================
   충실재현판 — SmartMaker 런타임/화면 클래스
   =================================================================== */
.sm-hidden{display:none !important}
.sm-blink{animation:smblink 1s steps(2,start) infinite}
@keyframes smblink{50%{opacity:.25}}

/* 폼 레이어 — 자식폼이 부모 위에 덮인다(스택 오버레이) */
.form-layer{position:fixed;inset:0;overflow:auto;display:flex;flex-direction:column;
  background:
    radial-gradient(900px 480px at 100% -8%, rgba(46,125,87,.09), transparent 62%),
    radial-gradient(760px 420px at -6% 108%, rgba(21,101,192,.05), transparent 58%),
    linear-gradient(180deg,#f3f7f5,#e8efec)}
/* 모달 팝업 레이어 — .modal 컴포넌트 규칙(width/max-width/max-height 등) 충돌 리셋 후 전체화면 딤 */
.form-layer.modal{background:rgba(0,0,0,.45);align-items:center;justify-content:center;padding:18px;
  width:auto;max-width:none;max-height:none;border-radius:0;box-shadow:none}
/* 최상단이 아닌 하위 레이어는 클릭 차단 — 상단 폼(팝업 포함)만 조작 가능 */
.form-layer.layer-blocked{pointer-events:none}
.popup-card{background:#fff;border-radius:16px;width:100%;max-width:420px;box-shadow:var(--shadow-lg);overflow:hidden}
.popup-head{background:var(--green);color:#fff;padding:16px 18px;font-weight:700;font-size:16px}
.popup-body{padding:18px}
.popup-body .pdate{font-size:14px;color:var(--muted);margin-bottom:4px}
.popup-body .pwho{font-size:13px;color:var(--muted);margin-bottom:14px}
.choice-row{display:flex;gap:8px;margin-bottom:14px}
.choice-row button{flex:1;border:1px solid var(--line);background:#fff;border-radius:10px;padding:12px;font-size:14px;font-weight:700}
.choice-row button.on{background:var(--green);color:#fff;border-color:var(--green)}
.popup-body textarea{width:100%;min-height:70px;border:1px solid var(--line);border-radius:8px;padding:10px;font-family:inherit;font-size:14px}
.popup-body textarea:disabled{background:#f2f4f3;color:#aab2ad}
.popup-foot{display:flex;gap:8px;padding:14px 18px;border-top:1px solid var(--line)}
.popup-foot button{flex:1;border-radius:10px;padding:12px;font-size:15px;font-weight:700;border:1px solid var(--line);background:#fff}
.popup-foot .save{background:var(--green);color:#fff;border-color:var(--green)}

/* 하단 고정 플로팅 액션 바 — 목록에서 스크롤과 무관하게 항상 노출 */
.content.has-fab{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
.fab-bar{position:fixed;left:50%;transform:translateX(-50%);z-index:25;
  bottom:calc(16px + env(safe-area-inset-bottom));
  display:flex;flex-wrap:wrap;justify-content:center;gap:8px;padding:8px;max-width:calc(100vw - 20px);
  background:rgba(255,255,255,.82);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-lg)}
/* ── 젤(광택) 버튼 통일 — 질감 동일, 색 위계: 보조=연초록 / 주=진초록 / 삭제=빨강 ── */
.fab-btn{flex:0 1 auto;min-width:0;border:1px solid #aecbb4;color:var(--green-d);
  border-radius:12px;padding:11px 15px;font-size:15px;font-weight:700;white-space:nowrap;
  background:linear-gradient(180deg,#f5faf2 0%,#e4efe0 12%,#d2e6cc 48%,#c3dcbb 54%,#dcecd6 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), 0 2px 5px rgba(0,0,0,.14);text-shadow:0 1px 0 rgba(255,255,255,.6);
  transition:transform .16s ease, box-shadow .16s ease, filter .16s ease}
.fab-btn.primary{color:#fff;border-color:#2f6640;text-shadow:0 1px 1px rgba(0,0,0,.28);
  background:linear-gradient(180deg,#5aa16c 0%,#3f8551 46%,#31703f 54%,#468a57 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32), 0 4px 12px rgba(46,125,87,.30)}
.fab-btn.danger,.fab-btn.red{color:#8a1f1a;border-color:#e0a9a5;text-shadow:0 1px 0 rgba(255,255,255,.5);
  background:linear-gradient(180deg,#fdf1f0 0%,#f6dad7 12%,#eebfba 48%,#e6ada7 54%,#f3d2ce 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85), 0 2px 5px rgba(0,0,0,.14)}
.fab-btn.call{color:#1f5c3f;border-color:#bfe6d2;
  background:linear-gradient(180deg,#f0faf4 0%,#dcf1e5 12%,#c6e7d5 48%,#b7dfc9 54%,#d6efe0 92%)}
/* compact: 버튼 여러 개를 한 줄에 고정(간격·여백·폰트 축소, 넘치면 가로 스크롤) */
.fab-bar.compact{flex-wrap:nowrap;gap:6px;padding:6px 8px;max-width:calc(100vw - 14px);overflow-x:auto}
.fab-bar.compact .fab-btn{padding:10px 13px;font-size:14px}
.fab-btn:hover{transform:translateY(-2px);filter:brightness(1.03);box-shadow:inset 0 1px 0 rgba(255,255,255,.9), 0 6px 14px rgba(0,0,0,.18)}
.fab-btn.primary:hover{filter:brightness(1.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.32), 0 8px 18px rgba(46,125,87,.34)}
.fab-btn:active{transform:translateY(0);box-shadow:inset 0 2px 6px rgba(0,0,0,.2)}

/* 비교 표 (검침일지 — 사용량 vs 일평균, 당월 vs 전월) */
.cmp-tbl{width:100%;border-collapse:collapse;margin:2px 0 10px;
  border:1px solid var(--line);border-radius:12px;overflow:hidden}
.cmp-tbl th,.cmp-tbl td{padding:11px 14px;border-bottom:1px solid var(--line);text-align:right}
.cmp-tbl thead th{font-size:12px;color:var(--green-d);font-weight:700;
  background:var(--green-l);border-bottom:1px solid var(--line)}
.cmp-tbl th:first-child,.cmp-tbl td:first-child{text-align:left;color:var(--muted);font-weight:600}
.cmp-tbl tbody td{font-weight:700;font-variant-numeric:tabular-nums}
.cmp-tbl tr:last-child td{border-bottom:none}
.cmp-tbl .cmp-sum td{border-top:2px solid var(--line);color:var(--green-d);background:#f3f8f5}
.cmp-tbl .cell-input{width:100%;max-width:130px;padding:7px 9px;border:1px solid var(--line);border-radius:8px;font-size:14px;text-align:right;font-weight:700}
.cmp-tbl .cell-input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px rgba(46,125,87,.14)}
/* 전력검침 검침표 — 4열 고정폭 재배분 + 값 폰트=입력칸(14px) 통일, '부하명' 헤더 줄바꿈 방지 */
.pwr-chk{table-layout:fixed}
.pwr-chk th,.pwr-chk td{padding:9px 6px}
.pwr-chk thead th{white-space:nowrap;font-size:12px}
.pwr-chk tbody td{font-size:14px}
.pwr-chk th:nth-child(1),.pwr-chk td:nth-child(1){width:17%}
.pwr-chk th:nth-child(2),.pwr-chk td:nth-child(2){width:31%}
.pwr-chk th:nth-child(3),.pwr-chk td:nth-child(3){width:33%}
.pwr-chk th:nth-child(4),.pwr-chk td:nth-child(4){width:19%}
.pwr-chk .cell-input{width:100%;max-width:none;padding:6px 6px;font-size:14px}

/* 전력검침 사용량 분석 — 당일 강조 + 비율 뱃지 */
.pwr-day{display:flex;gap:18px;align-items:center;justify-content:center;flex-wrap:wrap;
  padding:16px;margin:4px 0 12px;border-radius:16px;
  background:radial-gradient(circle at 50% 40%, #fff8d6, #fdf0b8);border:1px solid #efe0a3}
.pwr-day .pl{font-weight:800;color:#8a6d00;font-size:15px}
.pwr-day b{font-size:24px;color:#7a5c00;font-variant-numeric:tabular-nums}
.pwr-day small,.pwr-day span{color:#7a5c00}
.pwr-ratios{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 2px;justify-content:center}
.pwr-ratios .rt{background:var(--green-l);color:var(--green-d);border:1px solid var(--line);
  border-radius:20px;padding:8px 15px;font-size:13px;font-weight:600}
.pwr-ratios .rt b{color:var(--green);margin-left:5px;font-size:15px}
.cmp-tbl .rt{display:inline-block;background:var(--green-l);color:var(--green-d);border:1px solid var(--line);
  border-radius:12px;padding:1px 9px;font-size:11px;font-weight:600;margin-left:6px;white-space:nowrap}
.cmp-tbl .rt b{color:var(--green);margin-left:3px}
/* 진공보일러 비교표 — 표 전체를 하나의 테두리 박스로 */
.boiler-tbl-wrap{border:1px solid var(--line);border-radius:10px;overflow:hidden;margin:2px 0 10px;box-shadow:var(--shadow)}
.boiler-tbl-wrap .boiler-cmp{margin:0}
/* 항목·타이틀 중앙정렬·세로중앙 / 데이터 우측정렬 / 입력칸 4digit(모바일 한줄) / 3개 표 열너비 통일 */
.boiler-cmp{table-layout:fixed}
.boiler-cmp th,.boiler-cmp td{padding:3px 7px;vertical-align:middle}
.boiler-cmp th:first-child,.boiler-cmp td:first-child{font-size:12px;text-align:center;width:46%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.boiler-cmp th:not(:first-child),.boiler-cmp td:not(:first-child){width:27%}
.boiler-cmp thead th{padding-top:5px;padding-bottom:5px}
.boiler-cmp .cell-input{max-width:62px;padding:4px 6px}
/* 숙직일지 — 시설 담당 칩 다중선택 + 한줄나누기(이름+내용) 여러 행 */
.duty-block{display:flex;flex-direction:column;gap:8px;margin:4px 0 10px}
.duty-row{display:grid;grid-template-columns:48px 1fr;align-items:start;gap:6px}
.duty-label{font-size:11px;font-weight:600;color:var(--muted);padding-top:5px}
.duty-chips{display:flex;flex-wrap:wrap;gap:4px;min-height:26px;align-content:flex-start}
.duty-chip{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:11px;padding:3px 7px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}
.duty-chip.on{background:var(--green);color:#fff;border-color:var(--green)}
button.duty-chip:active{transform:scale(.96)}
.duty-empty{font-size:12px;color:var(--muted);padding:7px 0}
.share-list{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.share-row{display:grid;grid-template-columns:7em 1fr auto;gap:6px;align-items:center}
.share-row .share-name{padding:8px;border:1px solid var(--line);border-radius:8px;font-size:14px;background:#fff;font-family:inherit;min-width:0}
.share-row .share-text{padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:14px;min-width:0;font-family:inherit}
.share-row .share-del{border:none;background:#f2f4f3;color:#7a857f;border-radius:8px;width:32px;height:32px;cursor:pointer;font-size:14px}
.share-ro{padding:6px 0;font-size:14px;border-bottom:1px solid var(--line)}
.share-ro:last-child{border-bottom:none}
.share-ro b{color:var(--green-d);margin-right:6px}
.boiler-cmp small.muted{margin-top:0!important;color:#9aa79f}   /* 60-5℃ — 항목제목보다 옅게 */
/* 표 입력칸 — 앱 공통 디자인룰(편집=연녹 틴트 / 뷰전용=회색 플랫) */
.boiler-cmp .cell-input:not(:disabled):not([readonly]){background:#e2efe4;border-color:color-mix(in srgb,var(--green) 52%,var(--line))}
.boiler-cmp .cell-input:disabled{background:#e8ebe8;color:#586159;-webkit-text-fill-color:#586159;border-color:transparent}
/* 1·2호기 Off 버튼(비가동 시 4개 데이터 0 일괄) */
.boiler-cmp .btn-off{font-size:11px;font-weight:700;padding:2px 8px;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--muted);cursor:pointer;margin-left:6px}
.boiler-cmp .btn-off:hover{background:var(--green-l);color:var(--green-d);border-color:var(--green)}
/* 진공보일러 4항목 그리드 — 표 외형은 그대로, DOM 입력순서만 호기별(열 우선). .boiler-cmp 규칙(cell-input/btn-off) 재사용 위해 클래스 병기 */
.boiler-grid{display:grid;grid-template-columns:46% 27% 27%}
.boiler-grid > div{padding:3px 7px;border-bottom:1px solid var(--line);display:flex;align-items:center;min-width:0}
.boiler-grid .bg-head{background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px;justify-content:center;gap:4px;padding-top:5px;padding-bottom:5px}
.boiler-grid .bg-label{font-size:12px;color:var(--muted);font-weight:600;justify-content:center;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.boiler-grid .bg-input{flex-direction:column;align-items:flex-end;justify-content:center}
.boiler-grid .bg-input .cell-input{text-align:right}
.boiler-grid .bg-nb{border-bottom:none}
/* 진공보일러 사진 — 온수보일러·트렌드 항상 2열(한 선상) + 연녹 틴트·초록 테두리 */
.photo-2col{grid-template-columns:1fr 1fr}
.photo-2col .field{min-width:0}
.photo-2col .photo-box{background:#eef6f0;border:1.5px solid var(--green);border-radius:10px;padding:10px}

/* 선택형 메뉴 리스트 (검침메뉴 등 — 3개 중 하나 선택) */
.menu-list{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.menu-item{display:flex;align-items:center;gap:14px;width:100%;text-align:left;
  padding:16px 18px;border:1px solid var(--line);border-radius:14px;
  background:linear-gradient(180deg,#ffffff,#f6faf8);box-shadow:var(--shadow);
  font-size:16px;font-weight:600;color:var(--ink);
  transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease}
.menu-item:hover:not(:disabled){transform:translateY(-2px);box-shadow:var(--shadow-hover);border-color:rgba(46,125,87,.35)}
.menu-item:active:not(:disabled){transform:translateY(0)}
.menu-item:disabled{opacity:.5;cursor:not-allowed}
.menu-item .mi-ic{font-size:22px;width:28px;text-align:center;flex:0 0 auto}
.menu-item .mi-tx{flex:1 1 auto}
.menu-item .mi-ar{color:var(--muted);font-size:22px;font-weight:400;flex:0 0 auto}

/* 롱프레스(길게 누르기) 목록 — 텍스트 선택/콜아웃 방지 + 누르는 중 시각 피드백 */
.grid-list.pressable{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.grid-list.pressable .grid-row{cursor:pointer;transition:background .12s ease}
.grid-row.pressing{background:var(--green-l)}

.screen{min-height:100vh;display:flex;flex-direction:column}
.icon-btn.profile{background:var(--green-l);color:var(--green-d);font-size:14px;font-weight:700}
/* 프로필 원에 회원 사진 표시(있을 때) — 원형으로 꽉 채움 */
.icon-btn.profile.has-photo{padding:0;overflow:hidden}
.icon-btn.profile .profile-img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.안내문{margin:8px 0 0;color:var(--green-d);font-size:13px;font-weight:500}
.demo-btn{border:1px solid var(--line);background:var(--green-l);color:var(--green-d);
  border-radius:20px;padding:5px 11px;font-size:12px}
.demo-btn:hover{background:var(--green);color:#fff}

/* 주메뉴 */
.menu-content{display:flex;flex-direction:column;gap:18px}
.menu-content .schedule{margin-top:auto}  /* 금일점검=상단맞춤, 주요일정+근무자=하단맞춤(중간 여백 확보) */
.menu-user{font-size:15px}.menu-user .muted{color:var(--muted);font-size:13px}
.sec-title{font-size:14px;font-weight:700;margin-bottom:8px}

.badges{}
.badges-title{font-size:13px;font-weight:700;color:var(--muted);margin-bottom:10px;text-align:center}
.badge-row{display:grid;grid-template-columns:repeat(auto-fit,88px);gap:8px 6px;justify-content:center;max-width:282px;margin:0 auto}
@media (min-width:420px){.badge-row{max-width:none}}  /* 좁은 화면=3개 보장, 넓은 화면=4개 이상 허용 */
.badge-btn{border:1px solid var(--line);background:linear-gradient(180deg,#ffffff,#f6faf8);border-radius:8px;
  padding:6px 4px;font-size:12px;font-weight:600;width:88px;box-sizing:border-box;text-align:center;white-space:nowrap;box-shadow:var(--shadow);
  transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease, color .18s ease}
.badge-btn:hover{border-color:rgba(46,125,87,.4);color:var(--green-d);transform:translateY(-2px);box-shadow:var(--shadow-hover)}
.badge-btn.sm-blink{border-color:var(--amber);background:var(--amber-bg);color:var(--amber)}

.menu-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.menu-btn{position:relative;overflow:hidden;background:linear-gradient(180deg,#ffffff,#f6faf8);
  border:1px solid var(--line);border-radius:var(--radius);
  padding:20px 8px;text-align:center;font-size:14px;font-weight:600;color:var(--ink);
  box-shadow:var(--shadow);
  transition:transform .22s cubic-bezier(.2,.7,.3,1), box-shadow .22s ease, border-color .22s ease}
.menu-btn::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--green),#54b489);opacity:.95;
  transition:height .22s ease}
.menu-btn:hover{transform:translateY(-4px);box-shadow:var(--shadow-hover);
  border-color:rgba(46,125,87,.35);color:var(--green-d)}
.menu-btn:hover::before{height:5px}
.menu-btn:active{transform:translateY(-1px)}
.menu-btn.blue::before{background:linear-gradient(90deg,var(--blue),#5a9de0)}
.menu-btn.blue:hover{border-color:rgba(21,101,192,.35);color:var(--blue)}
.menu-btn.grey::before{background:linear-gradient(90deg,#9aa6a0,#c3ccc7)}
.menu-btn.grey:hover{border-color:rgba(120,132,126,.4);color:#4b544f}
/* 정토 오렌지 포인트 타일(핵심 진입 강조) + 아이콘 */
.menu-btn.accent{background:linear-gradient(180deg,#ffffff,var(--sun-l))}
.menu-btn.accent::before{background:linear-gradient(90deg,var(--sun),#f2a069)}
.menu-btn.accent:hover{border-color:color-mix(in srgb,var(--sun) 40%,var(--line));color:var(--sun-d)}
.menu-btn .mb-ic{display:block;font-size:26px;line-height:1;margin-bottom:9px}
/* 타일 아이콘 자리에 이미지(부처님 등) — 이모지 크기와 균형 맞춤 */
.menu-btn .mb-ic .mb-img{height:34px;width:auto;object-fit:contain;display:inline-block;vertical-align:middle}
@media (max-width:420px){.menu-grid.tri .mb-ic .mb-img{height:28px}}
/* 민원접수 3타일은 모바일에서도 한 줄 유지 */
.menu-grid.tri{grid-template-columns:repeat(3,1fr)}
@media (max-width:420px){.menu-grid.tri .menu-btn{padding:15px 3px;font-size:12px}
  .menu-grid.tri .mb-ic{font-size:22px;margin-bottom:6px}}
/* 주요일정·근무자현황 제목 및 날짜이동(◀ 날짜 ▶ 오늘) 중앙정렬 — 민원접수 + 메인 대시보드 공통 */
.schedule .sec-title,.worker .sec-title{text-align:center}
.schedule .sched-head{justify-content:center}
/* 민원접수 홈: 일정 블록을 아래로 내리되 맨아래 여백 확보 */
.mw-home{gap:20px}
/* 민원접수 홈 허브: 3타일을 세로 1열 중앙 배열(수평 가운데 + 수직 가운데). 일정은 하단 고정 유지 */
.mw-home .menu-grid.tri{display:flex;flex-direction:column;align-items:center;gap:26px;margin-top:auto}
.mw-home .menu-grid.tri .menu-btn{width:160px}
.mw-home .schedule{margin-top:auto;margin-bottom:12vh}
/* 일정박스(민원접수 홈·메인메뉴): 일정 없을 때 박스를 일정 행 1개와 같은 높이로 통일 */
.schedule .grid-empty{padding:12px 14px;white-space:nowrap}

.perm-buttons{display:flex;flex-wrap:wrap;gap:8px}
.btn-ghost{border:1px solid var(--green);background:var(--green-l);color:var(--green-d);
  border-radius:10px;padding:9px 16px;font-size:13px;font-weight:700}
.btn-ghost:hover{background:var(--green);color:#fff}

/* 편의·자료 칩 (참고 서비스 — 관리 타일보다 낮은 위계로 구분) */
.svc-buttons{margin-top:18px}
.svc-title{font-size:13px;font-weight:700;color:var(--muted);margin-bottom:8px;text-align:center}
.svc-row{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.svc-chip{border:1px solid var(--line);background:linear-gradient(180deg,#ffffff,#f7faf8);border-radius:22px;
  padding:8px 15px;font-size:13px;font-weight:600;color:var(--muted);display:inline-flex;align-items:center;gap:5px;
  box-shadow:var(--shadow);transition:transform .16s ease,border-color .16s ease,color .16s ease}
.svc-chip:hover{border-color:var(--green);color:var(--green-d);transform:translateY(-1px)}
.svc-ic{width:20px;height:20px;border-radius:5px;object-fit:cover;vertical-align:-5px}

.grid-list{background:#fff;border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}
.grid-row{display:flex;gap:12px;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line)}
.grid-row:last-child{border-bottom:none}
.grid-row:hover{background:#fafdfb}
/* ── 선택된 행/카드 강조(전 폼 공통) — 옅어서 잘 안 보이던 선택 표시 개선 ── */
table.tbl tbody tr.sel > td,
.sched-tbl tbody tr.sel > td{background:color-mix(in srgb,var(--green) 20%,#fff)!important;font-weight:600}
table.tbl tbody tr.sel > td:first-child,
.sched-tbl tbody tr.sel > td:first-child{box-shadow:inset 4px 0 0 var(--green)}
.grid-row.sel,.mcard.sel{background:color-mix(in srgb,var(--green) 20%,#fff)!important;box-shadow:inset 4px 0 0 var(--green)!important;font-weight:600}
.grid-row .g-time{font-weight:700;width:52px;color:var(--green-d)}
.grid-row .g-gubun{font-size:11px;background:#eceeed;border-radius:12px;padding:2px 9px;color:#5a635e}
.grid-row .g-title{flex:1}
/* 업무일지 작성화면 — 뷰전용 배너(작성일시 위 · 등록자 아래), 바탕색과 동일(배경/테두리 없음) */
.write-dt{font-size:15px;font-weight:700;color:var(--ink);margin:2px 0 6px}
.write-dt b{font-weight:800}
.write-dt.write-who{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--muted);margin-bottom:12px}
.write-dt.write-who input{width:66px;padding:6px 8px;border:1px solid var(--line);border-radius:6px;background:#e8ebe8;color:#586159;-webkit-text-fill-color:#586159;font-size:14px;font-weight:700;text-align:center}
/* 종합의견 상단 등록자 변동이력(수정불가 표시) */
.write-history{font-size:13px;color:#586159;background:#eef1ec;border:1px solid var(--line);border-radius:8px;padding:8px 11px;line-height:1.75;white-space:pre-wrap}
/* 조회/임시저장 리스트 — 헤더행 + 세로줄 정렬(grid) */
.rec-head{display:grid;gap:10px;padding:10px 14px;background:var(--green-l);border:1px solid var(--line);border-bottom:none;border-radius:var(--radius) var(--radius) 0 0;font-weight:700;font-size:12px;color:var(--green-d)}
/* 조회 목록: 헤더 상단(기간·안내)은 고정, 목록만 내부 스크롤 + 헤더 sticky (살펴보기 .fitv 방식) */
.rec-scroll{max-height:calc(100dvh - 250px);min-height:120px;overflow:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius)}
.rec-scroll .rec-head,.rec-scroll .vp-head{position:sticky;top:0;z-index:5}
.rec-scroll .rec-head + .grid-list.rec{border-top:none}
.rec-head + .grid-list.rec{border-top-left-radius:0;border-top-right-radius:0;border-top:none}
.grid-list.rec .grid-row{display:grid;grid-template-columns:var(--gtc,1fr);gap:10px}
.rec-head span,.grid-list.rec .grid-row span{text-align:center;justify-self:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rec-head span.la,.grid-list.rec .grid-row span.la{justify-self:stretch;text-align:left}
/* 메인 '보리수 주요일정' 섹션 헤더(날짜 이동) */
.sched-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0 10px}
.sched-arrow{border:1px solid var(--line);background:#fff;border-radius:8px;width:28px;height:28px;
  cursor:pointer;color:var(--green-d);font-size:13px;line-height:1;padding:0}
.sched-arrow:hover{background:var(--green-l)}
.sched-date{border:1px solid var(--line);background:#fff;border-radius:8px;padding:4px 10px;cursor:pointer;
  font-weight:700;color:var(--green-d);font-size:14px}
.sched-date:hover{background:var(--green-l)}
.sched-today{border:1px solid var(--green);background:var(--green-l);color:var(--green-d);border-radius:8px;
  padding:4px 10px;cursor:pointer;font-size:12px;font-weight:600}
.sched-cal{width:0;height:0;opacity:0;border:0;padding:0;margin:0;overflow:hidden}
/* 일정조회/일정관리 — 표 정렬(헤더 기준 자동 줄맞춤) */
.sched-tbl{width:100%}
.sched-tbl th,.sched-tbl td{padding:9px 10px;font-size:13px;vertical-align:middle}
.sched-tbl td:first-child,.sched-tbl th:first-child{width:1%;white-space:nowrap}
.sched-tbl tbody tr{cursor:pointer}
.sched-tbl tbody tr:hover{background:#fafdfb}
.sched-tbl tbody tr.sel{background:var(--green-l)}
.sched-tbl .d-short,.sched-tbl .t-mobile{display:none}
/* 모바일(≤760px): 일자 YY.MM.DD(요일) + 시간을 일자 아래 2줄로, 시간열은 숨겨 제목 폭 확보 */
@media(max-width:760px){
  .sched-tbl .d-full{display:none}
  .sched-tbl .d-short{display:inline}
  .sched-tbl .t-mobile{display:block;font-size:12px;color:#6b7280;margin-top:2px;font-weight:400}
  .sched-tbl .col-time{display:none}
  .sched-tbl th,.sched-tbl td{padding:8px 8px}
}
/* 일정 없음: 박스(grid-list) 유지 + 중앙 표시 */
.grid-empty{text-align:center;padding:26px 14px;color:var(--muted);font-size:14px}

/* 보리수조직도 접이식 트리 */
.org-tree{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:auto;max-height:66vh}
.org-row{display:flex;align-items:center;gap:5px;padding:6px 8px;cursor:pointer}
.org-row:hover{background:#eef5f1}
.org-tog{flex:0 0 14px;color:#7a8a83;font-size:12px;text-align:center;line-height:1}
.org-tog.leaf{visibility:hidden}
.org-ico{flex:0 0 auto;font-size:14px;line-height:1}
.org-name{font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto}
.org-memlabel{font-weight:500;color:var(--muted);font-size:13px}
.org-lead{flex:0 0 auto;margin-left:8px;padding:1px 9px;border-radius:8px;font-size:12px;font-weight:600;color:var(--ink);cursor:pointer;white-space:nowrap;border:1px solid rgba(0,0,0,.06)}
.org-lead:hover{filter:brightness(.96)}
.org-cnt{margin-left:auto;flex:0 0 auto;font-size:11px;font-weight:700;background:var(--green-l);color:var(--green-d);border-radius:10px;padding:1px 9px}
.org-mem{display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid rgba(0,0,0,.05);font-size:13px;cursor:pointer}
.org-mem:hover{filter:brightness(.97)}
.org-jg{margin-left:auto;flex:0 0 auto;font-size:11px;font-weight:600;color:#6b5600}

/* 메인 '보리수 주요일정' 행: 한 줄 표기(시간범위/종일 + 구분 + 제목 말줄임) */
.schedule .grid-row{flex-wrap:nowrap;gap:10px}
.schedule .grid-row .g-time{width:auto;min-width:40px;white-space:nowrap;font-size:12px}
.schedule .grid-row .g-gubun{flex:0 0 auto;white-space:nowrap}
.schedule .grid-row .g-title{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.worker-msg{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px;
  box-shadow:var(--shadow);font-family:inherit;font-size:13px;line-height:1.7;white-space:pre-wrap;margin:0}
/* 근무구분 색상 칩 (일별조회 시안 A) */
.gd-chips{display:inline-flex;gap:4px;flex-wrap:wrap;justify-content:flex-end;margin-left:auto}
.gd-chip{display:inline-flex;align-items:center;font-size:11px;font-weight:800;padding:2px 8px;border-radius:999px;color:#fff;letter-spacing:.02em;line-height:1.4}
.gd-am{background:#f59e0b}.gd-mo{background:#059669}.gd-pm{background:#0284c7}.gd-ev{background:#7c3aed}.gd-ni{background:#3730a3}.gd-et{background:#64748b}.gd-meal{background:#2e7d57}
/* 당직칩: 대각선 이중색(좌상=시간대색 / 우하=당직 주황) + 흰 구분선으로 상·하부 선명 분리 */
.gd-dg{color:#fff;text-shadow:0 1px 1px rgba(0,0,0,.35);box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);background:#e67e22}
.gd-dg.dg-mo{background:linear-gradient(135deg,#059669 0 49%,rgba(255,255,255,.92) 49% 51%,#e67e22 51%)}   /* 전당: 에메랄드/주황 */
.gd-dg.dg-pm{background:linear-gradient(135deg,#0284c7 0 49%,rgba(255,255,255,.92) 49% 51%,#e67e22 51%)}   /* 후당: 스카이/주황 */
.gd-dg.dg-ev{background:linear-gradient(135deg,#7c3aed 0 49%,rgba(255,255,255,.92) 49% 51%,#e67e22 51%)}   /* 저당: 바이올렛/주황 */
.gd-dg.dg-ni{background:linear-gradient(135deg,#3730a3 0 49%,rgba(255,255,255,.92) 49% 51%,#e67e22 51%)}   /* 숙당: 인디고/주황 */
/* 근무구분 요약 카운트 칩 */
.gd-sum{display:flex;flex-wrap:wrap;gap:6px}
.gd-sum+.gd-sum{margin-top:6px}
.gd-scount{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700;background:#fff;border:1px solid var(--line);border-radius:8px;padding:4px 9px}
.gd-scount i{width:11px;height:11px;border-radius:3px;flex:0 0 auto}
.gd-scount b{font-variant-numeric:tabular-nums;color:var(--ink)}
/* 근무구분 시간대 타임라인 바 (일별조회 시안 D) */
.gd-tlwrap{margin-left:auto;display:inline-flex;align-items:center;gap:6px;flex:0 1 auto;min-width:0}
.tl{display:flex;height:24px;border-radius:6px;overflow:hidden;border:1px solid var(--line);width:220px;max-width:52vw}
.tl .seg{flex:1;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;color:#9aa3a0;background:#fff;min-width:0}
.tl .seg+.seg{border-left:1px solid var(--line)}
.tl .seg.am{background:#f59e0b;color:#fff}.tl .seg.mo{background:#059669;color:#fff}.tl .seg.pm{background:#0284c7;color:#fff}.tl .seg.ev{background:#7c3aed;color:#fff}.tl .seg.ni{background:#3730a3;color:#fff}
/* 월별조회: 봉사일 그룹 컬럼 + 컴팩트 타임라인 (모바일에서도 한 줄 유지) */
/* 다지선다 확인 모달(SM.선택) */
.sm-modal-ov{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.42);padding:24px}
.sm-modal{background:#fff;border-radius:16px;max-width:340px;width:100%;box-shadow:0 12px 40px rgba(0,0,0,.28);overflow:hidden;animation:sm-modal-in .16s ease}
@keyframes sm-modal-in{from{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:none}}
.sm-modal-msg{padding:22px 20px 18px;margin:0;font-size:15px;line-height:1.55;color:#1a1a1a;white-space:pre-line;text-align:center}
.sm-modal-btns{display:flex;border-top:1px solid var(--line)}
.sm-modal-btn{flex:1;padding:14px 6px;border:none;background:#fff;font-size:14px;font-weight:700;cursor:pointer;color:#333;border-left:1px solid var(--line)}
.sm-modal-btn:first-child{border-left:none}
.sm-modal-btn.primary{color:var(--green-d)}
.sm-modal-btn.danger{color:#d23b3b}
.sm-modal-btn.cancel{color:#888}
.sm-modal-btn:active{background:#f2f2f2}

/* 봉사 조회 표 헤더(봉사일/봉사시간/근무구분) — 세로중앙 */
.vp-head{gap:8px;padding:9px 14px;background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px;border:1px solid var(--line);border-bottom:none;border-radius:var(--radius) var(--radius) 0 0;align-items:center}
.vp-head + .grid-list{border-top-left-radius:0;border-top-right-radius:0;border-top:none}
.vp-head span,.grid-list.vp .grid-row span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grid-list.vp .grid-row{font-size:12px}
.grid-list.vp .grid-row .gd-chips{margin-left:0;justify-content:flex-start;white-space:normal}
.rec-scroll .grid-list.vp{overflow:visible}   /* 좁은 폭에서 열이 넘치면 rec-scroll이 좌우 스크롤(잘림 방지) */
/* 봉사 캘린더(월간) — 근무구분 칩만 표시 */
.cal-wrap{margin-top:8px}
.cal-head{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;font-size:12px;font-weight:700;color:var(--green-d);text-align:center;padding:2px 0 4px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}
.cal-cell{min-height:56px;border:1px solid var(--line);border-radius:8px;padding:3px;background:#fff;display:flex;flex-direction:column;gap:2px;overflow:hidden}
.cal-cell.empty{border:none;background:transparent;min-height:0}
.cal-cell.has-plan{cursor:pointer;background:#f3f8f4;border-color:color-mix(in srgb,var(--green) 40%,var(--line))}
.cal-cell.empty-day{cursor:pointer}
.cal-cell.has-plan:active,.cal-cell.empty-day:active{filter:brightness(.97)}
.cal-cell.today{outline:2px solid var(--green);outline-offset:-2px}
.cal-day{font-size:12px;font-weight:700;line-height:1.1}
.cal-chips{display:flex;flex-wrap:wrap;gap:2px;justify-content:flex-start}
.cal-chips .gd-chip{font-size:9px;padding:1px 5px;font-weight:800}
.cal-evs{display:flex;flex-direction:column;gap:2px;min-width:0}
.cal-ev{font-size:9px;font-weight:700;color:#fff;padding:1px 4px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4}
.toolbar .cal-nav{padding:6px 11px;font-size:14px;font-weight:800;line-height:1}
/* 하루 여러 일정 → 하단 목록 패널 */
.cal-daylist{margin-top:10px;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden;box-shadow:var(--shadow)}
.cal-daylist-head{padding:8px 12px;background:var(--green-l);color:var(--green-d);font-weight:700;font-size:13px}
.cal-daylist-row{display:flex;align-items:center;gap:8px;padding:9px 12px;border-top:1px solid var(--line);cursor:pointer;font-size:13px}
.cal-daylist-row:active{background:#f3f8f4}
.cal-daylist-row .cd-title{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-daylist-row .cd-time{color:var(--muted);font-size:12px;white-space:nowrap}
.month-view .grid-row{flex-wrap:nowrap;gap:6px;padding:9px 8px}
.month-view .mv-date{flex:0 0 48px;color:var(--muted);font-weight:700;font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}
.month-view .mv-name{flex:0 1 auto;min-width:34px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.month-view .mv-time{flex:0 0 auto;font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}
.month-view .gd-tlwrap{margin-left:auto;flex:0 1 auto;min-width:0;gap:5px}
.month-view .gd-tlwrap .tl{width:100px;max-width:30vw;height:22px}
.month-view .tl .seg{font-size:9px}
/* 기간별 봉사실적 표(집계/상세 공통 프레임) */
.rp-table{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);background:#fff}
.rp-head,.rp-row{display:grid;grid-template-columns:1fr 0.9fr 0.6fr 1.1fr;gap:6px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line)}
.rp-row:last-child{border-bottom:none}
.rp-head{background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px}
.rp-row{cursor:pointer;font-size:14px}
.rp-row:hover{background:#fafdfb}
.rp-row:active{background:var(--green-l)}
.rp-head .num,.rp-row .num{text-align:right;font-variant-numeric:tabular-nums}
.rp-head .last,.rp-row .last{text-align:right;font-variant-numeric:tabular-nums;font-size:12px;color:var(--muted)}
/* 개인 상세표: 봉사일 | 시각 | 시간 | 근무칩 */
.rd-head,.rd-row{display:grid;grid-template-columns:62px 84px 22px minmax(96px,1fr);gap:8px;align-items:center;padding:9px 8px;border-bottom:1px solid var(--line)}
.rd-row:last-child{border-bottom:none}
.rd-head{background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px}
.rd-row{font-size:13px}
.rd-row .rd-time{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}
.rd-head .num,.rd-row .num{text-align:right;font-variant-numeric:tabular-nums}
.rd-head .chips-h{text-align:right}
.rd-row .gd-chips{margin-left:0;justify-content:flex-end;flex-wrap:nowrap;gap:3px}
.rd-row .gd-chip{font-size:10px;padding:2px 5px;letter-spacing:0}
/* 금요정진 참석등록: 날짜 아래 정진 제목 강조 */
.jj-title{text-align:center;color:var(--blue);font-weight:800;font-size:18px;margin:4px 0 14px;letter-spacing:-.01em}
.jj-title.none{color:var(--muted);font-size:14px;font-weight:600}
/* 집계표 전체 합계 행 강조 */
.tbl .tbl-total td{font-weight:800;background:var(--green-l);color:var(--green-d)}
/* 금요정진 출석조회 리스트 컬럼 정렬(오·열 맞춤) */
.jj-head{display:grid;gap:8px;align-items:center;padding:9px 12px;background:var(--green-l);color:var(--green-d);font-weight:700;font-size:12px;border:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0}
.jj-list{border-top:0;border-radius:0 0 var(--radius) var(--radius)}
.jj-list .grid-row{display:grid;gap:8px;padding:10px 12px}
.jj-head.cols4,.jj-list.cols4 .grid-row{grid-template-columns:56px 60px 44px 1fr}
.jj-head.cols3,.jj-list.cols3 .grid-row{grid-template-columns:1fr 52px 1.4fr}
.jj-head span,.jj-list .grid-row span{justify-self:center;text-align:center;min-width:0}
.jj-head span:last-child,.jj-list .grid-row span:last-child{justify-self:stretch;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jj-list .grid-row.jj-grp{border-top:2px solid #c9d6cf}
.jj-date{font-weight:700;color:var(--green-d);font-size:13px;white-space:nowrap;font-variant-numeric:tabular-nums}
/* 참석/불참/미정 3분할 — 모바일에서도 한 줄 */
.kpi-row.kpi3{grid-template-columns:repeat(3,1fr)}
.kpi-row.kpi3 .kpi{padding:9px 6px;text-align:center;font-size:12.5px;white-space:nowrap}
.kpi-row.kpi3 .kpi b{font-size:16px;margin:0 1px}
.kpi-row.kpi3 .kl{display:block;font-size:11px;color:var(--muted);font-weight:600}
.kpi-row.kpi3 .kv{display:block;font-size:13px;font-weight:700;margin-top:1px}
/* kl/kv 일반형(2분할 KPI: 조회/수정 등) */
.kpi-row .kl{display:block;font-size:12px;color:var(--muted);font-weight:600}
.kpi-row .kv{display:block;font-size:14px;font-weight:700;margin-top:2px}
.kpi-row .kv b{font-size:18px;margin:0 2px}
/* 시작일/종료일 — 모바일에서도 2열 한 줄 유지 */
.form-grid.date2{grid-template-columns:1fr 1fr}
.form-grid.date2 input{padding:9px 8px;min-width:0}
/* 가스검침 직전/금일 — 노트북처럼 모바일에서도 2열(직전|금일) 유지, 입력폭 축소 */
.form-grid.gas2{grid-template-columns:1fr 1fr;gap:10px}
.form-grid.gas2 input{padding:9px 10px;min-width:0;text-align:right;font-variant-numeric:tabular-nums}
/* 동영상 검색 — 라벨을 박스 안(placeholder)에 넣어 2열 압축, 모바일에서도 2열 유지 */
.form-grid.vsearch{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.form-grid.vsearch input,.form-grid.vsearch select{padding:7px 10px;min-width:0;font-size:14px}
/* 동영상 검색필터: 폭 최소(문자수 기준) 인라인 배치 */
.vfilter{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:10px}
.vfilter select,.vfilter input{padding:7px 10px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;font-size:14px;font-family:inherit;color:var(--ink);background:#e2efe4;min-width:0}
.vfilter select:focus,.vfilter input:focus{outline:none;background:#fff;border-color:var(--green);box-shadow:0 0 0 2px rgba(60,122,73,.18)}
.vfilter select:disabled,.vfilter input:disabled{background:#e8ebe8;color:#586159;border-color:transparent}

/* ── 스마트필터(필터 많은 화면): 데스크톱=인라인 현행 / 모바일=필터버튼+칩+바텀시트 ── */
.sf-wrap{display:contents}
.sf-bar,.sf-back,.sf-head,.sf-foot{display:none}
@media (max-width:640px){
  .sf-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:8px}
  .sf-btn{padding:7px 14px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;background:#fff;color:var(--green-d);font-weight:700;font-size:14px;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
  .sf-badge{background:var(--green);color:#fff;border-radius:999px;font-size:11px;font-weight:800;padding:0 6px}
  .sf-chips{display:flex;flex-wrap:wrap;gap:6px}
  .sf-chip{background:var(--green-l);color:var(--green-d);border:1px solid color-mix(in srgb,var(--green) 40%,var(--line));border-radius:999px;padding:3px 6px 3px 10px;font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:6px}
  .sf-chip .x{cursor:pointer;opacity:.65;font-weight:800;padding:0 2px}
  .sf-back{display:block;position:fixed;inset:0;background:rgba(15,25,18,.42);z-index:1000;opacity:0;pointer-events:none;transition:opacity .2s}
  .sf-back.sf-open{opacity:1;pointer-events:auto}
  .sf-wrap{display:block;position:fixed;left:0;right:0;bottom:0;z-index:1001;background:var(--card);border-radius:16px 16px 0 0;padding:14px 14px calc(16px + env(safe-area-inset-bottom,0px));max-height:84vh;overflow:auto;transform:translateY(102%);transition:transform .24s ease;box-shadow:0 -10px 34px rgba(20,44,30,.22)}
  .sf-wrap.sf-open{transform:none}
  .sf-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;font-weight:800;font-size:16px;color:var(--ink)}
  .sf-x{background:none;border:none;color:var(--muted);font-weight:700;font-size:14px;cursor:pointer;font-family:inherit}
  .sf-foot{display:block;margin-top:14px}
  .sf-apply{width:100%;padding:12px;border:none;border-radius:10px;background:var(--green);color:#fff;font-weight:800;font-size:15px;font-family:inherit;cursor:pointer}
  .sf-wrap .sf-body{display:grid;grid-template-columns:1fr 1fr;gap:10px}
  .sf-wrap .sf-body input,.sf-wrap .sf-body select{width:100%;max-width:none;font-size:14px;padding:9px 11px}
  .sf-wrap .sf-body #지우기버튼{grid-column:1 / -1;margin-left:0;width:100%;font-size:14px;background:#fff;color:var(--muted);border:1px solid var(--line);border-radius:8px;padding:10px}
}
/* 검색 결과 목록 — 스크롤 영역(고정 헤더) → 아래 영상 박스가 한 화면에 보이도록 */
.vlist-scroll{max-height:34vh;overflow-y:auto}
.vlist-scroll table.tbl th{position:sticky;top:0;z-index:1}
/* 구분/담당/등록자(2~4열)는 줄바꿈 없이, 제목(1열)만 줄바꿈 허용 */
.vlist-scroll table.tbl th:nth-child(n+2),
.vlist-scroll table.tbl td:nth-child(n+2){white-space:nowrap}
/* 방재실 생활규칙 — 수평 슬라이드(스와이프) + 색상 배너 타이틀 */
.slider-wrap{overflow:hidden}
.slider{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.slider::-webkit-scrollbar{display:none}
.slide{flex:0 0 100%;scroll-snap-align:start;box-sizing:border-box;padding:0 2px}
.slide-card{height:100%}
.rule-banner{border-radius:24px;padding:12px 18px;text-align:center;font-weight:700;font-size:15px;margin:2px 0 16px;box-shadow:var(--shadow)}
.rule-list{line-height:1.75;padding-left:20px;margin:10px 0 0}
.rule-list li{margin-bottom:12px}
.slider-ctrl{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px}
.dots{display:flex;gap:9px;justify-content:center;flex:1}
.dot{width:9px;height:9px;border-radius:50%;background:#cfd8d3;cursor:pointer;transition:background .15s}
.dot.on{background:var(--green)}
.slider-ctrl .btn:disabled{opacity:.4;cursor:default}
/* 의식음원 — 범례/뱃지/재생 버튼 */
.sound-legend{display:flex;gap:20px;justify-content:flex-end;align-items:center;font-size:13px}
.sound-legend .ic-audio{color:#2b7fff}
.sound-legend .ic-yt{color:#e0201b}
.sound-badge{color:#e0201b;font-size:11px;font-weight:700;margin-right:4px}
.sound-audio{color:#2b7fff;font-size:16px;padding:6px 11px;line-height:1}
.sound-audio.playing{background:var(--green-l);border-color:var(--green)}
.btn.red{color:#e0201b;border-color:#f2c9c7}
.btn.red:hover{background:#fdeceb}
.sound-yt{font-size:14px;padding:6px 11px;line-height:1}
.sound-ph{display:inline-block;width:42px}
/* 라디오 옵션(살펴보기 구분 등) */
.radio-line{display:flex;flex-wrap:wrap;gap:16px;align-items:center;padding:2px 0}
.radio-opt{display:inline-flex;align-items:center;gap:6px;cursor:pointer;font-size:15px;color:var(--ink)}
.radio-opt input{width:17px;height:17px;accent-color:var(--green);cursor:pointer;margin:0}
/* 자동 높이 textarea — 내용에 따라 늘어나고 최대 ~10줄에서 스크롤 */
textarea.autogrow{min-height:80px;max-height:246px;overflow-y:auto;resize:none;box-sizing:border-box;line-height:1.5}
/* 일정 내용란: 1줄부터 내용에 맞게 최적화, 최대 10줄(246px)에서 스크롤 */
.form-grid textarea.sched-content{min-height:40px}
/* 인라인 하단 액션바 → 플로팅(클래스 fabbar만 추가하면 적용, 버튼 id·핸들러 그대로) */
.fabbar{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(16px + env(safe-area-inset-bottom));z-index:25;
  display:flex;flex-wrap:nowrap!important;justify-content:center;align-items:center;gap:7px;padding:8px;max-width:calc(100vw - 16px);
  overflow-x:auto;scrollbar-width:none;
  background:rgba(255,255,255,.88);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-lg);margin:0}
.fabbar::-webkit-scrollbar{display:none}
/* 젤 통일 — 폼 하단 툴바도 .fab-btn과 동일 질감/위계(초록=주, 빨강=삭제, 나머지=보조) */
.fabbar .btn{flex:0 0 auto;border-radius:12px;padding:10px 13px;font-size:14px;font-weight:700;white-space:nowrap;transition:transform .16s ease, box-shadow .16s ease, filter .16s ease;
  border:1px solid #aecbb4;color:var(--green-d);text-shadow:0 1px 0 rgba(255,255,255,.6);
  background:linear-gradient(180deg,#f5faf2 0%,#e4efe0 12%,#d2e6cc 48%,#c3dcbb 54%,#dcecd6 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9), 0 2px 5px rgba(0,0,0,.14)}
.fabbar .btn.green,.fabbar .btn.save{color:#fff;border-color:#2f6640;text-shadow:0 1px 1px rgba(0,0,0,.28);
  background:linear-gradient(180deg,#5aa16c 0%,#3f8551 46%,#31703f 54%,#468a57 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32), 0 4px 12px rgba(46,125,87,.30)}
.fabbar .btn.red,.fabbar .btn.danger{color:#8a1f1a;border-color:#e0a9a5;text-shadow:0 1px 0 rgba(255,255,255,.5);
  background:linear-gradient(180deg,#fdf1f0 0%,#f6dad7 12%,#eebfba 48%,#e6ada7 54%,#f3d2ce 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.85), 0 2px 5px rgba(0,0,0,.14)}
.fabbar .btn:hover{transform:translateY(-2px);filter:brightness(1.03)}
.fabbar .btn:active{transform:translateY(0);box-shadow:inset 0 2px 6px rgba(0,0,0,.2)}
.fabbar .btn.sm-hidden{display:none}
.fabbar:empty{display:none}   /* 동적 액션영역이 비었을 때(예: 검침 상세모드) 빈 바 숨김 */
.fabbar:not(:has(> :not(.sm-hidden))){display:none}   /* 모든 버튼이 숨김이면(선택 전 등) 바 숨김 */

.drawer-close{position:absolute;top:14px;right:10px;color:#fff}

.todo-card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:34px 22px;text-align:center;max-width:460px;margin:30px auto}
.todo-badge{display:inline-block;background:var(--amber-bg);color:var(--amber);border:1px solid #ffe1a8;
  border-radius:20px;padding:4px 14px;font-size:12px;font-weight:700;margin-bottom:14px}
.todo-card h2{margin:0 0 10px;font-size:20px}
.todo-card p{color:var(--muted);font-size:14px;line-height:1.7;margin:0}

/* ── 사진 다운로드·공유·삭제 버튼 ── */
.photo-actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.photo-dl,.photo-share,.photo-del{text-decoration:none;color:inherit;cursor:pointer}
.photo-dl.sm-hidden,.photo-share.sm-hidden,.photo-del.sm-hidden{display:none}
.photo-del{border-color:#e6b1b1;color:#b23b3b}
.photo-del:hover{background:#fbe9e9}
/* 파일 선택: 네이티브 input 숨기고 라벨 버튼으로 대체("선택된 파일 없음" 문구 제거) */
.photo-file-hidden{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0 0 0 0)}
.photo-pick{display:inline-block;cursor:pointer;margin-bottom:8px}
.photo-prev img{cursor:zoom-in}

/* ── 이미지 라이트박스(크게 보기) ── */
.lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;
  justify-content:center;z-index:9999;padding:20px}
.lightbox img{max-width:96vw;max-height:92vh;object-fit:contain;border-radius:6px;box-shadow:0 6px 30px rgba(0,0,0,.5)}
.lightbox .lb-close{position:absolute;top:14px;right:20px;color:#fff;font-size:34px;line-height:1;
  cursor:pointer;font-weight:700;background:none;border:none}

/* ── 날짜 입력 옆 (요일) 라벨 (전 화면 공통) ── */
/* 날짜 입력 칩 — '2026.07.11 (토)' 통합 표시(네이티브 입력은 투명 오버레이 = 달력) */
.date-chip-wrap{position:relative;display:inline-flex;vertical-align:middle}
.date-chip{font-family:inherit;font-size:14px;font-weight:700;padding:7px 12px;border:1px solid color-mix(in srgb,var(--green) 52%,var(--line));border-radius:8px;background:#e2efe4;color:var(--ink);white-space:nowrap;line-height:1.25;cursor:pointer;user-select:none}
.date-chip.disabled{background:#e8ebe8;color:#586159;border-color:transparent;cursor:default}
.date-chip .dc-ph{color:var(--muted);font-weight:600}
.date-chip-wrap input[type="date"]{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;padding:0;border:0;pointer-events:none}

/* ── 도움말 (상단 ? 버튼 + 모달) ── */
.help-btn{font-size:20px;font-weight:800;line-height:1;cursor:pointer;user-select:none}
.help-btn:hover{opacity:.75}
/* 헤더 오른쪽: ? 는 제목 옆(간격 0), 크기 축소 / 홈버튼만 우측 끝으로 밀기 */
.topbar .help-btn{margin-left:-10px;width:28px;font-size:16px}
.home-btn{margin-left:auto;line-height:1;cursor:pointer;user-select:none}
.home-btn:hover{opacity:.6}
.home-ico{width:22px;height:22px;object-fit:contain;display:block}
.help-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:10000;
  display:flex;align-items:center;justify-content:center;padding:20px}
.help-modal{background:var(--card);border:1px solid var(--line);border-radius:16px;
  width:100%;max-width:440px;max-height:82vh;display:flex;flex-direction:column;
  box-shadow:var(--shadow-lg);overflow:hidden}
.help-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:14px 16px;border-bottom:1px solid var(--line)}
.help-ttl{font-weight:700;font-size:16px}
.help-x{border:0;background:none;font-size:16px;line-height:1;cursor:pointer;color:var(--muted);padding:4px}
.help-body{padding:16px;overflow-y:auto}
.help-summary{margin:0 0 14px;line-height:1.6}
.help-sec{margin-bottom:14px}
.help-sec>h4{margin:0 0 6px;font-size:13px;color:var(--blue,#2a6df4)}
.help-body ul{margin:0;padding-left:18px;line-height:1.7}
.help-body li{margin-bottom:3px}
.help-warn{margin-top:12px;padding:10px 12px;background:var(--amber-bg);border-left:3px solid var(--amber);
  border-radius:8px;font-size:13px;line-height:1.5}
.help-auto{margin-top:14px;font-size:12px;color:var(--muted)}

/* ===== 방재실 숙/당직자 명단 (주간 표) ===== */
.dsr-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-top:10px}
table.dsr{border-collapse:collapse;width:100%;min-width:680px;font-size:12.5px}
table.dsr th,table.dsr td{border:1px solid #d8e2db;padding:6px 7px;text-align:center;vertical-align:middle}
table.dsr thead th{background:var(--green,#2e7d57);color:#fff;font-weight:700;padding:8px 7px}
table.dsr thead th.sun{background:#a83227}
table.dsr thead th.sat{background:#2f5fd6}
.dsr-dow{font-size:13px}
.dsr-date{font-size:11px;opacity:.92;font-variant-numeric:tabular-nums}
.dsr-time{background:#f1f6f3;color:#5a6b62;font-weight:700;font-size:11px;white-space:nowrap;width:52px}
.dsr-gubun{background:#e7f2ec;color:#245f43;font-weight:800;white-space:nowrap;width:66px}
.dsr-gubun.dang{background:#fdeede;color:#a85a10}
table.dsr td.dsr-cell{color:#1f2a24;line-height:1.4;min-width:78px}
tr.dsr-r-dang td.dsr-cell{background:#fff8ef}
.dsr-cell .nm{white-space:nowrap}
.dsr-cell .nm.dang{font-weight:800;color:#b4620d}
.dsr-cell .nm-click{cursor:pointer;text-decoration:underline dotted #9fb6a9;text-underline-offset:2px}
.dsr-cell .nm-click:hover{color:var(--green,#2e7d57);text-decoration-color:var(--green,#2e7d57)}
.dsr-cell .nm-click.dang:hover{color:#8a4a08}
.dsr-none{color:#b7c2bb}
td.dsr-sun{background:#fdf3f2}
td.dsr-sat{background:#f1f5fd}
tr.dsr-r-dang td.dsr-sun{background:#fdf0e9}
tr.dsr-r-dang td.dsr-sat{background:#fbf1e6}
.dsr-morning .v{font-weight:700;color:#33507a}
.dsr-morning.edited .v{color:#a85a10}
.dsr-morning.editable{cursor:pointer}
.dsr-morning.editable:hover{outline:2px solid var(--orange,#e67e22);outline-offset:-2px}
.dsr-cell.dsr-empty.editable{cursor:pointer}
.dsr-cell.dsr-empty.editable:hover{background:#eef6f1;outline:2px solid var(--green,#2e7d57);outline-offset:-2px}
.dsr-cell.dsr-empty.editable:hover .dsr-none{font-size:0}
.dsr-cell.dsr-empty.editable:hover .dsr-none::after{content:"＋ 등록";font-size:11px;color:var(--green,#2e7d57);font-weight:800}
.dsr-sel{font-size:12px;border:1px solid var(--orange,#e67e22);border-radius:6px;padding:3px 4px;max-width:98px}
/* 시간블록 구분: 블록 시작행 상단에 굵은 초록 테두리 */
table.dsr tr.dsr-block td,table.dsr tr.dsr-block th{border-top:2.5px solid var(--green,#2e7d57)}
