:root{
  --bg:#F3F4F7; --paper:#fff; --ink:#1E2333; --muted:#6B7280; --line:#DDE0E8;
  --teal:#2BA8A0; --navy:#242A5C; --orange:#F47F3F; --hand:#FFF6D6; --handline:#F0DFA0;
  --done:#3AA76D; --due:#C0504D; --soon:#C98A2B; --wait:#B4BEC6; --na:#9AA5AE;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#141726; --paper:#1C2033; --ink:#ECEEF5; --muted:#A3AABB; --line:#2E3449;
  --teal:#4FC4BC; --navy:#B9C1F2; --orange:#F79A66; --hand:#3A3320; --handline:#5A4E2A;
  --done:#5CC28A; --due:#E37773; --soon:#D9A441; --wait:#7C8597; --na:#7C8597;}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);line-height:1.6;
  font-family:"맑은 고딕","Malgun Gothic",system-ui,sans-serif;font-size:14px}
header{display:flex;align-items:center;gap:14px;background:var(--teal);color:#fff;padding:10px 18px;flex-wrap:wrap}
.brand{font-weight:700;font-size:16px}
header select{background:rgba(255,255,255,.15);color:#fff;border:1px solid rgba(255,255,255,.35);
  border-radius:6px;padding:4px 8px;font:inherit;max-width:280px}
header select option{color:#000}
nav{display:flex;gap:4px}
nav button{background:transparent;color:#fff;border:0;padding:6px 14px;border-radius:6px;font:inherit;cursor:pointer;opacity:.8}
nav button.on{background:rgba(255,255,255,.22);opacity:1;font-weight:700}
.right{margin-left:auto;display:flex;align-items:center;gap:10px}
.ghost{background:transparent;border:1px solid rgba(255,255,255,.4);color:#fff;border-radius:6px;padding:4px 10px;cursor:pointer;font:inherit}
main{max-width:1100px;margin:0 auto;padding:18px}
.card{background:var(--paper);border:1px solid var(--line);border-radius:12px;padding:22px 24px;margin-bottom:18px}
.card.narrow{max-width:380px;margin:60px auto}
h2{font-size:17px;margin:0 0 14px;font-weight:700}
h2 .sub{font-size:12px;color:var(--muted);font-weight:400;margin-left:8px}
h4{margin:0 0 6px;font-size:13px;color:var(--muted)}
label{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}
label > small.fnote{flex-basis:100%;margin:-4px 0 0 106px;font-size:11.5px}
label>span{width:96px;text-align:right;font-size:12.5px;color:var(--ink);
  background:var(--hand);border:1px solid var(--handline);border-radius:5px;padding:3px 7px;flex:none}
input,select,textarea{font:inherit;padding:5px 8px;border:1px solid var(--line);border-radius:6px;
  background:var(--paper);color:var(--ink);width:100%;max-width:220px}
button.primary{background:var(--teal);color:#fff;border:0;border-radius:8px;padding:9px 18px;
  font:inherit;font-weight:700;cursor:pointer}
button.primary:disabled{opacity:.6;cursor:default}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(330px,100%),1fr));gap:0 20px}   /* 10-03 D4-7 폰(375px)에서 안 넘치게 */
.rounds{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(330px,100%),1fr));gap:14px;margin-top:10px}
.round{border:1px dashed var(--line);border-radius:10px;padding:12px}
.bar{display:flex;align-items:center;gap:12px;margin-top:14px;flex-wrap:wrap}
.chip{font-size:12px;padding:3px 10px;border-radius:20px;border:1px solid var(--line);color:var(--muted)}
.chip.ok{color:var(--done);border-color:var(--done)}
.chip.warn{color:var(--soon);border-color:var(--soon)}
.quiet{color:var(--muted);font-size:12.5px}
.todo{list-style:none;margin:0;padding:0}
.todo li{padding:7px 0;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.todo li .na-btn,.ghost2.sm{padding:2px 9px;font-size:12px;margin-left:auto}
.todo li:last-child{border:0}
.todo li.late{color:var(--due)}
.todo .mark{color:var(--teal);margin-right:6px}
.warnline{color:var(--soon);font-size:12.5px;margin:10px 0 0}
.scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
th{font-size:11px;color:var(--muted);font-weight:500;letter-spacing:.04em}
td.num{font-variant-numeric:tabular-nums}
.st{font-size:11px;padding:2px 8px;border-radius:4px;background:var(--bg);color:var(--muted)}
.st.done{color:var(--done)} .st.due{color:var(--due);font-weight:700} .st.soon{color:var(--soon)}
.st.wait{color:var(--wait)} .st.na{color:var(--na)} .st.none{color:var(--wait)}
.okbox,.errbox{margin-top:14px;padding:12px 14px;border-radius:10px;border-left:4px solid var(--done);background:var(--bg)}
.errbox{border-left-color:var(--due)}
code{background:var(--bg);padding:1px 6px;border-radius:4px;font-size:12px}
.toast{position:fixed;right:18px;bottom:18px;background:var(--navy);color:#fff;padding:10px 16px;
  border-radius:8px;z-index:9;max-width:min(420px,calc(100vw - 36px));white-space:pre-line;line-height:1.45}   /* 10-03 D4-11 줄바꿈 살림 · D4-7 폰 폭 */
.toast.err{background:var(--due)}
.toast.warn{background:var(--soon,#b7791f);color:#1a1a1a}
/* 10-03 D4-3 「작업 중」 */
button.busy{opacity:.75;cursor:progress}
.busyline{margin:0 0 8px;font-size:13px}
/* 10-03 D4-5 긴 글 확인창 */
.cfm{line-height:1.55}
.cfm .warn{color:var(--due)}
.cfm-list{margin:6px 0 12px;padding-left:18px;max-height:46vh;overflow:auto;font-size:13.5px}
.cfm-list li{margin:2px 0}
.cfm-tbl{margin:8px 0 12px;font-size:13px}
.cfm-tbl tr.bad td{background:rgba(220,80,60,.08)}
.cfm-pre{background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:12px 14px;white-space:pre-wrap;word-break:break-all;font-size:13px;max-height:50vh;overflow:auto;user-select:all}
.cfm-bar{display:flex;gap:10px;justify-content:flex-end;margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
button.danger{background:var(--due);color:#fff;border:0;border-radius:8px;padding:9px 18px;cursor:pointer}
button.danger:disabled{opacity:.6;cursor:default}
.refs{display:grid;gap:10px}
.ref{border:1px solid var(--line);border-radius:10px;padding:12px}
.ref .rt{font-weight:700}
.ref .rb{color:var(--muted);font-size:12.5px;margin:4px 0 8px;white-space:pre-wrap}
.ref .rl a{display:inline-block;margin-right:10px;color:var(--teal);text-decoration:none;font-size:12.5px}
.ref .rl a:hover{text-decoration:underline}
@media (max-width:640px){label{flex-wrap:wrap}label>span{width:auto;text-align:left}input,select{max-width:none}
  main{padding:10px}.card{padding:14px 14px;border-radius:10px}.folderbar label{min-width:0}}   /* 10-03 D4-7 */

.folderbar{display:flex;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}
.folderbar label{flex:1;margin:0;min-width:320px}
.folderbar input{max-width:none}
.ghost2{background:transparent;border:1px solid var(--line);color:var(--ink);border-radius:7px;
  padding:6px 12px;font:inherit;cursor:pointer}
.ghost2:hover{border-color:var(--teal);color:var(--teal)}


/* ── 실시대장 · CSI (M4) ───────────────────────── */
.lgprep { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }
.prepbox { border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; }
.prepbox .pt { font-weight: 700; margin-bottom: 6px; }
.bar2 { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 10px; }
.bar2 input { flex: 1 1 120px; min-width: 100px; }
.filebtn { display: inline-block; padding: 6px 12px; border: 1px solid var(--line); border-radius: 6px;
           cursor: pointer; font-size: 13px; background: var(--bg); }
.filebtn:hover { border-color: var(--teal); }
.tiny { font-size: 12px; margin-top: 8px; }
.warn { color: var(--orange); }
.tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
.tbl th, .tbl td { border-bottom: 1px solid var(--line); padding: 7px 8px; text-align: left; vertical-align: top; }
.tbl th { font-weight: 700; background: var(--bg); position: sticky; top: 0; }
.tbl td small { display: block; }

/* ── 강도 · 탈형 (화면 C · M5) ─────────────────── */
.pickbar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: 14px; }
.pickbar label { display: flex; align-items: center; gap: 8px; margin: 0; }
.pickbar select { min-width: 220px; }
.kinds { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.kind {
  padding: 8px 14px; border: 1px solid var(--line); border-radius: 7px; background: var(--paper);
  color: var(--ink); font-size: 13.5px; cursor: pointer; display: flex; align-items: center; gap: 8px;
  font-family: inherit;
}
.kind:hover { border-color: var(--teal); }
.kind.on { border-color: var(--teal); background: var(--teal); color: #fff; font-weight: 700; }
.kind.on .st { background: rgba(255,255,255,.22); color: #fff; }
/* 2026-09-15 jem — 시험일자·기준 칸이 한 줄로 서도록: 라벨은 줄바꿈 없이 내용만큼, 칸 사이 간격 일정 */
.stgrid { display: flex; flex-wrap: wrap; gap: 12px 22px; margin-bottom: 16px; align-items: flex-end; }
.stgrid label { display: flex; flex-direction: column; gap: 5px; margin: 0; }
.stgrid label > span { width: auto; min-width: 96px; white-space: nowrap; text-align: center; }
.stgrid input { width: 170px; }
/* ★230 → 290 (A18 · 2026-09-18) — 칸 오른쪽에 계산값(.cv 76px)이 붙어 230 이면 입력칸이 뭉개진다 */
.sets { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: 16px; }
.set { border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; background: var(--bg); }
.set .setname { font-weight: 700; font-size: 13px; margin-bottom: 8px; color: var(--navy); }
.set label { display: flex; align-items: center; gap: 8px; margin: 0 0 7px; }
.set label span { font-size: 12px; color: var(--muted); width: 86px; flex: none; }
.set input { flex: 1; min-width: 60px; }

/* ★계산값 인라인 · 하중/강도 토글 (A18 · 2026-09-18 · jem 요청)
   「계산값이 옆칸에 나와서 그거 확인 후 원장에 기입」 — 칸 오른쪽이 그 자리다.
   숫자는 tabular-nums 로 자리를 맞춘다(세 줄이 오와열 안 맞으면 눈으로 검산이 안 된다). */
.set label b.cv { flex: none; width: 76px; text-align: right; font-size: 12.5px;
  color: var(--wait); font-weight: 400; font-variant-numeric: tabular-nums; }
.set label b.cv.on { color: var(--navy); font-weight: 700; }
.set .setavg { margin: 8px 0 0; padding-top: 7px; border-top: 1px dashed var(--line);
  font-size: 12px; color: var(--muted); display: flex; justify-content: space-between; gap: 8px; }
.set .setavg b { color: var(--navy); font-variant-numeric: tabular-nums; }
.set.calc { border-color: var(--teal); }

/* 토글 — ★한 번에 한쪽만 보인다. 두 칸을 같이 두면 값이 흔들리는 것처럼 보인다 (jem 09-18) */
.modebar { display: flex; flex-wrap: wrap; gap: 6px 20px; margin: 0 0 14px;
  padding: 9px 13px; border: 1px solid var(--line); border-radius: 8px; background: var(--bg); }
.modebar label { margin: 0; gap: 7px; font-size: 12.5px; cursor: pointer; }
.modebar label > span { width: auto; text-align: left; font-size: 12.5px; color: var(--ink); }
.modebar input { width: auto; flex: none; }
.modebar small { color: var(--muted); font-size: 11.5px; }

/* 계산 결과 요약 — 조평균·3조평균·판정. ★기입 전에 보는 자리 */
.stsum { margin-top: 14px; padding: 11px 15px; border: 1px solid var(--teal);
  border-radius: 10px; background: var(--bg); font-size: 13px; }
.stsum .big { font-size: 17px; font-weight: 700; color: var(--navy);
  font-variant-numeric: tabular-nums; }
.stsum .stale { color: var(--orange); font-weight: 700; }

/* ── 설정 (화면 D · M5) ────────────────────────── */
.lists { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 14px; }
.listbox { border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; }
.listbox .lt { font-weight: 700; font-size: 13px; margin-bottom: 9px; }
.chips { display: flex; flex-wrap: wrap; gap: 6px; min-height: 26px; }
.tagx {
  display: inline-flex; align-items: center; gap: 3px; padding: 3px 5px 3px 10px;
  background: var(--bg); border: 1px solid var(--line); border-radius: 13px; font-size: 12.5px;
}
.tagx.base { border-color: var(--teal); font-weight: 700; }
.tagx button {
  border: none; background: none; color: var(--muted); cursor: pointer; padding: 0 3px;
  font-size: 12px; line-height: 1; font-family: inherit;
}
.tagx button:hover { color: var(--orange); }
.addrow { display: flex; gap: 6px; margin-top: 10px; }
.addrow input { flex: 1; min-width: 0; }

/* 준비 칸이 넷이 되면 두 줄로 (M4-5) */
.lgprep.four { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.bar2 select { flex: 0 0 auto; }
.undo { margin-left: 6px; padding: 1px 6px; font-size: 11px; border: 1px solid var(--line);
        border-radius: 4px; background: var(--paper); color: var(--muted); cursor: pointer;
        font-family: inherit; }
.undo:hover { border-color: var(--orange); color: var(--orange); }

.chk { display: flex; align-items: center; gap: 8px; grid-column: 1 / -1; margin-top: 4px; flex-wrap: wrap; }
.chk > span { width: auto; white-space: nowrap; }
.chk input { width: auto; }
.chk small { margin-left: 4px; }

/* 이미 제출된 건의 제출 버튼 — 흐리게. 막지는 않는다(재제출 길) */
.ghost2.dim{opacity:.45}
.ghost2.dim:hover{opacity:1}

/* 선택 칸(설계량 등) — 라벨 흐리게 */
#head label.opt span{opacity:.75}
.addrow select{max-width:160px}

/* 골재수정계수 출처 표시 */
.knote{display:block;font-size:11px;margin-top:2px}
.hint{color:#8A6D00}

/* 사진 15칸 (M5) */
.phgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:10px}
.phcell{border:1px solid var(--line,#e3e6ea);border-radius:8px;padding:6px;background:var(--bg,#fafbfc);min-height:120px;display:flex;flex-direction:column;gap:4px}
.phcell .pn{font-size:11px;color:var(--muted,#7c8996)}
.phcell .pn b{color:var(--ink,#2a3340);margin-right:4px}
.phcell img{width:100%;height:84px;object-fit:cover;border-radius:4px;background:#eee}
.phcell .empty{height:84px;display:flex;align-items:center;justify-content:center;color:#b8c0c8;font-size:11px;border:1px dashed #d5dbe1;border-radius:4px}
.phcell .pb{display:flex;gap:4px;justify-content:space-between;align-items:center}
.phcell .pb small{color:var(--muted,#7c8996);font-size:10px}
.phcell.has{border-color:#2BA8A0}
.phcell.off{opacity:.5}
.phnote{grid-column:1/-1;font-size:12px;padding:4px 2px}

/* 건 마감 (2026-09-07) */
.warnbtn { border-color: #F47F3F; color: #F47F3F; }
.warnbtn:hover { background: #fff3ec; }
#lwhy { margin: 6px 0 0; }

/* 배너 — 맨 아래 한 줄 (후원사 · 컨설팅 문의) 2026-09-07 */
.banner{margin:24px auto 0;max-width:1100px;padding:10px 16px;border-top:1px solid #dfe3ea;color:#5b6472;font-size:12.5px;text-align:center}
.banner a{color:#242A5C;text-decoration:none;border-bottom:1px dotted #9aa3b2}
.banner a:hover{color:#F47F3F;border-color:#F47F3F}
.banner .bn-k{display:inline-block;padding:1px 6px;margin-right:4px;border-radius:3px;background:#eef0f5;color:#242A5C;font-weight:600;font-size:11px}
.banner .bn-sep{margin:0 12px;color:#c6ccd6}


/* 법규·기준 찾기 (2026-09-07 밤 · 목록 + 링크) */
.lawbar input#lawq{flex:1;min-width:280px;font-size:14px}
.lawbar .chk{display:flex;align-items:center;gap:4px;font-size:12.5px;color:#5b6472;white-space:nowrap}
.lawtable{max-height:65vh;overflow:auto;border:1px solid #e3e6ec;border-radius:6px;margin-top:8px}
.lawtable table{width:100%;border-collapse:collapse;font-size:13px;table-layout:fixed}
.lawtable th:nth-child(1){width:64px}.lawtable th:nth-child(2){width:150px}.lawtable th:nth-child(4){width:104px}.lawtable th:nth-child(5){width:92px}.lawtable th:nth-child(6){width:150px}
.lawtable td:nth-child(3){word-break:keep-all;overflow-wrap:anywhere}
.lawtable th{position:sticky;top:0;background:#f4f5f8;color:#242A5C;text-align:left;padding:7px 10px;font-size:12px;border-bottom:1px solid #e3e6ec}
.lawtable td{padding:6px 10px;border-top:1px solid #eef0f4;vertical-align:top}
.lawtable tr:hover td{background:#fff6ef}
.lawtable td.src{white-space:nowrap;color:#6b7280;font-size:12px}
.lawtable td.code{color:#F47F3F;font-weight:600;overflow-wrap:anywhere}
.lawtable td.sub{color:#6b7280;font-size:12px;white-space:normal;overflow-wrap:anywhere;word-break:keep-all}   /* ★10-01 jem 「검색할 때 글씨 안 겹쳐지게」 — 상태 칸 nowrap 이 제목 칸 위로 넘쳤다 */
.lawtable td{overflow:hidden}.lawtable td small{display:block;white-space:normal;overflow-wrap:anywhere}
.lawtable tr.gone td{opacity:.55}
.lawtable td small{display:block;color:#8a93a3;font-size:11.5px;word-break:break-all}

/* 안 쓰는 칸 (단위수량 시료수 밖) — 2026-09-08 jem "화면엔 아무 티 안 나는데" */
.round label.off span{background:#eef0f4!important;color:#9aa3b2!important;border-color:#e3e6ec!important}
.round label.off input{background:#f5f6f8;color:#9aa3b2;border-style:dashed}
.round label.off input::placeholder{color:#a8b0bd;font-size:11.5px}

/* 홈 — 닫은 시험 (2026-09-15) */
.closedh{margin:16px 0 6px}
.closed{list-style:none;margin:0;padding:0}
.closed li{padding:5px 0;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.closed li:last-child{border:0}
.closed li .num{color:var(--ink)}

/* 모달 (2026-09-15) — 닫은 시험 목록 등 긴 표는 홈에 안 펼치고 창으로 */
.modal{position:fixed;inset:0;background:rgba(20,30,40,.45);display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}
.modal[hidden]{display:none}   /* .modal 의 display:flex 가 브라우저 기본 [hidden] 을 이기므로 명시적으로 눌러 준다 */
.modal-box{background:var(--paper);border-radius:12px;max-width:820px;width:100%;max-height:85vh;display:flex;flex-direction:column;box-shadow:0 10px 40px rgba(0,0,0,.25)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--line)}
#modal-body{padding:16px 20px;overflow:auto}
.filt{margin-bottom:12px}
.ghost2.on{border-color:var(--teal);color:var(--teal);font-weight:700}
.closedh{margin:14px 0 0;display:flex;align-items:center;gap:10px;font-size:13.5px}
.closedh .ghost2.sm{margin-left:0}

/* 시공장비 입력 줄 (2026-09-16) — 이름 + 규격 + 대수 + 점검결과 + 조치 */
.equip{margin:14px 0 4px}
.eqhead{font-weight:700;font-size:13.5px;margin-bottom:8px}
.eqrow{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.eqname{min-width:74px;font-size:12.5px;background:var(--hand);border:1px solid var(--handline);border-radius:5px;padding:4px 9px;text-align:center}
.eqrow input,.eqrow select{flex:1 1 120px;min-width:96px}
.eqrow input[data-f="대수"]{flex:0 0 74px;min-width:74px}

/* 설정 카드 — 요약 한 줄 + [편집] 팝업 (G1 · 2026-09-16) */
/* (10-03 D4-13) .setcard·.cardsum·.setmodalbar — 죽은 설정 팝업 CSS 걷어냄 */

.setmodalbar .tiny{margin-right:auto}

/* 배합기준표 편집 (G2 · 2026-09-16) */
.mixco{margin-bottom:18px;border:1px solid var(--line);border-radius:10px;padding:12px 12px 6px}
.mixhead{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}
.mixhead b{font-size:14px;flex:0 0 auto}
.mixhead .mixsrc{flex:1 1 320px;min-width:200px;font-size:12px}
.mixtbl{width:100%;font-size:12.5px}
.mixtbl th{font-weight:600;white-space:nowrap;padding:4px 6px}
.mixtbl td{padding:3px 4px;vertical-align:middle}
.mixtbl td input{width:100%;padding:4px 6px;font-size:12.5px}
.mixtbl td:first-child{white-space:nowrap}
.mixtbl .mixv{max-width:84px}
.mixtbl tr.mixbad td:first-child{background:var(--hand)}
.mixtbl .warn{color:var(--orange);font-weight:600}
.mixtbl tr.mixadd td{padding-top:8px}
.mixtbl tr.mixadd input{max-width:260px}
.mixaddco{margin-top:4px}
.mixlegend{margin:2px 0 12px;line-height:1.7}

/* 배합기준표 — 시방배합표 줄 (G2b · 2026-09-16) */
.modal.wide .modal-box{max-width:1280px}
.mixtbl{table-layout:auto}
.mixtbl th{font-size:11.5px;text-align:center;padding:3px 2px;line-height:1.3}
.mixtbl th small{font-weight:400;opacity:.75}
.mixtbl th.mixgrp{font-size:11px;letter-spacing:.06em;background:var(--bg)}
.mixtbl th.mixkey{color:var(--teal)}
.mixtbl td{padding:2px 2px}
.mixtbl td input.mixv{max-width:100%;min-width:0;padding:4px 3px;font-size:12px;text-align:right}
.mixtbl td.mixsp{white-space:nowrap;padding-right:8px}
.mixtbl td.mixsp small{display:block;font-size:10.5px;line-height:1.35}
.mixtbl tr.mixnoterow td{padding-top:0;padding-bottom:8px;border-bottom:1px solid var(--line)}
.mixtbl tr.mixnoterow td:first-child{font-size:11px;text-align:right;padding-right:6px}
.mixtbl tr.mixnoterow input{width:100%;font-size:12px;padding:4px 6px}

/* 배합기준표 — 손기입(노랑) / 자동(회색) 구분 (G2c · 2026-09-16) */
.mixtbl td input.mixv.hand{background:var(--hand);border-color:var(--handline)}
.mixtbl td input.mixv.auto{background:var(--bg);color:var(--muted);font-weight:600}
.mixtbl td input.mixv.auto:focus{background:var(--paper);color:var(--ink)}
.mixtbl th.mixautoh{background:var(--bg);color:var(--muted)}
.mixtbl th.mixkey{color:var(--teal)}
.mixtbl tr.mixbad td.mixsp{box-shadow:inset 3px 0 0 var(--orange)}
.mixtbl tr.mixbad td:first-child{background:transparent}
.swatch{display:inline-block;width:11px;height:11px;border-radius:3px;vertical-align:-1px;margin-right:3px}
.swatch.hand{background:var(--hand);border:1px solid var(--handline)}
.swatch.auto{background:var(--bg);border:1px solid var(--line)}

/* 대장 정본 건 표시 (A3 · 2026-09-16) */
.lgtag{margin-left:5px;font-size:10.5px;padding:1px 5px;border:1px solid var(--line);border-radius:4px;
       background:transparent;color:var(--muted);cursor:pointer;opacity:.45;vertical-align:1px}
.lgtag:hover{opacity:1;border-color:var(--teal);color:var(--teal)}
.lgtag.on{opacity:1;background:var(--navy);border-color:var(--navy);color:#fff;font-weight:600}
tr.lgonly td{opacity:.55}
tr.lgonly td:first-child{opacity:1}

/* 배합 누락 경고 (G5 · 2026-09-16) */
#mixwarn{margin:4px 0 0}
#mixwarn .warn{color:var(--orange)}
.mixmiss{margin:4px 0 10px;padding:8px 10px;border-radius:8px;background:var(--hand);
         border:1px solid var(--handline);font-size:12.5px;line-height:1.6}

/* W 상식 범위 밖 · 찌꺼기 정리 (G6 · 2026-09-16) */
.mixtbl td input.mixv.bad{background:#FFE9E0;border-color:var(--orange);color:var(--orange);font-weight:700}
.mixjunk{margin:4px 0 10px;padding:8px 10px;border-radius:8px;background:var(--bg);
         border:1px dashed var(--line);font-size:12.5px;line-height:1.7}
.mixjunk button{margin-left:8px}

/* 수정 모드 (B · 2026-09-16) */
.editbar{margin:0 0 10px;padding:9px 12px;border-radius:9px;background:#FFF6EE;
         border:1px solid var(--orange);font-size:13px;line-height:1.75}
.editbar code{background:#fff}
.editbar button{margin-left:8px}
.editbar small{display:block;margin-top:2px}
.lgtag.ed{margin-left:4px}
.difflist{margin:6px 0 2px;max-height:180px;overflow:auto;line-height:1.7}
.handbox{margin-top:10px}
.handlist{margin:6px 0 0;padding-left:18px;line-height:1.75}
.handlist li{margin-bottom:6px}

/* 대장 전 종목 (C0 · 2026-09-16) */
.lgsum{margin:0 0 8px}
.lgsum small{color:var(--muted)}
.tbl tr.lgconc td:nth-child(3){font-weight:600;color:var(--navy)}

/* 실시대장 표 — 고정 높이 · 붙박이 머리줄 · 필터 (C1 · 2026-09-16) */
.tblbox{max-height:440px;overflow:auto;border:1px solid var(--line);border-radius:10px}
.tblbox table{font-size:12.5px}
.tblbox thead th{position:sticky;top:0;z-index:3;background:var(--paper);
                 box-shadow:inset 0 -1px 0 var(--line), 0 2px 4px rgba(0,0,0,.05)}
.tblbox tbody tr:hover{background:var(--bg)}
.lgbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 9px}
.lgbar .lgsum{font-size:12.5px;color:var(--muted)}
.lgbar .lgsum b{color:var(--ink)}
.lgbar .lgsum b.warn{color:var(--orange)}
.lgpick{display:flex;align-items:center;gap:5px;margin:0}
.lgpick span{font-size:11px;color:var(--muted)}
.lgpick select{padding:3px 6px;font-size:12px;max-width:220px}
/* ★대장 찾기칸 (A19 · 2026-09-18) — 건수가 몇백이 되면 드롭다운만으로는 못 찾는다 */
.lgpick input{padding:3px 7px;font-size:12px;width:165px}
.lgbar button.on{border-color:var(--navy);color:var(--navy);font-weight:600}
.lgshow{font-size:12px;color:var(--orange)}
.lgnote{margin-left:auto}

/* 실시대장 접기/펼치기 (C2 · 2026-09-16) */
.lgtbl tr.lgrow{cursor:pointer}
.lgtbl tr.lgrow:hover{background:var(--bg)}
.lgtbl tr.lgrow.open{background:var(--bg)}
.lgtbl td.lgcar{width:18px;color:var(--muted);font-size:11px;padding-right:0}
.lgtbl .lgbad{margin-left:6px}
.lgtbl tr.lgdetail>td{padding:0 10px 12px;background:var(--bg)}
.itemtbl{width:auto;min-width:min(560px,100%);margin:2px 0 0;font-size:12px;
         border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--paper)}
.itemtbl th{background:var(--bg);font-size:10.5px;padding:5px 10px}
.itemtbl td{padding:5px 10px;white-space:nowrap}
.itemtbl tr.bad td{background:#FFF4EE}
.lgsrc{margin:6px 0 0}

/* A25 잠긴 현장 정보 (09-22) */
input.locked{background:var(--bg);color:var(--muted);cursor:not-allowed}
/* ★E48 (2026-10-01) 하단 사업자 정보 — 표준약관 10023 제3조 ① */
.bizinfo{max-width:1100px;margin:28px auto 20px;padding:10px 16px 0;border-top:1px solid #eef0f3;color:#8a919c;font-size:11px;line-height:1.8;text-align:center;word-break:keep-all}
body.in-app .bizinfo{display:none}  /* ★E64 로그인 뒤 작업 화면에선 숨김 — 초기 화면(로그인)·구매 등록 화면에만 */
.bizinfo a{color:inherit}.bizinfo .pending{color:#b0662f}

/* ★E66 서류함 (2026-10-01) */
.dbbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:8px 0 12px}
.dbbar input{flex:1;min-width:180px}.dbbar #dbsum{margin-left:auto}
.dbt{width:100%;border-collapse:collapse;font-size:13px}
.dbt th,.dbt td{padding:6px 6px;font-size:12.5px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top;white-space:nowrap}
.dbt th{background:#f6f7f9;color:#4b5563;font-weight:600;position:sticky;top:0}
.dbt td.ttl{white-space:normal;min-width:120px;max-width:170px}.dbt td.ttl b{font-size:13.5px}
.dbt tr.closed td{color:var(--muted)}.dbt tr.closed td.ttl b:after{content:" · 마감";font-weight:400;color:var(--muted)}
.dbt .pill{display:inline-block;border-radius:6px;padding:1px 7px;font-size:12px;background:var(--bg);color:var(--muted)}   /* 10-03 D4-10 다크모드 토큰 */
.dbt .pill.ok{background:color-mix(in srgb,var(--teal) 15%,var(--paper));color:var(--teal)}.dbt .pill.half{background:var(--hand);color:var(--soon)}.dbt .pill.no{background:transparent;color:var(--wait)}
.dbt td.act{white-space:nowrap}.dbt td.act button{margin-right:4px;margin-top:2px}
.dbt .files{color:var(--muted);font-size:11.5px;white-space:normal}
.dbempty{padding:28px;text-align:center;color:var(--muted)}
#todo li.gap{background:var(--hand);border-radius:8px;padding:6px 8px;margin:4px -8px}#todo li.gap button{margin-left:4px}
.gapchips .st{margin-right:2px}

/* ★A6·E66-b 메뉴 (2026-10-01) — 「시험 ▾」 드롭다운 · 폰 서랍 · 자주 쓰는 */
.navdd{position:relative;display:inline-block}
.navdd .ddbtn{display:inline-block;color:#fff;padding:6px 14px;border-radius:6px;cursor:pointer;opacity:.8;user-select:none}
.navdd .ddbtn.on,.navdd.open .ddbtn{background:rgba(255,255,255,.22);opacity:1;font-weight:700}
.navdd .ddmenu{position:absolute;top:calc(100% + 6px);left:0;min-width:240px;background:var(--paper);color:var(--ink);border:1px solid var(--line);
  border-radius:10px;box-shadow:0 10px 28px rgba(0,0,0,.14);padding:6px;z-index:40;display:flex;flex-direction:column}
.navdd .ddmenu[hidden]{display:none}
.navdd .ddgroup{font-size:11.5px;color:var(--muted);padding:6px 10px 2px;font-weight:700;letter-spacing:.2px}
.navdd .ddmenu button{color:var(--ink);opacity:1;text-align:left;padding:7px 12px;border-radius:7px;width:100%}
.navdd .ddmenu button:hover{background:rgba(0,0,0,.05)}
.navdd .ddmenu button.on{background:var(--hand,#FFF6D6);font-weight:700}
.navdd .ddsep{height:1px;background:var(--line);margin:6px 4px}
.navdd .ddask{display:block;padding:7px 12px;font-size:12.5px;color:var(--muted);cursor:pointer;border-radius:7px}
.navdd .ddask:hover{background:rgba(0,0,0,.05);color:var(--ink)}
.navtoggle{display:none;color:#fff;font-size:20px;cursor:pointer;padding:2px 8px;border-radius:6px;border:1px solid rgba(255,255,255,.4)}
.drawer{position:fixed;inset:0;z-index:60;display:none}
.drawer.open{display:block}
.drawer .scrim{position:absolute;inset:0;background:rgba(0,0,0,.35)}
.drawer .pane{position:absolute;top:0;bottom:0;left:0;width:min(78vw,320px);background:var(--paper);color:var(--ink);box-shadow:4px 0 24px rgba(0,0,0,.2);
  overflow:auto;padding:14px 12px 24px;display:flex;flex-direction:column;gap:2px}
.drawer .dhead{display:flex;align-items:center;justify-content:space-between;padding:4px 6px 10px;border-bottom:1px solid var(--line);margin-bottom:6px}
.drawer .dhead b{font-size:15px}.drawer .dhead .x{font-size:20px;cursor:pointer;padding:0 6px;color:var(--muted)}
.drawer .dg{font-size:11.5px;color:var(--muted);font-weight:700;padding:10px 8px 2px}
.drawer .di{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:9px;cursor:pointer;font-size:14.5px;background:transparent;border:0;color:inherit;text-align:left;width:100%;font:inherit}
.drawer .di.sub{padding-left:26px;font-size:14px}
.drawer .di.on{background:var(--hand,#FFF6D6);font-weight:700}
.drawer .di:hover{background:rgba(0,0,0,.05)}
.drawer .di small{margin-left:auto;color:var(--muted);font-size:11px}
.drawer a.di{text-decoration:none}
.drawer .dfav{background:rgba(43,168,160,.08);border-radius:10px;padding:4px;margin-bottom:4px}
.askbox textarea{width:100%;max-width:none;min-height:90px;font:inherit;padding:8px;border:1px solid var(--line);border-radius:8px;resize:vertical}
.askbox .row{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;align-items:center}
.askbox .chips{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 10px}
.askbox .chips span{border:1px solid var(--line);border-radius:20px;padding:2px 10px;font-size:12.5px;cursor:pointer}
.askbox .chips span.on{background:var(--teal);color:#fff;border-color:var(--teal)}
@media (max-width:720px){
  nav#nav{display:none!important}
  .navtoggle{display:inline-block}
  header{gap:10px}
}
.navlink[hidden]{display:none!important}

/* ★E43-a 시험번호 마법사 (wizard.js · 2026-10-02) */
.wz .wzrow{margin:10px 0 12px;padding-top:10px;border-top:1px dashed var(--line)}
.wz .wzrow:first-of-type{border-top:0;padding-top:0}
.wz .wzlbl{display:block;font-weight:600;margin-bottom:6px}
.wz label>span:first-child{display:block;font-weight:600;margin-bottom:4px}
.wz .wzopt{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;margin:4px 0;font-weight:400}
.wz .wzopt input[type=radio]{width:auto;max-width:none;flex:none;margin:0 2px 0 0}
.wz .wzopt small{white-space:normal}
.wz #wz_custom{max-width:none;flex:1;min-width:0}
@media (max-width:640px){.wz .wzopt{flex-wrap:wrap}.wz #wz_custom{flex-basis:100%;margin-left:0!important}}
.wz .wzopt code{background:var(--bg);padding:2px 6px;border-radius:6px}
.wz .wzstart{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.wz .wzstart label{display:flex;align-items:center;gap:6px}.wz .wzstart label>span:first-child{margin:0}
.wz .wzstart input{width:84px}
.wz .wzprev{display:flex;gap:14px;flex-wrap:wrap;margin:4px 0}.wz .wzprev code{font-size:15px;background:var(--bg);padding:2px 8px;border-radius:6px}
.wz #wz_short{width:160px;font-size:16px}
#wzline.gap button{margin-left:8px}

/* ★A35 사진 끌어다 놓기 (2026-10-03) */
.phcell[data-drop]{transition:background .12s,border-color .12s}
.phcell.drag{border:2px dashed var(--teal,#2BA8A0);background:#e6f4f3}
.phdrag{outline:2px dashed var(--teal,#2BA8A0);outline-offset:-6px}

/* ★W1 에이전트 받기 상자 (2026-10-03) */
#agentget{margin:0 0 12px}
#agentget .agentsteps{margin:8px 0 6px 18px;padding:0;line-height:1.7}
#agentget .btnlink{display:inline-block;background:var(--teal,#2BA8A0);color:#fff;border-radius:8px;padding:5px 12px;font-weight:700;text-decoration:none}
.eqrow input[data-f="점검결과"]{flex:1 1 110px;min-width:96px;max-width:140px}

/* ★10-03 실시대장 위 — 숫자 카드 + 도구 / 거르기 한 줄 (jem 「오와 열 맞춰 눈으로」) */
.lgtop{display:flex;align-items:stretch;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:0 0 10px}
.lgstats{display:flex;gap:8px;flex-wrap:wrap}
.lgst{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:76px;padding:6px 12px;
  border:1px solid var(--line);border-radius:10px;background:var(--paper);line-height:1.15;font:inherit;color:var(--ink)}
.lgst b{font-size:18px}
.lgst small{font-size:11px;color:var(--muted);margin-top:2px}
.lgstbtn{cursor:pointer}
.lgstbtn.warn b{color:var(--orange)}
.lgstbtn.on{border-color:var(--orange);box-shadow:inset 0 0 0 1px var(--orange)}
.lgtools{display:flex;align-items:center;gap:8px}
.lgtools .ghost2{height:38px;padding:0 14px;font-weight:600}
.lgfilter{display:grid;grid-template-columns:minmax(220px,2fr) minmax(150px,1fr) minmax(180px,1.3fr) auto;gap:10px 12px;
  align-items:end;padding:10px 12px;margin:0 0 6px;background:var(--bg);border:1px solid var(--line);border-radius:10px}
.lgf{display:flex;flex-direction:column;gap:4px;min-width:0}
.lgf label{display:block;margin:0;font-size:12px;font-weight:600;color:var(--ink)}
.lgf label small{font-weight:400;color:var(--muted);margin-left:4px}
.lgf input,.lgf select{width:100%;max-width:none;height:34px;box-sizing:border-box;padding:4px 9px;font-size:13px}
.lgf-end{flex-direction:row;align-items:center;justify-content:flex-end;gap:8px;height:34px;white-space:nowrap}
.lgf-end .ghost2{height:34px}
.lgshow{font-size:12.5px;color:var(--orange)}
.lgshow.quiet{color:var(--muted)}
.lgnote{margin:0 0 9px;font-size:11.5px}
.lgf label small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lgf label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:760px){
  .lgstats{display:grid;grid-template-columns:repeat(4,1fr);width:100%}
  .lgst{min-width:0;padding:6px 4px}
  .lgsthint{display:none}
  .lgf label small{display:none}
  .lgfilter{grid-template-columns:1fr 1fr}
  .lgf-find{grid-column:1 / -1}
  .lgf-end{grid-column:1 / -1;justify-content:flex-start}
  .lgtools{width:100%}.lgtools .ghost2{flex:1}
}
/* ★10-03 날짜순 정리 확인창 — confirm 은 긴 글이 잘려 백데이터 개수·표기 줄이 안 보였다 → 모달 표 */
.srt-sum{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.srt-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.srt-tbl th,.srt-tbl td{border-bottom:1px solid var(--line);padding:5px 8px;text-align:left}
.srt-tbl td.num{text-align:center;white-space:nowrap}
.srt-sec{margin:14px 0 6px;font-weight:700;font-size:13px}
.srt-warn{color:var(--orange);font-size:12.5px;margin:4px 0}
.srt-btns{display:flex;justify-content:flex-end;gap:8px;margin-top:16px;position:sticky;bottom:0;background:var(--paper);padding-top:8px}

/* ★E70 (10-03) 설정 일반/레미콘 서브탭 · D4-6 위쪽 고정 저장 바 */
.setbar{position:sticky;top:0;z-index:5;background:var(--bg);padding:10px 0 10px;margin:-6px 0 12px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.setbar #setsave{margin-left:auto}
.settabs{display:flex;gap:4px;background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:3px}
.settab{border:0;background:transparent;border-radius:8px;padding:7px 16px;cursor:pointer;color:var(--muted);font-weight:600}
.settab.on{background:var(--teal);color:#fff}
.dbfilter{grid-template-columns:minmax(220px,2fr) auto}   /* 10-04 현황: 기간·공종은 위 집계 거르기로 올라감 */
/* ★E65 S1 현황 (2026-10-04) — 집계 거르기 틀 · 숫자 타일 · 집계 표 · 집계 시작일 */
.stfilter{grid-template-columns:minmax(150px,1fr) minmax(130px,1fr) minmax(150px,1fr) auto}
.sttiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(150px,100%),1fr));gap:8px;margin:8px 0 10px}
.sttiles .stt{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:var(--paper)}
.sttiles .stt .k{font-size:11.5px;color:var(--muted)}.sttiles .stt .v{font-size:19px;font-weight:700;margin-top:2px}.sttiles .stt .v small{font-size:12px;font-weight:400;color:var(--muted)}
.sttiles .stt.warn .v{color:var(--soon)}.sttiles .stt.bad .v{color:#b91c1c}
.dbt.stt2 td.num,.dbt.stt2 th.num{text-align:right;font-variant-numeric:tabular-nums}
.dbt.stt2 td.num small{color:var(--muted);font-size:11px;margin-left:3px}
.dbt.stt2 tr.total td{font-weight:700;border-top:2px solid var(--line);background:var(--bg)}
.dbt.stt2 td.rowname{white-space:normal;min-width:110px;font-weight:600}
.stnote{margin:8px 0 0}
/* ★E65-b 시험 실적 — 재료 줄(소계) 굵게 · 종목 줄 들여쓰기 · 두 줄 머리 */
.dbt.tst tr.mat td{background:var(--bg);border-top:1px solid var(--line)}
.dbt.tst tr.sub td.rowname{font-weight:400;padding-left:22px;color:var(--ink,inherit)}
.dbt.tst th.gh{text-align:center;border-bottom:1px solid var(--line)}
.dbt.tst td.num .pill{min-width:22px;text-align:center}
.dbt .pill.bad{background:#fee2e2;color:#b91c1c;font-weight:700}
@media (max-width:640px){.stfilter{grid-template-columns:1fr 1fr}.sttiles .stt .v{font-size:16px}}

/* ★E44-1b 인쇄 나눔 어긋남 줄 (실시대장 탭) */
.lgbrk{margin:8px 0 10px;padding:8px 12px;border:1px solid #f0c36d;background:#fff8e6;border-radius:8px;font-size:13px}
.lgbrk-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}
.lgbrk ul{margin:6px 0 0;padding-left:18px}
.lgbrk li{margin:2px 0}
.lgbrk-ok{margin:6px 0 8px}
